序章

Bro は、オープンソースのネットワーク分析フレームワークおよびセキュリティ監視アプリケーションです。 OSSECosqueryの最高の機能のいくつかを1つの素晴らしいパッケージにまとめています。

Broは、シグニチャベースと動作ベースの両方の分析と検出を実行できますが、実行する内容の大部分は動作ベースの分析と検出です。 Broの機能の長いリストには、次の機能が含まれています。

  • SSHやFTPなどのネットワークサービスに対するブルートフォース攻撃を検出する
  • HTTPトラフィックの監視と分析を実行します
  • インストールされているソフトウェアの変更を検出する
  • SSL/TLS証明書の検証を実行します
  • SQLインジェクション攻撃を検出する
  • すべてのファイルのファイル整合性監視を実行します
  • アクティビティ、概要、クラッシュレポート、アラートをメールで送信する
  • 都市レベルへのIPアドレスのジオロケーションを実行します
  • スタンドアロンモードまたは分散モードで操作する

Broは、ソースから、またはパッケージマネージャーを介してインストールできます。 ソースからのインストールはより複雑ですが、ジオロケーションライブラリがコンパイルされる前にインストールされている場合、IPジオロケーションをサポートする唯一の方法です。

Broをインストールすると、次のような追加のコマンドが作成されます brobroctl システムで利用できます。 bro トレースファイルの分析やライブトラフィック分析にも使用できます。 broctl スタンドアロンまたは分散Broインストールを管理するために使用されるインタラクティブなシェルおよびコマンドラインユーティリティです。

この記事では、スタンドアロンモードでUbuntu16.04にソースからBroをインストールします。

前提条件

この記事を完了するには、次のものが必要です。

  • このUbuntu16.04の初期セットアップガイドを使用して構成された、ファイアウォールとsudo権限を持つ非rootユーザーアカウントを持つUbuntu16.04サーバー。 追加のRAMを必要とするいくつかのタスクを実行するため、少なくとも1GBのメモリを備えたサーバーを起動する必要があります。
  • このPostfixonUbuntu 16.04ガイドを使用して、サーバーに送信専用メール転送エージェント(MTA)としてインストールされたPostfix。 Broがメールアラートを送信するには、PostfixのようなMTAをインストールする必要があります。 1つなしで実行されますが、電子メールは送信されません。

ステップ1—依存関係のインストール

ソースからBroをインストールする前に、その依存関係をインストールする必要があります。

まず、パッケージデータベースを更新します。 パッケージをインストールする前にこれを行わないと、パッケージマネージャーエラーが発生する可能性があります。

  1. sudo apt-get update

Broの依存関係には、 Libpcap OpenSSL BIND8などの多数のライブラリとツールが含まれます。 BroControlには、Python2.6以降が追加で必要です。 ソースからBroを構築しているため、 CMake SWIG Bison 、C /C++コンパイラなどの追加の依存関係が必要になります。

必要なすべての依存関係を一度にインストールできます。

  1. 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 ディレクトリ。

MaxMindから無料のレガシーGeoIPデータベースをダウンロードしています。 その後、新しいIPデータベース形式がリリースされましたが、Broはまだサポートしていません。

IPv4データベースとIPv6データベースの両方をダウンロードします。

  1. wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz
  2. wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCityv6-beta/GeoLiteCityv6.dat.gz

両方のファイルを解凍します。これにより、次の名前の2つのファイルが配置されます。 GeoLiteCity.datGeoLiteCityv6.dat 作業ディレクトリにあります。

  1. gzip -d GeoLiteCity.dat.gz
  2. gzip -d GeoLiteCityv6.dat.gz

次に、適切なディレクトリに移動し、プロセスで名前を変更します。

  1. sudo mv GeoLiteCity.dat /usr/share/GeoIP/GeoIPCity.dat
  2. sudo mv GeoLiteCityv6.dat /usr/share/GeoIP/GeoIPCityv6.dat

GeoIPデータベースが整ったら、次のステップでBro自体をインストールできます。

ステップ3—ソースからBroをインストールする

ソースからBroをインストールするには、最初にGitHubからリポジトリのクローンを作成する必要があります。

GitはデフォルトでUbuntuにすでにインストールされているため、次のコマンドでリポジトリのクローンを作成できます。 ファイルは、という名前のディレクトリに配置されます bro.

  1. git clone --recursive git://git.bro.org/bro

プロジェクトのディレクトリに移動します。

  1. cd bro

Broの構成を実行します。これには1分もかかりません。

  1. ./configure

次に、 make プログラムをビルドします。 サーバーによっては、これには最大20分かかる場合があります。

  1. make

実行中、ほとんどの出力行の先頭に完了率が表示されます。

完了したら、Broをインストールします。これには1分もかかりません。

  1. sudo make install

Broはにインストールされます /usr/local/bro ディレクトリ。

次に、を追加する必要があります /usr/local/bro/bin あなたのディレクトリに $PATH. グローバルに利用できるようにするための最善の方法は、ファイル内のパスを指定することです。 /etc/profile.d ディレクトリ。 そのファイルを呼び出します 3rd-party.sh.

作成して開く 3rd-party.sh お気に入りのテキストエディタで。

  1. sudo nano /etc/profile.d/3rd-party.sh

次の行をコピーして貼り付けます。 1行目は説明コメントで、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.

  1. source /etc/profile.d/3rd-party.sh

ただし、古い設定のアーティファクトは存続する傾向があるため、さらにログアウトして再度ログインし、パスが正しく読み込まれることを確認できます。

Broがインストールされたので、Broを正しく実行するためにいくつかの構成変更を行う必要があります。

ステップ4—Broの構成

このステップでは、Broが正しく機能するように、いくつかのファイルをカスタマイズします。 すべてのファイルはにあります /usr/local/bro/etc ディレクトリ、およびそれらは次のとおりです。

  • node.cfg、監視するノードを構成するために使用されます。
  • networks.cfg、ノードにローカルなCIDR表記のネットワークのリストが含まれています。
  • broctl.cfg、これは、メール、ロギング、およびその他の設定用のグローバルBroControl構成ファイルです。

各ファイルで何を変更する必要があるかを見てみましょう。

監視するノードの構成

Broが監視するノードを構成するには、 node.cfg ファイル。

箱から出して、Broはスタンドアロンモードで動作するように構成されています。 これはスタンドアロンインストールであるため、このファイルを変更する必要はありませんが、値が正しいことを確認することをお勧めします。

編集のためにファイルを開きます。

  1. sudo nano /usr/local/bro/etc/node.cfg

bro セクション、を探します interface パラメータ。 これは etho0 デフォルトでは、これはUbuntu16.04サーバーのパブリックインターフェイスと一致する必要があります。 そうでない場合は、必ず更新してください。

/usr/local/bro/etc/node.cfg
[bro]
type=standalone
host=localhost
interface=eth0

終了したら、ファイルを保存して閉じます。 次に、ノードが属するプライベートネットワークを構成します。

ノードのプライベートネットワークの構成

The networks.cfg ファイルは、ノードが属するIPネットワークを構成する場所です(つまり、 監視するサーバーのインターフェースのIPネットワーク)。

開始するには、ファイルを開きます。

  1. 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
203.0.113.0/24		  Public IP space
198.51.100.0/24         Private IP space

編集が終了したら、ファイルを保存して閉じます。 次に、メールとログの設定を構成します。

メールとログの設定を構成する

The broctl.cfg ファイルは、BroControlが電子メールとロギングの責任を処理する方法を構成する場所です。 ほとんどのデフォルトは変更する必要はありません。 ターゲットのメールアドレスを指定するだけです。

編集のためにファイルを開きます。

  1. sudo nano /usr/local/bro/etc/broctl.cfg

ファイル上部のMailOptions セクションで、 MailTo パラメーターを探し、管理している有効な電子メールアドレスに変更します。 すべてのBro電子メールアラートはそのアドレスに送信されます。

/usr/local/bro/etc/broctl.cfg
. . .
# Mail Options

# Recipient address for all emails sent out by Bro and BroControl.
MailTo = [email protected]
. . .

編集が終了したら、ファイルを保存して閉じます。

これがBroに必要なすべての構成であるため、BroControlを使用してBroを起動および管理できます。

ステップ5—BroControlを使用したBroの管理

BroControlは、Broのインストールの管理(サービスの開始と停止、Broの展開、およびその他の管理タスクの実行)に使用されます。 これは、コマンドラインツールであると同時にインタラクティブシェルでもあります。

もしも broctl で呼び出されます sudo /usr/local/bro/bin/broctl、インタラクティブシェルを起動します:

Output
Welcome to BroControl 1.5-21 Type "help" for help. [BroControl] >

インタラクティブシェルを終了するには、 exit 指図。

シェルから、任意の有効なBroコマンドを実行できます。 同じコマンドを、シェルを呼び出さずにコマンドラインから直接実行することもできます。 コマンドラインでコマンドを実行すると、出力をパイプ処理できるため、多くの場合、より便利なアプローチになります。 broctl コマンドを標準のLinuxコマンドに変換します。 このステップの残りの部分では、呼び出します broctl コマンドラインでのコマンド。

まず、 broctl deploy Broを起動し、BroControlとBroに必要なファイルが、手順4の構成に基づいて最新の状態になっていることを確認します。

  1. sudo /usr/local/bro/bin/broctl deploy

また、構成ファイルまたはスクリプトに変更が加えられるたびに、このコマンドを実行する必要があります。

:Broが起動しない場合、コマンドの出力は原因を示唆します。 たとえば、MTAがインストールされている場合でも、次のエラーメッセージが表示される場合があります。

Output
bro not running (was crashed) Error: error occurred while trying to send mail: send-mail: SENDMAIL-NOTFOUND not found starting ... starting bro ...

解決策は、BroControl構成ファイルを編集することです。 /usr/local/bro/etc/broctl.cfg メールオプションセクションの最後にSendmailのエントリを追加します。

/usr/local/bro/etc/broctl.cfg
. . .
# Added for Sendmail
SendMail = /usr/sbin/sendmail

###############################################
# Logging Options
. . .

次に、Broを再デプロイします sudo /usr/local/bro/bin/broctl deploy.

ブロのステータスは、 status 指図。

  1. sudo /usr/local/bro/bin/broctl status

出力は次のようになります。 以外に running、ステータスも crashed また stopped.

Output
Name Type Host Status Pid Started bro standalone localhost running 6807 12 Apr 05:42:50

Broを再起動する必要がある場合は、 sudo /usr/local/bro/bin/broctl restart.

broctl restartbroctl deploy 同じではありません。 構成設定を変更したり、スクリプトを変更したりした後、後者を呼び出します。 サービス全体を停止して再起動する場合は、前者を呼び出します。

次に、Broサービスをより堅牢にcronジョブを設定してみましょう。

手順6—Broのcronを構成する

BroにはSystemdサービス記述子ファイルはありませんが、cronスクリプトが付属しており、有効にすると、クラッシュした場合にBroを再起動し、十分なディスク容量の確認や期限切れのログファイルの削除などの他のタスクを実行します。

ブロの cron コマンドはすぐに有効になりますが、実際にスクリプトをトリガーするcronジョブをインストールする必要があります。 まず、Broinのcronパッケージファイルを追加する必要があります。 /etc/cron.d. 慣例に従い、そのファイルを呼び出します bro、作成して開きます。

  1. sudo nano /etc/cron.d/bro

次に、ファイルにコピーして貼り付けるエントリを示します。 Bro’sを実行します cron 5分ごと。 Broがクラッシュしたことを検出すると、Broを再起動します。

/etc/cron.d/bro
*/5 * * * * root /usr/local/bro/bin/broctl cron

あなたは変更することができます 5 より頻繁に実行したい場合は、上記のコマンドで。

終了したら、ファイルを保存して閉じます。

cronジョブがアクティブ化されると、統計ファイルのディレクトリが次の場所に作成されたことを示す電子メールが届きます。 /usr/local/bro/logs/stats. Broは実際にクラッシュする必要があることに注意してください(つまり これが機能するためには、不用意に停止されます)。 BroControlを使用してBroを優雅に停止すると、機能しません。 stop.

それが機能することをテストするには、サーバーを再起動するか、Broプロセスの1つを強制終了する必要があります。 再起動ルートを使用すると、サーバーが再起動プロセスを完了してから5分後にBroが再起動されます。 他のアプローチを使用するには、最初にBroのプロセスIDの1つを取得します。

  1. ps aux | grep bro

次に、プロセスの1つを強制終了します。

  1. sudo kill -9 process_id

次に、以下を使用してステータスを確認します。

  1. sudo /usr/local/bro/bin/broctl status

出力には、クラッシュしたことが示されます。

Output
Name Type Host Status Pid Started bro standalone localhost crashed

数分後に同じコマンドを呼び出すと、出力に再び実行されていることが示されます。

Broが完全に機能していると、約1時間ごとにインターフェースにキャプチャされた興味深いアクティビティの要約メールが届くはずです。 また、クラッシュして再起動した場合は、クラッシュ後に開始したことを示すメールが届きます。 次の最後のステップでは、他のいくつかの主要なBroユーティリティを見てみましょう。

ステップ7—使用 bro, bro-cut およびBroポリシースクリプト

brobro-cut Broに付属している他の2つの主要なコマンドです。 と bro、ライブトラフィックをキャプチャし、他のツールを使用してキャプチャされたトレースファイルを分析できます。 bro-cut Broログからデータを読み取ったり取得したりするためのカスタムツールです。

でライブトラフィックをキャプチャするために使用されるコマンド bro 形式は sudo /usr/local/bro/bin/bro -i eth0 file.... 少なくとも、トラフィックをキャプチャするインターフェイスを指定する必要があります。file... Broが処理するものを定義するポリシースクリプトを指します。 1つまたは複数のスクリプトを指定する必要がないため、コマンドは次のようになります。 sudo /usr/local/bro/bin/bro -i eth0.

:Broが機能するために使用するスクリプトは、 /usr/local/bro/share/bro ディレクトリ。 サイト固有のスクリプトは /usr/local/bro/share/bro/site/ ディレクトリ。 このディレクトリ内のファイルをカスタマイズしないように注意してください。 /usr/local/bro/share/bro/site/local.bro、Broをアップグレードまたは再インストールすると、変更が上書きされるためです。

なぜなら bro 単一のキャプチャセッションから作業ディレクトリに多くのファイルを作成する場合は、 bro そのキャプチャセッション専用に作成されたディレクトリのcaptureコマンド。 たとえば、次のリストは長いリストを示しています(ls -l)ライブトラフィックキャプチャセッション中に作成されたファイルの。

Output
total 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

ここで、キャプチャコマンドの1つを実行してみることができます。 少し実行させた後、 CTRL+C 終了するには bro キャプチャセッション。 あなたはそれぞれを読むことができます bro-cut 次のようなコマンドを使用する cat ssh.log | /usr/local/bro/bin/bro-cut -C -d.

結論

この記事では、Broと、ソースからスタンドアロンでインストールする方法を紹介しました。 また、BroがIPアドレスを都市レベルに地理的に特定するために使用するMaxMindからIPv4およびIPv6GeoIPデータベースをインストールする方法も学びました。 このスタンドアロンのインストールモードでは、構成ファイルの関連する側面を変更し、次の方法で管理する方法も学びました。 broctrl、 使用する bro ライブトラフィックをキャプチャし、 bro-cut 結果のログファイルを出力して読み取ります。

Broの使用方法の詳細については、プロジェクトのドキュメントサイトからアクセスできます。