常駐エラー

最近、次の内容に関する手紙を受け取りました。

親愛なるH.あなたの立候補は私たちにとって非常に興味深いので、お互いをよりよく知ることを気にしません。 まず、履歴書のレターヘッドをダウンロードして、記入し、返送してください。 よろしく、ネットワーク悪役



特徴的に、履歴書へのリンクはそのように書かれていました。 resume.exe (クリックしないで、リンクなど)。 彼らは大丈夫ですか?



ダウンロード、視聴。 ファイルのサイズは159744バイトで、一見すると圧縮されています。 カスペルスキーは、「 Trojan.Win32.Srizbi.v 」という名前のプログラムに精通しています。



Idaは、破損したインポートテーブルを誓います。 理解できる-ファイルが圧縮されていることが非常にはっきりと見える。



6.09 KB



コード(青色のセクション)はプログラムのサイズの5%を占めますが、データは一括で処理します。 このデータは、おそらくパッケージ化されたコードです。 特に怖いのは、おなじみの「.code」タイプではなく、「_ 67D&NEk&」または「_uoeWPJ3」というセグメント名です。 エントリポイントはファイルの先頭のどこかではなく、何らかの種類のロバです。



PEIDなどのパッカーレコグナイザーをいくつか試してみます-役に立たないが、彼らはこのパッカーに慣れていません。 したがって、すぐに行動に移ります。 プログラムのパッケージ方法は分析しません。 彼女は開梱方法を知っているので、自分でやらせてください。 (このケースは非常に単純であることが判明しました。他のケースでは、プログラムの起動がひどいものにつながる可能性があります)。



ファイルをデバッガーにロードし、CreateFileにブレークポイントを設定します。 結局のところ、それは論理的です-マルウェアはそれを使用するべきですか (実際、ここでいくつかの大きな間違いを犯す可能性があります。たとえば、プログラムがCreateFileの下にある「ネイティブ」関数ZwCreateFileを使用する場合)。



...実行します。 CreateFileの入り口で実行が停止するまでに15〜20(!)秒かかります。 プログラムが複数回パックされ、上下に再パッケージ化されているように見えます。 何を言うか、心から試してみました。



CreateFileの入り口で停止し、開いているファイルの名前を確認します。

  kernel32!Cre​​ateFileA:
 7c801a24 8bff mov edi、edi
 0:000> da poi(esp + 4)
 0012fe70 "C:\ WINDOWS \ system32 \ drivers \ gran"
 0012fe90 "de48.sys" 


ドライバー! ルートキットのような匂いがします。 プログラムの実行中に、PE Toolsのようなものでダンプを作成し、逆アセンブラーで検討してください。 彼は今、さらにIATで誓っていますが、これは致命的ではありません。 デバッガーで、呼び出しスタックを調べ、関数の呼び出し元を見つけ、逆アセンブラーに戻り、このコードを見つけます。 CreateFileの呼び出しは次のようになります

 コールds:42C1C8 


それは私たちにとって特別なことではありません。 したがって、windbgでddsコマンドを使用すると、実際の機能のアドレス、手が外に移動する(少し離れて、20程度)ことがわかります。 これで、呼び出された関数の名前が得られ(インポートテーブルが手動で復元されたかのように)、逆アセンブラでコードを分析できます。 分岐がほとんどなく、非常にシンプルで線形であることがわかりました。 メイン関数の完全なコードを提供します:



; 属性:bpベースのフレーム

Main_40164F proc近く

var_32C = dword ptr -32Ch

String1 =バイトptr -228h

Windir =バイトptr -124h

var_20 = dword ptr -20h



ebpをプッシュ

mov ebp、esp

sub esp、32Ch

unxor_401040を呼び出す

SetupImports_401248を呼び出します

呼び出しds:GetTickCount_0

mov ds:TickCount_42C1AC、eax

104hを押します。 uSize

lea eax、[ebp + Windir]

eaxをプッシュします。 lpBuffer

呼び出しds:GetWindowsDirectoryA

lea eax、[ebp + Windir]

プッシュeax

lea eax、[ebp + String1]

プッシュeax

呼び出しds:lstrcpyA

lea eax、[ebp + Windir]

プッシュeax

