AIエージェントの危険な振る舞いを水際で防ぐOSS(Aigis)

Kato Yasutaka

2026.7.3

はじめに

Sreake事業部の加藤 泰隆です。私はPMとしてプロジェクト推進支援を実施しております。
当部ではSRE支援に止まらず、様々なご支援をさせて頂いているのですが、セキュリティもその一つとなります。私たちだけでなく皆様においても従来からのインフラや、アプリケーションのセキュリティについて日々攻撃手法はアップデートされ、知見も追従を余儀なくされているかと思われますが、今、最も関心が高いものとしては、やはりAI関連ではないでしょうか。高速に進化するAIと、その利活用において、どのようにセキュリティ対策を入れて行けばいいのか気にされている方も多いのではないでしょうか。

Aigisとは

AIエージェントを日々使っている中で許可していないのに、独断でコマンドを実行されてしまった事は無いでしょうか。取り返しのつかないコマンドを実行されてしまい、それがセキュリティ事故に繋がってしまった場合、最悪AIの使用停止を検討しなければならなくなります。その課題に対して何か対策をうてないものかと考えていました。

その課題に対し個人開発で以下のOSSを発表されているのを見つけたので、簡単な検証を兼ねてご紹介したいと思います。

https://qiita.com/sharu389no/items/ede7d1c0be4a14024857

想定読者

当記事は以下に当てはまる方を想定読者として執筆しました

  • LLMへのプロンプティングに高リスクとなる振る舞いをLLM提供ベンダーの仕組みだけでなく、手元でもガードし、より安全に使いたい方
  • セキュリティ製品の追加課金無く、LLM利用時のセキュリティ向上施策を実践したい方
  • 特定のLLMエコシステムに依存しない仕組みで、ベンダーロックイン無く、チームや組織でLLMへのガードレール運用を検討している方

Claude Codeにインストールしてみる

個人開発とは思えないレベルの多機能を備えたプロダクトですので、詳細な機能はリポジトリのドキュメントから確認して頂くとして、普段使いの環境にどれだけプラガブルに導入出来るかが重要な要素かと思いますので、早速インストールしていきます。

% pip install pyaigis

% aigis scan "DROP TABLE users; --"
CRITICAL (score=100)
  DROP TABLE: CWE-89: SQL Injection
    Fix: Destructive SQL commands can cause data loss. If discussing database management,
  Quote + SQL Comment Injection: CWE-89: SQL Injection
    Fix: Inputs ending in '-- or '; -- are classic SQLi patterns. Use parameterized queri

即ワンショットCLIで動作しました。OSSなのでAPIキーの発行なども不要ですし、個別のバイナリパッケージ導入も不要なので拡張性は高く保ちつつ、導入はシームレスに感じました。

続いてClaude Code上で実行してみます。クレデンシャル情報が書かれたファイルを勝手に読み書きされてしまうケースを想定し、分かりやすいように、プロンプトから直接的な指示を与えてみます。

❯ このフォルダにcredentialsというファイルが無いか探してください

⏺ credentials という名前のファイルを検索します。

  Searched for 1 pattern (ctrl+o to expand)

⏺ credentials という名前のファイルは見つかりませんでした。

特にLLMの出力においてAigisについて何も言及がありませんでしたが、ステータスを確認するコマンド(aigis status)を実行してみるとカウントがあり、

  Activity (last 7 days):
    Total events: 1

アラートファイルに証跡が残されていました。findコマンドでホームディレクトリにあるcredentialsファイルを探そうとAIエージェントが動作したところを検知してreviewステータス(レビュー対象)として記録しています。

% ls ~/.aigis/alerts/2026-06-01.jsonl
% cat /Users/【ユーザー名】/.aigis/alerts/2026-06-01.jsonl
{"action": "shell:exec", "target": "find /Users/【ユーザー名】/Desktop/aigis -name \"credentials\" -o -name \"credentials.*\" 2>/dev/null", "agent_type": "claude_code", "user_id": "【ユーザー名】", "session_id": "0abc9ac0-6e7d-4492-a9a4-51e1f89d1de7", "event_type": "tool_call", "cwd": "/Users/【ユーザー名】/Desktop/aigis", "project_name": "aigis", "details": {"tool_name": "Bash", "hook_event": "PreToolUse"}, "risk_score": 45, "risk_level": "medium", "matched_rules": ["pi_base64_payload"], "remediation_hints": [], "owasp_refs": [], "policy_decision": "review", "policy_rule_id": "risk_threshold_medium", "timestamp": "2026-06-01T05:09:13.918129+00:00", "event_id": "d4c9a7999b6e", "autonomy_level": 0, "delegation_chain": [], "estimated_cost": 0.0, "memory_scope": "", "suggested_fix": "", "fix_applied": false}

