アラート通知の設定
メールと Webhook(Slack・Teams・Feishu を含む)による通知の設定方法と、Webhook の実際のペイロード・署名の検証方法。
OpenBait は、脅威の検出・確認、テイクダウンの経過、カナリートークンの発火を、メールと Webhook でお知らせします。設定はコンソールの 設定 > 通知 にまとまっています。
メール通知
- 設定 > 通知 に移動
- 「受信者」に通知を受け取るメールアドレスを追加
- 受け取りたい通知の種類を選択
受信者を 1 件も登録していない場合、通知は組織のオーナー全員のメールアドレスに届きます。
Webhook 連携
- 設定 > 通知 の Webhook セクションで Webhook を追加 をクリック
- 名前と送信先 URL を入力
- フォーマットを選択:標準 JSON/Slack/Microsoft Teams/Feishu(飛書)
Slack・Teams・Feishu を選んだ場合は、各サービスの Incoming Webhook がそのまま表示できる形式で送信します。自社システムで受け取る場合は「標準 JSON」を選んでください。
登録できる Webhook の数はプランで決まります。Free は利用不可、Pro は 1 件、Business は 5 件、Enterprise は無制限です。
イベントの種類
| イベント | 発生するタイミング |
|---|---|
threat.detected | 新しい脅威を検出したとき |
threat.confirmed | 脅威が確認されたとき(ブランドによる確認を含む) |
takedown.status_changed | テイクダウンの案件の状態が変わったとき |
honeytoken.triggered | カナリートークンが発火したとき |
標準 JSON のペイロード
すべてのイベントは event・timestamp(UTC、RFC 3339)・data の 3 つのキーを持ちます。data の中身はイベントによって異なります。
threat.detected / threat.confirmed:
{
"event": "threat.detected",
"timestamp": "2026-09-20T03:15:00Z",
"data": {
"threatId": "d3a9k2f05n8u7r1m4qv0",
"domain": "example-brand-login[.]com",
"brand": "Example Brand",
"threatType": "phishing",
"severity": "high",
"score": 82,
"confirmed": false,
"scanType": "public-report",
"url": "https://openbait.com/console/threats/d3a9k2f05n8u7r1m4qv0"
}
}severity は low・medium・high・critical のいずれかです。
takedown.status_changed:
{
"event": "takedown.status_changed",
"timestamp": "2026-09-20T06:12:00Z",
"data": {
"caseId": "d3a9m7f05n8u7r1m4r20",
"domain": "example-brand-login[.]com",
"brand": "Example Brand",
"status": "down",
"url": "https://openbait.com/console/takedown/d3a9m7f05n8u7r1m4r20"
}
}status は opened・down・resolved・re-emerged・blocked・watching・domain-removed・awaiting_confirmation のいずれかです。watching はサイトがオフラインで、ドメインが削除されるまで確認を続けている状態、domain-removed はレジストリがドメインを削除した状態、awaiting_confirmation は訪問者からの通報が、ブランド側の回答を待っている状態です。blocked は、サーバー自体は応答しているのに、そのドメイン名宛ての接続にだけ応答しない状態です。停止とも復活とも判定できないため、別の状態として通知します。
honeytoken.triggered:
{
"event": "honeytoken.triggered",
"timestamp": "2026-09-20T09:41:00Z",
"data": {
"honeytokenId": "d3a9p1f05n8u7r1m4s50",
"honeytokenName": "login-page",
"honeytokenType": "BEACON",
"sourceIp": "203.0.113.24",
"userAgent": "Mozilla/5.0 ...",
"threatLevel": "high",
"riskScore": 75,
"refererDomain": "example-brand-login[.]com",
"referer": "hxxps://example-brand-login[.]com/signin"
}
}refererDomain・referer・internalNote は、値がある場合だけ含まれます。
ペイロード内のドメインと URL は、誤ってクリックされたりチャットツールにプレビューが展開されたりしないよう、example[.]com・hxxps:// の形に無害化して送信します。自社システムで照合に使う場合は、元の形に戻してください。
署名の検証
シークレットを持つ Webhook では、各リクエストに次のヘッダーが付きます。
| ヘッダー | 内容 |
|---|---|
X-Webhook-Timestamp | 送信時刻(UNIX 秒) |
X-Webhook-Signature | sha256= に続けて、HMAC-SHA256 の 16 進文字列 |
署名の対象は タイムスタンプ + "." + リクエストボディ(受信したバイト列のまま) です。
import crypto from "node:crypto"
function verify(secret, timestamp, rawBody, signatureHeader) {
const expected =
"sha256=" +
crypto.createHmac("sha256", secret).update(`${timestamp}.`).update(rawBody).digest("hex")
return crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(signatureHeader))
}リプレイを防ぐため、X-Webhook-Timestamp が現在時刻から大きく離れているリクエストは破棄してください。送信元の User-Agent は OpenBait-Webhook/1.0 です。