OceanLotusが使う検出回避テクニック
検体解析やインシデント対応の中で、あるテクニックがオペレーションの多くの場面で使われているのを観測する事があります。
最近の標的型攻撃では、APT10 ANEL[1] やBlackTech TSCOOKIE[2]などエンコード・暗号化されたコードを実行時にデコード・復号し、メモリ上でPE形式のコードを実行するタイプ(ここでは、ローダーと呼称します)が多く観測されています。
攻撃者グループが使うエンコード・暗号方式も違いがあり、上述のバックドア型のマルウェアだけでなくMimikatzのようなツールも検出を回避するのにローダーが使われる事があります。
今回は、弊社で観測したOceanLotus/APT32 の検出回避テクニックについて解説します。
OceanLotus/APT32は、ベトナムに拠点を置くと見られるグループで東南アジア圏で活発な活動が観測されています。FireEye社は、彼らの観測から自動車関連企業が標的とされているという見解を発表しています[3]。弊社でも国内関連企業の海外拠点への攻撃を観測しており、その可能性は高いと考えています。
OceanLotusの検出回避テクニック
検出を回避するために2つのテクニックを活用したローダーを使っています。
DLL Side-Loading
このテクニックは、正規のEXEファイルとそのEXEファイルがロードするDLLファイルを改ざんしたものを使いアンチウイルス製品やホワイトリスト対策を回避する事を目的としています。
Base64エンコード
改ざんしたDLLファイルには、Base64エンコードされたコードが埋め込まれており実行時にデコードし、デコードしたコードを実行します。(図1)
最終的にはメモリ上にPE形式のコードが展開・実行されます。(図2)
図1. DLLファイルに埋め込まれているBase64コード
メモリ上に展開されるPE形式のコード
代表的なものはESET社が分析しているバックドア[4]がありますが、他にもダウンローダーや侵入後に使われると思われるツールの実行にも、この検出回避テクニックが使われています。
1) ダウンローダー
SHA256: 358df9aba78cf53e38c2a03c213c31ba8735e3936f9ac2c4a05cfb92ec1b2396
File Type: Win32 DLL
Time Stamp: 2018-09-24 04:47:10
Linker Version: 14.0
この検体は、PaloAlto社が"KerrDown"と呼称しており[5]、最終的にはメモリ上にPE形式のコードが展開されます。内部に埋め込まれている通信先をパラメータとして受け取り、通信先からダウンロードしたコードをメモリ上で実行します。(図3)
図3. PE形式のコードへ渡されるパラメーター
弊社では、この検体がダウンロードするpngファイルの分析ができていないのですが、公開情報[6]では、類似のURLからファイルがダウンロードされた後にCobalt Strike Beaconが実行されるという情報が共有されています。
2) Windowsユーザ追加ツール
SHA256: 53efaac9244c24fab58216a907783748d48cb32dbdc2f1f6fb672bd49f12be4c
File Type: Win32 DLL
Time Stamp: 2018-11-22 05:21:25
Linker Version: 14.0
この検体は実行されると、内部に埋め込まれているchromeインストーラーを起動する事からchromeインストーラーに偽装されて使われるものではないかと推測しています。
最終的には、検体に埋め込まれているユーザ名とパスワードが、メモリ上に展開されるPE形式のコードに渡されて、そのユーザとパスワードが実行端末上に追加されます。(図4)
この事から侵入後に内部活動をしやすくするために、複数の端末で実行させて共通のユーザとパスワードを登録するのに使われるものではないかと考えています。
図4. PE形式のコードへ渡されるパラメーター
登録するユーザー情報
user: SUPPORT_388945a1
password: @Abc123456
3) スニファー
SHA256: 7fd526e1a190c10c060bac21de17d2c90eb2985633c9ab74020a2b78acd8a4c8
File Type: Win32 DLL
Time Stamp: 2018-08-08 02:52:52
Linker Version: 14.0
この検体は実行されると、メモリ上にPE形式のコードを展開し、展開されたコードは、感染端末ネットワーク内の通信を傍受します。
パラメータとして、内部に埋め込まれている設定ファイルのパスが渡されて、そのファイルを読み込みに行きます。(図5)コード解析の結果から設定ファイルはBase64でエンコードされているものである事が分かりました。
図5. PE形式のコードへ渡されるパラメーター
通信をモニターする為に、winpcap のDLLファイルから動的にAPIをロードします。(図6)
図6. winpcapが提供するAPIをロードする処理
Windows Firewallのルールに当該検体の通信を許可する設定を追加し(図7)、内部処理用に65000/TCPのポートで接続待ち受けを行います。
後述する設定ファイルに記載されたMACアドレスを使いARPスプーフィングを行いゲートウェイ向けの通信を傍受できるようにします。
図8. ARPスプーフィングのパケット
実際の設定ファイルが入手できておらずコード解析からの推測になりますが、設定ファイルは下図のような内容でないかと思われます。(図9)
図9. 推測される設定ファイル内容 (//は、コメントとして追記)
動作する為に必要な設定ファイルには内部ネットワークの情報を記載する必要がある事から、この検体も侵入後の内部活動で使われるツールと考えています。
今回取り上げた検体がメモリ上に展開するPE形式のコードに渡すパラメーターの第一引数には、いずれも下記パスが使われており、これらの検体が同一端末で作られた可能性も考えられます。
C:\Users\Administrator\Desktop\api\temp\royal\<EXEファイル名>
OceanLotusだけではなく、BlackTechはRC4暗号化したファイルを好んで使う等、攻撃者グループが、あるテクニックをオペレーションの一連の中の複数の場面で使うケースがあります。ある端末で発見されたテクニックは、他端末の感染有無の確認項目として使うなどインシデント対応で活用する事ができると考えています。
インディケーター情報
358df9aba78cf53e38c2a03c213c31ba8735e3936f9ac2c4a05cfb92ec1b2396
53efaac9244c24fab58216a907783748d48cb32dbdc2f1f6fb672bd49f12be4c
7fd526e1a190c10c060bac21de17d2c90eb2985633c9ab74020a2b78acd8a4c8
65000/tcp (スニファーがオープンするポート)
C:\ProgramData\setting.cfg (スニファーが読み込む設定ファイル)
https://outlook.updateoffices[.]net/vean32.png
Reference
[1] https://jsac.jpcert.or.jp/archive/2019/pdf/JSAC2019_6_tamada_jp.pdf
[2] https://blogs.jpcert.or.jp/ja/2018/03/tscookie.html
[3] https://www.bloomberg.com/news/articles/2019-03-20/vietnam-tied-hackers-target-auto-industry-firms-fireeye-says
[4] https://www.welivesecurity.com/wp-content/uploads/2018/03/ESET_OceanLotus.pdf
[5] https://www.paloaltonetworks.jp/company/in-the-news/2019/tracking-oceanlotus-new-downloader-kerrdown
[6] https://twitter.com/blackorbird/status/1086186184768815104
フォローしませんか?