「実践的な不正コード解析」実験 - Labs-13

「実践的な不正コード解析」実験 - Labs-13

「Malicious Code Analysis Practice」に実験を記録し、関連リンクを提供します。

Labs-13-01 実験

静的解析:

  1. シェルを確認してください - シェルがありません
    ここに画像の説明を挿入します

  2. 入力テーブルの表示 -
    Kernel32.dll: リソースのロード、リソースのロック、リソースの検索、ライブラリ ファイルのロード、ファイルの書き込みなど。
    WS2_32.dll: ホスト解決機能、ネットワーク接続の起動およびシャットダウン機能
    WININET.dll: ネットワーク上のファイルを開く、URL接続、ネットワークデータ読み込みなどの機能
    ここに画像の説明を挿入します
    ここに画像の説明を挿入します
    ここに画像の説明を挿入します

  3. リソース セクションに他のリソースが隠されていることがわかり、ResourceHacker を使用して表示したところ、それらは 2 つの文字列でしたが、暗号化されていたことがわかりました。
    ここに画像の説明を挿入します

  4. 文字列分析 -
    文字列「Mozilla/4.0」および「http://%s/%s/」は、悪意のあるプログラムが Firefox を呼び出してネットワーク操作を実行する可能性があることを示しています。
    ここに画像の説明を挿入します

IDA解析——exe

  1. main 関数全体のロジックは比較的単純で、最初に関数 sub_401300 を呼び出し、次に Windows Socket サービスを開始して、ループに入り、ループ本体が関数 sub_4011C9 を呼び出します。
    ここに画像の説明を挿入します
  2. まず、分析のために関数 sub_401300 を入力します。このプログラムは主に、プログラム内のリソースをロードし、それらをロードし、リソースのハンドルを hResData 変数に保存し、次に LockResource 関数を使用してリソースの最初のポインターを取得し、それを保存します。変数 var_10 を取得し、それを関数 sub_401190 に渡されるパラメータとして使用します。

ここに画像の説明を挿入しますここに画像の説明を挿入します
7. 分析のために関数 sub_401190 を入力すると、この関数は計算関数であることがわかります。リソース セクションのデータが暗号化されていることが以前に判明したため、この関数を復号化操作に使用する必要があります。復号化メソッドは 0x3Bh との XOR です。
ここに画像の説明を挿入します
ここに画像の説明を挿入します
8. したがって、関数 sub_4010300 の機能は、リソースをロードしてリソースを復号化し、復号化されたリソースを返すことです. main 関数は、復号化されたデータを取得し、var_19C に保存します. 9. Main 関数のループ本体は、パラメーターとして var_19C を受け取ります
ここに画像の説明を挿入します
関数 sub_4011C9、10 に渡されます。
ここに画像の説明を挿入します
分析のために関数 sub_4011C9 に従います
  (1) 文字列操作を実行し、関数 sub_4010B1 を呼び出します。渡されるパラメーターの 1 つはホスト名 var_18、もう 1 つは変数 var_30 です
ここに画像の説明を挿入します
  (2) 分析関数sub_4010B1 を実行すると、この関数はループを使用して演算し、ホスト名に値を代入しており、演算関数は sub_401000 であることがわかります。
ここに画像の説明を挿入します
ここに画像の説明を挿入します

  (3) sub_401000 関数に入った後、配列型の演算を実行するためにメモリ データ byte_4050E8 が複数回アクセスされていることがわかり、入力時にメモリ byte_4050E8 のデータが一般的な Base64 エンコード テーブルである文字列であることがわかりました。
ここに画像の説明を挿入します
ここに画像の説明を挿入します
  (4) したがって、関数 sub_401000 は Base64 エンコード関数であると判断でき、関数 sub_4010B1 はローカル ホスト名に対して Base64 エンコード操作を実行します。渡される 2 つのパラメーターのうちの 1 つは、暗号化に使用されるデータ (ホスト名 var_18) です。 11. sub_4011C9 の分析を続行します