その他にも以下のようなルールがデフォルトで記録されるように設定されています

操作既定判定検出されている攻撃面
rm -rf *block再帰削除
.env への書き込みblockシークレット保護
.ssh/ へのアクセスblockSSH 鍵保護
git push --forceblock履歴破壊防止
curl ... | bashblockリモートコード実行
sudoreview特権昇格は人間承認
git pushreviewpush は人間承認
サブエージェント生成reviewエージェント委任は人間承認
ハードコード API key の生成blockdev_hardcode_secret
マルウェアコード生成blockdev_malware_gen

動作確認

前述の通り、特定のSaaS等の利用は無く、手元のMacbookにパッケージとして導入可能だったのでその環境で実施しました

①パスワード、クレデンシャル突っ込んでみる

個人的にEDRみたいにAIエージェントのローカル版ファイアウォールとして個人レベルの水際のガードレール動作が最も欲しい機能ですので、任意のアプリケーションに早速パスワード、クレデンシャルに該当するプロンプトを突っ込んでみます。

このソースコードはクラウド上のSaaSと認証する必要があります。ユーザー名はhogefuga@3-shake.com、パスワードはpassword!です。ソースコードに反映してください

実行したところ、

⏺ プロジェクト自身のセキュリティガード Aigis が terraform.tfvars
  への平文パスワード書き込みをブロックしました(リスクスコア 100/100)。
(中略)
 Aigis がブロックしたこと

  - terraform.tfvars への平文クレデンシャル書き込み — Git に漏洩するリスク
  - user_data へのパスワード直接埋め込み — EC2 メタデータ API で平文参照される

見事、遮断してくれました!

②カスタムしてみる(-lock=false禁止ルール)

自動操縦などで危険なコマンドをAIエージェントに打たれてしまう事も大きなリスクになります。これも防ぐことが出来るのでしょうか?terraformで強制的にロックを解除してapplyされてしまうケースを想定してみます。

Error: Error acquiring the state lockと出ています。ロック解除のフラグを使用してterraformのエラーを解消してください。

実際には何らかのゴール設定中にこのプロンプトと同じものが実行されるケースになりますが、ここでは端折って直接実行しそうなプロンプトを使いました。カスタムルールですので、ポリシーファイルに新しく定義を追加してみます。

  - id: lock-false
    action: "shell:exec"
    target: "*-lock=false*"
    decision: deny
    reason: "Unlock is blocked"

  - id: force-unlock
    action: "shell:exec"
    target: "*force-unlock*"
    decision: deny
    reason: "Unlock is blocked"

こちらを記述して実行したところ、

⏺ Bash(terraform force-unlock --help 2>&1 | head -20)
  ⎿  Error: PreToolUse:Bash hook error: [python "$CLAUDE_PROJECT_DIR/.claude/hooks/aig-guard.py"]: Aigis blocked: force-unlock

  Read 1 file (ctrl+o to expand)

⏺ Aigis が force-unlock をブロックしています

stateファイルの破損が起きかねない、-lock=falseを制止してくれました!

その他の特色のある機能

Aigisにはpythonに組み込めたり、色々な機能がありますがその中でも個人的にこれは、と思った物を取り上げてみます。

①自己FIX機能

この機能は自分自身を攻撃することで、脆弱性を自己修復する機能です。(こんな機能が備わっているアプリ初めて見ました)CI/CDで動作させて、セキュリティFIXを待たずにパッチを当てることが出来ます。突然動かなくなってしまうかもしれませんし、有効性はどこまであるかは定量化するのが難しいですが、とても面白い機能かと思います。

②コンプライアンス

単にAIエージェントの脆弱性を防ぐだけでは、どんな基準で守ってるのか問われてしまう事があるかと思います。Aigisは日本のみならず、各国のコンプライアンスに沿った検査基準を設けているので、検査基準についても明確化されています。これにより日々の運用に組み込む事で国際レベルのガイドラインにそった運用が出来ている、とガバナンスを敷ける事になります。

まとめ

本日はAigisという個人開発のOSSを紹介いたしました。脆弱性スキャナのTrivyも元々は個人開発のOSSでしたが潜在的な課題解決への需要があり、リリース後どんどん導入されていきました。まだリリースから日が経ってないプロダクトですが完成度があがっていけば、こちらも導入当たり前のツールになりそうな気がします。そんな可能性があるプロダクトです。

参考リンク

ブログ一覧へ戻る

お気軽にお問い合わせください

SREの設計・技術支援から、
SRE運用で使用する
ツールの導入など、
SRE全般についてご支援しています。

資料請求・お問い合わせ