Ubuntu 16.04 LTSでpsadによるポートスキャン検知・ログ出力

自身にポートスキャンが行われた際に検知させたり、ログに出力させたりしたいと思ったので、何かいい方法ないかなぁ…と調べていたところ、psadというツールがあるようなので、ちょっと試してみることにした。で、インストールにはUbuntuを利用するのが楽そうなので、まずはUbuntu 16.04 LTSで試してみることにする。

1.psadのインストール

まずは、以下のコマンドでpsadをインストールする。

sudo apt-get install psad

インストール中、Postfixのメールサーバ形式について選択する画面が表示されるので、適当に選択、設定する。

2.psad・iptablesの設定

psadを利用するにあたり、iptablesでログを出力するような設定を行う。

sudo iptables -A INPUT -j LOG
sudo iptables -A FORWARD -j LOG
sudo iptables -L

blacknon@BS-PUB-UBUNTU-01:~$ sudo iptables -A INPUT -j LOG
blacknon@BS-PUB-UBUNTU-01:~$ sudo iptables -A FORWARD -j LOG
blacknon@BS-PUB-UBUNTU-01:~$ sudo iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
LOG        all  --  anywhere             anywhere             LOG level warning

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination
LOG        all  --  anywhere             anywhere             LOG level warning

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

rsyslogdの設定ファイルを編集しサービスを再起動してやる。

sudo sh -c 'echo "kern.info\t|/var/lib/psad/psadfifo" >> /etc/rsyslog.conf'
sudo /etc/init.d/rsyslog restart

次に、psadの設定ファイルである「/etc/psad/psad.conf」を編集する。
とりあえず、以下に記述した項目名と値を定義してやればいいだろう。

EMAIL_ADDRESSES   メールアドレス;      # アラートメールを飛ばすアドレス
HOSTNAME          ホスト名;                 # ホスト名
HOME_NET          192.168.XXX.0/24         # 一つしかインターフェイスがない場合は「NOT_USED」でよい。
EXTERNAL_NET      any;
SYSLOG_DAEMON     rsyslogd;                # rsyslogdに書き換え
IPT_SYSLOG_FILE   /var/log/syslog;         # Ubuntuのメインのログに書き換え
ENABLE_AUTO_IDS Y;                         # デフォルトでは無効化されている
AUTO_IDS_DANGER_LEVEL 1;                   # デフォルトでは5(テストのため、とりあえず1にしてる)

設定完了後、psadサービスを起動させる。

sudo /etc/init.d/psad restart
sudo psad --sig-update

3.ポートスキャンを実行する

psadの設定が完了したら、別のマシンからポートスキャンを実行する。
おそらく、結果を取得できないはずだ。

nmap 対象サーバ
[root@BS-PUB-CENT7-01 ~]# nmap XXX.XXX.XXX.XXX

