
・Linuxで正規のファイルを亜種化したい
・そもそも亜種化ってなに?
・亜種化のルーツを知りたい
・UPXの利用方法を知りたい
こういった疑問に答えます
Linuxでウィルス対策ソフトの試験をしたい。UPXによる『亜種化』方法について解説
以前はコンピューターウィルスというとWindows向けの物が多く、macOSやLinux向けのコンピューターウィルスはそれほど多くありませんでした。
ただし最近はクラウドの活用やIoT機器、サーバー用途などでLinuxが多く利用される機会が増えたこは、Linux向けのコンピューターウィルスが増加した要因の一つかもしれません。

Linuxは今まではコンピューターウィルスによる被害が少なかったためか、短いログインパスワードを利用していたり、安定運用のためパッチを適用しなかったり、また、担当者のスキル不足から環境を塩漬けのまま放置されているケースが散見されます。
上記の記事内の『亜種』が多く見かけるようになったのも、コンピューターウィルスが増加している要因でしょう。
とはいえ、コンピューターウィルスを入手しての試験は感染リスクがあるので、単純にLinux上で『亜種化』を行ってみます。
毎日登録されるマルウェアや利用が望まれないソフトウェアは45万件!?
最近、ニュースなどでコンピューターウィルスによる感染被害を頻繁に見かけます。
セキュリティソフトの比較検証を行う独立機関の最大手であるAV-Test.orgによると、毎日登録されるマルウェアは45万とその多さに驚きます。
Every day, the AV-TEST Institute registers over 450,000 new malicious programs (malware) and potentially unwanted applications (PUA).
引用元:AVTEST
日本語訳:『AV-TEST Instituteは、毎日450,000を超える新しい悪意のあるプログラム(マルウェア)と潜在的に不要なアプリケーション(PUA)を登録しています。』
一日は、86,400秒(60秒 x 60分 x 24時間)なので、この450,000を86,400で割ると実に5秒に1つのマルウェアや利用が好まれないソフトウェアが誕生していることになります。
この45万件のマルウェアが全くの新しいマルウェアや悪意のあるソフトウェアという訳ではありません。
そこで先ほどの『亜種化』の登場です。
ちょっとした加工、つまり『亜種化』をすることで、ウィルス対策ソフトで検知し難くすることが出来ます。
これが、今日のコンピュータウィルスの増加と被害が増加している原因です。
亜種化とはなにか?

シグネチャやパターンファイルを利用したウィルス対策ソフトやEDR製品では、マルウェアや悪意のあるソフトウェアの判断にhashを利用します。
hashとは人間の指紋のようなものです。
つまり指紋の書き換えを任意に行うことで、同じプログラムでもシグネチャやパターンファイルを利用したウィルス対策ソフトでは検知し難くなります。
少し古い記事となりますが、マイクロソフト社も『マルウェアの96%は使い捨て』と伝えていのはこの理由です。

UPXのダウンロードと展開
今回は亜種化にUPXを利用します。
UPX (ultimate packer for executables)は、様々なOSのファイル形式に対応した圧縮ソフトウェアです。
圧縮というとzip形式などを想像するかもしれませんが、UPXは実行できるプログラムのままファイルサイズを約50%〜70%削減することが出来ます。
圧縮されたプログラムは内部構造とhash値が変化し、これが結果的に亜種化となります。
しかも、UPXはダウンロードして展開するだけで利用可能です。
今回の検証も自宅サーバー上のCentOS8.4環境で検証を行いますが、自宅サーバーに興味がある方はこちらを参考にしてください。
では早速UPXをダウンロードします。
インターネットに接続できるLinux環境では、『wget』コマンドでURLを指定すれば直接ダウンロードが可能です。
最新版は2022年6月時点ではupx-3.96です。
作業は管理者権限で行っていますが、最後のupxのコピーの部分だけsudoで実行しても問題ありません。
# wget https://github.com/upx/upx/releases/download/v3.96/upx-3.96-amd64_linux.tar.xz
ダウンロードしたら解凍しupx本体をコピーします。
# tar Jxfv upx-3.96-amd64_linux.tar.xz
# cp -p upx-3.96-amd64_linux/upx /bin/
ダウンロードと展開は以上で完了です。
UPXの実行と確認

