实验六 端口扫描攻击检测
YYQ And LSX
实验六 端口扫描攻击检测
1、 需求分析
针对内外网用户的恶意扫描检测,通过 snort 的端口扫描攻击检测,初步识别攻击的源
和目的地址,进行及时防御,将威胁降到最低,更好的保护公司单位网络的安全。
外网用户的恶意扫描探测
2、 实验原理
2.1 端口扫描基本知识
端口扫描向目标主机的 TCP/IP 服务端口发送探测数据包,并记录目标主机的响应。通
过分析响应来判断服务端口是打开还是关闭,就可以得知端口提供的服务或信息。端口扫描
也可以通过捕获本地主机或服务器的流入流出 IP 数据包来监视本地主机的运行情况,他仅
能对接收的数据进行分析,帮助我们发现目标主机的某些内在的弱点,而不会提供进入一个
系统的详细步骤。
端口扫描技术行为作为恶意攻击的前奏,严重威胁用户的网络,snort 通过扫描的行为
特征准确地识别出恶意的扫描行为,并及时通知管理员。
常用的端口扫描技术:
(1) TCP 端口连接扫描:这是最基本的 TCP 扫描。操作系统提供的 connect()系统
调用,用来与每一个感兴趣的目标计算机的端口进行连接。如果端口处于侦听状态,那
么 connect()就能成功。否则,这个端口是不能用的,即没有提供服务。这个技术的一
个最大的优点是,你不需要任何权限。系统中的任何用户都有权利使用这个调用。另一
个好处就是速度。如果对每个目标端口以线性的方式,使用单独的 connect()调用,那
么将会花费相当长的时间,你可以通过同时打开多个套接字,从而加速扫描。使用非阻
塞 I/O 允许你设置一个低的时间用尽周期,同时观察多个套接字。但这种方法的缺点是
很容易被发觉,并且被过滤掉。目标计算机的 logs 文件会显示一连串的连接和连接是
出错的服务消息,并且能很快的使它关闭。
(2) TCP SYN 扫描:这种技术通常认为是“半开放”扫描,这是因为扫描程序不必
要打开一个完全的 TCP 连接。扫描程序发送的是一个 SYN 数据包,好象准备打开一个
实际的连接并等待反应一样(参考 TCP 的三次握手建立一个 TCP 连接的过程)。一个
SYN|ACK 的返回信息表示端口处于侦听状态。一个 RST 返回,表示端口没有处于侦听态。
如果收到一个 SYN|ACK,则扫描程序必须再发送一个 RST 信号,来关闭这个连接过程。
这种扫描技术的优点在于一般不会在目标计算机上留下记录。但这种方法的一个缺点是,
必须要有 root 权限才能建立自己的 SYN 数据包。
(3) TCP FIN 扫描:有的时候有可能 SYN 扫描都不够秘密。一些防火墙和包过滤器
会对一些指定的端口进行监视,有的程序能检测到这些扫描。相反,FIN 数据包可能会
没有任何麻烦的通过。这种扫描方法的思想是关闭的端口会用适当的 RST 来回复 FIN 数
据包。另一方面,打开的端口会忽略对 FIN 数据包的回复。这种方法和系统的实现有一
定的关系。有的系统不管端口是否打开,都回复 RST,这样,这种扫描方法就不适用了。
并且这种方法在区分 Unix 和 NT 时,是十分有用的。
(4) IP 段扫描:这种不能算是新方法,只是其它技术的变化。它并不是直接发送
TCP 探测数据包,是将数据包分成两个较小的 IP 段。这样就将一个 TCP 头分成好几个
数据包,从而过滤器就很难探测到。但必须小心。一些程序在处理这些小数据包时会有
些麻烦。
(5) TCP 反向 ident 扫描:ident 协议允许(rfc1413)看到通过 TCP 连接的任何进程
的拥有者的用户名,即使这个连接不是由这个进程开始的。因此你能,举个例子,连接
1 / 3
实验六 端口扫描攻击检测
YYQ And LSX
到 http 端口,然后用 identd 来发现服务器是否正在以 root 权限运行。这种方法只能在
和目标端口建立了一个完整的 TCP 连接后才能看到。
(6) FTP 返回攻击:FTP 协议的一个有趣的特点是它支持代理(proxy)FTP 连接。
即入侵者可以从自己的计算机 a.com 和目标主机 target.com 的 FTP server-PI(协议解释器)
连接,建立一个控制通信连接。然后,请求这个 server-PI 激活一个有效的 server-DTP(数
据传输进程)来给 Internet 上任何地方发送文件。对于一个 User-DTP,这是个推测,尽管
RFC 明确地定义请求一个服务器发送文件到另一个服务器是可以的。但现在这个方法好
象不行了。这个协议的缺点是“能用来发送不能跟踪的邮件和新闻,给许多服务器造成
打击,用尽磁盘,企图越过防火墙”。 我们利用这个的目的是从一个代理的 FTP
服务器来扫描 TCP 端口。这样,你能在一个防火墙后面连接到一个 FTP 服务器,然后扫
描端口(这些原来有可能被阻塞)。如果 FTP 服务器允许从一个目录读写数据,你就能
发送任意的数据到发现的打开的端口。 对于端口扫描,这个技术是使用 PORT 命
令来表示被动的 User DTP 正在目标计算机上的某个端口侦听。然后入侵者试图用 LIST
命令列出当前目录,结果通过 Server-DTP 发送出去。如果目标主机正在某个端口侦听,
传输就会成功(产生一个 150 或 226 的回应)。否则,会出现"425 Can't build data
connection: Connection refused."。然后,使用另一个 PORT 命令,尝试目标计算机上的
下一个端口。这种方法的优点很明显,难以跟踪,能穿过防火墙。主要缺点是速度很慢,
有的 FTP 服务器最终能得到一些线索,关闭代理功能。
2.2 sfPortscan 预处理器
本实验通过攻击者常用的 Nmap 端口扫描工具进行端口扫描攻击,检测 snort 对端口扫
描攻击的检测能力。
sfPortscan 预处理器,是 snort 中端口扫描检测模块,可以检测各种不同类型的端口扫
描。通过 README.sfportscan 可以得多更多关于检测原理、警告类型以及端口扫描细节。
常用端口扫描预处理器的格式:
preprocessor sfportscan: proto { all } memcap { 10000000 } sense_level { low }
配置选项:
proto { tcp udp icmp ip all }:该参数列出你希望检测的协议类型。参数之间用空格分开
并且不能有逗号。
scan_type { portscan portsweep decoy_portscan distributed_portscan all }:该参数描述你
希望寻则检测的扫描类型,参数应用空格区分并且不能有逗号。
sense level { low|medium|high}:这个选项只需要一个参数,用来确定检测端口扫描的
敏感度水平。‘low’级别使用通用方法来查找响应错误,如 TCP RSTs 和 ICMP 无法到达,这
个级别需要最少的优化。medium 级别会检测端口扫描和过滤端口扫描(那些没有收到响应
的端口扫描),这个级别通常需要优化从 NATed IPs 以及 DNS cache servers 来的扫描事件。high
级别有最小的端口检测限制,比 medium 有更长的时间窗,需要 more tuning and may be noisy
on very active networks,然后这个界别捕获更多的扫描。
memcap { positive integer):分配给端口扫描的最大字节数。数字越高,越多节点可以
被跟踪。
logfile { filename }:指定端口扫描和详细端口扫描值的写入日志文件位置。如果没有以
/开头,snort 会写入配置的 log 目录。通过 README.sfportscan 查看更详细的关于项 log 文件
写日志的方法。
watchip { Snort IP List }:指定需要监视的主机列表。
ignore_scanners { snort IP list }:需要忽略的扫描主机列表。用来优化针对动态主机,如
2 / 3
实验六 端口扫描攻击检测
YYQ And LSX
Nat,nessus 主机等的警告。
ignore_scanned { Snort IP List }:需忽略已扫描主机列表。用来优化从 syslog servers 过来
的活动主机的警报。
detect_ack_scans:检测 ACK 扫描是很有必要的。然而,这也可能会导致错误警报,特
别是 under heavy load with dropped packets,这也是这个原型默认是 off 的原因。
eg:
preprocessor sfportscan: proto { all } /
memcap { 10000000 } /
sense_level { low }
3、 实验步骤
第一步:修改 snort 配置文件,修改策略
在 snort.conf 中写入如下内容:
preprocessor sfportscan: proto { all } \
memcap { 10000000 } \
sense_level { high }
确保 include $RULE_PATH/scan.rules 启用,将 scan.rules 内部规则规则全面的#去掉。
第二步:启动 snort
c:\snort\bin\snort -A full -c "c:\Snort\etc\snort.conf" -l "c:\Snort\log"
第三步:实施攻击
下载安装扫描软件 ScanPort 或 Nmap,同组主机使用扫描软件对虚拟机进行扫描。
「注」若第一次端口扫描后 portscan.log 没有日志,不要退出 snort,请同组主机进行第
二次端口扫描。
第四步:查看告警信息
[**] [1:1917:9] SCAN UPnP service discover attempt [**]
[Classification: Detection of a Network Scan] [Priority: 3]
04/26-19:24:57.761396 59.75.129.71:64267 -> 239.255.255.250:1900
UDP TTL:1 TOS:0x0 ID:1088 IpLen:20 DgmLen:161
Len: 133
[**] [1:1917:9] SCAN UPnP service discover attempt [**]
[Classification: Detection of a Network Scan] [Priority: 3]
04/26-19:25:00.807235 59.75.129.71:64267 -> 239.255.255.250:1900
UDP TTL:1 TOS:0x0 ID:1090 IpLen:20 DgmLen:161
Len: 133
思考题:如何监视具体网段是否存在恶意行为的端口扫描?
3 / 3