← ブログに戻る

$MFT におけるランサムウェアの姿

· 読了 2 分

ランサムウェアはほぼあらゆるホストで、毎回ほぼ同じことをします。ファイルを列挙し、各ファイルを読み、暗号化されたコピーを書き、オリジナルを削除します。すべてのステップが $MFT に着地します。その形を知っていれば、バイナリを見つけたり身代金メモを読んだりすることなく、MFT を受け取ってから数分以内にインシデントがランサムウェアの実行であることを確認できます。

これはパターンと、私が見たバリエーション、そして表面的には似ているがランサムウェアではない他の形の大量ファイル活動との区別の方法です。

3 つのシグナル

一斉の拡張子変更。 同じ親ディレクトリと同じベース名で、異なる拡張子を持つ新しいファイルが現れます。report.docxreport.docx.lockedreport.encryptedreport.crypted_{guid}、または report.docx.[victim_id].lockbit になります。短時間ウィンドウでそうしたペアがいくつ現れたかを数えることが、$MFT におけるランサムウェアの最も明確な指標の 1 つです。1 分間に数百件が単一のユーザープロファイルや共有上に現れるのがシグネチャです。

数秒以内にクラスタ化された $STANDARD_INFORMATION 作成タイムスタンプのバースト。 通常のユーザー活動は、1 つか 2 つの spurt でファイルを作成します。ランサムウェアは数千単位で作成します。SI created タイムスタンプを疑わしいウィンドウにわたるヒストグラムとしてプロットすると、暗号化実行はベースラインを覆い隠す垂直なスパイクとして現れます。スパイクの幅はランサムウェアがどれくらい速く実行されたかを示します(マルチスレッドの現代の亜種は 1 分未満でユーザープロファイルを完了します。古いシングルスレッドのものは長くかかり、スパイクは広がります)。

暗号化された複製と一致する削除されたオリジナル。 すべての report.docx.locked について、IN_USE フラグが今クリアされている対応する report.docx が通常あります。削除されたレコードは、スロットが再利用されるまで $MFT に座っています。削除されたスロットから直接、オリジナルの名前、サイズ、タイムスタンプを回復できます。同じウィンドウの $UsnJrnl FILE_DELETE reason とこれを組み合わせると、操作順序が曖昧でなくなります。

知っておく価値のあるバリエーション

すべてのファミリーが同じパターンに従うわけではありません。私が見るバリエーション。

  • In-place 暗号化。 一部のファミリー(古い Sodinokibi の亜種、特定の Conti ビルド)は、オリジナルファイルを開き、暗号化バイトを同じファイルに書き戻し、リネームします。別の「暗号化されたコピー」ファイルは存在せず、削除されたオリジナルのパターンは消えます。1 分間に数千ファイルに対する $UsnJrnl DATA_OVERWRITE は依然として騒がしく、リネームは RENAME_OLD_NAME / RENAME_NEW_NAME のペアを残します。
  • 間欠暗号化。 BlackCat と最近のいくつかのファミリーは、実行を高速化するためにファイルのチャンクのみ(たとえば 100 KB ブロックおきに)を暗号化します。ファイルサイズはほとんど変わらず、変更時間は更新されますが、$DATA クラスタはほぼ無傷です。$MFT での見た目は軽いですが、USN ジャーナルには依然として書き込みが現れます。
  • リネームのみ。 少数の「フェイクランサムウェア」ワイパーは、ファイルを暗号化せずにリネームします。MFT のパターンは本物のランサムウェア実行と同一で、両者を区別するのはファイル内容分析のみです。
  • ネットワークドライブへの影響。 多くのファミリーはマップされたドライブを列挙し、ネットワーク越しに暗号化します。ローカルの MFT は実際のインシデントで予想されるよりも少ない変更を示します。ファイルサーバーの MFT が大半を保持します。

身代金メモ

ほとんどのファミリーは、HOW_TO_DECRYPT.txtREADME_FOR_DECRYPT.htmlrestore-files.txt、またはブランド固有の亜種のような名前で、影響を受けた各ディレクトリに身代金メモをドロップします。メモは同じ内容、同じサイズで、作成時間は暗号化と同じウィンドウ内にクラスタ化されています。多くの親ディレクトリにまたがって広がる、同じサイズのテキストまたは HTML ファイルを多数 MFT で走査すると、名前パターンよりも先に見つかることがよくあります。

