当記事内には実際に攻撃者が利用したURLなどが無毒化した状態で記述されている。
もし開く場合は自己責任で。
時系列
- 2022/12/27 10:18: サーバが正常に起動していない現象を観測
- サーバ管理担当者がサーバを再起動
java.net.NoRouteToHostException: No route to hostエラーを観測- レンタルサーバ事業者にネットワーク設備の点検を依頼
- 2022/12/27 10:30: レンタルサーバ事業者から、障害が発生していない報告を受ける
- マルウェア検査アプリケーションでマルウェアを発見
- 2022/12/28 10:35: 障害の復旧作業に筆者が合流
- 2022/12/29 02:00: 当該障害がクリティカルなセキュリティ事故であることが判明
- 2022/12/30 10:56: 当該サーバが復活し、当初のエラーが出なくなっている可能性があることが発覚
これに伴い、VirusTotal, Any.Runの結果を記事内に追記 - 2022/12/31 02:00: 感染していた場合でも、エラー無しでサーバが正常に動作することが判明
はじめに
本記事ではプラグインファイル・Paperバイナリに対して感染したUpdater.classについて取り扱う。
それ以外の項目については、
こちらの記事(英語)が参考になると思われる。
また、実際に感染したサーバを実行した際の動作について
Any.Run
で実験を行っている。
そちらも見ていただけると、本記事と別途記述している2記事についてもよくご理解いただけるのではないかと思う。
エントリーポイントの汚染
複数のmainメソッドにおいてUpdater.init()を呼び出すコードが発見されている。
また、コードとして
public static void main (String[] arrstring) {
Updater.init();
String[] args;
}
のように変更されており、
引数が編集されていることで書き換え済みか認識しているのではないかと考察した。
また、CFRでの解析においてUpdaterクラスが認識出来ていなかったが、
おそらくUpdater.classファイルに不正な値を入力することで、
解析アプリケーションをまともに動かせなくする目的があったのではないかと考える。
Updater.init()の挙動
リバースエンジニアリングした全文は
こちら
を参照していただきたい。
また、筆者が必要に応じてアノテーションを付けたファイルは
こちら
から利用できる。
前提バイナリのロード
Updater.classでは
最初にjava.io.tmpdir内の
kernel-certs-debug4917.logというファイルに対して
Fileオブジェクトを生成する。
もし、すでにkernel-certs-debug4917.logファイルが存在しているのであれば、
当該ファイルをjavaもしくはjavaw.exeで実行する。
拡張子は.logであり、いかにも一般的なファイルに擬態させているが、中身はjarファイルである。
バイナリのダウンロード
もしkernel-certs-debug4917.logが存在しない場合、次の動作が行われる。
- 初期値として
0Prpx2ekKWc=をロード - リソース内の
/plugin-config.binからIJMZR7mQs8faH0sBuSYr8g==をロード ttp:// files <dot> skyrage <dot> de/mvdからjarファイルをを.logとして保存
(VirusTotal,
詳細記事)- 1もしくは2でロードした値を
-Dgnuに代入し、ダウンロードしたバイナリを実行 ttp:// files <dot> skyrage <dot> de/updateからzip形式のファイルをダウンロード
(VirusTotal,
Any.Run,
詳細記事)- ダウンロードしたファイルを加工(詳細は割愛)
- ダウンロードしたファイルを実行
追跡
Whois
Whoisの最終変更は下記のとおりである。
Changed: 2021-07-12T21:50:02+02:00
また、ネームサーバはCloudflareの物が利用されていたようだ。
当該マルウェアについて本チームの考察
共同で研究を行った のふれむ氏 の調べたところによると、
当該マルウェアは2022年の8月ごろから発見されていると見て良いのではないかと思われる。
当チームが観測したバージョンは、
おそらく2022/12/27日時点でCloudflare側が規約違反もしくはFreeプランの制限超過で
Proxyを解除し、それによりCloudflare以外からの通信を拒否していたサーバにアクセスできなくなったことで
No route to hostがエラーとして出るようになり、発覚に至ったと考えられる。
また、今回感染したファイルは
MCAntiMalware
と
Kasperskyのウイルス対策ソフトウェアで検出が可能だった
ようである。
Pluginを導入する前に
Virus Total
などで検査するだけでも十分防げた可能性は高い。
当該のマルウェアに関する他の記事
- https://ljskatt.no/analysis/updater_class/
- https://www.spigotmc.org/threads/1-19-1-fatal-error-converting-plugin-updater-class.567801/
- https://goli-carft.com/minecraft-malware-announcement/