裸の真実

手間がかからない技術的な詳細は、パラグラフ記号で示されています:¶。 プレゼンテーションの意味を失わずにスキップできることを願っています。



パート1 下船



よくあることですが、最近では、新しいウイルスがメールに直接届きます。迅速かつ便利で、負担をかける必要はありません。 最後のウイルスは、この手紙で自分自身を送信しました。

From: "Shauna Hoover" <olwen.davie@mairie-paris.fr>

宛先:<xxx@xxx.xx>

件名:パリスヒルトン



こんにちは、バディ。



裸のアンジェリーナ・ジョリーを見つけました!

添付ファイルをご覧ください!

さようなら


もちろん、最初は手紙の主題がP.ヒルトンについてであるが、内部では-A.ジョリーについてですが、...ネットワークの悪役の立場に入りましょう! 彼らの仕事は神経質で、時には間違いを犯します。 手紙が受取人に届いたとしても、彼らが試したのは良いことです。



添付ファイルはxjolie.scr.zipと呼ばれ、内部には「似た」スクリーンセーバーxjolie.scrが含まれています。 このファイルは疑わしいものです。コードはほとんどなく、関数は3つしかなく、データもほとんどありません。 スクリーンセーバーはプルせず、ウイルスには十分ではありません。 オンラインKasperskyスキャナーは、ファイルをTrojan.Win32.Pakes.cyuウイルスに感染していると指定します。



実行の最初に、驚くことに気付きました。プログラムはNtDeleteValueKey関数を呼び出し(実際にはsysenter命令であるKiFastCallEntryを使用)、ガベージを引数として含む初期化されていないローカル変数を渡します。 したがって、99.9%のケースでNtDeleteValueKeyはSTATUS_INVALID_HANDLEを返す必要があります。 この値(0xC0000008)は開始値として使用され、そこから長い計算(多数の「ガベージ」算術演算)を通じて、プログラムは必要なアドレスを受け取ります。 ここでのシステムコールのタスクは、明らかに、自動アナライザーやその他のアンチウイルスをだますことです。



ちなみに、その瞬間に働いていたシマンテックは音さえ鳴らさず、しつこく「クリーン」と言い続けました。 したがって、今後12年間でヒューリスティックな分析を期待する価値はないと確信しています。



このプログラムは、本体からデータのブロックを抽出して解読します。 その後、(疑わしいと思われないように)小さい部分でこの目的のために動的に割り当てられたメモリ領域にコピーします。

暗号化されたデータが最初に配置されるアドレスは、どこにあるか不明なところにあるように思われます。 しかし、実際には判明-アプリケーションのリソースで:



プログラムが自身を復号化した後、ダンプを作成します。
  .writemem unpacked0.dmp 00402088 L00009400 
復号化されたファイルをディスクに書き込みます。




このデータブロックは、実際には本格的な実行可能ファイルでもあり、 unpacked0と呼びます 。 このプログラムはすでに本物のドロッパーです。その目的は、被害者のコンピューターにマルウェアをインストールすることです。



ドロッパーのコード構造は非常に明確でシンプルで、明らかに「C」で記述されています。 内部のファイルには、「d:\ programs \ siberia \ install \ objfre_wxp_x86 \ i386 \ Install.pdb」という行が含まれています。 これは面倒な省略ではありません。 おそらく、著者はこの方法で、製造元が推奨する「ウイルスの公式名」がウイルス対策会社に通知しようとしているのでしょうか?







設置



OSバージョンの確認。 正直なところ、このコードは驚きました。

擬似コードでは、次のようになります。

if Version.Major = 5

if Version.Minor = 0

is_win2k = 1

else

is_win2k = 0

else

is_win2k = 0

is_win2k_temp = is_win2k






その後、XPと2003サーバーの場合、さらに3つのブロックが1対1で存在します。 なぜこれほど多くの変数といくつの比較があるのでしょうか? 要するに、私はタンバリンでこれらのダンスを理解していませんでした。



プログラムはOSの現在のバージョンを確認し、Windows 2000、XP、または2003サーバーでない場合は終了します。



ベースアドレス unpacked0は、正しい着陸装置のはずなので、最終的に自分がどこにいるのかを見つけます。 このために、ロードされたイメージの先頭がメモリページの先頭と一致するという事実に基づいて、最も単純な検索方法の1つが使用されます。 通常のx86コンピューターのデフォルトサイズは4キロバイトです。 コード内の現在の場所が取得され、そこから現在のページの先頭に移動し、署名MZの先頭を見て、見つからない場合は前のページに移動します。



テーブルをインポートしますunpacked0はコンパイル中に指定された固定ベースアドレスに依存できないため、インポートテーブルを更新する必要があります。 これを行うために、プログラムは独自のヘッダー(ダウンロードされたイメージの一番最初にあり、そのアドレスは最後のステップで見つかりました)を解析し、同じ方法でkernel32ライブラリヘッダーを解析し、エクスポートテーブルを見つけ、単純な文字列比較によって2つの主要な関数を見つけます:LoadLibraryA GetProcAddressは、それらを使用して、その黒い行為に必要な他のすべての関数をロードします。



