Fortinet社の研究グループが実際にPetyaの亜種の動作のテストを行い、平成29年6月28日(米国時間)にFortinet社がWebサイトにて同マルウェアの動作の概要について公表を行いました。
引用元:https://blog.fortinet.com/2017/06/28/a-technical-analysis-of-the-petya-ransomworm
同社の見解としては、Petyaの亜種が標的のMBRを上書きする機能を持つかは定かではないものの、ランサムウェアのように身代金を要求する要素と、ワームのように増殖をする要素が含まれていることは明らかであるとのことです。
しかし、身代金を要求する一方で、仮に支払いが行われたとしても暗号化されたファイルの復号化は無いと同社は確信しています。
Fortinet社もPetyaの亜種をランサムウェアとして定義し、Petyaの亜種が含むワームは、WannaCryと同じメカニズムでインターネットで拡散されているとのことです。
Petyaの亜種はDLLとしてコンピュータへ侵入しますが、同時に最初にエクスポートされた機能でPetyaの亜種の動作が検出されます。
それらの動作が実行されると、「SeShutdownPrivilege」「SeDebugPrivilege」「 SeTcbPrivilege」の3つの要素の特権が有効化されます。
(画像1)
引用元:https://blog.fortinet.com/2017/06/28/a-technical-analysis-of-the-petya-ransomworm
次に、プロセス名を暗号化して実行中の各プロセスを確認します。
その際の暗号化アルゴリムは以下の通りです。
(画像2)
引用元:https://blog.fortinet.com/2017/06/28/a-technical-analysis-of-the-petya-ransomworm
結果の値が以下のいずれかであるかを確認し、それぞれへ対応した変数を割り振ります。
「0x2E2A4B44」
「0x6403527E」
「0x651B3005」
実行中のプロセスの確認を終えると、各プロセスは「GetModuleFileNameW」にて、独自のファイル名を取得します。
(画像3)
引用元:https://blog.fortinet.com/2017/06/28/a-technical-analysis-of-the-petya-ransomworm
Petyaはコマンドラインを確認し、その後、「test」に続く「MFlag_adjustedPrivuleges」の変数が有効であるかを確認します。
これが有効であれば「SeDebugPrivilege」も有効であることがわかり、2つの関数を用いて「Msub_Shutdown」の実行、つまり、システムを強制終了させます。
(画像4)
引用元:https://blog.fortinet.com/2017/06/28/a-technical-analysis-of-the-petya-ransomworm
同社の研究グループによると、下の赤線枠内(画像5)の「ExitProcess」が、キルスイッチ(マルウェアを意図的に停止させる仕組み)である可能性が高いとのことです。
(画像5)
引用元:https://blog.fortinet.com/2017/06/28/a-technical-analysis-of-the-petya-ransomworm
コードを確認してみると、この「ExitProcess」は、赤線枠内(画像6)の「pszPath」という名前のメモリに保存されていることがわかります。
(画像6)
引用元:https://blog.fortinet.com/2017/06/28/a-technical-analysis-of-the-petya-ransomworm
「Msub_AppendToWindir」という関数を用いて入力することで、pszPathにPetyaの亜種の要素を含むデータ(画像7)が保存されているかを確認することができます。
(画像7)
引用元:https://blog.fortinet.com/2017/06/28/a-technical-analysis-of-the-petya-ransomworm
画像7におけるDLLのファイル名とフルパス(ディレクトリで指定されたファイル)は「C:\_Virus\Petya.dll」であり、画像3においてのコードで返されたものとします。
・1番目のAPI呼び出し「PathFindFileNameW」によりPetya.dll(ディレクトリ名を削除)を返す。
・2番目のAPI呼び出し「PathCombineW」により難読化されたパス「C:\ Windows」をPetya.dllに結合させ「C:\ Windows \ Petya.dll」へ変更。
・3番目のAPI呼び出し「PathFindExtensionW」によりパラメータとして「C:\ Windows \ Petya.dll」を使用し、拡張子(.dll)のアドレスを返し、このアドレスはレジスタEAXへ格納。
上記のコードでは、Petyaの亜種はこのアドレスに値0x00を格納し、文字列を終了します。文字列が「C:\ Windows \ Petya」に変更される。
上記の動作を終えるとPetyaの亜種は関数を終了します。