要点
- PartyTicketは、精巧さに欠ける貧弱な設計のランサムウェア系列で、Hermetic wiper攻撃からの注意を逸らすことを意図していると思われます。
- このランサムウェアは、GCMモードでターゲットファイルを暗号化するために使用される単一のAESキーを生成します。
- AESのキーは決定論的なランダム関数で生成されるため、RSAの秘密キーにアクセスできなくてもファイルを復号することが可能です
技術分析
2022年2月23日、ウクライナの組織を標的にしてデータの破壊とビジネス上の混乱を引き起こす目的で、「 Hermetic Wiper」という新しい高度なマルウェア系列が発見されました。Hermetic Wiperは、 ランサムウェア を装った別のマルウェア系列と連携して使用されていた様子がうかがわれます。PartyTicketとして知られるこの二次的なマルウェアは、SHA256 4dc13bb83a16d4ff9865a51b3e4d24112327c526c1392e14d56f20d6f4eaf382 で、Goプログラミング言語を使って書かれたものであり、2022-02-23 22:29:59 UTCに公開マルウェアリポジトリに提出された最初のPartyTicketサンプルです。
PartyTicketは、一般的なランサムウェア系列と大きく異なり、設計や実装が急ごしらえで精巧さに欠ける印象を受けます。例えば、PartyTicketはデータベースやその他のビジネスアプリケーションなどのプロセスを暗号化の前に終了させません。したがって、多くのアプリケーションがファイルハンドルを開いている可能性があるため、暗号化できる潜在的なファイルの数は限られています。また、このマルウェアはプログラミング言語Goのランダム関数を使って32文字の英数字キーを生成しますが、これは決定論的なものです。そのため、AES暗号キーを復元し、ファイルを復号化するために使用することができます。また、PartyTicketでは、図1に示されているように、Joe Biden米国大統領をあざ笑うような内容が多く目立ちます。
![]()
図1.米国大統領のJoe Bidenをバカにする内容を含むPartyTicketのコードリファレンス
このマルウェアは、暗号化するファイル名を1つのコマンドライン引数として受け取ります。マルウェアが引数なしで起動された場合、暗号化するファイルのリストを構築します。リスト内のすべてのファイルについて、マルウェアは、UUID Goライブラリ関数を呼び出して生成した名前を使用して、自身の新しいコピーを作成しますが、 名前は現在のタイムスタンプとシステムのMACアドレスに基きます 。
その後、暗号化するファイル名を指定して、新しいPartyTicketのコピーを実行します。この設計上の選択は非常に奇妙です。それは、すべてのファイルを暗号化するために新しいプロセスが作成されるため、システムの速度が著しく低下するからです。また、マルウェアのバイナリは3MBを超えるため、多数のコピーが作成されてディスク容量がいっぱいになってしまいます。図2は、ファイルの暗号化時に作成された多数のPartyTicketの実行ファイルの例です。
![]()
図2.ファイル暗号化中のPartyTicket実行ファイルのコピー
PartyTicket は、表 1 に示す拡張子を持つすべてのファイルを列挙します。
.docx
|
.doc
|
.dot
|
.odt
|
.pdf
|
.xls
|
.xlsx
|
.rtf
|
.ppt
|
.pptx
|
.one
|
.xps
|
.pub
|
.vsd
|
.txt
|
.jpg
|
.jpeg
|
.bmp
|
.ico
|
.png
|
.gif
|
.sql
|
.xml
|
.pgsql
|
.zip
|
.rar
|
.exe
|
.msi
|
.vdi
|
.ova
|
.avi
|
.dip
|
.epub
|
.iso
|
.sfx
|
inc
|
.contact
|
.url
|
.mp3
|
.wmv
|
.wma
|
.wtv
|
.cab
|
.acl
|
.cfg
|
.chm
|
.crt
|
.css
|
.dat
|
.dll
|
.html
|
.htm
|
表1.PartyTicketのターゲット対象となる拡張機能
Windows および Program Files フォルダにあるファイルはスキップされます。ファイル暗号化前の対象ファイルは、拡張子が[ [email protected] ].encryptedJBにリネームされている様子が図3に示されています。
![]()
図3. PartyTicketによって暗号化されたファイル拡張子の例
このマルウェアは、Base64エンコードされた2,048ビットのRSAキーをハードコード化して埋め込んでいます。文字列がBase64デコードされた後のモジュラスと指数は以下のようになります:
{"N":25717750538564445875883770450315010157700597087507334907403500443913073702720939931824608270980020206566017538751505629421265104974103147570147793053042036863191254946923781676642090335412731279862111354061120228616841376992917732378943779121050854967382946609942428983247336676216790986210080736803862945150526472173167906828929762505592535870383583936487111702345068645085659309737832227242430435624646519262394891097897303125875418724226485960819950080048563760122492117729591949924833142856225432439701811178348276860736565390543324668247780303411465497265471890279550350192239339342142099892835177175612362030619,"E":65537}
PartyTicket は、この RSAパブリックキーを使用して、ファイル暗号化に使用する AESキーを暗号化します。ファイルは、Goの関数 math.rand.Int() を用いて作成される 32 バイトの英数字文字列を用いて、GCM モードの AES で暗号化されますが、これは決定論的であるため暗号的観点からみると安全ではありません。暗号化されたファイルフォーマットは、AES-GCM nonceとして使用される最初の12バイト、AES暗号化データ、16バイトのAES-GCM認証タグ、RSA暗号化AESキー、そして最後に文字列マーカーが付加された ZVL2KH87ORH3OB1J1PO2SBHJSNFSB4A で構成されています。
各ファイルが暗号化された後、対応するランサムウェアの一時コピーが削除されます。
身代金要求書は、ユーザーのデスクトップにファイル名 read_me.html を使って書き込まれます。身代金要求書の例をWebブラウザで表示したものが図4に示されています。
![]()
図4.PartyTicketからの身代金要求書の例
特殊ID の値は、GoのUUID関数を呼び出すことで生成されるので、何の役にも立ちません。
Zscalerの対応
このような攻撃で見られるペイロードには、高度な脅威シグネチャと当社の高度なクラウドサンドボックスによって確実に対応します。
高度な脅威保護
Win32.Trojan.HermeticWiper
高度なクラウドサンドボックス
Win32.Trojan.HermeticWiper
下の図5には、PartyTicketのサンドボックス検出レポートが示されています。
![]()
図5. Zscaler クラウドサンドボックスレポート - PartyTicket