「悪意のあるコード分析の実践」実験 - Labs-15
「悪意のあるコード分析の実践」に実験を記録します。関連リンク:
- 電子書籍のダウンロード
タイトル
Labs-15-01 実験
Lab15-01.exe
静的解析:
- シェルを確認してください - シェルがありません
- 入力テーブルの表示 - MSVCRT.dll
- 文字列解析 - 興味深い文字列が表示されます
IDA分析
- xor eax eax 操作が main 関数で見つかった後、ジャンプが実行されます。これは、ジャンプが確実に実行されることを意味し、教科書の固定条件ジャンプ命令が満たされます。
- アドレス 0x00401010 を選択し、D キーを押してそこにあるマシンコードをデータ (つまり、db 0E8h) に変換し、次にアドレス 0x00401011 を選択し、C キーを押して再逆アセンブルしてコードに変換します。再結合する必要があり、元のコードは後で再表示されてデータ (db xxxx) になるため、すべてのコードが正常に表示されるまで変換 (C キーを押す) する必要があります。
- さらに下に進むと、以下も同じように混同されていることがわかります。
- 同じように修正して、
- コード全体が修正されたので、IDA にプログラムを再解析させ、main 関数の開始アドレスから最終戻りアドレスまでのコードを選択して、P キーを押す必要があります。
- メイン関数全体が再分析されてグラフ モード (グラフ ビュー) になり、メインブック全体のロジックが完全に分析されました。
- 最初から分析してみましょう。main 関数は最初にパラメータをチェックし、次に別の文字列を出力します。
- 条件は、パラメータの数 = 2、2 番目のパラメータは pdq (最初のパラメータはデフォルトのプログラム名) です。
質問
- このバイナリにはどのような敵対的逆アセンブリ技術が使用されていますか?
回答: 固定条件付きジャンプ命令は、逆アセンブリ プロセスを妨害するために使用されます。 - このバイナリは逆アセンブリ プロセスを欺くためにどのような不正なマシン コードを使用していますか?
答え: Call 命令のマシンコード、0xEBh - この挑戦的な分解テクニックは何回使われたでしょうか?
答え: 4 回使用されました (00401010、00401023、0040104B、0040105E) - プログラムに「Good Jod」を出力させるコマンド ライン引数は何ですか?
回答: コマンド ライン パラメータを pdq に入力すると、「Good Job」が出力されます。
Labs-15-02 実験
サンプル: Lab15-02.exe
静的解析:
- シェルを確認してください - シェルがありません
- 入力テーブルを確認してください -
SHELL32.DLL: シェルコマンド関数の実行
WS2_32.DLL: gethostname、WSAStartup 関数
WININET.DLL: ネットワークでのファイルの読み取り、URL のオープンなどのネットワーク操作関数
MSVCRT.DLL: -
IDA分析
- このプログラムには、多くの難読化された逆アセンブリ命令が追加されており、Lab15-01 に似ています。違いは、このプログラムには、より多くの種類の難読化された逆アセンブリ命令があることです。3 つの主要なカテゴリについては、第 15 章で参照できます (ジャンプ命令、固定条件ジャンプ命令、および無効な逆アセンブリ命令)、このセクションで提起される問題は、無効な難読化された命令を正確に見つけるにはどうすればよいかということです。(つまり、どの命令が元の命令で、どの命令が追加された難読化された命令でしょうか?)
- 第 15 章の例に従って、main 関数内の難読化された命令を特定し、これらの難読化された命令を nop 命令に置き換えます。lab15-01 と同じ処理方法に従います - main 関数のコードを選択し、P キーを押します。 ; IDA にメイン関数を再識別させ、通常の分析プロセスに従うことができます。
- プログラムは最初にソケット コンポーネントを初期化し、次にホスト名を取得し、ホスト名に基づいて文字列を作成します。
- 次の操作は次のとおりです。
1) 関数 sub_401386 を呼び出して URL アドレスを取得します。
2) URL アドレスからネットワーク リソースにアクセスし、データをバッファに保存します
。 3) 新しいファイルを作成し、データをバッファに書き込みます。この新しいファイルに
コピーします 4) この新しく作成されたファイルを実行します
質問
- プログラム初期化用の URL は何ですか?
回答: URL は関数 sub_401386() 内にあり、
「http://www.practicalmalwareanalysis.com/bamboo.html」です。 - ユーザー エージェント ドメインはどのように生成されますか?
回答: switch ステートメントを使用して、ホスト名の文字に基づいてそれらを結合します。 - 最初のリクエストを行うときに、プログラムはメモリ ページで何を探しますか?
答え: 文字列「Bamboo::」を見つけます。 - プログラムはページから抽出した情報を使って何をしますか?
回答: まず「Bamboo::」を検索し、次に「::」記号を検索し、ここにある 2 つの文字列間のデータをローカル ファイルにダウンロードします。
Labs-15-03 実験
サンプル: Lab15-03.exe
静的解析:
- シェルを確認してください - シェルがありません
- 入力テーブルの表示 -
Kerne32.dll: 終了したプロセスを開き、プロセス ハンドルを取得し、システム コマンドおよびその他の関数を実行します。
Urlmon.dll: URL ダウンロード ファイル関数
MSVCRT.dll: - - 文字列分析 - 特別な文字列なし
IDA分析
-
分析用の main 関数を入力します
-
eax に対する演算は最初に見つかり、eax の値はスタック ebp+4 に割り当てられます。疑わしいことに、スタック内のデータは main 関数、ebp+10h、ebp+0Ch、および ebp+0Ch の先頭で部分的に説明されています。 epb+08h はすべて main 関数のパラメータですが、ebp+4 とは一体何でしょうか? main 関数がプログラム全体のエントリ ポイントではないことはわかっています。プログラムが main 関数に入る前に、最初に system 関数を呼び出し、次に main 関数を呼び出す必要があります (疑わしい場合は、main 関数の相互参照を確認してください) main 関数は通常の関数と同じです main 関数を呼び出す前に、まずパラメータがスタックにプッシュされ、関数呼び出し後のリターンのために現在のアドレスを保存する必要があるため、ebp+4 はmain 関数を呼び出した後に返す必要があるアドレスです。main 関数が返すアドレスをここで変更します。つまり、他のコードを実行するために他のアドレスにジャンプします。このときの変更アドレスは 0x40148c です。
-
0x40148c アドレスをたどると、lab15-01 と lab15-02 に出現したのと同じ難読化されたコードが見つかりました。
-
修正し、00401496でDを押してデータ化し、次のデータをコードに変換(Cを押す)
-
さらに続けると、他の場所でも逆アセンブルを防ぐために難読化命令が使用されていることが判明し、それらを修復した上で分析しました。
-
4014E6 でさらに多くの関数呼び出しが見つかりました
-
URLDownloadToFileA 関数は URL リソースをダウンロードするために使用されますが、渡されるパラメーターでは、URL とローカル ファイルはそれぞれ aCllpIiiPnuLcUu と 403040 のオフセットのメモリ アドレスに保存されます。過去を追跡すると、それらは直接観測可能な文字列ではないことがわかり、これらの文字列は暗号化されているということです。
-
偶然ですが、これら 2 つのメモリ アドレスのデータはどちらも以前に関数 sub_401534 によって呼び出されており、この関数は暗号化関数であると疑われています。
-
分析のために関数を入力すると、暗号化関数は単純な逆演算であることがわかりました。
-
次に、データを復号化し、データ開始アドレス 0x00403010 を選択し、IDA の [ファイル] >> [スクリプト ファイル] >> (ビデオ チュートリアルを参照) で作成された復号化スクリプト ファイルを選択する必要があります。実際の URL とファイル名を取得できます。つまり、悪意のあるプログラムは「http://www.practicalmalareanaracy.com/tt.html」にアクセスし、ローカルの spoolsrv.exe ファイルにデータを書き込みます。
-
コード分析セクションに戻って作業を続けると、ダウンロードされた悪意のあるプログラムを実行するために WinExec 関数が呼び出されていることがわかりました。
-
不正プログラム全体の解析が完了 主要な不正機能は追加コードに存在 プログラム自体はプロセス閲覧・表示プログラムに偽装 プロセス閲覧操作を行った後、不正コードにジャンプして不正プログラムをダウンロードそれをローカルで実行します。
質問
- 悪意のあるコードはどのように初期化され、呼び出されるのか?
回答: main 関数の戻りアドレスを変更することで、main 関数が初期化されて呼び出されます。 - 悪意のあるコードは何をしたのでしょうか?
回答: 1) 指定された URL にリクエストを送信します。2) 悪意のあるプログラムをダウンロードしてローカルで実行します。 - 悪意のあるコードはどの URL を使用しましたか
? 回答: 「http://www.practicalmalareanaracy.com/tt.html」 - 悪意のあるコードで使用されたファイル名は何ですか?
答え: spoolsrv.exe