この記事ではリバースエンジニアリングというより自己増殖の過程をお見せします。
ここでいう.log
ファイルは
VirusTotal上のこちらのファイルの事を指します。
検証環境
- Docker
- mcr.microsoft.com/openjdk/jdk:17-ubuntu
はじめに
実際にサーバアプリケーションを使いプラグインを感染させた挙動は、 Any.Runでご確認いただけます。
実際に実行した際のログ はGistに張っておきます。 空のZipファイルを入れていた関係でエラーだらけですが、 書き換え対象のファイルは判別できるかと思います。
筆者はセキュリティ専門家ではありません。 見当違いなことを言っている箇所が多いと思います。
挙動
挙動はとてもシンプルです。
HDD内のすべてのjar
ファイルに対して、変更を試みます。
ファイルを直接writeでオープンするのではなく、
同じディレクトリ内に.tmp
で終わるファイルを作ってからそれを上書きコピーして保存を行うため、Any.Run上では上書き扱いの警告が出ていません。
プラグイン別の実装
完全にコードを読んだわけではありませんが、 少なくとも下記をincludeしているものに対しては特殊な書き換えを行うようです。
net/labymod/api/LabyModAddon
onEnable
に対し、書き換えを実施
net/md_5/bungee/api/plugin/Plugin
,org/bukkit/plugin/java/JavaPlugin
onLoad
もしくはonEnable
にインジェクション
リバースエンジニアリングについて
やはり難読化されています。
今回記事で取り扱っているものは、 JADXで解析できたうち、mainメソッドから簡単に追えた範囲のみです。
被害を防ぐために
今回のマルウェアは MCAntiMalware で検知可能でした。 また、自己増殖をするため、ファイルのハッシュを厳格にチェックする機構や、 厳しいACLと監査ログがあれば、同じように被害を防げた可能性があります。