Himawariの異常な暗号
または私は如何にして心配するのを止めて暗号を解読するようになったか
中津留 勇
SecureWorks Japan 株式会社
Counter Threat Unit
2018/01/25
Japan Security Analyst Conference 2018
0: Japan Computer Emergency Response Team Coordination
Japan Computer Emergency 電子署名者
Center
DN : c=JP, st=Tokyo, l=Chiyoda-ku, email=office@jpcert.or.jp, o=Japan
Response Team Coordination Computer Emergency Response Team Coordination Center, cn=Japan
Computer Emergency Response Team Coordination Center
日付 : 2018.01.26 09:39:06 +09'00'
Center背景1

RedLeaves
標的型攻撃で使用される RAT• 2016年10月頃から日本における複数の標的型攻撃で確認

https://www.jpcert.or.jp/magazine/acreport-redleaves.html

https://github.com/5loyd/trochilus2Himawari
RedLeaves の亜種• 2017年4月頃から確認（2017年9月頃からよく見かける印象）• 暗号方式の変更など• Office 文書のマクロ or 埋め込みオブジェクトで感染

http://blog.trendmicro.co.jp/archives/15551
3

Himawari
Virus Total で取得可能な検体情報（インストーラのみ）

4

登録日時 (JST)SHA-256 ハッシュ値

ファイル名

2017-09-05 07:17:02

a16ae1e5b919dfbc211d071af94278fee3aa8
b62c6ff63126cb3f648ed4feeec

関係資料.doc.scr

2017-09-09 14:33:57

68edcbfcf985688bea2e9780e5aa3a90723ae0ab3a1e82f85d873e8a262daf62

TestDrawer.exe

2017-09-13 13:45:44

bb7398405e1b09ec53191c919dbebf5a9bf3
08a64832e299e57adf6f878c4f8e

講演会お知らせ（29年10月）doc.exe

2017-09-21 11:29:54

72f0e6a6f41301fcf02fe9e0bf5640210bd1a2
8dad6024e5eab97af8e87290e3

平成29年度 秋の艦船電波会ゴルフコン
ペ.doc.exe
関係資料.doc.exeマルウェアの暗号処理の実装不備？
Emdivi の例
t19 と t20中期• MD5文字列に add 演算および sscanf するため鍵空間が小さくなる• 総当たりによる鍵特定が可能

t20.30.4242.2091.4209.0• 2017年6月にサブミットされた検体• 6a104646464f3bb538578694acf29ce3ae430892073d85d001b3891c1456c86a• MD5 を16進数表記にする際のオフセット指定ミスがあり検体内の文字列を正しく復号できないバグが存在• advapi32 の MD5 API を使用しようとした際のミス？
5

Himawari の暗号処理解析

6

Himawari の動作
RedLeaves と動作はほぼ同じ

最近はこのファイルが無く、DLL に内包されているケースが多いz

インストーラ

7

本体 DLLHimawari が暗号化しているデータ
ファイルと通信データをそれぞれ暗号化
本体 DLL が内包されている
バイナリ

インストーラ

本体 DLL

設定データ

8

通信データ

ファイルの暗号化（一例）
XOR だけだったり、暗号鍵が変更されたり、いくつかのパターンが存在
HEADER
XOR 0x36

シェルコード.text.idata.rdataAES“gfjkdnropq
hsjfjb”
本体 DLL.data9異常な DES
設定と通信データの処理で使用されている暗号化されたデータが 8バイト単位で繰り返す• ECB モード？
FindCrypt では DES の定数がヒットする
0x73ABE3D8: found const array DES_ip (used in DES)
0x73ABE418: found const array DES_fp (used in DES)
0x73ABE458: found const array DES_ei (used in DES)
0x73ABE488: found const array DES_p32i (used in DES)
0x73ABE4E8: found const array DES_sbox2 (used in DES)
0x73ABE528: found const array DES_sbox3 (used in DES)
0x73ABE568: found const array DES_sbox4 (used in DES)
0x73ABE5A8: found const array DES_sbox5 (used in DES)
0x73ABE5E8: found const array DES_sbox6 (used in DES)
0x73ABE628: found const array DES_sbox7 (used in DES)
0x73ABE6A8: found const array DES_pc1 (used in DES)
0x73ABE6E0: found const array DES_pc2 (used in DES)
10

ひとつ目の異常
独自の DES Sbox

11

sbox1

14, 4,13, 1, 2,15,11,1,15,11, 8, 3,10, 6,12, 5, 9, 0, 7, 0,15, 7, 4,14, 2,13, 1,10, 6,12,11, 9, 5, 3, 8,4, 1,14, 8,13, 6, 2,11,15,12, 9, 7, 3,10, 5, 0,15,12, 8, 2, 4, 9, 1, 7, 5,11, 3,14,10, 0, 6,13sbox2

15, 1, 8,14, 6,11, 3, 4, 9, 7, 2,13,12, 0, 5,10, 3,13, 4, 7,15, 2, 8,14,12, 0, 1,10, 6, 9,11, 5,0,14, 7,11,10, 4,13, 1, 5, 8,12, 6, 9, 3, 2,15,13, 8,10, 1, 3,15, 4, 2,11, 6, 7,12, 0, 5,14, 9

sbox3

10, 0, 9,14, 6, 3,15, 5, 1,13,12, 7,11, 4, 2, 8,13, 7, 0, 9, 3, 4, 6,10, 2, 8, 5,14,12,11,15, 1,13, 6, 4, 9, 8,15, 3, 0,11, 1, 2,12, 5,10,14, 7, 1,10,13, 0, 6, 9, 8, 7, 4,15,14, 3,11, 5, 2,12

