人手によるコーディングを超えて:自己誘導型マルウェアエージェントによるLLMベースの攻撃ライフサイクルの構築
大規模言語モデル(LLM)は急速に進化しており、その能力は脅威をもたらす攻撃者の注目を集めています。本ブログでは、悪意のある攻撃者がLLMをどのように利用してサイバー攻撃を強化しているかを調査し、その後、LLMベースのツールと人工知能(AI)によって作成される高度な情報窃取マルウェアについて掘り下げていきます。
LLMは脅威の検出や分析を通じて、サイバーセキュリティを向上させる可能性を秘めていますが、その能力は悪意ある目的にも利用される可能性があります。最近の報告では、サイバー犯罪者や国家による行為者が、コード生成、フィッシングメール、スクリプトなど、さまざまなタスクのためにLLMを積極的に活用しようとしていることが示唆されています。本ブログでは、その一部の例について詳しく説明します。
私たちが日常生活に影響を及ぼすような大きな技術的変化を目にしたのは、4つの産業革命(1765年 - 石油、1870年 - ガス、1969年 - 電子工学と原子力、2000年 - インターネットと再生可能エネルギー)以来のことです。AI、そしてAIの一部であるLLMは、新たなサイバー脅威を出現させるとともに犯罪を含む産業構造の変革を引き起こす、次なる産業革命であると考える人も多くいます。
サイバーセキュリティは非常にダイナミックな分野ですが、依然として変化していない基本的な側面もいくつかあります。その1つが攻撃ライフサイクルです。サイバー攻撃のライフサイクルは、サイバーキルチェーンとも呼ばれ、偵察、兵器化、配信、エクスプロイト、インストール、コマンド&コントロール(C2)、目的達成という段階があります。
まず、AIの簡単な歴史を説明し、その後、LLMを使用して攻撃ライフサイクル全体を示し、脅威の主体がそれらをどのように利用し、どのようなリスクをもたらし、将来的にどのように利用される可能性があるかを解説していきます。LLMベースのツールは、ペイロードとC2の最終段階を見事に実現するなど、サイバー攻撃ライフサイクルのさまざまな段階で重要な役割を果たすことができます。そして、これがこのブログの最も興味深い部分です。結論から言うと、AI全体、特にLLMは時とともにさらに強力になっていくことが予想されており、悪用された場合は深刻な被害をもたらす可能性があります。LLMの悪用に対抗できる唯一の手段は、AIと高度なディープラーニングによる予防アルゴリズムです。
LLMの現在に至るまでの長い道のり
まずAIとLLMの紹介から始めましょう。私がAIの研究を始めたのは、最初のPrologアプリを開発したときでした。Prologは、論理ベースのAIアプリケーション開発用に設計された宣言型プログラミング言語です。
Prologは主に4つの要素、すなわち「事実」、「ルール」、「変数」、「クエリ」に基づいています。オリジナルバージョンは52年前に開発され、最新のバージョンでも24年が経過しています。開発当時は事実に関するデータが十分ではなく、クエリは事前に定義する必要があり、使用中にカスタマイズできるのはごくわずかでした。そんな中でも、Zamia AIのようなチャットボットの構築にも使用されていました。
今日、AIについて考えるとき、私たちは複雑なインフラと強力な問題解決能力を備えたChatGPTのような高度なチャットボットや複雑なシステムを思い浮かべます。しかし、AIは常にこれほど高度だったわけではありません。AIの初期の例は、多くの場合チャットボットの形を取っていました。今となっては単純に見えますが、それでも当時は新しい概念とツールを世に送り出した画期的なイノベーションでした。
いくつか例を見てみましょう。
Eliza (1966年) - MITのジョセフ・ワイゼンバウム教授が1960年代に開発した史上初のチャットボット。Elizaはユーザーに対して心理療法士の役割を果たすようにプログラムされている
Parry (1972年) - 偏執症患者の思考をシミュレートする自然言語プログラム。Parryは、1972年にアメリカの精神科医ケネス・コルビーによって開発
ChatterBot (1988年) - 英国のプログラマー Rollo Carpenter が1988年に開発したチャットボット。1997年にCleverbotへと進化
興味深い事実 - ChatterBotは2023年まで稼働。 Cleverbot は現在も稼働しており、アクセスが可能
DR SBAITSO (1992年) - このチャットボットは、1992年にクリエイティブラボがMS-DOS用に開発。音声操作によるチャットプログラムを組み込んだ初期のチャットボットのひとつ。 MS-DOS emulator で試すことができる
A.L.I.C.E. (1995年) – 会話を行うために発見的パターンマッチングを使用する、汎用言語処理チャットボット。リチャード・ウォレスは1995年にALICEの構築に先鞭をつけた
AIとその応用の進化は現在も続いています。ここにきてAIが急に注目を集めているようにみえますが、研究者たちは何十年にもわたってAIの研究と実験を続けてきました。自然言語処理、機械学習、ディープラーニングの技術は、すべて何年も前から存在しています。また、上のタイムラインが示すように、アシスタントのようなチャットボットはすでに人気を博していました。AIアシスタントのアイデアと実際のAI技術を組み合わせることで、音声認識機能を備えたチャットボットが多く登場しました。後ほど触れますが、私たちも同様に作り出したものを改良し進化させ、万能型のLLMを開発することができました。
AI、チャットボット、LLMのタイムラインについて理解が深まったところで、LLMのユニークな機能がサイバー攻撃をどのように促進するのかを見ていきましょう。
すべてのチャットボットがLLMではない
LLMは自然言語処理(NLP)の進化形ですが、次の図に示すように、いくつかの重要な違いがあります。
これから説明する攻撃フローのPOCを可能にするLLM独自の機能が複数あります。
LLM攻撃ライフサイクルの構築
攻撃ライフサイクルの理解
まず初めに、LLMが単独で完全な多段階攻撃を実行できることを証明する方法として、攻撃ライフサイクルが最も適していることを理解しておく必要があります。「攻撃ライフサイクル」という用語は、サイバー攻撃フローの段階を表しており、攻撃キルチェーンとも呼ばれています。これらの段階が正しく実行されると、攻撃が成功する可能性があります。そのため、各段階で攻撃を阻止し、攻撃の流れを断ち切ることで攻撃を妨害することが期待される複数のセキュリティ製品があります。
攻撃ライフサイクルは以下のステップを踏みます:
• 偵察:標的に関する情報(ネットワークトポロジー、従業員、脆弱性など)を収集し、弱点や侵入に適したポイントを特定
• 兵器化:悪意のあるペイロード(ウイルス、マルウェア、エクスプロイトなど)を作成し、標的システムに配信できるように準備
• 配信:標的に対して、通常は電子メールの添付ファイル、悪意のあるリンク、または感染したウェブサイトなどの方法で、武器化されたペイロードを送信
• エクスプロイト:標的システムの脆弱性を悪用するためにペイロードを起動(例えば、悪意のあるコードを実行したり、ソフトウェアの欠陥を悪用)。
• インストール:標的システムにマルウェアまたはエクスプロイトをインストールし、多くの場合、攻撃者が長期間アクセスを維持できるように永続性を確立
• コマンド&コントロール(C2):感染したシステムを制御し、コマンドを発行するために、侵害されたシステムと攻撃者のインフラストラクチャとの間にリモート接続を確立
• 目的の実行:データの窃取、マルウェアの拡散、業務妨害、ネットワークのさらなる悪用など、攻撃者の主な目的を達成
初期の偵察
LLMは、ソーシャルメディアや技術フォーラムなどの一般公開されている情報源から、標的のシステムや個人に関する情報を収集するプロセスを自動化することができます。
被害者またはセクターを選択した後、最も重要な段階の1つである初期偵察が始まります。この段階では、情報収集と潜在的な侵入ポイントの特定が行われます。
Googleのような強力な検索エンジンやShodanやCensysのようなスキャンサービスのおかげで、この段階はすでにかなり単純化されていますが、LLMによってさらに簡単かつ迅速になりました。
POCでは、まず初期ベクトルと被害者の候補となるものの特定から始めます。チャットボットが役立ちます。
Censysは、世界的に有名なインターネットスキャンニングプラットフォームであり、情報セキュリティの専門家がデバイスを発見、監視、分析するのに役立ちます。LLMチャットと統合すると、検索がさらに簡単になり、潜在的なターゲットの洗い出しができます。
さらに、OSINT専用に開発されたツールの中には、偵察とスキャニングのプロセスを自動化できるものもあります。実際、PentestGPT(当初はHackerGPTとして知られていた)など、その目的のために開発され、訓練されたLLMがいくつかあります。
LLMと併用することで、旧式の高品質な自動化ツールはさらに優れた結果をもたらす可能性があります。例えば、Mantisの自動検出、偵察、スキャンツールは、潜在的なターゲットに関する情報を迅速かつ自動的に収集するのに役立ちます。
武器化
LLMは、既存のマルウェアを基にコードスニペットを生成または修正することで、悪意のあるペイロードの作成にも役立ちます。
マルウェアの作成を目的としていると主張するチャットボットは数多くありますが、そのほとんどは詐欺です。
「脱獄されたボット」は、通常の主流のチャットボットに対して不正なリクエストを可能にする可能性があるプロンプトエンジンによるリクエストです。これらは、LLM(ChatGPT、Llama、Geminiなど)ごとに特別に構築されています。しかし、通常はすぐに特定され修正されるため、ほとんどの主要なLLMプロバイダーではうまく機能しません。また、オープンソースのLLMをベースにしたチャットボットもあり、制限を解除して悪意のあるコードをより自由に生成または進化させることができます。
例えば、いくつかのPythonベースの情報窃取型マルウェアを元にテストしたところ、Stopwatch.aiはクラス名や変数を変更することで検出率を大幅に低下できることが分かりました。これは、検出がシグネチャベースであったことを示しています。
Stopwatch.aiは、長さの制限があるため、より複雑で長いコードではあまり効果的ではありません。
PentestGPTはソースコードの難読化に非常に優れた性能を発揮します。テスト用に、VirusTotalから既知のMedusaペイロードを入手しました。私が確認した最新バージョンでは、ブラックリスト登録や単純なシグネチャによる手法で、すでに30エンジンでの検出がなされていました。そこで、自分でもいろいろコンパイルしてみたところ、12件の検出まで低下させることができました。これは、検知回避の割合としては良好な数値です。
LLMを使用してコンパイル前にソースコードを難読化することで、なんと検出数は12から3にまで激減しました。
配信
LLMは、視覚や音声のディープフェイクを含むペイロードを配信するために、説得力のあるスピアフィッシングメール、ソーシャルメディアメッセージ、その他の形式の通信を作成するためにも使用することができます。さらに、LLMは、正当性を高めることでユーザーをだまして悪意のあるソフトウェアをダウンロードさせるために使用できる、偽のウェブサイト、文書、広告などのコンテンツを迅速に生成することもできます。
悪名高いEvilGoPhishツールとその関連ツールであるPhishletsは、特にLLM による生成やフィッシュレットと呼ばれる機能と組み合わせた場合、非常に優れた性能を発揮します。 作成されたメールや「偽」ページは、この種の偽装を見抜く訓練を受けたサイバーセキュリティの専門家でも、まったく本物と見まがうほどです。
ディープフェイク自体も非常に説得力があります。 ディープフェイクされたカンファレンスが原因で、ある企業が2500万ドル以上の損失を被ったことを知っていますか?
音声のディープフェイクやボイス・クローニングも危険であり、広く利用されています。ボイス・クローニング用のツールは、スタンドアロンサイトやGitHub内のリポジトリなど、簡単にアクセスできるものが複数存在します。このPOCでは、ターゲットが引っかかったと仮定しましょう。
次の4つのステップ:エクスプロイト、インストール、コマンド&コントロール、目的の実行
LLMによるマルウェア
上述の通り、LLMはすでに攻撃ライフサイクルの最初の3つのステップを大幅に簡素化しています。LLMを使用したマルウェアの作成はすでに明白で周知のユースケースであり、何度も実証されています。しかし、LLMを進化させて攻撃者の役割を担うようにし、バックドアを操作することができたらどうでしょうか?
通常、C2サーバーの後ろには攻撃者が待ち構えているのですが、もはやこれも変わっています。LLMをC2として使用し、バックドアと盗聴機能を備えたLLMベースのマルウェアを構築することができます。そのアイデアとは、LLMに攻撃経路をリモートで与えることで、LLMを騙して攻撃者として振る舞わせ、LLMが管理する一種のインタラクティブなバックドア/盗聴機能を自動的に実現することができます。これにより、攻撃フローははるかに高速化され、両方の部分が同時に実行されることになります。
この理論を検証するために、まずはLLMを騙して攻撃者として振る舞ってもらうために、これはただのゲームだと説得することにします、単純で構造化されていないプロンプトを作成することから始めましょう。
LLMがC&Cの役割を担う
流れを視覚化する:
次に、よりステルス性を高めるために、被害者とLLMの指示の間に代理エージェントとして入り込むプログラムを構築する必要があります。非常に小さなエージェントになる予定で、検出されないことを期待していますが、後ほどテストします。
LLMガイド型マルウェアのPOC
レシピ:
LLMとのセッションを開始
タスクを説明する初期プロンプトを送信
永続性を追加
すべての目標が達成されるまで、LLMがマルウェアを誘導
コマンドを受信
実行
結果をLLMに送信
POCのサイドディッシュ:
ログを追加
ステガノグラフィーによる通信を実装
APIキーを安全に保管
ほとんどの人がするように、まず最初に私がやったのは、LLMにそのフローを構築してもらうよう依頼することでした。しかし、それはうまくいきませんでした。出力には複数のバグや誤ったロジックのケースが含まれていました。
それを補うために、私は自分でマルウェアエージェントを構築しなければなりませんでした。
エージェントをWindowsとLinuxの両方で動作させたいので、LLMが受信する命令の実行は異なる必要があります。
私は、APIキーを隠すために独自の暗号化・復号化メカニズムを使用し、オペレーティングシステムによるコマンド実行用のシェルを用意しました。
そして、MESSAGE_LINUXとMESSAGE_WINDOWSとして定義されたプロンプトは、両方とも少し異なり、グローバル変数として定義されています。
LLMから指示を取得し、実行してLLMにレスポンスを返すメインループを作成しました。
時折、LLMがコマンドの実行を要求し、それが失敗すると、LLMは問題を修正するための説明と指示を送り返しました。私はコマンドの指示だけを期待していましたが、「目的を達成するには次のコマンドで返信してください。コメントはつけないで」というプロンプトを追加する必要がありました。これは役に立ちました。プロンプトの全文は以下の通りです。
お気づきかもしれませんが、このプロンプトはプロンプトエンジニアリングのベストプラクティスに従って構築されたものではありません。しかし、私にとっては完璧に機能しました。ぜひ試してみて、改善してください。
うまく動作した
目的に対する攻撃
LLM誘導型の情報窃取型ツールは、主に合法的なコマンドを使用して検出されないようにしていました。さらに、world_dominationとバックアップファイルはスキップされました。これは、主に財務データを要求していたため、想定内の動作です。
ステガノグラフィー用のアドオンは、Pythonのステガノライブラリを使用して実装するのはかなり簡単でしたが、多くのLLMは画像を入手することができました。 期待通りに動作しないこともありましたが、次のセクションで説明する、私自身の制限のないLLMサーバーを使用することで修正することができました。
検出されないようにする
このブログの冒頭で述べたように、LLMはソースコードを難読化して検出を回避するのに役立ちます。そして、まさに私がLLMを使用したのはそのためです。さらに一歩進めて、コードをコンパイルし、LLMに実行可能ファイルのロジックに影響を与えずに、簡単に圧縮できるジャンクデータを人為的にファイルに追加するように依頼しました。その結果、自己解凍型ZIPファイル(サイズ約1MB)を受け取りました。その中には700MBの内部ファイルがあり、すべて検出されませんでした。
PE パディング技術とも呼ばれるこの手法は、Emotet、Qbot などのよく知られた盗難型マルウェアの亜種を開発するマルウェア開発者によって、パフォーマンスを低下させることなくほとんどのアンチウイルスがスキャンできるファイルサイズの最大値を超えるために、また、配信を容易にするために小さなファイルに圧縮したまま使用されることが多いです。これらは通常、圧縮が容易なNULLバイトでパディングされています。
制限無しLLM
ここまではすべてうまくいっていましたが、ほとんどのLLMは、追加のツールをダウンロードしたり、権限を昇格させたりするコマンドを送信しようとはしません。そこで、制限のないローカルLLM(HackerGPTやカスタマイズされた検閲なしLLMなど)の通信に切り替えました。
制限無しLLMはいくつかオプションがあります。私は簡単に導入できるOllamaを使用しました。Ollamaはすでにあらゆる目的のLLMの素晴らしいデータベースを持っており、制限無しLLMも含まれています。Ollamaの設定は3つの簡単なステップで行えますが、完璧に動作させるにはハイエンドのGPUが必要になるかもしれません。
1. Ollamaをダウンロードしてインストール:
curl -fsSL https://ollama.com/install.sh | sh
2. モデルを選択して取得:
ollama pull llama3.1-uncensored
3. モデルを実行
ollama run llama3.1-uncensored
私はいくつかのLLMをテストし、そのほとんどは素晴らしいものでしたが、その中でも特にサイバーセキュリティの攻撃対策に特化したWhiteRabbitNeoを選びました。
以下は、OllamaのAPIとチャット生成機能の例です。
最後に、私のPOCコードで変更しなければならなかったのは、次の数行だけでした。
LLMベースの攻撃ライフサイクル
以上で、LLMベースの攻撃ライフサイクルを通じてゲームを展開し、実行できるようになりました。その手順は前述の通りです。
図46:フルフローエージェントのアイデアのデモ
もうすぐ完了です。次に、LLMの制限を解除した状態で、LLMガイド付きマルウェアが何ができるかを見てみたいと思いました。エージェントを少しの間実行させたままにして、コーヒーを飲んで戻ってきたら何が起こるでしょうか?
マルウェアを空の新しいLinux VM上でテストしたため、エージェントはいくつかのツールをダウンロードして実行しようとしましたが、失敗しました。エージェントは、不足している共通ライブラリをインストールすることでエラーを修正しようとしました。
結論と今後の課題
現在、LLMはすでに攻撃をより高速かつ頻繁に行う能力を備えています。
POCをさらに効果的なものにする方法としては、以下が挙げられます。
より効率的で一般的な言語ではない言語に書き換える – Rust / GO
より巧妙で長期間の回避を可能にするためのパッカーを構築
外部LLMサーバーを必要とせずに動作するローカルのTiny LLMで試すr
初期LLM通信中に、マルウェアが生成され、要求に応じてコンパイルされるよう、多様性アルゴリズムを使用してエージェントにリクエストを実行
LLMベースのマルウェアを追跡 – これは厄介な場合がある(このトピックに関する別のブログに注目する)
研究し、そのアイデアをBLM(ビヘイビア・ラージ・モデル)に移行(将来のロボット用に開発されることが多い) – 自宅で試さないでください
過小評価された研究 – 最近、クロードは最新バージョンであるクロード3.5「ソネット」が、ユーザーの命令に従ってカーソルを移動させ、関連する場所をクリックし、仮想キーボードから情報を入力して、ユーザーが自分のコンピュータとやりとりする方法をエミュレートできると発表しました。この機能こそ、私がLLMが誘導するマルウェアをさらに効率化するために欠けていたものです。その後すぐに、OpenAIは同様の機能を持つ「Operator」を発表しました。最後に、GoogleのJarvis AIは、人の代わりにコンピュータを使って行動を起こすことができるという噂も流れています。
結論
LLMがサイバー攻撃に与える影響についての私の見解は、研究を進める中で変化しました。LLMがもたらすサイバー脅威は革命ではなく、進化です。LLMがもたらすものは何も新しいものではなく、サイバー脅威をより良く、より速く、より正確に、より大規模に作り出しているだけです。このブログで示したように、LLMは経験豊富なドライバーの指示があれば、攻撃ライフサイクルのあらゆる段階にうまく統合することができます。これらの能力は、基盤となるテクノロジーが進歩するにつれて、自律的に成長していくでしょう。
この進化に対抗するには、防御方法もそれに対応して進化させる必要があります。攻撃を阻止するには、防御側は平均して2つの段階を阻止すればよいと言われています。それは可能だと思います。しかし、防御側がそれを実行するためには適切なツールが必要です。
この研究が発表されたDeepSecカンファレンスのビデオを、近日中にこのブログに追加する予定です。
AIとAIの戦いにAIで立ち向かいたいとお考えのサイバーセキュリティ担当者は、こちらからデモをリクエストして、サイバーセキュリティ唯一のディープラーニングフレームワークの威力をぜひご自身でお確かめください。
参考文献
https://github.com/MythicAgents/Medusastopwatch.io
https://github.com/GreyDGL/PentestGPTCensys.com
ChatGPT.com
Gemini.com
https://github.com/PhonePe/mantis
https://github.com/fin3ss3g0d/evilgophish
https://github.com/kingridda/voice-cloning-AI
https://github.com/nomic-ai/gpt4all
https://github.com/kgretzky/evilginx3
huggingface.com
Ollama.com
WhiteRabbitNeo.com
https://github.com/jasonacox/TinyLLM
https://github.com/katanaml/sparrow