v0.2
Fireaway 是一款用于审计、绕过和从下一代防火墙的第7层/AppID检测规则以及其他深度包检测防御机制(如数据丢失防护(DLP)和感知应用的代理)中窃取数据的工具。这些策略基于必须允许连接通过NGFW才能看到第7层数据以进行过滤的原则,以及通过伪造应用程序来隐藏通信信道,使其在防火墙日志中看起来像正常用户流量(例如上网浏览)。在绕过数据丢失防护工具时,Fireaway 将数据分成小的“块”,这些块不会触发正则表达式和其他DLP规则,同时将数据嵌入到合法应用程序的伪造HTTP头中,而大多数数据丢失防护技术并不设计用于检查这些头。该工具还通过伪造应用程序头并将数据隐藏其中,成功击败了异常检测和启发式引擎。
启动 FireAway 服务器: 通常,FireAway 服务器应在防火墙的出口侧(例如互联网上的服务器)启动,并在一个被认为已关闭的端口上监听,以查看是否有基于应用程序的规则允许流量从该端口流出,或接收原始数据块以测试DLP或应用程序代理是否能识别它们:
python fa_server.py <监听端口> <模式编号>
服务器可以以四种模式启动:
测试模式(模式0)- 接收顺序发送或随机生成的测试数据。数据按接收时写入,无需重组。
顺序块接收模式(模式1)- 数据以客户端定义的块大小按顺序发送到一个或多个服务器。Fa_server 将在输出中记录接收到每个块的时间戳,并在重组时使用接收时间作为排序键。服务器还会生成一个“重组键”,用于 fa_assembler.py。这是一个随机生成的4字符键,用作块之间的分隔符,其设计思路是这些字符不会出现在传输的数据块中。
随机块接收模式(模式2)- 数据以随机顺序发送到一个或多个服务器。此模式依赖于客户端向池中的随机服务器发送“序列键”消息。启动每个服务器时,服务器会提示输入“序列键标识符”。这应该是一个在正在传输的文件中不存在的模式,以便服务器能正确地将连接中接收的数据识别为序列键。务必在所有服务器上使用相同的序列键标识符! 客户端会随机选择一台服务器发送序列键,因此重要的是所有服务器都能在其接收的数据中找到序列键。序列键将由接收服务器记录在名为'SequenceKey.txt'的文件中。
伪造应用块接收模式(模式3)- 将Base64编码的数据嵌入在伪造合法应用程序的HTTP头中,发送到一个或多个服务器。此模式也会生成一个“重组键”,用于 fa_assembler 脚本。
服务器在指定端口上接收的所有数据将保存在启动服务器目录下的 ReceivedData.txt 文件中。如果服务器检测到接收数据量大小不同(表明防火墙过滤已启动),此输出将显示在服务器控制台上:
连续两次运行收到相同或更少的数据量。如果发送测试数据,可能已达到最大数据泄漏大小。
启动 FireAway 客户端/应用程序伪造器: FireAway 客户端有三种模式:
测试模式(模式0)- 以递增的块大小发送随机数据,以查看在第七层控制介入并阻止流量之前可以发送多少数据。
顺序窃取模式(模式1)- 打开一个文件并以指定大小分块顺序发送。
随机窃取模式(模式2)- 打开一个文件并以指定大小分块发送,但以随机顺序。使用此模式时,客户端会询问序列键标识符。这是远程服务器上指定的值,客户端会将生成的序列键标记上该标识符,然后在文件传输之前,如果提供了服务器列表则发送到随机服务器,否则发送到指定的服务器 IP。
启动基本客户端:
python fa_client.py <FireAway 服务器 IP 或服务器列表文件路径> <FireAway 服务器端口> <客户端模式>
服务器列表应是一个简单的文本文件,每行包含一个 IP 地址。如果只使用一台服务器,可以直接指定单个 IP。
应用程序伪造客户端有三种模式:
测试模式(模式0)- 在 HTTP 头部中以递增的块大小发送随机测试数据,以确定在第七层控制介入并阻止流量之前可以发送多少数据。
Base64 编码窃取模式(模式1)- 将输入文件进行 Base64 编码,并将编码后的文件片段放入随机生成的 HTTP 头部中发送,以绕过 DLP 并将传输伪装成合法应用程序。
启动应用程序伪造客户端:
python fa_spoof.py <FireAway 服务器 IP 或服务器列表文件路径> <FireAway 服务器端口> <客户端模式>
应用程序伪造会将数据块随机插入到看起来合法的应用程序头部(例如 Facebook、LinkedIn 等)中,从而用各种应用程序污染日志以掩盖数据窃取。
Fireaway 重组器: Fireaway 重组器(fa_assembler.py)用于重组由 Fireaway 服务器接收的数据。重组器有三种模式,对应于接收数据的服务器的模式:
模式1- 重组按顺序由模式1服务器接收的数据。重组器将提示为每个包含接收数据的文件指定重组键,即服务器启动时生成并显示的随机值。该值也可以通过检查接收块的文件并查看前四个字符找到。
模式2- 重组由模式2服务器以随机顺序接收的数据。重组器将要求提供序列键的路径,该序列键在传输期间由随机服务器从客户端接收。它还会提示为每个文件提供重组键。
模式3- 重组在伪造的应用程序 HTTP 头部中接收到的 base64 编码数据。此数据与模式1类似,也会要求提供重组键。
启动重组器:
python fa_assembler.py <重组模式> <要重组的文件路径(用逗号分隔)>
输出将保存到指定的文件名。
如有任何问题或疑问,请通过 Github 报告。