sbox4

7,13,14, 3, 0, 6, 9,10, 1, 2, 8, 5,11,12, 4,15,13, 8,11, 5, 6,15, 0, 3, 4, 7, 2,12, 1,10,14, 9,10, 6, 9, 0,12,11, 7,13,15, 1, 3,14, 5, 2, 8, 4, 3,15, 0, 6,10, 1,13, 8, 9, 4, 5,11,12, 7, 2,14

sbox5

2,12, 4, 1, 7,10,11, 6, 8, 5, 3,15,13, 0,14, 9,14,11, 2,12, 4, 7,13, 1, 5, 0,15,10, 3, 9, 8, 6,4, 2, 1,11,10,13, 7, 8,15, 9,12, 5, 6, 3, 0,14,11, 8,12, 7, 1,14, 2,13, 6,15, 0, 9,10, 4, 5, 3

sbox6

12, 1,10,15, 9, 2, 6, 8, 0,13, 3, 4,14, 7, 5,11,10,15, 4, 2, 7,12, 9, 5, 6, 1,13,14, 0,11, 3, 8,9,14,15, 5, 2, 8,12, 3, 7, 0, 4,10, 1,13,11, 6, 4, 3, 2,12, 9, 5,15,10,11,14, 1, 7, 6, 0, 8,13

sbox7

4,11, 2,14,15, 0, 8,13, 3,12, 9, 7, 5,10, 6, 1,13, 0,11, 7, 4, 9, 1,10,14, 3, 5,12, 2,15, 8, 6,1, 4,11,13,12, 3, 7,14,10,15, 6, 8, 0, 5, 9, 2, 6,11,13, 8, 1, 4,10, 7, 9, 5, 0,15,14, 2, 3,12

sbox8

13, 2, 8, 4, 6,15,11, 1,10, 9,13,14,9, 3,14, 5, 0,12, 7, 1,15,13, 8,10, 3, 7, 4,12, 5, 6,11, 0,14, 9, 2,7,11, 4, 1, 9,12,14, 2, 0, 6,10,13,15, 3, 5, 8, 2, 1,14, 7, 4,10, 8,13,15,12, 9, 0, 3, 5, 6,11

sbox 1, sbox8 が標準と異なるふたつ目の異常
DES 暗号鍵のリセット
DES 初期化

入力された暗号鍵から Subkeys を作成

ブロック復号

8バイトのデータを復号

データ終端？

一時データのクリーンアップ

終了

12Subkeys のデータも初期化するため、暗号鍵が “\x00” * 8 の場合と同じ状態になる設定データの復号
XOR + 異常な DES
設定データ

HEADER.text.rdata.data. stpeter0. stpeter1

13

XOR + 異常な DES“himawari”

通信データの復号（HTTP）
AES, zlib + XOR + 異常な DES

FixedValue 1

PayloadLengthPayloadCompressed

LengthFixedValue 2

AES
設定データ内の暗号鍵
14

Payloadzlib + XOR + 異常な DES
設定データ内の暗号鍵

通信データの復号（独自）
XOR, AES, zlib + XOR + 異常な DES

?

Total
LengthXOR
XOR Key
15

XOR Key

Fixed
Value 1

PayloadLengthPayloadCompressedLength

Fixed
Value 2

AES
設定データ内の暗号鍵

Payloadzlib + XOR + 異常な DES
設定データ内の暗号鍵

Lavender?
2018年1月にサブミットされた検体

https://www.hybridanalysis.com/sample/db7c1534dede15be08e651784d3a5d2ae41963d192b0f8776701b4b
72240c38d?environmentId=10016

Lavender における変化
異常な DES のみに変更• 設定データ• XOR が無くなり異常な DES のみに• 暗号鍵は LAVENDER• 通信• XOR が無くなり RC4 を使用する• RC4 の暗号鍵はデータヘッダの先頭に格納

17Fixed
Value 1

PayloadLength

RC4 Key

PayloadLengthPayloadCompressed

LengthPayloadCompressed

LengthFixedValue 2PayloadFixedValue 2

Payload暗号化されたデータの復号

18

ファイルの復号
単純な XOR + AES 復号

19異常な DES の実装
sbox の変更 + 暗号鍵のリセット

https://gist.github.com/eigenein/1275094

20

デモ21

参考情報22

参考 URL• オープンソースのRATを改良したマルウエアRedLeaves(2017-04-03)• https://www.jpcert.or.jp/magazine/acreport-redleaves.html• Cyber espionage warning• https://www.nccgroup.trust/uk/about-us/newsroom-and-events/blogs/2017/april/cyber-espionagewarning/• 「ChChes」を操る標的型サイバー攻撃キャンペーン「ChessMaster」による諜報活動の手口 | トレン
ドマイクロ セキュリティブログ• http://blog.trendmicro.co.jp/archives/15551• セキュリティ研究センターブログ: 防衛関連のファイルを装うマクロマルウェアの新しい手口• http://blog.macnica.net/blog/2017/12/post-8c22.html• マルウエアRedLeavesを検知するVolatility Plugin(2017-05-02)• https://www.jpcert.or.jp/magazine/acreport-redleaves2.html• A pure python implementation of the DES and TRIPLE DES encryption algorithms• https://gist.github.com/eigenein/1275094• ida/idapython_tools/findcrypt at master · you0708/ida• https://github.com/you0708/ida/tree/master/idapython_tools/findcrypt23参考情報24