。この関数のパラメーターは、arg_0 (main 関数の var_19C、リソースから復号化されたデータ)、暗号化されたホスト名 var_30、および文字列「 http://%s/%s/」は結合され、変数 szURL に格納されます。
ここに画像の説明を挿入します
12. 続いて、InternetOpenA 関数を使用してネットワーク接続エージェントを szAgent = "Mozilla/4.0" として指定し、InternetOpenUrlA 関数を使用して指定された URL に要求を送信します。URL は変数 szURL から取得されます。これは文字列です。前の手順で取得したため、プログラム リソース内の暗号化されたデータは、被害ホストが接続する URL であることがわかります。
ここに画像の説明を挿入します
13. 指定した Web サイトにリクエストを送信した後、取得したリソース ハンドルを変数 hFile に保存し、同時にネットワーク ファイルをバッファにロードします。
ここに画像の説明を挿入します
14. ネットワークデータを受信後、データの先頭文字を判定し、文字「o」の場合は 1、それ以外の場合は 0 を設定し、プログラムを終了します。不正プログラム全体の機能解析は完了しましたが、
ここに画像の説明を挿入します
プログラム内のリソースセクションのデータがURLであることだけが分かり、その具体的な情報は分かりませんでした。 0x3Bh で XOR 暗号化されています。復号化し、WinHex を使用して exe ファイルを開き、指定された場所データを見つけます。位置データはバイナリ変更され、取得された URL は次のとおりです: www.practicalmalwareanalysis.com
ここに画像の説明を挿入します
ここに画像の説明を挿入します
16. この時点で、悪意のあるプログラム全体の分析が終了し、その機能が要約されます。

  • exeリソースセクションに隠されているリソースをロードします。
  • リソースを復号化する
  • 現在のホスト名を取得し、base64 エンコードします。
  • URL は、リソースを復号化して得られたデータと暗号化された現在のホスト名を組み合わせて取得されます。
  • URLアクセスを実行し、データをメモリにロードします

動的分析:

17. 多数の PM を作成し、フィルタリング メカニズムを追加して、プログラムを実行します。
18. レジストリ操作を分析し、ネットワーク接続セキュリティ設定と IE ブラウザ プロキシ設定の
6 つのレジストリ書き込み操作があることを確認します。
ここに画像の説明を挿入します
ネットワーク接続のセキュリティを削減し、悪意のあるプログラムがネットワーク データを送信しやすくするために使用されます。
ここに画像の説明を挿入します
ここに画像の説明を挿入します
ここに画像の説明を挿入します
ここに画像の説明を挿入します
19. ファイル操作分析、ファイルへの書き込み操作がないことが判明
ここに画像の説明を挿入します
20. ネットワーク操作分析、http リクエストが 192.0.78.24/25 に送信されたことが判明
ここに画像の説明を挿入します
21. Wireshark を使用してパケットをキャプチャした後
ここに画像の説明を挿入します
ここに画像の説明を挿入します
22. 送信されたネットワーク リクエストは、静的分析と同じです

質問

1. 悪意のあるコード内の文字列 (文字列コマンドの出力) を動的分析によって提供される有用な情報と比較します。これらの比較に基づいて、どの要素が暗号化される可能性がありますか?
回答: 要求されたネットワークの URL と Web サイトのディレクトリは暗号化されます
2. 実験 IDAPro は、悪意のあるコード内で文字列「xor」を検索し、暗号化の可能性を見つけます。
回答: XOR 暗号化は 004011B8 で発見されました。
ここに画像の説明を挿入します
3. 悪意のあるコードは暗号化にどのキーを使用し、どのコンテンツが暗号化されますか?
回答: ネットワーク接続の URL は 0x3Bh との XOR を使用して暗号化され、要求された Web サイトのディレクトリも Base64 を使用して暗号化されます。

  1. 静的ツール FindCrypt2、Krypto ANALyzer (KANAL)、および IDA エントロピー プラグインを使用して、他のタイプの暗号化メカニズムを特定します。
    回答:
    (1) Krypto ANALyzer (KANAL) を使用して、base64 エンコード テーブルを検出します。
    ここに画像の説明を挿入します

5. 悪意のあるコードがネットワーク トラフィックの一部を送信するために使用する暗号化の種類は何ですか?
回答: Base64 は GET リクエストの一部を暗号化するために使用されます
6. Base64 エンコード関数は逆アセンブリのどこにありますか?
回答: 質問 4 によると、004010B1 にあるエンコード テーブルの相互参照を見つけることで、base64 エンコード関数を見つけることができます。 7. 悪意のあるコードによって送信される Base64 暗号化データの最大長はどれくらいですか
? 暗号化とは何ですか?
回答: Base64 で暗号化されたデータの最大長は 3 で、ホスト名の最初の 12 文字が暗号化されます
8. 悪意のあるコードでは、Base64 で暗号化されたデータにパディング文字 (= または ==) が含まれていましたか?
回答: いいえ
9. この悪意のあるコードは何をしますか?
回答: exe リソース セクションに隠されているリソースをロードします。

  • リソースを復号化する
  • 現在のホスト名を取得し、base64 エンコードします。
  • URL は、リソースを復号化して得られたデータと暗号化された現在のホスト名を組み合わせて取得されます。
  • URLアクセスを実行し、ネットワークから取得したデータをメモリにロードし、データ検出後にプログラムを終了します。