メモはベースラインとしてもフォレンジック上有用です。それらの作成時間は本質的に「このディレクトリでランサムウェアが活動した最も早い瞬間」のスタンプです。02:14 のメモがあるディレクトリに、同じディレクトリ内の 02:09 の暗号化されたファイルがあれば、ランサムウェアはメモをドロップする前に列挙して暗号化したのです。これがファミリーのフローについて少し教えてくれます。

$MFT が教えてくれないこと

MFT は 何がいつ を確認します。どのプロセスが書き込みを行ったか、オペレーターがどこから入ったか、ランサムウェアがどうやってホストに入ったかは教えてくれません。これらには。

  • ウィンドウ内でどの実行ファイルが実行されたかの証拠として PrefetchAmcacheShimcache
  • コマンドライン、親、ハッシュ付きのプロセス作成のための Sysmon Event ID 1
  • コマンドライン監査が有効化されていた場合のプロセス作成のための Security Event 4688
  • ファイルのオープン/読み取り/書き込み/リネーム/削除操作の正確な順序のための USN journal $J
  • マシンがまだ生きていて暗号化プロセスがまだ常駐していれば RAM ダンプ。メモリ内の暗号化キーが得られることがあります。
  • 初期アクセスベクトルのための ブラウザ履歴 とメールアーティファクト。

MFT 単独で、緊急の運用上の質問に答えます。実行がいつ始まったか、どれだけ広範か、どのファイルが触れられたか。これは回復の決定を下すのに十分です。アトリビューションは MFT を 1 つの入力として使う別の演習です。

VSS 削除が決め手

ほとんどのランサムウェアファミリーは、暗号化を開始する前に Volume Shadow Copy を削除しようとします。VSS スナップショットがあると被害者は支払わずに復元できるためです。通常のコマンドは vssadmin delete shadows /all /quiet です。これは次を残します。

  • Windows System Event Log エントリ(VSS サービスメッセージの Event ID 8224)。
  • Sysmon がデプロイされていれば、vssadmin.exe の呼び出しに対する Sysmon Event ID 1
  • ホスト上の新しいが空の VSS 状態。vssadmin list shadows は何も返さないか、インシデント後のスナップショットのみを返します。

VSS スナップショットがないホストと、最近の再作成を示す \$Extend\$UsnJrnl MFT レコードシーケンス番号が見えれば、暗号化実行が目に見えて始まっていなくてもランサムウェアの準備があります。回復可能なものについては VSS と $MFT を参照してください。

私が従うトリアージシーケンス

  1. 疑わしいホスト(または VSS が以前のものをまだ持っていればスナップショット)から $MFT$UsnJrnl:$J を取得します。
  2. MFTECmd または mft_dump で MFT を解析します。SI created を降順にソートします。上位 1,000 エントリを見ます。
  3. 上位エントリが分単位のウィンドウ内にクラスタ化されており、その多くが異常な拡張子を持つなら、ランサムウェアフットプリントがあります。
  4. 対応する削除されたレコードを取得します。それらの $FILE_NAME 属性がオリジナルのファイル名を与えます。これで何が暗号化されたかが分かります。
  5. USN ジャーナルとクロスリファレンスします。同じ瞬間に暗号化されたファイルの FILE_CREATE とオリジナルの FILE_DELETE がパターンを確認します。
  6. 身代金メモを特定します。多くのディレクトリに同じ時間に現れる、異常な名前(HOW_TO_DECRYPT、RECOVERY、README_RESTORE)の小さなファイルです。その内容がファミリーの名前を示します。
  7. ファミリー名から既知の IOC へピボットします。ファイルハッシュ、C2 ドメイン、レジストリ永続化、および他のログ内の既知のキルチェーンアーティファクトです。

そのシーケンスは通常、単一のホストで 30 分未満で完了し、コンテインメントを決定して回復計画を開始するのに十分な情報を与えます。

参考資料

外部リソース