APT はセキュリティ分野でホットな話題になっています。
イレブン パスの子会社であるイノベーション ラボラトリオは、4 月に「ドックレス ベトナム APT」レポートを発行しました。
上記の情報には、次のように記載されています。悪意のあるものを検出しました このメールはベトナム政府のメールボックスに送信されました このベトナムメールの日付は 2019 年 3 月 13 日です。このメールにはベトナム政府内部からのものである可能性がある不審な要素が含まれていますが、何者かが治安部門にメールを送信した可能性は否定できません。
TKCT quy I nam 2019.doc.lnk.malw のサンプル情報は次のとおりです:
図 1: TKCT quy I nam 2019.doc.lnk .malw
1. TKCT quy I nam 2019.doc.lnk.malw サンプルがローカルにダウンロードされた後、巧妙に Word ショートカットに偽装され、被害者を騙します。次のように表示します:
図 2: ドキュメントのショートカットを偽装する
まず第一に、Word ドキュメントは通常、 .lnk リンク、リンクのサイズは 1kb 程度ですが、APT サンプルのショートカットは 126kb です。何か別のものが隠されていることは明らかです。多くのウイルスは、ファイル名を .dat、.docx などに偽装します。実際には、拡張子は .exe であり、ファイル名拡張子をオンにすると確認できます。
2. サンプル属性のターゲットに含まれる悪意のあるコードを抽出し、それが難読化および暗号化された cmd コマンドであることを確認し、以下に示すように powershell を実行します。
# #図 3: 難読化された命令APT 攻撃手法は、難読化と暗号化が容易で、ウイルス対策処理に便利な VBS、PowerShell、JS、およびその他の種類のスクリプト言語を好んで利用します。
したがって、過去のウイルスとマルウェアにはこの共通点があり、たとえば、Manlinghua、Xbash、ランサムウェアはすべて、PowerShell を最初の「ペイロード」として実行し、それをサプライズとしてコンピュータに与えることを好みます。
3. 難読化命令を解析した結果、TKCT quy I nam 2019.doc.lnk ショートカットが s.sp1 ファイルにリダイレクトされたことがわかりました。実際、デスクトップ ショートカットは PowerShell スクリプト ファイルです。難読化変数は次のように分類されます。
最後に TKCT クワイをリダイレクトします。2019.doc.lnk を一時フォルダーに配置し、s.ps1 という名前を付けて PowerShell を実行します。以下に示す:図 4: 難読化解除
4. iex の混乱を手動で削除することもできます。ファイルを開いて文字「iex」を削除します。 "。PowerShell 実行コマンドの形式は次のとおりです: ファイル名 (元のファイル名) >> s.sp1 (新しいファイル名)。リダイレクト ファイルは次のとおりです:
## 図 5: Powershell の悪意のあるコード
5. 図 5 に示すように、Base64 でエンコードされたデータが 2 つ見つかりました。Powershell は、エンコードされた悪意のあるデータを実行し、スケジュールされたタスクを追加し、 9 分ごとに作成を実行します。InstallUtil サービスを使用すると、自動起動と永続性が実現します。実行に Wscript.Shell を使用するのは興味深いことであり、以下に示すように、予想外であればあるほど、予想外の効果が得られます。
図 6: s.sp1
6. Base64 でエンコードされたデータを解析すると、実際には 2 つの実行可能ファイルが存在します。悪意のある .net および .doc の実行方法を次の図に示します: #図 7: 共通ルーチン7. tmp_pFWwjd.dat.exe を分析し、dnSpy ツールで逆アセンブルする 最後に、コードがはっきりと表示されますが、多少の混乱はありますが (de4dot.exe を使用して難読化できます)、コード レベルには影響しません。
キー関数 Exec() を見つけて、Base64String でエンコードされたデータを見つけます。実行プロセスに従って、.NET は呼び出しを関数 Call に委任し、この関数は読み取りおよび書き込み可能です。その後、メモリを申請する必要があります。以下に示すように、VirtualAlloc() を呼び出し、Base64 シェルコードを要求されたメモリにコピーし、CreateThread() ポインタを取得し、実行コールバック ポインタを託して、悪意のあるシェルコードを実行します。
図 8: .net 逆アセンブリ
シェルコードまたはペイロードを理解するにはどうすればよいですか?本質的には 16 進数のデータの集まりであり、実行可能ファイルの場合はアセンブリ エンジンが解釈して実行できるデータです。
以下の作業にはバイナリ データの抽出とアセンブリ分析が含まれるため、次の図に示すように、シェルコードまたはペイロード (悪意のあるコードの場合) の基本概念を紹介する簡単な図を示します。
図 9: ペイロード
図 9 に示すように、ウイルス、特に自己開始型および持続型攻撃の場合、バックドアなしで実装するのは困難です (脆弱性は残ります (データ盗難のために毎回少量のトラフィックをプルする場合を除いて)。
たとえば、ASLR アドレスのランダム化のベース アドレスは、システムが再起動されるたびに変更されたり、新しいプロセス空間に挿入されたりするため、コード自体の関数のベース アドレスが間違っています。関数アドレスを取得しますか?完璧な動作を実現するには、追加の操作が必要になりますが、もちろんこれらは問題ではなく、技術は比較的成熟しています。
読者が Windows PE の形式、アセンブリ、およびカーネルに関する一定の知識を持っていると仮定すると、次の知識の説明は理解しやすくなります。基本的な知識を広めるのではなく、これらのシェルコードを PE 形式とアセンブリ レベルから実行する方法、kernel32.dll などのモジュールのベース アドレスを動的に取得する方法、ハッシュ値またはハッシュを使用してエクスポートをトラバースする方法を分析します。テーブルを削除し、機密性の高い文字列や機密性の高い関数 API などを強制終了しないようにします。
上記の悪意のあるコードを例に挙げると、シェルコードのデバッグ中に .net で多くの問題が発生したため、c/c を使用して tmp_pFWwjd.dat.exe を復元しました。 。 サンプル。
もう一度言いますが、OD は動的デバッグに使用されます。もちろん、分析のためにダンプすることもできます。個人の好みに応じて、以下に示すように、シェルコードの実行を直接中断することもできます:
#図 10: ポインター1. 以下に示すように、エントリ ポイントを入力し、データを XOR 復号化し、実際に実行する必要がある悪意のあるコードを復元します。 図 11: XOR 復号化 #2. ハッシュ値は文字列を暗号化するため、シェルコードのサイズを削減できるという利点があり、文字列を隠すことができます。 図 12: ハッシュ値取得関数のアドレス3.関数 1E0A42 を入力すると、次のように一見普通の代入演算がたくさん表示されます。 表示: 図 13: fs:[0x30]Fs はレジスタです。 、カーネル状態は fs = 0x30、ユーザー状態は fs = 0x3B、fs はカーネル モードでは _KPCR を指し、ユーザー モードでは _TEB を指します。 TEB (スレッド環境ブロック)、スレッド環境ブロック、つまり各スレッドには TEB があり、システムとスレッド間のデータを保存して動作制御を容易にするために使用されます。 Fs:[0x30] は PEB プロセス環境ブロックです。 4. PEB は現在のプロセス環境です。シェルコードは PEB 情報を簡単に取得できます。オフセット 0xc を通じて _PEB_LDR_DATA を取得します。この構造には、プロセスのロードされたモジュールに関する情報が含まれています。 双方向循環リンク リストは、オフセット 0x1c を通じて取得されます。各リンク リストは、LDR_DATA_TABLE_ENTRY 構造体を指します。この構造体に含まれるデータを見てみましょう。以下に示すように、上記のデータ オフセットはオペレーティング システムに関連しています: 図 14: モジュール マトリックスの取得 図 15: 現在の環境モジュールのベース アドレスの取得手順5.上記のプロセスにより、以下に示すように、ntdll.dll が正常に取得されます: 図 16: モジュール アドレスの取得6. 関数 1E0B2A、2 の分析を続けます。関数呼び出し規則によれば、パラメータ 1 は kernel32 ベース アドレス、パラメータ 2 は関数名のハッシュ値であり、この関数は以下に示すように自己実装された GetProcAddress() 関数です。#図 17: GetProcAddress
この関数の目的は、PE 標準形式に準拠しているかどうかを確認し、NT ヘッダーとエクスポート テーブルを取得することです。エクスポート テーブルには 3 つのテーブルのアドレスが保存されます。まず、以下に示すエクスポート テーブルの構造を見てみましょう:悪意のあるコードは、これら 3 つのテーブルのアドレスを特定し、関数名テーブル AddressOfName を走査し、関数名を取得してハッシュ値を計算する必要があります。パラメータ 2 は、同じ関数であることを意味します。
現在走査されている添字を返し、その添字を使用して関数シーケンス番号テーブル AddressOfNameOrdinals に移動し、対応するシーケンス番号を見つけ、シーケンス番号テーブルに保存されている値を取得し、関数アドレス テーブルの AddressOfFunctions を取得します。 3 つを簡単に表すと下図のようになります 関係:
図 18: 3 つの関係
上図のように、シリアル番号テーブルと名前テーブルは 1 対 1 に対応し、添え字と下付き文字は格納される値に関連付けられており、これら 3 つのテーブルはリレーショナル データベースの概念を利用して巧みに設計されています。
シリアル番号は順番ではなく、空白が生じる場合があることに注意してください。アドレス テーブルの一部の関数には関数名がありません。つまり、アドレス テーブルにはアドレスがありますが、名前テーブルに関連付けることはできません。このとき、シリアル番号を使用して呼び出します。シリアル番号の内容とベース シリアル番号を加算したものです。ベースアドレスは実際の請求番号です。
8. この知識を念頭に置いて、サンプル内の悪意のあるコードを見ると、以下に示すように、上記の説明とまったく同じであることがわかります。
##図 19: GetProcAddress()
9. 以下に示すように、最終検証結果は成功です。 #図 20: 検証 11. 新しいスレッドが作成され、スレッド コールバックによってディレクトリとファイルが作成されますが、ローカル検証は失敗します。以下に示すように、ファイルを作成します。 図 21: ディレクトリの作成 ファイルとディレクトリ名のパスを作成します。 c:\User\.... .\AppData\Roaming\ 11. サーバーが応答して悪意のあるコードをダウンロードし、以下に示すように新しい旅が始まります:# #図 22: DownLoader
4. vkT2 モジュール分析
1. 関数を追跡したところ、多数の動的に取得されるハッシュ値 関数アドレスは上記の関数呼び出しと一致します 関数名は次のとおりです:
2 . 予熱操作を実行した後、実際には、次の図に示すように、関数名に従って次に何が起こるかを推測する必要があります。
図 23: InternetOpenA図 24: InternetConnectA 図 25: HttpOpenRequestA
3. 動的デバッグ プロセス リクエストは中断され、コードは静的に分析されます。lstrcmpiA はダウンロードされたデータのフィンガープリント情報テキスト フィールドを比較してプレーンかどうかを確認し、InternetReadFile を使用して読み取りますダウンロードしたデータを取得して実行しないと、スリープ状態になり、無限ループが発生します。
図 26: リクエスト ステータス
以下に示すように、既知の IP とリクエスト形式に基づいて Web ページに直接アクセスします。
図 27: vkT2Web 解析がすべて文字化けしていることがわかりましたか?これをローカルにダウンロードし、元のコードの実行プロセスに従います。これはバイナリ データです。古いルールに従って、この悪意のあるコードをデバッグするプログラムを作成します。
4. vkT2 解析では、まずデータを復号化し、次にサンプルで使用される古いルーチンである関数アドレスを動的に取得します。
各セクション(セクションテーブル)のデータを循環結合します。ここでは、VirtualAddressに従って、メモリにロードされた後の各セクションのアドレスを循環結合します。メモリアライメント粒度は0x1000で、以下に示すように、DOS ヘッダー機能コードが消去されて PE フォーマット ファイルが形成されます:
図 28: メモリ拡張
5. PE 形式なのでメモリに展開されますので、次のステップは IAT テーブルの修復と再配置です。ここには多くの要素が含まれており、これも PE 形式のコンテンツです。「Windows Authoritative」を確認できます。
図 29: IAT
6 を修復します。 次に、重要なポイントを分析し、システム変数を取得します。次に示すように、64 ビット システムで実行されているかどうかを確認します。
図 30 : 動作環境の決定
8. システム データ、ホスト IP、ホスト名、その他の情報は次のように収集されます:
図 31: データ収集 9. 次の図に示すように、C&C 通信の新しいラウンドが開始されます。#図 32: 通信の確立
さらに分析するには、HttpOpenRequest 関数と HttpSendRequest 関数を使用してファイルを開くことができます。 HttpOpenRequest は、リクエスト ハンドルを作成し、パラメータをハンドルに保存します。HttpSendRequest は、次のようにリクエスト パラメータを HTTP サーバーに送信します。図 33: HttpOpenRequest
図 34: HttpSendRequestA
11. 残念ながら、HttpSendRequeSt はもう存在しません。静的に応答したもの残りのコード (シミュレートされた実行) を分析し、サーバーから返された悪意のあるコードを読み取り、スレッド セーフティ コンテキストを使用しました。
インテリジェンス分析ではこれ以上貴重なデータは見つかりませんでしたが、このリクエスト方法は非常にユニークであり、構築されたデータ パケットも非常に特殊です。この特異性については後述します。 サンプル プロセスを関連付けると、結合実行フローチャートは次のとおりです。図 35: TKCT quy I nam 2019.doc 実行プロセス
図 35 に示すように、クライアント通信用のサーバーはすべてプロキシ サーバーである必要がありますが、実際の環境は上記のプロセスよりもはるかに複雑であり、ソースを追跡するのも困難です。
図 33 に示すように、キー データ情報はスタック メモリから抽出されます。これは、通常のリクエスト データとは異なります。概要は次のとおりです。
#APT の通信手法は慎重になっており、詳細なサンプル分析、サンドボックス シミュレーション操作、メモリ フォレンジック、パケット キャプチャ ツールを使用してネットワーク レベルの分析を行わないと、目的のデータと異なる結果が得られる可能性があります。サンプルは通信しますが、実際にはドメイン フロントエンド ネットワーク攻撃テクノロジーを使用します。 ドメインフロントエンドネットワーク攻撃技術とは何ですか?簡単に言うと、msf や cs (Cobalt Strike) などのチームは、サーバー トラフィックを制御して、ある程度のファイアウォールや検出器をバイパスできます。一部の大手メーカーがサービスを提供しているため、msf や cs などのツールを使用してバイパスできます。ある程度のファイアウォールと検出器を実現できます。例として Cobalt Strike ツールを使用します。このツールは、ポート転送、マルチモード ポート リスナーのスキャン、Windows exe プログラムの生成、Windows DLL ダイナミック リンク ライブラリの生成、Java プログラムの生成、Office マクロ コードの生成 (サイトのクローン作成を含む) を統合します。ブラウザ関連情報等の取得
より便利な機能の 1 つは、フレームワークのデフォルトの属性値の変更、チェックインの頻度の変更、ビーコン ネットワーク トラフィックの変更など、ビーコン ペイロードの動作です。これらの機能の設定ファイル Malleable C2 にあります。
Malleable-C2-Profiles 関数は、通常の Web 偽装トラフィックを構築し、最終的には通信隠蔽の効果を実現します。以下に示すように、amazon.profile を例として取り上げます:
set useragent "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko";http-get {Seturi"/s/ref=nb_sb_noss_1/167-3294888-0262949/field-keywords=books";client {header "Accept" "*/*";header "Host" " www.amazon.com ";metadata {base64;prepend "session-token=";prepend "skin=noskin;";append "csm-hit=s-24KU11BB82RZSYGJ3BDK|1419899012996";header "Cookie";}http-post {set uri "/N4215/adj/amzn.us.sr.aps";client {header "Accept" "*/*";header "Content-Type" "text/xml";header "X-Requested-With" "XMLHttpRequest";header "Host" " www.amazon.com ";parameter "sz" "160x600";parameter "oe" "oe=ISO-8859-1;";id {parameter "sn";}parameter "s" "3717";parameter "dc_ref" "http%3A%2F%2F www.amazon.com ";}
上記のコードは、サンプル vkT2.shellcode の通信特性と完全に一致しており、対応するプロファイル ファイルを読み込むことで、ターゲット ホストとサーバーのトラフィック特性が変更され、トラフィックが隠蔽され、最終的に通信の隠蔽という目的が達成されます。
以上がベトナムの APT 攻撃サンプルを詳細に分析する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。