Yamato-Security / hayabusa

Hayabusa (隼) is a sigma-based threat hunting and fast forensics timeline generator for Windows event logs.
GNU Affero General Public License v3.0
2.26k stars 200 forks source link

Support Field|base64offset|contains: aggregator #705

Closed YamatoSecurity closed 1 year ago

YamatoSecurity commented 2 years ago

現在9件のルールがField|base64offset|contains:を使っていますが、対応していないので、使えません。

.//wmi_event/sysmon_wmi_susp_encoded_scripts.yml:        Destination|base64offset|contains:
.//process_creation/proc_creation_win_encoded_frombase64string.yml:    - CommandLine|base64offset|contains: '::FromBase64String'
.//process_creation/proc_creation_win_encoded_iex.yml:    - CommandLine|base64offset|contains:
.//process_creation/proc_creation_win_powershell_defender_disable_feature.yml:        CommandLine|base64offset|contains:
.//process_creation/proc_creation_win_powershell_defender_base64.yml:        CommandLine|base64offset|contains:
.//builtin/security/win_security_cobaltstrike_service_installs.yml:        ServiceFileName|base64offset|contains: "IEX (New-Object Net.Webclient).DownloadString('http://127.0.0.1:"
.//builtin/system/win_cobaltstrike_service_installs.yml:        ImagePath|base64offset|contains: "IEX (New-Object Net.Webclient).DownloadString('http://127.0.0.1:"

containsで検知したい文字列はbase64でエンコードされていますが、offsetによってエンコードされた文字列が3つの可能性になります。 正しく検知するのに、ルール変換時に3つのbase64でエンコードされた文字列を探す必要があります。

CyberChefで3つのoffsetを計算する例:

Screen Shot 2022-09-25 at 6 39 02

詳細情報: base64-offset

注意: hayabusa.pyのバックエンドが対応していないので、変換時に失敗して、変換されたファイルが作成されません。Field|base64offset|contains:を無視するようにhayabusa.pyを修正する必要があります。

この機能は全部hayabusa.pyで対応して、変換時に3つのエンコードされた文字列を出力するようにできますが、便利なのでhayabusaルールでもField|base64offset|contains:に対応したいです。

hitenkoku commented 2 years ago

mtg memo: hayabusa.pyの実装は、かなり難しい(現状すべての動作が把握できているわけではない)ので、hayabusa側で対応したほうが良さそう。とは言えhayabusa側でも注意して実装しないと遅さに直結することになる。 (現在の構成に処理を追加することで対応はできる)。

YamatoSecurity commented 2 years ago

因みに|base64offset|equalsfieldとか|base64offset|startswith等々の他の組み合わせに対応しなくても良いはずなので、2つのパイプは入っているが|base64offset|contains|base64offsetcontainsというような一つのaggregatorとして実装した方が良いかもしれません。ま、|base64offset|startswith|base64offset|endswithというルールは今ありませんが、一応有り得そうです。 |base64offset|equalsfield|base64offset|reの組み合わせは不可能です。

(メモ)

hitenkoku commented 1 year ago

ref: https://github.com/gchq/CyberChef/blob/a3b873fd96111fe2dbcb62a1e037987669290a13/src/core/operations/ShowBase64Offsets.mjs#L60

hach1yon commented 1 year ago

sigmaルールからhayabusaルールに変換するスクリプトの方も修正する必要あり。