Suricata - 侵入検知および防止セキュリティ ツール


Suricata は、侵入検知 (IDS)、侵入防止 (IPS)、およびネットワーク セキュリティ モニタリングの機能を提供する、強力で用途の広いオープンソースの脅威検知エンジンです。ディープ パケット インスペクションとパターン マッチングを組み合わせて実行し、脅威の検出において非常に強力です。

このガイドの執筆時点で、Suricata の最新バージョンは 6.0.5 です。

  • IDS/IPS – Suricata はルールベースの侵入検知および防止エンジンであり、新たな脅威の Suricata ルールセットなどの外部で開発されたルールセットを活用して、悪意のあるアクティビティ、ポリシー違反、および脅威についてネットワーク トラフィックを監視します。
  • 自動プロトコル検出 – Suricata エンジンは、HTTP や HTTPS などのプロトコルを自動的に検出します。任意のポートで FTP および SMB を実行し、適切な検出およびログ ロジックを適用します。これは、マルウェアや CnC チャネルの検出に役立ちます。
  • Lua スクリプト – Suricata は、高度なマルウェア検出機能を提供する Lua スクリプトを呼び出して、他の方法では検出が困難なマルウェア トラフィックを検出およびデコードできます。
  • マルチスレッド – Suricata は、ネットワーク トラフィックの決定において速度と重要性を提供します。このエンジンは、最新のマルチコア ハードウェア チップセットによって提供される処理能力の向上を適用するために開発されました。

Linux に Suricata 侵入検知ツールをインストールする

このセクションでは、RHEL ベースのディストリビューションに Suricata をインストールする方法を示します。

Suricata は Debian/Ubuntu リポジトリによって提供され、apt パッケージ マネージャーを使用して簡単にインストールできます。ただし、これは Suricata の最新バージョンをインストールしないことに注意してください。最新バージョンをインストールするには、このガイドで後述するソースからインストールする必要があります。

apt パッケージ マネージャーを使用して Suricata をインストールするには、次のコマンドを実行します。

$ sudo apt install suricata -y

Suricata は、インストールすると自動的に起動します。これは次のように確認できます。

$ sudo systemctl status suricata

CentOS Stream、Rocky Linux、AlmaLinux、Fedora、RHEL などの RHEL ディストリビューションに Suricata をインストールするには、最初に EPEL リポジトリを有効にする必要があります。

$ dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm  [RHEL 9]
$ dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm  [RHEL 8]
$ yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm  [RHEL 7]

EPEL が有効になったら、次の必須パッケージをインストールし、OISF リポジトリをシステムに追加します。

----------- On Fedora Systems ----------- 
$ sudo dnf install dnf-plugins-core
$ sudo  dnf copr enable @oisf/suricata-6.0

----------- On RHEL Systems ----------- 
$ sudo dnf install yum-plugin-copr
$ sudo dnf copr enable @oisf/suricata-6.0

次に、示されているように yum パッケージ マネージャーを使用して Suricata をインストールします。

$ sudo dnf install suricata -y
Or
$ sudo yum install suricata -y

Suricata をインストールしたら、起動してステータスを確認します。

$ sudo systemctl start suricata
$ sudo systemctl status suricata

Linux でソースから Suricata をインストールする

デフォルトの OS リポジトリは、Suricata の最新バージョンを提供しません。 Suricata の最新バージョンをインストールすることが目的の場合は、ソースからインストールする必要があります。

このガイドの執筆時点で、Suricata の最新バージョンは 6.0.5 です。 Ubuntu/Debian および RHEL ディストリビューションにソースから Suricata をインストールするには、次のライブラリ、コンパイル ツール、および依存関係をインストールします。

----------- On Debian Systems ----------- 
$ sudo apt install rustc build-essential cargo libpcre3 libpcre3-dbg libpcre3-dev make autoconf automake libtool libcap-ng0 make libmagic-dev libjansson-dev libjansson4 libpcap-dev libnet1-dev libyaml-0-2 libyaml-dev zlib1g zlib1g-dev libcap-ng-dev pkg-config libnetfilter-queue1 libnfnetlink0 libnetfilter-queue-dev libnfnetlink-dev -y

----------- On RHEL Systems ----------- 
$ sudo yum install gcc libpcap-devel pcre-devel libyaml-devel file-devel zlib-devel jansson-devel nss-devel libcap-ng-devel libnet-devel tar make libnetfilter_queue-devel lua-devel PyYAML libmaxminddb-devel rustc cargo lz4-devel -y

次に、suricata-update ツールをインストールして、Suricata ルールを更新します。

$ sudo apt install python3-pip           [On Debian]
$ sudo yum install python3-pip           [On RHEL]
$ pip3 install --upgrade suricata-update

次に、/usr/bin/suricata-update へのシンボリック リンクを作成します。

$ sudo ln -s /usr/local/bin/suricata-update /usr/bin/suricata-update

次に、wget コマンドに進みます。

$ wget https://www.openinfosecfoundation.org/download/suricata-6.0.6.tar.gz

ダウンロードしたら、tarball ファイルを抽出してインストールします。

$ sudo tar -xvf suricata-6.0.6.tar.gz
$ cd suricata-6.0.6
$ ./configure --enable-nfqueue --prefix=/usr --sysconfdir=/etc --localstatedir=/var
$ make
$ make install-full

Linux での Suricata の構成

Suricata の構成を開始するには、内部 IP と外部ネットワークを指定する必要があります。これを行うには、構成ファイルにアクセスします。

$ sudo vim /etc/suricata/suricata.yaml

HOME_NET ディレクティブには、Linux システムの IP アドレスを指定します。

HOME_NET: "[173.82.235.7]"

次に、EXTERNAL_NET ディレクティブを「!$HOME_NET」に設定します。

EXTERNAL_NET: "!$HOME_NET"

次に、Suricata がネットワーク トラフィックを検査するネットワーク インターフェイスを指定します。この場合、これは eth0 インターフェイスです。

ip コマンドを使用して、アクティブなネットワーク インターフェイスを確認できます。

$ ip a

構成ファイルで、インターフェイス ディレクティブをネットワーク インターフェイスの名前で更新します。

- interface: eth0

次に、default-rule-path 属性が /etc/suricata/rules に設定されていることを確認します。

次に、変更を保存して構成ファイルを閉じます。次に、変更を適用するために Suricata を再起動します。

$ sudo systemctl status suricata

Linux での Suricata ルールセットの更新

デフォルトでは、Suricata は /etc/suricata/rules ディレクトリにある限定された一連の検出ルールとともに出荷されます。ただし、これらは侵入の検出には弱く、効果がないと考えられています。 Suricata の最も包括的なルール セットと見なされる Emerging Threat (ET) ルールを読み込む必要があります。

Suricata は、外部プロバイダーからルールセットをフェッチする、suricata-update と呼ばれるツールを提供します。サーバーの最新のルールセットを取得するには、次のコマンドを実行します。

$ sudo suricata-update -o /etc/suricata/rules

出力から、suricata-update が無料の Emerging Threats ET Open ルールをフェッチし、それらを Suricata の /etc/suricata/rules/suricata ルール ファイルに保存していることがわかります。また、処理されたルールの数を示します。この例では、合計 35941 が追加されました。それらのうち、28221 が有効になり、18 が削除され、1249 が変更されました。

Linux での Suricata ルールセットの追加

suricata-update ツールを使用すると、ルールセット プロバイダーからルールを取得できます。 ET Open セットのように無料のものもあれば、有料のサブスクリプションが必要なものもあります。

ルール プロバイダーの既定のセットを一覧表示するには、示されているように suricata-update コマンドを実行します。

$ sudo suricata-update list-sources

tgreen/hunting ルールセットなどのルールセットを追加するには、次のコマンドを実行します。

$ sudo suricata-update enable-source tgreen/hunting

ルールセットを追加したら、 -o /etc/suricata/rules フラグを指定して、suricata-update コマンドをもう一度実行します。

$ sudo suricata-update -o /etc/suricata/rules

Linux での Suricata ルールのテスト

Suricata のテストを開始する前に、構成が適切かどうかをテストすることをお勧めします。これを行うには、次のコマンドを実行します。

$ sudo suricata -T -c /etc/suricata/suricata.yaml -v

エラーが報告されていないことを確認します。 RHEL、CentOS Stream、Fedora、および Rocky Linux を実行している場合は、Suricata を起動して有効にします。

$ sudo systemctl start suricata 
$ sudo systemctl enable suricata 

これまでのところ、Suricata を正常にインストールして構成し、ルールセットを更新しました。 ET Open ルール セットには、悪意のあるトラフィックを検出するための 30,000 を超えるルールが含まれています。このセクションでは、Suricata をテストして、疑わしいネットワーク トラフィックを検出できるかどうかを確認します。

Suricata のクイックスタート ガイドで推奨されているように、侵入をシミュレートして ET Open ルールセットをテストします。

IDS 機能は、NIDS (Network Intrusion and Detection System) フレームワークである testmynids.org Web サイトに HTTP 要求を送信することにより、署名 ID 2100498 でテストされます。

$ curl http://testmynids.org/uid/index.html

次の出力が得られるはずです。

uid=0(root) gid=0(root) groups=0(root)

送信される HTTP リクエストは、侵害されたリモート システムでシェルを介して実行される可能性のある id コマンドの出力を模倣することで、アラートをトリガーするように設計されています。

では、Suricata のログを調べて、対応するアラートを探してみましょう。 Suricata には、デフォルトで有効になっている 2 つのログ ファイルが同梱されています。

/var/log/suricata/fast.log
/var/log/suricata/eve.log

/var/log/suricata/fast.log ログ ファイルで、grep コマンドに対応するログ エントリを確認します。クイックスタート ドキュメントの 2100498 ルール識別子を使用してログ エントリを検索します。

$ grep 2100948 /var/log/suricata/fast.log

侵入を示す次の出力が表示されます。ここで、173.82.235.7 はサーバーのパブリック IP アドレスです。

09/09/2022-22:17:06.796434  [**] [1:2100498:7] GPL ATTACK_RESPONSE id check returned root [**] [Classification: Potentially Bad Traffic] [Priority: 2] {TCP} 13.226.210.123:80 -> 173.82.235.7:33822

または、次のように /var/log/suricata/eve.log ログ ファイルで署名 ID 2100498 を確認することもできます。

$ jq 'select(.alert .signature_id==2100498)' /var/log/suricata/eve.json

これは、Linux に Suricata をインストールして構成する方法に関する包括的なガイドでした。さまざまなインストール方法、Suricata を構成して Suricata ルールを更新する方法、Suricata systemd サービスを管理してネットワーク侵入テストを実行する方法について説明しました。

ネットワークの侵入や悪意のあるトラフィックからシステムを保護するために、Suricata を快適にインストールして使用できるようになることを願っています。