Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
WannaCryの暗号化・復号のプロセス、身代金の支払い、復号ツール #ssmjp /ssmj...
Search
Takuji Kitagawa
November 13, 2017
Technology
3.7k
4
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
WannaCryの暗号化・復号のプロセス、身代金の支払い、復号ツール #ssmjp /ssmjp1710-1
Takuji Kitagawa
November 13, 2017
More Decks by Takuji Kitagawa
See All by Takuji Kitagawa
WannaCryのKill Switch、亜種 #ssmjp /ssmjp1710-3
kitagawa
1
760
WannaCryの概要・使用された脆弱性 #ssmjp /ssmjp1710-2
kitagawa
4
3.5k
Windows標準の機能を使用した標的型攻撃の対策 ドライブ・バイ・ダウンロード編 #ssmjp /ssmjp1507-2
kitagawa
6
3.8k
Windows標準の機能を使用した標的型攻撃の対策 #ssmjp /ssmjp1507
kitagawa
14
9.9k
オープンソースの匿名投稿プラットフォーム「SecureDrop」
kitagawa
0
1.2k
Other Decks in Technology
See All in Technology
Lightning近況報告
kozy4324
0
140
現地で盛り上がった WWDC26 Keynote
zozotech
PRO
1
260
Bucharest Tech Week 2026 - Reinventing testing practices in the AI era
edeandrea
PRO
1
160
On-behalf-of Token exchange with AgentCore Identity
hironobuiga
2
240
ACE-Step-1.5で見る 音楽生成AIのしくみと“破綻だけ直す”Retake機能の開発【zennfes spring 2026 登壇資料】
personabb
1
530
AmazonRoute 53ではじめてのドメイン取得!HTTPS化までの道のりを整理してみた
usanchuu
3
150
2026TECHFRESH畢業分享會 - 原生還是跨平台? App 開發踩坑實錄
line_developers_tw
PRO
0
1.2k
[チョークトーク資料]AWS DevOps Agent を使いこなす / AWS Dev Ops Agent Chalk Talk AWS Summit Japan 2026
kinunori
1
400
【NRUG vol.18】KubernetesにおけるNew Relicデータ取得量削減の考え方
nrug_member
0
160
中期計画、2回作ってみた ~業務委託と正社員、両方の視点から~
demaecan
1
930
新しいUbuntu/GNOMEが使いたいからXからWaylandへ移行頑張ってるの巻 2026-06-20
nobutomurata
0
140
Snowflakeと仲良くなる第一歩
coco_se
4
500
Featured
See All Featured
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
440
The Pragmatic Product Professional
lauravandoore
37
7.3k
How to build a perfect <img>
jonoalderson
1
5.7k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.2k
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
410
Making Projects Easy
brettharned
120
6.7k
Rails Girls Zürich Keynote
gr2m
96
14k
Design in an AI World
tapps
1
240
How to Talk to Developers About Accessibility
jct
2
230
State of Search Keynote: SEO is Dead Long Live SEO
ryanjones
0
210
The World Runs on Bad Software
bkeepers
PRO
72
12k
Transcript
WannaCryの 暗号化・復号のプロセス 身代金の支払い 復号ツール @kitagawa_takuji
#ssmjp 2017/10 #1 https://ssmjp.connpass.com/event/68090/ で使用したスライドの一部です
身代金を支払えば ファイルは戻るのか?
• 3つの固定のビットコインアドレス 115p7UMMngoj1pMvkpHijcRdfJNXj6LrLn 12t9YDPgwueZ9NyMgw519p7AA8isjr6SMw 13AM4VW2dhxYgXeQepoHkHSQuy6NgaEb94 • $300 を要求、3日経つと $600 に倍増
• 「7日間で支払いを行わないと、ファイルを永久に回復す ることはできません」と脅す • 338件、14万ドル(約1500万円)の支払い (2017年7月時点) WannaCryの身代金の支払い
• 通常のランサムウェアは被害者毎に異なるビットコ インアドレスを用いることにより、誰が支払ったか を識別する • 被害者毎に異なるビットコインアドレスを用いるこ とにより追跡を困難にする 通常のランサムウェアは
Bitcoinの取引履歴はすべて公開されている 共通のBitcoinアドレスを用いると追跡され易くなる
WannaCryには被害者毎に異なるBitcoinアドレスを提供する コードがあるのだが、バグによりハードコードされたBitcoin アドレスが提供される
最初の感染の13時間後にはバグを修正したバージョンが配布 されている。だが、殆どの感染はバグのあるバージョン
被害者毎のBitcoinアドレスを受け取るコードの呼び出し順序を変更
• WannaCryには被害者毎に異なるBitcoin アドレスを提供するコードがあるのだが、 バグによりハードコードされた3つの Bitcoinアドレスの内1つが提供されるよ うになっている • よって、犯人は誰が支払ったかを識別する ことが出来ない
WannaCryの 暗号化・復号のプロセス
元の ファイル sample.docx WannaCry 暗号化のプロセス
犯人 RSA-2048 公開鍵 犯人 RSA-2048 秘密鍵 元の ファイル 犯人の公開鍵ペア sample.docx
WannaCry 暗号化のプロセス
犯人 RSA-2048 公開鍵 犯人 RSA-2048 秘密鍵 元の ファイル 犯人の公開鍵ペア 犯人
RSA-2048 公開鍵 マルウェアにハードコー ドされた犯人の公開鍵 sample.docx WannaCry 暗号化のプロセス
犯人 RSA-2048 公開鍵 犯人 RSA-2048 秘密鍵 元の ファイル 犯人の公開鍵ペア 犯人
RSA-2048 公開鍵 マルウェアにハードコー ドされた犯人の公開鍵 被害者 RSA-2048 公開鍵 被害者 RSA-2048 秘密鍵 メモリ上で 被害者の公開鍵ペア生成 sample.docx WannaCry 暗号化のプロセス
犯人 RSA-2048 公開鍵 犯人 RSA-2048 秘密鍵 元の ファイル 犯人の公開鍵ペア 犯人
RSA-2048 公開鍵 マルウェアにハードコー ドされた犯人の公開鍵 被害者 RSA-2048 公開鍵 被害者 RSA-2048 秘密鍵 メモリ上で 被害者の公開鍵ペア生成 sample.docx 被害者 RSA-2048 公開鍵 00000000.pky 公開鍵をファイルに保存 WannaCry 暗号化のプロセス
犯人 RSA-2048 公開鍵 犯人 RSA-2048 秘密鍵 元の ファイル 犯人の公開鍵ペア 犯人
RSA-2048 公開鍵 マルウェアにハードコー ドされた犯人の公開鍵 被害者 RSA-2048 公開鍵 被害者 RSA-2048 秘密鍵 メモリ上で 被害者の公開鍵ペア生成 暗号化 暗号化された 被害者 RSA-2048 秘密鍵 00000000.eky sample.docx 被害者 RSA-2048 公開鍵 00000000.pky 公開鍵をファイルに保存 WannaCry 暗号化のプロセス
犯人 RSA-2048 公開鍵 犯人 RSA-2048 秘密鍵 元の ファイル 犯人の公開鍵ペア 犯人
RSA-2048 公開鍵 マルウェアにハードコー ドされた犯人の公開鍵 被害者 RSA-2048 公開鍵 被害者 RSA-2048 秘密鍵 メモリ上で 被害者の公開鍵ペア生成 暗号化 暗号化された 被害者 RSA-2048 秘密鍵 00000000.eky sample.docx 被害者 RSA-2048 公開鍵 00000000.pky 公開鍵をファイルに保存 メモリ上の 鍵ペア破棄 WannaCry 暗号化のプロセス
犯人 RSA-2048 公開鍵 犯人 RSA-2048 秘密鍵 元の ファイル 犯人の公開鍵ペア 犯人
RSA-2048 公開鍵 マルウェアにハードコー ドされた犯人の公開鍵 被害者 RSA-2048 公開鍵 被害者 RSA-2048 秘密鍵 メモリ上で 被害者の公開鍵ペア生成 暗号化 暗号化された 被害者 RSA-2048 秘密鍵 00000000.eky sample.docx 被害者 RSA-2048 公開鍵 00000000.pky 公開鍵をファイルに保存 AES-128 共通鍵 ファイル毎に異る 共通鍵生成 メモリ上の 鍵ペア破棄 WannaCry 暗号化のプロセス
犯人 RSA-2048 公開鍵 犯人 RSA-2048 秘密鍵 元の ファイル 暗号化された ファイル
暗号化 犯人の公開鍵ペア 犯人 RSA-2048 公開鍵 マルウェアにハードコー ドされた犯人の公開鍵 被害者 RSA-2048 公開鍵 被害者 RSA-2048 秘密鍵 メモリ上で 被害者の公開鍵ペア生成 暗号化 暗号化された 被害者 RSA-2048 秘密鍵 00000000.eky sample.docx 被害者 RSA-2048 公開鍵 00000000.pky 公開鍵をファイルに保存 AES-128 共通鍵 ファイル毎に異る 共通鍵生成 メモリ上の 鍵ペア破棄 WannaCry 暗号化のプロセス
犯人 RSA-2048 公開鍵 犯人 RSA-2048 秘密鍵 元の ファイル 暗号化された AES-128
共通鍵 暗号化 暗号化された ファイル 暗号化 犯人の公開鍵ペア 犯人 RSA-2048 公開鍵 マルウェアにハードコー ドされた犯人の公開鍵 被害者 RSA-2048 公開鍵 被害者 RSA-2048 秘密鍵 メモリ上で 被害者の公開鍵ペア生成 暗号化 暗号化された 被害者 RSA-2048 秘密鍵 00000000.eky sample.docx 被害者 RSA-2048 公開鍵 00000000.pky 公開鍵をファイルに保存 AES-128 共通鍵 ファイル毎に異る 共通鍵生成 メモリ上の 鍵ペア破棄 WannaCry 暗号化のプロセス
犯人 RSA-2048 公開鍵 犯人 RSA-2048 秘密鍵 元の ファイル 暗号化された AES-128
共通鍵 暗号化 暗号化された ファイル 暗号化 犯人の公開鍵ペア 犯人 RSA-2048 公開鍵 マルウェアにハードコー ドされた犯人の公開鍵 被害者 RSA-2048 公開鍵 被害者 RSA-2048 秘密鍵 メモリ上で 被害者の公開鍵ペア生成 暗号化 暗号化された 被害者 RSA-2048 秘密鍵 00000000.eky sample.docx sample.docx.WNCRY 被害者 RSA-2048 公開鍵 00000000.pky 公開鍵をファイルに保存 AES-128 共通鍵 ファイル毎に異る 共通鍵生成 メモリ上の 鍵ペア破棄 WannaCry 暗号化のプロセス
犯人 RSA-2048 公開鍵 犯人 RSA-2048 秘密鍵 元の ファイル 暗号化された AES-128
共通鍵 暗号化 暗号化された ファイル 暗号化 犯人の公開鍵ペア 犯人 RSA-2048 公開鍵 マルウェアにハードコー ドされた犯人の公開鍵 被害者 RSA-2048 公開鍵 被害者 RSA-2048 秘密鍵 メモリ上で 被害者の公開鍵ペア生成 暗号化 暗号化された 被害者 RSA-2048 秘密鍵 00000000.eky sample.docx sample.docx.WNCRY 被害者 RSA-2048 公開鍵 00000000.pky 公開鍵をファイルに保存 AES-128 共通鍵 ファイル毎に異る 共通鍵生成 メモリ上の 鍵ペア破棄 WannaCry 暗号化のプロセス ファイル毎に繰り返し
犯人 RSA-2048 公開鍵 犯人 RSA-2048 秘密鍵 犯人の公開鍵で 暗号化された 被害者の秘密鍵 AES-128
共通鍵で 暗号化された ファイル 被害者の公開鍵で 暗号化された AES-128 共通鍵 犯人の公開鍵ペア 00000000.eky sample.docx.WNCRY WannaCry 復号のプロセス
犯人 RSA-2048 公開鍵 犯人 RSA-2048 秘密鍵 犯人の公開鍵で 暗号化された 被害者の秘密鍵 AES-128
共通鍵で 暗号化された ファイル 被害者の公開鍵で 暗号化された AES-128 共通鍵 犯人の公開鍵ペア 00000000.eky sample.docx.WNCRY WannaCry 復号のプロセス 犯人の公開鍵で 暗号化された 被害者の秘密鍵 送信(tor)
犯人 RSA-2048 公開鍵 犯人 RSA-2048 秘密鍵 犯人の公開鍵で 暗号化された 被害者の秘密鍵 AES-128
共通鍵で 暗号化された ファイル 被害者の公開鍵で 暗号化された AES-128 共通鍵 犯人の公開鍵ペア 00000000.eky sample.docx.WNCRY 被害者 RSA-2048 秘密鍵 復号 WannaCry 復号のプロセス 犯人の公開鍵で 暗号化された 被害者の秘密鍵 送信(tor)
犯人 RSA-2048 公開鍵 犯人 RSA-2048 秘密鍵 犯人の公開鍵で 暗号化された 被害者の秘密鍵 AES-128
共通鍵で 暗号化された ファイル 被害者の公開鍵で 暗号化された AES-128 共通鍵 犯人の公開鍵ペア 00000000.eky sample.docx.WNCRY 被害者 RSA-2048 秘密鍵 復号 WannaCry 復号のプロセス 犯人の公開鍵で 暗号化された 被害者の秘密鍵 送信(tor) 00000000.dky 被害者 RSA-2048 秘密鍵 受信(tor)
犯人 RSA-2048 公開鍵 犯人 RSA-2048 秘密鍵 犯人の公開鍵で 暗号化された 被害者の秘密鍵 AES-128
共通鍵で 暗号化された ファイル 被害者の公開鍵で 暗号化された AES-128 共通鍵 犯人の公開鍵ペア 00000000.eky sample.docx.WNCRY 被害者 RSA-2048 秘密鍵 復号 AES-128 共通鍵 復号 WannaCry 復号のプロセス 犯人の公開鍵で 暗号化された 被害者の秘密鍵 送信(tor) 00000000.dky 被害者 RSA-2048 秘密鍵 受信(tor)
犯人 RSA-2048 公開鍵 犯人 RSA-2048 秘密鍵 犯人の公開鍵で 暗号化された 被害者の秘密鍵 AES-128
共通鍵で 暗号化された ファイル 被害者の公開鍵で 暗号化された AES-128 共通鍵 犯人の公開鍵ペア 00000000.eky sample.docx.WNCRY 被害者 RSA-2048 秘密鍵 復号 AES-128 共通鍵 復号 元の ファイル sample.docx 復号 WannaCry 復号のプロセス 犯人の公開鍵で 暗号化された 被害者の秘密鍵 送信(tor) 00000000.dky 被害者 RSA-2048 秘密鍵 受信(tor)
犯人 RSA-2048 公開鍵 犯人 RSA-2048 秘密鍵 犯人の公開鍵で 暗号化された 被害者の秘密鍵 AES-128
共通鍵で 暗号化された ファイル 被害者の公開鍵で 暗号化された AES-128 共通鍵 犯人の公開鍵ペア 00000000.eky sample.docx.WNCRY 被害者 RSA-2048 秘密鍵 復号 AES-128 共通鍵 復号 元の ファイル sample.docx 復号 WannaCry 復号のプロセス 犯人の公開鍵で 暗号化された 被害者の秘密鍵 送信(tor) 00000000.dky 被害者 RSA-2048 秘密鍵 受信(tor) ファイル毎に繰り返し
Bitcoinの支払いと 復号のプロセス
C&Cサーバへのアクセス
「Contact US」からメッセージを送信
ユーザ識別情報で被害者のトラッキングが可能 • 「Contact US」、「Check Payment」ともに、 ユーザ識別情報が送信される • ユーザ識別情報 <8byteのID><ComputerName><UserName> •
8byteのID • 感染初期時にCryptGenRandomにより生成 • ファイル 00000000.res の先頭8byteに書かれ 永続的に使用
本来想定された Bitcoinの支払いと ファイル復号のプロセス
VictimID • 8-byteのID(CryptGenRandomで生成した乱数) • ComputerName • UserName C&Cサーバ(.onion) 00000000.eky 犯人の公開鍵で暗号化され
た被害者の秘密鍵 本来想定された動作
ユーザ識別子を送信 VictimID • 8-byteのID(CryptGenRandomで生成した乱数) • ComputerName • UserName C&Cサーバ(.onion) 00000000.eky
犯人の公開鍵で暗号化され た被害者の秘密鍵 本来想定された動作 VictimID
ユーザ識別子を送信 VictimID • 8-byteのID(CryptGenRandomで生成した乱数) • ComputerName • UserName 被害者毎のBitcoinアドレスを生成 C&Cサーバ(.onion)
00000000.eky 犯人の公開鍵で暗号化され た被害者の秘密鍵 生成 被害者毎に異る Bitcoinアドレス 本来想定された動作 VictimID
ユーザ識別子を送信 VictimID • 8-byteのID(CryptGenRandomで生成した乱数) • ComputerName • UserName 被害者毎のBitcoinアドレスを生成 C&Cサーバ(.onion)
00000000.eky 犯人の公開鍵で暗号化され た被害者の秘密鍵 生成 被害者毎に異る Bitcoinアドレス 本来想定された動作 VictimID Bitcoinアドレス
ユーザ識別子を送信 VictimID • 8-byteのID(CryptGenRandomで生成した乱数) • ComputerName • UserName 被害者毎のBitcoinアドレスを生成 Bitcoinアドレスを
c.wnryに保存 c.wnry C&Cより受信したBitcoin アドレス C&Cサーバ(.onion) 00000000.eky 犯人の公開鍵で暗号化され た被害者の秘密鍵 生成 被害者毎に異る Bitcoinアドレス 本来想定された動作 VictimID Bitcoinアドレス
ユーザ識別子を送信 VictimID • 8-byteのID(CryptGenRandomで生成した乱数) • ComputerName • UserName 被害者毎のBitcoinアドレスを生成 Bitcoinアドレスを
c.wnryに保存 c.wnry C&Cより受信したBitcoin アドレス C&Cサーバ(.onion) @
[email protected]
c.wnryより読み込んだ Bitcoinアドレスを表示 00000000.eky 犯人の公開鍵で暗号化され た被害者の秘密鍵 生成 被害者毎に異る Bitcoinアドレス 本来想定された動作 VictimID Bitcoinアドレス
ユーザ識別子を送信 VictimID • 8-byteのID(CryptGenRandomで生成した乱数) • ComputerName • UserName 被害者毎のBitcoinアドレスを生成 Bitcoinアドレスを
c.wnryに保存 c.wnry C&Cより受信したBitcoin アドレス C&Cサーバ(.onion) @
[email protected]
c.wnryより読み込んだ Bitcoinアドレスを表示 Bitcoinの支払い 00000000.eky 犯人の公開鍵で暗号化され た被害者の秘密鍵 入金 生成 被害者毎に異る Bitcoinアドレス 本来想定された動作 VictimID Bitcoinアドレス
ユーザ識別子を送信 VictimID • 8-byteのID(CryptGenRandomで生成した乱数) • ComputerName • UserName 被害者毎のBitcoinアドレスを生成 Bitcoinアドレスを
c.wnryに保存 c.wnry C&Cより受信したBitcoin アドレス C&Cサーバ(.onion) @
[email protected]
c.wnryより読み込んだ Bitcoinアドレスを表示 Bitcoinの支払い Check Paymentボタン 00000000.eky 犯人の公開鍵で暗号化され た被害者の秘密鍵 入金 生成 被害者毎に異る Bitcoinアドレス 本来想定された動作 VictimID Bitcoinアドレス
ユーザ識別子を送信 VictimID • 8-byteのID(CryptGenRandomで生成した乱数) • ComputerName • UserName 被害者毎のBitcoinアドレスを生成 Bitcoinアドレスを
c.wnryに保存 c.wnry C&Cより受信したBitcoin アドレス C&Cサーバ(.onion) @
[email protected]
c.wnryより読み込んだ Bitcoinアドレスを表示 Bitcoinの支払い Check Paymentボタン 00000000.eky 犯人の公開鍵で暗号化され た被害者の秘密鍵 入金 生成 被害者毎に異る Bitcoinアドレス 本来想定された動作 VictimID Bitcoinアドレス VictimID Bitcoinアドレス 00000000.eky
ユーザ識別子を送信 VictimID • 8-byteのID(CryptGenRandomで生成した乱数) • ComputerName • UserName 被害者毎のBitcoinアドレスを生成 Bitcoinアドレスを
c.wnryに保存 1. Bitcoinの入金をチェック 2. 入金が確認できたら、犯人の秘 密鍵で00000000.ekyを復号 c.wnry C&Cより受信したBitcoin アドレス C&Cサーバ(.onion) @
[email protected]
c.wnryより読み込んだ Bitcoinアドレスを表示 Bitcoinの支払い Check Paymentボタン 00000000.eky 犯人の公開鍵で暗号化され た被害者の秘密鍵 入金 生成 入金チェック 被害者毎に異る Bitcoinアドレス 本来想定された動作 VictimID Bitcoinアドレス VictimID Bitcoinアドレス 00000000.eky
ユーザ識別子を送信 VictimID • 8-byteのID(CryptGenRandomで生成した乱数) • ComputerName • UserName 被害者毎のBitcoinアドレスを生成 Bitcoinアドレスを
c.wnryに保存 1. Bitcoinの入金をチェック 2. 入金が確認できたら、犯人の秘 密鍵で00000000.ekyを復号 c.wnry C&Cより受信したBitcoin アドレス C&Cサーバ(.onion) @
[email protected]
c.wnryより読み込んだ Bitcoinアドレスを表示 Bitcoinの支払い Check Paymentボタン 00000000.eky 犯人の公開鍵で暗号化され た被害者の秘密鍵 入金 生成 入金チェック 被害者毎に異る Bitcoinアドレス 本来想定された動作 VictimID Bitcoinアドレス VictimID Bitcoinアドレス 00000000.eky 被害者の秘密鍵
ユーザ識別子を送信 VictimID • 8-byteのID(CryptGenRandomで生成した乱数) • ComputerName • UserName 被害者毎のBitcoinアドレスを生成 Bitcoinアドレスを
c.wnryに保存 1. Bitcoinの入金をチェック 2. 入金が確認できたら、犯人の秘 密鍵で00000000.ekyを復号 c.wnry C&Cより受信したBitcoin アドレス C&Cサーバ(.onion) @
[email protected]
c.wnryより読み込んだ Bitcoinアドレスを表示 Bitcoinの支払い Check Paymentボタン 00000000.eky 犯人の公開鍵で暗号化され た被害者の秘密鍵 入金 生成 入金チェック 受信した被害者の秘密鍵を 00000000.dkyとして保存 00000000.dky 被害者の秘密鍵 被害者毎に異る Bitcoinアドレス 本来想定された動作 VictimID Bitcoinアドレス VictimID Bitcoinアドレス 00000000.eky 被害者の秘密鍵
ユーザ識別子を送信 VictimID • 8-byteのID(CryptGenRandomで生成した乱数) • ComputerName • UserName 被害者毎のBitcoinアドレスを生成 Bitcoinアドレスを
c.wnryに保存 1. Bitcoinの入金をチェック 2. 入金が確認できたら、犯人の秘 密鍵で00000000.ekyを復号 c.wnry C&Cより受信したBitcoin アドレス C&Cサーバ(.onion) @
[email protected]
c.wnryより読み込んだ Bitcoinアドレスを表示 Bitcoinの支払い Check Paymentボタン 00000000.eky 犯人の公開鍵で暗号化され た被害者の秘密鍵 入金 生成 入金チェック 受信した被害者の秘密鍵を 00000000.dkyとして保存 00000000.dky 被害者の秘密鍵 Decryptボタン 復号処理 被害者毎に異る Bitcoinアドレス 本来想定された動作 VictimID Bitcoinアドレス VictimID Bitcoinアドレス 00000000.eky 被害者の秘密鍵
犯人 RSA-2048 公開鍵 犯人 RSA-2048 秘密鍵 犯人の公開鍵で 暗号化された 被害者の秘密鍵 AES-128
共通鍵で 暗号化された ファイル 被害者の公開鍵で 暗号化された AES-128 共通鍵 犯人の公開鍵ペア 00000000.eky sample.docx.WNCRY 被害者 RSA-2048 秘密鍵 復号 AES-128 共通鍵 復号 元の ファイル sample.docx 復号 WannaCry ファイルの復号処理 犯人の公開鍵で 暗号化された 被害者の秘密鍵 送信(tor) 00000000.dky 被害者 RSA-2048 秘密鍵 受信(tor) ファイル毎に繰り返し
バグによる実際の動作
ユーザ識別子を送信 VictimID • 8-byteのID(CryptGenRandomで生成した乱数) • ComputerName • UserName 被害者毎のBitcoinアドレスを生成 Bitcoinアドレスを
c.wnryに保存 1. Bitcoinの入金をチェック 2. 入金が確認できたら、犯人の秘 密鍵で00000000.ekyを復号 c.wnry C&Cより受信したBitcoin アドレス C&Cサーバ(.onion) @
[email protected]
c.wnryより読み込んだ Bitcoinアドレスを表示 Bitcoinの支払い Check Paymentボタン 00000000.eky 犯人の公開鍵で暗号化され た被害者の秘密鍵 入金 生成 入金チェック 受信した被害者の秘密鍵を 00000000.dkyとして保存 00000000.dky 被害者の秘密鍵 Decryptボタン 復号処理 被害者毎に異る Bitcoinアドレス 本来想定された動作 VictimID Bitcoinアドレス VictimID Bitcoinアドレス 00000000.eky 被害者の秘密鍵
ユーザ識別子を送信 VictimID • 8-byteのID(CryptGenRandomで生成した乱数) • ComputerName • UserName 被害者毎のBitcoinアドレスを生成 Bitcoinアドレスを
c.wnryに保存 c.wnry C&Cより受信したBitcoin アドレス C&Cサーバ(.onion) @
[email protected]
c.wnryより読み込んだ Bitcoinアドレスを表示 Bitcoinの支払い Check Paymentボタン 00000000.eky 犯人の公開鍵で暗号化され た被害者の秘密鍵 入金 生成 入金チェック 受信した被害者の秘密鍵を 00000000.dkyとして保存 00000000.dky 被害者の秘密鍵 Decryptボタン 復号処理 被害者毎に異る Bitcoinアドレス VictimID Bitcoinアドレス VictimID Bitcoinアドレス 00000000.eky 被害者の秘密鍵 バグによりこの処理より前に WanaDecryptorが起動 1. 共通のBitcoinアドレスのため誰 の入金か識別が出来ない 2. 00000000.ekyの復号は行われ ない (バグによる)実際の動作 1. Bitcoinの入金をチェック 2. 入金が確認できたら、犯人の秘 密鍵で00000000.ekyを復号
ユーザ識別子を送信 VictimID • 8-byteのID(CryptGenRandomで生成した乱数) • ComputerName • UserName 被害者毎のBitcoinアドレスを生成 Bitcoinアドレスを
c.wnryに保存 c.wnry C&Cより受信したBitcoin アドレス C&Cサーバ(.onion) @
[email protected]
c.wnryより読み込んだ Bitcoinアドレスを表示 Bitcoinの支払い Check Paymentボタン 00000000.eky 犯人の公開鍵で暗号化され た被害者の秘密鍵 入金 生成 入金チェック 受信した被害者の秘密鍵を 00000000.dkyとして保存 00000000.dky 被害者の秘密鍵 Decryptボタン 復号処理 被害者毎に異る Bitcoinアドレス VictimID Bitcoinアドレス VictimID Bitcoinアドレス 00000000.eky 被害者の秘密鍵 バグによりこの処理より前に WanaDecryptorが起動 c.wnry Bitcoinアドレスは空白 1. 共通のBitcoinアドレスのため誰 の入金か識別が出来ない 2. 00000000.ekyの復号は行われ ない (バグによる)実際の動作 1. Bitcoinの入金をチェック 2. 入金が確認できたら、犯人の秘 密鍵で00000000.ekyを復号
ユーザ識別子を送信 VictimID • 8-byteのID(CryptGenRandomで生成した乱数) • ComputerName • UserName 被害者毎のBitcoinアドレスを生成 Bitcoinアドレスを
c.wnryに保存 c.wnry C&Cより受信したBitcoin アドレス C&Cサーバ(.onion) @
[email protected]
c.wnryより読み込んだ Bitcoinアドレスを表示 Bitcoinの支払い Check Paymentボタン 00000000.eky 犯人の公開鍵で暗号化され た被害者の秘密鍵 入金 生成 入金チェック 受信した被害者の秘密鍵を 00000000.dkyとして保存 00000000.dky 被害者の秘密鍵 Decryptボタン 復号処理 被害者毎に異る Bitcoinアドレス VictimID Bitcoinアドレス VictimID Bitcoinアドレス 00000000.eky 被害者の秘密鍵 バグによりこの処理より前に WanaDecryptorが起動 c.wnry Bitcoinアドレスは空白 @
[email protected]
ハードコードされた Bitcoinアドレスを表示 1. 共通のBitcoinアドレスのため誰 の入金か識別が出来ない 2. 00000000.ekyの復号は行われ ない (バグによる)実際の動作 1. Bitcoinの入金をチェック 2. 入金が確認できたら、犯人の秘 密鍵で00000000.ekyを復号
ユーザ識別子を送信 VictimID • 8-byteのID(CryptGenRandomで生成した乱数) • ComputerName • UserName 被害者毎のBitcoinアドレスを生成 Bitcoinアドレスを
c.wnryに保存 c.wnry C&Cより受信したBitcoin アドレス C&Cサーバ(.onion) @
[email protected]
c.wnryより読み込んだ Bitcoinアドレスを表示 Bitcoinの支払い Check Paymentボタン 00000000.eky 犯人の公開鍵で暗号化され た被害者の秘密鍵 入金 生成 入金チェック 受信した被害者の秘密鍵を 00000000.dkyとして保存 00000000.dky 被害者の秘密鍵 Decryptボタン 復号処理 被害者毎に異る Bitcoinアドレス VictimID Bitcoinアドレス VictimID Bitcoinアドレス 00000000.eky 被害者の秘密鍵 バグによりこの処理より前に WanaDecryptorが起動 c.wnry Bitcoinアドレスは空白 @
[email protected]
ハードコードされた Bitcoinアドレスを表示 共通のBitcoin アドレス 1. 共通のBitcoinアドレスのため誰 の入金か識別が出来ない 2. 00000000.ekyの復号は行われ ない (バグによる)実際の動作 1. Bitcoinの入金をチェック 2. 入金が確認できたら、犯人の秘 密鍵で00000000.ekyを復号
ユーザ識別子を送信 VictimID • 8-byteのID(CryptGenRandomで生成した乱数) • ComputerName • UserName 被害者毎のBitcoinアドレスを生成 Bitcoinアドレスを
c.wnryに保存 1. Bitcoinの入金をチェック 2. 入金が確認できたら、犯人の秘 密鍵で00000000.ekyを復号 c.wnry C&Cより受信したBitcoin アドレス C&Cサーバ(.onion) @
[email protected]
c.wnryより読み込んだ Bitcoinアドレスを表示 Bitcoinの支払い Check Paymentボタン 00000000.eky 犯人の公開鍵で暗号化され た被害者の秘密鍵 入金 生成 入金チェック 受信した被害者の秘密鍵を 00000000.dkyとして保存 00000000.dky 被害者の秘密鍵 Decryptボタン 復号処理 被害者毎に異る Bitcoinアドレス VictimID Bitcoinアドレス VictimID Bitcoinアドレス 00000000.eky 被害者の秘密鍵 バグによりこの処理より前に WanaDecryptorが起動 c.wnry Bitcoinアドレスは空白 @
[email protected]
ハードコードされた Bitcoinアドレスを表示 共通のBitcoin アドレス 1. 共通のBitcoinアドレスのため誰 の入金か識別が出来ない 2. 00000000.ekyの復号は行われ ない (バグによる)実際の動作
ユーザ識別子を送信 VictimID • 8-byteのID(CryptGenRandomで生成した乱数) • ComputerName • UserName 被害者毎のBitcoinアドレスを生成 Bitcoinアドレスを
c.wnryに保存 1. Bitcoinの入金をチェック 2. 入金が確認できたら、犯人の秘 密鍵で00000000.ekyを復号 c.wnry C&Cより受信したBitcoin アドレス C&Cサーバ(.onion) @
[email protected]
c.wnryより読み込んだ Bitcoinアドレスを表示 Bitcoinの支払い Check Paymentボタン 00000000.eky 犯人の公開鍵で暗号化され た被害者の秘密鍵 入金 生成 入金チェック 受信した被害者の秘密鍵を 00000000.dkyとして保存 00000000.dky 被害者の秘密鍵 Decryptボタン 復号処理 被害者毎に異る Bitcoinアドレス VictimID Bitcoinアドレス VictimID Bitcoinアドレス 00000000.eky 被害者の秘密鍵 バグによりこの処理より前に WanaDecryptorが起動 Check Paymentを行っても秘密鍵の受取りが出来ないため Decyptボタンを押しても復号されない c.wnry Bitcoinアドレスは空白 @
[email protected]
ハードコードされた Bitcoinアドレスを表示 共通のBitcoin アドレス 1. 共通のBitcoinアドレスのため誰 の入金か識別が出来ない 2. 00000000.ekyの復号は行われ ない (バグによる)実際の動作
バグを修正したバージョンを配布
被害者毎のBitcoinアドレスを受け取るコードの呼び出し順序を変更
• WannaCryは被害者毎に異なるBitcoinアドレスを 提供するコードがあるのだが、バグによりハード コードされた3つのBitcoinアドレスの内1つが提 供されるようになっている • よって、犯人は誰が支払ったかを認識することが出 来ない • もし支払ったとしても、個別に犯人と交渉しなけれ
ばファイルは戻らない 身代金を支払いをすればファイルは復元出来るのか
5/18 すべての感染した端末にメッセージが送信される
既に正しい額のビットコインを送信した多くの顧客に復号鍵を送信している。誠実 な顧客には復号を保証する。支払いの1時間前にビットコインアドレスをメッセー ジで送信して欲しい。そうすれば復号鍵をもっと迅速に受け取れるだろう。
この手順で支払者の識別が可能か? • 「Contact US」「Check Payment」ともに、ユーザ識別 情報が送信される • 「Contact US」から、事前にBitcoinアドレスを通知 •
通知済みのBitcoinアドレスからの入金を確認できれば、 「Contact US」のユーザ識別情報に対し、支払済とマーク • 「Check Payment」のユーザ識別情報が支払済であれば、 00000000.ekyを復号して秘密鍵を被害者に送信
既に支払済の場合、 どうやって支払済であることを証明するのか?
Bitcoinの取引情報はすべて公開されている 他人の取引情報を示して「自分の支払いだ」となりすますことも可能
被害者 「5/XX X時X分にBitcoinアドレスAAAAから0.16BTCを支払った」 「ファイルを戻して欲しい」 犯人 「 AAAAがお前のものであることを証明するために、 非公開のBitcoinアドレスBBBBに0.00001BTCを送金してくれ!」 被害者 「送金した!」
犯人 「AAAAから非公開のBBBBへの入金を確認した」 「確かにAAAAはお前が所有しており、なりすましではないな」 「よし、復号鍵を送ろう」 既に支払済の者が、 自分の支払いであることを証明する方法(の想定の一例)
二人のWannaCry被害者への取材記事 https://qz.com/985093/inside-the-digital-heist-that-terrorized-the-world-and-made-less-than-100k/
シアトルの土地測量会社 共同経営者(34歳) (記事では名前、会社名が記載されており、検索すると実在する会社で経営者として名前が出ている) • 5/12経営する会社のサーバのファイルのほぼ全てが暗号化 • 業務がすべて止まる • IT業者に相談するが、何も出来ないと言われる •
5/13にBitcoinで身代金を支払う • 「Check Payment」を押しても「支払いが確認できませ ん」と表示される • 「Contact US」で「支払ったからファイルを戻して欲し い」と毎日、計6,7回メッセージを送信
• 5/17に「Check Payment」を押すと、「支払いを受領しま した。復号を開始して下さい」と表示される • 最終的にすべてのファイルを復号することが出来た • 自分のBitcoinアドレスや支払いの証拠を送ることはなかっ たし、それを犯人に要求されることもなかった •
ただ「支払ったからファイルを戻して欲しい」というメッ セージを毎日送り続けただけ
復号処理中の画面を撮影
オンラインエンターテイメント会社に在宅勤務(32歳) クラクフ、ポーランド • 5/12に自宅のPCが感染 • 家族の写真、仕事用ファイル、音楽など、デジタルライフ のすべてが失われる • 身代金を支払う意志はあったが、払っても復元できるとは 信じられなかった
• ネットで、支払って復元できたという情報がないかを探し 続けたが見つからなかった • 金額は問題ではなかったが、支払ってもファイルが戻らな かった場合、犯罪者に寄付をすることになるため支払いを ためらった
• 5/13 「Contact US」から「支払いを行ったのでファイル を戻して欲しい」というメッセージを送信 • ネットで支払ってファイルを復元できたという情報を探し 続けたが、見つからなかったので、支払いをすることはな かった •
毎日「Contact US」から「支払った」というメッセージを 送信し、「Check Payment」を押すことを続けた
• 5/18 「Check Payment」を押すと、「支払いが確認で きました」と表示された • 結局、身代金の支払いをすることなく、ファイルを復元で きた
「Contact US」から 何回かメッセージを送れば 支払済であることを証明することなく 復号鍵を受け取れた!
支払済を証明する必要がないということは 身代金を払わなくても 何度かメッセージを送れば 復号鍵を受け取れた!
WannaCryには 誰が支払ったかを識別出来ない バグがあったためで 他のランサムウェアにも 通用する訳ではない
他人の支払いのなりすましは想定していたが 支払い情報を送らなくても復号できるのは想定外だった
5/15 Mikko Hypponen(F-Secure Chief Research Officer) 身代金の支払いを行ったWannaCry被害者の内 何名かがファイルを復元できたことを確認
マニュアル(Contact usのフォームから連絡して)で復号鍵を入手
https://www.reddit.com/r/AskNetsec/comments/6b5868/has_anyone_actually_recovered_his_files_by_paying/dhq3j3r/ 5/18 redditでもファイルを復元出来たという投稿
5/26 BleepingComputerのWannaCry掲示板 「Contact US」から支払情報を何度も送信してファイルを復元出来た https://www.bleepingcomputer.com/forums/t/646476/wannacry-wncry-wanacrypt0r-wana-decrypt0r-ransomware-help-support-topic/page-15
5/14に「支払ったが何も起こらない。誰か復号鍵を受け取った人は いますか?」と投稿。その後、何度も質問を繰り返し、最終的に ファイルを復号出来たと報告。
6月にはWannaCryのC&CサーバがDownしたため 犯人から復号鍵を受け取ることが出来なくなる
8/3 WannaCryの3つのBitcoinワレットから 全額(約14万ドル 1500万円)が引き出されMoneroに交換される
None
https://bitinfocharts.com/bitcoin/wallet/WannaCry-wallet
None
• WannaCryが3つの固定のBitcoinアドレスを使用している のは意図されたものではなくバグである • 13時間後にはバグを修正したバージョンが配布されている • 事前にBitcoinアドレスを通知すれば早く復号鍵を受取れる などのメッセージが送信されている • 個別に犯人とコンタクトしてファイルを復号できたケース
が複数報告されている • 最終的にはBitcoinがすべて引き出されている • これらのことから金銭目的である可能性が高い(それも含 めた偽装工作の可能性もあるが) WannaCryは破壊活動を目的にしたものと言う識者が多いが
Bitcoinの入金チェックは自動で出来るはずだが? 「支払いのチェックに最適な時間は、月曜から金曜の9AM-11AM(GMT)です。」
「Check Payment」を押した後にも同じ表示
• 「支払いの確認に最適な時間は、月曜から金曜の9 AM-11AM(GMT)です」の表示 • Bitcoinコインは、24時間365日取引可能 • バッチ処理で入金チェックするにしても、土日を休 む理由がない • もしかして、人力でチェックしている?
• ここまでの大量感染を想定していなかった可能性? Bitcoinの入金チェックは自動で出来るはずだが?
復号ツール
• Adrien Guinet氏によりWannaCryに感染したPCよりRSA 秘密鍵を取り出すツールWannaKeyが公開 • Benjamin Delpy氏がWannaKeyの手法を用いてWannaCry で暗号化されたファイルを復元させるツール wanakiwi を
公開 • Windows Crypto APIがRSA鍵ペアを生成する時に使われ た素数をメモリ上から正しく破棄していないため • 犯人のミスではなくCrypto APIの問題。Windows 10では 完全に破棄されている • 感染後、再起動されていないことが条件 WannaCryの復号ツール
犯人 RSA-2048 公開鍵 犯人 RSA-2048 秘密鍵 元の ファイル 暗号化された AES-128
共通鍵 暗号化 暗号化された ファイル 暗号化 犯人の公開鍵ペア 犯人 RSA-2048 公開鍵 マルウェアにハードコー ドされた犯人の公開鍵 被害者 RSA-2048 公開鍵 被害者 RSA-2048 秘密鍵 メモリ上で 被害者の公開鍵ペア生成 暗号化 暗号化された 被害者 RSA-2048 秘密鍵 00000000.eky sample.docx sample.docx.WNCRY 被害者 RSA-2048 公開鍵 00000000.pky 公開鍵をファイルに保存 AES-128 共通鍵 ファイル毎に異る 共通鍵生成 WannaKeyによる 秘密鍵の復元
犯人 RSA-2048 公開鍵 犯人 RSA-2048 秘密鍵 元の ファイル 暗号化された AES-128
共通鍵 暗号化 暗号化された ファイル 暗号化 犯人の公開鍵ペア 犯人 RSA-2048 公開鍵 マルウェアにハードコー ドされた犯人の公開鍵 被害者 RSA-2048 公開鍵 被害者 RSA-2048 秘密鍵 メモリ上で 被害者の公開鍵ペア生成 暗号化 暗号化された 被害者 RSA-2048 秘密鍵 00000000.eky sample.docx sample.docx.WNCRY 被害者 RSA-2048 公開鍵 00000000.pky 公開鍵をファイルに保存 AES-128 共通鍵 ファイル毎に異る 共通鍵生成 メモリ上の 鍵ペア破棄 WannaKeyによる 秘密鍵の復元
犯人 RSA-2048 公開鍵 犯人 RSA-2048 秘密鍵 元の ファイル 暗号化された AES-128
共通鍵 暗号化 暗号化された ファイル 暗号化 犯人の公開鍵ペア 犯人 RSA-2048 公開鍵 マルウェアにハードコー ドされた犯人の公開鍵 被害者 RSA-2048 公開鍵 被害者 RSA-2048 秘密鍵 メモリ上で 被害者の公開鍵ペア生成 暗号化 暗号化された 被害者 RSA-2048 秘密鍵 00000000.eky sample.docx sample.docx.WNCRY 被害者 RSA-2048 公開鍵 00000000.pky 公開鍵をファイルに保存 AES-128 共通鍵 ファイル毎に異る 共通鍵生成 メモリ上の 鍵ペア破棄 WannaKeyによる 秘密鍵の復元 素数
犯人 RSA-2048 公開鍵 犯人 RSA-2048 秘密鍵 元の ファイル 暗号化された AES-128
共通鍵 暗号化 暗号化された ファイル 暗号化 犯人の公開鍵ペア 犯人 RSA-2048 公開鍵 マルウェアにハードコー ドされた犯人の公開鍵 被害者 RSA-2048 公開鍵 被害者 RSA-2048 秘密鍵 メモリ上で 被害者の公開鍵ペア生成 暗号化 暗号化された 被害者 RSA-2048 秘密鍵 00000000.eky sample.docx sample.docx.WNCRY 被害者 RSA-2048 公開鍵 00000000.pky 公開鍵をファイルに保存 AES-128 共通鍵 ファイル毎に異る 共通鍵生成 メモリ上の 鍵ペア破棄 WannaKeyによる 秘密鍵の復元 素数 WannaKey
犯人 RSA-2048 公開鍵 犯人 RSA-2048 秘密鍵 元の ファイル 暗号化された AES-128
共通鍵 暗号化 暗号化された ファイル 暗号化 犯人の公開鍵ペア 犯人 RSA-2048 公開鍵 マルウェアにハードコー ドされた犯人の公開鍵 被害者 RSA-2048 公開鍵 被害者 RSA-2048 秘密鍵 メモリ上で 被害者の公開鍵ペア生成 暗号化 暗号化された 被害者 RSA-2048 秘密鍵 00000000.eky sample.docx sample.docx.WNCRY 被害者 RSA-2048 公開鍵 00000000.pky 公開鍵をファイルに保存 AES-128 共通鍵 ファイル毎に異る 共通鍵生成 メモリ上の 鍵ペア破棄 WannaKeyによる 秘密鍵の復元 素数 素数 RSA鍵ペア生成時の素数を メモリ上から抜き出す WannaKey
犯人 RSA-2048 公開鍵 犯人 RSA-2048 秘密鍵 元の ファイル 暗号化された AES-128
共通鍵 暗号化 暗号化された ファイル 暗号化 犯人の公開鍵ペア 犯人 RSA-2048 公開鍵 マルウェアにハードコー ドされた犯人の公開鍵 被害者 RSA-2048 公開鍵 被害者 RSA-2048 秘密鍵 メモリ上で 被害者の公開鍵ペア生成 暗号化 暗号化された 被害者 RSA-2048 秘密鍵 00000000.eky sample.docx sample.docx.WNCRY 被害者 RSA-2048 公開鍵 00000000.pky 公開鍵をファイルに保存 AES-128 共通鍵 ファイル毎に異る 共通鍵生成 メモリ上の 鍵ペア破棄 WannaKeyによる 秘密鍵の復元 素数 素数 RSA鍵ペア生成時の素数を メモリ上から抜き出す 鍵ペア生成 WannaKey 被害者 RSA-2048 公開鍵 被害者 RSA-2048 秘密鍵
AES-128 共通鍵 元の ファイル AES-128 共通鍵で 暗号化された ファイル 被害者の公開鍵で 暗号化された
AES-128 共通鍵 sample.docx sample.docx.WNCRY 被害者 RSA-2048 秘密鍵 復号 復号 WannaKeyで秘密鍵を取り出せれば ファイルを復号出来る ファイル毎に繰り返し
WannaCryに感染したPCより秘密鍵を取り出すツール WannaKeyを公開
WannaKeyの手法を用いて生成した秘密鍵で ファイルを復号するツールwanakiwiを公開
• WannaCryのメモリ内の鍵ペアは初期の段階で破棄される。その後に大 量のファイルの暗号化処理が走るとそれでメモリが上書きされる • 感染後時間が経っていると何も作業していなくてもバックグラウンドで 様々なプロセスが動いており、メモリが上書きされる • 復号ツール(Wanakiwi)のインストール(コピー)でもメモリが上書き される •
実験環境で、予め復号ツールをインストールし、少数のファイルのみ暗 号化された状態で、感染直後に実行した場合でも、成功率は60%程度 との報告 • 実環境で大量のファイルが暗号化され、感染後から時間が経っている場 合には、ファイル復元の可能性はかなり低い WannaCryの復号ツール
Symantec Nortonがwanakiwiのgithubをブロック
その他の復号方法
5/15 BleepingComputerのWannaCry掲示板 削除ファイルの復元ツールRecuvaで復元できたという報告
None
5/15 デスクトップ、マイドキュメントの暗号前のファイルはランダムな文 字列で上書き後、消去されるが、それ以外の場所の暗号前のファイルは単純に 消去されるだけなので、復元ツールで回復可能
6/1 ほぼ同様なことをKasperskyも発表
WannaCry感染端末でRecuvaを実行
サンプルピクチャを復元出来た
• 復号ツール(WannaKey,WanaKiwi)は、実環境で大 量のファイルが暗号化され、感染後から時間が経っ ている場合には、ファイル復元の可能性は低い • 試してみる価値はあるが、過度な期待は出来ない • デスクトップ、マイドキュメント以外のファイルは、 上書き完全消去されていないので、Recuvaなどの ファイル復元ソフトで復元できる可能性
• 再起動後であっても可能。ただし、ファイルの書き 込み操作などを行うと削除領域が上書きされ、復元 出来ない可能性 復号ツール
• 復号ツール(WannaKey,WanaKiwi)では、メモリ上 に残された素数の一部でも上書きされていればファ イルの復元の可能性はない。ゼロかイチ • ファイル復元ソフト(Recuvaなど)での復元は、削 除領域の全てが上書きされていることはまずないの で、一部のファイルだけでも復元できる可能性 • 但し、デスクトップ、マイドキュメントのファイル
は上書き完全消去されているので、ファイル復元ソ フトでは復元出来ない 復号ツール
ファイルの復号を諦めて PCをリセットする場合の 注意事項
「将来、犯人の秘密鍵がリリースされる場合も あるので、感染したPCを初期化、OSの再インス トールする場合は、暗号化されたファイルの バックアップを取っておくように」 と言われるが
• 犯人自身が公開 • TeslaCrypt、AES-NI、BTCWare、Crysis、 Dharma、 Petya(オリジナルの方。NotPetyaではない) • 競合グループにより公開 • Chimera
• 犯人逮捕により公開 • CoinVault ランサムウェアのマスター鍵がリリースされた例
犯人 RSA-2048 公開鍵 犯人 RSA-2048 秘密鍵 犯人の公開鍵で 暗号化された 被害者の秘密鍵 AES-128
共通鍵 元の ファイル AES-128 共通鍵で 暗号化された ファイル 被害者の公開鍵で 暗号化された AES-128 共通鍵 犯人の公開鍵ペア 00000000.eky 00000000.dky sample.docx sample.docx.WNCRY 犯人の公開鍵で 暗号化された 被害者の秘密鍵 送信(tor) 被害者 RSA-2048 秘密鍵 復号 被害者 RSA-2048 秘密鍵 受信(tor) 復号 復号 WannaCry 復号のプロセス
犯人 RSA-2048 公開鍵 犯人 RSA-2048 秘密鍵 犯人の公開鍵で 暗号化された 被害者の秘密鍵 AES-128
共通鍵 元の ファイル AES-128 共通鍵で 暗号化された ファイル 被害者の公開鍵で 暗号化された AES-128 共通鍵 犯人の公開鍵ペア 00000000.eky 00000000.dky sample.docx sample.docx.WNCRY 犯人の公開鍵で 暗号化された 被害者の秘密鍵 送信(tor) 被害者 RSA-2048 秘密鍵 復号 被害者 RSA-2048 秘密鍵 受信(tor) 復号 復号 WannaCry 復号のプロセス 犯人の秘密鍵がリリース されたとしても
犯人 RSA-2048 公開鍵 犯人 RSA-2048 秘密鍵 犯人の公開鍵で 暗号化された 被害者の秘密鍵 AES-128
共通鍵 元の ファイル AES-128 共通鍵で 暗号化された ファイル 被害者の公開鍵で 暗号化された AES-128 共通鍵 犯人の公開鍵ペア 00000000.eky 00000000.dky sample.docx sample.docx.WNCRY 犯人の公開鍵で 暗号化された 被害者の秘密鍵 送信(tor) 被害者 RSA-2048 秘密鍵 復号 被害者 RSA-2048 秘密鍵 受信(tor) 復号 復号 WannaCry 復号のプロセス 犯人の秘密鍵がリリース されたとしても 00000000.ekyがないと ファイルを復号出来ない
犯人 RSA-2048 公開鍵 犯人 RSA-2048 秘密鍵 犯人の公開鍵で 暗号化された 被害者の秘密鍵 AES-128
共通鍵 元の ファイル AES-128 共通鍵で 暗号化された ファイル 被害者の公開鍵で 暗号化された AES-128 共通鍵 犯人の公開鍵ペア 00000000.eky 00000000.dky sample.docx sample.docx.WNCRY 犯人の公開鍵で 暗号化された 被害者の秘密鍵 送信(tor) 被害者 RSA-2048 秘密鍵 復号 被害者 RSA-2048 秘密鍵 受信(tor) 復号 復号 WannaCry 復号のプロセス 犯人の秘密鍵がリリース されたとしても 00000000.ekyがないと ファイルを復号出来ない .WNCRYをバックアップするだけ では不十分
00000000.eky は %ALLUSERSPROFILE% の下のランダムな文字列 のフォルダに作成される Windows7だと C:¥ProgramData¥<ランダムな文字列>¥00000000.eky 「暗号化されたファイルのバックアップを取るよう に」だけじゃ、指示が不十分
None
None
Inside the digital heist that terrorized the world—and only made
$100k https://qz.com/985093/inside-the-digital-heist-that- terrorized-the-world-and-made-less-than-100k/ Is WannaCry Really Ransomware? https://securingtomorrow.mcafee.com/executive- perspectives/wannacry-really-ransomware/ WannaCry|WannaDecrypt0r NSA-Cyberweapon-Powered Ransomware Worm https://gist.github.com/rain- 1/989428fa5504f378b993ee6efbc0b168 参考資料