
みんなのための分散アラート通知!
Securitybot は、Ryan Huber のブログ記事で説明されている分散アラートチャットボットのオープンソース実装です。 分散アラートは、セキュリティチームの監視効率を向上させ、セキュリティインシデントをより迅速かつ効率的に発見するのに役立ちます。 Dropbox 特有の部分はこのコードから取り除くようにしているため、独自のインスタンスをセットアップするのはかなり簡単なはずです。 virtualenv/Docker コンテナに記載された要件をインストールし、ボットを動かすだけで比較的簡単に使えます。 また、データベースを調査したり、API 呼び出しを受け付けたり、ボットが人に連絡するためのカスタムアラートを作成したりできるシンプルなフロントエンドも提供しています。
このガイドでは、Securitybot インスタンスを余計な機能なしでできるだけ早くセットアップする手順を説明します。
Slack、SQL、Duo に接続します。
完了すると、main.py のようなファイルが作成されます。
どこかの MySQL サーバーに securitybot というデータベースが必要です。
securitybot/sql.py にある init_sql という関数が SQL を初期化します。
現在は、ホスト localhost、ユーザー root、パスワードなしで設定されています。
もちろん、あなたのデータベースの設定はこれとは異なるので、変更する必要があります。
Slack と統合するにはトークンが必要です。
ボットユーザーを作成し、そのトークンを Securitybot に使用するのが最善です。
また、ユーザーがアクションを実行していないと指定したときにボットが報告するチャンネルを設定する必要があります。
そのチャンネルの一意の ID(C123456 のような形式)を見つけ、ボットユーザーをそのチャンネルに招待してください。招待しないとメッセージを送信できません。
Duo については、Auth API インスタンスを作成し、適切な名前を付け、統合キー、シークレットキー、Auth API エンドポイント URI を記録しておきます。
ルートディレクトリにある main.py を参照して、これらすべての使い方の例を確認してください。
上記で取得した値をすべてグローバル変数に置き換えます。
以下のすべてが正常に生成されれば、Securitybot が起動して実行されるはずです。
テストするには、割り当てられたボットユーザーに hi とメッセージを送信します。
アラート処理をテストするには、test とメッセージを送信してボットをテストします。
Securitybot は可能な限りモジュール化されるように設計されています。 つまり、チャットシステム、2FA プロバイダー、アラートデータソースを簡単に交換できるということです。 ボットと密接に統合されている唯一のシステムは SQL ですが、他のデータベースのサポートを追加するのも難しくないはずです。 データベースがあることでアラートを永続化でき、一時的な障害が発生してもボットが状態を(あまり)失わないようになります。
ボット自体は少数の機能を実行します:
メッセージング、2FA、アラート管理は設定可能なモジュールによって提供され、初期化時にボットに追加されます。
ボットは受信メッセージをコマンドとして処理します。
コマンドの解析と処理は Securitybot クラスで行われ、コマンド自体は2か所で提供されます。
コマンドの関数は commands.py で定義され、その構造は config/ ディレクトリ内の commands.yaml で定義されています。
Securitybot は多種多様なメッセージングシステムと互換性を持つように設計されています。
現在は Slack 用のバインディングを提供していますが、Gitter や Zulip などの他のプラグインを上流に自由に貢献してください。
メッセージングは securitybot/chat/chat.py によって実現されており、メッセージンググループ内のユーザーの照会、そのユーザーへのメッセージ送信、特定のチャンネル/ルームへのメッセージ送信のための少数の関数を提供します。
新しいメッセージングシステム用のバインディングを追加するには、Chat をサブクラス化します。
2FA サポートは auth/auth.py によって提供され、非同期 2FA をいくつかの関数でラップして、2FA 機能の確認、2FA セッションの開始、2FA セッションの状態のポーリングを可能にします。
Duo Auth API を介した Duo Push のサポートを提供していますが、別の製品や社内の 2FA ソリューションのサポートを追加するのは、Auth のサブクラスを作成するのと同じくらい簡単です。
タスク管理は tasker/tasker.py と Tasker クラスによって提供されます。
アラートは SQL データベースに記録されるため、提供される Tasker は SQLTasker です。
これにより、新しいタスクを取得し、個々の Task オブジェクトを介して更新するためのサポートが提供されます。
ブラックリストは SQL データベースで処理され、blacklist/blacklist.py とサブクラス blacklist/sql_blacklist.py で提供されます。
User オブジェクトはユーザー状態の処理をサポートします。
メッセージングシステムから得られる情報はすべて追跡しますが、実際に連絡に使用するのはユーザーの一意の ID とユーザー名だけです。
アラートは、それを生成したイベントのハッシュから得られる SHA-256 ハッシュによって一意に識別されます。 SHA-256 ハッシュは衝突が発生しないほど十分にランダムであると想定しています。 SHA-256 の衝突が発生した場合は、最寄りの大学の関係者に連絡して、それがもたらす名声と富を楽しんでください。
質問があればお問い合わせください
貢献者は Dropbox Contributor License Agreement に従う必要があります。
Copyright 2016 Dropbox, Inc.
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.