ESET:新しいOceanLotus Cyber​​groupバックドア配信スキーム

投稿では、OceanLotusサイバーグループ(APT32およびAPT-C-00)が最近Microsoft Officeのメモリ破損脆弱性であるCVE-2017-11882のパブリックエクスプロイトの1つを使用した方法、およびグループのマルウェアが侵害されたシステムで痕跡を残さずに永続性を提供する方法について説明します。 次に、2019年の初め以降、グループが自己解凍アーカイブを使用してコードを実行した方法について説明します。



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



し、記述子PIDWinWord



プロセスの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が利用可能になったため、おそらく検出を避けるために、多くのバックドア設定フィールドが変更されました。 著者によって変更された重要なフィールドには、次のものがあります。





最後に、分析されたすべての新しいバージョンで、新しいC&CがIoCセクションにリストされます。



結論



OceanLotusは進化し続けています。 サイバーグループは、ツールとルアーの改良と拡張に重点を置いています。 作成者は、被害者とされるユーザーに関連する注意を引く文書の助けを借りて、悪意のあるペイロードを偽装します。 彼らは新しいデザインを開発し、エクスプロイト方程式エディターなどの公開ツールも使用します。 さらに、被害者のマシンに残るアーティファクトの数を減らすためのツールを改善し、ウイルス対策ソフトウェアによる検出の機会を減らしています。



侵害インジケータ



WelivesecurityおよびGitHubで 、侵害インジケーターとMITER ATT&CK属性を利用できます



All Articles