FTP是一组规则,定义了用于说明计算机系统发送的原始统计数据的标准文件格式和操作过程。FTP就像计算机系统的通用语言。互联网中的计算机系统可能将采用截然不同的应用软件和硬件;协定的作用就是使其能相互通信。
很多FTP服务于不同的目的,其中许多可能将很复杂。由于其固有的复杂性,应用软体流程中的安全可靠恶意应用软件是不可避免的。与其他反击传播方式相比,应用软体流程中的安全可靠恶意应用软件一般来说会产生更显着的安全可靠影响,即使反击者可能将能够借助这些恶意应用软件在易受反击的计算机系统上赢得远程标识符执行状态,而无需任何人采用者交互。他们早已在现实生活中看见过此类反击,例如恶名昭彰的 WannaCry 勒索应用软件,它借助简单最新消息块 ( SMB ) 协定(称为 EternalBlue)通过身份验证统计数据和要求以比特币身份验证货币支付巨款来反击 MicrosoftWindows 计算机系统。迄今为止,据估计,这种恶意应用软件早已影响了 150 个国家的 20 Doulevant电脑。
强化应用软体流程是一项关键任务,能最大限度地减少 WannaCry 等反击传播方式。科学研究相关人员致力于保证采用FTP模糊不清试验等辅助工具正保证护很多最流行的应用软体流程。这种恶意应用软件辨认出技术将文件格式错误的统计报文发送至正在试验的应用流程,以辨认出互联网协定同时实现中的恶意应用软件。辨认出并调查报告这些恶意应用软件,特别是在常用应用流程中,有助于降低每个人的互联网风险。
Fortinet 的科学研究相关人员与其他严重威胁科学研究团体一起协助同时实现这一最终目标。在本博客中,他们记录了审核和模糊不清试验 MicrosoftInternet 最新消息访问协定 ( IMAP ) 应用流程协定的操作过程。虽然他们没辨认出任何人新恶意应用软件,但详细的指南能协助其他人在他们的严重威胁辨认出和分析辅助工具复本添加或改进模糊不清技术策略。
为什么选择 IMAP 应用流程协定?
应用软体流程采用应用流程和伺服器架构来交换统计数据。然而,即使它们共享相同的FTP规范化,应用流程和伺服器之间的统计数据说明也是不同的。统计数据说明一般来说由在各个组件中同时实现的说明器按照单独的规范化执行。因此,科学研究相关人员必须同时检查应用流程和伺服器,以保证说明器恰当同时实现。
于他们没看见供应商公开调查报告的很多 IMAP 应用流程安全可靠问题,他们决定科学研究 IMAP 应用流程同时实现,同时赢得许多关于开放源码模糊不清器 WhatTheFuzz ( WTF ) 的实践经验。WTF 是一种分布式系统、标识符覆盖引导、可定制、虚拟化的基于镜像的模糊不清器,旨在反击运行在 MicrosoftWindows 上的采用者或Mach模式最终目标。
本文中没恶意应用软件披露,即使他们没在 MicrosoftIMAP 应用流程中辨认出任何安全可靠问题。但他们确实分享了许多兔子洞、他们遇到的限制以及调试 WTF 模糊不清器模块的提示和技巧。他们还将介绍一个特别有趣的 IMAP 响应输出的逆向操作过程,该输出最初似乎很脆弱,但在深入科学研究标识符后辨认出是良性的。
了解基本 IMAP 协定
IMAP 应用流程支持用于不同 IMAP 操作的各种命令。应用流程命令开始一个操作并期望来自伺服器的响应。每个应用流程命令都以称为 ” 标记 ” 的标识符作为前缀。对于应用流程发送的每个命令,这个 ” 标签 ” 应该是唯一的。一般来说,应用流程命令如下所示:
重要的是,应用流程必须严格按照规范化遵循语法。发送缺少或无关的空格或参数的命令是一个语法错误。
IMAP 连接包括建立客户机 / 伺服器互联网连接、来自伺服器的初始问候以及客户机 / 伺服器交互。这些客户机 / 伺服器交互包括客户机命令、伺服器统计数据和伺服器完成结果响应。
应用流程和伺服器传输的所有交互都是行的形式,即以回车和换行结尾的字符串。
应用流程需要做的第一件事是在特定端口上与远程伺服器建立连接。在这种情况下,他们采用 openssl 从终端连接到自定义 IMAP 伺服器。
注意到伺服器状态响应以 “*” 为前缀,称为未标记响应,表示伺服器问候,或伺服器状态不表示命令完成(例如,即将发生的系统关闭警报)。响应中列出的任何人功能都将被标记响应中指示的伺服器视为 BAD 命令。
状态响应能加标签或不加标签。标记状态响应指示应用流程命令的完成结果(OK、NO 或 BAD 状态),并具有与命令匹配的前缀标记。客户端必须先向 IMAP 伺服器进行身份验证,然后才能导航邮箱。有许多 IMAP 伺服器同时实现允许匿名访问某些邮箱。像下面的例子一样,他们的自定义 IMAP 伺服器允许匿名访问。但是,值得注意的是,经过身份验证的应用流程的功能列表一般来说与未经身份验证的应用流程不同。登录的应用流程一般来说包含更多来自 IMAP 伺服器的未锁定功能。
现在应用流程已登录,它能列出邮箱中存在的文件夹这样,他们就能看见邮箱中存在的文件夹层次结构。文件夹具有名称属性,在括号中表示。许多属性对于遍历文件夹层次结构很有用,例如 HasNoChildren 和 HasChilden。HasNoChildren 属性的存在表明邮箱没当前经过身份验证的应用流程可访问的后来邮箱。在知道邮箱的文件夹结构后,应用流程能采用 SELECT 命令在该文件夹上打开一个会话,以便访问邮箱中的邮件。
当返回选中状态时,伺服器必须先将上述未标记的统计数据发送给应用流程,然后再向应用流程返回 OK。如果选择状态建立成功,则称应用流程处于选择状态,能从邮箱中搜索和下载最新消息。SEARCH 命令在邮箱中搜索与给定搜索条件匹配的邮件。搜索条件由一个或多个搜索关键字组成。它能支持更全面的搜索条件,例如查找具有指定字段名称的标题并且在标题的文本中包含指定字符串的最新消息。上面的示例显示了最简单形式的 SEARCH 命令,它将搜索伺服器中的所有可用最新消息。未标记的响应表明自定义 IMAP 伺服器中有一条最新消息可用。许多应用流程提供电子邮件最新消息的预览。这能通过采用 FETCH 命令仅下载最新消息标头来完成。而 UIDFETCH 命令将下载整个电子邮件最新消息并将其本地存储在应用流程应用流程中。
IMAP 应用流程—伺服器的状态和流程图采用 IMAP 应用流程模糊不清器的可能将性
在现代模糊不清控制中,需要有一个线束与主模糊不清控制流程一起驱动模糊不清控制操作。虽然这不是强制性的 WTF 模糊不清器,一个专用的模糊不清器模块是必需的。如果你有 AFL/WinAFL 的经验,很多时间将花费在编写一个有效的 harness 流程上,但是你将花费大部分时间开发和排除 WTF 模糊不清器模块的故障。在内部,WTF 模糊不清器充当模拟器,以编程方式模拟由模糊不清器模块驱动的内存转储中的标识符。基本上,模糊不清器模块的核心由函数断点和断点处理流程组成。这些断点处理流程由用于不同目的的逻辑组成,例如拦截和修改最终目标采用的输出统计数据,以及复制功能 ( 如 I/O 操作、注册表操作和线程调度 ) 。该项目的存储库为模糊不清器开发操作过程提供了全面的指导方针。
首先,必须确定要模糊不清化的最终目标组件,并转储一个虚拟映像的镜像,以供模糊不清化模块采用。根据来自项目存储库的文档,该镜像映像一般来说取自感兴趣的最终目标模块的入口点,其中说明器例程采用输出统计数据。在 MicrosoftIMAP 应用流程中,InternetMail.dll 是同时实现 IMAP 和 POP3 应用流程协定的最终目标组件。这个 DLL 模块由 Windows 服务宿主进程托管,也被称为 svchost.exe。
WindowsMail 是与该模块交互的前端采用者界面 ( UI ) ,采用者能通过该界面设置 IMAP 帐户,并从邮件伺服器下载邮件最新消息。在编写他们的 IMAP 应用流程模糊不清器模块时,他们遇到了很多障碍,幸运的是,其中许多在项目的问题跟踪器中有部分记录。尽管大多数障碍都是针对于你所致力于的任何人最终目标,他们认为记录这些挑战和他们的工作区可能将会有所协助。
为 IMAP 应用流程模糊不清器模块开发做准备
为 WTF 模糊不清器编写一个模糊不清器模块并不是一件容易的事。这是即使他们试图从内存转储中模拟标识符。在应用软件模拟世界中,你不能期望模拟标识符的行为与在本机设备上执行的标识符相同。因此,要使模拟按预期工作,需要解决很多障碍。因此,在开始之前确定适当的辅助工具来跟踪和调试模糊不清器模块是至关重要的。
WTF 模糊不清器支持两种类型的跟踪文件,覆盖跟踪日志和 Tenet 跟踪文件。基本上,覆盖跟踪日志包含模拟器正在执行的每条指令的跟踪。它有助于诊断大多数模糊不清器模块问题。Tenet 跟踪文件包含每条执行的指令以及每条指令操作的内存 / 堆栈统计数据。Tenet 插件只能采用一个 Tenet 跟踪文件。Tenet 是一款出色的跟踪记录和回放 IDAPro 插件,可用于离线调试。WTF 模糊不清器生成的 Tenet 跟踪文件能通过 IDAPro 回放。这样,它允许采用者探索已执行的标识符,甚至分析读取 / 写入内存 / 堆栈的统计数据,从而使调试和故障排除模糊不清器模块变得更加容易。
但是,需要注意的是,如果记录的跟踪文件太大,插件需要很长时间来处理它。例如,一个几千兆字节的跟踪文件很容易占据大部分主机内存,这可能将无法通过 IDAPro 重播跟踪。作为一种解决方法,他们向 WTF 模糊不清应答器引入了一个 ” —— trace-start -address” 命令行参数,以便模糊不清应答器只有在到达指定地址时才开始跟踪。这个新引入的命令行参数显著减少了跟踪文件的大小。然而,这种过滤机制的结果在某些情况下并不是很成功。他们有时仍然会得到一个大的跟踪文件,即使所关心的函数中的起始地址不是唯一的。例如,函数可能将会在多个不确定的位置触发,导致跟踪器意外触发,这就违背了他们的最终目标。
经过试验,他们辨认出 WinDbg Preview 中的 time – trip – debugging ( TTD ) 特性也能用于离线调试。WinDbg 预览将附加一个正在运行的进程,并在最终目标进程中注入一个 TTD 专有的跟踪 DLL。注入的跟踪流程 DLL 负责捕获最终目标进程的运行时执行,并将执行的标识符保存在存储在物理磁盘中的跟踪文件中。为了模拟这个操作过程,他们创建了一个简单的 IMAP 伺服器,它读取以 JSON 文件格式定义的 IMAP 统计报文,并在 IMAP 连接建立时将统计报文发送给连接的应用流程 Windows Mail。同时,WinDbg Preview 被附加到 Windows 主机进程,用于服务记录标识符执行情况。这种方法的缺点是每次只能手动生成一个执行跟踪。但是,TTD 仍然是一个有用的特性,能补充离线调试体验。为最终目标可执行文件生成标识符执行跟踪的替代方法另一个用例通过比较 TTD 和 Tenet 生成的跟踪信息,借助差异调试技术对模糊不清器模块产生的更多问题进行深度故障排除。尽管如此,Tenet 仍然是在模糊不清器模块开发操作过程中产生跟踪文件来调试更复杂问题的首选。
接下来他们将分享许多技巧,这些技巧能直接从覆盖跟踪日志中而不是采用 Tenet 跟踪文件来确定许多更明显的问题。这有望为你节省模糊不清器模块开发的时间。
开发 IMAP 应用流程模糊不清器模块
WTF 模糊不清器模块在 WTF 框架之上运行。每个模糊不清器模块必须同时实现 WTF 框架注册的回调函数,然后由 WTF 可执行文件触发。
Windows Mail 用于与 IMAP 伺服器交互的特定 IMAP 命令。首先,他们将 WinDbg 预览调试器附加到最终目标进程,以生成 Windows Mail 与真实的 IMAP 伺服器 ( Gmail ) 交互的执行跟踪,以收集 IMAP 事务中的典型命令。清单 1 显示了调试器的输出,包括由 Windows Mail 客户机发送至 Gmail 伺服器的 IMAP 命令。
清单 1:WindowsMail 应用流程发送的调试器输出 IMAP 命令这样他们的变异方法侧重于 NAMESPACE、LIST、SELECT、SEARCH 和 FETCH 命令的 IMAP 响应。他们决定跳过对 UIDFETCH 命令的模糊不清试验,即使此响应处理流程涉及对本地文件系统中的最新消息统计数据库的读 / 写。不幸的是,即使 WTF 默认提供了 I/O 子系统模拟框架,对于他们的案例来说,这个操作也无法轻松同时实现。他们认为这是一种合理的权衡,即使大多数重要的解析操作 ( 如最新消息头说明器 ) 都在 FETCH 命令中进行。
IMAP 统计报文由此处规范化定义的一系列结构化文本最新消息组成。因此,他们的 IMAP 统计报文变异策略也需要具有结构感知能力。受著名的结构感知突变库 libprotobuf-mutator 的启发,他们采用 JSON 文件文件格式来存储每个突变的 IMAP 响应。这个 JSON 文件将作为模糊不清器模块的输出试验用例。根据规范化,JSON 对象的关键组件是 ResponseParams,它由 IMAP 应用流程将说明的核心统计数据组成。尽管如此,他们的突变器将专注于从 ResponseParams、ResponseStatus 和 ResponseType 中改变统计数据。
清单 2:示例 IMAP 响应输出试验用例本文主要讲的是理论上的可能将性,下一篇文章,他们会详细介绍实践中遇到的许多挑战。
