HIEWへのオマージュ

古代の記憶に触発されて...何十年も経ち、オペレーティングシステムの名前は互いに置き換わりますが、何かはまだ変わっていません。 さまざまなハッカーに近いソフトウェアの中で、HIEWはいつも私を驚かせてきました。 理解できない方法で、このコンソールプログラムは時間と戦い、今日でも人気を博しています。 HIEWはそのニッチを占有し、産業用ウイルス分析の主要ツールになりました。 奇妙で不便に思えるかもしれませんが、ウイルス分析にHIEWを使用することは非常に効果的です。



それでは、おそらく、始めましょう。



目的:多数の実行可能ファイルからマルウェアを識別して分類します。



解決策:動的分析の使用は不便であり、IDAは長く(そして高価です)、結論はHIEWを使用するということです。



マルウェアの実行可能ファイルの高速分析のためのアルゴリズム例について説明します。 最初に行うことは、分析対象オブジェクトにファイルウイルスが感染している可能性を識別することです。



HIEWで実行可能ファイルをダウンロードし、エントリポイントが指すセクションを確認します(Enter、F8、F6)。 ここではいくつかのケースが考えられます。



オプション1。 エントリポイントは、PEファイルのヘッダー領域のどこかを指します。 バリアントは簡単で、テキストモードでファイルを視覚的に表示することで検出されます。



オプション2。 エントリポイントは、実行可能ファイルの最後のセクションを指します。 これも非常に疑わしく、ファイル感染を示している可能性があります。 いくつかの例を見てみましょう。



エントリポイントは次のとおりです。



画像



訓練された目は、通常のコンパイラではあまり一般的ではないcall +5命令のアプリケーションをカットします。 行0x0048c030も興味深いもので、PEファイルのヘッダーを使用した手動作業が発生する可能性があります。 セクションの属性を見てみましょう:



画像



明らかな結論は、分析対象のオブジェクトがファイルウイルスに感染していることを示唆しています。 この場合、これはVirutウイルスの一種です。



一般に、ファイルの最後のセクションへの感染は非常に一般的な手法であり、多くの労力を必要としません。 感染は、最後のセクションに意味のあるコードまたは暗号化されたコードが存在することで簡単に識別できますが、これは完全には意図されていません。 たとえば、リソース、データ、ローミング要素などのセクション



次の図に出会うこともあります。



画像



判定は明らかです-ファイルは感染しています。 コンパイラによる位置合わせのためにファイルの最後にバイトが残った後、意味のあるコードだけでなく、エントリポイント自体も続きます。



エクスプレス分析から小さな叙情的な余談を作りましょう。 疑問が生じます:HIEWを使用してオブジェクトを動的に復号化することは可能ですか? 驚くべきことに、これはしばしば行われます。 前のVirutの例を考えてください。 ウイルスコードは小さく、いくつかの場所で暗号化され、ファイルの末尾に配置されます。 逆アセンブルされたリストを少しめくると、次のことがわかります。



画像



ここでは、最も単純な復号化サイクルを見るのは難しくありません。 ただし、静的分析の場合、どのキーで何が復号化されるかを判断できません。 しかし! HIEWは相互参照の検索をサポートしていることを思い出してください。カーソルを復号化サイクルの先頭に移動し、F6キーを押して、目的のコードセクションへの呼び出しを探します。



画像



これが復号化手順を呼び出すコードである可能性が非常に高いです。 この場合、暗号化されたセクションは0x0048c155([EAX])にあり、1バイトキーは0x0048c154([EAX-1])にあります。 ブロックサイズは0x12b2バイトです。



IDAユーザーを復号化するには、idcまたはpythonでスクリプトを作成するために実行します。 デバッガーでは、通常、何もする必要はありません。 HIEWユーザーは、組み込みのデータブロック処理を使用します。 必要な暗号化アルゴリズムを説明し、16進エディターモードでブロック境界を選択し、スクリプトを実行します。



画像



組み込みのブロック処理ツールはIntelに似た構文を持ち、8、16、32、64ビットの単純な変換を可能にします。 復号化の結果、分析に非常に適したデータが得られます。



画像



