Ubuntu16.04にBroをインストールする方法
序章
Bro は、オープンソースのネットワーク分析フレームワークおよびセキュリティ監視アプリケーションです。 OSSECとosqueryの最高の機能のいくつかを1つの素晴らしいパッケージにまとめています。
Broは、シグニチャベースと動作ベースの両方の分析と検出を実行できますが、実行する内容の大部分は動作ベースの分析と検出です。 Broの機能の長いリストには、次の機能が含まれています。
- SSHやFTPなどのネットワークサービスに対するブルートフォース攻撃を検出する
- HTTPトラフィックの監視と分析を実行します
- インストールされているソフトウェアの変更を検出する
- SSL/TLS証明書の検証を実行します
- SQLインジェクション攻撃を検出する
- すべてのファイルのファイル整合性監視を実行します
- アクティビティ、概要、クラッシュレポート、アラートをメールで送信する
- 都市レベルへのIPアドレスのジオロケーションを実行します
- スタンドアロンモードまたは分散モードで動作する
Broは、ソースから、またはパッケージマネージャーを介してインストールできます。 ソースからのインストールはより複雑ですが、ジオロケーションライブラリがコンパイルされる前にインストールされている場合、IPジオロケーションをサポートする唯一の方法です。
Broをインストールすると、bro
やbroctl
などの追加コマンドをシステムで使用できるようになります。 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をソースからインストールする前に、その依存関係をインストールする必要があります。
まず、パッケージデータベースを更新します。 パッケージをインストールする前にこれを行わないと、パッケージマネージャーエラーが発生する可能性があります。
- sudo apt-get update
Broの依存関係には、 Libpcap 、 OpenSSL 、BIND8などの多数のライブラリとツールが含まれます。 BroControlには、Python2.6以降が追加で必要です。 ソースからBroを構築しているため、 CMake 、 SWIG 、 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
ディレクトリに移動します。
注:MaxMindから無料のレガシーGeoIPデータベースをダウンロードしています。 その後、新しいIPデータベース形式がリリースされましたが、Broはまだサポートしていません。
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
次の行をコピーして貼り付けます。 1行目は説明コメントで、2行目は/usr/local/bro/bin
がシステム上のすべてのユーザーのパスに追加されていることを確認します。
# 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がインストールされたので、Broを正しく実行するためにいくつかの構成変更を行う必要があります。
ステップ4—Broの構成
このステップでは、Broが正しく機能するように、いくつかのファイルをカスタマイズします。 すべてのファイルは/usr/local/bro/etc
ディレクトリにあり、次のとおりです。
node.cfg
。これは、監視するノードを構成するために使用されます。networks.cfg
。これには、ノードにローカルなCIDR表記のネットワークのリストが含まれています。broctl.cfg
。これは、メール、ロギング、およびその他の設定用のグローバルBroControl構成ファイルです。
各ファイルで何を変更する必要があるかを見てみましょう。
監視するノードの構成
Broが監視するノードを構成するには、node.cfg
ファイルを変更する必要があります。
箱から出して、Broはスタンドアロンモードで動作するように構成されています。 これはスタンドアロンインストールであるため、このファイルを変更する必要はありませんが、値が正しいことを確認することをお勧めします。
編集のためにファイルを開きます。
- sudo nano /usr/local/bro/etc/node.cfg
bro
セクションで、interface
パラメーターを探します。 デフォルトではetho0
であり、これはUbuntu16.04サーバーのパブリックインターフェイスと一致する必要があります。 そうでない場合は、必ず更新してください。
[bro]
type=standalone
host=localhost
interface=eth0
終了したら、ファイルを保存して閉じます。 次に、ノードが属するプライベートネットワークを構成します。
ノードのプライベートネットワークの構成
networks.cfg
ファイルは、ノードが属するIPネットワークを構成する場所です(つまり、 監視するサーバーのインターフェースのIPネットワーク)。
開始するには、ファイルを開きます。
- sudo nano /usr/local/bro/etc/networks.cfg
デフォルトでは、ファイルには、指定方法の例としてすでに構成されている3つのプライベートIPブロックが含まれています。
# 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
の最終バージョンは次のようになり、ネットワークアドレスが次のように置き換えられます。
203.0.113.0/24 Public IP space
198.51.100.0/24 Private IP space
編集が終了したら、ファイルを保存して閉じます。 次に、メールとログの設定を構成します。
メールとログの設定を構成する
broctl.cfg
ファイルは、BroControlが電子メールとロギングの責任を処理する方法を構成する場所です。 ほとんどのデフォルトは変更する必要はありません。 ターゲットのメールアドレスを指定するだけです。
編集のためにファイルを開きます。
- sudo nano /usr/local/bro/etc/broctl.cfg
ファイル上部のMailOptions セクションで、 MailTo パラメーターを探し、管理している有効な電子メールアドレスに変更します。 すべてのBro電子メールアラートはそのアドレスに送信されます。
. . .
# 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
で呼び出されると、インタラクティブシェルが起動します。
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
また、構成ファイルまたはスクリプトに変更が加えられるたびに、このコマンドを実行する必要があります。
注:Broが起動しない場合、コマンドの出力は原因を示唆します。 たとえば、MTAがインストールされている場合でも、次のエラーメッセージが表示される場合があります。
Outputbro 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のエントリを追加することです。
. . .
# Added for Sendmail
SendMail = /usr/sbin/sendmail
###############################################
# Logging Options
. . .
次に、sudo /usr/local/bro/bin/broctl deploy
を使用してBroを再デプロイします。
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
を使用できます。
注:broctl restart
とbroctl deploy
は同じではありません。 構成設定を変更したり、スクリプトを変更したりした後、後者を呼び出します。 サービス全体を停止して再起動する場合は、前者を呼び出します。
次に、Broサービスをより堅牢にcronジョブを設定してみましょう。
手順6—Broのcronを構成する
BroにはSystemdサービス記述子ファイルはありませんが、cronスクリプトが付属しており、有効にすると、クラッシュした場合にBroを再起動し、十分なディスク容量の確認や期限切れのログファイルの削除などの他のタスクを実行します。
Broのcron
コマンドはそのまま使用できますが、実際にスクリプトをトリガーするcronジョブをインストールする必要があります。 まず、/etc/cron.d
にBroのcronパッケージファイルを追加する必要があります。 慣例に従い、そのファイルをbro
と呼ぶので、作成して開きます。
- sudo nano /etc/cron.d/bro
次に、ファイルにコピーして貼り付けるエントリを示します。 Broのcron
を5分ごとに実行します。 Broがクラッシュしたことを検出すると、Broを再起動します。
*/5 * * * * root /usr/local/bro/bin/broctl cron
より頻繁に実行したい場合は、上記のコマンドで5
を変更できます。
終了したら、ファイルを保存して閉じます。
cronジョブがアクティブ化されると、統計ファイルのディレクトリが/usr/local/bro/logs/stats
に作成されたことを示す電子メールが届きます。 Broは実際にクラッシュする必要があることに注意してください(つまり これが機能するためには、不用意に停止されます)。 BroControlのstop
を使用してBroを正常に停止すると、機能しません。
それが機能することをテストするには、サーバーを再起動するか、Broプロセスの1つを強制終了する必要があります。 再起動ルートを使用すると、サーバーが再起動プロセスを完了してから5分後にBroが再起動されます。 他のアプローチを使用するには、最初にBroのプロセスIDの1つを取得します。
- ps aux | grep bro
次に、プロセスの1つを強制終了します。
- sudo kill -9 process_id
次に、以下を使用してステータスを確認します。
- sudo /usr/local/bro/bin/broctl status
出力には、クラッシュしたことが示されます。
OutputName Type Host Status Pid Started
bro standalone localhost crashed
数分後に同じコマンドを呼び出すと、出力に再び実行されていることが示されます。
Broが完全に機能していると、約1時間ごとにインターフェイスにキャプチャされた興味深いアクティビティの概要メールが届くはずです。 また、クラッシュして再起動した場合は、クラッシュ後に開始したことを示すメールが届きます。 次の最後のステップでは、他のいくつかの主要なBroユーティリティを見てみましょう。
ステップ7— bro
、bro-cut
、およびBroポリシースクリプトを使用する
bro
とbro-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/
ディレクトリにあります。 Broをアップグレードまたは再インストールすると変更が上書きされるため、/usr/local/bro/share/bro/site/local.bro
以外のこのディレクトリ内のファイルをカスタマイズしないでください。
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
ここで、キャプチャコマンドの1つを実行してみることができます。 少し実行させた後、CTRL+C
を使用してbro
キャプチャセッションを終了します。 cat ssh.log | /usr/local/bro/bin/bro-cut -C -d
のようなコマンドを使用して、bro-cut
でそれぞれを読み取ることができます。
結論
この記事では、Broと、ソースからスタンドアロンでインストールする方法を紹介しました。 また、BroがIPアドレスを都市レベルに地理的に特定するために使用するMaxMindからIPv4およびIPv6GeoIPデータベースをインストールする方法も学びました。 このスタンドアロンのインストールモードでは、構成ファイルの関連する側面を変更し、broctrl
で管理し、bro
を使用してライブトラフィックをキャプチャし、bro-cut
を使用して出力する方法も学習しました。結果のログファイルを読み取ります。
Broの使用方法の詳細については、プロジェクトのドキュメントサイトからアクセスできます。