「実践的な不正コード解析」実験 - Labs-14
「悪意のあるコード分析の実践」に実験を記録します。関連リンク:
- 電子書籍のダウンロード
タイトル
Labs-14-01 実験
サンプル: Lab14-01.exe
静的解析:
- シェルを確認してください - シェルがありません
- 入力テーブルの表示 -
Kernel32.dll: スリープ、プロセスの作成と終了、ライブラリ ファイルのロードなどの機能。
ADVAPI32.dll: システム情報の取得または設定、現在のユーザー名の取得などに使用されます。
Urlmon.dll: URLファイルをキャッシュにダウンロードする機能
- 文字列分析:
Base64 エンコード形式の文字列が表示されます (base64 を使用して暗号化されている可能性があります)。
ネットワーク リソースが表示され、悪意のあるプログラムがオンラインでネットワーク リソースを要求する可能性があることを示します。
- 最初に予備的な動的解析を実行します
IDA分析
- まず、現在のホストの HWID (ハードウェア識別) を取得します。
- 取得したHWIDを指定された方法に従って文字列化し、変数var_10098に保存します。
- 取得したHWIDとユーザー名を連結して変数var_10160に保存します。
- 続けて、この関数は最初に関数 sub_4010BB を呼び出し、次に無限ループに入り、ループ本体が関数 sub_4011A3 を呼び出します。
- まず sub_4010BB を分析しましょう この関数のパラメータは、まさに HWID とユーザー名を連結した文字列と、適用された最初のメモリ アドレスです。
- この関数を分析のために入力すると、この関数は典型的な Base64 暗号化関数であり、暗号化されたオブジェクトは渡されたパラメーター文字列であることがわかりました。
- したがって、関数 sub_4010BB は Base64 暗号化関数であり、暗号化されたデータは変数 var_10000 に格納されます。
- 続いて、関数 sub_4011A3 がループ本体で呼び出され、パラメータは暗号化された文字列です。
- 分析のためにこの関数を入力します
(1) この関数は、先頭で文字列の結合を実行し、暗号化された文字、その最後の数字、およびドメイン名の文字列を結合してネットワーク リソース アドレスを取得します。結合された文字列は var_210 に保存されます。
(2) 次に、関数 URLDownloadToCacheFileA が呼び出され、ネットワーク リソースを要求してキャッシュされ、キャッシュされたファイル名が ApplicationName 変数に格納されます。
(3) 次にキャッシュを実行するためのファイルを作成します。
- ここまでで不正プログラム全体の解析が完了したので、不正プログラムの機能をまとめてみます
(1) HWIDとユーザー名を取得して結合
(2) 結合した文字列をBase64暗号化
(3) 暗号化暗号化された文字列と指定された文字列を連結してネットワークリソースアドレスを取得
(4) ネットワークリソースアドレスにアクセスしてリソースをキャッシュし、プロセス実行キャッシュファイルを新規作成
動的解析
-
PM を開き、監視用のプログラムを実行します。
-
レジストリ操作を分析し
、ネットワーク接続下で複数のレジストリ キーを変更します
-
ファイル操作の解析
(1) Temp 一時フォルダーに Cab4EA3.tmp および Tar4EA4.tmp ファイルが作成および変更されます
(2) ただし、これらのファイルは削除されます
(3) これらの一時ファイルは、ネットワーク アクセス中に生成される一時ファイルです。プログラムが終了したとき。
-
ネットワーク動作解析、192.0.78.24とのネットワーク接続
動的分析用のHTTPサービスを構築する
実験ではC&Cに接続できなかったため、テスト用にローカル環境を構築しましたが、URLDownloadToCacheFileA関数がネットワークリソースをキャッシュする際のディレクトリに疑問があったため、サンプル解析用のHTTPサービスを構築しました。
- Python を使用して単純な http サービスを作成します。
- 現在のユーザーのルート ディレクトリにディレクトリとファイル malwareana/index.html を作成します。
- 次に、モニタリングのために PM を開きます
- OD でプログラムを開き、004011F9 と 0040120E にブレークポイントを設定します。これら 2 つのアドレスの間の時間が URLDownloadCacheFileA 関数が呼び出される時間であるため、ここでネットワーク リソースのアドレスを変更する必要があり、同時に、次のいずれかを記録する必要があります。 URLDownloadCacheFileA 関数のパラメータ —— キャッシュ ディレクトリ ApplicationName (アドレスは 0x0011F9C4)
- F8 を 1 回押すと、ネットワーク リソース アドレスが表示されます
- ネットワークリソースが保存されているメモリアドレスをトレースします。
- データ ウィンドウでネットワーク リソース アドレスを変更します。変更後
のアドレスは http://localhost:8889/malwareana/index.html (html 以降の 16 進データを 0x00 に変更し、文字列として切り詰めてください) です。
メモリの内容を変更するには、次のデータを 0x00h に変更する必要があります。これは文字列の切り捨てに使用されます。
- 次に、OD でプログラム (F9) の実行を続けます。このとき、プログラムは 0040120E で中断されます。データ ウィンドウで、キャッシュ ディレクトリ ApplicationName - 0x0011F9C4 のアドレスを追跡し、システムのキャッシュされたネットワーク リソースのディレクトリを取得します。
- PM は関連するファイル操作を監視し、ファイル Index[1].html が作成されたことを発見しました (index.html はすでにキャッシュ ディレクトリに存在するため)。
- キャッシュ ディレクトリに移動し、ローカル http サーバーによって提供されるファイルであるキャッシュ ファイルを見つけます。
質問
- 悪意のあるコードはどのようなネットワーク ライブラリを使用しますか? 彼らの利点は何ですか?
回答: COM インターフェイスを使用する URLDownloadToCacheFileA 関数が使用されます。悪意のあるコードが COM インターフェイスを使用する場合、HTTP 要求のコンテンツのほとんどは Windows 内からのものであり、ネットワーク特性をターゲット検出に効果的に使用できません。 - ネットワークシグナリングの構築に使用される情報源要素は何ですか?また、シグナリングの変化を引き起こす条件は何ですか?
回答: 送信される情報にはホストの HWID とユーザー名が含まれますが、HWID は固定で、ユーザー名は可変です。 - 攻撃者はなぜネットワーク シグナリングに埋め込まれた情報に興味を持つのでしょうか?
回答: 攻撃者は、次のステップで特定のユーザーとホストを取得し、標的型攻撃を実行したいと考えています。 - 悪意のあるコードは標準の Base64 エンコーディングを使用していますか? そうでない場合、エンコードはどのように異常ですか?
回答: これは、一般的に使用される Base64 エンコーディングではありません。一般的な Base64 エンコーディングでは、長さが足りない場合に末尾のパディングに「=」を使用し、この悪意のあるプログラムは末尾のパディングに「a」を使用するためです。 - 悪意のあるコードの主な目的は何ですか?
回答: 感染したホストの HWID とユーザー名を C&C に送信し、Web サイトから他の悪意のあるコードをダウンロードして実行します。 - ネットワーク署名を使用すると、悪意のあるコード通信のどの要素が効果的に検出される可能性がありますか?
回答: ドメイン名の特性、base64 エンコード特性、および HTTP リクエストの URI のサフィックスは PNG ファイルです。 - アナリストがこの悪意のあるコードのシグネチャを開発しようとするときに、どのような間違いを犯す可能性がありますか?
答え:—— - この悪意のあるコード (および新しい亜種) を検出できる可能性のあるシグネチャ セットは何ですか?
答え:——
Labs-14-02 実験
サンプル: Lab14-02.exe
静的解析:
- シェルを確認してください - シェルがありません
- 入力テーブルの表示 - 他のリソースの検出
KERNEL32.dll: 終了プロセスの作成、ハンドルのコピー、パイプの作成、一意のファイルの書き込みなど 関数 USER32.dll: 文字
列のロードSHELL32.dll:
シェルの実行
WININET.dll: URL を開く、ネットワーク読み取りファイル
MSVCRT.dll:——
- 非表示のリソースの表示 - ネットワーク リソース アドレス
- 文字列解析 -
Base64 暗号化に使用される一般的な文字列が表示されます。暗号化に Base64 が使用されていると推測されます。
「cmd.exe」が表示されます。悪意のあるコマンドを実行するために cmd が呼び出される可能性があると推測されます。
「http:...127.0. 0.1/tenfour.html」と表示されます。ネットワークリソースにアクセスすると推測されます
- 最初に予備的な動的解析を実行します
IDA分析
- Main 関数は、まず文字列をリソースにロードし (前の動的分析では、その文字列がネットワーク リソース アドレスであることがすでにわかっています)、それをバッファに保存します。
- 次に、文字列を変数 v4 に割り当て、2 つのパイプを同時に作成し、変数 v4 をそれぞれ入力と出力として使用します。
- パイプのもう一方の端はプロセス情報 StartupInfo 構造体であり、新しい cmd プロセスを作成することでパイプライン通信が実現されます。
- つまり、cmdはバッファのデータをパイプ経由で受け取って実行し、実行結果をパイプ経由でバッファに送信します。
- 次に、スレッドが作成されます。スレッドのアドレスは StartAddress
(1) です。アドレスに従ってください。モジュールはパイプのデータを読み取り、関数 sub_401000 を使用して Base64 暗号化を実行し、暗号化されたデータを v3 に保存します(2
) 次に、関数 sub_401750 が呼び出され、暗号化されたデータを操作します。この関数には 2 つのパラメータがあり、1 つは暗号化されたデータで、もう 1 つはバッファ内の元のデータに遡りますが、オフセットは 0x14 です。 bytes (ネットワークリソースの文字列)
(3) 解析用の sub_401750 関数を入力します この関数は、暗号化されたデータを HTTP プロトコルの UserAgent フィールドとして使用し、指定された URL にアクセスします。
- さらに下に進むと、ロジック全体が分岐します。1 つの分岐はプロセスを終了し (TerminateThread)、もう 1 つの分岐は別のスレッドを作成します。スレッドの開始アドレスは sub_4015C0 (1) 分析のためにこのアドレスを入力します。このアドレスには for ループがあります
。 . ループ本体内 ネットワークアクセス用関数sub_401800を継続使用
(2) Sub_401800のパラメータは先ほど解析した関数sub_401750と同じで、パイプラインからも読み出し、読み出しオフセットは全て0x14h(10進数の20)です。 - 指定された URL , これら 2 つの関数は機能的に似ていると推測できます. 関数を追跡して分析
(3) ループ本体内の sub_401800 関数の動作に加えて、ネットワーク データもキャッシュされます。
- この時点で、悪意のあるプログラム全体の分析は基本的に終了しており、悪意のあるプログラム全体によって作成されたパイプライン通信モデルは次のように単純化できます。
- ここで、悪意のあるプログラム全体の機能を要約します
(1) 文字列リソースをロードします
(2) プロセス間で通信するためのパイプを作成します
(3) cmd.exe を実行する新しいプロセスを作成します
(4) データを暗号化するスレッドを作成し、ネットワーク データ リクエスト
( 5) 新しいスレッドを作成して別のネットワーク データ リクエストを送信し、リクエストされたリソースをキャッシュします
動的解析
- モニタリングのために PM を開いてプログラムを実行する
- レジストリ操作を分析したところ、複数のレジストリが作成されていることが判明しました
- ファイル操作を分析中:
cmd.exe は開かれています
が、ファイルの書き込み操作はありません
- ネットワーク動作分析 - ローカル 127.0.0.1 へのリクエストの送信
質問
- 悪意のあるコードを作成するときに IP アドレスを直接使用することの利点と欠点は何ですか?
回答:意味がよくわかりませんので、参考回答を見てみましょう。
- 悪意のあるコードはどのようなネットワーク ライブラリを使用しますか? これらのライブラリを使用する利点と欠点は何ですか?
回答: WinNet ライブラリが使用されます。利点は、Winsock API と比較して、オペレーティング システムがより多くのネットワーク フィールド要素を提供できることですが、欠点は、ライブラリのネットワーク関数呼び出しでハードコーディングされた UserAgent フィールドを提供する必要があることです。 - 悪意のあるコードのシグナリングにおける URL の情報源は何ですか? この情報源にはどのような利点がありますか?
回答: 参考回答:
- 悪意のあるコードは、目的を達成するために HTTP プロトコルのどの側面を悪用しますか?
回答: UserAgent フィールドを使用して情報を送信し、情報は暗号化され、2 つのパイプ通信によってリモート制御と任意のコマンドの実行が実現されます。 - 悪意のあるコードの最初のシグナリングではどのような情報が送信されますか?
回答: cmd を開くと返される情報は暗号化されています。 - この悪意のあるコードの通信チャネルの設計にはどのような欠点があるのでしょうか?
回答:参考回答
- 悪意のあるコードのエンコード方式は標準ですか?
回答: カスタムの Base64 エンコーディング。 - 通信はどのように終了しますか?
回答: キーワード exit を使用して通信を終了します。悪意のあるコードは、終了時に自身を削除しようとします。 - この悪意のあるコードの目的は何ですか? 攻撃者のツールキット内でどのような役割を果たす可能性がありますか?
答え: 単純なバックドアです。
Labs-14-03 実験
サンプル: Lab14-01をベースにLab14-03.exeを改良したもの
静的解析:
- シェルを確認してください - シェルがありません
- 入力テーブルを分析します -
KERNEL32.DLL: 読み取りと書き込み、ファイルの作成、ファイルの作成、ライブラリ ファイルのロードなど
WININET.DLL: URL アクセス、ネットワーク ファイルの読み取りなど
urlmon.dll: URLDownloadtoCacheFileA 関数はファイルをキャッシュにダウンロードします
- 文字列解析:
Base64 風のエンコード文字列が表示され、データの暗号化に Base64 が使用されていると推測される
HTTP プロトコル関連のフィールドが表示され、ネットワーク リクエストが推測される
exe プログラムが表示され、実行される可能性がある
ネットワーク リソースが表示されるネットワークリソースが要求される場合があります。
IDA分析
- Main 関数のロジックは比較的単純で、主に do while ループです。
- ループ本体を分析するには、まず関数 sub_401457 を呼び出します。この関数には 2 つのパラメーターがあり、1 つは文字列 szUrl で、もう 1 つは数値です。分析のために関数を追跡します (1) 関数内で、最初に CreateFileA 関数が呼び出され
ますファイル 'C :\autobat.exe' を開き、sub_401372 を呼び出します
(2) 関数 sub_401372 を入力します。この関数のパラメータは文字列 'http://www.practicalmalwareanalysis.com/start.htm'、ネットワークリソース; 関数を見つけるにはこの関数を入力してください ファイル 'C:\autobat.exe' が作成され、文字列 'http://www.practicalmalwareanalysis.com/start.htm' がファイルに書き込まれます。
(3) 関数 sub_401457 に戻り、続行し、関数 ReadFile を呼び出して、ファイル内のデータをバッファ lpBuffer に読み取ります。ここでのファイルは、前に作成した 'C:\autobat.exe' で、内部に保存されています。データは次のとおりです。正確には、ネットワーク リソース文字列「http://www.practicalmalwareanalysis.com/start.htm」です。
- したがって、関数 sub_401457 の機能は、ネットワーク リソース アドレスを保存するファイルをローカルに作成することです。
- ループ本体に戻り、下に進み、関数 sub_4011F3 を呼び出してネットワーク リソースを操作し、この関数に入ります。
(1) この関数は、最初に HTTP フィールド要素を初期化し、次に受信 URL に従ってネットワーク リソースにアクセスします。
(2) ネットワーク リソースから読み取ります。データを取得した後、バッファに保存し、「<no」文字列と一致させてから
(3)、さらに一致させるために sub_401000 を呼び出します
(4) 一致条件を満たすネットワークから取得した文字列を返します。 - 続いて、取得した文字列を関数 sub_401684 に渡します
(1) 関数 sub_401684 を入力して解析を行うと、この関数は文字列を切り捨ててからスイッチジャンプを行うことがわかります。ジャンプ条件は文字列の最初の文字です。これは、C&C から送信された指示に従って別の操作を実行するものであると推測されますが、各コマンドのメソッドは次のように分析されています。
(2) 暗号化関数部分は関数 sub_401147 を呼び出すことに注意してください。
(3) この関数は従来の Base64 とは異なり、カスタム エンコード文字列を使用します。
- この時点で、悪意のあるプログラム全体の解析が完了します。
- 悪意のあるプログラムの機能を要約します。
(1) ローカル設定ファイルを作成します。
(2) 一部の HTTP 要素がハードコーディングされた設定ファイルに従ってネットワーク リクエストを送信します。 (3)
ネットワーク リクエストによって取得されたデータをキャッシュします。文字列処理を実行する チェック
(4) 返されたデータを復号化する 命令ごとに、スリープ、リダイレクト (ローカル構成ファイルの変更)、その他の悪意のあるファイルのダウンロードと実行などのさまざまな操作が実行され、操作 nop は実行されません。
質問
- 初期シグナリングのハードコーディングされた要素は何ですか? 適切なネットワーク署名を作成するにはどのような要素を使用できますか?
- 初期シグナリング内のどの要素が、持続可能なネットワーク特性に悪影響を与える可能性がありますか?
- 悪意のあるコードはどのようにしてコマンドを取得するのでしょうか? この章のどの例で同様のアプローチが使用されていますか? この技術の利点は何ですか?
- 悪意のあるコードが入力を受け取ったとき、それが有用なコマンドであるかどうかを判断するために、その入力に対してどのようなチェックが実行されますか? 攻撃者は悪意のあるコードが探しているコマンドのリストをどのようにして隠すのでしょうか?
- コマンドパラメータにはどのようなタイプのエンコーディングが使用されますか? Base64エンコーディングとどう違うのですか? それがもたらす利点と欠点は何ですか?
- この悪意のあるコードはどのようなコマンドを受け入れますか?
- この悪意のあるコードの目的は何ですか?
- この章では、独立した機能を使用してさまざまな位置のコードをターゲットにし、ネットワーク機能の堅牢性を高めるというアイデアを紹介します。では、この悪意のあるコードでは、コードまたは構成ファイルのどのセクションがネットワーク特性を抽出する対象となる可能性があるのでしょうか?
- 悪意のあるコードを検出するには、どのネットワーク シグネチャのセットを使用する必要がありますか?
(怠け者でした (  ̄‿ ) )参考回答: