はじめに
標的型攻撃が高度化の一途をたどる中、近年においてはサイバー攻撃に対する企業内ネットワークにおける基本的対策としてEDRが定着しています。
セキュリティエンジニアやコーポレートセキュリティ担当者にとっては仮想環境等を使った技術検証やスキル開発が欠かせませんが、手軽に使えて学習に向くEDRがあれば良いなと思い立ち、GWの自由研究としてバイブコーディングで開発してみました。
また、折角なので今回開発したものをGithubにて公開しております。
Linux仮想マシンがあれば5分もかからずに起動が完了しますので、ぜひお手に取っていただけると幸いです。
Githubリポジトリ
筆者はソフトウェア開発について深い知識を有しているわけではありません。あくまで成果物はバイブコーディング中心となる点、また記載内容に誤りがある可能性がゼロではない点については何卒ご容赦ください。
開発したもの
Github Pagesにドキュメントを公開していますので、こちらをご参照ください。
(8割方Claudeが作成しているのでAI感丸出しな部分が惜しいですが)
セキュリティ学習者が手軽に利用でき、触って学べる軽量EDRを目指しました。
ソフトウェアの動作環境は以下の通り。
- OS:
Linux(x86_64/arm64) - Python:
3.11以上 - 依存ツール:
curl、python3-venvなどの基本パッケージ - 実行権限:
root権限(sudo実行可能であること)
特徴として、動作環境にはLinuxを選択しています。TryHackMeやHackTheBox等の学習プラットフォームや、ハッキング学習の名著「ハッキングラボの作り方」では主にLinuxが取り上げられており、EDRの併用により学習の幅を拡張できると考えたためです。
基本構想と設計
当然ながら本番環境に耐えられるEDRなんて作れるはずもなく、また動作ロジックが明瞭かつ複雑ではない方が学習に向くと考え、シンプルに以下のコンポーネントに機能を分解しました。
-
イベントの記録(Sensor)
- デバイスやサーバー上で何が起きているかが分からなければ、攻撃者が実行する悪意のあるアクティビティをリアルタイムに評価・検出することは不可能です。よってEDRは評価者である前に観測者であると言えます。
-
検出と対応(Detector)
- 商用EDRでは機械学習やAIによる高度な振る舞い検知なんてものを備えていますが、今回は単純なパターン一致によって不審なアクティビティを検知し、重大度(Severity)に応じて隔離やプロセス停止等の対応を実行するようにします。
-
可視化(UI)
- ダッシュボードがあれば、人間の担当者がそのデバイス上で起きていることを瞬時に把握できるだけでなく、詳細な分析も可能となります。あとは何よりGUIがある方が学習者にとっては親切でしょう。
また、検知ルールとしてログ分析ツールであるSigma風のYAMLフォーマットを定義し、利用者が /rules 配下にファイルを置くだけで簡単にロジックを追加できるようにします。合わせて、ルールの作り方はDocsで解説を用意します。
Claudeによる設計
普段の業務ではソフトウェア開発に携わることはないので、最近契約したClaude ProおよびClaude Codeをメインに設計~開発を行っていきます。ついでに使ってみたかったGoogle Antigravityも併用。
早速、上記のコンポーネントからなるEDRの詳細設計をお願い!とClaudeに頼むと、非常に充実した設計書が出てきました。
詳細設計書を DESIGN.md としてプロジェクトルートに配置しておくことで、セッションをまたいでClaudeによる状況把握が可能です。途中から ISSUE.md に課題を書くようにしたのも良いアクションだった気がします。
実装から公開まで
5月4日に開発着手してその日中に実装スタート、開発完了が5月10日なので要した時間は7日間ほど。1週間で一通り動かすことができるモノができたのは僥倖です。
実装の進め方
コンポーネントごとにClaude Codeでコード生成し、Claude Code + Google Antigravity(Opus 4.6 or Gemini 2.5 Pro)で微調整というサイクルを繰り返してコーディングを進めました。コンポーネント間の結合度を極限まで下げることを意識していたので、開発も進めやすかったと思います。Claude Proだと上限的に厳しいですが、潤沢なトークン使用可能量があれば複数エージェントによる並行作業なんかも試してみたいと感じました。
バイブコーディングで実感したこと
開発を通じて改めて実感したのが、同一セッション内でやり取りを重ねるとトークン消費量が目に見えて増加するという点です。これはよく指摘されることではありますが、実際に体感するとなかなか辛い。会話の文脈が長くなるほどコストが嵩むため、やはりこまめにセッションをリフレッシュすることが重要なようです。
OSSとしてのリリース
どこまでの品質が確保できればOSSとして公開して問題ないラインなのか分かりませんが、調べたところ、
- コードに対する説明がなされ、最低限のインストール手順が明記され、かつ利用者がその記載通りに一通り動かせること
がひとつの基準であると理解しました。
私のコードは一通り動作することを確認しており、インストール手順や説明もしっかりと用意したので問題ないと言えるでしょう。自信を持ってリリースすることにします。
なお、ライセンスについてはMITライセンスを選択しています。Apacheライセンスと迷いましたが、後者は特許条項や明示的なコントリビューション規定が含まれており、企業・商用利用を意識した設計となっています。今回は学習ツールとして利用者に自由に使ってほしいという意図が強かったため、よりシンプルで制約の少ないMITを選ぶことにしました。
最後に
思いつきで始めた自由研究でしたが、AI駆動のソフトウェア開発の入口に触れつつ、EDRの動作原理やOSSとして公開するためのライセンス選択・作法等、様々な面で学びを得ることができました。
気が向けばメンテ・機能追加にも取り組んでみようと思いますので、ぜひ手元で使っていただき、issueを立てていただけますと幸いです。