lea eax、[ebp + var_32C]

プッシュeax

呼び出しds:lstrcpyA

プッシュds:lpString2

lea eax、[ebp + var_20]

プッシュeax

呼び出しds:lstrcpyA

プッシュds:dword_42C16C

lea eax、[ebp + Windir]

プッシュeax

呼び出しds:lstrcatA

lea eax、[ebp + Windir]

プッシュeax

ExtractDriver_4015E4を呼び出す

lea eax、[ebp + var_20]

プッシュeax

lea eax、[ebp + Windir]

プッシュeax

LoadDriver_4014CBを呼び出します

ESP、0Chを追加

KillMySelf_40139Fを呼び出す

CleanUp_401000を呼び出します

去る

retn

Main_40164F endp



どうやら、すべてが簡単です。 最初に、行が準備され、インポートが復元されます。その後、ドライバーがプログラム本体から抽出され、ドライバーフォルダーに保存されて読み込まれます。

  ADVAPI32!Cre​​ateServiceA:
 77e37071 6a30プッシュ30時間
 0:000> da poi(esp + 8)
 0012ff74 "grande48" 




ここでは、この種の感染に対抗するための、シンプルでありながら非常に効果的な方法を思い出してください。 システムディレクトリへの書き込みを禁止するだけで十分であり、ほとんどのウイルスは単に機能しません。



ドライバーのロード段階では、2番目の驚きが待っています。 ロードされません。 この待望のIoCreateDeviceが呼び出されたときに、デバッガーを手に何時間も座って待つことができますが、この瞬間は来ません。 ドライバーをダウンロードするための数時間の実りのない試みの後、それはWindows 2000用に作られたことが判明しました! したがって、XPを使用するほとんどのWindowsユーザーにとって、この感染は恐ろしいものではありません。 これがこのように動作するのはこの変更のみである可能性があるため、私は確かに言うことはありません。



ドライバーといえば。 サイズ167936。カスペル​​スキーによってRootkit.Win32.Agent.aihとして定義されています。 内部には、スパムを送信する多種多様なコードが含まれています。 特に、管理サーバーのIPアドレス208.66.195.172が含まれています。 どうやら、これはコロケーションであり、サーバー自体がレンタルされています。 あまり真実ではありませんが、ボットネットを制御するためにサーバーを借りることができる方法は明らかです)または、サーバーが合法であり、悪意のあるコードがインストールされているだけで、管理者が見逃している場合があります。 一般に、ここではすべてがぼやけています。



戻ってきます。 KillMySelf関数は、Tempフォルダーに_it.bat batファイルを作成してから起動します。

  kernel32!Cre​​ateFileA:
 7c801a24 8bff mov edi、edi
 0:000> da poi(esp + 4)
 0012fb58「C:\ DOCUME〜1 \ dev \ LOCALS〜1 \ Temp \ _i」
 0012fb78 "t.bat" 


全文は次のとおりです。



:abc

del "C:\ sandbox \ Trojan.Win32.Srizbi.v \ resume.exe.txt"

存在する場合 "C:\ sandbox \ Trojan.Win32.Srizbi.v \ resume.exe.txt" goto abc

rmdir "C:\サンドボックス\ Trojan.Win32.Srizbi.v"

del "C:\ DOCUME〜1 \ dev \ LOCALS〜1 \ Temp \ _it.bat"



つまり、彼はプログラム、それを含むフォルダー、そして最後に自分自身を削除しようとしています。



おわりに

Srizbiはトロイの木馬ではなく、実際のマルウェアのベクトルです。 その目的は、実際のウイルスをできるだけ早く身体からアンロードし(ゆっくりと判明しますが)、実行してから消滅し、最小限の痕跡を残すことです。 そのコードはシンプルでボリュームがあり、初心者(私のような:)にとっては、それを理解するのは非常に簡単です。 愚かな間違いのために、Srizbi.vのすべての作業は無駄になります。オペレーティングシステムのバージョンをチェックして、それに含まれるドライバーに準拠しているかどうかを確認しません。 その結果、システムは単にドライバーのロードを拒否します。 ドライバーを調べると便利です。ファイル、レジストリキー、ネットワーク接続、リスニングポートを隠すルートキットがあります。



All Articles