来源:《USING APPLICATION LAYER METADATA FOR NETWORK SECURITY MONITORING》
https://chrissanders.org/tag/pstr/
0背景
在网络安全监控和入侵分析领域,我们都是数据的奴隶。一般来说,我们依赖于网络层的两种不同类型的数据;全部内容数据(PCAP)和会话数据(Netflow)。考虑到正确的传感器位置,这两种方法都很容易生成,而且有很多很好的资源可以用来学习如何从数据中获得良好的价值。也就是说,他们每个人都有自己的缺点。
0.1会话数据(Netflow)
Netflow是会话数据的标准形式,它详细描述了网络流量的“谁、什么、何时、何地”。我倾向于把这与你在每月手机账单上看到的通话记录等同起来。
netflow最好的一点是,它提供了大量的价值,而磁盘存储开销很小。这真是一个很大的效果。大多数商业级的路由器和防火墙都会产生netflow,而且有很多免费的开源工具,比如SiLK,可以用来生成和分析netflow。甚至还有一个叫做FloCon的年度会议,人们聚在一起谈论你可以用netflow做的很酷的事情。netflow数据唯一真正的缺点是它没有描绘出完整的图片,所以它通常最好是作为完整内容数据的补充。
0.2完整的内容数据(PCAP)
如果netflow会话数据等同于呼叫日志,那么PCAP形式的全部内容数据就像对所有呼叫进行完全记录。
PCAP格式已经变得非常普遍,可以通过各种免费和开源的应用程序收集和分析,比如Dumpcap、Tcpdump、Wireshark等等。许多更流行的入侵检测系统,比如Snort,也使用PCAP格式。作为一名分析师,拥有PCAP数据可以使分析过程成为一个理想的实现因为它在调查异常时提供了最高的上下文。完整的内容数据的主要缺点是它的磁盘存储开销极高,这使得大部分的组织都无法收集并储存任何合理数量的数据。根据我的经验,能够收集和存储PCAP的组织只能测量存储在小时内的数量,而不是几天。除此之外,除非你在一个合理的时间范围内对你想要的东西有一个概念,否则很难定位,这在一定程度上阻碍了分析的灵活性。
0.3应用程序层元数据(Application Layer Metadata)
应用程序层元数据的概念最初是在一个讨论中出现的,关于在网络安全监控功能中有用的附加数据类型,在会话数据和完整内容数据之间是一种有用的媒介。在我们所监控的大多数网络中,绝大多数的流量都是一些常用协议的应用层数据。其中最大的是HTTP,其次是其他常见的协议是:SSL、DNS和SMTP。
从这些协议作为基线开始,我们很快就意识到,我们可以通过消除不需要的东西来节省大量磁盘存储开销。有很多方法可以做到这一点,但是我们想要保持简单的哲学,所以我们开始使用tcpdump来读取PCAP数据,将ASCII格式的数据输出到一个文件中。然后,我们在该文件上运行Unix strings命令,以读取任何无法读取的二进制数据。
一个相当小的bash脚本的最终结果是能够以我们称为包字符串(Packet String)或PSTR文件的形式生成应用程序层元数据。这个脚本最好是作为cron作业来运行的,在这里它会解析不断生成的PCAP文件,以便生成附带的PSTR文件。
您可以下载从PCAP文件中生成此数据的bash脚本。这提供了一个简单的概念证明,并获取一个输入PCAP文件并生成一个输出PSTR文件。现在我们已经获得了以PSTR文件的形式生成的应用层元数据,让我们来看看一些用例。
一、额外的分析能力
我喜欢这种数据格式是因为我能够存储很多数据,并且可以快速地进行搜索,从检测的角度看有很多事情可以做。一些临时的想法包括:
1.1搜索HTTP,SMTP,DNS,SSL包头中的唯一值
这是我们在多数例子中做的工作。可以快速地对特定字段内的唯一值进行排序,并发现需要进行额外调查的异常值。
1.2计算某些字段的字节熵从而查找到不应该存在的加密数据
从常规渠道中传输加密数据是一种常用的策略。对Get和POST请求执行熵计算,从而发现加密的数据将是检测这种情况的好方法。
1.3检测某些字段的长度是否异常
可以进行一些统计分析,确定特定字段的值的长度通常在一定的范围内。使用这种方法,可以标记出太短和太长的异常值。在各种HTTP头字段,e-mail主题行,SSL证书交换中已经有成功的应用。
1.4枚举特定文件类型的下载
在短时间内枚举出在一定时间内下载的可执行文件或PDF文件。这可以通过PSTR文件中HTTP头数据进行快速分析。
二、将PSTR作为一种检测能力
当我们创建PSTR文件类型时,我们并没有真正预料到它是作为第二等级的检测。我所提及的第二等级分析和检测,指的是将过去近实时的检测转移到开始回溯流量的点上,以便于发现签名所不能发现的东西。这通常涉及到在大型数据集上进行基于统计和异常的检测。这是PSTR所具有的特性。
2.1User Agent使用案例
当恶意软件感染网络时,HTTP头中的User agent字段是捕获恶意软件的绝佳方法。很多恶意软件在字段中都会使用定制的值,这些值通常会偏离标准浏览器的识别字符串。常见的方法是在网络层级使用IDS/IPS签名捕获这些类型的恶意感染程序。事实上,如果您订阅普通流行的Snort规则集,那么可能正在使用它们的用户代理规则来检测已知的不良用户代理。
这种检测方案的唯一问题是,恶意软件的生成速度比AV和ISD公司能够跟上的速度要快的多。因此,有很多恶意的User Agent没有被考虑到。另外,某些恶意软件随机地生成User Agent,这意味着编写足够的签名从而进行检测是十分困难的。
某天,公司的分析人员开始对PSTR数据进行处理,并编写了一个快速处理脚本来解析给定站点的所有PSTR数据,获取了所有的User Agent数据,并根据唯一性进行排序。正如预想的一样,FireFox和Internet Explorer的典型User Agent出现了上千次,但是,有几个User Agent只出现了少数几次,并且与任何特定的浏览器都没有关联。经过更多的分析后,我们发现使用这些User Agent字符串的机器感染某种恶意软件的变种。
2.2E-Mail主题用例
上述用例让我们考虑到应用层元数据的其它常见字段,我们可以对他们进行相同类型的分析。其中一个字段是e-mail主题行字段。我们修改了User Agent解析代码,以便于查看与e-mail主题行相关的所有PSTR数据,并再次获得了一些非常酷的结果。
与大多数的分布集中在一个或两个唯一的字符串不同,我们看到的是数千个主题的分布。这在意料之中,因为大多数的电子邮件都只有一个独特的主题。然而,让我感兴趣的是,一些被过度使用的主题。我们同样发现了一个用户将他的工作文档发送给了他自己,这违反了策略。
三、将PSTR作为数据源
生成PSTR文件的最初目的是提供一种低磁盘存储开销的数据格式,为分析人员提供一个二级NSM数据源。在典型的工作流中,分析人员从类似于IDS的检测设备获取输入,然后PSTR成为分析人员的另一个可用的数据源,以便于为分析潜在的事件提供证据支持。
3.1恶意软件感染用例
首先看一个例子,我们刚刚收到了来自IDS的警报,它声明一个内部系统已经检测到感染的症状。因为,它看到了一个与已知僵尸网络C2连接的恶意GET请求,所以触发了签名。主机被检查了,似乎得到的请求与被触发的签名结果相匹配,所以确定这个计算机被感染了。
经过仔细检查,我们还注意到受感染的主机也发送了一个带有非常独特字符串的HTTP POST。这看起来可能是恶意行为的一个指示器,但是你的任何一个签名都不能触发它。在这种情况下,分析师很快就能够使用GREP快速地在我们所监视的网络上的所有流量的HTTP头数据中找到相同字符串的其他实例。PSTR数据被证明在网络中寻找其他受感染的主机非常有用。
3.2定向钓鱼用例
作为一个理论示例,考虑另一个例子,其中有几个用户已经联系了您的安全团队,因为他们收到了一封非常可疑的电子邮件,似乎是专门针对您的公司的。此电子邮件提到了工资调整,并要求客户端访问提供的链接,并使用其员工ID号和密码登录。
在检查了电子邮件之后,您已经确定它是从一个欺骗的电子邮件地址发送的,并且它使用了一个稍微修改过的主题行,这是每个接收方特有的。您还注意到,根据您从用户那里收到的报告,这些电子邮件在过去几周内已经出现。在这种情况下,你想做的一件事就是在你的组织中发现谁收到了这封电子邮件。这样做的目的是能够警告用户不要点击邮件中的链接,并且希望您能够找到一个模式来解释怎样选择收件人(访问某些系统、高级职员等)。
通常,您可以通过Exchange或Postfix日志进行搜索,以查看您是否能够找到收件人是谁。这当然依赖于您的组织有足够的日志记录。然而,字符串的独特性质使得查询这些数据源变得困难。使用PSTR数据,您可以编写一个快速正则表达式来匹配半独立的主题行,并运行一个非常快速的查询,该查询将提供这些结果。