作者丨Owen Garrett
译者丨陈峻
策划丨孙淑娟
与经典的 OpenSSL Heartbleed、Apache Struts 的漏洞类似,log4j2 漏洞对于以数字化为基础的企业所造成的深远影响,远不止打上可用的补丁,以及重新部署应用那么简单。我们往往还需要及时发现、并弥补生产环境与平台中的潜在漏洞。下面,我将向您展示如何使用 Deepfence 的 ThreatMapper 和 ThreatStryker,来实现这一点。
作为一个开源的安全、可观察性平台,Deepfence ThreatMapper()可实现在跨容器、Kubernetes、云平台、无服务器环境、VM(虚拟机)、以及裸金属等生产环境和应用中,搜索包括 Log4j2 在内的各种漏洞,进而根据漏洞被利用的风险程度,予以排名。也就是说,ThreatMapper 通过进一步计算每个漏洞的利用率,来消减扫描工具所产生的误报,以便您发现和锁定对于应用程序可能构成的最大风险。
Deepfence ThreatStryker()则在扩展了 ThreatMapper 的基础上,通过捕获网络流量,识别攻击的特征,洞察攻击者在目标应用中的独特行为,进而通过执行预定义的安全策略,实现立即阻断。
作为一个演示环境,下面是一个存在着 Log4j2 漏洞的 Java 应用容器映像。我将向您展示攻击者是如何远程利用它,以及如何使用 ThreatMapper 和 ThreatStryker 来实时检测和防范针对 Log4j2 的攻击。
如何使用 ThreatMapper 找到最容易被利用的漏洞
请参阅链接 中的步骤 1 到 4,安装 ThreatMapper,并开始您的第一次漏洞扫描。您可以在 ThreatMapper 控制台的“最可利用漏洞(Most Exploitable Vulnerabilities)”报告中,查看到那些最严重的漏洞。
下图向您展示了,我在对演示环境进行扫描之后,发现的最容易被利用的漏洞报告的上半部分。ThreatMapper 不但突出显示了风险最大的漏洞,并显示了那些可能会被利用的攻击路径。您可以在图中位于 HAproxy 的后面,看到 Log4j 容器(已用文本标出,便于您的参考)。这便可以利用 log4j2 漏洞,开展攻击的路径。
当您将鼠标悬停在上述攻击路径中的关键节点上时,您将看到有关该漏洞的相关信息。例如,节点 deepfenceio/log4j-vulnerable-app:latest 具有 Top CVE:CVE-2021-44228 的网络攻击向量类型(Attack Vector type:network)。攻击者可以通过 Port:8080 访问到。
向下滚动页面,您将看到整张排名列表,其中各种详细信息一目了然。
当您单击特定漏洞项时,将能够更加深入地了解、并在表格和 JSON 视图中,查看到详细的信息。在上述演示中,我们单击了排名第一的漏洞 Log4j,并查看到了与之相关的信息。
目前,ThreatMapper 可以提取 50 多种不同的威胁源,并尽可能地为用户提供针对各种特定漏洞的最新威胁源。同时,ThreatMapper 还提供了指向外部资源的链接,以便您获取有关漏洞的最新消息。例如,在表格视图中,您可以看到存在问题的包、它所在的位置(例如它正运行在哪个容器中)、CVSS(Common Vulnerability Scoring System,通用漏洞评分系统)的评分、修复它的版本、以及其他便于您理解其严重性和修复方式的信息。
如何识别 Log4j2 类攻击,并使用 ThreatStryker 予以阻止
为了发现目标系统中是否存在诸如 Log4j2 之类最严重的可利用漏洞,您需要应用临时的 WAF(Web Application Firewall,Web 应用防火墙)规则,来限制攻击者对于此类漏洞的访问和利用,同时也应当与开发团队协作,去优先修复这些漏洞。不过常言道:我们需要知其然,更要知其所以然。不知您是否考虑过如下问题:
- 攻击者是否已经领先了您一步?
- 攻击者在运用何种尝试来发现漏洞?
- 他们是否已经找到了漏洞利用的入口?
- 他们是否在使用它进行横向扩展,进而在您的应用中获得额外的控制?
- 您是否能立即阻止他们?
对于上述问题,ThreatStryker 正好能够派上用场。ThreatStryker 建立在 ThreatMapper 执行的静态分析之上,添加了运行时(runtime)的检查功能,以确定攻击者为了利用潜在漏洞所做的各项尝试。
通常,ThreatStryker 会从您的应用程序中,捕获两种主要类型的运行时遥测数据(runtime telemetry):
- 攻击指标:通过深度捕获数据包,它能够发现各种嗅探、横向传播、命令和控制(command-and-control)、渗透、以及其他攻击活动。
- 危害指标:通过在主机上捕获进程和文件系统的异常,它能够发现攻击者是否已成功地利用了那些易受攻击的组件。
由于 ThreatStryker 的数据包捕获()功能运行在后台,因此它可以对来自所有节点和容器的流量,进行静默式采样。出于本演示的目的,我手动启动数据包的捕获功能,并选择需要监控的特定进程:
执行该数据包捕获功能是不需要代理或内核模块的。ThreatStryker 使用 eBPF(译者注:extended Berkeley Packet Filter,是一种可以在 Linux 内核中运行用户编写的程序,而不需要修改内核代码或加载内核模块的技术)来抓取流量,对其进行采样,然后将其与运行时的威胁源进行匹配,以识别出各种类型的恶意流量。
在收集到足够的流量,并完成数据检查和分析后,您将会看到包含如下警报的结果报告。
ThreatStryker 使用网络杀伤链(Cyber Kill Chain)框架(https://www2.deloitte.com/content/dam/Deloitte/sg/Documents/risk/sea-risk-cyber-101-july2017.pdf)的扩展版本,来模拟攻击行为。在意图阶段(Intent Stage),它会将事件映射到网络杀伤链中,并以上下文的方式,提供攻击类型和严重程度。您只需单击下半部分列表中的某个警报,就能够看到各种深入的详细信息。例如,下图是我在单击了尝试获取管理员权限警报后,所看到的内容。下半部分有一个桑基图(Sankey Diagram)。该图显示了恶意活动随着时间变化,而推进的情况。这方便了您开展追踪,应用策略,以及获悉正在发生的攻击。而上半部分则包括了表格和 JSON 视图。它收录了各种触发警报的详细信息,您可以上下滚动,以查看包括数据包的有效负载、以及违规字符串等大量的表述信息。如图所示,我停留在了臭名昭著的 ${jndi:ldap 字符串处,它便是 Log4j2 攻击的签名。
上面的示例展示了针对入站(或入口)流量的检查。此类检查可以有效地发现、并报告各种利用 Log4j2 漏洞,获取管理员权限的行为。不过,光有入站流量检查显然是不够的。ThreatStryker 也会去检查出站(或出口)流量、以及各种主机上的异常情况。
让我们来查看另一个警报 --Suspicious tracing event process strace /bin/ls -l:23408 trying to ptrace:23409。它是在主机检查中产生的,即:一个进程正在尝试着执行系统追踪。这是在正常操作中并不常见的事件,它指示了攻击者已经找到了破坏容器或应用程序的方法。
孤立地看,这些事件中的每一个都足以引起安全人员的警觉,并且它们表明了攻击的演变阶段。而当 ThreatStryker 为事件添加意图和分类时,它会进一步将各项攻击指标和危害程度关联起来,以描述攻击是如何演变的,以及漏洞被利用的风险是如何增加的。
当然,您也可以使用一系列监控工具,实时跟踪 ThreatStryker 事件日志,或者在 ThreatStryker 中配置好安全措施,以便在目标达到确定性的阈值时,予以干预,并抑制正在发生的攻击。
如下图所示,在 ThreatStryker 的保护策略(Protection Policies)仪表板中,您可以定义各种安全策略(包括隔离策略和网络策略等),以阻止正在进行的各类攻击。
您可能已经注意到了,在该演示环境中,我们尚未创建或设置任何保护策略。为此,请单击网络策略(Network Policies)选项卡,然后单击右上角的添加策略(Add Policy)按钮。您将看到一个选项菜单,并可以在其中选择严重性、警报类型、意图类型等。
接着,您可以在所选的时段内,自定义或无限期地阻止入站和出站流量。
当然,仅靠阻断攻击只能部分解决问题。对此,ThreatStryker 还可以识别主机上已发生的攻击事件,包括:异常的文件系统篡改、进程活动、以及主机或负载已被攻陷等状况。对此,我们可以采用各种隔离政策,根据实际情况予以冻结、阻止、终止或删除主机,防止攻击影响的进一步传播与恶化。
若要创建隔离策略,请前往保护策略(Protection Policies)仪表板上的隔离策略(Quarantine Policies)选项卡,单击添加策略(Add Policy)。下图便是我们在演示环境中创建的示例策略。
小结
综上所述,作为一个开源的平台,ThreatMapper 可以学习到应用程序的逻辑拓扑结构,识别潜在的易受攻击负载,并针对 50 多个不同的威胁源开展扫描工作,进而实时、准确地向您展示和提供有关每个负载可能存在的漏洞信息。通过将发现的结果与攻击面相关联,ThreatMapper 会告诉您,诸如 Log4j2 之类的漏洞是如何被利用的,以便您迅速采取行之有效的修复措施。
而 ThreatStryker 是建立在由 ThreatMapper 创建的漏洞图表和信息的基础上,通过识别攻击行为,判断攻击步骤,进而阻断和防范其攻陷目标应用。
- 参考链接:
- ThreatMapper 和 ThreatStryker 的演示视频 --
- ThreatStryker 的实时沙箱 --
- 在 GitHub 上获取全开源的 ThreatMapper--
译者介绍
陈 峻 (Julian Chen),51CTO 社区编辑,具有十多年的 IT 项目实施经验,善于对内外部资源与风险实施管控,专注传播网络与信息安全知识与经验;持续以博文、专题和译文等形式,分享前沿技术与新知;经常以线上、线下等方式,开展信息安全类培训与授课。《linux就该这么学》不错的linux自学书籍