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

No packages published