VECT 2.0ランサムウェアは、攻撃者自身の復号ツールでさえ確実に復元できないファイルを被害者に残す可能性があります。研究者たちは以前、大きなファイルの前半部分のノンスが破棄されるというクロスプラットフォームの設計上の欠陥を明らかにしましたが、今回のWindows向け分析では、さらなる回復の隙間を生み出す追加の実装エラーが確認されました。
これらのエラーにより、ファイルが名前変更のみで終わっていたり、部分的にしか暗号化されていなかったり、一貫性のない変更が加えられていたりと、復号ツールでは元に戻せない形で損傷している可能性があります。
今回分析したサンプルは、VECT 2.0ランサムウェアとラベル付けされた64ビットのWindows PEファイルです。関連するビルドとの比較により、VECT共通の動作とこのWindows実装に固有の問題点を切り分けることができました。
VECTは除外方式でターゲットを絞ります。アクセス可能なフォルダをたどりながら、特定のシステムディレクトリ、保護されたファイル名、そして.exe、.dll、.sysといった実行ファイルをスキップします。
つまり、通常の業務データ(ドキュメント、PDF、アーカイブ、バックアップ、データベース、仮想ディスク)は、アクセス可能な状態であれば暗号化の対象となります。
重要な点として、ファイルの処理順序があります。VECTは暗号化を開始する前に、ファイル名に.vectという拡張子を付加してリネームします。
そのため、.vectが付いているファイルは処理が開始されたことを示すものの、暗号化が完了したことを保証するものではありません。ファイルは名前が変更されても、平文のまま、部分的に変更された状態、または構造的に不整合な状態のまま残る場合があります。
Morphisecによれば、同社の技術はこの問題の両面に対応するように設計されています。VECTが攻撃を完了させないようにブロックすること、そして暗号化が発生した後に対象ファイルを復元することです。
ファイルには、マジックマーカー、バージョン番号、元のファイルサイズ、チャンクテーブル、暗号化されたキーのブロブ、認証タグのいずれも含まれていません。分析したサンプルでは、暗号化プログラムはファイル間で暗号化コンテキストを再利用しながら、暗号化する各領域に対して新しい12バイトのノンスを生成します。
この設計により、既知の大ファイル問題が生じます。128 KBを超えるファイルに対して、VECTはファイルを4つの象限に分割し、それぞれの象限の先頭にある32 KBのブロックを4つの異なるノンスで暗号化しますが、ディスクに書き込むのは最後のノンスのみです。
以前のノンスが失われているため、復号ツールは他の暗号化された領域を再構築できず、復元を試みた後にファイルが破損した状態になります。
VECT 2.0ランサムウェアによるファイル破損
このノンス喪失という設計上の問題に加え、Windowsビルドにはさらなる実装上の欠陥があり、回復可能性をより一層悪化させています。第一に、シングルパス暗号化のパスにバッファサイズの不一致が含まれています。
VECTがディスクに書き込むメタデータは最小限です。このランサムウェアは、暗号化時に使用した最後のChaCha20 IETFノンスを格納する12バイトのトレーラーを追記するだけです。

0x20000バイト(128 KB)以下のファイルは、ファイルサイズ全体をReadFileに渡す可能性のあるコードパスに振り分けられますが、コンテンツ読み込み用に実際に割り当てられる暗号化バッファは0x8000バイト(32 KB)しかありません。
そのため、サイズが32 KBから128 KBの間のファイルは、サイズが不足したバッファに読み込まれる可能性があります。タイミングや実行時の条件によっては、暗号化されずに名前変更だけが行われたり、処理が途中で失敗したり、書き込みによってファイルが不整合な状態になったりすることがあります。
第二に、暗号化プログラムはファイルごとの状態を保持するためにプロセス全体で共有されるバッファを使用します。.vectファイル名を構築するルーティンは共有パスバッファを使用し、コンテンツ読み込みバッファ(32 KB)はワーカースレッド間で再利用されます。
VECTは処理を高速化するために、スキャナーと暗号化のワーカーを並行して作成しますが、ファイルごとのルーティンはその状態をローカルに保持しません。
並行実行時には、あるワーカーが別のワーカーがまだ依存しているパスやコンテンツバッファを上書きしてしまう可能性があります。
このような競合状態により、部分的にしか書き込まれていないファイルや破損したファイル、不整合なファイル名、その他一般的な復号ツールでは対処できない異常が発生する可能性があります。
こうした設計と実装の問題により、VECTが生成する暗号化ファイルは単一の統一されたクラスになることがほとんどありません。
同じ.vect拡張子でも、名前変更だけが行われたファイル、シングルパスで暗号化されたファイル、暗号化ブロックが散在する大きなファイル、または書き込み失敗やバッファの競合によって不整合な状態のままのファイルを示す場合があります。
一般的な復号ツールは一貫したファイル形式を前提としているため、その前提が崩れると復元に失敗します。だからこそ、これらのエッジケースを理解した上で攻撃を早期にブロックし、安全な場合には適切な復元を行う予防・回復ツールが、VECT 2.0による被害を最小限に抑えるために不可欠です。
翻訳元: https://gbhackers.com/vect-2-0-ransomware-breaks-files/