4月3日更新。暗号化スキームについてより詳しく追記した。
Petyaは邪悪なひねりが加えられている新しいランサムウェアだ。ディスク上のファイルを暗号化する代わりに、ディスク全体をロックしてほとんど使い物にならない状態にする。具体的には、ファイルシステムのMFT(master file table)を暗号化する。つまりOSからファイルの位置が特定できなくなることを意味する。Petyaは、ブートキットと同様に自身をディスクのMBR(master boot record)にインストールする。ただし、秘密裏に活動するのではなく、赤い画面上にシステムを復旧する方法についての説明を表示する。
MFTを狙うと素早く攻撃できる。データファイルを暗号化するより極めて短時間で済むのだ。それでも全体的な結果としては暗号化と同じ、すなわちデータにアクセスできなくなる。
Petyaは2段階で実行する。第1段階はメインのドロッパーで、以下を実行する。
- \\.\PhysicalDriveを直接操作してMBRに感染させる
- 一連の暗号キーを生成する。これには16バイトのランダムなディスク暗号用のキーと楕円暗号(EC、Elliptic Curve)のキーペアが含まれる。この時点で、特別な「復号コード」も用意される
- あとでMBRに感染したコードで使うため、ディスクの暗号キーと復号コードをディスクに保存する。その他の生成された暗号データはすべて破棄される
- なんの警告もなしにマシンをシャットダウンし、MBRのコードでブートする
Petyaは非対称キーによる暗号化と搬送のために、楕円曲線暗号スキームを用いている。192ビットの公開鍵とsecp192k1曲線パラメータは、ドロッパーのバイナリにハードコーディングされて配信される。Petyaはサーバの公開鍵を取得し、ECDH(Elliptic Curve Diffie-Hellman)アルゴリズムを用いて共有の秘密鍵を構築する。この共有秘密鍵を用いて16バイトのディスク暗号キーをAES暗号化する。共有秘密鍵はこのマルウェアとサーバしか使用できない。バイナリをASCIIにエンコーディングするBase58により、このマルウェアの楕円曲線の公開鍵といっしょにディスク暗号キーをパッケージする。ここで得られるパッケージが、後に赤いスクリーン上で提示される「復号コード」である。
感染後、マシンはMBRのコードでブートする。これは以下のようになる。
- まずディスクが感染しているかを確認する
- 感染していなければ偽のCHKDSK画面を表示し、暗号キーに共有秘密キーを用いてMFTを暗号化する
- ディスクの暗号化にsalsa20を用いる。暗号化後は当該キーを破棄する
- 赤い「スカルスクリーン」、続いてTorの隠しサービスのURLがある画面と「復号コード」を表示する。「復号コード」とは、サーバでしか開けない暗号化されたメッセージである
楕円曲線アルゴリズムを用いて暗号キーを復号できるのは、もはやサーバしかない。これはマルウェアによってキーが破棄されたためだ。また、たとえ破棄されていなかったとしても、マシンがロックされて使えないままだ。リカバリディスクでMBRを復旧したとしても役には立たないだろう。なぜならMFTがいまだ暗号化されているからだ。理論上は共有秘密鍵を復旧して、リカバリディスクでディスク暗号化キーを復号して戻すことは可能だ。しかしそのためには、元々の楕円曲線暗号のキーペアを入手しなければならないのだが、必要な楕円曲線のデータはすべてドロッパーが破棄してしまっている。これはまるで家に入るための鍵が2つあって、意図的に片方を無くしたようなものだ。
サーバ側では、復号コードのデコードが逆の順番で行われることが想定される。
- Base58で符号化されたバイナリデータをデコードする
- マルウェアの公開鍵と暗号化されたデータを展開する
- 公開鍵を用いて、共有秘密鍵を構築する
- この共有秘密鍵を用いると、サーバはAESを使ってディスク暗号化キーを復号できる
- ここで攻撃者は、ロックされたマシンを解放できる暗号化キーを元に戻すことができる
一例として、当社のラボのマシン上の復号コードの1つは次のように見える(ハイフンと先頭の2文字は削除。サーバはこれをデコードに使用しない)。
Q5rL1YMqnJPCsCgji4KcDv5XnQrtqttBQ7tfbAq7QStmTXNQ6Voepeaiem8uzaQxYq3LwpvMCXBvMx2Mmqkdt8Fi
このコードを標準のBase58アルゴリズムを用いてデコードすると、以下のデータが生成される(説明のために、マルウェアが生成する公開鍵を緑で、ディスクを暗号化するキーを赤で示す)。
サーバのヘルプ無しでマシンを復旧する唯一の方法は、デバッガを使って感染プロセスの途中でsalsa20のキーを捕捉することだ。これは通常のコンピュータユーザにとっては、あまり魅力的な対抗手段ではない。
トリビア:
- Petyaはこちら(https://github.com/alexwebr/salsa20)のsalsa20の実装を用いているようだ
- Petyaは確実に「Evil Maid CHKDSK(https://github.com/alexwebr/evilmaid_chkdsk)」の影響を受けている