破損したUPXパックサンプルの自動復元

破損したUPXパックサンプルの自動復元

Nozomi Networks Labsは日々ウェブをスキャンし、Internet of Things (IoT) マルウェア開発者が自動コード解析システムを欺くために導入する新しいテクニックを監視しています。ほとんどの場合、これらの脅威は比較的単純であり、サンプルをデバッガで手動解析する際に簡単に回避することができます。しかし、これらの脅威を効率的に処理できる自動システムをセットアップし、維持することは困難です。

IoT ボットネットの検知回避方法に関する前回のブログ記事で、マルウェア作者が悪意のあるコードを保護するために、オープンソースのUltimate Packer for Executables(UPX)ツールを一般的に使用していることを説明した。マルウェア作者は、自動的な解凍をより困難にするため、解凍後に修正するなどの技術革新を常に行っています。悪意のあるサンプルがどのように修正されているかを特定した後、次のステップは、これらのトリックに対処する方法をシステムに教え、それらに対抗するソリューションを開発することです。

このブログでは、改ざんされたさまざまなタイプのUPXパック・ファイルを自動的に修正し、UPXの標準機能を使って簡単に解凍できるようにするツール(Git Hubで入手可能)を紹介する。このツールの最初のバージョンは、IoT デバイスで一般的に使用されているさまざまな一般的な Reduced Instruction Set Computer (RISC) アーキテクチャ(x86、x86-64、PowerPC、ARM、MIPS)用にコンパイルされた実行可能ファイルおよびリンク可能ファイル(ELF)の処理に焦点を当てている。次に、当社のグローバルチェーン(IoT )のハニーポットを使用して収集した一連のサンプルを使用して、その有効性を評価します。

UPXパックされたファイルの識別

UPXは、オープンソースであり、複数のアーキテクチャとプラットフォームをサポートしているため、正規品とマルウェアの両方をパックするために使用される最も一般的なツールの1つです。マルウェア作成者にとっての主な問題は、同じツールが悪意のある実行可能ファイルを解凍するための解凍コードも使用していることです。

時間が経つにつれて、攻撃者は、UPXパックされた実行可能ファイル内の特定の値を変更すると、UPXツールによる解凍が不可能になることに気づいた。同時に、修正された情報が解凍コードで使用されないため、これらのサンプルは依然として問題なく実行できる。現在確認されている最も一般的な手法は、以下の2つである:

  1. UPXの内部構造l_infoとp_infoを破壊する。
  2. UPXのまだリリースされていないバージョンを使用する。

これらのテクニックはいずれも、UPXの標準解凍ツール(upx -d)で対応するサンプルをサポートしないようにすることを目的としています。その他の情報は、以前のブログでご覧いただけます。

まず、提供されたサンプルが実際に UPX でパックされているかどうかを確実に判断する方法を見つける必要があります。デフォルトでは、UPXでパックされたファイルにはUPX!というマジック値と、ファイルを圧縮するために使用されたUPXツールのバージョンを示すバージョン文字列が含まれています(図1)。しかし、この情報が取り除かれると、このことはあまり目立たなくなる。このデータは、解凍機能に影響を与えることなく簡単に変更できるため、この種のインジケーターに頼ることはできない。

UPX圧縮ファイルとそのバージョン文字列。
図1 -UPX圧縮ファイルとそのバージョン文字列。

データが変更可能であるため、この種の指標に頼ることはできないため、シグネチャベースの検出という別のアプローチを採用することにした。各アーキテクチャと圧縮アルゴリズムに対して、UPXはオリジナルファイルの解凍を担当する同じコードをメモリに追加する。このコードを変更すると、攻撃者は新しい亜種を作成するためにこのコードが何を行っているかを理解する必要があり、最終的には実装コストがはるかに高くなるため、一般的ではなくなります。

UPXの改造箇所を探す

署名ベースのスクリプトは、ファイルが確かにUPXで圧縮されたことを検証した後、l_infoとp_info構造体を解析して、それらが変更されているかどうかを評価する必要がある。

変更されていない UPX パック・ファイルでこれらの構造体を見つけるのは簡単である。肉眼で見れば、UPX マジック値を格納する l_info 構造体の l_magic メンバのオフセットを簡単に見つけることができます。特に、既存のマルウェア・ファミリで使用されてきたマジック値をハードコーディングするのではなく、あらゆる可能性のある改変に対応する汎用修正ツールを使用したい場合は、この作業はより複雑になります(図2)。

UPXマジックバイトが改ざんされたMIPS ELFファイル。
図2 -UPXマジックバイトが改ざんされたMIPS ELFファイル。