ドライバー抽出 。 はい、それはいまいましい、ドライバー。 ドライバーを持たないウイルスは、ただ吸っているだけのようです。 すでに推測しているように、ドライバー本体はunpacked0のリソースに含まれています。 ちなみに、ドライバーを含むファイルには、「d:\ programs \ siberia \ protect \ objfre_wxp_x86 \ i386 \ protect.pdb」という行が含まれています。 しかし、トレンドは...







ドライバの本体は、動的に割り当てられたメモリ領域にコピーされ、その後、チェックサムがチェックされます。



winnt32.dllを抽出します 。 そして今、-注目-フェイントイヤー。 抽出されたばかりのドライバーから別のコンポーネントが抽出されます。 リソースからですが、どうでしょう。 これで、ウイルスのコンポーネントの数は4つになりました。最初のxjolieファイル、解凍されたインストーラー(unpacked0)、ドライバー、および控えめな名前winnt32.dllのライブラリーです。

一般的なアンパック方式を図に示します(青-コード、茶色-リソース)。

プログラムを順番に解凍する



「winnt32.dll」という名前は、「怖い」名前から誤って選択されることはありません。上級ユーザーであっても、そのようなファイルを削除することはありません。

 kernel32!Cre​​ateFileA:
 7c801a24 8bff mov edi、edi
 0:000> da poi(esp + 4)
 0012feac "C:\ WINDOWS \ System32 \ WinNt32.dll" 




何らかの理由でそのようなファイルを作成できない場合、ドロッパーは名前の最後にアンダースコアを追加します。 この下線付きのファイルは、再起動後に必要なファイルに名前が変更されます。このために、MOVEFILE_DELAY_UNTIL_REBOOTフラグを指定したMoveFileEx関数が呼び出されます。 これはシステムアカウントで再度行われ、成功する可能性は非常に高くなります。



winnt32.dllを設定します 。 実際、このライブラリをトロイの木馬のメインファイルとして使用することは興味深い動きです。 アンチウイルスとユーザーは、実際にはそれらに注意を払っていません。原則として、合理的には、結局のところ、実行可能なファイルはありません。 ただし、システムにライブラリをロードして制御を移す方法はまだあります。 このトロイの木馬が使用する方法は非常に独創的です。winlogonプロセスの通知メカニズムを使用します。



このメカニズムを有効にするために、ドロッパーは次の値をHKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ Winlogon \ Notifyレジストリキーに追加します

DLLName:winnt32.dll

StartShell:WLEventStartShell

なりすまし:0

非同期:0


(説明付きの可能なパラメーターのリストは、 msdn.microsoft.com / en-us / library / aa379402.aspxにあります



つまり、これは、ユーザーのログインでWinlogonがwinnt32.dllをダウンロードし、それから同期して、偽装を使用せずに、winlogon自体が機能する同じアカウント、つまりSYSTEMでWLEventStartShell関数を呼び出す必要があることを意味します。 ログインするユーザーにとって、これはひどいものを意味します。



これでwinnt32.dllのインストールが完了し、ドロッパーがドライバーに戻ります。



ドライバーのインストール まず最初に、ドロッパーはデバイス名「」\\。\ Prot2を使用して既にインストールされているドライバーへの接続を試みます。接続に失敗した場合、%SystemRoot%\ System32 \ drivers \ Wwwdd.sysなどのランダムな名前でドライバー本体をファイルに保存しますここで、Wは大文字、wは小文字、dは数字です。

kernel32!CreateFileA:

7c801a24 8bff mov edi,edi

0:000> da poi(esp+4)

0012fc94 "C:\WINDOWS\System32\drivers\Hwo84.sys"








その後、ドライバーはCreateService-StartService API関数によって登録および起動されます。 ドロッパーは、必要なレジストリ行もセクションに追加します

SYSTEM \ CurrentControlSet \ Control \ SafeBoot \ Network \

SYSTEM \ CurrentControlSet \ Control \ SafeBoot \ Minimal \

SYSTEM \ ControlSet002 \サービス\

SYSTEM \ ControlSet001 \サービス\


つまり、最後に成功した構成に戻るか、セーフモードで読み込むと、ドライバーは引き続き読み込まれます。 とても意地悪。



次に、コマンドライン/ c del FILENAME >> NULLを使用してcmd.exeを呼び出し、ユーザーのコンピューターから自身を削除します。



おわりに



裸の歌姫を装って、トロイの木馬が隠れているだけではありません。 これは、インストーラー、ルートキットドライバー、ユーザーモードの動的ライブラリーの3つのプログラムのソフトウェアパッケージ全体です。 悪意のあるコードを挿入するために使用される技術はシンプルで効果的であり、独創性がないわけではありません。 しかし、いつものように、%SYSTEMROOT%\ system32で書き込みが禁止されている場合、インストーラーは完全に中断します。



2番目の部分では、winnt32.dllのdeantedライブラリとその暗いドライバープロテクターの悪意のある機能を検討します。



All Articles