最近になり、韓国国内企業を対象に持続的なターゲット型攻撃が発生した。企業の侵害システムから収集された不正なファイルのうち、その大半は動的ライブラリ(DLL)ファイルであった。しかし、今回の攻撃に使用されたファイルは一般的な DLL ファイルとは違っていた。収集されたファイルは、正常なライブラリが様々な方法で悪意を持って改ざんされたファイルであった。
どのような経路でシステムに不正なファイルが生成されたのか、また最初の攻撃流入経路は何であったのかは、まだ分かっていない。また、単独実行が不可能なライブラリの特性上、これを実行するトリガー行為や追加のファイル情報も確認されなかった。しかし、現在までに収集されたファイルだけでも今回の攻撃には明確な特徴がある。
- 正常なライブラリ(DLL)ファイルの Export 情報を改ざん(追加、置換え、変更)した不正ファイル
- 不正ファイルを実行するために、有効な引数やデータファイルが必要
- 引数やデータファイルを通じて機能のモジュール化および機能置換えが可能
ライブラリファイルを利用した攻撃の特徴
正常なライブラリファイルに Export 関数を新たに追加する、または関数の形式を置換えたり、既存関数のコードを変更したりする方法により、不正ファイルを製作している。正常なコードが大半を占めているため、注意深く調べなければ正常なファイルと誤認する可能性が高い。
不正ファイルが実行されるためには、有効な引数やデータファイルが必要である。すなわち、ファイル単独だけでは把握できる機能に限界がある。自動化された解析機器においても、有効な実行結果が表示されなかった。
引数やデータファイルを利用して機能を断片化(モジュール化)している。どのような情報が入力されるかによって、メモリで実行されるコードや C&C アドレス等が異なる場合がある。システムが掌握された状態であれば、攻撃者が機能をリアルタイムで何度も置換えることができる。
ライブラリの改ざんおよび動作方式による不正ファイルのタイプ
企業の侵害システムで収集された不正なライブラリファイルは、改ざんおよび動作方法によって4つのタイプに分類できる。[表1]は、攻撃者が改ざんしたものと推定される正常なライブラリファイル名と不正なライブラリファイル収集時のファイル名、そして PE ファイルのフォーマット上の「Export Directory」に記載された DLL 名をタイプ別に列記したものである。ファイルの機能だけを見ると、各タイプ同士に直接的な関連はない。
収集された不正なライブラリファイルは、オリジナルの正常なライブラリファイルを改ざんした形だが、ファイル名は異なっている。もしファイル名が同じ場合は、攻撃者がライブラリファイルを置換える DLL ハイジャック(Hijacking)方式でマルウェアを実行した可能性がある。しかし、攻撃の最初の流入経路を含む付加情報が確認されていないため、ファイル名が変更されたのか、単純に正常なライブラリファイルを改ざんして偽装したのかは不明である。すなわち、どのように不正なライブラリファイルを実行したのかは、現在までに確認されていない。
収集された不正なライブラリファイル名は「Export Directory」構造体に記載された DLL 名とも異なっている。しかし、「Export Directory」構造体の DLL 名はライブラリがロードされるときに影響を与えない領域であるため、大きな意味はない。ただ、攻撃者が正常なライブラリファイルを改ざんする過程でこれを修正したものと予想される。
タイプ | 正常な DLL ファイル名 | 不正な DLL ファイル名 | 不正な DLL ファイルの Export DLL 名 |
A | libGLESv2.dll | – | libGLESv2.dll |
B-1 | libxml2.dll | pchsvc.dll | libxml2.dll |
B-2 | 不明 | srsvc.dll | audiosrv.dll |
C | NppExport.dll | wmicr.dll | svcloader.dll |
D | dokan1.dll | – | dokan1.dll |
D | dokan1.dll | uso.dat | dokan1.dll |
D | dokan1.dll | zlib1.cab | dokan1.dll |
[タイプ A] 不正な Export 関数の追加、引数が必要
正常な libGLESv2 ライブラリファイルに不正な Export 関数、glInitTexture を追加したものである。関数が追加されたものであるため、「Export Directory」構造体の Export 関数の個数も正常なものに比べて1つ多い。glInitTexture 関数が実行されると、32文字の長さの実行引数条件を確認する。引数を利用して内部演算を行い、その後メモリ上で不正な PE を実行する。有効な引数情報が確認されていないため、実行される PE の機能は不明である。

[タイプ B-1] 正常な関数を不正な ServiceMain 関数に置換え、ADS データが必要
正常な libxml2 ライブラリファイルの先頭の Export 関数である DllMain 関数を不正な ServiceMain 関数に置換えたものである。Export 関数の個数には変化がない。ServiceMain 関数であるため、Windows サービスとして動作する。実行過程で ADS(Alternate Data Streams)データを読み込む。ADS を利用して、実行に必要な不正なデータをユーザーが視認できないように隠している。zone と data ストリームは、それぞれ暗号化されたデータと暗号を解くためのキーデータである。内部演算の後、メモリ上で不正な PE を実行する。実行された不正な PE は rsrc ストリームデータを必要とする。最終的な機能は C&C への接続である。


