カーネルをトレースするためのツールであるSysdigについては、2年ほど前に話しました 。 さらに最近では、今年5月にSysdig開発者が別の興味深い製品Falco異常検出システムを導入しました。
Falcoは2つの主要なコンポーネントで構成されています:sysdig_probeカーネルモジュール(Sysdigも動作します)と収集された情報をディスクに書き込むデーモン。
ユーザー定義のルールに基づいて、Falcoはアプリケーションの動作を監視し、異常を検出すると、標準出力、syslog、またはユーザー指定のファイルに情報を書き込みます。 開発者は冗談でFalcoを「snort、ossec、straceのハイブリッド」と呼び、ほとんどシステムに負荷をかけることなく、単純なIDSとして位置付けます。
Sysdig Falcoは、少し異なる方法で簡単に説明します。これは、高度な監査ツールです。 Linux監査サブシステムと同じイベントを追跡できますが、それだけではありません。 完全なリストからはほど遠いです。
- コンテナ内でコマンドシェルを起動します。
- デバイスとは関係のない/ devディレクトリファイルへの書き込み(たとえば、これを行うルートキットもあります)。
- アプリケーションによって開始される非典型的なネットワーク接続。
- 重要なディレクトリ内のファイルを変更しようとします-たとえば、/ etc / passwd;
- 個々のアプリケーションの操作における非定型イベント。
Falco自体は保護を提供しませんが、指定された条件を満たすシステムイベントに関する情報のみを収集します。 この情報に基づいて、特定の結論を導き出し、必要に応じて追加の措置を講じることができます。
設置
Falcoをインストールする前に、適切なリポジトリを追加する必要があります(以降、コマンド例はすべてUbuntu 16.04 OS用に提供されています)。
$ curl -s https://s3.amazonaws.com/download.draios.com/DRAIOS-GPG-KEY.public | apt-key add - $ curl -s -o /etc/apt/sources.list.d/draios.list http://download.draios.com/stable/deb/draios.list $ sudo apt-get update
カーネルヘッダーも設定する必要があります。
$ sudo apt-get -y install linux-headers-$(uname -r)
その後、Falcoをインストールし、sysdig_probeモジュールをカーネルに追加します。
$ sudo apt-get -y install falco $ modprobe sysdig-probe
これでインストールは完了です。 その後、Falcoは次を実行できます。
$ sudo service falco start
検出されたすべてのイベントに関する情報は、syslogに記録されます。 Falcoをインタラクティブモードで実行できます。
$ falco
疑わしいイベントに関するすべての情報は、すぐに標準出力に書き込まれます。
開始するためのデフォルトの設定とルールで十分です。
/etc/falco_rules.yamlファイルには、すべての場合のルールがすでに含まれています。 MySQL、MongoDB、CouchDB、Fluentd、Elasticsearchなど、さまざまなアプリケーションおよびサービス向けの既製のルールもあります。
必要に応じて、既存のルールをいつでも変更でき、新しいルールを追加することもできます。 Falco構成ファイルの構造をさらに詳しく調べてみましょう。
基本設定
Falcoの基本設定は/etc/falco.yamlファイルに保存されています。 デフォルトでは、次のようになります。
# File containing Falco rules, loaded at startup. rules_file: /etc/falco_rules.yaml # Whether to output events in json or text json_output: false # Send information logs to stderr and/or syslog Note these are *not* security # notification logs! These are just Falco lifecycle (and possibly error) logs. log_stderr: true log_syslog: true # Where security notifications should go. # Multiple outputs can be enabled. syslog_output: enabled: true file_output: enabled: false filename: ./events.txt stdout_output: enabled: true program_output: enabled: false program: mail -s "Falco Notification" someone@example.com
ご覧のとおり、ルールが保存されているファイル、出力の表示形式(プレーンテキストまたはjson)、および検出された異常に関する情報を記録する場所がここに示されています。 Falcoは、メッセージを標準出力、syslog、およびユーザー指定のテキストファイルに書き込むことができます。
ルールとその構文
/etc/falco_rules.yamlファイルには、Sysdig Falcoシステムの動作における特別な注意を払うべき機能を正確に示すルールが含まれています。 このファイルのスニペットは次のとおりです。
- rule: write_etc desc: an attempt to write to any file below /etc, not in a pipe installer session condition: write_etc_common and not proc.sname=fbash output: "File below /etc opened for writing (user=%user.name command=%proc.cmdline file=%fd.name)" priority: WARNING
ここではすべてが単純明快です:ルールは、Falcoが/ etcディレクトリのファイルを開いて書き込みを試みることを通知することを示します(/ etcのファイルがプログラムのインストール時に作成される場合を除く)。
各ルールは次のフィールドで構成されます。
- desc-任意の形式のルールの説明。
- condition-ルールがトリガーされる条件(標準のSysdig構文を使用して条件を記述します。詳細については、 公式ドキュメントを参照してください )および記事 )。
- output-ルールがトリガーされたときに出力される出力。
- 優先順位-優先順位(INFO、WARNING、ALERT、DEBUG、CRITICAL)。
このルールの仕組みを見てみましょう。 「ライブ観測」モードでFalcoを起動します。
$ falco
別の端末で、/ etcディレクトリにあるファイルを開いてみてください。 次の形式のメッセージが表示されます。
12:43:52.640375428: Warning File below /etc opened for writing (user=useri command=nano /etc/default/grub file=/etc/default/.grub.swp) 12:43:52.640973730: Warning File below /etc opened for writing (user=useri command=nano /etc/default/grub file=/etc/default/grub)
Ctrl + Cを押してFalcoを停止すると、検出されたすべてのイベントの簡単な概要がコンソールに表示されます。
Events detected: 2 Rule counts by severity: Error: 0 Warning: 2 Informational: 0 Triggered rules by rule name: write_etc: 2
別の例を見て、Falcoを使用してコンテナ内のシステムイベントを監査する方法を示しましょう。
コンテナを見る
Sysdig Falcoは、コンテナ内で何が起こるかを監視するのに適しています。 仕組みを見てみましょう。
Dockerコンテナーを作成します。
$ docker pull:ubuntu 14.04
その後、追加のルールを/etc/falco_rules.yamlに追加します(例はここから取られます )。
- rule: system_binaries_network_activity_container desc: any network activity performed by system binaries that are not expected to send or receive any network traffic in a container condition: ((inbound or outbound) and (fd.sockfamily = ip)) and fd.name != '' and container output: "Suspicious binary sent/received network traffic from container=%container.id (user=%user.name command=%proc.cmdlin e connection=%fd.name type=%evt.type)" priority: WARNING
変更を保存してFalcoを再起動します。 その後、コンテナを入力します:
$ docker run --rm -it ubuntu:14.04 /bin/bash
コンテナでコマンドを実行しましょう:
$ ping ya.ru
次のメッセージがsyslogのメインホストに表示されます。
16:08:56.944164593: Warning Suspicious binary sent/received network traffic from container=0b86d8efdf0a (user=root command=ping ya.ru connection=172.17.0.2:47776->123.45.67.89:53 type=connect) 16:08:56.945398068: Warning Suspicious binary sent/received network traffic from container=0b86d8efdf0a (user=root command=ping ya.ru connection=172.17.0.2:38643->123.45.67.89:1025 type=connect)
コンテナID、ユーザー名、およびネットワーク接続をトリガーしたコマンドが含まれています。
おわりに
Sysdig Falcoは、興味深い有望なツールです。 Sysdigと同じ利点があります:柔軟性、便利なルール構文、人間が読める形式の結論。 その助けを借りて、システムに関する多くの貴重な情報を得ることができますが、これらの情報は他のツールを使用して取得することはできません。
すでにFalcoを実際に使用している場合は、コメントで経験を共有してください。
結論として、詳細を知りたい人のための有用なリンクの選択を提示します。
- https://github.com/draios/falco-GitHubの公式Falcoリポジトリ。
- https://github.com/draios/falco/wiki-Falcoの公式ドキュメント。
- https://sysdig.com/blog/tag/falco/-Draiosの会社ブログでFalcoに関する一連の記事。
- https://www.youtube.com/watch?v=flcu2Mz9bpo-Sysdig Falcoに関する概要講義。
何らかの理由でここにコメントを残せない場合は、 当社の企業ブログへようこそ。