分析の表現に戻りましょう。 3番目のオプション。 エントリポイントは、コードセクションでどこにあるべきかを示します。 感染を検出するには、ほとんど経験が必要です。 いくつかの例を見てみましょう。



画像



+5を呼び出す指示は明らかです。 ポップreg。 この手法は、ベースに依存しないコードを記述する際に非常に特徴的です。 ウイルス本体に直接切り替える代わりに、push regなどの命令がよく使用されることに注意してください。 retnまたはmov reg、addr; この件に関するregおよび他のバリエーションを呼び出します。 通常のコンパイラは通常、少なくともエントリポイントではなく、一部の仮想クラスでこれを行いません。 これらすべてから、このインスタンスもファイルウイルスに感染していると結論付けることができます。 この場合、それは悪名高いサリティです。



先に進みます。 次のコードに出会ったとしましょう:



画像



エントリポイントがすぐにcallとjmpを指すという事実にもかかわらず、ファイルは感染していません。これは、Microsoft Visual Studio 2010によってコンパイルされたC / C ++プログラムの標準的な始まりです。この例は例外です。 通常、コードセクションが感染すると、悪意のあるコードが最後に追加されるか(十分なスペースがある場合)、jmpがエントリポイントから悪意のあるコードに対して直接実行されます。 コンパイラは通常、標準プロローグを持つ標準関数を呼び出すことにより、プログラムの実行を開始します。



画像



ここでは、Visual Studio C ++ 6.0コンパイラを使用してコンパイルされたプログラムの始まりを確認します。 エントリポイントは標準プロローグを指し、その後に独自の例外ハンドラがインストールされます。



次のコードを検討してください。



画像



ここで、エントリポイントは、既にわかっているpush addrシーケンスを指します。 retn。 私たちの前にルストックです。



エントリポイントを分析したら、ファイルセクションとオーバーレイを見るだけでいいです。 次のインスタンスが見つかる場合があります。



画像



この例では、元のプログラムの暗号化された本体は、おそらくオーバーレイに書き込まれます。 「感染」メカニズムの本質は、次のコードから理解できます。



画像



実際、「ウイルス」は次のようにファイルに感染します。元の実行可能ファイルを完全に暗号化し、データをオーバーレイに移動し、元のプログラムを結果のファイルで上書きします。 起動時に、プログラムは元のファイルを復号化し、一時ディレクトリのディスクに書き込み、元のコマンドラインパラメーターで起動します。



これは、ウイルス分析が終了する場所です。 産業分析モードでは、より複雑な感染を短時間で検出することは困難です(個人的な意見)。 次は、分析されたファイル自体の悪意のある機能を特定する作業です。



さまざまなランサムウェア、偽のアンチウイルスなど これらは、ファイルがテキストモードで表示されるときに検出されます。



画像



十分な量のマルウェアがロシアで生産されていることは誰にも秘密ではないため、HIEWがそのままロシアのエンコーディングで動作し、ウイルスアナリストの生活を大幅に簡素化する可能性があります。



HIEWでは、ファイルの暗号化された部分を目で識別することもできます。 コードとデータの詳細には、多くの冗長性があり、特にゼロバイトがあります。 したがって、たとえば次のデータブロックが検出されると...



画像



...このデータは暗号化されていると結論付けることができます。 静的に復号化できますか? この場合、私たちは幸運でした、そして再び1つのHIEWに制限します。 暗号化されたデータの先頭に移動して、相互参照を探しましょう。



画像



必要な復号化サイクルをすぐに見つけます。 ほぼ完了です。 暗号化されたブロックを選択し、スクリプトを記述します。



画像



そして、悪意のあるコードを解読します。



画像



高速復号化が不可能な場合、ファイルはより深い分析のために送信されますが、これは別の話です。



計画の次は、Zeus、SpyEye、Carberpなどの標準的なトロイの木馬プログラムの定義です。 彼によると、経験豊富なウイルスアナリストは一目でそれらを特定します(著者はこの声明を確認することはできません)。



その結果、ほとんど非現実的な速度で標本を分析および分類できます。10分未満で1つのオブジェクト。 どうやらこれは、HIEWのような伝説的なプログラムの成功の鍵でした。



PS HIEWの詳細な説明unicornix.spb.ru/docs/prog/heap/hiew.htm



All Articles