OceanLotusは、サイバースパイを専門としており、東南アジアを優先目標としています。 攻撃者は、潜在的な被害者の注意を引く文書を偽造して、バックドアを実行するように仕向け、またツールの開発に取り組みます。 おとりを作成するために使用される方法は、さまざまな攻撃で異なります-「二重拡張子」のファイル、自己解凍アーカイブ、マクロを含むドキュメントから、よく知られているエクスプロイトまで。
Microsoft Equation Editorでエクスプロイトを使用する
2018年半ばに、OceanLotusはCVE-2017-11882脆弱性を使用したキャンペーンを開始しました。 サイバーグループの悪意のあるドキュメントの1つは、360個の脅威インテリジェンスセンターの専門家( 中国語の調査 )によって、エクスプロイトの詳細な説明を含めて分析されました。 以下の投稿-このような悪意のあるドキュメントの概要。
第一段階
FW Report on demonstration of former CNRP in Republic of Korea.doc
(SHA-1:
D1357B284C951470066AAA7A8228190B88A5C7C3
)は、上記の研究で言及されたものと類似しています。 興味深いのは、カンボジアの政治に関心のあるユーザーをターゲットにしている点です(CNRP-カンボジアの国家救助党、2017年末に解散)。 拡張子は.docですが、ドキュメントはRTF形式(下図を参照)であり、ジャンクコードが含まれており、歪んでいます。
図1. RTFのゴミ箱
不正な形式の要素が存在するにもかかわらず、WordはこのRTFファイルを正常に開きます。 図2から分かるように、オフセットが0xC00であるEQNOLEFILEHDR構造があり、その後にフォントのMTEFヘッダー、MTEFエントリ(図3)が続きます。
図2. FONTレコード値
図3. フォントの記録形式
コピーする前にサイズがチェックされないため、 名前フィールドでオーバーフローが発生する可能性があります。 名前が長すぎると、脆弱性が引き起こされます。 RTFファイルの内容(図2のオフセット0xC26)からわかるように、バッファーはシェルコードで埋められ、その後にダミーコマンド(
0x90
)が続き、アドレス
0x402114
返されます。 アドレスは、
RET
ステートメントを指す
EQNEDT32.exe
ダイアログ項目です。 これにより、EIPはシェルコードを含む名前フィールドの先頭を指します。
図4.エクスプロイトシェルコードの開始
アドレス
0x45BD3C
は、現在ロードされている
MTEFData
構造へのポインターに到達するまで間接参照される変数を格納します。 これはシェルコードの残りの部分です。
シェルコードの目的は、開いているドキュメントに埋め込まれたシェルコードの2番目のフラグメントを実行することです。 まず、ソースシェルコードは開いているドキュメントのファイル記述子を見つけようとし、すべてのシステム記述子(
SystemExtendedHandleInformation
引数を持つ
NtQuerySystemInformation
を
NtQuerySystemInformation
し、記述子PIDと
WinWord
プロセスのPIDが
WinWord
するかどうか、およびドキュメントがアクセスマスク
0x12019F
開かれたかどうかを確認します。
正しい記述子(別の開いている文書の記述子ではない)の検出を確認するために、ファイルの内容は
CreateFileMapping
関数を使用して表示され、シェルコードは文書の最後の4バイトが「
yyyy
」(卵狩り方法)と一致するかどうかを確認します。 一致が見つかるとすぐに、ドキュメントは
ole.dll
として一時フォルダー(
GetTempPath
)にコピーされます。 次に、ドキュメントの最後の12バイトが読み取られます。
図5.文書の終わりのマーカー
AABBCCDD
マーカーと
yyyy
マーカーの間の32ビット値は、次の
AABBCCDD
オフセットです。
CreateThread
関数を使用して呼び出されます。 以前にOceanLotusで使用されていたものと同じシェルコードを抽出しました。 2018年3月にリリースしたPythonエミュレーションスクリプトは、第2段階をダンプするために引き続き機能します。
第二段階
コンポーネント検索
ファイル名とディレクトリ名は動的に選択されます。 このコードは、
C:\Windows\system32
にある実行可能ファイルまたはDLLファイルの名前をランダムに選択します。 次に、彼は自分のリソースにリクエストを行い、フォルダ名として使用する
FileDescription
フィールドを取得します。 これが機能しない場合、コードは
%ProgramFiles%
または
C:\Windows
ディレクトリ(GetWindowsDirectoryWから)からフォルダ名をランダムに選択します。 既存のファイルと競合する可能性のある名前の使用を回避し、
windows
、
Microsoft
、
desktop
、
system
、
system32
、
syswow64
単語が含まれないようにします。 ディレクトリが既に存在する場合、「NLS_ {6 characters}」が名前に追加されます。
リソース
0x102
分析され、ファイルが
%ProgramFiles%
または
%AppData%
でランダムに選択されたフォルダーにダンプされます。
kernel32.dll
と同じ値になるように作成時間が変更されました。
たとえば、次のフォルダと、実行可能ファイル
C:\Windows\system32\TCPSVCS.exe
をデータソースとして選択して作成されたファイルのリストがあります。
図6.さまざまなコンポーネントの削除
ドロッパーの
0x102
リソースの構造は非常に複雑です。 一言で言えば、次のものが含まれます。
-ファイル名
-ファイルのサイズと内容
-圧縮形式(
RtlDecompressBuffer
関数で使用される
COMPRESSION_FORMAT_LZNT1
)
最初のファイルは
TCPSVCS.exe
としてリセットされ
TCPSVCS.exe
。これは正当な
AcroTranscoder.exe
(
FileDescription
、SHA-1によると:
2896738693A8F36CC7AD83EF1FA46F82F32BE5A3
)。
一部のDLLファイルが11 MBより大きいことに気づいたかもしれません。 これは、ランダムデータの大きな連続バッファが実行可能ファイル内にあるためです。 これは、一部のセキュリティ製品による検出を回避する方法である可能性があります。
持続性
ドロッパーの
0x101
リソースには、永続性を確保する方法を決定する2つの32ビット整数が含まれています。 最初の値は、マルウェアが管理者権限なしで永続性を維持する方法を示します。
表1.管理者権限のない永続化メカニズム
2番目の整数の値は、管理者として働いている間、マルウェアが持続性を確保する方法を示します。
表2.管理者権限を持つ永続化メカニズム
サービス名は、拡張子のないファイル名です。 表示名-フォルダーの名前ですが、既に存在する場合は、「
Revision 1
」という行が追加されます(未使用の名前が見つかるまで番号が増えます)。 オペレーターは、サービス全体の永続性が安定していることを確認しました。障害が発生した場合、1秒後にサービスを再起動する必要があります。 次に、新しいサービスレジストリキーの
WOW64
値は4に設定され、32ビットサービスであることを示します。
スケジュールされたタスクは、いくつかのCOMインターフェイスを通じて作成されます:
ITaskScheduler
、
ITask
、
ITaskTrigger
、
IPersistFile
、および
ITaskScheduler
。 基本的に、マルウェアは隠されたタスクを作成し、現在のユーザーまたは管理者に関する情報とともにアカウント情報を設定し、トリガーを設定します。
これは、24時間の持続時間と10分間の2つの実行の間隔を持つ毎日のタスクです。つまり、継続的に実行されます。
悪意のあるビット
この例では、実行可能ファイル
TCPSVCS.exe
(
AcroTranscoder.exe
)は、ダンプされたDLLをダウンロードする正当なソフトウェアです。 この場合、
Flash Video Extension.dll
が重要です。
その
DLLMain
関数は、単に別の関数を呼び出します。 あいまいな述語がいくつかあります。
図7.ファジィ述語
これらの誤解を招くチェックの後、コードは
TCPSVCS.exe
ファイルの
.text
セクションを受け取り、保護を
PAGE_EXECUTE_READWRITE
変更して上書きし、ダミーの命令を追加します。
図8.命令のシーケンス
最後に、
Flash Video Extension.dll
によってエクスポートされた
FLVCore::Uninitialize(void)
関数のアドレスに
CALL
命令が追加され
Flash Video Extension.dll
。 つまり、悪意のあるDLLをロードした後、ランタイムが
TCPSVCS.exe
で
WinMain
を
TCPSVCS.exe
と、命令ポインターがNOPを指し、次のステップである
FLVCore::Uninitialize(void)
呼び出します。
この関数は、
{181C8480-A975-411C-AB0A-630DB8B0A221}
で
{181C8480-A975-411C-AB0A-630DB8B0A221}
、その後に現在のユーザー名が続くmutexを作成するだけです。 次に、位置に依存しないコードを含む* .db3拡張子のダンプファイルを読み取り、
CreateThread
を使用して内容を実行します。
* .db3ファイルの内容は、OceanLotusグループが一般的に使用するシェルコードです。 繰り返しになりますが、GitHubで公開したエミュレータスクリプトを使用して、ペイロードを正常にアンパックしました。
スクリプトは最終段階を取得します。 このコンポーネントは、 以前のOceanLotusの調査ですでに分析したバックドアです。 これ
{A96B020F-0000-466F-A96D-A91BBF8EAC96}
バイナリファイルのGUID
{A96B020F-0000-466F-A96D-A91BBF8EAC96}
によって決定できます。 マルウェア構成は、PEリソースで暗号化されたままです。 ほぼ同じ構成ですが、C&Cサーバーは以前のものとは異なります。
- andreagahuvrauvin[.]com
- byronorenstein[.]com
- stienollmache[.]xyz
OceanLotusは、検出を回避するためのさまざまな手法の組み合わせを示しています。 彼らは、感染プロセスの「洗練された」概要とともに戻ってきました。 ランダムな名前を選択し、実行可能ファイルにランダムなデータを入力することにより、(ハッシュとファイル名に基づいて)信頼できるIoCの数を減らします。 さらに、サードパーティのDLLロードの使用により、攻撃者は正当な
AcroTranscoder
バイナリを削除するだけで
AcroTranscoder
ます。
自己解凍アーカイブ
RTFファイルの後、グループは、ユーザーをさらに混乱させるために、一般的なドキュメントアイコンを持つ自己解凍(SFX)アーカイブに切り替えました。 これはThreatbookによって書かれました( 中国語のリンク )。 開始後、自己解凍型RARファイルがダンプされ、拡張子.ocxのDLLが実行されます。その最終ペイロードは以前に
{A96B020F-0000-466F-A96D-A91BBF8EAC96}.dll
文書化されていました。 2019年1月中旬以降、OceanLotusはこの手法を再利用していますが、一部の構成は時間とともに変化します。 このセクションでは、テクノロジーと変更について説明します。
餌の作成
ドキュメント
THICH-THONG-LAC-HANH-THAP-THIEN-VIET-NAM (1).EXE
(SHA-1:
AC10F5B1D5ECAB22B7B418D6E98FA18E32BBDEAB
)は、2018年に初めて発見されました。 このSFXファイルは賢明に作成されました-説明( バージョン情報 )は、これがJPEG画像であることを示しています。 SFXスクリプトは次のとおりです。
図9. SFXコマンド
マルウェアは
{9ec60ada-a200-4159-b310-8071892ed0c3}.ocx
(SHA-1:
EFAC23B0E6395B1178BCF7086F72344B24C04DCC
)と画像
2018 thich thong lac.jpg.
餌の画像は次のとおりです。
図10.餌の画像
SFXスクリプトの最初の2行がOSXファイルを2回呼び出すことに気づいたかもしれませんが、これはエラーではありません。
{9ec60ada-a200-4159-b310-8071892ed0c3} .ocx(ShLd.dll)
OXファイルの制御フローは他のOceanLotusコンポーネントと非常に似ています
JZ/JNZ
および
PUSH/RET
コマンドの多くのシーケンスがジャンクコードと交互にあります。
図11.難読化されたコード
ジャンクコードをフィルタリングすると、
regsvr32.exe
によって呼び出される
DllRegisterServer
エクスポートは次のようになります。
図12.基本的なインストーラーコード
実際、初めて
DllRegisterServer
呼び出される
DllRegisterServer
エクスポートはレジストリ値
HKCU\SOFTWARE\Classes\CLSID\{E08A0F4B-1F65-4D4D-9A09-BD4625B9C5A1}\Model
DLLの暗号化オフセットの
HKCU\SOFTWARE\Classes\CLSID\{E08A0F4B-1F65-4D4D-9A09-BD4625B9C5A1}\Model
(
0x10001DE0
)を設定します。
関数が2回目に呼び出されると、同じ値を読み取り、そのアドレスで実行されます。 ここから、リソースが読み取られて実行され、RAMの多くのアクションが実行されます。
シェルコードは、以前のOceanLotusキャンペーンで使用されたPEローダーと同じです。 スクリプトを使用してエミュレートできます。 その結果、彼は
db293b825dcc419ba7dc2c49fa2757ee.dll
をダンプし、それをメモリにロードして
DllEntry
を実行し
DllEntry
。
DLLは、そのリソースのコンテンツを抽出し、復号化(AES-256-CBC)および解凍(LZMA)します。 リソースには、簡単に逆コンパイルできる特定の形式があります。
図13.インストーラー構成構造(KaitaiStruct Visualizer)
構成は明示的に指定されます-特権レベルに応じて、バイナリデータは
%appdata%\Intel\logs\BackgroundUploadTask.cpl
または
%windir%\System32\BackgroundUploadTask.cpl
(または64ビットシステムの場合は
SysWOW64
)に書き込まれます。
BackgroundUploadTask[junk].job
という名前のタスクを作成することにより、永続性が確保されます。
[junk]
はバイト
0x9D
および
0xA0
です。
タスクのアプリケーション名は
%windir%\System32\control.exe
で、パラメーター値はアンロードされたバイナリファイルへのパスです。 非表示のタスクは毎日実行されます。
構造的には、CPLファイルは内部名
ac8e06de0a6c4483af9837d96504127e.dll
DLLであり、
CPlApplet
関数をエクスポートします。 このファイルは、その唯一のリソース
{A96B020F-0000-466F-A96D-A91BBF8EAC96}.dll
復号化し、このDLLをロードして、その唯一の
DllEntry
エクスポートを呼び出します。
バックドア構成ファイル
バックドア構成は暗号化され、そのリソースに統合されます。 構成ファイルの構造は、前のものと非常に似ています。
図14.バックドア構成構造(KaitaiStruct Visualizer)
同様の構造にもかかわらず、多くのフィールドの値は、以前のレポートで与えられたデータと比較して更新されました。
バイナリ配列の最初の要素には、 Tencentによって識別される DLL(
HttpProv.dll
MD5:
2559738D1BD4A999126F900C7357B759
)が含まれています。 ただし、エクスポート名がバイナリから削除されているため、ハッシュは一致しません。
追加の研究
サンプルを収集し、いくつかの特性に注意を引きました。 説明したサンプルは、2018年7月頃に登場し、最近では1月中旬から2019年2月初旬にかけて登場しました。 SFXアーカイブは感染ベクターとして使用され、正当なベイトドキュメントと悪意のあるOSXファイルをダンプしました。
OceanLotusは偽のタイムスタンプを使用しますが、SFXファイルとOCXファイルのタイムスタンプは常に同じ(
0x57B0C36A
(08/14/2016 @ 7:15 pm UTC)および
0x498BE80F
(02/06/2009 @ 7:34 am UTC)であることに
0x498BE80F
)それぞれ)。 これはおそらく、著者が同じテンプレートを使用し、いくつかの特性を変更する特定の「コンストラクタ」を持っていることを示しています。
2018年の初めから調査したドキュメントの中には、攻撃の対象国を示すさまざまな名前があります。
-カンボジアメディアの新しい連絡先情報(新規).xls.exe
-李建香(个人简历).exe(CVの偽PDFドキュメント)
-フィードバック、2018年7月28日から29日までの米国での集会.exe
バックドア
{A96B020F-0000-466F-A96D-A91BBF8EAC96}.dll
の発見といくつかの研究者によるその分析の公開
{A96B020F-0000-466F-A96D-A91BBF8EAC96}.dll
、マルウェアの構成データにいくつかの変更が見られました。
最初に、作成者は補助DLL(
DNSprov.dll
と2つのバージョンの
HttpProv.dll
)から名前を削除し始めました。 その後、オペレーターは3番目のDLL(
HttpProv.dll
の2番目のバージョン)のパッキングを停止し、1つだけを埋め込むことを選択しました。
次に、多くのIoCが利用可能になったため、おそらく検出を避けるために、多くのバックドア設定フィールドが変更されました。 著者によって変更された重要なフィールドには、次のものがあります。
- AppXレジストリキーの変更(IoCを参照)
- ミューテックスエンコーディング文字列( "def"、 "abc"、 "ghi")
- ポート番号
最後に、分析されたすべての新しいバージョンで、新しいC&CがIoCセクションにリストされます。
結論
OceanLotusは進化し続けています。 サイバーグループは、ツールとルアーの改良と拡張に重点を置いています。 作成者は、被害者とされるユーザーに関連する注意を引く文書の助けを借りて、悪意のあるペイロードを偽装します。 彼らは新しいデザインを開発し、エクスプロイト方程式エディターなどの公開ツールも使用します。 さらに、被害者のマシンに残るアーティファクトの数を減らすためのツールを改善し、ウイルス対策ソフトウェアによる検出の機会を減らしています。
侵害インジケータ
WelivesecurityおよびGitHubで 、侵害インジケーターとMITER ATT&CK属性を利用できます 。