ELFファイル中の12バイトのl_info構造体とそれに隣接するp_info構造体を見つけるには、スクリプトはプログラム・ヘッダー・テーブルがどこで終わるかを見つける必要がある。これを見つける最良の方法は、ELFヘッダーを解析し、e_phoff、e_phnum、e_phentsizeの値を使って簡単な計算をすることです。詳細については、提供したツールのソースコードを参照してください。構造体が見つかったら、次のステップは、そのフィールドが壊れているかどうかをチェックし、元の値に戻すことである。

l_info構造体

UPX の解凍ツールに UPX で圧縮されたサンプルの処理を拒否させる最も簡単な方法の 1 つは、 UPX マジック値にパッチを当てることです。これは、ツールが提供されたファイルをサポートしているかどうかを確認する最初のチェックの1つである。このような変更を行うには、攻撃者は圧縮ファイル内のUPX!攻撃者は、圧縮されたサンプルの内部構造を理解する必要さえない。

これに対処するため、シグネチャベースのスクリプトはl_magic値がどこにあるかを調べ、標準のUPX!マジック値と比較します。値が異なる場合、リカバリツールは元の値に戻します。

p_info構造体

パッチが頻繁に適用されるもう1つの値群は、p_info構造体にある。この構造体には、コンテンツの解凍に必要な2つの重要な値が含まれています。1つ目は元のファイルサイズで、p_filesizeフィールドとp_blocksizeフィールドに格納されています。これらの値が改ざんされている場合、サンプルの機能に影響はありませんが、UPXツールはサンプルを解凍できなくなります。幸いなことに、圧縮ファイルの最後にある Pack Header クラスに関連する情報から、元のファイルサイズを確認することができます。最後の 36 バイト(情報が 32 バイト、UPX マジック値が 4 バイト)には、UPX のソース・コードにあるように、オフセット 24 に位置する元のファイル・サイズが格納されています。

元のファイル・サイズが特定されれば、p_filesize と p_blocksize の値も復元できます。こ れに よ り 、 標準の UPX ツールで固定サ ンプルが正常に処理 さ れ る よ う にな り 、 自動ま たは手動の解凍が非常に簡単にな り ます。

有効性評価

このソリューションの有効性を評価するために、あらかじめ定義された期間(4月1日~6月1日)のIoT ボットネットのスナップショットに対して完全なテストを実行することにしました。過去2ヶ月間(図3)、IoT ハニーポットのチェーンを使って何とか傍受したすべてのELFサンプルを取り出し、そのうちのいくつが私たちのツールの助けを借りて処理できるかをチェックしました。

IoT テスト用マルウェアサンプルリストの構築。
図 3 - テスト用のIoT マルウェアサンプルリストの構築。

この2ヶ月の間に、私たちのIoT ハニーポットは2,622個のマルウェア サンプルを収集し、そのうち2,089個が ELFファイルでした。2,089個のELFファイルのうち、696個(33%)が異なるバージョンのUPXでパックされていました(図4)。興味深いことに、UPXが唯一のパッカーとして使用されていた以前のUPX関連の調査(前回のブログで説明)において、パックされたサンプルとパックされていないサンプルの分布が年初に非常に類似していることが確認されています。

UPXでパックした場合とパックしていない場合の比較
図4 -オレンジ - パックされていない1,393個のELFファイル(66%)、青 - UPXパックされた696個のELFファイル(33%)。

696個のエルフ・ファイルの内訳は以下の通り:

  • 618は変更されていないので、標準的なupx -d機能を使って簡単にアンパックできる。
  • 78サンプル(~4%)が改ざんされ、標準的な手段では開封不可能であった。そのうち3サンプルはより複雑なカスタム溶液でパックされ、75サンプルはUPX構造を修正することで変更されていた。
  • 75個のうち、66個はバージョン情報の文字列が削除されていた。UPXのバージョンが削除されなかったもののうち、UPX 4を使ってパックされたものはわずか2%で、残りは現行のUPX 3を使ってパックされたものであった。

紹介したツールを適用した後、UPX 構造を修正した 75 個のサンプルはすべて、upx -d 機能を使用して正常に解凍された!

結論

今回紹介したツールの主な特徴は以下の3点で、他の既存のツールよりも優れている:

  1. 特定のマルウェアファミリーによる変更にとらわれず、その背後にある基本的なアイデアに焦点を当てることで、既存および将来の多くのバリエーションをサポートする、
  2. より多くのアーキテクチャをサポートしている、
  3. 簡単に延長できる。

これらの特徴により、他の自動サンプル処理システムと容易に統合でき、開梱率を向上させ、正確な検出と帰属を容易にする。

Nozomi Networks では、サイバーセキュリティ・コミュニティ全体で情報を共有することが勝利への鍵であると考えており、このツールを一般に公開することで、私たちの共同成功に貢献できることを嬉しく思います!