巧妙化するマルウェアをAI支援で解読・分析

文●フォーティネットジャパン 編集●ASCII

提供: フォーティネットジャパン

  • この記事をはてなブックマークに追加
  • 本文印刷

本記事はフォーティネットジャパンが提供する「FORTINETブログ」に掲載された「巧妙化した攻撃をさらに高度な技術で検知」を再編集したものです。

 ウイルス対策の世界では当初から「いたちごっこ」が続いており、マルウェア作成者とアンチウイルスエンジニアは絶えずコードを調整し、互いを出し抜いたり捕捉したりしようとしています。この駆け引きは人工知能(AI)によってさらに進化しており、マルウェア作成者はAIを使ってマルウェアを改良し[1]、アンチウイルスエンジニアはリバースエンジニアリングにAIを活用しています[2]

AI支援によるパッキング/アンパックと難読化/難読化解除

 昨今では、ほぼすべてのマルウェアにパッキングや難読化が施されています。今のところ、AIはパッカーの役には立っていません。この点について、フォーティネットが2025年2月からLinux/Prometeiボットネットのサンプルで検証を行った結果、AIは人間が介入しなければ、パッカーの内部ロジックを分解するために時間を無駄にするところでした。

図1:Radare2のr2aiプラグインを使用して、AIにマルウェアのメイン関数を特定するよう指示しましたが、特定されたのはパッカーのメイン関数でした。パッカーのコンポーネントとして予想されていた解凍ルーチンは正しく識別されたものの、バイナリを自動的にアンパックしたり、実際の悪意あるペイロードを特定したりすることはできませんでした。

 とは言え、アンパックはIDA ProやGhidraなど現在の逆アセンブラでも不可能な高難度のタスクです。アンパックはアンチウイルスアナリストが事前に実行しなければならず、そのアンパックしたバイナリをさらに次の分析にまわす必要があるのです。

 難読化については、はるかに良い報告があります。AIは、複雑な難読化には大抵失敗して人間の手を必要としますが、標準的な難読化やジャンクコードはそれなりに上手く処理します。アンチウイルス業界にとって、これは大きな進歩です。以下の例では、AIはLinux/Ladvix.Eの難読化アルゴリズムを解析し、有効な難読化解除ツールを実装することができました[3]

図2:逆アセンブラRadare2がClaude 3.7 Sonnetと通信し、難読化解除ツールを作成、マルウェアの文字列から「/etc/cron.hourly/0」を取得

新しいフレームワークと言語にAIで対処する

 数年前からマルウェアの現場でよく見られるもうひとつの手法は、特定のフレームワーク(Flutter[4] など)と高水準言語(Go、Rust)の使用です。現在のところ、AIはFlutterおよびRustマルウェアに苦戦していますが、これはまだ新しい分野であるため当然といえるでしょう。人間のリサーチャーもまた、解決策を模索しているところです。我々は、Android/SpyLoanの「Flutterアセンブリ」をAIで分析してみました。その結果、AIはまったく無力で、関数名や文字列などのマッピングができませんでした。しかし、より高度な方法で処理を進め、マルウェアのBlutter[5] 出力を生成したところ、AIは非常に読みやすいDartコードを再構成できました

図3:Blutterで生成されたコメント付きアセンブリに基づいて再構成された、SpyLoanマルウェアのメイン関数。アンチウイルスエンジニアが理解しやすいDartコードになっている。

 AIは、古いDelphi言語に対しては大きな成果を上げています。我々はその理由を、LLMがDelphiとPascalの教材でトレーニングされたからだと考えています。Delphiは古いとはいえ、奇妙なことに今でもLinux/Filecoder.BR!tr(別名Trigona)ランサムウェア(2025年4月のサンプル)の実装に使用されています。

 例えば、このランサムウェアのメイン関数をGhidraで綿密にデコンパイルすると、Delphiの関数名(SYSTEM_RANDOM)とそれに続く型(LONGINT、LONGINT)、および内部メモリ管理関数(FPC_ANSISTR_DECR_REF)を直ちに識別できます。

図4:GhidraでデコンパイルされたLinux/Filecoderのメイン関数の一部

 前半部分は、マルウェア作成者が明示的に呼び出したコードに対応している点が注目を引きます。後半部分はマルウェアアナリストにとって重要ではありません。これらはAnsi文字列を処理するために、コンパイラ(この場合はFree Pascal Compiler)によって挿入されているからです。

 同じ関数をデコンパイルするよう指示すると、AIはそれらの内部呼び出しを的確に削除し、Ghidraよりもはるかに読みやすいソースコードを生成します。

図5:r2およびr2aiプラグインでデコンパイルされたLinux/Filecoderの同じ部分

結論

 ウイルス対策の世界では、常に「いたちごっこ」が続いています。AIは、標準的な文字列やコードの難読化を解除できる段階まできていますが、マルウェア作成者はより複雑な難読化を用いてそれに対抗するでしょう。また、最新のフレームワークや言語を使うことで、リバースエンジニアリングを一層難しくすることも可能です。そう考えると、「いったいどのような進歩があるのか?」と問いたくもなります。

 大きく違う点は、アンチウイルス業界が今回ばかりは、敵よりも有力で新しいツールを手にしているということです。マルウェア作成者は、より複雑な難読化や、より新しいフレームワークと言語を使用せざるを得なくなっているのです。RustはCよりも安全かどうか? もちろん安全です。しかし、マルウェア作成者はRustの使用方法を習得し、新しいライブラリを使用したりバグに対処したりする必要があります。その間に当社はLLMをアップデートし、新しい言語とフレームワークで早急にLLMを訓練することができます。時間とツールが私たちに有利に働くのは、この20年間で初めてのことです。

フォーティネットのソリューション

 フォーティネットのお客様は、フォーティネットのアンチウイルスによって、前述したすべてのマルウェアから以下のように保護されています。FortiGuard Labsは、以下のアンチウイルスシグネチャを使用してサンプルを検知します。

Linux/Ladvix.E、Linux/Prometei.B、Adware/SpyLoan!Android、Linux/Filecoder.BR!tr

 FortiGuardアンチウイルスサービスは、FortiGate、FortiMail、FortiClient、FortiEDRによってサポートされます。最新のアンチウイルスアップデートを使用しているフォーティネットEPPのお客様は、脅威から保護されています。

IOC(Indicators of Compromise:侵害指標)

943e1539d07eaffa4799661812c54bb67ea3f97c5609067688d70c87ab2f0ba4 – Linux/Ladvix.E
cc7ab872ed9c25d4346b4c58c5ef8ea48c2d7b256f20fe2f0912572208df5c1a – Linux/Prometei.B
c65298b6cd5a1769c747a0c7fb589ffa12fdf832b64787283953eaa57b65bc1c – Adware/SpyLoan!Android
c08a752138a6f0b332dfec981f20ec414ad367b7384389e0c59466b8e10655ec – Linux/Filecoder.BR!tr

参考文献

[1] https://www.hp.com/us-en/newsroom/press-releases/2024/ai-generate-malware.html 

[2] https://arxiv.org/html/2504.07574

[3] https://asciinema.org/a/724126 Asciinemaビデオ、Linux/Ladvixの難読化解除

[4] https://www.fortiguard.com/events/5552/virus-bulletin-2024-android-flutter-malware

[5] https://github.com/worawit/blutter

■関連サイト