$30 off During Our Annual Pro Sale. View Details »

WannaCryの暗号化・復号のプロセス、身代金の支払い、復号ツール #ssmjp /ssmjp1710-1

WannaCryの暗号化・復号のプロセス、身代金の支払い、復号ツール #ssmjp /ssmjp1710-1

Takuji Kitagawa

November 13, 2017
Tweet

More Decks by Takuji Kitagawa

Other Decks in Technology

Transcript

  1. WannaCryの
    暗号化・復号のプロセス
    身代金の支払い
    復号ツール
    @kitagawa_takuji

    View Slide

  2. #ssmjp 2017/10 #1
    https://ssmjp.connpass.com/event/68090/
    で使用したスライドの一部です

    View Slide

  3. 身代金を支払えば
    ファイルは戻るのか?

    View Slide

  4. • 3つの固定のビットコインアドレス
    115p7UMMngoj1pMvkpHijcRdfJNXj6LrLn
    12t9YDPgwueZ9NyMgw519p7AA8isjr6SMw
    13AM4VW2dhxYgXeQepoHkHSQuy6NgaEb94
    • $300 を要求、3日経つと $600 に倍増
    • 「7日間で支払いを行わないと、ファイルを永久に回復す
    ることはできません」と脅す
    • 338件、14万ドル(約1500万円)の支払い
    (2017年7月時点)
    WannaCryの身代金の支払い

    View Slide

  5. • 通常のランサムウェアは被害者毎に異なるビットコ
    インアドレスを用いることにより、誰が支払ったか
    を識別する
    • 被害者毎に異なるビットコインアドレスを用いるこ
    とにより追跡を困難にする
    通常のランサムウェアは

    View Slide

  6. Bitcoinの取引履歴はすべて公開されている
    共通のBitcoinアドレスを用いると追跡され易くなる

    View Slide

  7. WannaCryには被害者毎に異なるBitcoinアドレスを提供する
    コードがあるのだが、バグによりハードコードされたBitcoin
    アドレスが提供される

    View Slide

  8. 最初の感染の13時間後にはバグを修正したバージョンが配布
    されている。だが、殆どの感染はバグのあるバージョン

    View Slide

  9. 被害者毎のBitcoinアドレスを受け取るコードの呼び出し順序を変更

    View Slide

  10. • WannaCryには被害者毎に異なるBitcoin
    アドレスを提供するコードがあるのだが、
    バグによりハードコードされた3つの
    Bitcoinアドレスの内1つが提供されるよ
    うになっている
    • よって、犯人は誰が支払ったかを識別する
    ことが出来ない

    View Slide

  11. WannaCryの
    暗号化・復号のプロセス

    View Slide

  12. 元の
    ファイル
    sample.docx
    WannaCry
    暗号化のプロセス

    View Slide

  13. 犯人
    RSA-2048
    公開鍵
    犯人
    RSA-2048
    秘密鍵
    元の
    ファイル
    犯人の公開鍵ペア
    sample.docx
    WannaCry
    暗号化のプロセス

    View Slide

  14. 犯人
    RSA-2048
    公開鍵
    犯人
    RSA-2048
    秘密鍵
    元の
    ファイル
    犯人の公開鍵ペア
    犯人
    RSA-2048
    公開鍵
    マルウェアにハードコー
    ドされた犯人の公開鍵
    sample.docx
    WannaCry
    暗号化のプロセス

    View Slide

  15. 犯人
    RSA-2048
    公開鍵
    犯人
    RSA-2048
    秘密鍵
    元の
    ファイル
    犯人の公開鍵ペア
    犯人
    RSA-2048
    公開鍵
    マルウェアにハードコー
    ドされた犯人の公開鍵
    被害者
    RSA-2048
    公開鍵
    被害者
    RSA-2048
    秘密鍵
    メモリ上で
    被害者の公開鍵ペア生成
    sample.docx
    WannaCry
    暗号化のプロセス

    View Slide

  16. 犯人
    RSA-2048
    公開鍵
    犯人
    RSA-2048
    秘密鍵
    元の
    ファイル
    犯人の公開鍵ペア
    犯人
    RSA-2048
    公開鍵
    マルウェアにハードコー
    ドされた犯人の公開鍵
    被害者
    RSA-2048
    公開鍵
    被害者
    RSA-2048
    秘密鍵
    メモリ上で
    被害者の公開鍵ペア生成
    sample.docx
    被害者
    RSA-2048
    公開鍵 00000000.pky
    公開鍵をファイルに保存
    WannaCry
    暗号化のプロセス

    View Slide

  17. 犯人
    RSA-2048
    公開鍵
    犯人
    RSA-2048
    秘密鍵
    元の
    ファイル
    犯人の公開鍵ペア
    犯人
    RSA-2048
    公開鍵
    マルウェアにハードコー
    ドされた犯人の公開鍵
    被害者
    RSA-2048
    公開鍵
    被害者
    RSA-2048
    秘密鍵
    メモリ上で
    被害者の公開鍵ペア生成
    暗号化 暗号化された
    被害者
    RSA-2048
    秘密鍵
    00000000.eky
    sample.docx
    被害者
    RSA-2048
    公開鍵 00000000.pky
    公開鍵をファイルに保存
    WannaCry
    暗号化のプロセス

    View Slide

  18. 犯人
    RSA-2048
    公開鍵
    犯人
    RSA-2048
    秘密鍵
    元の
    ファイル
    犯人の公開鍵ペア
    犯人
    RSA-2048
    公開鍵
    マルウェアにハードコー
    ドされた犯人の公開鍵
    被害者
    RSA-2048
    公開鍵
    被害者
    RSA-2048
    秘密鍵
    メモリ上で
    被害者の公開鍵ペア生成
    暗号化 暗号化された
    被害者
    RSA-2048
    秘密鍵
    00000000.eky
    sample.docx
    被害者
    RSA-2048
    公開鍵 00000000.pky
    公開鍵をファイルに保存
    メモリ上の
    鍵ペア破棄
    WannaCry
    暗号化のプロセス

    View Slide

  19. 犯人
    RSA-2048
    公開鍵
    犯人
    RSA-2048
    秘密鍵
    元の
    ファイル
    犯人の公開鍵ペア
    犯人
    RSA-2048
    公開鍵
    マルウェアにハードコー
    ドされた犯人の公開鍵
    被害者
    RSA-2048
    公開鍵
    被害者
    RSA-2048
    秘密鍵
    メモリ上で
    被害者の公開鍵ペア生成
    暗号化 暗号化された
    被害者
    RSA-2048
    秘密鍵
    00000000.eky
    sample.docx
    被害者
    RSA-2048
    公開鍵 00000000.pky
    公開鍵をファイルに保存
    AES-128
    共通鍵
    ファイル毎に異る
    共通鍵生成
    メモリ上の
    鍵ペア破棄
    WannaCry
    暗号化のプロセス

    View Slide

  20. 犯人
    RSA-2048
    公開鍵
    犯人
    RSA-2048
    秘密鍵
    元の
    ファイル
    暗号化された
    ファイル
    暗号化
    犯人の公開鍵ペア
    犯人
    RSA-2048
    公開鍵
    マルウェアにハードコー
    ドされた犯人の公開鍵
    被害者
    RSA-2048
    公開鍵
    被害者
    RSA-2048
    秘密鍵
    メモリ上で
    被害者の公開鍵ペア生成
    暗号化 暗号化された
    被害者
    RSA-2048
    秘密鍵
    00000000.eky
    sample.docx
    被害者
    RSA-2048
    公開鍵 00000000.pky
    公開鍵をファイルに保存
    AES-128
    共通鍵
    ファイル毎に異る
    共通鍵生成
    メモリ上の
    鍵ペア破棄
    WannaCry
    暗号化のプロセス

    View Slide

  21. 犯人
    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
    暗号化のプロセス

    View Slide

  22. 犯人
    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
    暗号化のプロセス

    View Slide

  23. 犯人
    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
    暗号化のプロセス
    ファイル毎に繰り返し

    View Slide

  24. 犯人
    RSA-2048
    公開鍵
    犯人
    RSA-2048
    秘密鍵
    犯人の公開鍵で
    暗号化された
    被害者の秘密鍵
    AES-128
    共通鍵で
    暗号化された
    ファイル
    被害者の公開鍵で
    暗号化された
    AES-128
    共通鍵
    犯人の公開鍵ペア
    00000000.eky
    sample.docx.WNCRY
    WannaCry
    復号のプロセス

    View Slide

  25. 犯人
    RSA-2048
    公開鍵
    犯人
    RSA-2048
    秘密鍵
    犯人の公開鍵で
    暗号化された
    被害者の秘密鍵
    AES-128
    共通鍵で
    暗号化された
    ファイル
    被害者の公開鍵で
    暗号化された
    AES-128
    共通鍵
    犯人の公開鍵ペア
    00000000.eky
    sample.docx.WNCRY
    WannaCry
    復号のプロセス
    犯人の公開鍵で
    暗号化された
    被害者の秘密鍵
    送信(tor)

    View Slide

  26. 犯人
    RSA-2048
    公開鍵
    犯人
    RSA-2048
    秘密鍵
    犯人の公開鍵で
    暗号化された
    被害者の秘密鍵
    AES-128
    共通鍵で
    暗号化された
    ファイル
    被害者の公開鍵で
    暗号化された
    AES-128
    共通鍵
    犯人の公開鍵ペア
    00000000.eky
    sample.docx.WNCRY
    被害者
    RSA-2048
    秘密鍵
    復号
    WannaCry
    復号のプロセス
    犯人の公開鍵で
    暗号化された
    被害者の秘密鍵
    送信(tor)

    View Slide

  27. 犯人
    RSA-2048
    公開鍵
    犯人
    RSA-2048
    秘密鍵
    犯人の公開鍵で
    暗号化された
    被害者の秘密鍵
    AES-128
    共通鍵で
    暗号化された
    ファイル
    被害者の公開鍵で
    暗号化された
    AES-128
    共通鍵
    犯人の公開鍵ペア
    00000000.eky
    sample.docx.WNCRY
    被害者
    RSA-2048
    秘密鍵
    復号
    WannaCry
    復号のプロセス
    犯人の公開鍵で
    暗号化された
    被害者の秘密鍵
    送信(tor)
    00000000.dky
    被害者
    RSA-2048
    秘密鍵
    受信(tor)

    View Slide

  28. 犯人
    RSA-2048
    公開鍵
    犯人
    RSA-2048
    秘密鍵
    犯人の公開鍵で
    暗号化された
    被害者の秘密鍵
    AES-128
    共通鍵で
    暗号化された
    ファイル
    被害者の公開鍵で
    暗号化された
    AES-128
    共通鍵
    犯人の公開鍵ペア
    00000000.eky
    sample.docx.WNCRY
    被害者
    RSA-2048
    秘密鍵
    復号
    AES-128
    共通鍵
    復号
    WannaCry
    復号のプロセス
    犯人の公開鍵で
    暗号化された
    被害者の秘密鍵
    送信(tor)
    00000000.dky
    被害者
    RSA-2048
    秘密鍵
    受信(tor)

    View Slide

  29. 犯人
    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)

    View Slide

  30. 犯人
    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)
    ファイル毎に繰り返し

    View Slide

  31. Bitcoinの支払いと
    復号のプロセス

    View Slide

  32. C&Cサーバへのアクセス

    View Slide

  33. 「Contact US」からメッセージを送信

    View Slide

  34. ユーザ識別情報で被害者のトラッキングが可能
    • 「Contact US」、「Check Payment」ともに、
    ユーザ識別情報が送信される
    • ユーザ識別情報
    <8byteのID>
    • 8byteのID
    • 感染初期時にCryptGenRandomにより生成
    • ファイル 00000000.res の先頭8byteに書かれ
    永続的に使用

    View Slide

  35. 本来想定された
    Bitcoinの支払いと
    ファイル復号のプロセス

    View Slide

  36. VictimID
    • 8-byteのID(CryptGenRandomで生成した乱数)
    • ComputerName
    • UserName
    C&Cサーバ(.onion)
    00000000.eky
    犯人の公開鍵で暗号化され
    た被害者の秘密鍵
    本来想定された動作

    View Slide

  37. ユーザ識別子を送信
    VictimID
    • 8-byteのID(CryptGenRandomで生成した乱数)
    • ComputerName
    • UserName
    C&Cサーバ(.onion)
    00000000.eky
    犯人の公開鍵で暗号化され
    た被害者の秘密鍵
    本来想定された動作
    VictimID

    View Slide

  38. ユーザ識別子を送信
    VictimID
    • 8-byteのID(CryptGenRandomで生成した乱数)
    • ComputerName
    • UserName
    被害者毎のBitcoinアドレスを生成
    C&Cサーバ(.onion)
    00000000.eky
    犯人の公開鍵で暗号化され
    た被害者の秘密鍵
    生成
    被害者毎に異る
    Bitcoinアドレス
    本来想定された動作
    VictimID

    View Slide

  39. ユーザ識別子を送信
    VictimID
    • 8-byteのID(CryptGenRandomで生成した乱数)
    • ComputerName
    • UserName
    被害者毎のBitcoinアドレスを生成
    C&Cサーバ(.onion)
    00000000.eky
    犯人の公開鍵で暗号化され
    た被害者の秘密鍵
    生成
    被害者毎に異る
    Bitcoinアドレス
    本来想定された動作
    VictimID
    Bitcoinアドレス

    View Slide

  40. ユーザ識別子を送信
    VictimID
    • 8-byteのID(CryptGenRandomで生成した乱数)
    • ComputerName
    • UserName
    被害者毎のBitcoinアドレスを生成
    Bitcoinアドレスを
    c.wnryに保存
    c.wnry
    C&Cより受信したBitcoin
    アドレス
    C&Cサーバ(.onion)
    00000000.eky
    犯人の公開鍵で暗号化され
    た被害者の秘密鍵
    生成
    被害者毎に異る
    Bitcoinアドレス
    本来想定された動作
    VictimID
    Bitcoinアドレス

    View Slide

  41. ユーザ識別子を送信
    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アドレス

    View Slide

  42. ユーザ識別子を送信
    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アドレス

    View Slide

  43. ユーザ識別子を送信
    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アドレス

    View Slide

  44. ユーザ識別子を送信
    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

    View Slide

  45. ユーザ識別子を送信
    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

    View Slide

  46. ユーザ識別子を送信
    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
    被害者の秘密鍵

    View Slide

  47. ユーザ識別子を送信
    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
    被害者の秘密鍵

    View Slide

  48. ユーザ識別子を送信
    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
    被害者の秘密鍵

    View Slide

  49. 犯人
    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)
    ファイル毎に繰り返し

    View Slide

  50. バグによる実際の動作

    View Slide

  51. ユーザ識別子を送信
    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
    被害者の秘密鍵

    View Slide

  52. ユーザ識別子を送信
    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を復号

    View Slide

  53. ユーザ識別子を送信
    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を復号

    View Slide

  54. ユーザ識別子を送信
    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を復号

    View Slide

  55. ユーザ識別子を送信
    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を復号

    View Slide

  56. ユーザ識別子を送信
    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の復号は行われ
    ない
    (バグによる)実際の動作

    View Slide

  57. ユーザ識別子を送信
    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の復号は行われ
    ない
    (バグによる)実際の動作

    View Slide

  58. バグを修正したバージョンを配布

    View Slide

  59. 被害者毎のBitcoinアドレスを受け取るコードの呼び出し順序を変更

    View Slide

  60. • WannaCryは被害者毎に異なるBitcoinアドレスを
    提供するコードがあるのだが、バグによりハード
    コードされた3つのBitcoinアドレスの内1つが提
    供されるようになっている
    • よって、犯人は誰が支払ったかを認識することが出
    来ない
    • もし支払ったとしても、個別に犯人と交渉しなけれ
    ばファイルは戻らない
    身代金を支払いをすればファイルは復元出来るのか

    View Slide

  61. 5/18 すべての感染した端末にメッセージが送信される

    View Slide

  62. 既に正しい額のビットコインを送信した多くの顧客に復号鍵を送信している。誠実
    な顧客には復号を保証する。支払いの1時間前にビットコインアドレスをメッセー
    ジで送信して欲しい。そうすれば復号鍵をもっと迅速に受け取れるだろう。

    View Slide

  63. この手順で支払者の識別が可能か?
    • 「Contact US」「Check Payment」ともに、ユーザ識別
    情報が送信される
    • 「Contact US」から、事前にBitcoinアドレスを通知
    • 通知済みのBitcoinアドレスからの入金を確認できれば、
    「Contact US」のユーザ識別情報に対し、支払済とマーク
    • 「Check Payment」のユーザ識別情報が支払済であれば、
    00000000.ekyを復号して秘密鍵を被害者に送信

    View Slide

  64. 既に支払済の場合、
    どうやって支払済であることを証明するのか?

    View Slide

  65. Bitcoinの取引情報はすべて公開されている
    他人の取引情報を示して「自分の支払いだ」となりすますことも可能

    View Slide

  66. 被害者
    「5/XX X時X分にBitcoinアドレスAAAAから0.16BTCを支払った」
    「ファイルを戻して欲しい」
    犯人
    「 AAAAがお前のものであることを証明するために、
    非公開のBitcoinアドレスBBBBに0.00001BTCを送金してくれ!」
    被害者
    「送金した!」
    犯人
    「AAAAから非公開のBBBBへの入金を確認した」
    「確かにAAAAはお前が所有しており、なりすましではないな」
    「よし、復号鍵を送ろう」
    既に支払済の者が、
    自分の支払いであることを証明する方法(の想定の一例)

    View Slide

  67. 二人のWannaCry被害者への取材記事
    https://qz.com/985093/inside-the-digital-heist-that-terrorized-the-world-and-made-less-than-100k/

    View Slide

  68. シアトルの土地測量会社 共同経営者(34歳)
    (記事では名前、会社名が記載されており、検索すると実在する会社で経営者として名前が出ている)
    • 5/12経営する会社のサーバのファイルのほぼ全てが暗号化
    • 業務がすべて止まる
    • IT業者に相談するが、何も出来ないと言われる
    • 5/13にBitcoinで身代金を支払う
    • 「Check Payment」を押しても「支払いが確認できませ
    ん」と表示される
    • 「Contact US」で「支払ったからファイルを戻して欲し
    い」と毎日、計6,7回メッセージを送信

    View Slide

  69. • 5/17に「Check Payment」を押すと、「支払いを受領しま
    した。復号を開始して下さい」と表示される
    • 最終的にすべてのファイルを復号することが出来た
    • 自分のBitcoinアドレスや支払いの証拠を送ることはなかっ
    たし、それを犯人に要求されることもなかった
    • ただ「支払ったからファイルを戻して欲しい」というメッ
    セージを毎日送り続けただけ

    View Slide

  70. 復号処理中の画面を撮影

    View Slide

  71. オンラインエンターテイメント会社に在宅勤務(32歳)
    クラクフ、ポーランド
    • 5/12に自宅のPCが感染
    • 家族の写真、仕事用ファイル、音楽など、デジタルライフ
    のすべてが失われる
    • 身代金を支払う意志はあったが、払っても復元できるとは
    信じられなかった
    • ネットで、支払って復元できたという情報がないかを探し
    続けたが見つからなかった
    • 金額は問題ではなかったが、支払ってもファイルが戻らな
    かった場合、犯罪者に寄付をすることになるため支払いを
    ためらった

    View Slide

  72. • 5/13 「Contact US」から「支払いを行ったのでファイル
    を戻して欲しい」というメッセージを送信
    • ネットで支払ってファイルを復元できたという情報を探し
    続けたが、見つからなかったので、支払いをすることはな
    かった
    • 毎日「Contact US」から「支払った」というメッセージを
    送信し、「Check Payment」を押すことを続けた

    View Slide

  73. • 5/18 「Check Payment」を押すと、「支払いが確認で
    きました」と表示された
    • 結局、身代金の支払いをすることなく、ファイルを復元で
    きた

    View Slide

  74. 「Contact US」から
    何回かメッセージを送れば
    支払済であることを証明することなく
    復号鍵を受け取れた!

    View Slide

  75. 支払済を証明する必要がないということは
    身代金を払わなくても
    何度かメッセージを送れば
    復号鍵を受け取れた!

    View Slide

  76. WannaCryには
    誰が支払ったかを識別出来ない
    バグがあったためで
    他のランサムウェアにも
    通用する訳ではない

    View Slide

  77. 他人の支払いのなりすましは想定していたが
    支払い情報を送らなくても復号できるのは想定外だった

    View Slide

  78. 5/15 Mikko Hypponen(F-Secure Chief Research Officer)
    身代金の支払いを行ったWannaCry被害者の内
    何名かがファイルを復元できたことを確認

    View Slide

  79. マニュアル(Contact usのフォームから連絡して)で復号鍵を入手

    View Slide

  80. https://www.reddit.com/r/AskNetsec/comments/6b5868/has_anyone_actually_recovered_his_files_by_paying/dhq3j3r/
    5/18 redditでもファイルを復元出来たという投稿

    View Slide

  81. 5/26 BleepingComputerのWannaCry掲示板
    「Contact US」から支払情報を何度も送信してファイルを復元出来た
    https://www.bleepingcomputer.com/forums/t/646476/wannacry-wncry-wanacrypt0r-wana-decrypt0r-ransomware-help-support-topic/page-15

    View Slide

  82. 5/14に「支払ったが何も起こらない。誰か復号鍵を受け取った人は
    いますか?」と投稿。その後、何度も質問を繰り返し、最終的に
    ファイルを復号出来たと報告。

    View Slide

  83. 6月にはWannaCryのC&CサーバがDownしたため
    犯人から復号鍵を受け取ることが出来なくなる

    View Slide

  84. 8/3 WannaCryの3つのBitcoinワレットから
    全額(約14万ドル 1500万円)が引き出されMoneroに交換される

    View Slide

  85. View Slide

  86. https://bitinfocharts.com/bitcoin/wallet/WannaCry-wallet

    View Slide

  87. View Slide

  88. • WannaCryが3つの固定のBitcoinアドレスを使用している
    のは意図されたものではなくバグである
    • 13時間後にはバグを修正したバージョンが配布されている
    • 事前にBitcoinアドレスを通知すれば早く復号鍵を受取れる
    などのメッセージが送信されている
    • 個別に犯人とコンタクトしてファイルを復号できたケース
    が複数報告されている
    • 最終的にはBitcoinがすべて引き出されている
    • これらのことから金銭目的である可能性が高い(それも含
    めた偽装工作の可能性もあるが)
    WannaCryは破壊活動を目的にしたものと言う識者が多いが

    View Slide

  89. Bitcoinの入金チェックは自動で出来るはずだが?
    「支払いのチェックに最適な時間は、月曜から金曜の9AM-11AM(GMT)です。」

    View Slide

  90. 「Check Payment」を押した後にも同じ表示

    View Slide

  91. • 「支払いの確認に最適な時間は、月曜から金曜の9
    AM-11AM(GMT)です」の表示
    • Bitcoinコインは、24時間365日取引可能
    • バッチ処理で入金チェックするにしても、土日を休
    む理由がない
    • もしかして、人力でチェックしている?
    • ここまでの大量感染を想定していなかった可能性?
    Bitcoinの入金チェックは自動で出来るはずだが?

    View Slide

  92. 復号ツール

    View Slide

  93. • Adrien Guinet氏によりWannaCryに感染したPCよりRSA
    秘密鍵を取り出すツールWannaKeyが公開
    • Benjamin Delpy氏がWannaKeyの手法を用いてWannaCry
    で暗号化されたファイルを復元させるツール wanakiwi を
    公開
    • Windows Crypto APIがRSA鍵ペアを生成する時に使われ
    た素数をメモリ上から正しく破棄していないため
    • 犯人のミスではなくCrypto APIの問題。Windows 10では
    完全に破棄されている
    • 感染後、再起動されていないことが条件
    WannaCryの復号ツール

    View Slide

  94. 犯人
    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による
    秘密鍵の復元

    View Slide

  95. 犯人
    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による
    秘密鍵の復元

    View Slide

  96. 犯人
    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による
    秘密鍵の復元
    素数

    View Slide

  97. 犯人
    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

    View Slide

  98. 犯人
    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

    View Slide

  99. 犯人
    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
    秘密鍵

    View Slide

  100. AES-128
    共通鍵
    元の
    ファイル
    AES-128
    共通鍵で
    暗号化された
    ファイル
    被害者の公開鍵で
    暗号化された
    AES-128
    共通鍵
    sample.docx
    sample.docx.WNCRY
    被害者
    RSA-2048
    秘密鍵
    復号
    復号
    WannaKeyで秘密鍵を取り出せれば
    ファイルを復号出来る
    ファイル毎に繰り返し

    View Slide

  101. WannaCryに感染したPCより秘密鍵を取り出すツール
    WannaKeyを公開

    View Slide

  102. WannaKeyの手法を用いて生成した秘密鍵で
    ファイルを復号するツールwanakiwiを公開

    View Slide

  103. • WannaCryのメモリ内の鍵ペアは初期の段階で破棄される。その後に大
    量のファイルの暗号化処理が走るとそれでメモリが上書きされる
    • 感染後時間が経っていると何も作業していなくてもバックグラウンドで
    様々なプロセスが動いており、メモリが上書きされる
    • 復号ツール(Wanakiwi)のインストール(コピー)でもメモリが上書き
    される
    • 実験環境で、予め復号ツールをインストールし、少数のファイルのみ暗
    号化された状態で、感染直後に実行した場合でも、成功率は60%程度
    との報告
    • 実環境で大量のファイルが暗号化され、感染後から時間が経っている場
    合には、ファイル復元の可能性はかなり低い
    WannaCryの復号ツール

    View Slide

  104. Symantec Nortonがwanakiwiのgithubをブロック

    View Slide

  105. その他の復号方法

    View Slide

  106. 5/15 BleepingComputerのWannaCry掲示板
    削除ファイルの復元ツールRecuvaで復元できたという報告

    View Slide

  107. View Slide

  108. 5/15 デスクトップ、マイドキュメントの暗号前のファイルはランダムな文
    字列で上書き後、消去されるが、それ以外の場所の暗号前のファイルは単純に
    消去されるだけなので、復元ツールで回復可能

    View Slide

  109. 6/1 ほぼ同様なことをKasperskyも発表

    View Slide

  110. WannaCry感染端末でRecuvaを実行

    View Slide

  111. サンプルピクチャを復元出来た

    View Slide

  112. • 復号ツール(WannaKey,WanaKiwi)は、実環境で大
    量のファイルが暗号化され、感染後から時間が経っ
    ている場合には、ファイル復元の可能性は低い
    • 試してみる価値はあるが、過度な期待は出来ない
    • デスクトップ、マイドキュメント以外のファイルは、
    上書き完全消去されていないので、Recuvaなどの
    ファイル復元ソフトで復元できる可能性
    • 再起動後であっても可能。ただし、ファイルの書き
    込み操作などを行うと削除領域が上書きされ、復元
    出来ない可能性
    復号ツール

    View Slide

  113. • 復号ツール(WannaKey,WanaKiwi)では、メモリ上
    に残された素数の一部でも上書きされていればファ
    イルの復元の可能性はない。ゼロかイチ
    • ファイル復元ソフト(Recuvaなど)での復元は、削
    除領域の全てが上書きされていることはまずないの
    で、一部のファイルだけでも復元できる可能性
    • 但し、デスクトップ、マイドキュメントのファイル
    は上書き完全消去されているので、ファイル復元ソ
    フトでは復元出来ない
    復号ツール

    View Slide

  114. ファイルの復号を諦めて
    PCをリセットする場合の
    注意事項

    View Slide

  115. 「将来、犯人の秘密鍵がリリースされる場合も
    あるので、感染したPCを初期化、OSの再インス
    トールする場合は、暗号化されたファイルの
    バックアップを取っておくように」
    と言われるが

    View Slide

  116. • 犯人自身が公開
    • TeslaCrypt、AES-NI、BTCWare、Crysis、 Dharma、
    Petya(オリジナルの方。NotPetyaではない)
    • 競合グループにより公開
    • Chimera
    • 犯人逮捕により公開
    • CoinVault
    ランサムウェアのマスター鍵がリリースされた例

    View Slide

  117. 犯人
    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
    復号のプロセス

    View Slide

  118. 犯人
    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
    復号のプロセス
    犯人の秘密鍵がリリース
    されたとしても

    View Slide

  119. 犯人
    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がないと
    ファイルを復号出来ない

    View Slide

  120. 犯人
    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をバックアップするだけ
    では不十分

    View Slide

  121. 00000000.eky は
    %ALLUSERSPROFILE% の下のランダムな文字列
    のフォルダに作成される
    Windows7だと
    C:¥ProgramData¥<ランダムな文字列>¥00000000.eky
    「暗号化されたファイルのバックアップを取るよう
    に」だけじゃ、指示が不十分

    View Slide

  122. View Slide

  123. View Slide

  124. 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
    参考資料

    View Slide