ベトナムの APT 攻撃サンプルを詳細に分析する方法
1. はじめに
APT はセキュリティ分野でホットな話題になっています。
イレブン パスの子会社であるイノベーション ラボラトリオは、4 月に「ドックレス ベトナム APT」レポートを発行しました。
上記の情報には、次のように記載されています。悪意のあるものを検出しました このメールはベトナム政府のメールボックスに送信されました このベトナムメールの日付は 2019 年 3 月 13 日です。このメールにはベトナム政府内部からのものである可能性がある不審な要素が含まれていますが、何者かが治安部門にメールを送信した可能性は否定できません。
TKCT quy I nam 2019.doc.lnk.malw のサンプル情報は次のとおりです:
図 1: TKCT quy I nam 2019.doc.lnk .malw
2. 静的分析
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. iex の混乱を手動で削除することもできます。ファイルを開いて文字「iex」を削除します。 "。PowerShell 実行コマンドの形式は次のとおりです: ファイル名 (元のファイル名) >> s.sp1 (新しいファイル名)。リダイレクト ファイルは次のとおりです:
## 図 5: Powershell の悪意のあるコード
5. 図 5 に示すように、Base64 でエンコードされたデータが 2 つ見つかりました。Powershell は、エンコードされた悪意のあるデータを実行し、スケジュールされたタスクを追加し、 9 分ごとに作成を実行します。InstallUtil サービスを使用すると、自動起動と永続性が実現します。実行に Wscript.Shell を使用するのは興味深いことであり、以下に示すように、予想外であればあるほど、予想外の効果が得られます。
図 6: s.sp1
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 などを強制終了しないようにします。
3. PE とウイルスについての話
上記の悪意のあるコードを例に挙げると、シェルコードのデバッグ中に .net で多くの問題が発生したため、c/c を使用して tmp_pFWwjd.dat.exe を復元しました。 。 サンプル。
もう一度言いますが、OD は動的デバッグに使用されます。もちろん、分析のためにダンプすることもできます。個人の好みに応じて、以下に示すように、シェルコードの実行を直接中断することもできます:
#図 17: GetProcAddress
悪意のあるコードは、これら 3 つのテーブルのアドレスを特定し、関数名テーブル AddressOfName を走査し、関数名を取得してハッシュ値を計算する必要があります。パラメータ 2 は、同じ関数であることを意味します。
現在走査されている添字を返し、その添字を使用して関数シーケンス番号テーブル AddressOfNameOrdinals に移動し、対応するシーケンス番号を見つけ、シーケンス番号テーブルに保存されている値を取得し、関数アドレス テーブルの AddressOfFunctions を取得します。 3 つを簡単に表すと下図のようになります 関係:
図 18: 3 つの関係
上図のように、シリアル番号テーブルと名前テーブルは 1 対 1 に対応し、添え字と下付き文字は格納される値に関連付けられており、これら 3 つのテーブルはリレーショナル データベースの概念を利用して巧みに設計されています。
シリアル番号は順番ではなく、空白が生じる場合があることに注意してください。アドレス テーブルの一部の関数には関数名がありません。つまり、アドレス テーブルにはアドレスがありますが、名前テーブルに関連付けることはできません。このとき、シリアル番号を使用して呼び出します。シリアル番号の内容とベース シリアル番号を加算したものです。ベースアドレスは実際の請求番号です。
8. この知識を念頭に置いて、サンプル内の悪意のあるコードを見ると、以下に示すように、上記の説明とまったく同じであることがわかります。
##図 19: GetProcAddress()
# #図 22: DownLoader
4. vkT2 モジュール分析
1. 関数を追跡したところ、多数の動的に取得されるハッシュ値 関数アドレスは上記の関数呼び出しと一致します 関数名は次のとおりです:
1E0AAA 関数の復号化は次のとおりです:
2 . 予熱操作を実行した後、実際には、次の図に示すように、関数名に従って次に何が起こるかを推測する必要があります。
3. 動的デバッグ プロセス リクエストは中断され、コードは静的に分析されます。lstrcmpiA はダウンロードされたデータのフィンガープリント情報テキスト フィールドを比較してプレーンかどうかを確認し、InternetReadFile を使用して読み取りますダウンロードしたデータを取得して実行しないと、スリープ状態になり、無限ループが発生します。
図 26: リクエスト ステータス
以下に示すように、既知の IP とリクエスト形式に基づいて Web ページに直接アクセスします。
図 27: vkT2 Web 解析がすべて文字化けしていることがわかりましたか?これをローカルにダウンロードし、元のコードの実行プロセスに従います。これはバイナリ データです。古いルールに従って、この悪意のあるコードをデバッグするプログラムを作成します。
4. vkT2 解析では、まずデータを復号化し、次にサンプルで使用される古いルーチンである関数アドレスを動的に取得します。
各セクション(セクションテーブル)のデータを循環結合します。ここでは、VirtualAddressに従って、メモリにロードされた後の各セクションのアドレスを循環結合します。メモリアライメント粒度は0x1000で、以下に示すように、DOS ヘッダー機能コードが消去されて PE フォーマット ファイルが形成されます:
図 28: メモリ拡張
5. PE 形式なのでメモリに展開されますので、次のステップは IAT テーブルの修復と再配置です。ここには多くの要素が含まれており、これも PE 形式のコンテンツです。「Windows Authoritative」を確認できます。
図 29: IAT
6 を修復します。 次に、重要なポイントを分析し、システム変数を取得します。次に示すように、64 ビット システムで実行されているかどうかを確認します。
図 30 : 動作環境の決定
8. システム データ、ホスト IP、ホスト名、その他の情報は次のように収集されます:
#図 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 サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









