前書き
Broは、オープンソースのネットワーク分析フレームワークおよびセキュリティ監視アプリケーションです。 OSSECおよびhttps://www.digitalocean.com/community/tutorials?q=osquery[osquery]のいくつかの最良の機能をまとめています。一つの素敵なパッケージに。
Broは、シグネチャベースと動作ベースの両方の分析と検出を実行できますが、そのほとんどは動作ベースの分析と検出です。 Broの機能の長いリストには、次の機能が含まれています。
-
SSHやFTPなどのネットワークサービスに対するブルートフォース攻撃を検出する
-
HTTPトラフィックの監視と分析を実行する
-
インストールされたソフトウェアの変更を検出する
-
SSL / TLS証明書の検証を実行する
-
SQLインジェクション攻撃を検出する
-
すべてのファイルのファイル整合性監視を実行する
-
アクティビティ、概要、クラッシュレポート、アラートをメールで送信する
-
都市レベルへのIPアドレスのジオロケーションを実行します
-
スタンドアロンモードまたは分散モードで動作する
Broはソースから、またはパッケージマネージャー経由でインストールできます。 ソースからのインストールはより複雑ですが、コンパイルされる前にジオロケーションライブラリがインストールされている場合、IPジオロケーションをサポートする唯一の方法です。
Broをインストールすると、システムで「+ bro 」や「 broctl 」などの追加コマンドが使用可能になります。 ` bro `は、トレースファイルの分析とライブトラフィック分析に使用できます。 ` broctl +`は、スタンドアロンまたは分散Broインストールを管理するために使用される対話型シェルおよびコマンドラインユーティリティです。
この記事では、スタンドアロンモードでUbuntu 16.04のソースからBroをインストールします。
前提条件
この記事を完了するには、次のものが必要です。
-
このhttps://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu-16-04 [初期セットアップガイドUbuntu 16.04]。 追加のRAMを必要とするいくつかのタスクを実行するため、少なくとも1 GBのメモリを搭載したサーバーを起動する必要があります。
-
https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-postfix-as-a-send-onlyを使用してサーバーに送信専用メール転送エージェント(MTA)としてインストールされたPostfix -smtp-server-on-ubuntu-16-04 [Ubuntu 16.04のこのPostfixガイド]。 Broが電子メールアラートを送信するには、PostfixなどのMTAをインストールする必要があります。 なしで実行されますが、メールは送信されません。
ステップ1-依存関係のインストール
Broをソースからインストールする前に、その依存関係をインストールする必要があります。
まず、パッケージデータベースを更新します。 パッケージをインストールする前にこれを行わないと、パッケージマネージャーエラーが発生する可能性があります。
sudo apt-get update
Broの依存関係には、http://www.tcpdump.org/ [Libpcap]、https://www.openssl.org/ [OpenSSL]、https://www.isc.org/などの多くのライブラリとツールが含まれます。 downloads / bind / [BIND8]。 BroControlには、さらにPython 2.6以降が必要です。 ソースからBroを構築しているため、http://www.cmake.org/ [CMake]、http://www.swig.org/ [SWIG]、https://などの追加の依存関係が必要になります。 www.gnu.org/software/bison/[Bison]、およびC / C ++コンパイラ。
必要なすべての依存関係を一度にインストールできます。
sudo apt-get install bison cmake flex g++ gdb make libmagic-dev libpcap-dev libgeoip-dev libssl-dev python-dev swig2.0 zlib1g-dev
そのインストールが完了したら、次のステップは、BroがIPジオロケーションに使用するデータベースをダウンロードすることです。
ステップ2-GeoIPデータベースのダウンロード
ここでは、BroがIPアドレスの地理位置情報に依存するGeoIPデータベースをダウンロードします。 IPv4データベースとIPv6データベースを含む2つの圧縮ファイルをダウンロードして解凍し、 `+ / usr / share / GeoIP +`ディレクトリに移動します。
IPv4データベースとIPv6データベースの両方をダウンロードします。
wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz
wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCityv6-beta/GeoLiteCityv6.dat.gz
両方のファイルを解凍すると、作業ディレクトリに「+ GeoLiteCity.dat 」と「 GeoLiteCityv6.dat +」という名前の2つのファイルが配置されます。
gzip -d GeoLiteCity.dat.gz
gzip -d GeoLiteCityv6.dat.gz
次に、適切なディレクトリに移動し、プロセスで名前を変更します。
sudo mv GeoLiteCity.dat /usr/share/GeoIP/GeoIPCity.dat
sudo mv GeoLiteCityv6.dat /usr/share/GeoIP/GeoIPCityv6.dat
GeoIPデータベースを配置したら、次のステップでBro自体をインストールできます。
手順3-ソースからBroをインストールする
ソースからBroをインストールするには、最初にGitHubからリポジトリを複製する必要があります。
GitはデフォルトでUbuntuにすでにインストールされているため、次のコマンドでリポジトリを複製できます。 ファイルは `+ bro +`という名前のディレクトリに置かれます。
git clone --recursive git://git.bro.org/bro
プロジェクトのディレクトリに移動します。
cd bro
Broの構成を実行します。これには1分もかかりません。
./configure
次に、 `+ make +`を使用してプログラムをビルドします。 サーバーによっては、これには最大20分かかる場合があります。
make
実行中の出力のほとんどの行の先頭に完了率が表示されます。
完了したら、Broをインストールします。これには1分もかかりません。
sudo make install
Broは `+ / usr / local / bro +`ディレクトリにインストールされます。
ここで、 + / usr / local / bro / bin`ディレクトリを
+ $ PATH`に追加する必要があります。 グローバルに確実に利用できるようにするための最善の方法は、 `+ / etc / profile.d `ディレクトリの下のファイルにパスを指定することです。 このファイルを「 3rd-party.sh +」と呼びます。
お気に入りのテキストエディターで `+ 3rd-party.sh +`を作成して開きます。
sudo nano /etc/profile.d/3rd-party.sh
以下の行をコピーして貼り付けます。 最初の行は説明のコメントであり、2行目はシステム上のユーザーのパスに `+ / usr / local / bro / bin +`が追加されることを確認します。
/etc/profile.d/3rd-party.sh
# Expand PATH to include the path to Bro's binaries
export PATH=$PATH:/usr/local/bro/bin
ファイルを保存して閉じ、 `+ source +`で変更を有効にします。
source /etc/profile.d/3rd-party.sh
ただし、古い設定のアーティファクトは保持される傾向があるため、さらにログアウトしてから再度ログインし、パスが適切に読み込まれるようにすることができます。
Broがインストールされたので、適切に実行するためにいくつかの構成変更を行う必要があります。
ステップ4-Broの構成
この手順では、いくつかのファイルをカスタマイズして、Broが正常に機能するようにします。 すべてのファイルは `+ / usr / local / bro / etc +`ディレクトリにあり、それらは次のとおりです。
-
「+ node.cfg +」。監視するノードを設定するために使用されます。
-
+ networks.cfg +
。これには、ノードにローカルなhttps://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing[CIDR表記法]のネットワークのリストが含まれます。 -
+ broctl.cfg +
。これは、メール、ログ、およびその他の設定用のグローバルなBroControl構成ファイルです。
各ファイルで変更する必要があるものを見てみましょう。
監視するノードの構成
Broが監視するノードを設定するには、 `+ node.cfg +`ファイルを変更する必要があります。
初期状態では、Broはスタンドアロンモードで動作するように設定されています。 これはスタンドアロンインストールであるため、このファイルを変更する必要はありませんが、値が正しいことを確認することをお勧めします。
ファイルを編集用に開きます。
sudo nano /usr/local/bro/etc/node.cfg
「+ bro 」セクションの下で、「 interface 」パラメーターを探します。 デフォルトでは ` etho0 +`であり、これはUbuntu 16.04サーバーのパブリックインターフェイスと一致する必要があります。 そうでない場合は、必ず更新してください。
/usr/local/bro/etc/node.cfg
[bro]
type=standalone
host=localhost
interface=
完了したら、ファイルを保存して閉じます。 次に、ノードが属するプライベートネットワークを構成します。
ノードのプライベートネットワークの構成
`+ networks.cfg +`ファイルは、ノードが属するIPネットワークを設定する場所です(つまり、 監視するサーバーのインターフェースのIPネットワーク)。
開始するには、ファイルを開きます。
sudo nano /usr/local/bro/etc/networks.cfg
デフォルトでは、ファイルには、指定方法の例として3つのプライベートIPブロックがすでに構成されています。
/usr/local/bro/etc/networks.cfg
# List of local networks in CIDR notation, optionally followed by a
# descriptive tag.
# For example, "10.0.0.0/8" or "fe80::/64" are valid prefixes.
10.0.0.0/8 Private IP space
172.16.0.0/12 Private IP space
192.168.0.0/16 Private IP space
既存の3つのエントリを削除してから、独自のエントリを追加します。 `+ ip addr show`を使用して、サーバーインターフェイスのネットワークアドレスを確認できます。 `+ networks.cfg +`の最終バージョンは次のようになりますが、ネットワークアドレスは次のように置き換えられます。
例/usr/local/bro/etc/networks.cfg
Public IP space
Private IP space
編集が終了したら、ファイルを保存して閉じます。 次に、メールとログ設定を構成します。
メールとログ設定の構成
`+ broctl.cfg +`ファイルは、BroControlが電子メールとロギングの責任を処理する方法を設定する場所です。 ほとんどのデフォルトを変更する必要はありません。 対象のメールアドレスを指定するだけです。
ファイルを編集用に開きます。
sudo nano /usr/local/bro/etc/broctl.cfg
ファイルの上部にある[メールオプション]セクションで、* MailTo *パラメーターを探し、制御する有効な電子メールアドレスに変更します。 Broの電子メールアラートはすべて、そのアドレスに送信されます。
/usr/local/bro/etc/broctl.cfg
. . .
# Mail Options
# Recipient address for all emails sent out by Bro and BroControl.
MailTo =
. . .
編集が終了したら、ファイルを保存して閉じます。
これでBroが必要とする設定はすべて完了したので、BroControlを使用してBroを開始および管理できます。
手順5-BroControlを使用してBroを管理する
BroControlは、Broインストールの管理(サービスの開始と停止、Broの展開、およびその他の管理タスクの実行)に使用されます。 これは、コマンドラインツールと対話型シェルの両方です。
`+ sudo / usr / local / bro / bin / broctl `で ` broctl +`を呼び出すと、対話型シェルが起動します。
OutputWelcome to BroControl 1.5-21
Type "help" for help.
[BroControl] >
`+ exit +`コマンドで対話型シェルを終了できます。
シェルから、有効なBroコマンドを実行できます。 同じコマンドは、シェルを起動せずにコマンドラインから直接実行することもできます。 コマンドラインでコマンドを実行すると、 `+ broctl `コマンドの出力を標準のLinuxコマンドにパイプできるため、多くの場合、より便利なアプローチです。 この手順の残りの部分では、コマンドラインで「 broctl +」コマンドを呼び出します。
まず、 `+ broctl deploy +`を使用してBroを起動し、BroControlとBroに必要なファイルがステップ4の構成に基づいて最新になっていることを確認します。
sudo /usr/local/bro/bin/broctl deploy
また、構成ファイルまたはスクリプトに変更が加えられるたびに、このコマンドを実行する必要があります。
「+ status +」コマンドを使用して、Broのステータスを確認できます。
sudo /usr/local/bro/bin/broctl status
出力は次のようになります。 `+ running `以外に、ステータスは ` crashed `または ` stopped +`にすることもできます。
OutputName Type Host Status Pid Started
bro standalone localhost running 6807 12 Apr 05:42:50
Broを再起動する必要がある場合は、 `+ sudo / usr / local / bro / bin / broctl restart +`を使用できます。
次に、Broサービスをhttps://www.digitalocean.com/community/tutorials/how-to-schedule-routine-tasks-with-cron-and-anacron-on-a-vps[a cronジョブ]。
手順6-Broのcronの構成
BroにはSystemdサービス記述子ファイルはありませんが、cronスクリプトが付属しています。これを有効にすると、クラッシュした場合にBroを再起動し、適切なディスクスペースのチェックや期限切れのログファイルの削除などの他のタスクを実行します。
Broの `+ cron `コマンドはデフォルトで有効になっていますが、実際にスクリプトをトリガーするcronジョブをインストールする必要があります。 最初にBroのcronパッケージファイルを ` / etc / cron.d `に追加する必要があります。 慣例に従って、そのファイルを「 bro +」と呼ぶため、作成して開きます。
sudo nano /etc/cron.d/bro
コピーしてファイルに貼り付けるエントリを次に示します。 Broの「+ cron +」を5分ごとに実行します。 Broがクラッシュしたことを検出すると、再起動します。
/etc/cron.d/bro
*/5 * * * * root /usr/local/bro/bin/broctl cron
より頻繁に実行したい場合は、上記のコマンドで「5」を変更できます。
作業が終了したら、ファイルを保存して閉じます。
cronジョブがアクティブ化されると、statsファイルのディレクトリが `+ / usr / local / bro / logs / stats `に作成されたことを示すメールを受け取るはずです。 Broは実際にクラッシュする必要があることに注意してください(つまり、 これが機能するためには、不意に停止してください)。 BroControlの「 stop +」を使用して自分でBroを正常に停止すると機能しません。
動作することをテストするには、サーバーを再起動するか、Broプロセスの1つを強制終了する必要があります。 再起動ルートを選択すると、サーバーが再起動プロセスを完了してから5分後にBroが再起動されます。 他のアプローチを使用するには、まずBroのプロセスIDの1つを取得します。
ps aux | grep bro
次に、プロセスの1つを強制終了します。
sudo kill -9
その後、次を使用してステータスを確認します。
sudo /usr/local/bro/bin/broctl status
出力には、クラッシュしたことが示されます。
OutputName Type Host Status Pid Started
bro standalone localhost crashed
数分後に同じコマンドを呼び出すと、出力は再び実行されていることを示します。
Broが完全に動作していると、約1時間ごとに、興味深いアクティビティの概要メールがインターフェースにキャプチャされます。 また、クラッシュして再起動した場合は、クラッシュ後に開始したことを示すメールが届きます。 次の最後のステップでは、他のいくつかのブロのユーティリティを見てみましょう。
ステップ7-「+ bro 」、「 bro-cut +」、およびBroポリシースクリプトの使用
「+ bro 」と「 bro-cut 」は、Broに付属する2つの主要なコマンドです。 「 bro 」を使用すると、ライブトラフィックをキャプチャし、他のツールを使用してキャプチャしたトレースファイルを分析できます。 ` bro-cut +`は、Broログからデータを読み取り、取得するためのカスタムツールです。
「+ bro 」でライブトラフィックをキャプチャするために使用されるコマンドは、「 sudo / usr / local / bro / bin / bro -i 」という形式です。 少なくとも、トラフィックをキャプチャするインターフェイスを指定する必要があります。`+ `は、Broの処理対象を定義するポリシースクリプトを指します。 スクリプトを指定する必要はありません。そのため、コマンドは `+ sudo / usr / local / bro / bin / bro -i +`のようにもなります。
+ bro +`は単一のキャプチャセッションから作業ディレクトリに多くのファイルを作成するため、そのキャプチャセッション専用に作成されたディレクトリで `+ bro +`キャプチャコマンドを呼び出すのが最善です。 たとえば、次は、ライブトラフィックキャプチャセッション中に作成されたファイルの長いリスト( `+ ls -l +
)を示しています。
Outputtotal 152
-rw-r--r-- 1 root root 277 Apr 14 09:20 capture_loss.log
-rw-r--r-- 1 root root 4711 Apr 14 09:20 conn.log
-rw-r--r-- 1 root root 2614 Apr 14 04:49 dns.log
-rw-r--r-- 1 root root 25168 Apr 14 09:20 loaded_scripts.log
-rw-r--r-- 1 root root 253 Apr 14 09:20 packet_filter.log
-rw-r--r-- 1 root root 686 Apr 14 09:20 reporter.log
-rw-r--r-- 1 root root 708 Apr 14 04:49 ssh.log
-rw-r--r-- 1 root root 793 Apr 14 09:20 stats.log
-rw-r--r-- 1 root root 373 Apr 14 09:20 weird.log
キャプチャコマンドのいずれかを実行してみてください。 少し実行した後、 + CTRL + C +`を使用して `+ bro +`キャプチャセッションを終了します。 `+ cat |のようなコマンドを使用して、
+ bro-cut + `でそれぞれを読むことができます。 / usr / local / bro / bin / bro-cut -C -d + `
結論
この記事では、Broを紹介し、ソースからスタンドアロンでインストールする方法を説明しました。 また、BroがIPアドレスを都市レベルに位置特定するために使用するMaxMindからIPv4およびIPv6 GeoIPデータベースをインストールする方法も学びました。 このスタンドアロンモードのインストールでは、設定ファイルの関連する側面を変更し、 `+ broctrl `で管理し、 ` bro `を使用してライブトラフィックをキャプチャし、 ` bro-cut +`を出力して結果を読み取る方法も学習しました。ログファイル。
Broの使用方法の詳細については、https://www.bro.org/documentation/index.html [プロジェクトのドキュメントサイト]からアクセスできます。