Labs-13-02 実験

サンプル: Lab13-02.exe

静的解析:

1. シェルを確認します - シェルはありません
ここに画像の説明を挿入します
2. 入力テーブルを確認します -
KERNEL32.DLL: ファイルの読み取りと書き込み、プロセスの終了、ライブラリ ファイルおよびその他の機能のロード
USER32.DLL: 現在のデスクトップ ウィンドウの取得、システム解像度の取得、およびウィンドウ表示領域 幅と高さ、スクロールバーの幅と高さなどの関数
GDI32.DLL: ビットマップ関連関数
ここに画像の説明を挿入します
3. 文字列解析 - 特別な文字列なし
ここに画像の説明を挿入します
4. 最初に予備的な動的解析を実行し、その後 IDA 解析を実行します

IDA解析——exe

5. Main 関数は非常に単純で、単なるループ関数です。ループ本体で 2 つのスリープ関数と sub_401851 関数が呼び出されます。6. 分析のために関数 sub_401851 を入力します。関数は最初に sub_401070 関数を呼び出します
ここに画像の説明を挿入します
。 1 つは bytes.size、もう 1 つはパラメータ hMem
ここに画像の説明を挿入します
(1) 関数 sub_401070 を入力します。これは多数のビットマップ情報関数を呼び出しますが、その中で GetDesktopWindow は現在のデスクトップ ハンドルの取得に使用され、BitBlt は実行に使用されます。取得したデスクトップ情報をビットマップ変換するため、sub_401070 関数を使用して被害者のデスクトップのスクリーンショットを撮影し、ビットマップ情報に変換して hMem パラメータに保存していることがわかります。
ここに画像の説明を挿入します
ここに画像の説明を挿入します
(2) 続いて、関数 sub_40181F を呼び出し、先に取得したスクリーンショットのビットマップ情報をパラメータとして渡し、関数に従って解析しますが、この関数の機能は sub_401739 とパラメータ arg_4 に集中しています。はバイト サイズ、arg_0 は受信ビットマップ (3) の情報であり
ここに画像の説明を挿入します
、次に sub_401739 が続きます。この関数は最初に sub_4012DD を呼び出し、次にいくつかの計算を実行します。sub_401739 は暗号化/復号化関数であると推測されます。
ここに画像の説明を挿入します
(4) sub_4012DD も計算関数であり、それが呼び出す sub_40128D も計算関数です。
ここに画像の説明を挿入します
ここに画像の説明を挿入します
7. 悪意のあるプログラムの暗号化プロセス全体が非常に複雑であることがわかり、暗号化を行うのは非常に困難で時間がかかります。暗号化アルゴリズムを分析するだけです、はい、暗号化アルゴリズムの分析は一旦脇に置きましょう。
8. 前の分析と組み合わせて、関数 sub_401070 および sub_40181F に注釈を付け、関数 sub_401851 に戻って分析を続けます。
ここに画像の説明を挿入します
9. 次に、時間レコード番号を取得するために GetTickCount 関数が呼び出され、文字列「temp%08x」と連結されて変数 FileName に保存され、以前に暗号化されたデータとともにパラメーターとして使用されていることがわかります。スクリーンショットのビットマップ情報 hMem とデータ サイズ sub_401000 関数に渡されます
ここに画像の説明を挿入します
10. 関数 sub_401000 の分析を追跡します
(1) この関数は、まず悪意のあるプログラムと同じディレクトリにファイルを作成します。 string "temp%08x"
ここに画像の説明を挿入します
(2) そしてそれをファイルに追加します。データを書き込みます。データの内容は、受信パラメータ 11 の暗号化されたスクリーンショットのビットマップ情報です。したがって、関数 sub_401851 全体の機能解析は終了
ここに画像の説明を挿入します
です悪意のあるプログラム全体がこの関数をループ本体として使用してループするため、悪意のあるプログラム全体の機能分析も完了しました。次に、悪意のあるプログラムの機能を要約しましょう。

  • 被害者ユーザーのデスクトップのスクリーンショットを取得する
  • デスクトップのスクリーンショットを暗号化する
  • 悪意のあるプログラムと同じディレクトリにファイルを作成する
  • 暗号化されたスクリーンショット情報をファイルに書き込みます

