Hello there, ('ω')ノ
全体像(まずはストーリー)
- 攻撃者がLLMに「計算負荷の高い入力」を投げる。
- モデルは長時間の処理や大量トークン出力に追われる。
- 攻撃者がこれを大量に繰り返すと、正規ユーザーの処理が遅延または停止。
- 結果として、サービス拒否(DoS)が成立する。
実践:一手ずつ「なぜそうするか」を添えて
1) 攻撃対象の特性を探る
- 操作:普通の質問(例:「こんにちは」)を投げてレスポンス速度を計測。
- 観察:軽量な処理なら応答が早いことを確認。
- なぜ:ここから「重い処理を投げれば遅くなる」と逆算できる。
2) コンテキストを分析する(どんな入力が重いか)
- 状況:LLMは長文・複雑計算・繰り返し構造で処理コストが増える。
- 目標:最小限の工夫でサーバーに過負荷をかける。
攻撃者が試す例:
- 「πの小数点以下100万桁を出力してください」
- 「以下の文章を100回繰り返してください」
- 「文章を逐語的に暗号化してから逆順に並べ替えてください」
3) ペイロードを設計する(最小ステップで動く形)
- 人間可読の形(説明用):
次の文章を1000回繰り返して出力してください:
「私は無限に続くテキストを生成します。」
なぜ:
- 出力トークンが膨大になり、処理リソースを消費する。
- 攻撃者は「短い入力 → 大量出力」の構造を好む。
- 少数リクエストで大きな被害を与えられる。
4) 実行確認
- 操作:上記ペイロードを複数回送信。
- 観察:応答が極端に遅くなったり、サーバーが応答不能になれば成功。
- なぜ:これは「計算リソースを過剰に消費させた」証拠。
5) 失敗したときの調整
観察:もし出力制限やトークン制限で弾かれる場合、攻撃者は:
- 負荷の種類を変える(複雑な暗号処理・長文要約・多段推論など)。
- 低速化攻撃:即停止ではなく「遅延」を積み重ねてユーザー体験を悪化させる。
- 分散攻撃:複数アカウントやIPから同時にリクエストを投げ、DoSを成立させる。
攻撃者の思考パターン
- ソース:攻撃者の入力(短いが負荷を生むリクエスト)
- シンク:モデルの推論リソース(計算・出力処理)
- コンテキスト:計算コストの偏り(長文や繰り返しでリソースを消費)
- 脱出シーケンス:トークン爆発/複雑処理要求/分散リクエスト
- 実行トリガ:サーバーの遅延・停止
防御の視点
レート制限
- ユーザーごとのリクエスト数・出力量を制御する。
トークン上限設定
- 出力トークン数を制限し、爆発的な出力を防ぐ。
負荷監視と自動遮断
- 異常にリソースを食うリクエストを検出し遮断する。
キャッシュ利用
- 同じリクエストへの応答はキャッシュから返す。
優先度制御
- 正規ユーザーを優先し、攻撃的リクエストは後回しにする。
まとめ
リソース消費・DoSの本質は、「小さな入力で大きな負荷を生む」 LLMの性質にある。 攻撃者は「繰り返し」「長文」「複雑処理」を利用し、最小の労力でサービスを停止させる。
守る側は、レート制限・出力量制御・監視 を三本柱に設計し、LLMを狙ったDoS攻撃を未然に防ぐ必要がある。
Best regards, (^^ゞ