Starting Nmap 6.40 ( http://nmap.org ) at 2016-08-18 08:50 JST
Nmap scan report for XXX.XXX.XXX.XXX
Host is up (0.00049s latency).
All 1000 scanned ports on XXX.XXX.XXX.XXX are filtered
MAC Address: 62:35:64:XX:XX:XX (Unknown)

Nmap done: 1 IP address (1 host up) scanned in 27.62 seconds

別マシンからのnmap実行後、psadをインストールしたマシンで以下のコマンドを実行すると、検知したスキャンのレポートが出力される。

sudo psad -S
blacknon@BS-PUB-UBUNTU-01:~$ sudo psad -S
[-] psad: pid file /var/run/psad/psadwatchd.pid does not exist for psadwatchd on BS-PUB-UBUNTU-01.BLACKNON.LOCAL
[+] psad (pid: 22868)  %CPU: 0.1  %MEM: 1.0
    Running since: Thu Aug 18 08:45:13 2016
    Command line arguments: [none specified]
    Alert email address(es): root@localhost

[+] Version: psad v2.2.3

[+] Top 50 signature matches:
      "MISC xfs communication attempt" (tcp),  Count: 2,  Unique sources: 1,  Sid: 1987
      "MISC MS Terminal Server communication attempt" (tcp),  Count: 2,  Unique sources: 1,  Sid: 100077
      "MISC VNC communication attempt" (tcp),  Count: 2,  Unique sources: 1,  Sid: 100202
      "BACKDOOR netbus Connection Cttempt" (tcp),  Count: 2,  Unique sources: 1,  Sid: 100028
      "DOS DB2 dos communication attempt" (tcp),  Count: 2,  Unique sources: 1,  Sid: 1641
      "DOS iParty DOS attempt" (tcp),  Count: 2,  Unique sources: 1,  Sid: 1605
      "BACKDOOR Doly 2.0 Connection attempt" (tcp),  Count: 2,  Unique sources: 1,  Sid: 119
      "POLICY vncviewer Java applet communication attempt" (tcp),  Count: 2,  Unique sources: 1,  Sid: 1846
      "MISC Radmin Default install options attempt" (tcp),  Count: 2,  Unique sources: 1,  Sid: 100204
      "P2P napster communication attempt" (tcp),  Count: 2,  Unique sources: 1,  Sid: 100090
      "POLICY HP JetDirect LCD communication attempt" (tcp),  Count: 2,  Unique sources: 1,  Sid: 510
      "P2P BitTorrent communication attempt" (tcp),  Count: 2,  Unique sources: 1,  Sid: 2181
      "MISC Microsoft PPTP communication attempt" (tcp),  Count: 2,  Unique sources: 1,  Sid: 100082
      "BACKDOOR DoomJuice file upload attempt" (tcp),  Count: 1,  Unique sources: 1,  Sid: 2375
      "P2P eDonkey transfer attempt" (tcp),  Count: 1,  Unique sources: 1,  Sid: 2586

[+] Top 25 attackers:
      172.28.XXX.YYY    DL: 3, Packets: 576, Sig count: 28
      172.28.XXX.ZZZ    DL: 1, Packets: 8, Sig count: 0

[+] Top 20 scanned ports:
      tcp 2068  2 packets
      tcp 1721  2 packets
      tcp 139   2 packets
      tcp 1043  2 packets
      tcp 20221 2 packets
      tcp 1049  2 packets
      tcp 51493 2 packets
      tcp 10621 2 packets
      tcp 6     2 packets
      tcp 4003  2 packets
      tcp 2605  2 packets
      tcp 1187  2 packets
      tcp 5900  2 packets
      tcp 7999  2 packets
      tcp 2045  2 packets
      tcp 19315 2 packets
      tcp 711   2 packets
      tcp 65000 2 packets
      tcp 32778 2 packets
      tcp 8087  2 packets

      udp 67    297 packets
      udp 138   4 packets
      udp 47269 2 packets
      udp 43368 2 packets
      udp 50860 2 packets
      udp 44927 1 packets
      udp 34611 1 packets

[+] iptables log prefix counters:
        [NONE]

    iptables auto-blocked IPs:
      172.28.XXX.YYY (3050 seconds remaining)
      172.28.XXX.ZZZ (3107 seconds remaining)

    Total protocol packet counters:
         tcp: 576 pkts
         udp: 309 pkts

[+] IP Status Detail:

SRC:  172.28.XXX.YYY, DL: 3, Dsts: 1, Pkts: 576, Total protocols: 1, Unique sigs: 8, Email alerts: 2, Local IP

    DST: 172.28.XXX.XXX, Local IP
        Scanned ports: TCP 3-65389, Pkts: 576, Chain: INPUT, Intf: eth0
        Total scanned IP protocols: 1, Chain: INPUT, Intf: eth0
        Signature match: "BACKDOOR Doly 2.0 Connection attempt"
            TCP, Chain: INPUT, Count: 2, DP: 6789, SYN, Sid: 119
        Signature match: "POLICY vncviewer Java applet communication attempt"
            TCP, Chain: INPUT, Count: 2, DP: 5801, SYN, Sid: 1846
        Signature match: "P2P eDonkey transfer attempt"
            TCP, Chain: INPUT, Count: 1, DP: 4242, SYN, Sid: 2586
        Signature match: "MISC Radmin Default install options attempt"
            TCP, Chain: INPUT, Count: 2, DP: 4899, SYN, Sid: 100204
        Signature match: "BACKDOOR DoomJuice file upload attempt"
            TCP, Chain: INPUT, Count: 1, DP: 3128, SYN, Sid: 2375
        Signature match: "MISC xfs communication attempt"
            TCP, Chain: INPUT, Count: 2, DP: 7100, SYN, Sid: 1987
        Signature match: "DOS iParty DOS attempt"
            TCP, Chain: INPUT, Count: 2, DP: 6004, SYN, Sid: 1605
        Signature match: "DOS DB2 dos communication attempt"
            TCP, Chain: INPUT, Count: 2, DP: 6789, SYN, Sid: 1641

SRC:  172.28.XXX.ZZZ, DL: 1, Dsts: 1, Pkts: 8, Total protocols: 1, Unique sigs: 0, Email alerts: 2, Local IP

    DST: 172.28.XXX.XXX, Local IP
        Scanned ports: UDP 34611-50860, Pkts: 8, Chain: INPUT, Intf: eth0
        Total scanned IP protocols: 1, Chain: INPUT, Intf: eth0

    Total scan sources: 2
    Total scan destinations: 1

[+] These results are available in: /var/log/psad/status.out

細かい設定もできるようなので、色々と試してみるのもよさそうだ。