動的解析

12. 監視のために PM と PE を開き、プログラムを実行します。
13. レジストリ操作を分析します - 特別なレジストリ操作は必要ありません。
ここに画像の説明を挿入します
14. ファイル操作を分析し、概要分析のために [ツール] >> [ファイルの概要] を使用し、2 つのファイル書き込みを見つけます。
ここに画像の説明を挿入します
15. 分析後にファイル操作を実行します。書き込みイベントでは、プログラムの同じディレクトリに 2 つのファイルが作成され、データがそれらに書き込まれていることがわかりました。
ここに画像の説明を挿入します
ここに画像の説明を挿入します

質問

  1. 動的分析技術を使用して、悪意のあるコードが何を作成したかを特定しますか?
    回答: 悪意のあるプログラムと同じディレクトリに不明な形式のファイルが作成されました。
  2. xor コマンド検索、FindCrypt2、Krypto ANALyzer (KANAL)、IDA エントロピー プラグインなどの静的分析手法を使用して、潜在的な暗号化を探します。
    回答: 明らかな暗号化アルゴリズムは見つかりません。xor を検索すると、データ計算に xor が使用されている場所がいくつか見つかります。
  3. 質問 1 の答えに基づいて、インポートされた関数のうち、暗号関数を見つけるための適切な証拠となるものはどれですか?
    回答: ファイルが作成されるため、CreateFile 関数と WriteFile 関数をより適切なエントリ ポイントとして使用できます。
  4. 逆アセンブリのどこに暗号化機能があるのでしょうか?
    回答: 前回の分析により、暗号化関数は sub_40181F であることがわかります。
  5. 暗号化機能から元の暗号化内容を追跡する 元の暗号化内容とは何ですか?
    回答: 元の暗号化コンテンツは、被害者のデスクトップのビットマップ情報のスクリーンショットです。
  6. 暗号化アルゴリズムを見つけることができますか? そうでない場合、どうやってこれらを復号化しますか?
    回答: 暗号化アルゴリズムは見つかりましたが、復号化アルゴリズムは不明です。
  7. 復号化ツールを使用すると、暗号化されたファイルを元のファイルに戻すことができますか?
    回答: 暗号化関数を使用して暗号化関数を再計算してみます
    (1) OD を使用して悪意のあるプログラムを開き、暗号化関数 sub_0040181F にブレークポイントを設定します
    ここに画像の説明を挿入します
    (2) このとき、スタックの最上位は暗号化する必要があるデータです。メモリ内で暗号化する 最初のアドレスを右クリック >> ダンプをたどる
    ここに画像の説明を挿入します
    (3) このとき、メモリ検索ウィンドウにメモリ内の暗号化されたデータのアドレスが表示されますので、二次メモリ内のデータを次のアドレスに置き換える必要があります。データは暗号化され、再計算されます。
    ここに画像の説明を挿入します
    (4) winHEX を使用して暗号化されたファイルの 1 つを開き、データをコピーします
    ここに画像の説明を挿入します
    (5) メモリ検索ウィンドウで、データ バッファー内のデータの最初のバイトを選択し、右側のスライダーを移動して直接 At に引きます。バッファの最後で、Shift キーを押したままデータの最後のバイトを選択すると、バッファ内のすべてのデータが選択されます。
    ここに画像の説明を挿入します
    (6) 選択したデータを右クリック>>バイナリ>>バイナリ貼り付け
    ここに画像の説明を挿入します
    (7) OD でプログラムの実行を続け、新しく作成されたファイルを取得し、サフィックスを bmp に変更します
    ここに画像の説明を挿入します
    (8) 復元されたデータを取得します。画面のスクリーンショット。
    ここに画像の説明を挿入します
    (9) 実際、暗号化されたデータを知る前に、暗号化関数にブレークポイントを設定し、バッファー内のデータを見つけて抽出し、winHex を使用してそれらをコピーしてファイルに保存し、それらを結合することもできます。暗号化されたデータ、比較用のデータ。

