FLOSS - マルウェア用 難読化文字列抽出 チートシート
FLOSS (FLARE Obfuscated String Solver、Mandiant製)は、マルウェアから難読化された文字列を自動的に抽出する。著者は定期的にURL、レジストリキー、コマンドを非表示にし、古典的なstringsユーティリティはまったく役に立たない結果を見つける。FLOSSはさらに進む:バイナリ内のデコード処理を特定し、それらをエミュレートし、プレーンテキストを回復 — 静的抽出では見ることができないスタック文字列、タイト文字列、デコード文字列を表示する。これはWindowsマルウェアサンプルのトリアージの最初のステップツール。
マルウェアは分離されたVM/サンドボックスでのみ分析する。FLOSSはサンプルからコードをエミュレート。
インストール
| 方法 | コマンド |
|---|
| スタンドアロン バイナリ | GitHub Releasesからダウンロード (Windows/Linux/macOS) |
| pip | pip install flare-floss |
| 確認 | floss --version |
基本使用法
| コマンド | 説明 |
|---|
floss malware.exe | すべての文字列タイプを抽出 |
floss -j malware.exe | JSON出力 |
floss --no static malware.exe | プレーン静的文字列をスキップ |
floss -n 6 malware.exe | 最小文字列長 6 |
floss --help | 完全なオプション一覧 |
FLOSS が回復する文字列タイプ
| タイプ | 何か |
|---|
| 静的 | 通常の文字列 (stringsが見つけるもの) |
| スタック | 実行時にスタック上に文字単位で構築 |
| タイト | タイトループで構築され、一度にメモリ全体に存在しない |
| デコード済み | デコード処理 (XOR、RC4、カスタム)によって作成 |
最後の3つは価値追加 — stringsでは見ることがないなぜなら、ファイルに連続バイトとして存在しないから。
分析タイプの選択
| フラグ | 効果 |
|---|
--only static | プレーン文字列のみ (高速) |
--only stack | スタック文字列のみ |
--only tight | タイト文字列のみ |
--only decoded | エミュレート/デコード文字列のみ |
--no decoded | エミュレーションフェーズをスキップ (遅い) |
# 高速トリアージ:エミュレーションをスキップ
floss --no decoded sample.exe
# ディープパス:すべて、ツール用JSON
floss -j sample.exe > strings.json
トリアージシグナル グレップ
| パターン | 示唆 |
|---|
| URL / IP | C2インフラストラクチャ |
HKLM\、HKCU\ | レジストリ経由で永続性 |
cmd.exe、powershell | コマンド実行 |
CreateRemoteThread、VirtualAlloc | プロセスインジェクション |
| Base64 ブロブ | 埋め込みペイロード |
.onion、ウォレットアドレス | ランサムウェア/流出 |
floss sample.exe | grep -iE "http|\.exe|HKLM|powershell|AppData"
出力と統合
| オプション | 目的 |
|---|
-j / --json | パイプライン用のマシン読み取り可能出力 |
-v / -vv | 詳細 / デバッグ |
--functions 0x401000 | 特定の関数にエミュレーション焦点 |
| IDA/Ghidra スクリプト | 回復した文字列を逆アセンブリに戻して注釈付け |
FLOSSの出力をGhidraにコメントとして戻すことで、その後の手動分析がはるかに高速化される。
共通のワークフロー
# 標準マルウェア トリアージシーケンス
floss -j sample.exe > floss.json # 文字列を回復
jq -r '.strings.decoded[].string' floss.json | sort -u # デコード済みに焦点
# → 興味深い文字列を生成した関数で Ghidra/x64dbg にピボット
# バリアント比較:サンプル間で変更された文字列?
floss --no decoded a.exe > a.txt; floss --no decoded b.exe > b.txt
diff a.txt b.txt
FLOSS vs 関連ツール
| ツール | 回復 |
|---|
| FLOSS | 静的+スタック+タイト+デコード (エミュレーション) |
strings | 連続するプリント可能バイトのみ |
| capa | 能力/動作、文字列ではない |
| Detect It Easy | パッカー/コンパイラ識別 |
標準トリアージトリオ:Detect It Easyでパッキングを識別し、FLOSSで文字列を回復し、capaで機能を列挙。
リソース