圧縮ツールごとに異なる圧縮解除方式を利用した攻撃手法(WinRARの使用誘導)

AhnLab ASEC 分析チームは3月23日、不正な圧縮ファイルがメールによって拡散していることを確認した。メールの内容は以下の図のとおりであり、添付ファイルはZIP拡張子であるが、「Use Winrar.(翻訳:WinRAR を使用してください)」というフレーズを含み、特定の圧縮解除プログラムで圧縮解除をするように誘導している。

[図1] メールで拡散された圧縮ファイル形式のマルウェア

圧縮されたマルウェアがメールによって拡散される方式は、以前から知られている方式である。しかし、このメールの場合、ユーザーに [図1] の赤文字(Use Winrar)のように、「WinRAR」で圧縮を解除することを誘導している。この方式で拡散されたサンプルとしては、現在までに計2種類の名前が確認されている。

  • MV_GLOVIS_B35C_191850_12_02_2020.zip
  • Scan_Covid19_2020.zip

以下、新型コロナウイルスの名前と関連した「Scan_Covid19_2020.zip」をサンプルに説明する。

メール拡散者が意図した通り、圧縮・解凍プログラム「WinRAR」を使用して圧縮ファイルを抽出すると、[図2] のような不正な実行ファイル(.exe)が抽出されることを確認できる。

[図2] WinRAR で圧縮を解除すると確認できる不正な実行ファイル(.exe)

しかし、韓国でよく利用されている Bandizip や 7zip(最新版) の圧縮・解凍プログラムを使用すると、不正な実行ファイルではなく、以下の [図3] のような正常な *.jpg ファイルが抽出されることが確認できる。

[図3] 圧縮を解除すると *.jpg の画像ファイルが確認できる。(7zip最新版)

なぜ、同じ圧縮ファイルの抽出結果が異なるのだろうか?結論から言うと、この不正な圧縮ファイル(ZIP)は2つの圧縮ファイルを結合した正常ではない圧縮構造を持っているという点が挙げられる。このような正常ではない構造を説明するために、ZIP の正常な構造について簡単に説明する。

ZIPファイルの圧縮構造

まず、ZIPファイルの構造を説明する前に、一般的に知られているコンポーネントの名称と 010editor の Template 機能で表現される要素の名称が異なり混乱をきたす場合があるため、使用する名称を以下のとおり整理する。 

  • Record = Local File Header + File Data(Compressed)
  • DirEntry = Central Directory
  • EndLocator= End of Central Directory Record
[図4] 正常な ZIP 圧縮構造を持つファイル

一般的に ZIP 圧縮フォーマットは圧縮されたファイルの個数だけ Record と DirEntry を持ち、EndLocator が一つだけ存在する。したがって、例えば3個のファイルを圧縮した場合、[図4] のRecord3個、DirEntry3個、EndLocator1個の順に存在していることが確認できる。

ほとんどの圧縮・解凍プログラムはZIP形式で圧縮された内部ファイルを読み込むとき、一般的に「EndLocator」という構造を一番先に参照する。

[図5] ZIP の圧縮構造 – EndLocator の情報

EndLocator は [図6] の最下段にある構造体で、圧縮されたファイルの個数がわかる elEntriesInDirectory と、DirEntry 形式の1番目を Offset (赤い矢印)で示す elDirectoryOffset、 すべての DirEntry の全体サイズがわかる elDirectorySize 等の情報を持っている。その次は、DirEntry を参照して Record を読み出す。DirEntry は、各 Record の情報を持っており、圧縮されたデータの個数だけ繰り返し Record に圧縮されたデータを確認できる。

[図6] ZIP ファイルフォーマットの全体的な構造

2種類の正常ではない部分

この記事で紹介している不正なファイルには、2種類の正常ではない部分が存在する。

1)     EndLocator の個数

ZIP で圧縮された正常なファイルの構造は、[図5] のように1個の EndLocator のみが存在することがわかる。

[図7] 不正なサンプルの ZIP 圧縮構造

しかし、このサンプルは [図7] のように EndLocator を2個持っており、また圧縮されたファイルの個数がわかる elEntriesInDirectory 値が「2」ではなく「1」である。すなわち、このサンプルは *.jpg と *.exe をそれぞれ ZIP で圧縮ファイルとして作成し、この2つを結合したものと推定できる。

2)     EndLocator の elDirectoryOffset 値

[図8] EndLocator の elDirectoryOffset 値と DirEntry 値の比較

一般的に ZIP 圧縮ファイルの elDirectoryOffset 値は DirEntry のオフセットが入れられている。しかし、このサンプルは [図8] のように対応する DirEntry[1] オフセット(0xDC66)ではなく、*.exe の Record[1]Size(0x7630) が入っている。これは明らかに正常ではない値だが、圧縮プログラムごとに破損した圧縮形式(または一般的ではない形式)を「どのように処理するか」の処理方法に違いがあるためだと思われる。そのため、特定プログラムでは一番上のデータである *.jpg が抽出される一方で、WinRAR のように *.exe が抽出されることもある。そして、あるプログラムでは破損している形式であると認知して *.jpg と *.exe 両方のファイルを読み取れるように、最初から正常な圧縮ファイルとして作成することもある。

このマルウェアの方式は正常な画像ファイルと不正なファイルそれぞれを圧縮して結合した形式であり、非常に簡単である。これは、アンチウイルスや特定製品で事前ブロックされることを回避するために使用したものと推定される。

V3 製品は、[環境設定 > スキャン設定 > 指定スキャン > スキャン対象設定]で圧縮ファイルにチェックを入れれば診断されることが確認できる。

[参照] V3 の[環境設定 > スキャン設定 > 指定スキャン > スキャン対象設定]

このようなサンプルの感染を予防するためには、出所が不明なメールの添付ファイルおよびリンクは開かずに、OS のセキュリティ更新プログラムおよび Anti-Virus 製品の最新のアップデートを行わなければならない。

現在 V3 では、このような内部ファイルを次のような診断名で診断している。

  • Trojan/Win32.Vbkrypt (2020.03.28.01)

0 0 vote
評価する
guest
0 コメント
Inline Feedbacks
View all comments