国内でも昨年末に話題になったランサムウェア「TeslaCrypt」通称「vvv」ウイルス。
本ブログでも実際に感染してみるというエントリーを掲載しました。
このマルウェアに感染すると特定の拡張子を持つファイルが暗号化され金銭を要求されるのですが
そちらの復号方法について海外サイトで言及されていましたので
本ブログでも手順を参考にしならが復号の可否を検証しました。
一部、一次情報のサイトとは手順が異なる部分があります。
今回用いる復号スクリプトは「TeslaCrack」というものでこちらで公開されています。
【環境の構築】
まず、復号するために必要な情報を収集するための環境を整えます。
まずは、復号処理を行うスクリプトがPythonで記述されているため現時点での最新版である「2.7.11」をインストールしました。
インストールが完了したら次に「easy_install」をダウンロードし以下のようにインストールし、「easy_install」を利用して「pip」のインストールも行いました。
python ez_setup.py
easy_install pip
「pip」のインストールが完了したら「pip」を用いて必要なモジュールをインストールします。
(こちらは「TeslaCrack」のサイトを参考にしました)
pip install pycryptodome
pip install ecdsa
pip install pybitcoin
次に、後に必要になる因数分解ツールなどのインストールを行っておきます。
Cドライブに「ggnfs-bin」という名前のフォルダを作成しておき
http://sourceforge.net/projects/yafu/ から「yafu-1.34.zip」
http://www.mersenneforum.org/showthread.php?t=20779 から「GGNFS.zip」
http://www.mersenneforum.org/showthread.php?t=20779&page=2 から「GGNFS.7z」
をダウンロードしたものを展開します。
展開されたファイルの中に「yafu.ini」というファイルがありますのでこちらのファイルの8行目にある
「ggnfs_dir=../ggnfs-bin/」 を 「ggnfs_dir=C:/ggnfs-bin/」 に変更します。
次にCドライブに「decrypt」という名前のフォルダを作成します。そして、そこに「TeslaCrack」をダウンロードしたものを展開。そして、「TeslaCrypt」に感染することによって暗号化され拡張子を「vvv」に変えられてしまったファイルも配置します。
これで環境の構築は完了です。
【復号作業の実行】
それではコマンドプロンプトを管理者権限で実行し「decrypt」フォルダに移動し、「teslacrack.py」を実行します。
ここ表示された「using msieve:」に続く128桁の16進数の値(公開鍵)をコピーします。こちらの値は後に使うのでテキストエディタなどにも保存しておくのがよいでしょう。
この値を10進数に変換するためにこちらのサイトを利用します。[Input big number converter:]のテキストボックスにコピーした値を入力し、[Number is a:]では[hexadecimal]を、[Convertnumber to a:]では[decimal]を選択して[Convert]ボタンをクリックします。すると下にある[Output big number converter:]のテキストボックスに10進数に変換した結果が表示されます。
こちらも後に使うことになるためテキストエディタなどの保存しておくのでよいでしょう。
次に10進数にした値をこのサイトでチェックします。
テキストボックスに入力し[Factorize!]ボタンをクリックするだけです。ボタンをクリックし表示された結果の[status]を確認します。[FF]と表示されていれば入力した値は完全に因数分解されていることを表しています。[CF]や[C]といったものが表示されいる場合にはまだ因数分解が完全に行われていない(厳密には行われたものがこのサイトに登録されていない)ため自身で行う必要があります。多くの場合は「FF」と表示されないかと思います。今回の検証でも「FF」とは表示されませんでした。
次に因数分解の作業に移ります。環境の構築で用意した「C:\ggnfs-bin」へコマンドプロンプトから移動し以下のコマンドを実行し完了するまで待ちます。
yafu-x64.exe “tune ()”
上記コマンドの実行が終了したら以下のコマンドを実行します。
yafu-x64.exe “factor(10進数の数値)” –v –threads 4
ここからはマシンスペックと運次第だと思います。数時間、数日かかる場合もあるかと思います。今回の検証では30分以下で下図のように結果を得ることができました。
これで因数分解は完全に完了した形となりますのでこの結果を用いて最終的に必要になる秘密鍵を割り出します。「C:\decrypt」に移動し、「TeslaCrypt」に暗号化されたファイル名と因数分解によって得られた値をスペースで区切ったものを引数にして以下のようにコマンドを実行します。
python unfactor_ecdsa.py decrypt_test.jpeg.vvv 2 3 5 11 208189 715301 351553157 15411185033 187331374058242932606749 16511769005756226963784537 4270252503078417158400623224117073023552357 138755306854009 420654249624913
上記を実行し、問題がなければ以下のように秘密鍵を得ることができます。
ここまで来ればあと一息です。「teslacrack.py」内に記述されている[known_key]に公開鍵と秘密鍵をペアで記述します。
今回の検証では以下のように[known_keys = {]の直下に記述しました。
known_keys = {
‘5D2B929B7BE6BD09BC74D957C298D1038D683C81C2C05727A9323EA729064646846524A32ABF69489C170B36AB7B0AD72463360790D002D25FC0AC9BD90A9AD2′:b’\xa3\x89\x20\x33\x67\x4e\xca\x4a\x1f\x38\xd0\xc4\x7d\x41\x7a\xb7\x65\x6d\x76\x1a\x8e\xf0\xb7\xba\xfc\xda\xd7\xb4\x84\x11\xe6\xd6’,
これで復号処理の準備は万端です。「teslacrack.py」を実行します。
問題なく復号できたようです。以下は復号する前と後の「C:\decrypt」フォルダの様子です。
復号後、ファイルが暗号化前のものになっていることが確認できました。
上記手順で復号を試みた暗号化後のファイルをこちらからダウンロードできるようにしておきます(右クリックから保存してください)のでこのブログの内容を参考に復号手順を実施してみたい方は使っていただければと思います。
【謝辞】
Tesla Crack の作成者である Googulator氏
TeslaCrypt 2.2.0 Removal and Decryption の執筆者である Isaac Rush氏
両名に敬意を表します。