LoginSignup
10
9

More than 5 years have passed since last update.

[IDS][Suricata] FreeBSDで始める侵入検知生活

Last updated at Posted at 2018-07-30

FreeBSDを使って、侵入(Intrusion)検知(Detection)生活(SeikatsuSystem)していきます。

この分野だと Snort が最も有名ですが、今回は使ったことのない Suricata を試してみます。

環境

  • OS: FreeBSD 11.2-RELEASE
  • ネットワークインターフェース名: em0

インストール

準備

IPSとして動かす場合にはipfwが必要です。
IPSとして動かす予定はないですが、一応入れておきます。

それぞれファイルに追記します。

/etc/rc.conf
firewall_enable="YES"           # Set to YES to enable firewall functionality
firewall_type="open"            # Firewall type (see /etc/rc.firewall)
/boot/loader.conf
ipfw_load="YES"
ipfw_nat_load="YES"
ipdivert_load="YES"
dummynet_load="YES"
libalias_load="YES"

Suricataをインストール

pkgを使ってさっくりと入れます。

pkg install suricata

とりあえず動かしてみる

-iオプションにネットワークインターフェース名を渡します。
--init-errors-fatalオプションを付けて、ルールにエラーがあったら落ちるようにします。

# suricata -i em0 --init-errors-fatal
22/7/2018 -- 14:11:03 - <Warning> - [ERRCODE: SC_WARN_FASTER_CAPTURE_AVAILABLE(275)] - faster capture option is available: NETMAP (--netmap=em0). Use --pcap=em0 to suppress this warning
22/7/2018 -- 14:11:03 - <Notice> - This is Suricata version 4.0.4 RELEASE
22/7/2018 -- 14:11:03 - <Warning> - [ERRCODE: SC_ERR_NO_RULES(42)] - No rule files match the pattern /usr/local/etc/suricata/rules/botcc.rules

ルールファイルがなくて落ちちゃいました。

ルールファイルを取得

oinkmasterをインストール

ルールをダウンロードするため、oinkmasterを使います。

pkg install oinkmaster

oinkmasterを設定

/usr/local/etc/oinkmaster.conf
url = http://rules.emergingthreats.net/open/suricata/emerging.rules.tar.gz
path = /bin:/usr/bin:/usr/local/bin
update_files = \.rules$|\.config$|\.conf$|\.txt$|\.map$

oinkmasterを実行

oinkmasterを実行します。

oinkmaster -o /usr/local/etc/suricata/rules

/usr/local/etc/suricata/rulesにファイルが保存されました。

# ls /usr/local/etc/suricata/rules/
BSD-License.txt                         emerging-dns.rules                      emerging-rpc.rules                      files.rules
app-layer-events.rules                  emerging-dos.rules                      emerging-scada.rules                    gen-msg.map
botcc.portgrouped.rules                 emerging-exploit.rules                  emerging-scan.rules                     gpl-2.0.txt
botcc.rules                             emerging-ftp.rules                      emerging-shellcode.rules                http-events.rules
ciarmy.rules                            emerging-games.rules                    emerging-smtp.rules                     modbus-events.rules
classification.config                   emerging-icmp.rules                     emerging-snmp.rules                     rbn-malvertisers.rules
compromised-ips.txt                     emerging-icmp_info.rules                emerging-sql.rules                      rbn.rules
compromised.rules                       emerging-imap.rules                     emerging-telnet.rules                   reference.config
decoder-events.rules                    emerging-inappropriate.rules            emerging-tftp.rules                     sid-msg.map
dns-events.rules                        emerging-info.rules                     emerging-trojan.rules                   smtp-events.rules
drop.rules                              emerging-malware.rules                  emerging-user_agents.rules              stream-events.rules
dshield.rules                           emerging-misc.rules                     emerging-voip.rules                     suricata-2.0-enhanced-open.txt
emerging-activex.rules                  emerging-mobile_malware.rules           emerging-web_client.rules               tls-events.rules
emerging-attack_response.rules          emerging-netbios.rules                  emerging-web_server.rules               tor.rules
emerging-chat.rules                     emerging-p2p.rules                      emerging-web_specific_apps.rules        unicode.map
emerging-current_events.rules           emerging-policy.rules                   emerging-worm.rules
emerging-deleted.rules                  emerging-pop3.rules                     emerging.conf

とりあえず動かしてみる(2)

ルールファイルができたのでまた動かしてみます。

em0--pcapオプションを使ったほうがよいらしいので、そうします。

# suricata  --pcap=em0 --init-errors-fatal
22/7/2018 -- 14:27:47 - <Notice> - This is Suricata version 4.0.4 RELEASE
22/7/2018 -- 14:27:57 - <Notice> - all 3 packet processing threads, 4 management threads initialized, engine started.

いい感じに動きました。

/var/log/suricataにファイルができています。

# ls /var/log/suricata/
eve.json        fast.log        stats.log       suricata.log

Suricataの初期設定

使いながらおいおい煮詰めていくことにして、とりあえずHOME_NETだけ設定しました。

/usr/local/etc/suricata/suricata.yaml
vars:
  address-groups:
    HOME_NET: "[10.1.1.0/24]"

ログのローテート

newsyslog任せにします。

次のファイルを作りました。

/usr/local/etc/newsyslog.conf.d/suricata.conf
# logfilename          [owner:group]    mode count size when  flags [/pid_file] [sig_num]
/var/log/suricata/*.log root:wheel      644  3     100  *  GJC    /var/run/suricata.pid

これは、3世代保存、100kb超えたらローテート、bzip2で圧縮し、ファイルがなければ作成、/var/run/suricata.pidファイルに書かれているプロセスIDにSIGHUPを送る、という意味です。

flagsにGを付けないと、ワイルドカードを使えません。

起動設定

OS起動時にsuricataも起動するようにします。

次のファイルに追記しました。

/etc/rc.conf.local
## Suricata the IDS 
##
suricata_enable="YES"   # Set to YES to enable suricata
suricata_interface="em0"    # Network interface(s) to sniff

確認

起動するか確認します。

/usr/local/etc/rc.d/suricata start
# ps axww | grep suricata
2843  -  Ss      0:07.75 /usr/local/bin/suricata -D --pcap=em0 --pidfile /var/run/suricata.pid -c /usr/local/etc/suricata/suricata.yaml

設置

IPSとして動かすのであれば、ブリッジにしたりしますが、今回はIDSにするだけなので、ルータかスイッチのポートをミラーリングしてパケットを拾います。

自分のとこでは、YAMAHA RTX1200を使っていました。

YAMAHA RTX1200の場合

SuricataをインストールしたマシンをLAN1のポート8に接続しました。
監視対象はLAN1のポート5です。

RTX1200へログインし、管理者モードで以下のコマンドを入力します。

lan port-mirroring lan1 8 out 5 in 5

ポート5への入出力双方をポート8へミラーリングします。

em0から伸びたケーブルをRTX-1200のLAN1ポート8に挿します。

トラブルシューティング

何も記録されいないときは、パケットが流れていないか拾えていないのかもしれません。

tcpdump -i インターフェース名

として、何かパケットキャプチャできるか見てみてください。何かキャプチャできるときは、suricataの設定がおかしいです。

もしかすると、インターフェースが寝ているのかもしれません。

ifconfig インターフェース名 up

として、インターフェースを起こしてください。

次は?

何か可視化ツールをインストールしてみます。
可視化の結果を見ながら、設定やルールを詰めていきます。

10
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
9