端口扫描攻击检测器 psad 是一个轻量级的系统守护进程,用 Perl 编写,旨在与 Linux iptables/ip6tables/firewalld 防火墙代码协同工作,检测可疑流量,如端口扫描和扫描、后门、僵尸网络命令与控制通信等。它提供了一组高度可配置的危险阈值(附带合理的默认值),详细的警报消息,包括源、目标、扫描端口范围、开始和结束时间、TCP 标志及对应的 nmap 选项、反向 DNS 信息、电子邮件和 syslog 警报、通过动态配置 iptables 规则集自动阻止恶意 IP 地址、被动操作系统指纹识别以及 DShield 报告。此外,psad 还集成了 Snort 入侵检测系统中包含的许多 TCP、UDP 和 ICMP 签名,用于检测高度可疑的各种后门程序扫描(如 EvilFTP、GirlFriend、SubSeven)、DDoS 工具(Mstream、Shaft)以及高级端口扫描(SYN、FIN、XMAS),这些扫描很容易通过 nmap 对机器进行利用。psad 还可以对通过 fwsnort 记录的 Snort 签名进行警报,fwsnort 利用 iptables 字符串匹配扩展来检测匹配应用层签名的流量。自 2.4.4 版本起,psad 还可以检测 Mirai 僵尸网络的 IoT 默认凭据扫描阶段。
完整的功能列表如下。
psad 可以为应用层缓冲区溢出攻击、可疑应用命令以及其他可疑的第 7 层流量生成警报。psad 提供与 gnuplot 和 afterglow 的集成,以生成恶意流量图。以下两个图来自 Honeynet Scan30 挑战中的 Nachi 蠕虫。第一张是由 afterglow 在 psad 分析 iptables 日志数据后生成的链接图:
"Nachi 蠕虫链接图"
第二张显示来自 Scan30 iptables 数据中每小时 Nachi 蠕虫流量:
"Nachi 蠕虫每小时流量图"
关于 psad 引用的配置关键字的信息,可以在 psad(8) 手册页以及以下链接中找到:
http://www.cipherdyne.org/psad/docs/config.html
psad 分析的所有信息都来自 iptables 日志消息。默认情况下,psad 读取 /var/log/messages 文件以获取新的 iptables 消息,并可选地将它们写入专用文件 (/var/log/psad/fwdata)。然后 psad 负责应用危险阈值和签名逻辑,以判断是否发生了端口扫描,发送适当的警报电子邮件,并(可选)阻止恶意 IP 地址。psad 包含一个信号处理程序,如果接收到 USR1 信号,psad 会将当前扫描哈希数据结构的内容转储到 /var/log/psad/scan_hash.$$,其中 "$$" 表示正在运行的 psad 守护进程的 PID。
注意:由于 psad 依赖 iptables 为未授权的数据包生成适当的日志消息,因此 psad 的效果取决于 iptables 规则集中包含的日志记录规则。因此,如果您的防火墙没有配置为记录数据包,那么 psad 将不会检测到端口扫描或任何其他内容。通常,设置防火墙的最佳方法是在规则集末尾使用默认的“丢弃并记录”规则,并在该规则之前包含仅允许应允许通过流量的规则。执行时,psad 守护进程将尝试确定是否存在此类默认拒绝规则,如果不存在,将警告用户。有关与 psad 兼容的防火墙规则集示例,请参阅 FW_EXAMPLE_RULES 文件。
此外,No Starch Press 出版的《Linux 防火墙:攻击检测与响应》一书中包含了对 psad 的广泛介绍,并且该书中的一个支持脚本与 psad 兼容。该脚本可在此处找到:
http://www.cipherdyne.org/LinuxFirewalls/ch01/
根据 Linux 发行版的不同,psad 可能已经存在于默认的软件包仓库中。例如,在 Debian 或 Ubuntu 系统上,安装只需一条简单的命令:
apt-get install psad
如果 psad 不在软件包仓库中,则可以使用 psad 源码中附带的 install.pl 脚本进行安装。如果已安装 psad,install.pl 脚本也可以处理升级。psad 需要几个 Perl 模块,这些模块可能尚未安装在您的 Linux 系统上。这些模块包含在 psad 源码的 deps/ 目录中,并由 install.pl 脚本自动安装。模块列表如下:
psad 还包含一个由 Marco d'Itri 编写的 whois 客户端(参见 deps/whois 目录)。该客户端在收集给定 IP 地址的正确 whois 信息方面比其他客户端做得更好。
与 psad 兼容的 iptables 配置的主要要求仅仅是 iptables 记录数据包。通常通过向 INPUT 和 FORWARD 链添加规则来实现,如下所示:
iptables -A INPUT -j LOG
iptables -A FORWARD -j LOG
上述规则应添加在 INPUT 和 FORWARD 链的末尾,在所有允许合法流量的 ACCEPT 规则之后,并且在相应的 DROP 规则之前,用于阻止不允许通过策略的流量。请注意,iptables 策略可能非常复杂,包括协议、网络、端口和接口限制、用户自定义链、连接跟踪规则等。有许多软件(如 Shorewall 和 Firewall Builder)可以构建 iptables 策略,并利用 iptables 提供的高级过滤和日志记录功能。通常,这类软件构建的策略与 psad 兼容,因为它们专门添加了指示 iptables 记录不属于合法流量数据包的规则。Psad 可以配置为仅分析包含特定日志前缀(通过 --log-prefix 选项添加)的 iptables 消息,但默认情况下,psad 会分析所有 iptables 日志消息,以寻找端口扫描、后门程序探测和其他可疑流量的证据。
psad 通常在 Linux 系统上运行,并且可在许多主要 Linux 发行版的软件包仓库中获得。如果在操作 psad 时遇到任何问题,请在 github 上提出问题。
psad 作为开源软件发布,遵循 GNU 通用公共许可证 (GPL v2+) 的条款。最新版本可在 https://github.com/mrash/psad/releases 找到。
psad 使用了 Snort(由 Marty Roesch 编写,请参见 http://www.snort.org)中提供的许多 TCP、UDP 和 ICMP 签名。Snort 是 Sourcefire, Inc. 的注册商标。
所有功能请求和错误修复均通过 github 问题跟踪进行管理。不过,您也可以通过电子邮件 (michael.rash_AT_gmail.com) 或 Twitter (@michaelrash) 联系我。