[レポート]ブルーチームの新潮流 – 実用的なシンボリックエンジンによる巧妙なマルウェア・ランサムウェアの検知 – CODE BLUE 2022 #codeblue_jp
こんにちは、臼田です。
今回はCODE BLUE 2022で行われた以下のセッションのレポートです。
ブルーチームの新潮流 - 実用的なシンボリックエンジンによる巧妙なマルウェア・ランサムウェアの検知
マルウェアやランサムウェアの疑いのあるバイナリ、特にバリアント、埋め込み型エクスプロイト、複雑なランサムウェアなどの難読化技術を持つバイナリをリバースエンジニアリングする場合、ブルーチームや防御側の人間はさまざまな課題に直面する。まず、そのサンプルに労力を費やす価値があるかどうか(何がユニークで、チャレンジングで、新しいのか)を見極めること、そして次に、静的解析、動的解析、またはその両方を選択することだ。 静的解析では、ランタイム中にしか見えない難読化された悪意のあるプログラムを検出できる可能性や機会を諦めることになり、動的解析では、労力と時間がかかり、高度なスキルと経験が必要で、言うまでもなく、サンドボックスエミュレーションや仮想化環境からバイナリが抜け出すという脅威がある。
われわれは、マルウェア/ランサムウェアの疑いのあるバイナリを検出・分析するためのシンボリック実行エンジンの使用を通じて、ブルーチームのツールボックスに新たなツールを加えることができると考えている。実用的なシンボリックエンジンは、バイナリの実行可能なパスの多くを解析し、これらのパスをシンボルとして表現させることで役に立つ。このエンジンは、比較的低い計算資源で悪意のある実行経路を解析し、命令のセマンティクスに基づく文脈的関係の解析、難読化されたAPIのテイントやファジー識別を行うことができる。
学術研究と実用研究の融合と改良に基づく実用的なシンボリックエンジンを使用することで、シンボリックシグネチャを介して、さまざまなエクスプロイト、テクニック、複数のマルウェア/ランサムウェア亜種を識別・検出することができる。完全静的な状況下での攻撃手法やランサムウェアの振る舞い、たとえマルウェアバイナリが難読化されていても、静的に解析し、効果的に検出することができる。
Presented by : マース・チェン - Mars Cheng シェン・ハオマ - Sheng-Hao Ma ハンク・チェン - Hank Chen
レポート
- 物理的なシンボリックエンジンを使う
- 現実的な方法を提案する
- いろんなマルウェアがある
- 挙動も異なる
- いろんな解析手法がある
- 最近はランサムウェアのインパクトが大きい
- ランサムウェアのレイヤードセキュリティを考える
- よく検知している
- どのような挙動があるか
- いろんなランサムウェアの挙動を調査した
- 異なったテクニック
- 言語も異なる
- 1つわかっているのは暗号化の機能がある
- Cipher Suiteも調査
- ランサムウェアは複雑
- 特定
- シグネチャベース
- ビヘイビア
- ヒューリスティック
- 1つの仕組みでは特定が難しい
- 難読化されていると難しい
- ふるまいは時間がかかる
- スタティックでもダイナミックでも問題がある
- 特定
- 悪意があるかどうかではなく挙動を特定したい
- 脅威の状況
- いろんな研究からアイデアを得ている
- 2005年の論文
- Semantics-Aware Malware Detection
- しかしツールはなかった
- 難読化されたものに適用できなかった
- 2018年の論文
- Towards Generic Deobfuscation of Windows API
- 2019年
- Asm2Vecの論文
- シンボリック実行とは
- 難読化された場合
- APIを悪用している
- APIとパラメータがわかれば挙動の評価ができる
- なぜシンボリック実行を使うのか
- 軽量である
- シンボリック実行をすべてでやらなくていい、必要なところだけ
- フルで静的解析しなくていい
- セマンティック解析を使うと偽陽性が高い
- シンボリックエンジン
- 様々なファンクションがある
- セマンティックシグネチャを作ってルールとする
- 標的に適用する
- 悪意があるかだけでなく
- このエンジンを使って静的解析
- 中身
- Control Flow
- Taint Analysis Module
- 完全に難読化されたバイナリを検証に使う
- 関数テーブルを使って必要なAPIを確認
- TCSAを利用して解析
- 難読化されているので中味がわからない
- TXOne Code Semantics Analyzer
- Pythonベース
- フォローアップ解析に利用できる
- ルールで関数コールも見ることができる
- どのバイナリが実行しているのか、どんなテクニックを使っているかわかる
- リターンを解析する
- ルールも書ける
- 最低3関数
- callback
- initialize
- cleanup
- ルールによって疑わしいコードをコールできる
- yaraルールなどを適用
- 実際の例
- 検知を避ける仕組みがある
- CRC32を利用する
- ルールを作成して検知する
- ヘッダのイメージ取得
- 疑わしきアドレスを入れる
- 何にアクセスしているかで挙動を判断する
- 悪意があることを特定するだけでなく関数まで特定できる
- どうやって対応するか
- Process Hollowing
- マルウェアを検知しにくくするために利用している指標
- プロセスの文字列を置き換える
- Windows APIを使った特定は難しい
- イメージベースをPEBの中で修正
- マルウェアのモジュール置き換えを判断する
- しかしこれは難読化されて検知が難しい
- TCSAで検知
- 悪意のある挙動化確認する
- Process Hollowingを特定
- サンプルを収集してみた
- 全体の61%を特定できた
- もう一つ
- ランサムウェアによって暗号化されたら検知するにはどうしたらいいか
- 特徴は3つ
- 列挙
- 操作
- 暗号化
- 同じファイルがファイルオペレーションで使われていたかチェック
- FindFileのリターンと引数を確認する
- オペレーション
- ファイル列挙のAPIを特定
- 暗号化
- 難読化特定API
- 検知ルールはDetection docで検証
- 亜種も含めて検知できた
- PwndLockerを検知することができなかった
- 未知の暗号アルゴリズムだった
- これに対して検知をあげようとしている
- 実験をして偽陽性を確認した
- 重要な点
- 現在の検知手法の問題点
- 新しい手法は従来の手法に勝っている
- コミュニティに参加してTCSAのルールを書いて
感想
様々な難読化などがされてマルウェア解析は大変ですね。