UPXは前述の通り『実行できるプログラムのまま』ファイルの圧縮が可能です。
そこで、Linuxの実行形式であるELFファイルを実際にUPXで圧縮してみます。
ELFかどうかは『readelf』コマンドで確認が可能です。
初めて『readelf』コマンドを使う方は、是非manコマンドで確認してみましょう。
# man readelf
今回は『vmware-toolbox-cmd』コマンドを利用してUPXの動作確認を行います。
# readelf -a /bin/vmware-toolbox-cmd
ELF ヘッダ:
マジック: 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00
クラス: ELF64
データ: 2 の補数、リトルエンディアン
バージョン: 1 (current)
OS/ABI: UNIX - System V
ABI バージョン: 0
型: DYN (共有オブジェクトファイル)
マシン: Advanced Micro Devices X86-64
バージョン: 0x1
エントリポイントアドレス: 0x2a90
プログラムの開始ヘッダ: 64 (バイト)
セクションヘッダ始点: 44352 (バイト)
フラグ: 0x0
このヘッダのサイズ: 64 (バイト)
プログラムヘッダサイズ: 56 (バイト)
プログラムヘッダ数: 11
セクションヘッダ: 64 (バイト)
セクションヘッダサイズ: 32
セクションヘッダ文字列表索引: 31
『readelf』コマンドを実行すると分かりますが、ヘッダやクラスにELFである旨の記載有ることが分かります。
次にhash値を確認します。
# sha256sum /bin/vmware-toolbox-cmd
b337e19de8731c4f10377b84065168beb9be1bb56309b07ef24ca7af052c6cd9 /bin/vmware-toolbox-cmd
hash値を元にファイルを確認するには、Virustotalを確認するのが手早いです。

勿論ですが、Virustotalで確認すると『vmware-toolbox-cmd』のhashから、このファイルが安全なファイルであることが分かります。
次にUPXを使って圧縮します。
ここでは分かりやすくUPXで亜種化したファイル名を『vmware-toolbox-cmd.upx』としています。
# upx -o vmware-toolbox-cmd,upx /bin/vmware-toolbox-cmd
Ultimate Packer for eXecutables
Copyright (C) 1996 - 2020
UPX 3.96 Markus Oberhumer, Laszlo Molnar & John Reiser Jan 23rd 2020
File size Ratio Format Name
-------------------- ------ ----------- -----------
46400 -> 19184 41.34% linux/amd64 vmware-toolbox-cmd,upx
Packed 1 file.
『Packed 1 file.』を出力された通り、正しく亜種化(Packed)されたこと分かります。
オリジナルと亜種化したファイルのhash値を確認すると、hash値が変化したことが分かります。
オリジナル
# sha256sum /bin/vmware-toolbox-cmd
b337e19de8731c4f10377b84065168beb9be1bb56309b07ef24ca7af052c6cd9 /bin/vmware-toolbox-cmd
亜種化後
# sha256sum vmware-toolbox-cmd,upx
0602c678a0a0c06832a4ef4f2de5b721f8328915819c9fbc5dff289502d1ff12 vmware-toolbox-cmd.upx
Packed 1 file.
亜種化したことで、Virustotal上では過去に見たことがないhash値となり、結果も『No matches found』となりました。

亜種化したファイルの実行
最後の亜種化したファイルが実行可能かを確認します。
ここでは単純に-hオプションでヘルプを確認します。
亜種化前のオリジナルファイル
# /bin/vmware-toolbox-cmd -h
使用方法: /bin/vmware-toolbox-cmd <コマンド> [オプション] [サブコマンド]
「/bin/vmware-toolbox-cmd help <コマンド>」と入力すると、そのコマンドのヘルプを表示できます。
VMware Tools のバージョンを確認するには「/bin/vmware-toolbox-cmd -v」と入力します。.
stdout 出力を抑止するには「-q」オプションを使用します。
ほとんどのコマンドではサブコマンドも使用されます。
使用可能なコマンド:
config
device
disk(オペレーティング システムによっては使用できない場合もあります)
info
logging
script
stat
timesync
upgrade(オペレーティング システムによっては使用できない場合もあります)
亜種化後
# ./vmware-toolbox-cmd.upx -h
使用方法: ./vmware-toolbox-cmd,upx <コマンド> [オプション] [サブコマンド]
「./vmware-toolbox-cmd,upx help <コマンド>」と入力すると、そのコマンドのヘルプを表示できます。
VMware Tools のバージョンを確認するには「./vmware-toolbox-cmd,upx -v」と入力します。.
stdout 出力を抑止するには「-q」オプションを使用します。
ほとんどのコマンドではサブコマンドも使用されます。
使用可能なコマンド:
config
device
disk(オペレーティング システムによっては使用できない場合もあります)
info
logging
script
stat
timesync
upgrade(オペレーティング システムによっては使用できない場合もあります)
Packed 1 file.
亜種化後も動作に変化がない(正常に動作)ことが分かりました。
まとめ
今回はUPXを使った亜種化について解説してみました。
最近はコンピュータウィルスによる被害が増えています。
亜種化とその動作を理解することもエンジニアのスキルアップに繋がるので、是非試してみてください。
なお、本ブログではITエンジニア向け小技を紹介していますので、ぜひこちらも参考にしてみてください。
