文章目录
-
- [Sestion 7:网络安全监控](#Sestion 7:网络安全监控)
-
- 网络安全监控基础知识
-
- 介绍
- 网络概览
- 网络可见性
- 网络边界
- 网络边界:监控与保护
-
- 监控边界
- 监控边界行动
- [场景 1:探测端口(端口扫描)](#场景 1:探测端口(端口扫描))
- 场景二:攻击Web服务器(SQL注入)
- [场景 3:猜测密码(VPN 暴力破解)](#场景 3:猜测密码(VPN 暴力破解))
- 边界日志:调查此次入侵事件
-
- 事件场景
- 调查日志
-
- 方法一:人工日志分析
- 侦察尝试
- VPN暴力破解/凭证访问
- 横向移动
- C2信标
- 数据泄露企图
- [方法二:通过 Splunk 分析日志](#方法二:通过 Splunk 分析日志)
- 结论
- 网络发现检测
- 数据泄露检测
-
- 数据泄露:概述、技术和指标
- [检测:通过 DNS 隧道进行数据泄露](#检测:通过 DNS 隧道进行数据泄露)
-
- DNS隧道
- 攻击迹象
- [通过 Wireshark 进行检测](#通过 Wireshark 进行检测)
- 查找过长的查询(可疑的子域名长度)
- [使用 Splunk 进行调查](#使用 Splunk 进行调查)
- 长查询名称(子域名编码)
- 检测:通过FTP泄露数据
- [检测:通过 HTTP 进行数据泄露](#检测:通过 HTTP 进行数据泄露)
-
- 为什么这很重要
- 攻击者如何利用HTTP进行数据窃取
- 攻击指标 (IoA)
- [在 Splunk 中分析日志](#在 Splunk 中分析日志)
- 网络流量分析
-
- [过滤 HTTP 流量](#过滤 HTTP 流量)
- [检测:通过 ICMP 进行数据泄露](#检测:通过 ICMP 进行数据泄露)
- 中间人攻击检测
-
- 介绍
- 中间人攻击概述
- [检测 ARP 欺骗](#检测 ARP 欺骗)
- 揭露DNS欺骗
-
- 简化的DNS协议
- 攻击指标
- 网络流量分析
-
- [缩小 DNS 流量范围](#缩小 DNS 流量范围)
- 过滤合法流量
- 检查DNS响应
- [来自 DNS 服务器的 DNS 响应](#来自 DNS 服务器的 DNS 响应)
- 对我们域名的DNS请求
- 除了DNS服务器之外的其他DNS响应。
- 分析概要
- [发现 SSL 剥离攻击](#发现 SSL 剥离攻击)
-
- 工作原理
- SSL剥离的指标
- 网络流量分析
-
- [缩小SSL 流量范围](#缩小SSL 流量范围)
- 检查我们服务器的SSL流量。
- [显示剥离之前的 DNS 重定向。](#显示剥离之前的 DNS 重定向。)
- [验证 TLS 是否消失](#验证 TLS 是否消失)
- 概括
- IDS基础知识
- Snort
Sestion 7:网络安全监控
网络安全监控基础知识
了解网络安全基础知识的关键方面,以及如何监控和防御攻击者。
介绍
网络是所有现代组织的支柱。服务器、工作站、应用程序和安全设备并非孤立存在,而是相互连接,形成一个完整的生态系统。网络边界将这个内部生态系统与外部互联网隔离开来,因此它往往是攻击者的首要目标。
- 学习目标
在这个房间里,我们将涵盖以下学习目标:- 了解什么是网络并识别其关键组成部分。
- 探讨网络边界的概念及其重要性。
- 识别关键的周边威胁。
- 检查防火墙日志,监控正常日志和可疑日志。
网络概览
在了解网络安全方面之前,重要的是要了解什么是网络,它由哪些组件或资产构成,以及它们是如何工作的。
网络组件------网络的基本组成部分
计算机网络并非只是设备的随机集合;它是一个有组织的结构,网络资产通过该结构连接起来,实现彼此之间以及与世界的通信、资源共享和连接。
小型企业网络
从安全角度来看,了解这些设备的功能及其重要性有助于快速识别可疑活动。我们以小型企业网络为例,了解其关键组件、用途以及它们在安全方面的重要性:

用户工作站(端点)
员工日常工作都在工作站(台式电脑、笔记本电脑)上进行。然而,这些工作站也是攻击者最常见的入侵途径,攻击者通常通过网络钓鱼邮件或恶意下载进行攻击。
- 例如:一封钓鱼邮件在金融用户的电脑上植入恶意软件。
- 重要性:终端通常较少受到监控,但一旦终端被攻破,攻击者就能以此为跳板横向移动。
重要性
端点日志可以揭示恶意进程,但网络日志可能首先显示C2(命令与控制)连接。
文件和数据库服务器
这些服务器存储着企业最重要的资产------数据。文件服务器提供对共享文档的集中访问,而数据库服务器则管理结构化数据,例如客户记录、人力资源信息或财务数据。
重要性
攻击者通常会以这些服务器为目标,因为攻破这些服务器意味着可以获取宝贵或敏感的数据。特别是勒索软件运营者,他们会专门攻击文件服务器以最大化其影响。数据窃取活动通常涉及将这些服务器上的数据悄悄转移到网络之外。
应用服务器(Web、电子邮件、VPN等)
这些服务器提供员工和客户每天都依赖的服务。
- 网络服务器:托管公司网站和网络应用程序。
- 电子邮件服务器:处理公司内部通信。
- VPN网关:允许对内部资源进行安全的远程访问。
重要性
由于应用服务器面向外部,因此它们是高价值的攻击目标。攻击者会不断扫描它们,寻找软件漏洞或配置缺陷。一旦利用了这些漏洞,攻击者往往就能进入内部网络。
从安全角度来看,我们需要监控应用程序日志、防火墙警报和入侵检测系统 (IDS)签名,以识别:
- 攻击尝试(例如,对 Web 应用程序进行SQL注入)。
- 对电子邮件或VPN服务进行暴力破解登录尝试。
- 可疑的外部IP地址与敏感应用程序进行交互。
活动目录(AD)/身份验证服务器
Active Directory 是大多数企业网络的身份管理核心。它管理用户、组、计算机及其访问权限。员工使用其AD凭据登录计算机、访问电子邮件、文件服务器和内部应用程序。
重要性
- AD是控制网络内所有用户帐户和系统的主要组件。
- 攻击者通常会以AD为目标,进行权限提升、持久化和横向移动。
- 一个被攻破的域管理员账户就可能导致整个企业瘫痪。
从安全角度来看,我们需要监控身份验证日志,以发现可疑行为,例如:
- 多次登录失败(密码喷洒攻击)。
- 来自外部IP 地址或在非正常时间的异常登录。
- 账户访问了它们通常不应该访问的系统。
路由器和交换机(网络基础设施)
路由器连接不同的网络,其中最重要的是将企业局域网连接到互联网。交换机连接同一网络内的设备,确保员工的电脑、打印机和服务器能够无缝通信。这些设备构成了企业的运转系统。
重要性:
虽然路由器和交换机在大多数企业环境中并不直接暴露在外,但如果遭到入侵,攻击者可以:
- 拦截和操纵网络流量(中间人攻击)。
- 通过重新路由流量创建后门。
- 开通通往互联网的隐藏通道。
防火墙/边界设备
防火墙是控制可信内部网络与不可信互联网之间流量的主要安全网关。它会检查传入和传出的数据包,并根据预定义的安全规则决定是否允许或阻止它们。现代防火墙还能对应用程序进行深度检查、入侵防御,甚至检测恶意软件。
重要性:
- 保护企业免受直接互联网攻击。
- 防止未经授权访问内部服务(例如数据库或RDP)。
- 记录每一次连接尝试,无论成功与否。这些日志通常是攻击(例如端口扫描、暴力破解或漏洞利用)的最早迹象。
现在我们已经了解了什么是网络,哪些组件连接起来形成网络,以及它们的用途和重要性,让我们进入下一个任务,探索关键的网络边界。
网络可见性
网络可视性在网络安全中至关重要。它指的是监控和了解整个网络运行状况的能力。这是安全分析师的核心原则:你无法防御你看不见的东西。有效的可视性能够实现威胁检测、事件调查和强大的安全态势。这并非意味着跟踪每一个数据包,而是拥有构建清晰网络图景的工具。缺乏可视性,你将对潜在威胁视而不见。
网络可见性主要来源于两个日志来源。您必须了解它们之间的区别,才能有效地拼凑出攻击时间线。
为什么提高曝光度至关重要?
想象一下,如果房子没有窗户或监控摄像头,我们该如何保护它?一旦有人试图闯入,我们可能根本察觉不到,直到为时已晚。网络可视性就像我们数字环境的"眼睛"。如果没有它,恶意软件感染、未经授权的访问和数据泄露等恶意活动就可能完全不被察觉。
有效的可视性使安全分析人员能够:
- 检测异常情况: 发现可能表明遭受攻击的异常模式。
- 调查事件: 将袭击事件的经过拼凑起来,以了解发生了什么。
- 威胁搜寻: 主动搜索网络中隐藏的攻击者。
- 确保合规性: 通过记录和监控网络活动来满足监管要求。
为了实现这一目标,我们主要依赖日志,日志记录了网络内部和各个设备上发生的事件。让我们来详细了解一下日志来源的两大类。
以主机为中心的日志

主机日志由网络上的各个设备(主机)生成,例如服务器、工作站和笔记本电脑。这些日志让我们能够详细了解特定机器上发生的情况。它们对于理解攻击对系统的直接影响至关重要。
关键主机中心日志源
- 操作系统日志: Windows 事件日志、Linux
syslog日志、macOS 日志。这些日志记录用户登录、进程创建、服务启动和登录失败等事件。 - 应用程序日志: 主机上运行的软件的日志,例如 Web 服务器(Apache、Nginx)、数据库(MySQL、MSSQL)和其他应用程序。
- 安全工具日志: 来自防病毒软件、端点检测和响应 ( EDR ) 代理和基于主机的入侵检测系统 ( HIDS ) 的日志。
主机中心日志的重要性
这些日志对于回答以下问题至关重要:
- 详细的取证分析: 了解攻击者在受感染的机器上执行的确切操作,例如访问、修改或删除了哪些文件。
- 进程和执行跟踪: 识别恶意进程的创建、未经授权的脚本(如PowerShell)的执行以及系统服务的更改。
- 用户活动监控: 追踪登录用户、登录时间和使用的权限。这对于检测外部攻击和内部威胁至关重要。
- 恶意软件影响评估: 确认恶意文件是否已执行,以及它对系统注册表、文件系统或正在运行的服务进行了哪些更改。
网络中心日志
主机日志告诉我们设备上发生了什么,而网络日志则告诉我们设备之间发生了什么。这些日志由位于网络中的网络设备生成,这些设备监控流经网络的流量。
- 它们显示的内容:源IP地址和目标IP地址、端口、协议以及采取的操作(例如,允许或阻止)。
- 它们的重要性在于: 它们能提供至关重要的"时间"、"地点"和"方式"。它们可以揭示攻击者的初始侦察尝试、系统间的横向移动或数据窃取企图。
要获得完整的信息,你需要将两者关联起来。可以这样理解:以主机为中心的日志告诉你房间内发生了什么,而以网络为中心的日志则告诉你谁进出过建筑物。

关键网络中心日志源
- 防火墙: 防火墙日志记录了根据预定义的安全规则允许或拒绝的每一个连接。防火墙日志是查找来自互联网的未经授权连接尝试的首要位置。
- 入侵检测/防御系统(IDS / IPS): 它们监控网络流量,寻找与已知恶意攻击(特征码)相匹配的模式或异常行为。它们的日志对于实时检测活跃攻击至关重要。
- 路由器和交换机: 虽然路由器等设备不进行传统意义上的日志记录,但它们可以生成流量数据。这些数据汇总了网络流量的交互过程,包括通信双方、通信时长以及数据传输量。它非常适合用来了解网络活动的总体概况。
- 网络代理: 对于通过代理路由网络流量的组织而言,这些日志是一座金矿。它们记录了每个网站用户的访问情况,从而可以了解基于网络的威胁、策略违规或数据泄露尝试。
- VPN: 这些设备用于管理员工的远程访问。它们的日志会跟踪谁在何时从何处连接到公司网络,这对于监控远程连接的安全性至关重要。
网络中心日志的重要性
网络中心日志的重要性网络中心日志提供了设备间以及网络边界内流量的高级概览。它们对于以下方面至关重要:
- 早期威胁检测: 在网络边缘识别威胁,防止其危害终端设备。这包括阻止端口扫描、暴力破解尝试以及来自已知恶意IP的连接。
- 识别命令与控制(C2): 发现受感染的内部主机与外部攻击者控制的服务器之间的通信模式。
- 追踪横向移动: 观察攻击者在内部网络中从一台受感染的机器移动到另一台受感染的机器。
- 检测数据泄露: 对异常大或可疑的出站数据传输发出警报,这可能表明存在数据泄露。
- 提供广泛的背景信息: 通过查看受感染主机尝试与哪些其他设备通信来了解攻击的范围。
有效的安全监控依赖于对主机日志和网络日志的双重检查。这种综合方法使分析人员能够构建出任何安全事件的完整、准确的时间线。
在本任务中,我们探讨了网络可见性,这是网络安全的关键概念。在下一个任务中,我们将探讨网络边界以及它们如何帮助我们监控和保护网络。
网络边界
网络边界是将组织内部网络(可信区域,例如员工、服务器、业务应用程序)与外部互联网(非可信区域)分隔开来的界限。它是数据进出网络的入口。您可以将其想象成安全建筑物的大门或正门。所有来自互联网的流量都必须经过此点才能进入您的网络,所有内部流量也必须经过此点才能离开互联网。网络边界是您的第一道也是最关键的防线。
- 内部网络是业务关键系统所在的位置。
- 外部互联网充满了潜在威胁。
- 周边区域是所有车辆通行的受控入口。
对于安全分析师来说,了解安全边界、其存在方式以及如何防御至关重要。
边界
网络边界由网络边缘的硬件设备定义。然而,在现代环境中,它还包括虚拟网关、云连接和远程接入点。
网络边界的常见组成部分包括:
- 防火墙:过滤内部网络和外部网络之间流量的守门人。
- 路由器/网关:用于路由流量和执行访问规则的设备。
- 非军事区(DMZ ):放置面向公众的服务器(Web、邮件、 VPN )的缓冲区网络段。
- 远程访问网关/VPN:为在办公室外工作的员工提供安全的入口点。
网络边界的重要性
网络边界如同守门人,控制着网络的进出。它并非单一设备,而是一系列安全控制措施和网络组件的集合,共同保护内部资产免受外部威胁。这些组件在管理、过滤和保护内部网络与外部网络之间的数据流方面发挥着不同的作用。
攻击者总是从外部开始探测。网络边界通常是第一道防线,也是安全运营中心(SOC)分析师最先发现恶意活动迹象的地方。
如果网络边界薄弱或配置错误,攻击者可以:
- 利用暴露的服务(例如RDP、MySQL、SMB)获取访问权限。
- 执行扫描和侦察,绘制网络地图。
- 对登录服务发起暴力破解攻击。
- 利用数据泄露渠道发送窃取的数据。
小型企业中的网络边界

想象一下一个小型企业网络:
- 防火墙位于互联网和内部局域网之间。
- 为了让客户能够访问网站,我们将网络服务器放置在非军事区 (DMZ)中。
- 内部服务器(AD、文件和数据库)位于防火墙后,只有员工才能访问。
- 办公室外的员工通过VPN网关连接。
这种设置确保只有受控流量才能到达内部网络,而公共服务则被隔离在更安全的区域中。
通常包括:
- 路由器:直接传输网络流量。
- 防火墙:检查和过滤网络流量。
- 非军事区( DMZ):提供面向公众的服务。
- VPN网关:安全远程访问。
为什么这很重要
网络边界是抵御外部威胁的第一道防线。攻击者会扫描边界IP 地址,寻找开放端口和漏洞。配置错误或防护薄弱的网络边界通常会导致:
- 未经授权的访问(例如,暴露的RDP / SSH)
- 数据泄露
- 恶意软件入侵
安全分析师的角色
作为安全分析师,监控网络边界意味着:
- 查看防火墙日志,确认是否存在被阻止/允许的连接。
- 识别扫描尝试或暴力破解登录尝试。
- 标记可能表明存在恶意软件信标或数据泄露的异常出站流量。
- 了解周边应该(和不应该)暴露哪些内容。
网络边界:监控与保护
在上一项任务中,我们讨论了网络边界、其重要性以及它如何作为可信内部系统与外部互联网之间的界限。攻击者会不断探测这条边界,寻找薄弱环节。接下来,我们将探讨各种场景,以及如何监控不同的网络边界,以识别威胁并加以防御。
监控边界
监控网络边界意味着使用防火墙、入侵检测/防御系统 ( IDS / IPS ) 和访问控制来检查和限制风险暴露,并强制执行安全规则。这使得安全分析人员能够:
- 及早发现攻击,例如端口扫描或暴力破解尝试。
- 检测导致敏感服务暴露的错误配置。
- 识别可能表明存在恶意软件或数据泄露的出站流量异常。
/Perimeter_logs/task6/以下场景中使用的边界日志可以在桌面上的文件夹中找到。
监控边界行动
以下几个场景说明了监控周边环境的重要性。
场景 1:探测端口(端口扫描)
攻击者正在测试您的网络,查看哪些端口是打开的还是关闭的,而防火墙则在履行其职责并阻止这些端口。
防火墙日志
c
2025-09-22 08:30:04 ALLOW TCP 198.51.100.45:49876 -> 10.0.0.51:80
2025-09-22 08:30:05 BLOCK TCP 203.0.113.10:50001 -> 10.0.0.20:21
2025-09-22 08:30:06 BLOCK TCP 203.0.113.10:50002 -> 10.0.0.20:22
2025-09-22 08:30:07 ALLOW TCP 192.0.2.115:51235 -> 10.0.0.50:443
2025-09-22 08:30:08 BLOCK TCP 203.0.113.10:50003 -> 10.0.0.20:23
2025-09-22 08:30:09 BLOCK TCP 203.0.113.10:50004 -> 10.0.0.20:25
2025-09-22 08:30:10 ALLOW TCP 198.51.100.92:51111 -> 10.0.0.50:443
2025-09-22 08:30:11 BLOCK TCP 203.0.113.10:50005 -> 10.0.0.20:53
日志细分
- 同一个外部 IP 地址 (203.0.113.10) 正在快速尝试连接到同一台内部机器上的多个端口。
- 分析师结论:这是一次典型的端口扫描。攻击者正在寻找可以攻击的开放服务。
场景二:攻击Web服务器(SQL注入)
公司网站正遭受攻击。入侵检测系统 (IDS) 比防火墙提供更多详细信息,可以识别攻击类型。
WAF(Web应用程序防火墙)日志
c
timestamp=2025-09-22T09:14:44Z src_ip=192.0.2.130 action=ALLOW request="GET /index.html"timestamp=2025-09-22T09:14:45Z src_ip=198.51.100.92 action=ALLOW request="GET /products.php?id=9"timestamp=2025-09-22T09:14:46Z src_ip=[REDACTED] action=BLOCK request="GET /search.php?q=<script>alert('XSS')</script>" rule_id=941100 attack_type="XSS"timestamp=2025-09-22T09:14:47Z src_ip=192.0.2.140 action=ALLOW request="GET /css/style.css"timestamp=2025-09-22T09:15:42Z src_ip=[REDACTED] action=BLOCK request="GET /../../../../etc/passwd" rule_id=930120 attack_type="Directory Traversal"........
日志细分
- 此日志显示了允许和阻止操作的混合情况。分析人员可以筛选 action=BLOCK 的操作,以便立即发现威胁。WAF 会完成繁重的工作,阻止请求并告知我们原因。
- attack_type=" SQL Injection" 警报显示攻击者试图转储数据库信息。
- attack_type=" XSS " 警报表示尝试注入恶意脚本。
- attack_type="Directory Traversal" 警报表明有人试图读取敏感的服务器文件。
- 分析师结论:WAF成功识别并阻止了来自可疑IP地址的多种网络攻击类型。这是一个高度可信的警报,表明攻击者正在积极攻击该网站。
场景 3:猜测密码(VPN 暴力破解)
攻击者试图猜测用户密码以获取对网络的远程访问权限。这会在身份验证日志中产生大量噪声。
VPN 网关日志
c
2025-09-22 10:12:11 FAILED_AUTH TCP [REDACTED]:31245 -> 10.0.0.1:443 (user 'admin')
2025-09-22 10:12:15 FAILED_AUTH TCP [REDACTED]:31248 -> 10.0.0.1:443 (user 'admin')
2025-09-22 10:12:21 SUCCESS_AUTH TCP 198.51.100.88:41233 -> 10.0.0.1:443 (user 'b.jones')2025-09-22 10:12:08 FAILED_AUTH TCP [REDACTED]:31249 -> 10.0.0.1:443 (user 'guest')2025-09-22 10:12:09 FAILED_AUTH TCP [REDACTED]:31250 -> 10.0.0.1:443 (user 'user')
日志细分
- 日志中充斥着 FAILED_AUTH 和 SUCCESS_AUTH 事件。
- 来自不同IP地址的少量成功登录是正常的。
- 问题在于故障数量巨大。
- 为了找到攻击,分析人员会按源 IP 地址筛选或分组日志。
- 这样做会立即揭示出,某个可疑用户在很短的时间内进行了数百次登录失败尝试。
- 分析师结论:检测到一个可疑IP地址正在对VPN网关发起暴力破解攻击。攻击者试图使用一系列常用用户名(例如"admin"、"root"、"test"等)来寻找可入侵的有效账户。零星的成功登录记录均为合法员工的正常流量。
要点总结
- 分析师的工作是将正常流量与可疑活动区分开来。
- 留意可疑模式。
- 从一个源到多个目的地的重复 = 扫描。
- 从一个源到另一个目标的重复操作 = 暴力破解。
- 流量以完美的、规律的时间间隔出现 = 恶意软件信标。
- 上下文至关重要。入侵检测系统 (IDS)发出的警报,如果能告诉你某个漏洞被标记的原因,比简单的防火墙拦截更有价值。
- 监控网络边界是检测攻击的第一步。
查看防火墙日志。哪个IP地址正在执行端口扫描?
head一下你会 发现有一个ip正在把端口+1的形式访问,那就是扫描的动作

python
203.0.113.10
在 WAF 日志中,哪个 单一源 IP 导致了所有被阻止的 Web 攻击?
grep "BLOCK" waf_logs.txt | cut -d' ' -f 2 | cut -d= -f2 | uniq -c

python
198.51.100.12
VPN 日志中,有多少次暴力破解尝试失败了?
grep "FAILED_AUTH" vpn_logs.txt | wc -l

python
90
哪个可疑 IP 地址被发现试图对 VPN 网关发起暴力破解攻击?
grep "FAILED_AUTH" vpn_logs.txt | cut -d' ' -f5 | cut -d: -f1 | sort -nr | uniq -c

python
45.137.22.13
边界日志:调查此次入侵事件
事件场景
Initech Corp是一家中型金融服务公司,最近部署了一套新的防火墙和入侵检测系统(IDS)来监控其网络边界。过去一个月,安全分析师注意到异常的流量模式,但安全运营中心(SOC)团队工作繁忙,未能进行更深入的分析。
作为一名新入职的安全分析师,你的任务是审查一个月的边界日志,以确定攻击者使用了哪些技术,以及他们是否成功突破了边界。
您已收到事件发生时的三份日志文件。这些日志文件Perimeter_logs/challenge位于桌面上的相应目录中。
- 防火墙日志:
firewall.log - WAF 日志:
ids_alerts.log - VPN日志:
vpn_auth.log

网络资产
Initech Corp 的网络包含以下资产。我们可以将其作为参考。
| IP | 主机名 | 角色 | 操作系统 | 团队 | 临界性 |
|---|---|---|---|---|---|
| 10.0.0.20 | FINANCE-SRV1 | 文件/财务服务器(SMB) | Windows Server | 财务IT | 高的 |
| 10.0.0.50 | VPN -GW | VPN网关 | Linux | 网络运维 | 批判的 |
| 10.0.0.51 | APP-WEB-01 | 内部网站/应用程序 | Linux | 应用团队 | 高的 |
| 10.0.0.60 | 工作站-60 | 员工工作站 | Windows 10 | 销售量 | 中等的 |
| 10.8.0.23 | VPN -客户端-攻击 | VPN分配客户端(临时) | 不适用 | 不适用 | 批判的 |
| 10.0.1.10 | DMZ-WEB | DMZ Web 服务器 | Linux | 网络运维 | 中等的 |
调查日志
有两种方法可以查看日志:手动使用命令行工具或使用 Splunk。
有关如何访问 Splunk 实例的说明将在文末提供。
方法一:人工日志分析
让我们先来查看日志,如下所示:
命令行: head firewall.log
c
ubuntu@tryhackme:~/Desktop/Perimeter_logs/challenge$ head firewall.log
2025-08-25 00:47:46 ALLOW TCP [REDACTED]:60317 -> 10.0.0.50:443
2025-08-25 01:29:33 ALLOW TCP 203.0.113.100:62718 -> [REDACTED]:443
2025-08-25 01:42:12 ALLOW TCP 203.0.113.100:55875 -> [REDACTED]:80
2025-08-25 03:30:47 ALLOW TCP [REDACTED]:63035 -> [REDACTED]:80
2025-08-25 04:06:58 ALLOW TCP 192.0.2.115:65458 -> [REDACTED]:25
2025-08-25 05:51:36 ALLOW TCP 203.0.113.100:56035 -> [REDACTED]:53
2025-08-25 06:09:50 ALLOW TCP 198.51.100.92:63418 -> [REDACTED]:8080
2025-08-25 07:39:29 ALLOW TCP [REDACTED]:55955 -> [REDACTED]:8080
2025-08-25 08:24:34 ALLOW TCP 198.51.100.92:63475 -> [REDACTED]:8080
2025-08-25 08:57:21 ALLOW TCP 198.51.100.92:58636 -> 10.0.0.50:53
查看 ID 日志,如下所示:
命令行: head ids_alerts.log
c
ubuntu@tryhackme:~/Desktop/Perimeter_logs/challenge$ head ids_alerts.log
2025-08-25 00:12:53 [**] [1:2003272:1] ET POLICY Suspicious HTTP [**] [Classification: Suspicious Activity] [Priority: 3] {TCP} 198.51.100.92:20127 -> [REDACTED]:22
2025-08-25 01:50:30 [**] [1:2003377:1] ET POLICY Suspicious HTTP [**] [Classification: Suspicious Activity] [Priority: 1] {TCP} 203.0.113.100:56603 -> [REDACTED]:25
2025-08-25 02:16:39 [**] [1:2003437:1] ET INFO Possible Benign Scan [**] [Classification: Suspicious Activity] [Priority: 3] {TCP} [REDACTED]:62546 -> [REDACTED]:21
2025-08-25 02:23:07 [**] [1:2003344:1] ET WEB_SERVER Possible SQL Injection [**] [Classification: Suspicious Activity] [Priority: 2] {TCP} 198.51.100.45:12396 -> [REDACTED]:22
2025-08-25 02:25:48 [**] [1:2003445:1] ET POLICY Suspicious HTTP [**] [Classification: Suspicious Activity] [Priority: 3] {TCP} 192.0.2.115:3952 -> [REDACTED]:22
2025-08-25 03:35:00 [**] [1:2003160:1] ET INFO Possible Benign Scan [**] [Classification: Suspicious Activity] [Priority: 1] {TCP} [REDACTED]:38760 -> [REDACTED]:443
2025-08-25 05:02:36 [**] [1:2003187:1] ET WEB_SERVER Possible SQL Injection [**] [Classification: Suspicious Activity] [Priority: 1] {TCP} 198.51.100.92:46776 -> [REDACTED]:3389
2025-08-25 06:04:26 [**] [1:2003179:1] ET INFO Possible Benign Scan [**] [Classification: Suspicious Activity] [Priority: 2] {TCP} 198.51.100.92:20632 -> 10.0.0.50:8080
2025-08-25 14:12:11 [**] [1:2003500:1] ET INFO Possible Benign Scan [**] [Classification: Suspicious Activity] [Priority: 2] {TCP} 192.0.2.115:30225 -> [REDACTED]:445
2025-08-25 15:30:03 [**] [1:2003354:1] ET POLICY Suspicious HTTP [**] [Classification: Suspicious Activity] [Priority: 3] {TCP} 203.0.113.100:27572 -> [REDACTED]:4444
查看如下所示的 VPN 日志:
命令行: head vpn_auth.log
c
ubuntu@tryhackme:~/Desktop/Perimeter_logs/challenge$ head vpn_auth.log
2025-08-25 08:25:10 [REDACTED] alice SUCCESS assigned_ip=10.8.0.143
2025-08-25 08:27:38 203.0.113.100 svc_[REDACTED] SUCCESS assigned_ip=10.8.0.131
2025-08-25 14:57:10 203.0.113.10 svc_[REDACTED] SUCCESS assigned_ip=10.8.0.116
2025-08-25 23:04:53 203.0.113.10 jsmith SUCCESS assigned_ip=10.8.0.31
2025-08-26 03:36:17 198.51.100.92 svc_[REDACTED] SUCCESS assigned_ip=10.8.0.62
2025-08-26 08:55:14 [REDACTED] bob SUCCESS assigned_ip=10.8.0.126
2025-08-26 10:02:45 198.51.100.92 svc_[REDACTED] SUCCESS assigned_ip=10.8.0.81
2025-08-27 03:11:33 198.51.100.45 bob SUCCESS assigned_ip=10.8.0.163
2025-08-28 02:52:16 192.0.2.115 alice SUCCESS assigned_ip=10.8.0.132
2025-08-28 03:20:33 [REDACTED] svc_[REDACTED] SUCCESS assigned_ip=10.8.0.193
侦察尝试
让我们首先分析防火墙日志中被阻止的请求,如下所示:
命令行: cat firewall.log | grep "BLOCK" | head
c
ubuntu@tryhackme:~/Desktop/Perimeter_logs/challenge$ cat firewall.log | grep "BLOCK" | head
2025-08-26 12:12:47 BLOCK TCP 203.0.113.10:64292 -> 10.0.0.50:21
2025-08-27 03:18:28 BLOCK TCP [REDACTED]:61701 -> [REDACTED]:23
2025-08-27 11:56:20 BLOCK TCP 203.0.113.10:64952 -> 10.0.0.50:22
2025-08-27 22:52:00 BLOCK TCP 203.0.113.10:63686 -> [REDACTED]:445
2025-08-28 10:00:00 BLOCK TCP [REDACTED]:50000 -> [REDACTED]:4444
2025-08-28 10:02:30 BLOCK TCP [REDACTED]:50005 -> [REDACTED]:22
检查被阻止的请求表明,已发现外部 IP 使用各种端口(22、23、21、445、3389)探测内部 IP。
让我们使用以下过滤方法来了解哪个 IP 地址导致了最多的 BLOCK 请求。
命令行: cat firewall.log | grep "BLOCK" | cut -d' ' -f5 | cut -d: -f1 | sort -nr | uniq -c
c
ubuntu@tryhackme:~/Desktop/Perimeter_logs/challenge$ cat firewall.log | grep "BLOCK" | cut -d' ' -f5 | cut -d: -f1 | sort -nr | uniq -c
279 [REDACTED]
46 203.0.113.10
26 [REDACTED]
我们已经发现了一个可疑的 IP 地址,我们可以利用它进行跳板操作,检查其他日志文件,并了解其中的关联性。
让我们使用以下查询来查找我们的防火墙是否允许了对可疑 IP 地址的任何请求,如下所示:
命令行: cat firewall.log | grep [REDACTED] | grep "ALLOW"
c
ubuntu@tryhackme:~/Desktop/Perimeter_logs/challenge$ cat firewall.log | grep [REDACTED] | grep "ALLOW"
2025-08-26 00:17:58 ALLOW TCP [REDACTED]:61009 -> [REDACTED]:4444
2025-08-26 22:04:34 ALLOW TCP [REDACTED]:55996 -> 10.0.0.50:445
2025-08-27 21:04:23 ALLOW TCP [REDACTED]:53944 -> 10.0.0.50:22
2025-08-28 15:50:50 ALLOW TCP [REDACTED]:56123 -> [REDACTED]:3389
2025-08-30 20:26:23 ALLOW TCP [REDACTED]:61685 -> [REDACTED]:4444
2025-09-02 09:25:06 ALLOW TCP [REDACTED]:50550 -> 10.0.0.50:22 -----------
2025-09-22 15:46:02 ALLOW TCP [REDACTED]:59771 -> [REDACTED]:23
2025-09-22 17:22:11 ALLOW TCP [REDACTED]:49360 -> 10.0.0.50:22
攻击者似乎利用漏洞入侵了内部网络。我们来检查一下 VPN 日志,看看能否找到更多攻击痕迹。
VPN暴力破解/凭证访问
在 VPN 日志中,我们首先使用以下命令检查失败尝试次数,如下所示:
命令行: cat vpn_auth.log | grep FAIL | cut -d' ' -f3 | sort -nr | uniq -c
c
ubuntu@tryhackme:~/Desktop/Perimeter_logs/challenge$ cat vpn_auth.log | grep FAIL | cut -d' ' -f3 | sort -nr | uniq -c
118 [REDACTED]
1 203.0.113.100
1 198.51.100.92
1 198.51.100.45
我们可以清楚地看到,可疑 IP 地址有多次 VPN 登录失败的尝试。现在,让我们使用以下命令来缩小可疑 IP 地址的范围,如下所示:
命令行: cat vpn_auth.log | grep [REDACTED]
c
ubuntu@tryhackme:~/Desktop/Perimeter_logs/challenge$ cat vpn_auth.log | grep [REDACTED]
2025-09-03 02:19:00 [REDACTED] svc_[REDACTED] FAIL
2025-09-03 02:19:10 [REDACTED] svc_[REDACTED] FAIL
2025-09-03 02:19:20 [REDACTED] svc_[REDACTED] FAIL
2025-09-03 02:19:30 [REDACTED] svc_[REDACTED] FAIL
--------
-----------
2025-09-03 02:19:40 [REDACTED] svc_[REDACTED] SUCCESS assigned_ip=[REDACTED]
2025-09-03 02:19:50 [REDACTED] svc_[REDACTED] SUCCESS assigned_ip=[REDACTED]
2025-09-04 16:45:24 [REDACTED] svc_[REDACTED] SUCCESS assigned_ip=10.8.0.181
2025-09-05 13:21:52 [REDACTED] jsmith SUCCESS assigned_ip=10.8.0.94
2025-09-09 17:54:00 [REDACTED] jsmith SUCCESS assigned_ip=10.8.0.187
2025-09-09 19:15:51 [REDACTED] jsmith SUCCESS assigned_ip=10.8.0.134
2025-09-10 12:24:20 [REDACTED] bob SUCCESS assigned_ip=10.8.0.39
上述结果表明,svc_REDACTED攻击者对某个用户进行了多次登录尝试,最终成功登录,并因此获得了一个本地 IP 地址。我们将选取第一个被分配的 IP 地址,并进一步分析日志文件中的相关痕迹。
横向移动
现在已经确认,攻击者已成功获得初始访问权限并控制了一个内部 IP 地址。让我们查看防火墙日志,看看能否找到从被入侵主机 IP 地址发起横向移动的任何痕迹REDACTED。
命令行: cat firewall.log | grep [REDACTED] | grep "ALLOW" | head
c
ubuntu@tryhackme:~/Desktop/Perimeter_logs/challenge$ cat firewall.log | grep [REDACTED] | grep "ALLOW" | head
2025-09-05 06:00:00 ALLOW TCP [REDACTED]:2000 -> [REDACTED]:22
2025-09-05 06:10:00 ALLOW TCP [REDACTED]:2001 -> [REDACTED]:445
2025-09-05 06:20:00 ALLOW TCP [REDACTED]:2002 -> [REDACTED]:22
2025-09-05 06:40:00 ALLOW TCP [REDACTED]:2004 -> [REDACTED]:3389
2025-09-05 07:30:00 ALLOW TCP [REDACTED]:2009 -> [REDACTED]:22
2025-09-05 08:00:00 ALLOW TCP [REDACTED]:2012 -> [REDACTED]:22
据观察,被入侵的 IP 地址正在探测内部机器10.0.0.20,在三个主要端口上的各个端口上10.0.0.51进行探测。 10.0.0.60``SMB/RDP/SSH (445/3389/22)
现在让我们转到 ids_alerts日志,筛选被入侵的 IP 地址,看看能否找到任何被触发的入侵规则,如下所示:
命令行: cat ids_alerts.log | grep [REDACTED] | head
c
ubuntu@tryhackme:~/Desktop/Perimeter_logs/challenge$ cat ids_alerts.log | grep [REDACTED] | head
2025-09-05 06:00:00 [**] [1:2000200:1] ET SCAN Possible SSH Scan [**] [Classification: Attempted Unauthorized Access] [Priority: 1] {TCP} [REDACTED]:2000 -> [REDACTED]:22
2025-09-05 06:10:00 [**] [1:2000201:1] ET EXPLOIT Possible MS-SMB Lateral Movement [**] [Classification: Attempted Unauthorized Access] [Priority: 1] {TCP} [REDACTED]:2001 -> [REDACTED]:445
2025-09-05 06:20:00 [**] [1:2000202:1] ET SCAN Possible SSH Scan [**] [Classification: Attempted Unauthorized Access] [Priority: 1] {TCP} [REDACTED]:2002 -> [REDACTED]:22
2025-09-05 06:30:00 [**] [1:2000203:1] ET EXPLOIT Possible RDP Brute Force [**] [Classification: Attempted Unauthorized Access] [Priority: 1] {TCP} [REDACTED]:2003 -> [REDACTED]:3389
2025-09-05 07:10:00 [**] [1:2000207:1] ET SCAN Possible SSH Scan [**] [Classification: Attempted Unauthorized Access] [Priority: 1] {TCP} [REDACTED]:2007 -> [REDACTED]:22
2025-09-05 07:20:00 [**] [1:2000208:1] ET EXPLOIT Possible RDP Brute Force [**] [Classification: Attempted Unauthorized Access] [Priority: 1] {TCP} [REDACTED]:2008 -> [REDACTED]:3389
2025-09-05 07:30:00 [**] [1:2000209:1] ET SCAN Possible SSH Scan [**] [Classification: Attempted Unauthorized Access] [Priority: 1] {TCP} [REDACTED]:2009 -> [REDACTED]:22
看来,被入侵的主机正试图利用上述主机上各种服务的漏洞。其中一条入侵检测系统 (IDS) 警报显示存在SMB漏洞利用,这很值得关注。让我们使用以下搜索查询来缩小搜索范围:
命令行: cat ids_alerts.log | grep -n [REDACTED] | grep 'SMB' | cut -d' ' -f6,7,8,9,10,19,21 | head
c
ubuntu@tryhackme:~/Desktop/Perimeter_logs/challenge$ cat ids_alerts.log | grep -n [REDACTED] | grep 'SMB' | cut -d' ' -f6,7,8,9,10,19,21 | head
EXPLOIT Possible MS-SMB Lateral Movement [REDACTED]:2001 [REDACTED]:445
EXPLOIT Possible MS-SMB Lateral Movement [REDACTED]:2006 [REDACTED]:445
EXPLOIT Possible MS-SMB Lateral Movement [REDACTED]:2010 [REDACTED]:445
EXPLOIT Possible MS-SMB Lateral Movement [REDACTED]:2016 [REDACTED]:445
EXPLOIT Possible MS-SMB Lateral Movement [REDACTED]:2033 [REDACTED]:445
EXPLOIT Possible MS-SMB Lateral Movement [REDACTED]:2035 [REDACTED]:445
以上结果证实,被入侵的主机能够利用SMB服务并实现横向移动。
C2信标
现在我们已经掌握了攻击者横向移动的证据。接下来,我们来寻找任何与 C2 通信相关的迹象。查看入侵检测系统 (IDS) 的警报,我们可以找到一条与 C2 信标相关的特定警报,这表明可能存在 C2 通信。让我们使用以下搜索查询来查看结果:
命令行: cat ids_alerts.log | grep C2 | head
c
ubuntu@tryhackme:~/Desktop/Perimeter_logs/challenge$ cat ids_alerts.log | grep C2 | head
2025-09-11 01:00:00 [**] [1:2001000:1] ET TROJAN Possible C2 Beaconing [**] [Classification: A network Trojan was detected] [Priority: 1] {TCP} [REDACTED]:30000 -> [REDACTED]:4444
2025-09-11 07:00:00 [**] [1:2001001:1] ET TROJAN Possible C2 Beaconing [**] [Classification: A network Trojan was detected] [Priority: 1] {TCP} [REDACTED]:30001 -> [REDACTED]:4444
2025-09-11 13:00:00 [**] [1:2001002:1] ET TROJAN Possible C2 Beaconing [**] [Classification: A network Trojan was detected] [Priority: 1] {TCP} [REDACTED]:30002 -> [REDACTED]:4444
2025-09-12 13:00:00 [**] [1:2001006:1] ET TROJAN Possible C2 Beaconing [**] [Classification: A network Trojan was detected] [Priority: 1] {TCP} [REDACTED]:30006 -> [REDACTED]:4444
2025-09-12 19:00:00 [**] [1:2001007:1] ET TROJAN Possible C2 Beaconing [**] [Classification: A network Trojan was detected] [Priority: 1] {TCP} [REDACTED]:30007 -> [REDACTED]:4444
2025-09-13 01:00:00 [**] [1:2001008:1] ET TROJAN Possible C2 Beaconing [**] [Classification: A network Trojan was detected] [Priority: 1] {TCP} [REDACTED]:30008 -> [REDACTED]:4444
2025-09-13 07:00:00 [**] [1:2001009:1] ET TROJAN Possible C2 Beaconing [**] [Classification: A network Trojan was detected] [Priority: 1] {TCP} [REDACTED]:30009 -> [REDACTED]:4444
这清楚地证实了我们对其中一台内部受感染主机的怀疑。
让我们对结果进行细分,筛选出负责C2信标攻击的被入侵 IP 地址,如下所示:
命令行: cat ids_alerts.log | grep -n [REDACTED] | cut -d' ' -f6,7,8,9,10,19,22,23 | head -n 15
c
ubuntu@tryhackme:~/Desktop/Perimeter_logs/challenge$ cat ids_alerts.log | grep -n [REDACTED] | cut -d' ' -f6,7,8,9,10,19,22,23 | head -n 15
POLICY Suspicious HTTP [**] [Classification:
WEB_SERVER Possible SQL Injection [**] [REDACTED]:3389
POLICY Suspicious HTTP [**] [Classification:
WEB_SERVER Possible SQL Injection [**] [REDACTED]:25
POLICY Suspicious HTTP [**] [Classification:
POLICY Suspicious HTTP [**] [Classification:
POLICY Suspicious HTTP [**] [Classification:
POLICY Suspicious HTTP [**] [Classification:
INFO Possible Benign Scan [**] [REDACTED]:443
WEB_SERVER Possible SQL Injection [**] [REDACTED]:53
这进一步证实了受感染主机正在执行其他可疑活动。我们可以使用以下命令显示针对受感染主机触发的警报统计信息。
命令行: cat ids_alerts.log | grep -n [REDACTED] | cut -d' ' -f6,7,8,9,10,19,22,23 | uniq -c | sort -nr | head
c
ubuntu@tryhackme:~/Desktop/Perimeter_logs/challenge$ cat ids_alerts.log | grep -n [REDACTED] | cut -d' ' -f6,7,8,9,10,19,22,23 | uniq -c | sort -nr | head
32 TROJAN Possible C2 Beaconing [**] {TCP} [REDACTED]:4444
5 POLICY Suspicious HTTP [**] [Classification:
3 TROJAN Possible C2 Beaconing [**] {TCP} [REDACTED]:4444
3 POLICY Suspicious HTTP [**] [Classification:
2 WEB_SERVER Possible SQL Injection [**] [REDACTED]:4444
2 TROJAN Possible C2 Beaconing [**] {TCP} [REDACTED]:4444
以上分析清楚地表明,我们的内部网络已完全被攻破,现在外部 IP 地址充当C2服务器,接收来自我们被攻破主机的C2信标。
命令行: cat ids_alerts.log | grep -n [REDACTED] | cut -d' ' -f6,7,8,9,10,19,22,23 | uniq -c | sort -nr | head
c
ubuntu@tryhackme:~/Desktop/Perimeter_logs/challenge$ cat ids_alerts.log | grep -n [REDACTED] | cut -d' ' -f6,7,8,9,10,19,22,23 | sort -nr | uniq -c | sort -nr
80 TROJAN Possible C2 Beaconing [**] {TCP} [REDACTED]:4444
32 INFO Possible HTTP POST Large {TCP} [REDACTED]:80
28 INFO Possible HTTP POST Large {TCP} [REDACTED]:8080
23 POLICY Suspicious HTTP [**] [Classification:
2 WEB_SERVER Possible SQL Injection [**] 10.0.0.50:53
2 WEB_SERVER Possible SQL Injection [**] 10.0.0.50:3389
2 WEB_SERVER Possible SQL Injection [**] [REDACTED]:8080
2 WEB_SERVER Possible SQL Injection [**] [REDACTED]:445
2 INFO Possible Benign Scan [**] 10.0.0.50:21
1 WEB_SERVER Possible SQL Injection [**] [REDACTED]:53
1 WEB_SERVER Possible SQL Injection [**] [REDACTED]:443
数据泄露企图
既然我们已经识别出C2通信并检查了其他针对可疑 IP 的警报,接下来让我们调查是否存在数据从我们网络泄露的迹象。我们将对受感染的主机应用过滤器,并检查源自这些主机到外部目标 IP 的流量,如下所示:
命令行: cat firewall.log | grep [REDACTED] | cut -d' ' -f5,6,7 | uniq | sort
c
ubuntu@tryhackme:~/Desktop/Perimeter_logs/challenge$ cat firewall.log | grep [REDACTED] | cut -d' ' -f5,6,7 | uniq | sort
[REDACTED]:40000 -> [REDACTED]:8080
[REDACTED]:40001 -> [REDACTED]:8080
[REDACTED]:40002 -> [REDACTED]:8080
[REDACTED]:40003 -> [REDACTED]:80
[REDACTED]:40004 -> [REDACTED]:80
[REDACTED]:40005 -> [REDACTED]:80
[REDACTED]:40006 -> [REDACTED]:80
[REDACTED]:40007 -> [REDACTED]:80
[REDACTED]:40008 -> [REDACTED]:80
[REDACTED]:40009 -> [REDACTED]:8080
[REDACTED]:40010 -> [REDACTED]:80
[REDACTED]:40015 -> [REDACTED]:80
[REDACTED]:40016 -> [REDACTED]:80
[REDACTED]:40017 -> [REDACTED]:8080
[REDACTED]:40018 -> [REDACTED]:80
[REDACTED]:40019 -> [REDACTED]:8080
输出结果清晰地显示,受感染的主机REDACTED 正在通过外部 IP 地址发送大量流量。我们还可以筛选 IDS 日志,查看内部 IP 地址针对这些活动触发的警报。
c
ubuntu@tryhackme:~/Desktop/Perimeter_logs/challenge$ cat ids_alerts.log | grep [REDACTED] | tail
2025-09-27 07:00:00 [**] [1:2002050:1] ET INFO Possible HTTP POST Large Upload [**] [Classification: Potential Data Exfiltration] [Priority: 2] {TCP} [REDACTED]:40050 -> [REDACTED]:8080
2025-09-27 11:00:00 [**] [1:2002051:1] ET INFO Possible HTTP POST Large Upload [**] [Classification: Potential Data Exfiltration] [Priority: 2] {TCP} [REDACTED]:40051 -> [REDACTED]:8080
2025-09-27 15:00:00 [**] [1:2002052:1] ET INFO Possible HTTP POST Large Upload [**] [Classification: Potential Data Exfiltration] [Priority: 2] {TCP} [REDACTED]:40052 -> [REDACTED]:80802025-09-28 07:00:00 [**] [1:2002056:1] ET INFO Possible HTTP POST Large Upload [**] [Classification: Potential Data Exfiltration] [Priority: 2] {TCP} [REDACTED]:40056 -> [REDACTED]:80
2025-09-28 11:00:00 [**] [1:2002057:1] ET INFO Possible HTTP POST Large Upload [**] [Classification: Potential Data Exfiltration] [Priority: 2] {TCP} [REDACTED]:40057 -> [REDACTED]:8080
2025-09-28 15:00:00 [**] [1:2002058:1] ET INFO Possible HTTP POST Large Upload [**] [Classification: Potential Data Exfiltration] [Priority: 2] {TCP} [REDACTED]:40058 -> [REDACTED]:80
2025-09-28 19:00:00 [**] [1:2002059:1] ET INFO Possible HTTP POST Large Upload [**] [Classification: Potential Data Exfiltration] [Priority: 2] {TCP} [REDACTED]:40059 -> [REDACTED]:8080
我们已发现数据泄露企图的证据。如果我们深入分析IDS警报,并通过其他日志文件关联这些警报,我们还可以发现更多可疑活动。
方法二:通过 Splunk 分析日志
作为安全运营中心 (SOC) 分析师,如果日志文件很大,手动分析日志会变得非常繁琐。因此,如果您决定使用 Splunk 进行日志分析,虚拟机中也提供了一个 Splunk 实例。
要继续操作,请在浏览器中打开链接localhost:8000,点击Search & Reporting左侧栏的标签页,然后开始分析日志。日志已预先导入index="network_logs",如下所示:

请回答以下问题。
查看防火墙日志。哪个外部IP地址执行的侦察活动最多?
cut -d' ' -f5 firewall.log | cut -d: -f1 | sort -nr | uniq -c
python
203.0.113.45
防火墙日志中,哪个内部主机成为了扫描目标?
cut -d' ' -f7 firewall.log | cut -d: -f1 | sort -nr | uniq -c
看计数最高的那个就是

python
10.0.0.20
VPN日志中针对的是哪个用户名?
cut -d' ' -f4 vpn_auth.log | sort -nr | uniq -c

python
svc_backup
VPN登录成功后,系统分配到的内部IP地址是什么?
这里答案是看203.0.113.45该ip最早登录进来的那个分配的ip,题目没有说清楚
我们使用splunk调查,若纯手工一直用终端查看日志会比较吃力

python
10.8.0.23
横向SMB尝试使用了哪个端口?
注意看,我这里查询的语句不是一下子写出来的,而是我一个个点的,比如我看ids的log的时候,看到alert字段里面有一个和smb相关的,那我就把他加进去筛选条件里面,然后就出来了,然后再看字段里面有port的,那点开即可看到445端口

python
445
在IDS日志中,哪个主机向C2服务器发送了信标?
那我们查所有ids,然后看alert字段中有没有对应的c2日志

然后点击他加进筛选字段即可

可以看到了,很容易使用splunk点点点即可,不用手动在终端上筛选
可以知道是10.0.0.60这个往c2服务器发送内容
python
10.0.0.60
调查过程中,发现哪个 IP 与 C2 相关?
即哪个服务器是c2

python
198.51.100.77
哪个主机显示了数据外泄尝试?
我们看下有没有和数据外泄相关的告警触发

筛选后,再看源ip即可

python
10.0.0.51
结论
了解到企业网络不仅仅是计算机和服务器的集合。它是一个生态系统,包含防火墙、活动目录、应用服务器、文件/数据库服务器、终端设备和无线接入点等关键组件。
- 网络边界充当可信网络和非可信网络之间的界限。
- 攻击者不断通过端口扫描、暴力破解和利用暴露的服务漏洞来测试这一边界。
- 通过监控网络边界,安全运营中心 (SOC)分析人员可以在攻击者深入网络之前发现这些早期迹象。
作为安全分析师,我们的职责是:
- 识别正常网络流量和可疑网络流量。
- 将异常活动上报至更高层级的安全运营中心(SOC)。
- 了解每个网络组件如何融入企业防御的整体架构中。
网络发现检测
了解攻击者如何发现网络中的资产,以及如何检测这种活动。
攻击者一旦想要攻击某个网络,首先必须深入了解目标网络。为此,攻击者会执行一些特定操作来发现目标网络。这通常是检测攻击者活动的首要步骤之一,也可能是安全运营中心 (SOC)分析师在值班期间最常观察到的攻击阶段之一。
- 目标:
我们希望能够理解:- 什么是网络发现?
- 攻击者为何执行网络发现
- 网络发现有哪些不同类型?
- 网络发现技术的工作原理,以及我们如何检测它们
网络发现
攻击者和网络发现
如前文所述,攻击者首先会尝试发现组织机构中可通过公共互联网访问的资产(称为攻击面)。
在发现阶段,攻击者会尝试获取以下部分信息:
- 攻击者可以访问哪些资产?
- 这些资产的IP 地址、端口、操作系统以及运行的服务分别是什么?
- 目前运行的是哪些服务版本?是否存在可被利用的漏洞?
简而言之,攻击者试图找到一个可以让他们利用网络漏洞的开口。

防御者和网络发现
另一方面,防御者有时也会运行执行网络发现活动的软件。在此过程中,防御者希望实现以下目标:
- 清点组织的所有资产,并确保所有资产都有据可查。
- 确保没有不必要的 IP 地址、端口或服务开放,并且运行的都是必要的。
- 确保漏洞得到修复,或者至少修复可被利用的漏洞。
简而言之,防守方会尽可能缩小进攻面。
检测网络发现的挑战
正如您可能已经注意到的,攻击者和防御者都会执行发现操作。许多研究机构、网络爬虫、搜索引擎等也会执行类似的发现操作,以绘制互联网上的资源分布图。安全运营中心 (SOC)团队必须区分好的发现和坏的发现。为了应对这一挑战,SOC团队通常会采用以下技术。
- 将已知的内部和良性外部扫描器列入允许列表,确保不会对这些来源触发任何警报。
- 将威胁情报与检测用例相结合,并仅标记来自已知恶意或可疑来源的扫描活动。
- 由于前一点可能会遗漏一些恶意扫描活动,一些团队会利用威胁情报来提高警报的严重程度,而不仅仅是触发警报。此外,他们还会添加一些通用用例来发出扫描行为警报,我们将在后续任务中学习这些用例。
请回答以下问题。
除了 IP 地址、端口和操作系统版本之外,攻击者还会扫描哪些内容来识别网络中的漏洞?
服务/指纹
python
Services
外部扫描与内部扫描
在讨论网络发现行为时,安全运营中心 (SOC)团队可能会遇到旨在映射目标网络上主机的活动。这些活动可以分为以下几种类型。
外部扫描活动
安全运营中心 (SOC)分析师可能会遇到来自组织网络外部的扫描活动,并扫描网络内部的机器,主要是位于网络边界的面向公众的资产。SOC分析师会发现,此类攻击的源 IP 地址是外部 IP 地址,而目标 IP 地址是属于组织的 IP 地址。这种扫描表明攻击仍处于MITRE ATT&CK 生命周期的侦察:https://attack.mitre.org/tactics/TA0043/阶段。攻击者尚未在网络内部建立立足点,正在进行初步侦察,以寻找获取网络初始访问权限的机会。

这种扫描处于攻击的初始阶段,攻击者尚未在网络中站稳脚跟,因此属于低危扫描。针对外部扫描活动,安全运营中心 (SOC)分析师可以在组织网络的边界防火墙上屏蔽恶意 IP 地址。但是,我们必须注意,攻击者可能会通过伪装其 IP 地址再次发起攻击。
内部扫描活动
安全运营中心 (SOC) 分析师可能观察到的另一种扫描类型是内部到内部的扫描活动。SOC分析师会发现源 IP 地址和目标 IP 地址均为组织内部网络的私有 IP 地址。这种类型的扫描从组织内部网络发起,并扫描同一网络中的资产。这种扫描表明攻击已进入MITRE ATT&CK 生命周期中的发现阶段。在其他一些框架中,它也可能被称为内部侦察,表明攻击者已在网络中站稳脚跟,并正在准备横向移动。

由于此类扫描表明攻击者已进入网络内部,因此属于高危警报。在确认这并非授权活动后,安全运营中心 (SOC)分析师将升级此警报并启动事件响应流程。在这种情况下,仅在防火墙上阻止源 IP 地址是不够的,需要对系统进行更深入的调查,并执行根本原因分析。
识别内部扫描和外部扫描
让我们看看防火墙日志中的扫描活动是什么样的。
在附加的虚拟机中,打开终端并导航到指定目录/home/ubuntu/Downloads/logs。该目录中会有一些CSV文件,这些文件是从 SIEM 解决方案导出的。虽然日志中包含一个经过脱敏处理的文件,但其他文件可能难以阅读。然而,这正是从安全设备中提取的真实日志文件的常见格式。我们可以使用命令head来预览文件内容。
powershell
ubuntu@tryhackme:~/Downloads/logs$ head -n2 log-session-1.csv "@timestamp","source.ip","source.port","destination.ip","destination.port","rule.name","rule.category","rule.action","network.protocol",message,"event.dataset""Sep 7, 2025 @ 17:16:42.944","203.0.113.25",39120,"192.168.230.145",5922,"-","-","-","-","{""ts"":1757265402.944286,""uid"":""CjxnoPYeUTSU7IAo"",""id.orig_h"":""203.0.113.25"",""id.orig_p"":39120,""id.resp_h"":""192.168.230.145"",""id.resp_p"":5922,""proto"":""tcp"",""conn_state"":""S0"",""local_orig"":true,""local_resp"":true,""missed_bytes"":0,""history"":""S"",""orig_pkts"":1,""orig_ip_bytes"":44,""resp_pkts"":0,""resp_ip_bytes"":0,""community_id"":""1:JbLPvC3YPB/75Ez5qzk/uYmWvg4="",""orig_mac_oui"":""VMware, Inc.""}","zeek.conn"
熟悉文件内容后,我们可以使用分隔符cut工具,来筛选 CSV 文件的不同列。请注意,由于日期包含逗号,我们需要相应地计算列的值。接下来,让我们浏览这些文件并回答以下问题。
哪个文件包含显示内部扫描活动的日志?
首先他这几个文件应该是分开的,每一个日志文件对应一个ip的会话动作
那我们就查看一下哪个ip是内部ip之间的扫描即可
head -n3 log-session-*

python
log-session-2.csv
执行内部扫描活动的内部 IP 地址有多少条日志记录?
解释:
没有 + 号:-n K(K 是正数),显示文件最后 K 行。
有 + 号:-n +K,从文件第 K 行开始,一直显示到文件末尾。
那我们就用+号
tail -n +2 filename
命令:tail -n +2 log-session-2.csv
python
2276
执行外部扫描活动的外部 IP 地址是什么?
查看一下另外两个文件

head -n2 log-session-0.csv log-session-1.csv
python
203.0.113.25
水平扫描与垂直扫描
一旦攻击者知道网络中存在哪些主机,他们通常会想要确定这些主机上哪些端口是开放的。这称为端口扫描,可以分为以下几种类型:
水平扫描
有时,攻击者会扫描多个目标 IP 地址上的同一端口。这种扫描称为水平扫描。水平扫描用于识别哪些主机暴露了特定端口。攻击者如果打算利用该特定端口,就可能执行此扫描。例如,WannaCry 勒索软件利用 SMBv1 漏洞在网络中传播,并扫描开放了 445 端口(用于SMB 协议)的计算机。

如果在多个事件中发现相同的源 IP 地址、单个目标端口,但多个目标 IP 地址,则可以从日志中检测到水平扫描。
垂直扫描
垂直扫描是指对单个主机 IP 地址的多个端口进行扫描。攻击者执行垂直扫描是为了掌握主机信息并识别其暴露的服务。当攻击者专注于识别单台机器上的漏洞时,他们可能会执行此操作,因为他们认为该机器基于自身目标具有重要价值。例如,如果一个组织仅将一台服务器暴露在互联网上,那么任何想要入侵该组织的攻击者都会首先对该服务器执行垂直扫描,以识别开放端口并了解机器上运行的服务。

如果在多个事件中观察到相同的源 IP 地址、相同的目标 IP 地址,但目标端口不同,则可以从日志中检测到垂直扫描。
有时攻击者可能会进行水平和垂直混合扫描,以获得两种扫描方式的优势。
请回答以下问题。
其中一个日志文件包含水平扫描的证据?格式为 XXXX/X
cut -d, -f3,4,5,6 log-session-2.csv

python
203.0.113.0/24
在同一日志文件中,有一个IP地址被执行了垂直扫描。请问这是哪个IP地址?
这里看回session0和1就很明显了,就只有一个ip正在扫描和被扫描
python
192.168.230.145
在某个IP地址上,只扫描了几个托管常用服务的端口。请问该IP地址扫描了哪些端口?格式:port1、port2、port3,按升序排列。
cut -d, -f6 log-session-2.csv| sort -nr | uniq -c | sort -nr | head -5

python
80, 445, 3389
扫描机制
现在我们已经了解了可以运行的不同类型的网络发现扫描,接下来让我们深入了解这些扫描的工作原理。
Ping 扫描
这是最基本的网络扫描技术之一。Ping 扫描通常用于识别网络中存在的(且在线的)主机。该扫描通过向主机发送互联网控制消息协议 (ICMP) 数据包来执行。如果主机在线,它会回复一个 ICMP 数据包。然而,如今一些组织的安全控制措施通常会阻止这种扫描,使得此类扫描活动更容易被破解。
TCP SYN 扫描
TCP连接通过三次握手建立,步骤分别为 SYN、SYN-ACK 和 ACK。网络扫描器有时会利用TCP握手的这一特性来识别在线主机及其开放端口。扫描器会向接收方发送 SYN 请求。如果收到 SYN-ACK 响应,则表示该主机在线,并且发送 SYN 连接的端口也处于开放状态。这种扫描方式较为隐蔽,通常与网络流量混杂在一起,更难被检测到。
UDP扫描
另一种识别在线主机和开放端口的方法是发送一个(通常是空的)UDP数据包。如果端口关闭,主机将返回一个ICMP端口不可达应答。这表明端口已关闭,但主机在线。在某些情况下,扫描器需要等待设定的超时时间才能收到响应。如果未收到响应,扫描器会将端口标记为已打开(但这并不能明确证明端口确实已打开)。极少数情况下,扫描器可能会收到UDP响应数据包,这才是端口已打开的证据。由此可见,UDP扫描不可靠且速度较慢,因为它依赖于等待超时时间,直到未收到任何响应才会进行扫描。
大多数组织经常进行内部扫描,以检查漏洞、监控恶意资产并识别任何可以缩小攻击面的机会。对于安全运营中心 (SOC)分析师来说,了解这些扫描的详细信息至关重要,例如扫描运行的 IP 地址、扫描类型以及任何扫描计划。理想情况下,为了减少干扰,这些扫描应从SOC团队的任何检测用例中排除。
识别扫描类型
我们来看看能否通过防火墙日志识别扫描类型。我们将使用Kibana来完成这项工作。
(这里是通过tryhackme给的靶场来操作)
请回答以下问题。
哪个源 IP 地址对整个子网执行 ping 扫描攻击?

python
192.168.230.127
zeek.conn.conn_state 值显示连接状态。利用此值提供的信息,确定 203.0.113.25 对 192.168.230.145 执行的扫描类型。

python
TCP SYN Scan
日志中是否有UDP扫描尝试?(y/n)
看一下字段占比即可,没有udp扫描

python
n
数据泄露检测
介绍
数据泄露是指未经授权将敏感数据从计算机或其他设备传输出去。这是攻击者入侵网络后的主要目标。作为安全运营中心 (SOC)分析师,我们的工作就是在敏感信息泄露之前检测并阻止此类行为。本次研讨会将介绍攻击者常用的数据窃取技术,更重要的是,我们将探讨如何当场抓获他们。
- 学习目标
我们将涵盖以下学习目标:- 了解常用的数据泄露方法。
- 学习如何利用网络流量分析来检测数据泄露企图。
- 识别终端设备上的数据泄露迹象。
- 在SIEM系统中关联日志,以发现隐藏的数据泄露通道。

数据泄露:概述、技术和指标
数据泄露是指未经授权将数据从组织传输到由敌对势力控制的外部目标。这可能是蓄意为之(内部人员),也可能是通过恶意软件/被盗凭证造成的。
攻击者为何要进行数据窃取
数据窃取是指从网络中窃取敏感信息的行为。攻击者进行数据窃取的原因有很多:
- 经济利益:被盗数据(例如信用卡信息、个人记录)可以在暗网上出售或用于欺诈。
- 间谍活动:国家行为体以获取知识产权、商业秘密或机密数据为目标,以获取战略优势。
- 勒索软件和敲诈勒索:攻击者窃取数据并威胁要泄露数据,除非支付赎金。
- 破坏与蓄意破坏:一些对手旨在通过泄露内部数据来损害声誉或业务。
- 持久性和侦察:泄露的数据有助于攻击者了解环境,以便进行未来的攻击。
威胁行为者及其数据窃取技术
下表列出了一些现实世界中的威胁行为者及其数据窃取方法。
| 威胁行为者/活动 | 渗出技术 | 描述 |
|---|---|---|
| APT29(舒适熊cozy-bear) | 通过合法域名使用HTTPS | 利用加密的 HTTPS 通道从政府网络窃取数据。 |
| FIN7 | 向C2服务器发送HTTP POST 请求 | 将窃取的数据嵌入HTTP POST请求中以逃避检测。 |
| 月球蜘蛛(Zloader) | 加密C2通道 | 利用加密通道进行了为期两个月的入侵,并分阶段实施了数据泄露。 |
| DarkSide勒索软件 | 双重勒索:加密+窃取 | 在加密系统前窃取数据,然后威胁要公开泄露。 |
| APT10(云跳跃者) | 云到云传输 | 利用云 API 从托管服务提供商处窃取数据。 |
与渗出相关的常见阶段
- 发现/收集:攻击者定位敏感文件。
- 预置/压缩:攻击者聚合、压缩、加密或编码文件(ZIP、RAR、7z、tar、base64、隐写术)。
- 外泄传输:通过网络、可移动介质、云或隐蔽渠道进行传输。
- 指挥与控制(C2)协调:协调传输并确认接收。
技术与指标
检测数据泄露需要关联主机和网络级别的指标,例如异常大或频繁的出站上传(代理/防火墙)、长时间或高熵的 DNS查询、可疑的进程命令行和网络连接(Sysmon / EDR)、云存储API活动、可移动介质事件,以及有效的SOC L1 分类,重点关注源主机/用户、目标、传输的卷、进程身份/命令行,以及代理、DNS、流、主机和云日志中的支持证据。
| 技术 | 示例 | 攻击指标及查找位置 |
|---|---|---|
| 基于网络 | HTTP /HTTPS 上传到S3 /Azure Blob/webmail、FTP /SFTP/SCP、DNS隧道、ICMP/隐蔽协议、自定义TCP / UDP。 | 代理/Web网关日志(大型POST请求、上传到云端点)、防火墙/NGFW流量(到单个IP/ASN的高字节数)、NetFlow(峰值/出站流量)、DNS日志(长主机名、TXT查询)。 |
| 基于主机 | PowerShell /Invoke-WebRequest、rclone、awscli、curl/wget、归档创建(zip/rar)、使用可移动 USB、ADS/隐藏流。 | Sysmon / EDR (进程创建、网络连接、文件创建事件)、Windows 安全(4663/4656 对象访问)、 Linux上的 auditd/shell 历史记录以及可移动介质事件。 |
| 云层外渗 | S3 PutObject/分段上传、Azure Blob 上传、Google Cloud Storage 对象插入、Drive/SharePoint 外部共享。 | CloudTrail / Azure 活动 / GCP 审计、云存储访问日志、异常服务帐户或 IP 活动。 |
| 隐蔽和编码 | DNS隧道、base64 或分块编码、图像/音频隐写术、将文件分割成许多小请求(低速)。 | DNS日志、 包含大量小型 POST 请求的代理日志、间歇性上传与可疑进程活动的关联。 |
| 内部人员和协作工具 | Slack/Teams/Dropbox/Google Drive/Box 上传或共享给外部用户;员工帐户被盗用。 | 审计日志(共享事件、文件下载)和邮件日志。 |
| 通用 IoA 和分诊信号 | 大量出站流量到外部IP /域、未知目标域、可疑进程/命令行、大量文件读取事件后建立出站连接以及多部分/流式上传。 | 关联:代理/防火墙/ Netflow、DNS、Sysmon / EDR(事件 ID 1/3/11)、邮件服务器日志。 |
数据泄露是一种影响巨大的威胁,它结合了机会主义手段、合法工具和巧妙的隐蔽渠道,将敏感资产转移到组织外部。有效的检测与其说是依赖于单一的警报,不如说是依赖于对主机、网络和云端遥测数据的快速关联,从而识别数据访问者、传输了哪些数据、数据是如何存储的以及数据被发送到了哪里。
在接下来的任务中,我们将探索攻击者用于执行数据窃取的各种技术,以及哪些指标可以帮助我们追踪攻击的痕迹。
请回答以下问题。
通过HTTP协议泄露数据属于哪种技术?
python
Network-based
检测:通过 DNS 隧道进行数据泄露
DNS数据窃取利用域名系统(DNS)这一通常允许在网络中流通的协议,将编码后的字节数据偷偷嵌入DNS查询/响应中,从而使防火墙和 Web 代理无法检测到。由于DNS通常被允许,并且经常未经过滤或转发到公共解析器,因此它对隐蔽渠道极具吸引力。
DNS隧道
DNS(域名系统)将易于理解的域名(例如example.com example.com)转换为IP地址,并提供其他记录类型(A、AAAA、TXT、MX、CNAME等)。要点:
- DNS 查询无处不在:几乎每个主机都会执行 DNS 查询。
- DNS 通常允许通过防火墙和网关,使其成为一个有吸引力的隐蔽通道。
- DNS 主要使用 UDP 协议,通过 53 端口进行查询和响应;TCP 协议用于区域传输或大型响应。
攻击者为何利用 DNS 进行数据窃取:
- 始终在线的服务:DNS 查询是例行操作,并且通常允许出站。
- 高覆盖率:除非仔细检查,否则查询看起来与普通请求无异。
- 灵活的有效载荷:数据可以编码到子域标签或 TXT 响应中。
攻击迹象
在分析 DNS 流量以寻找数据泄露的可能迹象时,我们应该关注以下方面:
- 大量 DNS 查询被发送到单个外部域,尤其是与基线相比,查询数量非常高。
- 子域名标签过长或完整查询名称过长(> 60-100 个字符)。
- 查询名称中存在高熵或类似 Base32/Base64 的模式(大量大小写混合的字母、数字、,
-符号,=用于 base64)。 - 罕见的记录类型(TXT、NULL)或许多大型 TXT 响应。
- 异常响应行为:频繁出现 NXDOMAIN(如果攻击者使用查询泄露而不进行响应),或者 DNS 出现 TCP/大型 UDP 分片。
- 定期查询(信标行为)。
通过 Wireshark 进行检测
下面介绍 Wireshark 显示过滤器、tshark 命令以及分析时需要注意的事项dns_exfil.pcap。
我们首先对 DNS 流量应用过滤器,使用如下所示的过滤器:
筛选: dns

筛选: dns.flags.response == 0,筛选出没有响应的DNS查询。

我们可以看到一些DNS条目的查询长度很大。
查找过长的查询(可疑的子域名长度)
让我们对查询长度应用筛选条件,看看能否缩小结果范围。
筛选: dns && frame.len > 70

上述结果识别出一个可疑域名,该域名正在接收这些可疑的DNS请求。让我们使用以下过滤器来筛选该可疑域名:
筛选: dns && dns.qry.name contains tunnelcorp.net

看来我们已经成功识别出DNS隧道攻击尝试。从网络流量中,我们可以观察到:
- 多台内部主机遭到入侵。
- 所有这些主机都使用DNS隧道技术分块发送数据。
- 只有一个外部域被确定为接收DNS查询的域。
让我们用 Splunk 来关联一下这些数据。
使用 Splunk 进行调查
打开 Splunk 实例。在搜索栏中,输入以下搜索查询。
搜索查询: index=data_exfil sourcetype=DNS_logs

此搜索查询将筛选并显示匹配的结果sourcetype=DNS_logs。
需要注意什么
在 DNS 日志中,我们需要查看那些看起来可疑的域名,这些域名可能来自多个主机或单个主机,查询次数巨大(如果该域名不受信任,则很可疑)。
让我们运行以下搜索查询,以显示每个源 IP 生成的 DNS 查询统计信息,如下所示:
搜索查询 :index="data_exfil" sourcetype="DNS_logs" | stats count by src_ip

现在让我们对查询统计信息应用筛选器,以识别可疑查询,如下所示:
搜索查询: index="data_exfil" sourcetype="dns_logs" | stats count by query | sort -count

以上结果清楚地显示了一些奇怪的 DNS 查询,查询语句的长度很大。
需要注意的事项:
我们可以观察单个主机产生的 DNS 请求数量远超正常水平的情况。
长查询名称(子域名编码)
现在,让我们对长度超过 30 的查询应用以下过滤器,看看能否过滤掉那些看起来异常的查询,如下所示:
搜索查询: index="data_exfil" sourcetype="DNS_logs" | where len(query) > 30 | table query

完美。通过以下指标,我们能够识别出通过DNS隧道进行的数据泄露尝试:
- 大量DNS请求没有得到响应。
- DNS查询语句过长。
请回答以下问题。
哪个可疑域名正在接收DNS流量?
python
tunnelcorp.net
观察到多少与 DNS 隧道相关的可疑流量/日志?
python
315
哪个本地IP发送的可疑请求数量最多?
筛选:
sql
index="data_exfil" sourcetype="DNS_logs" | where len(query) > 30
| stats count by src_ip
| sort - count

python
192.168.1.103
检测:通过FTP泄露数据
文件传输协议 ( FTP ) 是最古老的协议之一,用于在TCP /IP 网络上实现客户端和服务器之间的文件传输。攻击者利用 FTP 将大量数据从网络中转移出去,有时是通过泄露的凭据、配置错误的服务器或临时帐户。检测方法依赖于数据包检查(仅限FTP)、服务器日志、SSH会话元数据以及网络流量/大小/模式分析的综合分析。
攻击者如何利用FTP进行数据窃取
- 使用合法的FTP服务器(公共服务器或配置错误的内部服务器)来暂存/传输数据。
- 使用被盗用的凭证(服务帐户、用户凭证)。
- 使用非标准端口或隧道技术与其他流量混合。
攻击迹象
需要注意的事项:
USER和PASS命令(明文凭据)。STOR(上传)和RETR(下载)命令:重复或大批量传输。- 大量数据连接到不常见的外部 IP 地址,尤其是在非工作时间。
- 在临时端口(PASV)上打开数据通道,并配合大有效载荷。
我们来检查一下桌面上ftp-lab.pcap的文件/data_exfil/ftp_exfil/。请在 Wireshark 中打开该文件,并按照以下步骤操作:
隔离 FTP 控制和数据
ftp || ftp-data首先,我们将使用如下所示的过滤器查找 FTP 会话:

此过滤器将隔离FTP控制流量。
查找凭证
让我们筛选出仅显示使用用户名/密码登录的尝试:ftp.request.command == "USER" || ftp.request.command == "PASS"

从输出结果中,我们可以查找可疑的用户名或弱密码。
查找文件名或凭据中的异常情况
筛选 :ftp contains "STOR"

右键单击packet → Follow → TCP Stream,如下图所示:

我们可以通过筛选文件扩展名(例如 PDF、csv、TXT 等)来查找可疑文件。让我们对包含特定术语的 FTP 数据包应用筛选条件csv,如下所示:
筛选: ftp contains "csv"

以上结果显示,一个以访客身份连接的可疑 IP 地址已将一些敏感的 csv 文件传输到可疑的外部 IP 地址。
识别有效载荷较大的流量
使用过滤器查看长度较大的流量,ftp && frame.len > 90并检查TCP流中的内容,如下所示:

似乎有包含敏感信息的文档正在被传输到外部 IP 地址。请检查其他数据流,以查找更多通过HTTP协议泄露敏感文档的迹象。
请回答以下问题。
观察到有多少个来自访客帐户的连接?
筛选:ftp contains "guest"

python
5
应用筛选条件;从根帐户中提取出的客户相关文件的名称是什么?
筛选:ftp contains "root"
然后跟踪流即可看到

python
customer_data.xlsx
哪个内部 IP 地址向外部 IP 地址发送了最大的有效载荷?
筛选ftp协议,把长度排序一下即可

python
192.168.1.105
将 CSV 文件传输到可疑 IP 的 FTP 流中隐藏着什么标志?
直接看刚刚发现的最大长度的那个数据包就行了,跟踪流查看即可

python
THM{ftp_exfil_hidden_flag}
检测:通过 HTTP 进行数据泄露
通过HTTP 进行数据泄露是指攻击者使用 HTTP作为传输协议将敏感数据从目标网络转移出去。HTTP常被滥用,因为它能够与正常的网络流量混合,可以穿透防火墙和代理服务器,并且可以被混淆(编码、加密、隧道技术)。
本检测任务旨在教会安全运营中心 (SOC)分析人员如何从数据包捕获(Wireshark)和日志(Splunk )中识别基于HTTP的数据泄露迹象,并提供实用的搜索查询和调查步骤。
为什么这很重要
- HTTP协议非常普遍;攻击者会将数据窃取隐藏在合法的网络使用行为中。
- 成功检测可以阻止数据泄露,并有助于追踪攻击者在入侵后的活动。
- 组织必须检测并采取应对措施,以保护敏感数据并满足合规要求。
攻击者如何利用HTTP进行数据窃取
- POST 上传到外部服务器:大量数据通过 POST 请求正文发送到攻击者控制的主机或云存储。
- 带有编码数据的 GET 请求:攻击者将小块数据压缩到查询字符串或路径段中(适用于低速数据泄露)。
- 利用常用服务/CDN:将数据泄露伪装成上传到热门服务或攻击者控制的、信誉良好的域名下的子域名。
- 自定义标头 :放置在标头中的数据(例如,
X-Data: <base64>)可能会绕过一些基于字符串的 DLP。 - 分块传输/多部分传输:将大型有效负载拆分为多个请求,以避免大小阈值。
- HTTPS/TLS 隧道:加密通道隐藏有效载荷;检测需要 TLS 检查、SNI 分析或基于元数据的检测。
- 通过云服务进行部署:攻击者将文件上传到 Dropbox/GitHub/Gist,然后从外部获取。
对手会采取各种应对措施:低速慢攻、加密/编码以及利用合法服务来逃避检测。
攻击指标 (IoA)
常用网络指标
- 向外部/意外主机发出异常大的 HTTP POST 请求。
- 对信誉度低/在基础流量中很少出现的域名的 HTTP 请求。
- 频繁地向同一主机发送小请求(信标),然后进行大文件上传。
- 分块或多部分传输,其中多个请求组成一个更大的文件。
让我们检查 Splunk 中的 HTTP 日志,看看能否在日志中找到数据泄露尝试的迹象。
在 Splunk 中分析日志
首先,使用以下搜索查询来获取结果http_logs,并确保选择时间范围All Time,如下所示:
搜索查询: index="data_exfil" sourcetype="http_logs"

据我们了解,数据泄露尝试可以通过 POST 请求进行。我们将对 POST 方法应用过滤器,以进一步缩小搜索范围,如下所示:
搜索查询: index="data_exfil" sourcetype="http_logs" method=POST

现在让我们看一下发送到各个域的平均字节数,如下所示:
搜索查询: index="data_exfil" sourcetype="http_logs" method=POST | stats count avg(bytes_sent) max(bytes_sent) min(bytes_sent) by domain | sort - count

让我们过滤掉良性流量,并隔离有效载荷较大的 POST 请求。
搜索查询: index="data_exfil" sourcetype="http_logs" method=POST bytes_sent > 600 | table _time src_ip uri domain dst_ip bytes_sent | sort - bytes_sent
我们目前的分析指向一个可疑条目,其中大量数据被上传到了外部来源。让我们将此条目与 pcap 文件关联起来,以进一步展开分析。

我们目前的分析指向一个可疑条目,其中大量数据被上传到了外部来源。让我们将此条目与 pcap 文件关联起来,以进一步展开分析。
网络流量分析
打开文件夹http_lab.pcap中的文件/data_exfil/http_exfil/ 。
过滤 HTTP 流量
对HTTP流量应用过滤器,如下所示:
筛选 :http

我们可以看到包含 GET 和 POST 请求的HTTP流量。请筛选 POST 请求,如下所示:
筛选 :http.request.method == "POST"

过滤掉帧长度大于 500 的流量,如下所示:
筛选 :http.request.method == "POST" and frame.len > 500
此时应该仍然有很多噪声。让我们把筛选范围扩大到 750,看看能否进一步缩小结果范围。
筛选:http.request.method == "POST" and frame.len > 750

此请求仅显示一个条目,与我们在Splunk中找到的条目相同。让我们转到HTTP流以查看文件内容,如下所示:

请回答以下问题。
哪个内部被入侵的主机被用来窃取这些敏感数据?
python
192.168.1.103
泄露的数据中隐藏着什么标志?
python
THM{http_raw_3xf1ltr4t10n_succ3ss}
检测:通过 ICMP 进行数据泄露
ICMP 是一种网络层协议,用于诊断和控制(例如,ping、TTL超时)。由于它通常被防火墙允许通过,且通常受到的检查不如TCP / UDP严格,攻击者有时会滥用 ICMP 来建立隧道并窃取数据。恶意攻击者将数据编码到 ICMP 有效载荷(回显请求/应答、时间戳、信息)中,并将其发送到受其控制的远程监听器。
敌方如何利用ICMP进行数据窃取
常用技术:
- ICMP 回显(类型 8)/应答(类型 0)隧道:攻击者将编码(base64、十六进制)的文件块嵌入 ICMP 有效载荷中。远程服务器收集并解码这些文件块。
- 自定义 ICMP 类型/代码:使用不常见的 ICMP 类型或非零代码来避免基于签名的检测。
- 分片和重组:将较大的有效载荷拆分到多个数据包中。
- 加密/混淆:对有效载荷进行加密(常用 base64 编码),使其看起来像随机数据。
可能存在恶意行为的迹象:
- 与外部主机建立持续的 ICMP 会话,而该外部主机并非用于合法监控。
- 异常大的 ICMP 有效载荷或频繁的 ICMP 有效载荷大于典型 ping 大小。
- 包含高熵数据或与 base64/hex 一致的模式的 ICMP 有效载荷。
- ICMP 突发流量之后,同一主机上不会立即出现其他合法的应用流量。
Wireshark中的攻击指标
在 Wireshark 中检查pcap文件时,请查找以下内容:
- ICMP 数据包数量:单个主机向外部 IP 发送大量 ICMP 回显请求。
- 大型
frame.len或icmp.payload:有效载荷远大于典型值(例如,> 64 字节)的 ping 请求。 - ICMP 类型/代码异常值:例如,时间戳(13/14)或自定义代码的异常使用。
- 规律性定时(周期性):携带大小相似的有效载荷的 ICMP 数据包均匀间隔发送。
- 可重组的片段:来自同一源/目标对的多个 ICMP 片段。
过滤所有 ICMP 流量
以下过滤器会隔离所有 ICMP 数据包。请查找异常频繁或数据包大小较大的 ICMP 回显请求/回复。
筛选 : icmp

隔离icmp请求
让我们应用过滤器来隔离 ICMP 回显请求数据包,如下所示:
筛选 : icmp.type == 8

检查大型 ICMP 数据包
现在让我们对 ICMP 请求应用过滤器,并重点关注帧长度超过 100 的请求,如下所示:
筛选 :icmp.type == 8 and frame.len > 100

标记有效载荷异常大的数据包。正常的 ping 数据包总大小约为 74 字节。任何超过 100 字节的数据包都属于可疑数据包。
拷贝16进制数据出来,自己转换一下
python
3a0d0a54484d7b31636d705f336368305f337866316c7472347431306e5f737563633373737d0d0a2d2d2d0d0a46696c65204861736865733a0d0a20207365637265742e7478743a2039633866336532623761316434653566366337623861396430653166326133620d0a20206261636b75702e7461722e


中间人攻击检测
了解什么是中间人攻击,以及如何在网络流量中识别这种攻击的痕迹。
介绍
中间人攻击(MITM)是网络安全中最隐蔽的威胁之一。在这种攻击中,攻击者会将自身置于合法通信端点之间,拦截、篡改或重定向流量。从蓝队的角度来看,检测此类攻击需要采用多层方法,结合网络监控、证书验证和行为分析。
- 学习目标
主要围绕以下学习目标展开:- 了解常见的中间人攻击途径和技术
- 学习识别与中间人攻击相关的入侵指标
- 用于检测可疑流量模式的主控网络监控工具
- 针对中间人攻击场景,制定事件响应程序

中间人攻击概述
中间人攻击(MITM)是一种网络攻击,攻击者在未经双方(例如用户和服务方)同意的情况下,秘密拦截并可能篡改双方之间的通信。攻击者可能窃听以窃取敏感数据,例如凭证和信用卡信息,或注入恶意内容。此类攻击可针对任何组织或个人,尤其是在加密或身份验证薄弱的情况下。

中间人攻击的工作原理
中间人攻击通常包括两个主要步骤:
- 拦截:攻击者将自己插入通信流中,通常是通过利用网络协议中的弱点或使用ARP、DNS或 IP 欺骗等技术。
- 操纵/解密:攻击者试图访问或修改通信,解密编码数据或注入有害内容,例如篡改网站响应或伪造登录表单。
常见的中间人攻击类型
- 数据包嗅探:捕获通过网络(通常是开放的 Wi-Fi 网络)交换的未加密数据包。
- 会话劫持:窃取和使用会话令牌来冒充用户。
- SSL剥离:将HTTPS连接降级为不安全的HTTP连接,以窃取或篡改传输的数据。
- DNS欺骗:通过操纵DNS响应,将合法网站流量重定向到欺诈性域名。
- IP欺骗:制造看似来自受信任系统的恶意IP数据包。
- 非法Wi-Fi接入点:创建虚假网络以拦截用户流量。
真实案例
- 2017 年,Equifax 遭遇中间人攻击,导致重大数据泄露,超过 1 亿用户的敏感数据遭到泄露。
- 备受瞩目的攻击包括互联网服务提供商注入代码,以及国家行为体通过 SSL 欺骗拦截搜索流量。
中间人攻击和网络杀伤链
为了有效分析和应对安全事件,分析人员必须将警报置于更广泛的敌方行动模型中进行解读。孤立的指标只有在与攻击者的战术、技术和程序 (TTP) 相匹配时才具有意义。网络杀伤链是目前广泛采用的一种模型,它描述了高级网络入侵的典型阶段。
该框架由七个不同的阶段组成:
- 侦察:敌方收集目标情报,以发现其弱点。
- 武器化:攻击者将漏洞利用程序与恶意载荷捆绑在一起,打包成可投放的攻击程序。
- 投送:敌方将武器化包裹投送到目标环境中。
- 利用:攻击者的代码被触发,并利用软件、硬件或人为漏洞来获取初始访问权限。
- 安装:攻击者在受感染的资产上安装恶意软件或建立持久后门。
- 指挥与控制(C2):敌方建立隐蔽通道,与被入侵资产进行通信并控制该资产。
- 目标行动:敌方执行其最终目标,例如数据窃取、破坏或横向移动。
将中间人攻击置于网络杀伤链中
中间人攻击是一种用途广泛的技术,敌方主要在漏洞利用和安装阶段利用这种技术。
- 作为一种攻击手段: 中间人攻击利用了ARP和DNS等核心网络协议固有的信任机制和设计缺陷。攻击者通过操纵这些协议,可以拦截通信信道。这种会话拦截行为本身就是一种攻击手段,因为它破坏了网络的完整性,并为攻击者提供了窃听或主动操控的初始立足点。
- 作为安装途径: 一旦攻击者成功建立中间人攻击 (MITM)位置,他们便可控制数据流,并将其用作恶意载荷的传播媒介。例如,攻击者可以将浏览器漏洞利用程序、恶意软件投放器或远程访问木马 (RAT) 注入到合法的未加密下载文件中。此操作对应于安装阶段,在此阶段,攻击者会在受害者系统上建立持久性或部署其他恶意工具。
检测到中间人攻击是一项至关重要的发现。这表明攻击者正积极参与入侵的中间阶段,为安全运营中心 (SOC)提供了关键的干预机会,可以在攻击者最终目标达成之前介入并破坏攻击链。
检测 ARP 欺骗
在调查ARP欺骗攻击之前,必须了解ARP协议是什么、其用途以及攻击者如何滥用它来执行中间人攻击。
什么是ARP协议
ARP(地址解析协议)将本地网络中的 IP 地址映射到 MAC 地址。当一个设备想要向另一个 IP 地址发送数据时,它首先会询问:"谁拥有这个 IP 地址?"正确的设备会回复其 MAC 地址。
ARP欺骗
在ARP欺骗攻击中,攻击者发送伪造的ARP应答,诱使设备将攻击者的MAC地址与合法的IP地址(通常是默认网关地址)关联起来。这使得攻击者能够拦截、修改或重定向网络流量。
ARP欺骗的原理
ARP协议没有身份验证机制 。任何设备都可以发送未经请求的 is-at消息。攻击者利用此漏洞向受害者和网关发送伪造的ARP应答:
192.16.10.100攻击者声称自己02:fe:BB:cd:55:55是网关。
结果:
- 受害者的ARP缓存被污染。
- 所有发往网关的流量都会先经过攻击者(中间人攻击)。
攻击指标
在调查日志或网络流量以查找使用 ARP 欺骗的潜在中间人攻击时,我们可以寻找以下关键指标。
- 重复的 MAC 地址到 IP 地址映射:多个 MAC 地址声称拥有相同的 IP 地址。这表明存在冒充行为。
- 未经请求的 ARP 回复:大量 ARP 回复没有匹配的请求("无偿 ARP")。
- ARP流量异常: 短时间内出现大量ARP数据包。
- 异常流量路由:流量通过攻击者的 MAC 地址重新路由。
- 网关重定向模式: 同一网关 IP 地址对应多个目标 MAC 地址。
- ARP 探测/应答循环 :大量具有特定模式的 ARP 请求
Who has 192.168.1.x? Tell 192.168.1.y。
网络信息
针对所调查的案例,我们掌握了以下关于该网络的信息:
| 角色 | IP | 苹果 | 笔记 |
|---|---|---|---|
| 网关 | 192.168.10.1 | - | 正品路由器 |
| 攻击者 | - | - | - |
| 受害者 | - | - | - |
| 领域 | corp-login.acme-corp.local | - |
网络流量分析
让我们从检查ARP流量开始调查,看看如何识别和检测网络流量中的ARP欺骗。打开桌面上的network-traffic.pcap指定文件夹,然后按照以下步骤操作:the mitm_traffic
缩小 ARP 流量范围
由于我们关注的是 ARP 协议,我们可以先使用以下过滤器将其隔离出来。这样我们就可以检查请求/响应,并注意到异常的数量或模式。
筛选 :arp

你会看到指向 ARP 请求和响应的请求和回复(who-has和)。我们可以检查结果,查找任何异常或重复的请求或响应。is-at
提示:按 CTRL + ALT + 1 可固定显示时间。
ARP请求
让我们来看一下如下所示的 ARP 请求。
筛选:arp.opcode == 1

这显示了从不同主机捕获的所有ARP请求。
ARP响应
伪造的ARP欺骗通常使用未经请求的is-at回复(无偿/未经要求的回复)。这些都是强有力的特征。让我们来看一下如下所示的ARP响应:
筛选:arp.opcode == 2

此过滤器显示来自不同主机的ARP响应。仔细检查这些响应会发现多种响应,包括一些无意义的响应。合法的响应通常对应于最近的"谁拥有"请求。可疑活动则表现为大量没有明显请求的响应,或者来自可疑 MAC 地址的同一 IP 地址的重复通告。
免费ARP响应
可疑主机发送大量未经请求的(免费的)ARP应答,尤其是发送到多个目标地址。重复发送免费的ARP应答可能表明攻击者正在维持其恶意状态。我们还可以过滤这些免费的ARP数据包,如下所示:
筛选 :arp.isgratuitous

与网关相关的ARP流量
我们已经掌握了网关的 IP 地址和 MAC 地址信息。接下来,我们将应用以下过滤器来检查与该网关相关的ARP流量,如下所示:
筛选 :arp && arp.src.proto_ipv4 == 192.168.10.1 && eth.src == 02:aa:bb:cc:00:01

查看输出结果,我们只能看到ARP响应。现在,让我们缩小范围,根据网关 IP 地址进一步探测与该 IP 地址关联的 MAC 地址,使用如下所示的过滤器:
筛选 :arp.opcode == 2 && arp.src.proto_ipv4 == 192.168.10.1

这个输出结果看起来很有意思。仔细观察,我们发现一些ARP回复将网关的 IP 地址指向了可疑的 MAC 地址。这些ARP回复的频率表明这确实是ARP欺骗。让我们应用另一个过滤器来确认一下,如下所示:
筛选:arp.opcode ==2 && _ws.col.info contains "192.168.10.1 is at"

这个过滤器分为两部分。第一部分关注ARP响应,第二部分 _ws.col.info contains "192.168.10.1 is at"过滤信息列中显示的内容。这样就能过滤掉将网关 IP 地址 192.168.10.1 指向 MAC 地址的 ARP 响应。但仔细观察,我们可以发现攻击者使用了 ARP 欺骗技术,将 IP 地址伪装成 MAC 地址。我们也可以使用此过滤器arp.opcode == 2 && arp.src.proto_ipv4 == 192.168.10.1,结果相同。
检查可疑的 MAC 地址
既然我们已经识别出ARP欺骗攻击,接下来让我们使用以下过滤器,缩小范围,找到与网关 IP 地址关联的攻击者 MAC 地址:
筛选:arp.opcode == 2 && arp.src.proto_ipv4 == 192.168.10.1 && eth.src == 02:fe[REDACTED]

结果清楚地证实了攻击者欺骗了ARP。
检查重复的 IP 地址到 MAC 地址映射
最后我们可以检查和确认的是,通过筛选"检查是否存在与单个 IP 地址重复的 MAC 地址映射"来进行确认。
筛选 : arp.duplicate-address-detected || arp.duplicate-address-frame

该结果表明攻击者成功实施了ARP欺骗,并将自身置于受害者和网关之间。接下来,我们将探讨攻击者如何实施DNS欺骗攻击以实现重定向。
请回答以下问题。
观察到来自网关 MAC 地址的 ARP 数据包数量是多少?
因为我们已经知道了网关ip,筛选ip后再选择这个mac地址进行筛选


python
10
攻击者使用了哪个 MAC 地址来冒充网关?
筛选:arp.opcode == 2 && arp.src.proto_ipv4 == 192.168.10.1
可以看到有一个确实不是网关的mac,然后通知给其他人了,这就代表已经被冒充了

python
02:fe:fe:fe:55:55
对 192.168.10.1 观察到了多少次免费 ARP 回复?
筛选:arp.isgratuitous && arp.src.proto_ipv4 == 192.168.10.1

有多少个不同的 MAC 地址声称拥有同一个 IP 地址 (192.168.10.1)?
筛选:arp.opcode == 2 && arp.src.proto_ipv4 == 192.168.10.1
然后可以肉眼看下有多少个src的mac不一样,其实就两个,一个是真正的网关,另一个是hacker的

python
2
总共观察到攻击者发送了多少个 ARP 欺骗数据包?
筛选:(arp.opcode == 2 && arp.src.proto_ipv4 == 192.168.10.1) && (eth.src == 02:fe:fe:fe:55:55)

python
14
揭露DNS欺骗
简化的DNS协议
首先,我们来了解一下 DNS 。你可以把它想象成手机里的通讯录。你不会记住朋友的电话号码,而是直接点击他们的名字。同样地,DNS会将人类可读的网站名称(例如 www.google.com)转换成计算机可读的IP地址。
DNS欺骗(或DNS缓存投毒)是指攻击者破坏此系统。他们会给你的计算机提供一个错误的"电话号码",让你无法访问该网站。
这是一种强大的中间人攻击(MITM)技术。其工作原理如下:
- 受害者 试图前往他们的银行
my-real-bank.com。 - 攻击者已经进入本地网络(可能是通过 ARP 欺骗),拦截受害者的DNS查询。
- 欺骗: 攻击者迅速向受害者发送伪造的DNS响应
my-real-bank.com。该伪造响应显示,我的 IP 地址是:ATTACKER_IP。 - 拦截过程: 受害者的计算机信任这个伪造的响应,并将其保存在DNS缓存中。当受害者尝试连接到他们的银行网站时,他们会在不知不觉中直接连接到攻击者的服务器,该服务器可能托管着一个与真实银行网站完全相同的副本。
攻击者现在正在in the middle捕获受害者输入的所有内容,包括他们的用户名和密码。

攻击指标
在调查日志或网络流量以查找使用DNS欺骗的潜在中间人攻击时,我们可以寻找以下关键指标 。
- 同一查询出现多个DNS响应:一个合法的解析器和一个伪造的解析器都对同一查询作出了响应。这是最可靠的鉴别指标。
- 来自意外来源的DNS 响应: DNS响应来自与(如 8.8.8.8 或您的DNS服务器)都不匹配的IP 地址。
- 可疑的 TTL(生存时间)值过短:攻击者使用非常低的 TTL(1 - 30 秒)来缩短被污染条目的生存时间并重新夺回控制权。
- 未经请求的DNS响应:在没有受害者发出相应DNS请求的情况下,出现了DNS响应。
网络流量分析
缩小 DNS 流量范围
由于我们关注的是 DNS 协议,我们可以先使用以下过滤器将其隔离。这样我们就可以检查请求/响应,并发现异常的数量或模式。
筛选 :dns

输出结果包含DNS请求和相应的响应。
过滤合法流量
合法的DNS服务器(例如谷歌的DNS服务器8.8.8.8)会使用已知的外部IP地址进行响应。通过筛选来自该IP地址的响应,我们可以查看不同的normal解析结果,以便进行比较。
筛选 :dns.flags.response == 1 && ip.src == 8.8.8.8

结果显示来自合法DNS服务器的有效DNS应答。
检查DNS响应
让我们使用下面的过滤器 来查看DNS响应。
筛选 :dns.flags.response==1

在输出结果中,我们可以查找来自非常用DNS服务器 IP 地址的响应。仔细查看后,我们发现了一个来自非常用 IP 地址的 DNS8.8.8.8响应。这是一个有趣的发现。虽然我们发现了一个异常的 DNS 请求,表明可能存在 DNS 欺骗攻击,但我们会先记录下来,稍后再进行分析。
来自 DNS 服务器的 DNS 响应
以下筛选器将显示来自 DNS 服务器的 DNS 响应。
筛选 :dns.flags.response == 1 && ip.src == 8.8.8.8

对我们域名的DNS请求
现在让我们使用以下过滤器,来仔细查看一下我们感兴趣的域名的DNS流量:corp-login.acme-corp.local
筛选 :dns && dns.qry.name == "corp-login.acme-corp.local"

现在,让我们使用如下所示的过滤器,对来自DNS服务器的、针对我们感兴趣的域的DNS请求进行过滤:
筛选 :dns.flags.response == 1 && ip.src == 8.8.8.8 && dns.qry.name == "corp-login.acme-corp.local"

输出结果看起来也很正常,正如预期的那样。
除了DNS服务器之外的其他DNS响应。
在之前的结果中,我们分析了来自目标域名的DNS服务器的DNS流量。现在,让我们应用以下过滤器,看看是否有任何DNS请求来自DNS服务器以外的其他服务器:8.8.8.8
筛选 :dns.flags.response == 1 && ip.src != 8.8.8.8 && dns.qry.name == "corp-login.acme-corp.local"

这就是DNS欺骗的典型表现。它表明网络中的某个系统充当了恶意DNS服务器的角色,发送伪造的DNS响应。
分析概要
前两项任务的分析表明:
- 一次成功的多阶段中间人攻击,攻击者首先篡改了网关 (192.168.10.1) 的ARP映射。
- 随后,伪造了corp-login.acme-corp.local 的DNS回复,将受害者重定向到攻击者的 IP 地址。
对域 corp-login.acme-corp.local 观察到了多少个 DNS 响应?
筛选:dns.flags.response == 1 && dns.qry.name == "corp-login.acme-corp.local"

观察到来自 8.8.8.8 以外的 IP 地址的 DNS 请求数量是多少?
筛选:dns.flags.response == 1 && dns.qry.name == "corp-login.acme-corp.local"

python
2
攻击者伪造的 DNS 响应为该域名返回了哪个 IP 地址?
看上面筛选的源ip即可
python
192.168.10.55
发现 SSL 剥离攻击
SSL剥离是一种中间人攻击技术,攻击者拦截并篡改网络流量,移除或阻止客户端与服务器之间的TLS加密。这会导致客户端使用HTTP而非HTTPS进行通信。攻击者在与服务器保持安全(HTTPS)会话的同时,向受害者转发纯HTTP数据,从而实现窃听和凭据捕获。

工作原理
- 受害者向网站发起HTTPS请求。
- 攻击者使用ARP欺骗或恶意接入点拦截请求。
- 攻击者通过 HTTPS 连接到网站,但通过HTTP将响应转发给受害者。
- 受害者在不知情的情况下通过HTTP进行交互,以明文形式暴露敏感数据。
SSL剥离的指标
- 初始请求与响应: 用户的初始请求可能是针对
HTTPS(端口 443),但后续数据包立即转移到HTTP同一域的未加密(端口 80)。 - 重定向/链接重写:监控将HTTPS 请求持续定向到HTTP资源的重定向( HTTP状态代码 301、302)。
- 证书错误 :虽然攻击者通常会试图隐藏这一点,但如果攻击者使用更直接的代理技术,则初始TLS/SSL 握手可能会失败或显示自签名证书。
网络流量分析
缩小SSL 流量范围
本次任务中,我们关注的是 HTTPS 协议。首先,我们使用以下过滤器将其隔离。这将使我们能够检查 SSL 请求并发现异常的数量或模式。
筛选 :tls || ssl

此筛选器将显示所有与 SSL 相关的流量。
检查我们服务器的SSL流量。
让我们应用以下过滤器来显示与服务器建立的TLS握手,这证明该网站通常使用TLS进行通信。
筛选 :tls.handshake.type == 1 && tls.handshake.extensions_server_name == "corp-login.acme-corp.local"

从上述输出结果中可以得出的一个关键结论是,确认了所讨论的域使用TLS进行通信。
显示剥离之前的 DNS 重定向。
我们假设 SSL 剥离发生在攻击者成功执行 DNS 欺骗之后,将受害者重定向到攻击者的 IP 地址。在之前的任务中,我们已经识别出执行 DNS 欺骗的攻击者的 IP 地址。让我们提取攻击者的 DNS 响应,以证明受害者被指向了攻击者的 IP 地址,如下所示:
筛选 : dns.flags.response == 1 && ip.src == 192.168.10.55 && dns.qry.name == "corp-login.acme-corp.local"

以上结果显示了攻击者的 IP 地址向目标域 发送伪造DNS响应的两起事件。
验证 TLS 是否消失
SSL剥离的主要指标之一是,欺骗后,目标域名不再与合法服务器进行TLS握手,这验证了受害者到真实服务器的TLS流量不存在。让我们对服务器IP和攻击者IP应用以下过滤器,如下所示:
筛选 :http && ip.src == 192.168.10.10 && ip.dst == 192.168.10.55

我们可以清楚地看到,受害者在 SSL 剥离后连接到了服务器并登录了。

我们还可以识别出用户的明文凭据,这证实了攻击者能够获取受害者的凭据。不过,还有其他 SSL 剥离的迹象需要我们关注。在本案例中,我们只观察到一个迹象,即我们门户网站的 HTTPS 流量被剥离为HTTP。
概括
让我们来看一下调查摘要,包括攻击时间线。
- ARP欺骗(缓存投毒):
- ARP欺骗攻击开始 ,攻击者发送未经请求的ARP
is-at请求,声称拥有网关IP地址。
- ARP欺骗攻击开始 ,攻击者发送未经请求的ARP
- DNS欺骗(伪造DNS响应):
- 受害者 DNS 查询
corp-login.acme-corp.local。 - 攻击者 伪造的DNS响应
192.168.10.55,答案域 → 。
- 受害者 DNS 查询
- SSL剥离(TLS降级/凭证捕获):
- 受害者向已解析的 IP 地址发起连接,通过 HTTP 协议向攻击者发起连接(SSL 剥离效果)。
- 已观察到凭证 POST(明文)。
请回答以下问题。
针对我们的域名 corp-login.acme-corp.local 观察到了多少个 POST 请求?

python
1
SSL剥离攻击成功后,从明文中提取的受害者密码是什么?

python
Secret123!
IDS基础知识
什么是IDS
众所周知,防火墙是一种安全解决方案,通常部署在网络边界,用于保护其传入和传出的流量。防火墙会在建立连接时检查流量,如果流量违反防火墙规则则会拒绝连接。然而,还需要一些安全措施来检测已经通过防火墙的连接活动。因此,如果攻击者通过看似合法的连接成功绕过防火墙,并在网络内部执行恶意活动,则需要有相应的机制及时检测到这些活动。为此,我们在网络内部提供了一种安全解决方案,称为网络入侵防御系统(IPV)Intrusion Detection System (IDS)。
以建筑物的安全系统为例。防火墙就像守门人,检查人员进出。但总有可能出现不法分子成功潜入并进行恶意活动的情况。即使他在门口被漏网,但如果他已经进入系统,我们又该如何抓捕他呢?遍布整栋大楼的监控摄像头就能做到这一点。入侵检测系统 ( IDS)就扮演着监控摄像头的角色。它位于某个角落,基于自身特征和异常检测技术监控网络流量,并检测任何进出网络的异常流量。每次检测到异常,系统都会向安全管理员发出警报。IDS本身不会执行任何操作,它只会通知安全管理员存在恶意活动。
本课程将使您掌握全面的入侵检测系统 (IDS)解决方案知识。在接下来的任务中, 我们还将探讨最流行的开源IDS解决方案。
- 学习目标
- 入侵检测系统的类型及其检测能力
- Snort IDS的工作原理
- Snort IDS中的默认规则和自定义规则
- 在 Snort IDS中创建自定义规则
入侵检测系统(IDS)在检测到威胁后能否阻止威胁的发生? (yea/nay)
python
Nay
IDS的类型
入侵检测系统(IDS)可以根据某些因素进行不同分类。IDS的主要分类取决于其部署方式和检测模式。
部署模式
IDS可以通过以下几种方式部署:
- 主机入侵检测系统 ( HIDS ): 基于主机的入侵检测系统解决方案单独安装在每台主机上,仅负责检测与该特定主机相关的潜在安全威胁。它们提供主机活动的详细可见性。然而,主机入侵检测系统在大型网络中的管理可能具有挑战性,因为它们资源密集,并且需要在每台主机上进行管理。
- 网络入侵检测系统 ( NIDS ): 基于网络的入侵检测系统解决方案对于检测整个网络中潜在的恶意活动至关重要,而无需考虑任何特定主机。它们监控所有相关主机的网络流量,以检测可疑活动。它提供了一个集中式的网络检测视图。

检测模式
-
基于特征码的入侵检测系统 (IDS): 每天都会发生大量攻击。每种攻击都有其独特的模式,称为特征码。IDS 会将这些特征码保存在其数据库中,以便将来如果发生相同的攻击,系统能够通过特征码检测到该攻击,并向安全管理员报告以采取相应措施。IDS 的特征码数据库越强大,其检测已知威胁的效率就越高。然而,基于特征码的IDS无法检测零日攻击。零日攻击没有先前的特征码(模式),也不会保存在IDS数据库中。因此,基于特征码的IDS只能检测之前发生的攻击,并且这些攻击的特征码(模式)会保存在数据库中。在接下来的任务中,我们将探索一款名为 Snort 的基于特征码的IDS。
-
基于异常的入侵检测系统 (IDS): 这类IDS首先学习网络或系统的正常行为(基线),并在出现任何偏离正常行为的情况时进行检测。基于异常的IDS还可以检测零日攻击,因为它们不依赖于现有的特征码进行检测。它们通过将当前状态与正常行为(基线)进行比较来检测网络或系统内部的异常情况。然而,这类IDS可能会产生大量的误报(将良性活动标记为恶意活动),因为大多数合法程序的性质与恶意程序相似。基于异常的IDS会将它们标记为恶意,并认为任何异常行为都是恶意的。我们还可以通过微调(在IDS中手动定义正常行为)来减少基于异常的IDS产生的误报。
-
混合型入侵检测系统 (IDS): 混合型IDS结合了基于特征码的IDS和基于异常的IDS的检测方法,以充分发挥两种方法的优势。某些已知威胁可能已经在IDS数据库中拥有相应的特征码;在这种情况下,混合型IDS将使用基于特征码的IDS的检测技术。如果遇到新的威胁,它可以利用基于异常的IDS的检测方法。
基于特征码的入侵检测系统 (IDS)可以快速检测威胁,而其他类型的IDS则可能存在较高的处理开销。然而,选择IDS时也必须考虑多种因素。基于特征码的IDS可能适用于覆盖较小的威胁面。基于异常的IDS和混合型IDS可以帮助检测日益增多且可能对组织造成巨大损失的新型零日攻击。
请回答以下问题。
部署了哪种类型的入侵检测系统来检测整个网络中的威胁?
python
Network Intrusion Detection System
哪款入侵检测系统同时采用了基于特征的检测技术和基于异常的检测技术?
python
Hybrid IDS
IDS 示例:Snort
Snort 是 1998 年开发的最广泛使用的开源入侵检测系统(IDS)解决方案之一。它使用基于特征码和异常的检测方法来识别已知威胁。这些威胁定义在 Snort 工具的规则文件中。该工具的软件包中预装了多个内置规则文件。这些内置规则文件包含各种已知的攻击模式。Snort 的内置规则可以检测大量恶意流量。但是,您可以配置 Snort 来检测默认规则文件未涵盖的特定类型的网络流量。您可以根据自身需求创建自定义规则来检测特定流量。如果内置检测规则无法检测到对您的系统或网络有害的流量,您也可以禁用它们,并定义一些自定义规则。在接下来的任务中,我们将探索内置规则并创建自定义规则来检测特定流量。
Snort的模式

| 模式 | 描述 | 用例 |
|---|---|---|
| 数据包嗅探模式 | 此模式读取并显示网络数据包,但不对其进行任何分析。Snort 的数据包嗅探模式与入侵检测系统 (IDS)功能没有直接关系,但它有助于网络监控和故障排除。在某些情况下,系统管理员可能需要在不进行任何检测的情况下读取流量,以诊断特定问题。此时,他们可以利用 Snort 的数据包嗅探模式。此模式允许您在控制台上显示网络流量,甚至可以将其输出到文件中。 | 网络团队发现一些网络性能问题。为了诊断问题,他们需要详细了解网络流量。为此,他们可以利用 Snort 的数据包嗅探模式。 |
| 数据包日志模式 | Snort 实时检测网络流量,并将检测结果以警报的形式显示在控制台上,供安全管理员采取相应措施。然而,在某些情况下,需要记录网络流量以供后续分析。Snort 的数据包日志记录模式允许您将网络流量记录为PCAP(标准数据包捕获格式)文件。该文件包含所有网络流量及其检测结果。取证调查人员可以使用这些 Snort 日志文件对之前的攻击进行根本原因分析。 | 安全团队需要对网络攻击展开取证调查。他们需要流量日志来进行根本原因分析。通过 Snort 的数据包日志记录模式记录的网络流量可以为他们提供帮助。 |
| 网络入侵检测系统模式 | Snort 的网络入侵检测系统(NIDS)模式是其主要模式,可实时监控网络流量,并应用其规则文件来识别与已存储为签名的已知攻击模式的任何匹配项。如果发现匹配项,则会生成警报。此模式提供了入侵检测系统(IDS)解决方案的主要功能。 | 安全团队必须主动监控其网络或系统,以检测潜在威胁。他们可以利用 Snort 的网络入侵检测系统(NIDS)模式来实现这一目标。 |
Snort 作为入侵检测系统 (IDS)最相关的用途是其网络入侵检测系统(NIDS)模式。但是,根据具体需求,Snort 也可以在上述任何模式下使用。
请回答以下问题。
Snort 的哪种模式可以帮助我们将网络流量记录到 PCAP 文件中?
python
# 数据包日志模式
Packet logging mode
Snort 的主要模式叫什么?
python
# 网络入侵检测系统模式
Network Intrusion Detection System mode
Snort的使用
安装 Snort 时,您必须提供网络接口和范围。您可以正常运行 Snort,它只会捕获发往您主机的流量。但是,如果您想使用 Snort 捕获和检测整个网络中的入侵,则必须启用主机网络接口的混杂模式。
Snort 内置了一些规则文件、一个配置文件和其他文件。这些文件存储在 /etc/snort<path> 目录中。Snort 的关键文件是其配置文件snort.conf,您可以在其中指定要启用的规则文件、要监控的网络范围以及其他设置。规则文件存储在 rules<folder> 文件夹中。让我们使用以下ls命令列出 Snort 主目录中的所有文件和文件夹:
Snort 目录
shell-session
ubuntu@tryhackme:~$ ls /etc/snort
classification.config reference.config snort.debian.conf
community-sid-msg.map rules threshold.conf
gen-msg.map snort.conf unicode.map
规则格式
现在,我们来讨论一下如何在 Snort 中创建规则。编写规则有其特定的方法。例如,一条规则可以检测来自任何 IP 地址和端口、到达其所属网络(网络范围在 Snort 的配置文件中定义)任意端口的 ICMP 数据包(通常用于 ping 主机)。一旦检测到此类流量,Snort 就会生成"Ping 检测"警报。

该规则涉及的各个组成部分的详细信息如下:
- 操作: 此项指定规则触发时要执行的操作。在本例中,当流量与此规则匹配时,我们将执行"发出警报"的操作。
- 协议: 这指的是与此规则匹配的协议。在本例中,我们使用"ICMP"协议来ping主机。
- 源 IP: 此设置确定流量的来源 IP 地址。由于我们希望检测来自任何源 IP 的流量,因此将其设置为"any"。
- 源端口: 这决定了流量的来源端口。由于我们希望检测来自任何源端口的流量,因此我们将其设置为"any"。
- 目标 IP: 此参数指定匹配流量的目标 IP 地址;它会生成警报。在本例中,我们使用了"$HOME_NET"。这是一个变量,我们在 Snort 的配置文件中将其值定义为整个网络的 IP 地址范围。
- 目标端口: 这指定流量将到达的端口。由于我们希望检测到达任何端口的流量,因此我们将其设置为"any"。
- 规则元数据: 每条规则都包含一些元数据。这些元数据定义在规则末尾的括号内。其组成部分如下:
- 消息 (msg): 此消息描述触发主题规则时显示的消息。消息应指示检测到的活动类型。在本例中,我们使用了"检测到 Ping 请求"。
- 签名 ID (sid): 每条规则都有一个唯一的标识符,用于将其与其他规则区分开来。此标识符称为签名 ID (sid)。在本例中,我们将 sid 设置为"10001"。
- 规则修订(rev): 此设置用于指定规则的修订号。每次规则被修改时,其修订号都会递增,这有助于跟踪规则的更改。
规则创建
让我们将上面解释的示例规则粘贴到 Snort 规则目录中的自定义"local.rules"文件中。
首先,用文本编辑器打开"local.rules"文件:
编辑自定义规则文件
shell-session
ubuntu@tryhackme:~$ sudo nano /etc/snort/rules/local.rules
现在,在文件中已有的规则之后添加以下规则:
alert icmp any any -> 127.0.0.1 any (msg:"Loopback Ping Detected"; sid:10003; rev:1;)
注意: 我们将在下一个任务中用到其他规则,所以请不要删除它们。
文件编辑成功后,按下"Ctrl+X",系统会询问您是否要按"Y"保存更改。按下"Y"保存更改。
(这是教程里面的使用nano,我们实际上用你自己的编辑工具编辑也行)
规则测试
首先,我们启动 Snort 工具来检测规则文件中定义的任何入侵行为。为此,我们需要在控制台中以 sudo 权限执行以下命令:
运行 Snort 进行检测
shell-session
ubuntu@tryhackme:~$ sudo snort -q -l /var/log/snort -i lo -A console -c /etc/snort/snort.conf
注意: 如果您的环回接口名称不是 "lo", 请将其替换为正确的接口名称。
由于这条规则旨在提醒我们注意任何发往我们环回地址的 ICMP 数据包,让我们尝试 ping 一下我们的环回地址,看看这条规则是否有效:
Ping 主机
shell-session
ubuntu@tryhackme:~$ ping 127.0.0.1
下面的截图显示了当我们 ping 主机的回环 IP 地址时,Snort 生成的"检测到回环 Ping"警报。这表明我们的规则运行正常。
运行 Snort 进行检测
shell-session
ubuntu@tryhackme:~$ sudo snort -q -l /var/log/snort -i lo -A console -c /etc/snort/snort.conf
07/24-10:46:52.401504 [**] [1:1000001:1] Loopback Ping Detected [**] [Priority: 0] {ICMP} 127.0.0.1 -> 127.0.0.1
07/24-10:46:53.406552 [**] [1:1000001:1] Loopback Ping Detected [**] [Priority: 0] {ICMP} 127.0.0.1 -> 127.0.0.1
07/24-10:46:54.410544 [**] [1:1000001:1] Loopback Ping Detected [**] [Priority: 0] {ICMP} 127.0.0.1 -> 127.0.0.1
在 PCAP 文件上运行 Snort
我们已经了解了 Snort 如何用于实时流量的入侵检测。
然而,有时您可能会遇到这样的情况:历史网络流量记录在文件中,您需要进行取证调查,以确定是否存在任何入侵迹象。
这些流量通常以标准的"PCAP"数据包捕获格式记录。Snort 也能够检测包含历史网络流量的 PCAP 文件。

可以使用以下命令并以 sudo 权限执行此操作:
在 PCAP 上运行 Snort
shell-session
ubuntu@tryhackme:~$ sudo snort -q -l /var/log/snort -r Task.pcap -A console -c /etc/snort/snort.conf
注意: 将"Task.pcap"替换为要分析的PCAP文件的路径。
Snort 存储其文件的主目录在哪里?
python
/etc/snort
Snort规则中的哪个字段表示规则的修订号?
python
rev
任务中创建的示例规则定义了哪个协议?
python
icmp
包含 Snort 自定义规则的文件名是什么?
pyhon
local.rules
实践实验室
场景: 您是一名第三方取证调查员。一家公司联系您,希望您调查其网络近期遭受的攻击。他们提供了一个名为"Intro_to_IDS.pcap "的PCAP文件,其中包含攻击期间捕获的网络流量。您的任务是使用该PCAP文件运行Snort,并回答本任务中提出的问题。
注意: PCAP文件Intro_to_IDS.pcap已放置在该/etc/snort/目录中。您需要切换到该目录,并/etc/snort按照任务 4 中的相同方式对该新生成的PCAP文件运行PCAP分析命令。
运行:sudo snort -q -l /var/log/snort -r Intro_to_IDS.pcap -A console -c /etc/snort/snort.conf

python
10.11.90.211
除了 SSH 消息之外,PCAP 文件中还检测到了哪些其他规则消息?
pythonm
Ping Detected
检测 SSH 的规则的 SID 是什么?
python
1000002
Snort
学习如何使用 Snort 来检测实时威胁、分析记录的流量文件并识别异常情况。
介绍
SNORT 是一款开源的、基于规则的网络入侵检测与防御系统 ( NIDS / NIPS )。它由 Martin Roesch、开源贡献者和 Cisco Talos 团队开发并维护至今。官方描述为:"Snort 是全球领先的开源入侵防御系统 ( IPS )。Snort IPS使用一系列规则来定义恶意网络活动,并利用这些规则查找匹配的数据包,从而为用户生成警报。"

- 学习目标
在这个房间里,我们将涵盖以下学习目标:- IDS / IPS概述
- Snort 概述
- 编写IDS规则
- 使用 Snort 检测入侵

IDS/IPS简介

在深入研究 Snort 和分析流量之前,我们先简要了解一下入侵检测系统 ( IDS ) 和入侵防御系统 ( IPS ) 的概念。您可以配置网络基础设施以同时使用这两种系统,但在开始使用之前,让我们先了解一下它们之间的区别。
入侵检测系统(IDS)
IDS是一种被动监控解决方案,用于检测潜在的恶意活动/模式、异常事件和策略违规行为。它会针对每个可疑事件生成警报。
IDS系统主要分为两大类:
- 网络入侵检测系统(NIDS):NIDS监控来自网络各个区域的流量。其目的是调查整个子网上的流量。如果识别出特征码, 则会生成警报。
- 基于主机的入侵检测系统(HIDS):HIDS监控来自单个终端设备的流量。 其目的是调查该设备上的流量。如果识别出特征码,则会生成警报。
入侵防御系统(IPS)
入侵防御系统 (IPS)是一种主动防护解决方案,用于预防潜在的恶意活动/模式、异常事件和策略违规。它负责在检测到可疑事件后立即阻止/预防/终止这些事件。
入侵防御系统主要有四种类型;
- 网络入侵防御系统(NIPS):NIPS监控来自网络各个区域的流量。其目的是保护整个子网上的流量。如果检测到可疑特征, 则会终止连接。
- 基于行为的入侵防御系统(网络行为分析 - NBA):基于行为的系统监控来自网络各个区域的流量。其目标是保护整个子网的流量。如果检测到异常情况,则会终止连接。
网络行为分析系统 (NBA) 的工作原理与网络入侵防御系统 (NIPS) 类似。NIPS与基于行为的系统之间的区别在于,基于行为的系统需要一个训练期(也称为"基线化")来学习正常流量并区分恶意流量和威胁。这种模型能够更有效地应对新的和未知的威胁。
该系统经过训练,能够识别"正常"状态,从而检测出"异常"状态。训练阶段至关重要,可以避免误报。如果在训练期间发生安全漏洞,后果将不堪设想。另一个关键点是确保系统经过充分训练,能够识别良性活动。
- 无线入侵防御系统(WIPS):WIPS监控无线网络的流量。其目的是保护无线流量并阻止可能发起的攻击。如果检测到可疑特征码, 则会终止连接。
- 基于主机的入侵防御系统(HIPS):HIPS主动保护来自单个终端设备的流量。其目的是调查特定设备上的流量。如果识别出特征码,则终止连接。
HIPS的工作机制与HIDS类似。区别在于,HIDS会针对威胁发出警报,而HIPS 则通过终止连接来阻止威胁。
检测/预防技术
IDS和IPS解决方案中使用的主要检测和预防技术有三种;
| 技术 | 方法 |
|---|---|
| 基于签名的 | 这项技术依赖于识别已知恶意行为特定模式的规则。该模型有助于检测已知威胁。 |
| 基于行为的 | 这项技术通过特征码识别具有新模式的新威胁。该模型将已知/正常行为与未知/异常行为进行比较,从而帮助检测先前未知或全新的威胁。 |
| 基于政策的 | 该技术将检测到的活动与系统配置和安全策略进行比较。该模型有助于检测策略违规行为。 |
概括
让我们简要总结一下IDS和IPS的总体功能。
- IDS可以识别威胁,但需要用户协助才能阻止威胁。
- IPS可以在检测到威胁时,以较少的用户协助识别和阻止威胁。
Snort
现在我们来聊聊Snort。以下是Snort的官方介绍剩余部分;
Snort 也可以部署在网络中来拦截这些数据包。Snort 主要有三个用途:作为类似 tcpdump 的数据包嗅探器、作为数据包记录器(可用于网络流量调试)或作为功能齐全的网络入侵防御系统。Snort 可供个人和企业用户下载和配置。
SNORT 是一个开源的、基于规则的网络入侵检测和防御系统 ( NIDS / NIPS )。它由 Martin Roesch、开源贡献者和 Cisco Talos 团队开发并维护至今。
Snort 的功能:
Snort 具备以下功能:
- 实时交通分析
- 攻击和探测检测
- 数据包日志
- 方案分析
- 实时警报
- 模块和插件
- 预处理器
- 跨平台支持!(Linux 和 Windows)
Snort模式
Snort 有以下三种主要使用模式:
- 嗅探模式:在控制台应用程序中读取并提示 IP 数据包。
- 数据包记录器模式:记录所有访问网络的 IP 数据包(入站和出站)。
- NIDS(网络入侵检测系统)和NIPS(网络入侵防御系统)模式:根据用户定义的规则记录/丢弃被认为是恶意的数据包。
请回答以下问题。
哪种类型的入侵检测系统 (IDS) 或入侵防御系统 (IPS) 可以帮助您阻止本地计算机上的威胁?
python
HIPS
哪种类型的入侵检测系统 (IDS) 或入侵防御系统 (IPS) 可以帮助您检测本地网络中的威胁?
python
NIDS
哪种类型的入侵检测系统 (IDS) 或入侵防御系统 (IPS) 可以帮助您检测本地计算机上的威胁?
python
HIDS
哪种类型的入侵检测系统 (IDS) 或入侵防御系统 (IPS) 可以帮助您阻止本地网络上的威胁?
python
NIPS
上述哪种解决方案的工作原理是检测网络中的异常情况?
python
NBA
根据官方对该Snort的描述,它属于哪种类型的Snort?
python
full-blown
NBA训练期也称为......
python
baselining
与 Snort 的初次互动
首先,我们来验证 Snort 是否已安装。以下命令将显示实例版本。
版本检查
shell-session
user@ubuntu$ snort -V
,,_ -*> Snort! <*-
o" )~ Version 2.9.7.0 GRE (Build XXXXXX)
'''' By Martin Roesch & The Snort Team: http://www.snort.org/contact#team
Copyright (C) 2014 Cisco and/or its affiliates. All rights reserved.
Copyright (C) 1998-2013 Sourcefire, Inc., et al.
Using libpcap version 1.9.1 (with TPACKET_V3)
Using PCRE version: 8.39 2016-06-14
Using ZLIB version: 1.2.11
在开始实际操作之前,我们应该确保配置文件有效。
这里,"-T"用于测试配置,"-c"指定配置文件 (snort.conf) 。请注意,也可以通过
"-c" 指定其他配置文件 。
配置检查
shell-session
user@ubuntu$ sudo snort -c /etc/snort/snort.conf -T
--== Initializing Snort ==--
Initializing Output Plugins!
Initializing Preprocessors!
Initializing Plug-ins!
... [Output truncated]
--== Initialization Complete ==--
,,_ -*> Snort! <*-
o" )~ Version 2.9.7.0 GRE (Build XXXX)
'''' By Martin Roesch & The Snort Team: http://www.snort.org/contact#team
Copyright (C) 2014 Cisco and/or its affiliates. All rights reserved.
Copyright (C) 1998-2013 Sourcefire, Inc., et al.
Using libpcap version 1.9.1 (with TPACKET_V3)
Using PCRE version: 8.39 2016-06-14
Using ZLIB version: 1.2.11
Rules Engine: SF_SNORT_DETECTION_ENGINE Version 2.4
Preprocessor Object: SF_GTP Version 1.1
Preprocessor Object: SF_SIP Version 1.1
Preprocessor Object: SF_SSH Version 1.1
Preprocessor Object: SF_SMTP Version 1.1
Preprocessor Object: SF_POP Version 1.0
Preprocessor Object: SF_DCERPC2 Version 1.0
Preprocessor Object: SF_IMAP Version 1.0
Preprocessor Object: SF_DNP3 Version 1.1
Preprocessor Object: SF_SSLPP Version 1.1
Preprocessor Object: SF_MODBUS Version 1.1
Preprocessor Object: SF_SDF Version 1.1
Preprocessor Object: SF_REPUTATION Version 1.1
Preprocessor Object: SF_DNS Version 1.1
Preprocessor Object: SF_FTPTELNET Version 1.2
... [Output truncated]
Snort successfully validated the configuration!
Snort exiting
使用配置文件后,Snort 的功能将大大增强!配置文件是 Snort 的一体化管理文件,其中包含规则、插件、检测机制、默认操作和输出设置等信息。虽然可以针对不同的用途和场景创建多个配置文件,但在运行时只能使用其中一个。
请注意,Snort 启动时会自动显示默认横幅和初始设置信息。您可以使用" -q" 参数阻止此行为。
| 范围 | 描述 |
|---|---|
| -V / --version | 此参数提供有关您的实例版本的信息。 |
| -c | 识别配置文件 |
| -T | Snort 的自检参数允许您使用此参数测试您的设置。 |
| - q | 静默模式会阻止 Snort 显示默认横幅和有关您设置的初始信息。 |
这很简单,让我们继续下一个任务,继续探索 Snort 的各种模式。
运行 Snort 实例并检查构建版本号。
snort -V
python
149
使用"/etc/snort/snort.conf"文件测试当前实例,并检查当前版本加载了多少条规则。
snort -T -c /etc/snort/snort.conf
python
4151
使用"/etc/snort/snortv2.conf"文件测试当前实例,并检查当前版本加载了多少条规则。
snort -T -c /etc/snort/snortv2.conf
python
1
操作模式 1:嗅探模式

让我们以嗅探模式运行 Snort。
与 tcpdump 类似,Snort 有各种标志,可以查看有关它正在接收的数据包的不同数据。
嗅探器模式参数如下表所示;
| 范围 | 描述 |
|---|---|
| -v | 详细信息:在控制台中显示TCP /IP 输出。 |
| -d | 显示数据包(有效载荷)。 |
| -e | 显示链路层(TCP /IP/ UDP /ICMP)报头。 |
| - X | 以十六进制显示完整的数据包详细信息。 |
| -i | 此参数用于指定要监听或嗅探的特定网络接口。如果您有多个接口,则可以选择要嗅探的特定接口。 |
让我们逐个使用每个参数,看看它们之间有什么区别。Snort 需要你的接口上有活跃的流量,所以我们需要生成一些流量才能看到 Snort 的运行情况。
为此,请使用流量生成器 脚本(可在 Task-Exercise 文件夹中找到)。
使用参数"-i"进行嗅探
以详细模式 (-v) 启动 Snort 实例,并使用接口 (-i) "eth0";sudo snort -v -i eth0
如果您只有一个网络接口,Snort 默认会使用它。上面的示例演示了如何嗅探名为"eth0"的接口。 一旦您模拟了 -v 参数,您会发现它会自动使用"eth0"接口并发出提示。
使用参数"-v"进行嗅探
以详细模式(-v) 启动 Snort 实例;sudo snort -v
现在 以 sudo 权限运行流量生成器脚本,并 启动ICMP/HTTP 流量。 流量生成后,Snort 将以详细模式显示数据包,如下所示:
使用 -v 进行嗅探
shell-session
user@ubuntu$ sudo snort -v
Running in packet dump mode
--== Initializing Snort ==--
...
Commencing packet processing (pid=64)
12/01-20:10:13.846653 192.168.175.129:34316 -> 192.168.175.2:53
UDP TTL:64 TOS:0x0 ID:23826 IpLen:20 DgmLen:64 DF
Len: 36
=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
12/01-20:10:13.846794 192.168.175.129:38655 -> 192.168.175.2:53
UDP TTL:64 TOS:0x0 ID:23827 IpLen:20 DgmLen:64 DF
Len: 36
===============================================================================
Snort exiting
如您所见,详细模式会提供类似 tcpdump 的输出信息。使用 CTRL+C 中断嗅探后,它会停止并汇总嗅探到的数据包。
使用参数"-d"进行嗅探
以转储数据包模式(-d) 启动 Snort 实例;sudo snort -d
现在 以 sudo 权限运行流量生成器脚本 ,并 启动 ICMP/HTTP 流量。 流量生成后,Snort 将以详细模式显示数据包,如下所示:
使用 -d 进行嗅探
shell-session
user@ubuntu$ sudo snort -d
Running in packet dump mode
--== Initializing Snort ==--
...
Commencing packet processing (pid=67)
12/01-20:45:42.068675 192.168.175.129:37820 -> 192.168.175.2:53
UDP TTL:64 TOS:0x0 ID:53099 IpLen:20 DgmLen:56 DF
Len: 28
99 A5 01 00 00 01 00 00 00 00 00 00 06 67 6F 6F .............goo
67 6C 65 03 63 6F 6D 00 00 1C 00 01 gle.com.....
=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
WARNING: No preprocessors configured for policy 0.
12/01-20:45:42.070742 192.168.175.2:53 -> 192.168.175.129:44947
UDP TTL:128 TOS:0x0 ID:63307 IpLen:20 DgmLen:72
Len: 44
FE 64 81 80 00 01 00 01 00 00 00 00 06 67 6F 6F .d...........goo
67 6C 65 03 63 6F 6D 00 00 01 00 01 C0 0C 00 01 gle.com.........
00 01 00 00 00 05 00 04 D8 3A CE CE .........:..
=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
如您所见,数据包有效载荷模式涵盖了详细模式,并提供更多数据。
使用参数"-de"进行嗅探。0
以转储(-d) 和链路层报头抓取(-e) 模式启动 Snort 实例;snort -d -e
现在 以 sudo 权限运行流量生成器脚本 ,并 启动 ICMP/HTTP 流量。 流量生成后,Snort 将以详细模式显示数据包,如下所示:
使用 -de 进行嗅探
shell-session
user@ubuntu$ sudo snort -de
Running in packet dump mode
--== Initializing Snort ==--
...
Commencing packet processing (pid=70)
12/01-20:55:26.958773 00:0C:29:A5:B7:A2 -> 00:50:56:E1:9B:9D type:0x800 len:0x46
192.168.175.129:47395 -> 192.168.175.2:53 UDP TTL:64 TOS:0x0 ID:64294 IpLen:20 DgmLen:56 DF
Len: 28
6D 9C 01 00 00 01 00 00 00 00 00 00 06 67 6F 6F m............goo
67 6C 65 03 63 6F 6D 00 00 01 00 01 gle.com.....
=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
WARNING: No preprocessors configured for policy 0.
12/01-20:55:26.965226 00:50:56:E1:9B:9D -> 00:0C:29:A5:B7:A2 type:0x800 len:0x56
192.168.175.2:53 -> 192.168.175.129:47395 UDP TTL:128 TOS:0x0 ID:63346 IpLen:20 DgmLen:72
Len: 44
6D 9C 81 80 00 01 00 01 00 00 00 00 06 67 6F 6F m............goo
67 6C 65 03 63 6F 6D 00 00 01 00 01 C0 0C 00 01 gle.com.........
00 01 00 00 00 05 00 04 D8 3A D6 8E .........:..
使用参数"-X"进行嗅探
以完整数据包转储模式(-X) 启动 Snort 实例;sudo snort -X
现在 以 sudo 权限运行流量生成器脚本 ,并 启动 ICMP/HTTP 流量。 流量生成后,Snort 将以详细模式显示数据包,如下所示:
使用 -X 进行嗅探
shell-session
user@ubuntu$ sudo snort -X
Running in packet dump mode
--== Initializing Snort ==--
...
Commencing packet processing (pid=76)
WARNING: No preprocessors configured for policy 0.
12/01-21:07:56.806121 192.168.175.1:58626 -> 239.255.255.250:1900
UDP TTL:1 TOS:0x0 ID:48861 IpLen:20 DgmLen:196
Len: 168
0x0000: 01 00 5E 7F FF FA 00 50 56 C0 00 08 08 00 45 00 ..^....PV.....E.
0x0010: 00 C4 BE DD 00 00 01 11 9A A7 C0 A8 AF 01 EF FF ................
0x0020: FF FA E5 02 07 6C 00 B0 85 AE 4D 2D 53 45 41 52 .....l....M-SEAR
0x0030: 43 48 20 2A 20 48 54 54 50 2F 31 2E 31 0D 0A 48 CH * HTTP/1.1..H
0x0040: 4F 53 54 3A 20 32 33 39 2E 32 35 35 2E 32 35 35 OST: 239.255.255
0x0050: 2E 32 35 30 3A 31 39 30 30 0D 0A 4D 41 4E 3A 20 .250:1900..MAN:
0x0060: 22 73 73 64 70 3A 64 69 73 63 6F 76 65 72 22 0D "ssdp:discover".
0x0070: 0A 4D 58 3A 20 31 0D 0A 53 54 3A 20 75 72 6E 3A .MX: 1..ST: urn:
0x0080: 64 69 61 6C 2D 6D 75 6C 74 69 73 63 72 65 65 6E dial-multiscreen
0x0090: 2D 6F 72 67 3A 73 65 72 76 69 63 65 3A 64 69 61 -org:service:dia
0x00A0: 6C 3A 31 0D 0A 55 53 45 52 2D 41 47 45 4E 54 3A l:1..USER-AGENT:
0x00B0: 20 43 68 72 6F 6D 69 75 6D 2F 39 35 2E 30 2E 34 Chromium/95.0.4
0x00C0: 36 33 38 2E 36 39 20 57 69 6E 64 6F 77 73 0D 0A 638.69 Windows..
0x00D0: 0D 0A ..
=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
WARNING: No preprocessors configured for policy 0.
12/01-21:07:57.624205 216.58.214.142 -> 192.168.175.129
ICMP TTL:128 TOS:0x0 ID:63394 IpLen:20 DgmLen:84
Type:0 Code:0 ID:15 Seq:1 ECHO REPLY
0x0000: 00 0C 29 A5 B7 A2 00 50 56 E1 9B 9D 08 00 45 00 ..)....PV.....E.
0x0010: 00 54 F7 A2 00 00 80 01 24 13 D8 3A D6 8E C0 A8 .T......$..:....
0x0020: AF 81 00 00 BE B6 00 0F 00 01 2D E4 A7 61 00 00 ..........-..a..
0x0030: 00 00 A4 20 09 00 00 00 00 00 10 11 12 13 14 15 ... ............
0x0040: 16 17 18 19 1A 1B 1C 1D 1E 1F 20 21 22 23 24 25 .......... !"#$%
0x0050: 26 27 28 29 2A 2B 2C 2D 2E 2F 30 31 32 33 34 35 &'()*+,-./012345
0x0060: 36 37 67
=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
请注意,您可以按如下方式组合或单独使用这些参数;
- snort -v
- snort -vd
- snort -de
- snort -v -d -e
- snort -X
务必了解并练习每个参数在不同类型的流量下的表现,找出你最喜欢的组合。
操作模式 2:数据包记录器模式

让我们以日志模式运行 Snort。
你可以将 Snort 用作网络嗅探器,并通过日志记录模式记录嗅探到的数据包。你只需要设置数据包日志记录模式的参数,Snort 会自动完成其余操作。
数据包记录器参数如下表所示;
| 范围 | 描述 |
|---|---|
| -l (这个是小写L) | 日志记录模式、目标日志和告警 输出目录。默认输出文件夹为**/var/log/snort** 默认操作是将日志以 tcpdump 格式转储到**/var/log/snort 目录。** |
| -K ASCII | 以ASCII格式记录数据包。 |
| -r | 阅读选项:查看 Snort 中记录的事件。 |
| -n | 指定要处理或读取的数据包数量。Snort 将在读取指定数量的数据包后停止。 |
让我们逐个使用每个参数,看看它们之间有什么区别。Snort 需要你的接口上有活跃的流量,所以我们需要生成一些流量才能看到 Snort 的运行情况。
日志文件所有权
在生成日志并进行分析之前,我们必须记住Linux文件的所有权和权限。无需深入了解用户类型和权限。基本的文件所有权规则如下:
Snort 需要超级用户(root)权限才能嗅探网络流量,因此,一旦您使用"sudo"命令运行 Snort,生成的日志文件将归"root"帐户所有。因此,您需要"root"权限才能查看日志文件。分析生成的日志文件有两种不同的方法:
权限提升
- 更改文件/目录的所有权 - 您还可以更改文件/文件夹的所有权,以便以您的用户身份读取它:
sudo chown username file或者sudo chown username -R directory."-R"参数启用对文件和目录的递归处理。
使用参数"-l"进行日志记录
首先,以数据包记录器模式启动 Snort 实例;sudo snort -dev -l.
现在使用流量生成器脚本启动 ICMP/HTTP 流量
一旦流量生成,Snort 就会开始显示数据包并将其记录到目标目录中。您可以在 Snort.config 文件中配置默认输出目录。不过,您也可以使用"-l"参数来设置目标目录。指定默认日志目录对于持续监控操作非常有用,而"-l"参数则更适用于测试目的。
该-l 命令会在当前目录下创建日志文件。您需要使用此选项才能将每个练习的日志文件保存在各自的文件夹中。
使用 -l 记录日志
shell-session
user@ubuntu$ sudo snort -dev -l.
Running in packet logging mode
--== Initializing Snort ==--
Initializing Output Plugins!
Log directory = /var/log/snort
pcap DAQ configured to passive.
Acquiring network traffic from "ens33".
Decoding Ethernet
--== Initialization Complete ==--
...
Commencing packet processing (pid=2679)
WARNING: No preprocessors configured for policy 0.
WARNING: No preprocessors configured for policy 0.
现在,我们来查看生成的日志文件。 请注意,您的日志文件名可能与此不同
检查日志文件
shell-session
user@ubuntu$ ls.
snort.log.1638459842
如您所见,这是一个包含所有信息的单一日志文件。它是二进制/tcpdump格式的日志。
使用参数"-K ASCII"进行日志记录
以数据包记录器模式启动 Snort 实例;sudo snort -dev -K ASCII
现在 以 sudo 权限运行流量生成器脚本,并 启动 ICMP/HTTP 流量。 流量生成后,Snort 将以详细模式显示数据包,如下所示:
使用 -K ASCII 进行日志记录
shell-session
user@ubuntu$ sudo snort -dev -K ASCII -l.
Running in packet logging mode
--== Initializing Snort ==--
Initializing Output Plugins!
Log directory = /var/log/snort
pcap DAQ configured to passive.
Acquiring network traffic from "ens33".
Decoding Ethernet
--== Initialization Complete ==--
...
Commencing packet processing (pid=2679)
WARNING: No preprocessors configured for policy 0.
WARNING: No preprocessors configured for policy 0.
现在,让我们查看生成的日志文件。
检查日志文件
shell-session
user@ubuntu$ ls .
142.250.187.110 192.168.175.129 snort.log.1638459842
这是文件夹视图中的显示效果。

使用"-K ASCII"参数生成的日志完全不同。其中有两个文件夹,文件夹名称以IP地址命名。我们来看看它们。
检查日志文件
shell-session
user@ubuntu$ ls ./192.168.175.129/
ICMP_ECHO UDP:36648-53 UDP:40757-53 UDP:47404-53 UDP:50624-123
仔细查看创建的文件夹后,我们可以发现日志是 ASCII 格式且已分类的,因此无需使用 Snort 实例即可读取它们。
这是文件夹视图中的显示效果。

简而言之,ASCII 模式以人类可读的格式提供多个文件,方便使用文本编辑器轻松读取日志。与 ASCII 格式不同,二进制格式不可读,需要使用 Snort 或类似应用程序(例如 tcpdump)进行分析。
让我们用文本编辑器打开 ASCII 格式和二进制格式的文件,比较一下它们的区别。二进制日志文件和 ASCII 日志文件的区别如下所示。(左侧:二进制格式;右侧:ASCII 格式。)

使用参数"-r"读取生成的日志
以数据包读取器模式启动 Snort 实例;sudo snort -r
使用 -r 读取日志文件
shell-session
user@ubuntu$ sudo snort -r snort.log.1638459842
Running in packet dump mode
--== Initializing Snort ==--
Initializing Output Plugins!
pcap DAQ configured to read-file.
Acquiring network traffic from "snort.log.1638459842".
--== Initialization Complete ==--
...
Commencing packet processing (pid=3012)
WARNING: No preprocessors configured for policy 0.
12/02-07:44:03.123225 192.168.175.129 -> 142.250.187.110
ICMP TTL:64 TOS:0x0 ID:41900 IpLen:20 DgmLen:84 DF
Type:8 Code:0 ID:1 Seq:49 ECHO
=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
WARNING: No preprocessors configured for policy 0.
12/02-07:44:26.169620 192.168.175.129 -> 142.250.187.110
ICMP TTL:64 TOS:0x0 ID:44765 IpLen:20 DgmLen:84 DF
Type:8 Code:0 ID:1 Seq:72 ECHO
===============================================================================
Packet I/O Totals:
Received: 51
Analyzed: 51 (100.000%)
Dropped: 0 ( 0.000%)
Filtered: 0 ( 0.000%)
Outstanding: 0 ( 0.000%)
Injected: 0
===============================================================================
Breakdown by protocol (includes rebuilt packets):
...
Total: 51
===============================================================================
Snort exiting
请注意, Snort 可以读取和处理二进制日志输出(tcpdump 和 Wireshark 也可以处理这种日志格式)。但是,如果您使用"-K ASCII"参数创建日志,Snort 将不会读取它们。 如上面的输出所示,Snort 读取并显示了日志文件,就像在嗅探模式下一样。
使用 tcpdump 打开日志文件
shell-session
user@ubuntu$ sudo tcpdump -r snort.log.1638459842 -ntc 10
reading from file snort.log.1638459842, link-type EN10MB (Ethernet)
IP 192.168.175.129 > 142.250.187.110: ICMP echo request, id 1, seq 49, length 64
IP 142.250.187.110 > 192.168.175.129: ICMP echo reply, id 1, seq 49, length 64
IP 192.168.175.129 > 142.250.187.110: ICMP echo request, id 1, seq 50, length 64
IP 142.250.187.110 > 192.168.175.129: ICMP echo reply, id 1, seq 50, length 64
IP 192.168.175.129 > 142.250.187.110: ICMP echo request, id 1, seq 51, length 64
IP 142.250.187.110 > 192.168.175.129: ICMP echo reply, id 1, seq 51, length 64
IP 192.168.175.129 > 142.250.187.110: ICMP echo request, id 1, seq 52, length 64
IP 142.250.187.110 > 192.168.175.129: ICMP echo reply, id 1, seq 52, length 64
IP 192.168.175.1.63096 > 239.255.255.250.1900: UDP, length 173
IP 192.168.175.129 > 142.250.187.110: ICMP echo request, id 1, seq 53, length 64
使用 Wireshark 打开日志文件。

"-r"参数还允许用户过滤二进制日志文件。 您可以使用"-r"参数和伯克利数据包过滤器(BPF)来过滤已处理的日志,以查看特定的数据包。
sudo snort -r logname.log -Xsudo snort -r logname.log icmpsudo snort -r logname.log tcpsudo snort -r logname.log 'udp and port 53'
输出结果与上述相同,但只会显示具有所选协议的数据包。 此外,您可以使用"-n"参数指定处理进程数。以下命令将仅处理前 10 个数据包: Snort -dvr logname.log -n 10
请参考以下资源了解BPF 的工作原理及其用途。
- https://en.wikipedia.org/wiki/Berkeley_Packet_Filter
- https://biot.com/capstats/bpf.html
- https://www.tcpdump.org/manpages/tcpdump.1.html
请回答以下问题。
使用默认配置文件,以 ASCII 模式调查流量 。
sudo snort -dev -K ASCII -l .
同时执行sudo ./traffic-generator.sh 流量生成器脚本并选择 "TASK-6 练习"。等待流量结束后,停止 Snort 实例。现在分析输出摘要并回答问题。
现在,日志应该位于当前目录下。导航到文件夹" 145.254.160.237 "。连接端口 53 所使用的源端口是什么?

python
3009
使用 snort.log.1640048004
使用 Snort 读取 snort.log 文件;第 10 个数据包的 IP ID 是什么?

使用 Snort读取" snort.log.1640048004" 文件;第 4 个数据包的referer引用页是什么?
筛选:snort -dvr snort.log.1640048004 -n 4

python
http://www.ethereal.com/development.html
使用 Snort读取" snort.log.1640048004" 文件;第 8 个数据包的 ACK 号是多少?
筛选:snort -dvr snort.log.1640048004 -n 8

使用 Snort读取" snort.log.1640048004"文件 的 "TCP 端口 80" 数据包的数量是多少?
筛选:snort -dvr snort.log.1640048004 'tcp and port 80'

python
41
操作模式 3:IDS/IPS

Snort 在IDS / IPS模式下
Snort 的功能不仅限于嗅探和记录流量。IDS / IPS模式允许您根据用户定义的规则管理流量。
请注意, (N) IDS / IPS模式取决于规则和配置。
让我们以IDS / IPS模式运行 Snort
下表解释了NIDS模式参数;
| 范围 | 描述 |
|---|---|
| -c | 定义配置文件。 |
| -T | 正在测试配置文件。 |
| -N | 禁用日志记录。 |
| -D | 后台模式。 |
| -A | 警报模式; full完整模式: 提供完整的警报信息,包含所有可能的警报详情。此模式也是默认模式;如果您使用 -A 参数且未指定模式,Snort 将默认使用此模式。 快速模式会显示警报消息、时间戳、源 IP 地址和目标 IP 地址 以及端口号。 console控制台: 在控制台屏幕上提供快速样式警报。 cmg: CMG 样式,包含十六进制和文本格式的有效载荷的基本标头详细信息。 None: 禁用警报。 |
让我们开始使用每个参数,看看它们之间的区别。Snort 需要你的接口上有活跃的流量,所以我们需要生成流量才能看到 Snort 的运行情况。 为此,请使用 流量生成器 脚本 并抓取流量。
一旦启动IDS / IPS模式, 就需要使用规则。正如我们之前提到的,我们将以预定义的ICMP规则为例。该规则只会针对任何方向的ICMP数据包活动生成警报。
alert icmp any any <> any any (msg: "ICMP Packet Found"; sid: 100001; rev:1;)
该规则位于 "/etc/snort/rules/local.rules"中。
请记住,本模块仅关注运行模式。如果流量触发警报,Snort 将创建一个"警报"文件。 最后一点: 一旦启动 IPS/IDS 模式,嗅探和日志记录模式将处于半被动状态。但是,您可以使用前面任务中讨论的参数 (-i、-v、-d、-e、-X、-l、-K ASCII) 来激活这些功能。如果您不记得这些命令的用途, 请回顾之前的内容。
IDS/IPS 模式,参数为"-c 和 -T"
启动 Snort 实例并测试配置文件。 Sudo snort -c /etc/snort/snort.conf -T 此命令将检查您的配置文件,并在当前设置存在任何错误时提示您。
IDS / IPS 模式,参数为"-N"
启动 Snort 实例并运行以下命令禁用日志记录:sudo snort -c /etc/snort/snort.conf -N
现在 以 sudo 权限运行流量生成器脚本 ,并 启动 ICMP/HTTP 流量。 此命令将禁用日志记录模式。其余功能仍然可用(如果已启用)。
命令行输出将提供所需信息以及指定的参数。因此,如果您启用 详细模式 (-v) 或 完整数据包转储 (-X),您仍然会在控制台中看到输出,但日志文件夹中不会生成任何日志。
IDS/IPS 模式,参数为"-D"
使用以下命令以后台模式启动 Snort 实例:sudo snort -c /etc/snort/snort.conf -D
现在 以 sudo 权限运行流量生成器脚本 ,并 启动 ICMP/ HTTP流量。 流量生成后,Snort 将开始处理数据包,并使用附加参数完成给定任务。
后台运行
shell-session
user@ubuntu$ sudo snort -c /etc/snort/snort.conf -D
Spawning daemon child...
My daemon child 2898 lives...
Daemon parent exiting (0)
命令行输出将提供所需信息以及指定的参数。因此,如果您启用 详细模式 (-v) 或完整数据包转储 (-X) 并启用数据包记录器模式 (-l), 则日志仍会保存在日志文件夹中,但控制台不会有任何输出。
启动后台模式后,如果想要检查相应的进程,可以很容易地使用如下所示的"ps"命令;
后台运行
markup
user@ubuntu$ ps -ef | grep snort
root 2898 1706 0 05:53 ? 00:00:00 snort -c /etc/snort/snort.conf -D
要停止守护进程,可以使用"kill"命令终止该进程。
后台运行
shell-session
user@ubuntu$ sudo kill -9 2898
请注意,守护进程模式主要用于自动化 Snort 服务。此参数主要用于脚本中,以便在后台启动 Snort 服务。除非您对 Snort 有深入的了解并且已配置好稳定的环境,否则不建议使用此模式。
IDS/IPS 模式,参数为"-A"
请注意,Snort 提供多种警报模式。
- 控制台: 在控制台屏幕上提供快速样式警报。
- cmg: 以十六进制和文本格式提供有效载荷的基本标头详细信息。
- 完整: 完整警报模式,提供有关警报的所有可能信息。
- 快速模式: 快速模式,显示警报消息、时间戳、源 IP 地址、目标 IP 地址以及端口号。
- None: 禁用警报。
在本节中,只有 "console" 和 "cmg" 参数会在控制台中显示告警信息。无法通过终端区分其余告警模式。可以通过查看生成的日志来识别差异。
在本节末尾, 我们将比较"完整"、"快速"和"无"三种模式。请注意,这些参数不会提供控制台输出,因此我们将继续通过日志格式来识别它们之间的差异。
IDS/IPS 模式,参数为"-A console"
控制台模式可在控制台屏幕上提供快速提示信息。使用以下命令以控制台 提示模式(-A console)启动 Snort 实例: sudo snort -c /etc/snort/snort.conf -A console
现在 以 sudo 权限运行流量生成器脚本 ,并启动 ICMP/HTTP 流量。 流量生成后,Snort 将根据配置文件中定义的规则集开始生成警报。
以控制台警报模式运行
shell-session
user@ubuntu$ sudo snort -c /etc/snort/snort.conf -A console
Running in IDS mode
--== Initializing Snort ==--
Initializing Output Plugins!
Initializing Preprocessors!
Initializing Plug-ins!
Parsing Rules file "/etc/snort/snort.conf"
...
Commencing packet processing (pid=3743)
12/12-02:08:27.577495 [**] [1:366:7] ICMP PING *NIX [**] [Classification: Misc activity] [Priority: 3] {ICMP} 192.168.175.129 -> 142.250.187.110
12/12-02:08:27.577495 [**] [1:10000001:0] ICMP Packet found [**] [Priority: 0] {ICMP} 192.168.175.129 -> 142.250.187.110
12/12-02:08:27.577495 [**] [1:384:5] ICMP PING [**] [Classification: Misc activity] [Priority: 3] {ICMP} 192.168.175.129 -> 142.250.187.110
12/12-02:08:27.609719 [**] [1:10000001:0] ICMP Packet found [**] [Priority: 0] {ICMP} 142.250.187.110 -> 192.168.175.129
^C*** Caught Int-Signal
12/12-02:08:29.595898 [**] [1:366:7] ICMP PING *NIX [**] [Classification: Misc activity] [Priority: 3] {ICMP} 192.168.175.129 -> 142.250.187.110
12/12-02:08:29.595898 [**] [1:10000001:0] ICMP Packet found [**] [Priority: 0] {ICMP} 192.168.175.129 -> 142.250.187.110
12/12-02:08:29.595898 [**] [1:384:5] ICMP PING [**] [Classification: Misc activity] [Priority: 3] {ICMP} 192.168.175.129 -> 142.250.187.110
===============================================================================
Run time for packet processing was 26.25844 seconds
Snort processed 88 packets.
IDS/IPS 模式,参数为"-A cmg"
CMG 模式提供基本的头部信息,包括有效载荷,支持十六进制和文本格式。使用以下命令以CMG 警报模式 (-A cmg)启动 Snort 实例 :sudo snort -c /etc/snort/snort.conf -A cmg
现在 以 sudo 权限运行流量生成器脚本,并启动ICMP/HTTP流量。 流量生成后,Snort 将根据配置文件中定义的规则集开始生成警报。
以 CMG 警报模式运行
shell-session
user@ubuntu$ sudo snort -c /etc/snort/snort.conf -A cmg
Running in IDS mode
--== Initializing Snort ==--
Initializing Output Plugins!
Initializing Preprocessors!
Initializing Plug-ins!
Parsing Rules file "/etc/snort/snort.conf"
...
Commencing packet processing (pid=3743)
12/12-02:23:56.944351 [**] [1:366:7] ICMP PING *NIX [**] [Classification: Misc activity] [Priority: 3] {ICMP} 192.168.175.129 -> 142.250.187.110
12/12-02:23:56.944351 00:0C:29:A5:B7:A2 -> 00:50:56:E1:9B:9D type:0x800 len:0x62
192.168.175.129 -> 142.250.187.110 ICMP TTL:64 TOS:0x0 ID:10393 IpLen:20 DgmLen:84 DF
Type:8 Code:0 ID:4 Seq:1 ECHO
BC CD B5 61 00 00 00 00 CE 68 0E 00 00 00 00 00 ...a.....h......
10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F ................
20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F !"#$%&'()*+,-./
30 31 32 33 34 35 36 37 01234567
=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
在讨论其他告警类型之前,我们先来比较一下控制台模式和 CMG 模式的输出 。如上所示,控制台模式 提供基本的报头和规则信息,而CMG 模式则提供完整的包详细信息以及规则信息。
IDS /IPS 模式,参数为"-A fast"
快速模式提供警报消息、时间戳以及源和目标 IP 地址。请注意,此模式下没有控制台输出。 使用以下命令以快速 警报模式 (-A fast)启动 Snort 实例 : sudo snort -c /etc/snort/snort.conf -A fast
现在 以 sudo 权限运行流量生成器脚本 ,并 启动 ICMP/HTTP 流量。 流量生成后,Snort 将根据配置文件中定义的规则集开始生成警报。
以快速警报模式运行
shell-session
user@ubuntu$ sudo snort -c /etc/snort/snort.conf -A fast
Running in IDS mode
--== Initializing Snort ==--
Initializing Output Plugins!
Initializing Preprocessors!
Initializing Plug-ins!
Parsing Rules file "/etc/snort/snort.conf"
...
Commencing packet processing (pid=3743)
=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
我们来查看一下报警文件。

如上图所示,快速样式警报包含有关操作的摘要信息,例如方向和警报标题。
IDS /IPS 模式,参数为"-A full"
完整警报模式会提供有关警报的所有可能信息。 请注意,此模式下没有控制台输出。 使用以下命令以完整 警报模式 (-A full)启动 Snort 实例 :sudo snort -c /etc/snort/snort.conf -A full
现在 以 sudo 权限运行流量生成器脚本 ,并启动 ICMP/HTTP 流量。 流量生成后,Snort 将根据配置文件中定义的规则集开始生成警报。
处于完全警报模式
shell-session
user@ubuntu$ sudo snort -c /etc/snort/snort.conf -A full
Running in IDS mode
--== Initializing Snort ==--
Initializing Output Plugins!
Initializing Preprocessors!
Initializing Plug-ins!
Parsing Rules file "/etc/snort/snort.conf"
...
Commencing packet processing (pid=3744)
=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
我们来查看一下报警文件。

如上图所示,全样式警报包含有关操作的所有可能信息。
IDS /IPS 模式,参数为"-A none"
禁用告警。此模式不会创建告警文件。但是,它仍然会记录流量并以二进制转储格式创建日志文件。 请注意,此模式下没有控制台输出。 使用以下命令以非告警模式 (-A none)启动 Snort 实例 : sudo snort -c /etc/snort/snort.conf -A none
现在 以 sudo 权限运行流量生成器脚本 ,并 启动 ICMP/HTTP 流量。 流量生成后,Snort 将根据配置文件中定义的规则集开始生成警报。
以非警报模式运行
shell-session
, user@ubuntu$ sudo snort -c /etc/snort/snort.conf -A none
Running in IDS mode
--== Initializing Snort ==--
Initializing Output Plugins!
Initializing Preprocessors!
Initializing Plug-ins!
Parsing Rules file "/etc/snort/snort.conf"
...
Commencing packet processing (pid=3745)
=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
如下图所示,没有生成告警文件。Snort 只生成了日志文件。

IDS /IPS 模式:"使用规则文件,无需配置文件"
Snort 可以仅使用规则运行,无需配置文件。在这种模式下运行 Snort 有助于测试用户创建的规则。但是,这种模式的性能会降低。
未配置配置文件运行
shell-session
, user@ubuntu$ sudo snort -c /etc/snort/rules/local.rules -A console
Running in IDS mode
12/12-12:13:29.167955 [**] [1:10000001:0] ICMP Packet found [**] [Priority: 0] {ICMP} 192.168.175.129 -> 142.250.187.110
12/12-12:13:29.200543 [**] [1:10000001:0] ICMP Packet found [**] [Priority: 0] {ICMP} 142.250.187.110 -> 192.168.175.129
12/12-12:13:30.169785 [**] [1:10000001:0] ICMP Packet found [**] [Priority: 0] {ICMP} 192.168.175.129 -> 142.250.187.110
12/12-12:13:30.201470 [**] [1:10000001:0] ICMP Packet found [**] [Priority: 0] {ICMP} 142.250.187.110 -> 192.168.175.129
12/12-12:13:31.172101 [**] [1:10000001:0] ICMP Packet found [**] [Priority: 0] {ICMP} 192.168.175.129 -> 142.250.187.110
^C*** Caught Int-Signal
IPS 模式和丢包
Snort IPS模式可通过-Q-- daq afpacket参数激活。您也可以通过编辑 Snort.conf 文件来激活此模式。但是,在本讨论范围内,您无需编辑 Snort.conf 文件。有关 daq 和高级配置设置的更多信息,请参阅附加任务或 Snort 手册: -Q --daq afpacket
激活数据采集(DAQ)模块,并使用afpacket模块将Snort用作入侵防御系统(IPS):-i eth0:eth1
识别接口时请注意,Snort IPS至少需要两个接口才能工作。现在 以 sudo 权限运行流量生成器脚本 ,并 启动 ICMP/HTTP 流量。
跑步IPS模式
shell-session
user@ubuntu$ sudo snort -c /etc/snort/snort.conf -q -Q --daq afpacket -i eth0:eth1 -A console
Running in IPS mode
12/18-07:40:01.527100 [Drop] [**] [1:1000001:0] ICMP Packet found [**] [Priority: 0] {ICMP} 192.168.175.131 -> 192.168.175.2
12/18-07:40:01.552811 [Drop] [**] [1:1000001:0] ICMP Packet found [**] [Priority: 0] {ICMP} 172.217.169.142 -> 192.168.1.18
12/18-07:40:01.566232 [Drop] [**] [1:1000001:0] ICMP Packet found [**] [Priority: 0] {ICMP} 192.168.175.131 -> 192.168.175.2
12/18-07:40:02.517903 [Drop] [**] [1:1000001:0] ICMP Packet found [**] [Priority: 0] {ICMP} 192.168.1.18 -> 172.217.169.142
12/18-07:40:02.550844 [Drop] [**] [1:1000001:0] ICMP Packet found [**] [Priority: 0] {ICMP} 172.217.169.142 -> 192.168.1.18
^C*** Caught Int-Signal
如上图所示,Snort 这次拦截了数据包。 我们使用了相同的规则,但执行了不同的操作(丢弃/拒绝)。
请回答以下问题
使用默认配置文件调查流量情况。
sudo snort -c /etc/snort/snort.conf -A full -l .
执行sudo ./traffic-generator.sh 流量生成器脚本并选择 "TASK-7 练习"。等待流量停止后,停止 Snort 实例。现在分析输出摘要并回答问题。
检测到的HTTP GET方法有多少个?

python
2
操作模式 4:PCAP 调查

让我们用 Snort 来研究 PCAP。
Snort 的功能不仅限于嗅探、记录和检测/阻止威胁。PCAP读取/分析模式可帮助您处理pcap文件。 一旦您拥有pcap文件并使用 Snort 进行处理,您将收到默认的流量统计信息以及根据您的规则集发出的警报。
如果不使用之前讨论过的任何其他参数,读取pcap 文件只能概览数据包并提供文件统计信息。在大多数情况下,这不太方便。我们使用 Snort 分析pcap文件,以便利用其规则,并通过已知的威胁模式来加快调查过程。
请注意, 我们离开始创建规则已经很近了。因此,您需要掌握 Snort 的工作原理,了解之前讨论过的参数,并开始根据不同的目的组合使用这些参数。
PCAP模式参数的解释如下表所示;
| 范围 | 描述 |
|---|---|
| -r / -- pcap -single= | 读取单个pcap 文件 |
| -- pcap -list="" | 读取命令中提供的 pcap 文件(以空格分隔)。 |
| -- pcap -show | 处理过程中在控制台上显示pcap名称。 |
使用参数"-r"研究单个PCAP
为了进行测试,您仍然可以使用以下命令通过pcap测试默认读取选项。snort -r icmp-test.pcap
让我们使用配置文件来 分析pcap文件,看看会发生什么。sudo snort -c /etc/snort/snort.conf -q -r icmp-test.pcap -A console -n 10
如果您不记得给定命令中参数的用途,请回顾之前的内容,然后再回来!
调查单一pcap文件
shell-session
user@ubuntu$ sudo snort -c /etc/snort/snort.conf -q -r icmp-test.pcap -A console -n 10
12/12-12:13:29.167955 [**] [1:10000001:0] ICMP Packet found [**] [Priority: 0] {ICMP} 192.168.175.129 -> 142.250.187.110
12/12-12:13:29.200543 [**] [1:10000001:0] ICMP Packet found [**] [Priority: 0] {ICMP} 142.250.187.110 -> 192.168.175.129
12/12-12:13:30.169785 [**] [1:10000001:0] ICMP Packet found [**] [Priority: 0] {ICMP} 192.168.175.129 -> 142.250.187.110
12/12-12:13:30.201470 [**] [1:10000001:0] ICMP Packet found [**] [Priority: 0] {ICMP} 142.250.187.110 -> 192.168.175.129
12/12-12:13:31.172101 [**] [1:10000001:0] ICMP Packet found [**] [Priority: 0] {ICMP} 192.168.175.129 -> 142.250.187.110
12/12-12:13:31.204104 [**] [1:10000001:0] ICMP Packet found [**] [Priority: 0] {ICMP} 142.250.187.110 -> 192.168.175.129
12/12-12:13:32.174106 [**] [1:10000001:0] ICMP Packet found [**] [Priority: 0] {ICMP} 192.168.175.129 -> 142.250.187.110
12/12-12:13:32.208683 [**] [1:10000001:0] ICMP Packet found [**] [Priority: 0] {ICMP} 142.250.187.110 -> 192.168.175.129
12/12-12:13:33.176920 [**] [1:10000001:0] ICMP Packet found [**] [Priority: 0] {ICMP} 192.168.175.129 -> 142.250.187.110
12/12-12:13:33.208359 [**] [1:10000001:0] ICMP Packet found [**] [Priority: 0] {ICMP} 142.250.187.110 -> 192.168.175.129
我们的ICMP规则被触发了!正如您在输出结果中看到的,Snort识别出了流量,并根据我们的规则集发出了警报。
使用参数"--pcap-list"调查多个PCAP文件
让我们使用配置文件检查多个 pcap 文件,看看会发生什么。 sudo snort -c /etc/snort/snort.conf -q --pcap-list="icmp-test.pcap http2.pcap" -A console -n 10
正在调查多个pcap文件
markup
user@ubuntu$ sudo snort -c /etc/snort/snort.conf -q --pcap-list="icmp-test.pcap http2.pcap" -A console
12/12-12:13:29.167955 [**] [1:10000001:0] ICMP Packet found [**] [Priority: 0] {ICMP} 192.168.175.129 -> 142.250.187.110
12/12-12:13:29.200543 [**] [1:10000001:0] ICMP Packet found [**] [Priority: 0] {ICMP} 142.250.187.110 -> 192.168.175.129
12/12-12:13:30.169785 [**] [1:10000001:0] ICMP Packet found [**] [Priority: 0] {ICMP} 192.168.175.129 -> 142.250.187.110
12/12-12:13:30.201470 [**] [1:10000001:0] ICMP Packet found [**] [Priority: 0] {ICMP} 142.250.187.110 -> 192.168.175.129
12/12-12:13:31.172101 [**] [1:10000001:0] ICMP Packet found [**] [Priority: 0] {ICMP} 192.168.175.129 -> 142.250.187.110
...
12/12-12:13:31.204104 [**] [1:10000001:0] ICMP Packet found [**] [Priority: 0] {ICMP} 142.250.187.110 -> 192.168.175.129
12/12-12:13:32.174106 [**] [1:10000001:0] ICMP Packet found [**] [Priority: 0] {ICMP} 192.168.175.129 -> 142.250.187.110
12/12-12:13:32.208683 [**] [1:10000001:0] ICMP Packet found [**] [Priority: 0] {ICMP} 142.250.187.110 -> 192.168.175.129
12/12-12:13:33.176920 [**] [1:10000001:0] ICMP Packet found [**] [Priority: 0] {ICMP} 192.168.175.129 -> 142.250.187.110
12/12-12:13:33.208359 [**] [1:10000001:0] ICMP Packet found [**] [Priority: 0] {ICMP} 142.250.187.110 -> 192.168.175.129
我们的ICMP规则被触发了! 正如您在输出结果中看到的,Snort识别出了流量,并根据我们的规则集发出了警报。
**需要注意一点:**我们处理了两个 pcap 文件,但其中包含大量告警,因此如果没有 Snort 的帮助,无法将这些告警与提供的 pcap 文件进行匹配。我们需要单独处理 pcap文件,以确定告警的来源。
使用参数"--pcap -show"调查多个PCAP文件
让我们研究多个 pcap 文件,区分每个文件,看看会发生什么。 sudo snort -c /etc/snort/snort.conf -q --pcap-list="icmp-test.pcap http2.pcap" -A console --pcap-show
正在调查多个pcap文件pcap信息
markup
user@ubuntu$ sudo snort -c /etc/snort/snort.conf -q --pcap-list="icmp-test.pcap http2.pcap" -A console --pcap-show
Reading network traffic from "icmp-test.pcap" with snaplen = 1514
12/12-12:13:29.167955 [**] [1:10000001:0] ICMP Packet found [**] [Priority: 0] {ICMP} 192.168.175.129 -> 142.250.187.110
12/12-12:13:29.200543 [**] [1:10000001:0] ICMP Packet found [**] [Priority: 0] {ICMP} 142.250.187.110 -> 192.168.175.129
12/12-12:13:30.169785 [**] [1:10000001:0] ICMP Packet found [**] [Priority: 0] {ICMP} 192.168.175.129 -> 142.250.187.110
...
Reading network traffic from "http2.pcap" with snaplen = 1514
12/12-12:13:35.213176 [**] [1:10000001:0] ICMP Packet found [**] [Priority: 0] {ICMP} 142.250.187.110 -> 192.168.175.129
12/12-12:13:36.182950 [**] [1:10000001:0] ICMP Packet found [**] [Priority: 0] {ICMP} 192.168.175.129 -> 142.250.187.110
12/12-12:13:38.223470 [**] [1:10000001:0] ICMP Packet found [**] [Priority: 0] {ICMP} 142.250.187.110 -> 192.168.175.129
...
我们的 ICMP 规则被触发了! 正如您在输出结果中看到的,Snort 识别出了流量,区分了每个pcap文件,并根据我们的规则集发出了警报。
现在,请使用所附的 虚拟机 ,并 导航到 Task-Exercises/Exercise-Files/TASK-8 文件夹来回答问题!
生成的警报数量是多少?

python
170
继续阅读输出结果。 有多少个 TCP 段正在排队?

python
18
继续阅读输出结果。提取了多少个"HTTP响应头"?

python
3
使用第二个 配置文件检查 mx-1.pcap 文件。
sudo snort -c /etc/snort/snortv2.conf -A full -l . -r mx-1.pcap
生成的警报数量是多少?

python
68
使用默认配置文件检查mx-2.pcap文件。
sudo snort -c /etc/snort/snort.conf -A full -l . -r mx-2.pcap
生成的警报数量是多少?

python
348
继续阅读输出结果。 检测到的 TCP 数据包数量是多少?

python
82
使用默认配置文件检查 mx-2.pcap 和 mx-3.pcap文件。
sudo snort -c /etc/snort/snort.conf -A full -l . --pcap-list="mx-2.pcap mx-3.pcap"
生成的警报数量是多少?

python
1020
Snort 规则结构

对于任何蓝队和紫队队员来说,理解Snort规则的格式至关重要。Snort规则的主要结构如下所示;

每条规则都应包含操作类型、协议、源 IP 地址和目标 IP 地址、源端口号和目标端口号以及选项。请记住,Snort 默认处于被动模式。因此,大多数情况下,您会将 Snort 用作入侵检测系统 ( IDS)。您需要启动 "内联模式"才能启用入侵防御系统(IPS)模式。 但是,在使用内联模式之前,务必熟悉 Snort 的各项功能和规则。
Snort规则结构易于理解,但编写起来却比较复杂。您需要熟悉规则选项及其相关细节,才能创建高效的规则。建议您针对不同的使用场景练习Snort规则及其选项。
在本房间,我们将介绍基本的规则结构,并帮助您入门 Snort 规则。您可以通过练习不同的用例并深入研究规则选项的细节,不断提升规则创建技能。我们将重点介绍两个操作:"警报" (IDS模式下)和 "拒绝"(IPS模式下)。
规则必须包含头部信息才能被处理。规则选项是"可选"部分。 然而,如果不使用规则选项,几乎不可能检测到复杂的攻击。
| 行动 | 规则有多种操作方式。在为生产系统创建规则之前,请务必了解其功能并进行全面测试。以下是最常见的操作方式: - 警报:生成警报并记录数据包。 - 日志:记录数据包。 - 丢弃:阻止并记录数据包。 - 拒绝:阻止数据包,记录日志,并终止数据包会话。 |
| 协议 | 协议参数标识了规则中筛选出的协议类型。 请注意,Snort2 规则中仅支持四种协议过滤器(IP、TCP、UDP和 ICMP)。但是,您可以使用端口号和选项来检测应用程序流。例如,如果您想检测FTP流量,则不能在协议字段中使用FTP关键字;而是可以通过检查端口 21 上的TCP流量来过滤FTP流量。 |
IP地址和端口号
这些参数用于识别根据规则筛选的源 IP 地址和目标 IP 地址以及相关的端口号。
| IP过滤 | alert icmp 192.168.1.56 any <> any any (msg: "ICMP Packet From "; sid: 100001; rev:1;) 此规则将对来自 192.168.1.56 IP 地址的每个 ICMP 数据包创建警报。 |
| 过滤 IP 地址范围 | alert icmp 192.168.1.0/24 any <> any any (msg: "ICMP Packet Found"; sid: 100001; rev:1;) 此规则将对来自 192.168.1.0/24 子网的每个 ICMP 数据包创建警报。 |
| 过滤多个 IP 地址范围 | alert icmp [192.168.1.0/24, 10.1.1.0/24] any <> any any (msg: "ICMP Packet Found"; sid: 100001; rev:1;) 此规则将对源自 192.168.1.0/24 和 10.1.1.0/24 子网的每个 ICMP 数据包创建警报。 |
| 排除 IP 地址/范围。 | "否定运算符"用于排除特定的地址和端口。否定运算符用"!"表示。 alert icmp !192.168.1.0/24 any <> any any (msg: "ICMP Packet Found"; sid: 100001; rev:1;) 此规则将对每个并非源自 192.168.1.0/24 子网的 ICMP 数据包创建警报。 |
| 端口过滤 | alert tcp any any <> any 21 (msg: " FTP端口 21 检测到命令活动"; sid: 100001; rev:1;) 此规则将对发送到端口 21 的每个TCP数据包创建警报。 |
| 排除特定端口 | alert tcp any any <> any !21 (msg: "没有FTP端口 21 命令通道的流量活动"; sid: 100001; rev:1;) 此规则将对每个未发送到端口 21 的TCP数据包创建警报。 |
| 过滤端口范围(类型 1) | alert tcp any any <> any 1:1024 (msg: " TCP 1-1024 系统端口活动"; sid: 100001; rev:1;) 此规则将对发送到 1 到 1024 端口之间的每个TCP数据包创建警报。 |
| 过滤端口范围(类型 2) | alert tcp any any <> any:1024 (msg: " TCP 0-1024 系统端口活动"; sid: 100001; rev:1;) 此规则将对发送到端口 1 到 1024 的每个TCP数据包创建警报。 |
| 过滤端口范围(类型 3) | alert tcp any any <> any 1025: (msg: " TCP非系统端口活动"; sid: 100001; rev:1;) 此规则将对发送到源端口大于或等于 1025 的每个TCP数据包创建警报。 |
| 过滤端口范围(类型 4) | alert tcp any any <> any [21,23] (msg: "检测到FTP和 Telnet 端口 21-23 活动"; sid: 100001; rev:1;) 此规则将对发送到端口 21 和 23 的每个TCP数据包创建警报。 |
方向
方向运算符指示 Snort 要过滤的流量方向。规则左侧显示源地址,右侧显示目标地址。
- -> 从源到目的地的流程。
- <> 双向流
请注意, Snort 中没有"<-"运算符。

Snort 中有三种主要规则选项。
- 通用规则选项 - Snort 的基本规则选项。
- 有效载荷规则选项 - 用于分析有效载荷数据的规则选项。这些选项有助于检测特定的有效载荷模式。
- 非有效载荷规则选项 - 专注于非有效载荷数据的规则选项。这些选项有助于创建特定模式并识别网络问题。
一般规则选项
| 消息 | 消息字段是对规则的基本提示和快速标识。规则触发后,消息字段将显示在控制台或日志中。通常,消息部分是一行概括事件的语句。 |
| SID | Snort 规则ID (SID) 具有预定义的作用域,每条规则都必须具有格式正确的 SID。SID 有三种不同的作用域,如下所示。 - <100: 保留规则 - 100-999,999: 规则随产品一起提供。 - >=1,000,000: 用户创建的规则。 简而言之,我们制定的规则边长应大于 1 亿。另一点也很重要,SID 不应重叠,且每个 ID 必须是唯一的。 |
| Reference | 每条规则都可以包含附加信息或参考资料,以解释规则或威胁模式的用途。这些信息或参考资料可以是通用漏洞披露 ( CVE ) ID 或外部数据。为规则提供参考资料始终有助于分析人员进行警报和事件调查。 |
| Rev | Snort 规则可以进行修改和更新,以解决性能和效率问题。修订选项允许分析人员访问每条规则的修订信息,从而轻松了解规则的改进情况。每条规则都有其唯一的修订编号,规则历史记录没有自动备份功能。分析人员应自行维护规则历史记录。"修订"选项仅指示规则的修订次数。 alert icmp any any <> any any (msg: "ICMP Packet Found"; sid: 100001; reference: cve , CVE -XXXX; rev:1 😉 |
有效载荷检测规则选项
| 内容 | 有效载荷数据。它通过 ASCII、十六进制或两者来匹配特定的有效载荷数据。此选项可以在单个规则中多次使用。但是,您创建的模式匹配特征越具体,分析数据包所需的时间就越长。 以下规则将针对每个包含关键字"GET"的HTTP数据包创建警报。此规则选项区分大小写! - ASCII 模式 - alert tcp any any <> any 80 (msg: "GET 请求已发现"; content:"GET"; sid: 100001; rev:1;) - HEX mode - alert tcp any any <> any 80 (msg: "GET Request Found"; content:"|47 45 54|"; sid: 100001; rev:1;) |
| Nocase | 已禁用大小写区分, 用于增强内容搜索效果。 alert tcp any any <> any 80 (msg: "GET Request Found"; content:"GET"; nocase; sid: 100001; rev:1;) |
| 快速模式 | 优先搜索内容可以加快有效载荷搜索速度。默认情况下,Snort 会使用最大的内容并将其与规则进行比对。"fast_pattern"选项可以帮助您选择具有特定值的初始数据包匹配项,以便进行进一步调查。此选项始终不区分大小写,并且每个规则只能使用一次。请注意,当使用多个"content"选项时,必须启用此选项。 以下规则有两个内容选项,fast_pattern 选项指示 Snort 使用第一个内容选项(在本例中为"GET")进行初始数据包匹配。 alert tcp any any <> any 80 (msg: "GET Request Found"; content:"GET"; fast_pattern; content:"www"; sid:100001; rev:1;) |
非有效载荷检测规则选项
还有一些规则选项专门针对非有效载荷数据, 这些选项有助于创建特定模式并识别网络问题。
| ID | 过滤 IP ID 字段 alert tcp any any <> any any (msg: "ID TEST"; id:123456; sid: 100001; rev:1;) |
| flags | 过滤TCP标志 - F -FIN - S -SYN - R -RST - P -PSH - A -ACK - U -URG alert tcp any any <> any any (msg: "FLAG TEST"; flags:S; sid: 100001; rev:1;) |
| dsize | 过滤数据包有效载荷大小 - dsize:min<>max; - dsize:>100 - dsize:<100 alert ip any any <> any any (msg: "SEQ TEST"; dsize:100<>300; sid: 100001; rev:1;) |
| Sameip | 过滤重复的源IP地址和目标IP地址 alert ip any any <> any any (msg: "SAME-IP TEST"; sameip; sid: 100001; rev:1;) |
请记住,一旦创建规则,它就成为本地规则,应该保存在"local.rules"文件中。该文件位于"/etc/snort/rules/local.rules"。下面简要介绍如何编辑本地规则。
修改本地规则
shell-session
user@ubuntu$ sudo gedit /etc/snort/rules/local.rules
那是你的"local.rules"文件。

请注意,Snort 实例默认启用了一些规则。为了方便您管理规则并改善锻炼体验,这些规则已被禁用。更多信息,请参阅Snort 用户手册:http://manual-snort-org.s3-website-us-east-1.amazonaws.com。
至此,我们已经介绍了Snort规则的基本结构。建议在创建高级规则和使用其他选项之前,先理解并练习这些基础知识。
哇!我们已经掌握了 Snort 规则的基础知识! 现在,请使用附件中的虚拟机,并导航到 Task-Exercises/Exercise-Files/TASK-9文件夹来回答问题! 请注意,您可以使用以下命令在当前目录中创建日志:-l
请回答以下问题
使用"task9.pcap"文件。编写一条规则来过滤 IP ID "35369",并针对给定的 pcap 文件运行该规则。检测到的数据包的请求名称是什么?您可以使用以下命令:"snort -c local.rules -A full -l . -r task9.pcap"
规则:alert icmp any any <> any any (MSG:"alert id 335369"; ID:35369; SID:10001; REV:1)
执行:snort -c local.rules -A full -l . -r task9.pcap
完事后他会保存一个snort.log.xxx文件的
使用snort -dvr snort.log.xxx 打开即可看到下面数据

python
TIMESTAMP REQUEST
清除之前的告警文件并注释掉旧规则。创建一条规则来过滤带有Syn 标志的数据包,并针对给定的 pcap 文件运行该规则。检测到的数据包数量是多少?
规则:alert tcp any any <> any any (MSG:"SYN alert"; FLAGS:S; SID:10002; REV:1)
执行:snort -c local.rules -A full -l . -r task9.pcap
完事后他会保存一个snort.log.xxx文件的
使用snort -dvr snort.log.xxx 打开即可看到下面数据

python
1
清除之前的告警文件并注释掉旧规则。编写一条规则来过滤带有Push-Ack标志的数据包,并将其应用于给定的 pcap 文件。检测到的数据包数量是多少?
shell
# 删掉这些产生的日志文件先
sudo rm -rf snort.log.*
把规则写进local.rules,规则如下:
规则:alert tcp any any <> any any (MSG:"SYN PUSH ACK alert"; FLAGS:P,A; SID:10003; REV:1)
执行:snort -c local.rules -A full -l . -r task9.pcap

回车snort查看后就能看到多少个包了

python
216
清除之前的告警文件并注释掉旧规则。创建一条规则来过滤源 IP 和目标 IP 相同的UDP 数据包,并将其应用于给定的 pcap 文件。有多少个数据包的源地址和目标地址相同?
做之前记得删除那个snort.log.xxx,你不想删除也可以,记得找时间戳作为文件后缀最大的那个才是最新的
规则:alert udp any any <> any any (MSG:"sampeip alert"; SAMPEIP; SID:10004; REV:1)
执行:snort -c local.rules -A full -l . -r task9.pcap
同理执行后使用snort查看这个log

python
7
案例示例------一位分析师成功修改了一条现有规则。实施后,分析师必须更改规则中的哪个选项?
python
# 版本
rev
Snort2 操作逻辑:要点回顾
要点回顾
鼻喷剂的主要成分
- 数据包解码器 - Snort 的数据包收集器组件。它收集并准备数据包以进行预处理。
- 预处理器 - 用于整理和修改检测引擎数据包的组件。
- 检测引擎 - 主要组件,它通过应用规则来处理、剖析和分析数据包。
- 日志记录和告警 - 日志和告警生成组件。
- 输出和插件 - 此组件支持输出集成模块(例如,向 syslog/mysql 发送警报)和其他插件(规则管理检测插件)。
Snort规则
Snort 共有三种规则类型,具体说明如下:
- 社区规则 - 根据 GPLv2 协议发布的免费规则集。公开访问,无需注册。
- 注册规则 - 免费规则集(需要注册)。此规则集包含订阅者规则,延迟 30 天生效。
- 订阅用户规则(付费) - 付费规则集(需要订阅)。此规则集为主规则集,每周更新两次(周二和周四)。
下载并阅读更多规则:https://www.snort.org/downloads
注意:安装 Snort2 后,它会自动创建所需的目录和文件。但是,如果您想使用社区版或付费版规则,则需要在 Snort.conf 文件中分别指定每条规则。
由于 Snort 的配置文件篇幅很长,而且包含所有功能,因此对于一些用户来说,在不造成配置错误的情况下对其进行编辑会比较麻烦。正因如此,Snort 提供了多个规则更新模块和集成工具。总而言之,切勿直接替换已配置的 Snort 配置文件;而应手动编辑配置文件,或使用其他工具和模块更新规则,以避免出现故障、崩溃或功能缺失等问题。
- snort.conf:主配置文件。
- local.rules:用户生成的规则文件。
让我们先来概览一下主配置文件(snort.conf)。
sudo gedit /etc/snort/snort.conf。
导航至"步骤 1:设置网络变量"部分。
本节管理检测范围和规则路径。
| 标签名称 | 信息 | 例子 |
|---|---|---|
| 家庭网络 | 这就是我们正在保护的地方。 | 'any' 或 '192.168.1.1/24' |
| 外部网络 | 此字段表示外部网络,因此我们需要将其设置为"any"或"!$HOME_NET"。 | 'any' 或 '!$HOME_NET' |
| 规则路径 | 硬编码规则路径。 | /etc/snort/rules |
| SO_RULE_PATH | 这些规则与注册用户规则和订阅用户规则一起提供。 | $RULE_PATH/so_rules |
| PREPROC_RULE_PATH | 这些规则与注册用户规则和订阅用户规则一起提供。 | $RULE_PATH/plugin_rules |
导航至"步骤 2:配置解码器"部分。
在本节中,您可以管理Snort 的IPS模式。单节点安装的IPS模型与"afpacket"模式配合使用效果最佳。您可以启用此模式并在IPS 模式下运行 Snort 。
| 标签名称 | 信息 | 例子 |
|---|---|---|
| #配置数据采集 | IPS模式选择。 | afpacket |
| #配置 daq_mode | 激活内联模式 | inline |
| #配置日志目录 | 默认日志路径是硬编码的。 | /var/logs/snort |
数据采集模块 (DAQ) 是专门用于数据包 I/O 的库,可提供灵活的数据包处理方式。可以根据不同的用途选择DAQ类型和模式。
Snort 中有六个数据采集模块:
- PCAP:默认模式,也称为嗅探器模式。
- Afpacket:内联模式,也称为IPS模式。
- Ipq:在Linux上使用 Netfilter 实现的内联模式。它取代了 snort_inline 补丁。
- Nfq: Linux上的内联模式。
- Ipfw:在 OpenBSD 和 FreeBSD 上使用重定向套接字,配合 pf 和 ipfw 防火墙进行内联。
- 转储:测试内联和规范化模式。
最流行的模式是默认模式(pcap)和内联/ IPS(Afpacket)。
导航至"步骤 6:配置输出插件"部分。
此部分管理IDS / IPS操作的输出,包括日志记录和告警格式的详细信息。默认情况下,所有信息都会显示在控制台应用程序中,因此配置此部分将有助于您更高效地使用 Snort。
导航至"步骤 7:自定义规则集"部分。
| 标签名称 | 信息 | 例子 |
|---|---|---|
| # 特定站点规则 | 硬编码的本地和用户生成的规则路径。 | 包含 $RULE_PATH/local.rules |
| #include $RULE_PATH/ | 硬编码的默认/已下载规则路径。 | 包含 $RULE_PATH/规则名称 |
请注意,"#" 是注释运算符。
您需要取消注释才能激活该行。