[タイプ B-2] 不正な ServiceMain 関数が単独で存在、ADS データが必要
正常なライブラリファイルが存在するかどうかは判別できない。Export 関数として、Windows サービスの ServiceMain 関数のみが存在する。他のタイプとは異なり、ファイルのリソースバージョン情報がなく、不正な ServiceMain 関数を除く Export 関数がないという点を考慮すると、単独で製作された不正なライブラリファイルである可能性がある。コード展開の違いはあるが、B-1 タイプと機能が類似しており、zone と data の名前の ADS データが必要である。ストリームデータが収集されず、以降の機能は不明である。


[タイプ C] 不正な ServiceMain 以外の関数を追加、データファイルが必要
Notepad++ プラグインの NppExport ライブラリを改ざんしたものである。正常なライブラリにはない Export 関数を4つ追加しているが、Windows サービスとして動作するための ServiceMain と ServiceHandler の不正な関数以外に、AttachMove と DetachMove 関数が特徴である。AttachMove と DetachMove 関数は機能上では正常であり、オリジナルのライブラリで DllMain 関数にあったコードが移されている。固定のパスに存在する wmicc.dat データファイルを利用して内部演算を行い、その後メモリ上で不正な PE を実行する。実行された不正な PE は wmicd.dat データファイルが必要であり、最終的な機能は C&C への接続である。

[タイプ D] 既存関数のコード変更、引数が必要、データファイル生成およびロード
正常な Dokan ライブラリを改ざんしたものである。最も独自的な改ざん方式として Export 関数の追加や置換えではなく、関数内のバイナリコードだけを変更している。従来の他のタイプのように「Export Directory」構造体の情報では、改ざんの有無を確認することが難しい。また、従来の VC++ ファイルを Vmprotect でパックし、全体のコードパターンを変更しているため、コード変更の有無や機能の把握を困難にしている。Vmprotect をアンパックして Export 関数別に比較することで、変更されたコードを確認できる。コードが変更された関数は DokanNotifyXAttrUpdate である。
不正な Export 関数を呼び出す時、「-s」で始まる有効引数が渡されることで動作する。引数が渡されると、システムの %Temp% パスに VirtualStore.cab データファイルを生成することができ、特定条件に合った引数の場合はデータファイルをロードする。データファイルは C&C 通信のためのコードの実行と URL 情報である。侵害システムで多数の VirtualStore.cab データファイルが確認されたが、攻撃者が C&C サーバーをリアルタイムで変更したものと思われる。




[ファイル検知]
Backdoor/Win.Akdoor
Trojan/Win.Agent
Data/BIN.Encrypted
Data/BIN.EncryptKey
Data/BIN.EncPe
[IOC]
141c6e0f5a90b133b00a8d85aa22be67
a4a22eef112bf5d37f0fe422ebf629e5
0c1bd80923691eb5277f5969dc456c50
2ba1443fa75ced874f49586d39fa929a
798038a1546d2a0625b258885ceba88e
460507242876e7582d6744fa628cfcb6
c59552c62fb99bfd7d63f988c20125ad
08f6ab305b6fcb1ed14b48f6c8b8db76
d4e401a7ce5e5518b13e9344f70f2382
36e1c4a359e2f60007b3f87194503750
dd0eddacd65fe208baf06548635584a7
47a07dc9a87ec29f2aee20287330fa34
78c6f1cb87039ad99f39b8a880a016b2
fcb1cbc5abfa4f5644b32368f2593de3
4e3724128e3a8775d8b8ec98ea94dbc2
9731ae209364fe224d873b49e284a19f
e600fe93690175b85415f021165ca111
1509727ff1d47cf701068000d8b137ab
2fec123d69d8958c5f1e1c512da30888
dfa0adb2d2d8208f0dc7dabe97541497
hxxps://www.dbclock.com/bbs/media/preview.php
hxxp://www.krtnet.co.kr/images/support/faq.php
hxxp://www.donganmiso.com/hm_board/works/libs/info.php
hxxps://www.akdjbcc.co.kr/api/score_list.asp
hxxp://charmtour.co.uk/common/shopsearch.asp
hxxps://www.okcc.co.kr/html/board/reserve03_add.asp
hxxp://www.kwangneungcc.co.kr/admin/board/Event/list_add.asp
hxxps://www.shopingbagsdirect.com/.well-known/validation.asp
hxxps://www.kkw119.com/.well-known/pki-validation/auth.asp
hxxps://www.shoppingbagsdirect.com/.well-known/validation.asp
hxxps://www.myungokhun.co.kr/_proc/member/sitemap.asp
hxxp://youthc.or.kr/community/template.asp
hxxp://paadu.or.kr/sitemap.asp
hxxps://www.shoppingbagsdirect.com/.well-known/validation.asp
hxxp://www.youthc.or.kr/community/template.asp
hxxp://pasc.co.kr/family/data/smartlist.asp
hxxp://www.paadu.or.kr/sitemap.asp
全体のコードと更に詳細な機能説明は、「次世代脅威インテリジェンスプラットフォーム」 ATIP で提供しています。
Categories:マルウェアの情報