機械学習によるマルウェアの機能推定について
これは何の話?
マルウェアを1つずつ人間が詳しく調べなくても、
「このマルウェアは何をするものなのか?」
を機械学習によって自動的に推定する研究についての発表。
特に今回の研究では、単純にマルウェアが使用したAPIの情報を機械学習へ渡すのではなく、LLMにAPIの意味を説明させ、その説明文を特徴量として利用するという方法が紹介された。
まず結論
この研究の面白いところは、
機械に「APIの名前」を覚えさせるより、「そのAPIが何をするものなのか」という意味を与えたほうが、マルウェアの機能をうまく推定できた
という点にある。
さらに、セキュリティでは単に
「AIがこう判定しました」
だけでは十分ではない。
「なぜそう判断したの?」
まで説明できることが重要になる。
そのため、研究は「精度を上げる」だけでなく、AIの判断根拠を人間が理解できるようにすることにも向かっている。
1. Knowledge ― 何を知ればいい?
マルウェアとは
マルウェアとは、コンピューターや利用者に被害を与えることを目的とした悪意あるソフトウェアの総称。
マルウェアには、たとえば
- 情報を盗む
- 外部から遠隔操作する
- 不正な処理を実行する
など、さまざまな目的・機能が存在する。
そこで重要になるのが**「機能推定」**である。
これは、
見つかったマルウェアが「何をするために作られたものなのか」を特定すること
を意味する。
なぜ自動化する必要があるのか
現在は非常に多くのマルウェアが検出されている。
さらに、ファイル、メール添付、不正URL、フィッシングサイトなど形態もさまざまで、生成AIの普及によってマルウェア作成のハードルも下がっている。
そのため、
発見 → 人間が解析 → 機能を特定
という方法だけですべてを詳しく調べることは難しい。
そこで、
発見 → 機械が機能を推定 → 危険性などから解析の優先順位を決める
という自動化が重要になる。
2. Practice ― 実際にどうやった?
従来の方法
マルウェアはWindowsなどが提供するさまざまなAPIを利用する。
従来手法では、
「どのAPIを、どれくらい使ったか」
といった情報を特徴量として機械学習モデルへ入力していた。
つまり、APIをある種の記号や数値として扱っていたと考えることができる。
今回の方法
今回の研究では、ここにLLMを利用する。
流れをかなり単純化すると、
マルウェア
↓
使用しているAPIを調べる
↓
LLMにAPIの説明文を生成させる
↓
説明文から特徴を取り出す
↓
機械学習モデルに入力
↓
マルウェアの機能を推定
という形になる。
つまり、
APIそのものではなく、「APIが何をするものなのか」という意味を特徴として利用する。
この方法を用いたところ、APIの使用頻度などをそのまま利用する場合と比較して、説明文由来の特徴を使ったほうが推定精度が向上した。
3. Inherent Talent ― どこが面白い?
「名前」より「意味」を学ばせる
この研究で特に興味深いのは、LLMそのものにマルウェアを判定させているわけではない点である。
LLMは、
APIが何をするものなのかを言語化する役割
として利用されている。
従来の機械学習では、
API Aを10回使った
という情報だったものが、
このAPIはファイル操作に関係する
このAPIはネットワーク通信に関係する
といった「意味を持った情報」へ変換される。
その結果、機械学習モデルがマルウェアの機能を捉えやすくなった可能性がある。
時代が変わっても意味は比較的変わりにくい
質疑応答では、時間的バイアスについても議論された。
マルウェアの流行や使われるAPIは時間とともに変化する。
しかし、
APIが何をするためのものなのか
という意味そのものは比較的変化しにくい。
そのため、単純なAPI名や出現頻度だけを見るよりも、意味を利用した特徴量のほうが、新しいAPIなどが登場した場合にも対応しやすい可能性がある、という考えが示された。
4. Value ― それができると何がうれしい?
「当たるAI」だけでは足りない
セキュリティ分野では、
「95%の確率で危険です!」
と言われても、
「なんで?」
が分からなければ困ることがある。
そこで重要になるのが解釈可能性である。
つまり、
なぜこのマルウェアをこの機能だと判断したのか
を人間が理解できるようにする必要がある。
SHAPによる判断根拠の可視化
その方法の一つとして紹介されたのがSHAPである。
SHAPを使うことで、
どの特徴が、その予測結果にどの程度影響したのか
を調べることができる。
ほかにも、ランダムフォレストの決定木を直接可視化したり、LIMEなどの手法を利用したりする方法がある。
発表時点では、単に特徴量重要度を表示するだけではなく、より踏み込んだ形で判断根拠を可視化する研究が進められているとのことだった。
質疑応答から見えてきたこと
LLMが嘘をついたらどうする?
LLMを利用する以上、ハルシネーションの問題がある。
今回の方法では、説明文を短くするようプロンプトで制約を設けるほか、説明文の妥当性については先行研究における専門家評価を根拠としている。
一方で、公式ドキュメントだけではすべてのAPIを網羅できないという問題もあり、LLMを使うこと自体にも利点がある。
つまり、
「LLMは間違えるから使わない」ではなく、間違える可能性を考慮しながら、LLMだから補える部分を利用する
という考え方になっている。
平均精度だけ見ればいいのか?
質疑では、
「平均精度が上がったとして、具体的にどの種類のマルウェアで良くなったのか?」
という問いも出た。
発表資料では全ラベルの平均が示されており、個別ラベルについてはその場では詳細な回答がなかった。
これは研究結果を見るうえでも重要な視点である。
平均値が改善したことと、あらゆる種類のマルウェアで改善したことは同じではない。
「精度が上がった」という結果を見るときには、どこで上がり、どこでは上がらなかったのかまで見る必要がある。
「説明できるAI」はどこまで説明すればいい?
SHAPなどを使えば特徴量の重要度は可視化できる。
しかし、
「この特徴が重要でした」
と表示することと、
「だから、このマルウェアにはこの機能があると考えられます」
と人間が納得できる形で説明することには差がある。
発表では、この「もう一歩先の可視化」が現在の研究課題として示されていた。
この発表から考えられること
この研究はマルウェア解析の話ではあるが、もう少し広く見ると、
AIにデータそのものを与えるのではなく、人間が理解している「意味」に近い形へ変換してから学習させる
という発想が見えてくる。
そして、性能が高くなった後には、
「なぜそう判断したのか」
という新しい問題が現れる。
つまりAI・機械学習の発展は、
① 当てられるようにする
から、
② 新しい状況でも当てられるようにする
そして、
③ なぜ当てられたのか人間にも理解できるようにする
という方向へ進んでいくと考えることができる。
今回の研究は、その流れをマルウェア解析という領域で見ることができる例だった。
まとめ
マルウェアは大量に存在するため、人間がすべてを詳しく解析することは難しい。
そこで機械学習による機能推定が利用される。
今回の研究では、APIの使用情報をそのまま学習させるのではなく、LLMによってAPIの意味を説明文に変換し、その意味を特徴として利用することで精度向上が確認された。
一方で、セキュリティでは精度だけではなく、
「なぜその判断になったのか?」
を説明できることも重要になる。
そのため、SHAPなどを利用した解釈可能性・可視化が次の研究課題となっている。
👶 ドパガキ向け:つまり何?
マルウェアくん:
「ぼくが何するウイルスか当ててみろ😈」
昔のAI:
「このAPIいっぱい使ってるから……たぶん情報盗むやつ!!」
今回:
「待て。そのAPIってそもそも何するやつなん?」
LLM:
「これはファイルを触るやつ! これは通信するやつ!」
AI:
「なるほど!!!!!意味が分かれば当てやすい!!!!」
→ 実際、精度が上がった。
でもセキュリティの人:
「で、なんでそう判断したの?」
AI:
「…………」
研究:
「次はそこを説明できるようにしよう。」
超結論
AIに「名前」だけ覚えさせるより「意味」を教えたら賢くなった。
でも賢くなったら、次は「なんでそう思ったの?」を説明させないといけなくなった。
当てるAI → 意味を理解して当てるAI → 理由まで説明できるAI
という話!!