Labs-13-03 実験

サンプル: Lab12-03.exe

静的解析:

  1. シェルを確認してください - シェルがありません
    ここに画像の説明を挿入します
  2. 入力テーブルの表示 -
    Kernel.dll: ファイルの読み取りと書き込み、プロセスとスレッドの作成、ライブラリ ファイルおよびその他の関数のロード
    User32.dll: 文字列印刷関数
    WS2_32.dll: ネットワーク接続、ドメイン名解決、およびその他のネットワーク操作関数
  3. 文字列分析 -
    Base64 の共通エンコード テーブルが表示され、プログラムが Base64 エンコードを使用している可能性があることが示されます。
    ここに画像の説明を挿入します
    文字列「cmd」と「dir」が表示され、プログラムが cmd 実行コマンドを開始し、
    ここに画像の説明を挿入します
    Web サイトの文字列が表示されると推測されます。悪意のあるプログラムが C&C に接続すると推測されており、同時にプログラムに暗号化が行われている可能性があることを示す「鍵」に関する文字列が表示されます。
    ここに画像の説明を挿入します
  4. 最初に単純な動的分析を実行し、次に IDA を使用して詳細な静的分析を実行します。

IDA解析——exe

  1. Main 関数は最初に関数 sub_401AC2 を呼び出し、4 つのパラメーター (そのうち 2 つは 0x10h) を渡し、残りの 2 つのパラメーター (1 つはバッファー unk_413374、もう 1 つは文字列 "ijklmnopqrstuvwx") を渡します。さらに、ecx はバッファーを指します。 unk_412EF8 を実行し、Windows Skokts コンポーネントを初期化します。
    ここに画像の説明を挿入します
  2. 関数 sub_401AC2 を入力すると、この関数は非常に複雑で、多数のデータ操作が含まれていることがわかりました。この関数は暗号化関数であると推測します (1) ecx の値が最初に var_60 に代入されており、この変数が存在することを示しています
    ここに画像の説明を挿入します
    。メモリ データを追跡するために使用され、いたるところで相互参照が見つかりました。
    ここに画像の説明を挿入します
    ここに画像の説明を挿入します
    (2) これらの相互参照を追跡したところ、実際に呼び出されたのは 1 か所のみで、それが関数 sub_40352D であることが判明し、この関数を追跡調査したところ、複雑な計算関数であることが判明し、暗号化機能も。
    ここに画像の説明を挿入します
  3. 前の複雑な暗号化関数については、最初に分析するのではなく、下に進み、バイトのセットを初期化するために WSAStartup 関数が呼び出されていることを確認します。
    ここに画像の説明を挿入します
  4. 引き続き下に進み、ネットワーク リンクの関連操作を検出し、ソケット プログラミング インターフェイスを初期化して、「www.practicalmalwareanalysisi.com」の IP アドレスを取得し、サイトのサーバーとの接続を作成します。
    ここに画像の説明を挿入します
  5. サイトへの接続が正常に確立されると、次のステップで関数 sub_4015B7 が呼び出されます。入力パラメータはネットワーク接続のソケットです。
    ここに画像の説明を挿入します
  6. 分析のために関数 sub_4015B7 を入力します。この関数は、まずプロセス内通信用の 2 つのパイプを作成し、次にこのプロセスのハンドルをコピーします。
    ここに画像の説明を挿入します
  7. 次に、StartupInfo 構造体を作成すると、構造体の一部の要素がパイプラインから取得され、一部の要素がパイプラインに出力され、構造体の情報をパラメータとして使用して cmd プロセスを作成します。
    ここに画像の説明を挿入します
    このときのパイプライン構造は次のようになります。
    ここに画像の説明を挿入します
  8. 続いてスレッドを作成し、スレッドアドレスをStartAddressとし、ソケット内のデータをパラメータとして渡しますが、同時にここで別のパイプの書き込みハンドルを操作することになります。ソケットのインターフェイスデータが別のパイプに書き込まれる場合、2つのパイプの通信モデルは次のようになります(ここで質問があります。つまり、パイプハンドルを書き込むための直接の操作コードがありません。これは少し奇妙です) (⊙ˍ⊙)?) (1)
    ここに画像の説明を挿入します
    ここに画像の説明を挿入します
    Enter スレッドアドレス StartAddress を分析します。このアドレスの関数はソケットからデータを読み取り、バッファ Buffer に保存します
    ここに画像の説明を挿入します
    (2) 次に、関数 sub_401082 を呼び出し、データを渡し、バッファ内の長さとパラメータ Var_C14 を入力します。関数 sub_401082 を入力して解析します。このプログラムには多くの計算演算が含まれます。この関数も暗号化関数であると判断できます。暗号化されたデータを保存するには、Var_C14 を使用する必要があります。
    ここに画像の説明を挿入します
    (3) 以下に進み、関数 writefile を呼び出して、暗号化されたデータをソケットに書き込みます。
    ここに画像の説明を挿入します
  9. さらに進むと、別のスレッドが作成されることがわかります このプロセスのパラメータはパイプラインから取得されます スレッドの開始アドレスは sub_40132B で、この関数のパラメータはパイプラインから読み込まれます (1) 解析のために sub_40132B を入力します
    ここに画像の説明を挿入します
    この関数の論理構造は前のスレッド作成 (StartAddress) と非常に似ており、ソケット データも操作することがわかります。
    ここに画像の説明を挿入します
  10. 2 つのパイプライン全体の通信モデルは次のようになります。
    ここに画像の説明を挿入します
  11. したがって、関数 sub_4015B7 はリモートコマンドの受け付けと実行を行うためのリモートコントロールプラグインであることがわかります。cmd とソケット間の通信にはパイプが使用されています。複数の暗号化が行われています。まず、IDA で xor 演算のコードを検索します。 . 、暗号化アルゴリズムは一般に計算に xor を使用するため、計算に xor を使用する 6 つの関数、つまり sub_401AC2、sub_40223A、sub_4027ED、sub_402DA8、sub_403166、sub_403990 が見つかりました。
    ここに画像の説明を挿入します
  12. 次に、IDA を使用して暗号化モジュールを識別し、AES アルゴリズムの 8 つの実装が見つかりました。
    ここに画像の説明を挿入します
    ここに画像の説明を挿入します
  13. そのうちの最初の 4 つは暗号化モジュールであり、sub_40223A および sub_402DA8 で呼び出されます。
    ここに画像の説明を挿入します
  14. 他の 4 つは復号化モジュールで、sub_403166 および sub_4027ED で呼び出されます。
    ここに画像の説明を挿入します
  15. 前に見つかった 6 つの xor 演算は、sub_401AC2、 sub_40223A、 sub_4027ED、 sub_402DA8、 sub_403166、sub_403990です。上記の AES 暗号化の相互参照と組み合わせると、 sub_40223A および sub_402DA8 関数は AES 暗号化に関連する基本関数であると判断できます。 sub_40352D 関数は AES 暗号化関数であり、sub_403166 および sub_4027ED 関数は AES 復号化に関連する基本関数です。
  16. これで、sub_401AC2sub_403990が残りました。まず、sub_401AC2 を見てみましょう。この関数は main 関数で呼び出され、ステップ 6 で分析されました。この関数は、バッファ unk_412EF8 内のデータを変更します。その後、バッファ内のデータは次のようになります。関数によって呼び出される sub_40352D を使用した前の分析では、sub_40352D が AES 暗号化関数であることが示されているため、unk_412EF8 が保存するバッファーは、sub_401AC2 のパラメーター文字列「ijklmnopqrstuvwx」と文字列「空のキー」を組み合わせた AES 暗号化の中間ベクトルである可能性が高くなります。関数内の「不正なキー長」、「不正なブロック長」は、sub_401AC2 が AES 暗号化初期化関数であり、「ijklmnopqrstuvwx」が AES 暗号化キーであると推測できます。
    ここに画像の説明を挿入しますここに画像の説明を挿入します
  17. 関数 sub_403990 だけが残っていますが、その相互参照を確認すると、関数 sub_40352D からも呼び出されていることがわかり、これも AES 暗号化のモジュールである可能性があります。
    ここに画像の説明を挿入します
  18. この時点で、すべての AES 暗号化モジュールが分析されました。前の分析では、sub_4015B7 がリモート コントロール プラグインであることが示されました。パイプライン データ送信モデルは次のようになります。
    ここに画像の説明を挿入します
  19. 復号化関数は sub_401082 です。分析用の関数を入力すると、関数 sub_40103F が呼び出されていることがわかります。
    ここに画像の説明を挿入します
  20. 引き続き追跡して、標準の Base64 暗号化モードと文字列を見つけます。これにより、復号化関数は Base64 暗号化関数になります。
    ここに画像の説明を挿入します
    ここに画像の説明を挿入します
  21. パイプライン データ転送モデルは次のようになります。
    ここに画像の説明を挿入します
  22. この時点で、マルウェア分析全体が終了しました。プロセスは非常に複雑です。ここで要約しましょう:
    1) AES の初期化
    2) 悪意のあるプログラムが C&C に接続
    3) 悪意のあるプログラムがリモート コントロール プラグイン/関数 sub_4015B7 を実行
    4) リモート コントロール プラグ-in は一方で C&C から取得されます。情報、この情報は Base64 で暗号化する必要があります。リモート コントロール プラグインはソケットのコンテンツを Base64 で復号化し、データを cmd に渡し、cmd を使用して任意の操作を実行します。結果が返されます。 cmd による実行は AES によって暗号化され、ソケットを通じて C&C に送り返されます。

