Skip to content

common-creation/cvebot

Repository files navigation

CVEBot - Slack向けセキュリティ脆弱性通知Bot

JVNDBのRSSフィードを監視し、指定されたキーワードに一致する脆弱性情報をSlackチャンネルに自動通知するBotです。

機能

  • 🔍 JVNDBのRSSフィードを定期的に監視(デフォルト:15分間隔)
  • 📌 チャンネルごとにキーワードを設定して脆弱性情報をフィルタリング
  • 🚨 新しい脆弱性が見つかったら即座にSlackに通知
  • 💬 スラッシュコマンドで簡単にキーワード管理
  • 🗑️ 古い既読エントリーの自動クリーンアップ

セットアップ

1. 前提条件

  • Node.js 22.x以上
  • npm または yarn
  • Slack ワークスペースの管理者権限

2. Slack App の作成

  1. Slack API にアクセスして新しいアプリを作成
  2. 以下の設定を行う:
    • OAuth & Permissions:
      • Bot Token Scopes:
        • chat:write
        • commands
        • users:read
    • Slash Commands:
      • Command: /cvebot
      • Request URL: https://your-domain.com/slack/commands
    • Socket Mode:
      • Socket Mode を有効化
      • App Token を生成(connections:write スコープ)

3. インストール

# リポジトリのクローン
git clone https://github.com/your-org/cvebot.git
cd cvebot

# 依存関係のインストール
npm install

# 環境変数の設定
cp .env.example .env
# .env ファイルを編集して Slack の認証情報を設定

4. 環境変数の設定

.env ファイルに以下の環境変数を設定:

# Slack設定
SLACK_BOT_TOKEN=xoxb-your-bot-token
SLACK_SIGNING_SECRET=your-signing-secret
SLACK_APP_TOKEN=xapp-your-app-token

# データベース設定
DATABASE_PATH=./data/cvebot.db

# RSS設定
RSS_FEED_URL=https://jvndb.jvn.jp/ja/rss/jvndb.rdf
RSS_CHECK_INTERVAL=15

# ログ設定
LOG_LEVEL=info
LOG_FILE_PATH=./logs/cvebot.log

5. ビルドと起動

# TypeScriptのビルド
npm run build

# 開発環境での起動
npm run dev

# 本番環境での起動
npm start

使い方

スラッシュコマンド

コマンド 説明
/cvebot add "キーワード" 監視キーワードを追加 /cvebot add "Apache"
/cvebot remove "キーワード" 監視キーワードを削除 /cvebot remove "Apache"
/cvebot list 登録済みキーワード一覧を表示 /cvebot list
/cvebot test "キーワード" キーワードのテスト実行 /cvebot test "nginx"
/cvebot help ヘルプメッセージを表示 /cvebot help

通知フォーマット

脆弱性が検出されると、以下のような形式で通知されます:

🚨 新しい脆弱性情報

【CVE番号】CVE-2024-XXXXX
【深刻度】🟠 High (7.5)
【タイトル】Apache HTTPサーバにおける任意のコード実行の脆弱性
【概要】Apache HTTPサーバのmod_proxyモジュールに...
【詳細】https://jvndb.jvn.jp/ja/contents/2024/JVNDB-2024-XXXXX.html

🔍 マッチしたキーワード: "Apache"

開発

ディレクトリ構造

cvebot/
├── src/
│   ├── commands/      # Slackコマンドハンドラー
│   ├── config/        # 設定管理
│   ├── database/      # データベース関連
│   ├── services/      # ビジネスロジック
│   ├── types/         # TypeScript型定義
│   ├── utils/         # ユーティリティ
│   └── index.ts       # エントリーポイント
├── data/              # データベースファイル
├── logs/              # ログファイル
└── dist/              # ビルド出力

npm スクリプト

  • npm run build - TypeScriptをビルド
  • npm run dev - 開発モードで起動(ts-node使用)
  • npm start - 本番モードで起動
  • npm run lint - ESLintでコードをチェック
  • npm run lint:fix - ESLintでコードを自動修正
  • npm run format - Prettierでコードをフォーマット

デプロイメント

PM2を使用した起動

# PM2のインストール
npm install -g pm2

# アプリケーションの起動
pm2 start dist/index.js --name cvebot

# 自動起動設定
pm2 startup
pm2 save

Dockerを使用した起動

Docker Composeを使用(推奨)

# 環境変数の設定
cp .env.docker .env
# .env ファイルを編集して Slack の認証情報を設定

# コンテナの起動
docker compose up -d

# ログの確認
docker compose logs -f cvebot

# コンテナの停止
docker compose down

Dockerコマンドを直接使用

# Dockerイメージのビルド
docker build -t cvebot .

# コンテナの起動
docker run -d \
  --name cvebot \
  -v $(pwd)/data:/app/data \
  -v $(pwd)/logs:/app/logs \
  --env-file .env \
  cvebot

メンテナンス

ログローテーション

ログファイルは自動的にローテーションされます(最大5ファイル、各10MB)。

データベースのクリーンアップ

古い既読エントリーは毎日午前3時に自動的に削除されます(30日以上前のエントリー)。

バックアップ

データベースファイル(data/cvebot.db)を定期的にバックアップすることを推奨します。

トラブルシューティング

Bot が応答しない

  1. Slack App の設定を確認
    • Socket Mode が有効になっているか
    • 必要な権限(スコープ)が設定されているか
  2. 環境変数が正しく設定されているか確認
  3. ログファイルでエラーを確認

通知が届かない

  1. キーワードが正しく登録されているか確認(/cvebot list
  2. Bot がチャンネルに参加しているか確認
  3. RSS フィードが正常に取得できているかログを確認

ライセンス

MIT License - Copyright (c) 2025 Common Creation, Co., Ltd.

貢献

プルリクエストを歓迎します。大きな変更の場合は、まず Issue を作成して変更内容を議論してください。

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors