KUSANAGIでIDS/IPS(Suricata)を使う

KUSANAGIのバージョン8.4.0から、IDS/IPS(不正通信防御/検知システム)としてSuricataが利用出来るようになりました。

IPS/IDSは、DoS攻撃やSynフラッド攻撃といったものを検知し、ネットワークやサーバーを防御します。ただ、webアプリケーションの脆弱性を突くような攻撃は検知出来ない事もあるので、WAF(Web Application Firewall、ウェブアプリケーションファイアーウォール)の併用も必要です。KUSANAGIでのWAFの使用に関しては下記記事をご参照ください。

KUSANAGIのバージョン8.4.0から、WAF(Web Application Firewall、ウェブアプリケーションファイアーウォー...

KUSANAGIへのSuricata導入について、KUSANAGI公式ドキュメントに記載されているコマンドを実行した後で、設定ファイルの編集と起動の確認を行う必要があります。

なお、Suricata起動までの一連の作業は下記記事を参考にさせて頂きました。

CentOS 7 Suricata 4.0.4のソースファイルからのインストール

ネットワークインターフェース名とIPアドレスの確認

[root@kusanagi83 hoge]# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.1.11 netmask 255.255.254.0 broadcast 192.168.1.255
inet6 0000::0:0000:0000:0000 prefixlen 64 scopeid 0x20<link>
ether 00:00:00:00:00:00 txqueuelen 1000 (Ethernet)
RX packets 13830 bytes 17217988 (16.4 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 2451 bytes 192923 (188.4 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 36 bytes 2832 (2.7 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 36 bytes 2832 (2.7 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

一般的にインタフェース名はethで始まる名前です。名前が異なる環境(kusanagi for Vagrantとか)もありますが、”inet”のIPアドレスが”127.0.0.1″でないものを確認します。このインタフェース名とIPアドレスをメモしておきます。

Suricataの導入

インストール

[root@kusanagi83 hoge]# kusanagi addon install suricata
http://ftp.tsukuba.wide.ad.jp/Linux/fedora/epel/7/x86_64/repodata/repomd.xml: [Errno 14] curl#7 – “Failed connect to ftp.tsukuba.wide.ad.jp:80; 現在処理中の操作です”
他のミラーを試します。
Please tell me the interface card you would like to use to sniff packets from. [1-2]
(1) : eth0 (current)
(2) : lo
1
You choose: eth0
disabled
Created symlink from /etc/systemd/system/multi-user.target.wants/suricata.service to /usr/lib/systemd/system/suricata.service.

For more information about Suricata, please refer to the link below
https://suricata.readthedocs.io/en/latest/

INFO: add-on install was successful
完了しました。

”Please tell me the interface card you would like to use to sniff packets from.”では、調べておいたネットワークインターフェースを選択します。

このコマンドで、通常手動で行うべき下記の作業を済ませてくれるようです。

  • ユーザー作成
  • Suricataダウンロード
  • コンパイル
  • 所定の位置へディレクトリ作成とファイルコピー
  • サービスへの登録

Suricataの設定ファイルを編集

$ vi /etc/suricata/suricata.yaml

address-groupsの一部コメントアウトと追記

#HOME_NET: “[192.168.0.0/16,10.0.0.0/8,172.16.0.0/12]”
HOME_NET: “[サーバーのネットワーク]”

サーバーのネットワークは、メモしておいたサーバのIPアドレスが、例えば192.168.1.11であり場合、192.168.1.0/24とします。

host-os-policyの一部コメントアウトと追記

#windows: [0.0.0.0/0]
linux: [サーバーのネットワーク]

起動確認

サービスに登録されているので、サーバー起動時に自動実行されるはずです。サーバーを再起動後、systemctlコマンドで確認します。

[hoge@kusanagi83 ~]$ systemctl status suricata.service
● suricata.service – Suricata Intrusion Detection Service
Loaded: loaded (/usr/lib/systemd/system/suricata.service; enabled; vendor preset: disabled)
Active: active (running) since 日 YYYY-MM-DD HH:MM:SS JST; 0min ago
Main PID: 1039 (Suricata-Main)
CGroup: /system.slice/suricata.service
└─1039 /sbin/suricata -c /etc/suricata/suricata.yaml -i eth0 –user suricata
:
:

Oinkmasterによるルールの管理

Suricataのルールの自動更新を目的としてOinkmasterを入れてみます。

ダウンロードと設置

$ wget https://sourceforge.net/projects/oinkmaster/files/oinkmaster/2.0/oinkmaster-2.0.tar.gz
$ tar -xvzf oinkmaster-2.0.tar.gz
$ cd oinkmaster-2.0
$ cp -p oinkmaster.pl /etc/
$ cp -p oinkmaster.conf /etc/

設定ファイル編集

$ vi /etc/oinkmaster.conf

ルールのダウンロード元を指定

# url = //Download/comm_rules/Community-Rules.tar.gz
url = https://rules.emergingthreats.net/open/suricata-3.2/emerging.rules.tar.gz

ルールのダウンロード

$ /etc/oinkmaster.pl -C /etc/oinkmaster.conf -o /etc/suricata/rules

Suricataの設定ファイル編集

$ vi /etc/suricata/suricata.yaml

classification-fileとreference-config-file の項を変更します。

#classification-file: /etc/suricata/classification.config
classification-file: /etc/suricata/rules/classification.config
#reference-config-file: /etc/suricata/reference.config
reference-config-file: /etc/suricata/rules/reference.config

ただ、ルールの更新をしてもreference.configはrulesディレクトリにありません。とりあえず/etc/suricata/reference.configからコピーしておきました。

また、”rule-files:”で、読み込ませるルールファイルのコメントアウトを適宜外しておきます。

crontabへの追加

$ crontab -e
0 0 * * * /etc/oinkmaster.pl -C /etc/oinkmaster.conf -o /etc/suricata/rules