ZoomEye 上のオンライン データは上書き更新モードになっており、2 回目のスキャンでデータがスキャンされない場合、更新されたデータは上書きされず、ZoomEye 上のデータは 1 回目のスキャンで取得されたバナー データを保持します。実際、ボットネット、APT、その他の攻撃などの悪意のある攻撃に使用されるダウンロード サーバーは、通常、発見された後、直接非アクティブ化され、破棄されます。一部はハッキングのターゲットであり、非常に暴力的でもあります。直接オフラインにしましょう。したがって、多くの攻撃サイトが ZoomEye によってオンラインにキャッシュされる可能性があります。もちろん、ZoomEye 履歴 API で提供されるデータを使用すると、カバーしているかどうかに関係なく、各スキャンで取得されたバナーの数をクエリできます。

一般に、有名な Linux システムは、RedHat シリーズ: Redhat、Centos、Fedora など、Debian シリーズ: Debian、Ubuntu などの 2 つのカテゴリに大別されます。 yum (YellowdogUpdater、修正版) は、Fedora、RedHat、SUSE のシェル フロントエンド パッケージ マネージャーです。 apt (AdvancedPackagingTool) は、Debian および Ubuntu のシェル フロントエンド パッケージ マネージャーです。概要 一般に、有名な Linux システムは基本的に 2 つのカテゴリに分類されます。 RedHat シリーズ: Redhat、Cento

脅威情報処理サイクル モデルについて 「脅威情報処理サイクル」(F3EAD) という用語は軍隊に由来しており、主な戦闘部隊のすべてのレベルで米陸軍の指揮官によって設計された資源を組織し、部隊を展開するための方法です。 Network Emergency Response Center は、この方法を活用し、次の 6 つの段階で脅威インテリジェンス情報を処理します。 脅威インテリジェンス処理サイクル F3EAD 脅威インテリジェンス処理サイクル モデルの適用 ステップ 1: 特定の月の日付を見つけて、パートナーのパブリック データベースに展開します。クラウド サーバー 「Onion」システム アラームによって、疑わしいトロイの木馬プログラムが検出されたため、緊急対応チームはすぐに緊急対応プロセスを開始しました。関係者やその他の人々がワンクリックでグループを集めて通報しました。被害者のシステムは調査のために隔離されます。セキュリティ システムと監査ログは、トレーサビリティ分析のためにエクスポートされます。侵入侵害と被害者を分析するためのビジネス システム アーキテクチャとコード関連情報の準備

Deepin システムに PHP8 をインストールするには、以下の手順に従います。 システムを更新します。 ターミナルを開き、次のコマンドを実行してシステム パッケージを更新します。 sudoaptupdatesudoaptupgrade Ondřej SurýPPA ソースの追加: PHP8 は、Ondřej SurýPPA ソースを通じてインストールできます。次のコマンドを実行してソースを追加します。 sudoaptinstallsoftware-properties-commonsudoadd-apt-repositoryppa:ondrej/php パッケージ リストを更新します。 次のコマンドを実行してパッケージ リストを更新し、PPA ソースで PHP を取得します。

Ubuntu の apt-get ソースを手動で変更する 1. ssh ツールを使用して Ubuntu に接続します (私は xshell を使用します) 2. コマンド ラインに cd/etc/apt/3 と入力し、このディレクトリ内のsource.list ファイルをバックアップします (必ずバックアップしてください)。 4. source.list ファイルの内容をクリアします (注: クリア後は復元できないため、前の手順を実行してファイルをバックアップする必要があります)このとき、sudo を使用して権限が不足していることを確認するメッセージが表示されます。直接 root ユーザーに切り替えてこのコマンドを実行します。 5. vim を使用してsource.list を開き、i キーを押して編集モードに入り、ファイルを貼り付けます。変更する送信元アドレスを選択し、 を押します。

MySQL 5.7 は、公式 MySQL APT リポジトリを使用してインストールできます。以下は、Ubuntu20.04 システム上の公式 APT リポジトリを介して MySQL5.7 をインストールする手順です。 MySQLAPT リポジトリを追加します: wgethttps://dev.mysql.com/get/mysql-apt-config_0.8.17-1_all.debsudodpkg- imysql -apt-config_0.8.17-1_all.deb インストールプロセス中に、設定インターフェイスが表示されます。 MySQLServer のバージョンとして 5.7 を選択し、構成を完了します。アップデートパッケージリスト: sud

以下は、Ubuntu18.04 システムで Docker をコンパイルおよびインストールするためのチュートリアルです。 古いバージョンの Docker をアンインストールします (インストールされている場合): sudoaptremovedockerdocker-enginedocker.iocontainerdrunc システム パッケージを更新します: sudoaptupdatesudoaptupgrade Docker の依存関係をインストールします: sudoaptinstallapt-transport-httpsca-certificatescurlsoftware-properties -commonDocker公式GPGキーを追加:curl-

yum は RedHat シリーズ ディストリビューション (RHEL や CentOS など) のパッケージ マネージャーですが、Ubuntu は apt (AdvancedPackageTool) と呼ばれる別のパッケージ マネージャーを使用します。 Ubuntu システムでは、apt コマンドを使用してソフトウェア パッケージを管理できます。 Ubuntu システムにパッケージをインストールする基本的な手順は次のとおりです。 パッケージ インデックスの更新 インストール操作を実行する前に、まず次のコマンドを実行してパッケージ インデックスを更新します。 sudoaptupdate パッケージのインストール 次のコマンドを使用して、特定のパッケージをインストールします。 sudoaptinstallpackage_name will "package_name& #822