動的解析

  1. PM と PE を開いてプログラムを実行します
  2. レジストリ操作を分析します - 特別なレジストリ操作はありません
    ここに画像の説明を挿入します
  3. ファイル操作の分析 -
    悪意のあるプログラムが悪意のあるプログラム ディレクトリにある複数の dll ファイルを開こうとすることが判明しましたが、すべて成功しました。テスト環境にはネットワーク接続がなかったため、これらの dll がダウンロードされた可能性があると推測されます。 C&Cから。
    ここに画像の説明を挿入します
    ここに画像の説明を挿入します

質問

  1. 悪意のあるコードの出力文字列と動的分析によって提供される情報を比較すると、暗号化されている可能性のある要素は何ですか?
    回答: ドメイン名「www.practicalmalwareanalysisi.com」が表示され、ネットワーク上で送信されるトラフィックが暗号化されている可能性があります。
  2. 静的分析を使用して文字列 xor を検索し、潜在的な暗号化を見つけます。この方法ではどのようなタイプの暗号化が見つかりますか?
    回答: 文字列検索では Base64 暗号化が見つかり、XOR 検索では複数の暗号化関数が見つかりましたが、それらのタイプを識別できませんでした。
  3. FindCrypt2、Krypto ANALyzer (KANAL)、IDA エントロピー プラグインなどの静的ツールを使用して、他のタイプの暗号化メカニズムを特定します。検出結果は検索文字の XOR 結果とどのように比較されますか?
    回答: AES 暗号化と Base64 暗号化はプラグインを使用して検出されました
  4. 悪意のあるコードで使用される 2 つの暗号化技術はどれですか?
    回答: AES 暗号化と Base64 暗号化テクノロジーが使用されています
  5. 各暗号化技術の鍵は何ですか?
    回答: AES 暗号化のキーは「ijklmnopqrstuvwx」で、base64 エンコード テーブルは DEFGHIJKLMNOPQRSTUVWXYZABcdefghijklmnopqrstuvwxyzab0123456789+/ です。
  6. 彼のキーは暗号化アルゴリズムにとって十分信頼できるものですか? 他に何を知っておく必要がありますか?
    回答: キーは平文で保存されており信頼性が低いため、暗号化されたコンテンツと暗号化機能との関係を判断する必要もあります。
  7. 悪意のあるコードは何をしたのでしょうか?
    回答: 悪意のあるコードの機能
    (1) AES の初期化
    (2) 悪意のあるプログラムは C&C に接続します
    (3) 悪意のあるプログラムはリモート コントロール プラグイン/関数 sub_4015B7 を実行します
    (4) リモート コントロール プラグインは情報を取得します一方では C&C から送信され、情報は Base64 で暗号化される必要がありますが、リモート コントロール プラグインはソケットのコンテンツを Base64 で復号化し、データを cmd に渡し、cmd を使用して任意の操作を実行します。結果は cmd によって返されます。実行は AES によって暗号化され、ソケットを通じて C&C に送り返されます。
  8. このコードは、動的分析プロセス中に生成された一部のコンテンツを復号化するために使用されます。
    回答: Base64 で復号化されたコンテンツはリモート コントロール cmd コマンドであり、AES で暗号化されたコンテンツは cmd コマンドの実行結果です。

おすすめ

転載: blog.csdn.net/weixin_39561364/article/details/115917032