メモリの中は「散らかったタンス」? 泥棒を見つけるための「YARAルール」最適化術
こんにちは!SOC(セキュリティオペレーションセンター)で日々、怪しい通信や不正なプログラムと格闘している現場担当者です。
今日は、少しマニアックだけどめちゃくちゃ大事な「メモリフォレンジック」のお話です。特に、メモリという「巨大なタンス」の中に隠れた泥棒を見つけ出すための武器、「YARAルール」の賢い使い方について紐解いていきます。
「メモリフォレンジック? YARAルール? 何だか難しそう…」と思うかもしれません。でも、大丈夫。身近な例えから一歩ずつ、一緒に見ていきましょう!
—
メモリを「家のタンス」に例えると?
皆さんのパソコンやサーバーで動いている「メモリ(RAM)」は、例えるなら「今、家族が着ている服や、明日使う予定の服が全部放り込まれている大きなタンス」のようなものです。
泥棒(攻撃者)は、このタンスの中にこっそり自分の服(不正なプログラム)を紛れ込ませます。私たちは、タンスの中身を全部ひっくり返して「この服は家族のものじゃないぞ!」と見つけ出す必要があるわけです。これがメモリフォレンジックです。
その際、「この服の柄は怪しい!」と見つけるための「お尋ね者リスト」が、まさに「YARAルール」です。
—
なぜ、普通の検索じゃダメなの?
「特定の文字列(ファイル名など)を検索すればいいのでは?」と思うかもしれません。しかし、今の攻撃者は賢いです。
- 断片化(バラバラ): 泥棒はわざと服を切り刻んで、タンスのあちこちに隠します。
- 変装: プログラムのコードを少しだけ書き換えて、検索に引っかからないようにします。
単純な「この文字列を探せ!」という命令では、バラバラにされた攻撃者の痕跡を見逃してしまいます。そこで、私たちは「柔軟な検索ルール」を書く必要があるのです。
—
YARAルールを「最適化」する3つのコツ
メモリという広大な空間をスキャンする際、何も考えずにルールを書くと、スキャンが終わるまで丸一日かかったり、無関係なものまで「泥棒だ!」と誤検知(アラートの山)したりします。
1. ワイルドカードで「断片化」に対応する
メモリ上では、データは連続しているとは限りません。そんな時はワイルドカードを活用しましょう。
rule suspicious_pattern {
strings:
// 連続したコードではなく、間隔が空くことを想定する
// { 00 11 22 } の後に、どんなデータが 1〜10バイト挟まってもOKとする指定
$malware_signature = { AA BB CC [1-10] DD EE FF }
condition:
$malware_signature
}
2. パフォーマンスを意識した検索範囲の指定
全部をスキャンするのは非効率です。例えば、Windowsのメモリであれば、MZというヘッダー(プログラムの開始合図)から始まる領域だけをターゲットにするのが鉄則です。
rule optimized_scanner {
strings:
$header = "MZ" // Windows実行ファイルの合図
$mal_func = { 8B 45 08 50 68 ?? ?? ?? ?? }
condition:
// MZヘッダーが近くにある、かつ特定の命令が含まれる場合のみ検知
$header at 0 and $mal_func in (0..1024)
}
3. 誤検知(False Positive)を減らす工夫
「このコードは怪しい!」と思っても、実は普通のOSの機能だった…ということがよくあります。これを防ぐには、「これが入っていたら、むしろ安全(除外リスト)」という条件を追加します。
rule final_check {
strings:
$pattern = { EB FE 48 83 EC 28 } // 怪しい命令
$trusted_sign = "Microsoft Corporation" // 信頼できる署名
condition:
$pattern and not $trusted_sign
}
—
現場からのアドバイス:完璧を目指さない
最後に、一番大切なことをお伝えします。
現場で一番怖いのは「見逃し」ですが、同じくらい怖いのは「あまりに多くの誤検知で、SOC担当者が疲弊して警告を無視し始めること」です。
最初から完璧なYARAルールを作ろうとせず、「まずは少しだけ検知させて、そこからノイズ(誤検知)を一つずつ消していく」というアプローチが、結果的に一番早く泥棒を捕まえられる道になります。
まずは手元の検証環境で、yara -f オプション(高速化オプション)を使いながら、自分の書いたルールがどれくらいの時間で終わるか計測してみてください。
セキュリティ対策は、一晩で完成するものではありません。今日の小さな工夫が、将来の大きなインシデントを防ぐ「鍵」になります。一緒に頑張っていきましょう!
—
執筆者紹介:
現場の泥臭い調査を愛するSOCアナリスト。メモリダンプの解析中に飲むコーヒーが一番のエネルギー源。次回のテーマは「ネットワーク通信の不審なパケットを追いかけるコツ」です。お楽しみに!
コメント