0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

物联网安全实战从零开始-飞塔(Fortinet)防火墙认证绕过漏洞

蛇矛实验室 来源:蛇矛实验室 作者:蛇矛实验室 2022-11-08 11:20 次阅读

本环境是蛇矛实验室基于"火天网演攻防演训靶场"进行搭建,通过火天网演中的环境构建模块,可以灵活的对目标网络进行设计和配置,并且可以快速进行场景搭建和复现验证工作。

背景

Fortinet FortiOS是美国飞塔(Fortinet)公司的一套专用于FortiGate网络安全平台上的安全操作系统。该系统为用户提供防火墙、防病毒、IPSec/SSLVPN、Web内容过滤和反垃圾邮件等多种安全功能。10月10日,Fortinet官方发布安全公告,修复了其多个产品中的一个身份验证绕过漏洞(CVE-2022-40684),其CVSSv3评分为9.8。攻击者可以通过向易受攻击的目标发送特制的 HTTP 或 HTTPS 请求,有权访问管理界面的远程攻击者可以执行管理员操作。

4f36856a-5c49-11ed-a3b6-dac502259ad0.png

漏洞分析

CVE信息中说明了该漏洞为身份认证绕过漏洞,并且可以RCE。在开始分析前,我们需要先搭建漏洞环境。由于该漏洞影响范围如下,这里我使用防火墙的版本为forigate-vm64 7.2.1,内部 Fotios 版本与防火墙版本一致。

FortiOS版本 7.2.0-7.2.1
FortiOS版本 7.0.0-7.0.6
FortiProxy版本 7.2.0
FortiProxy版本 7.0.0-7.0.6
FortiSwitchManager版本 7.2.0
FortiSwitchManager版本 7.0.0

下面开始配置Fortigate防火墙,使其能够与我们的攻击机网络互通。

注意:Fortigate-VM-7.2.0以后使用新的证书方式,需要有fortinet账号获得永久试用,这里需要fortigate联网。

4f40e24e-5c49-11ed-a3b6-dac502259ad0.png

使用浏览器访问ip后,使用admin:password进行登录,登录后界面如下所示。至此,fortigate环境已配置完毕,接下来我们进行分析。

4f6724ae-5c49-11ed-a3b6-dac502259ad0.png

libguestfs 是一组 Linux 下的 C 语言的 API ,用来访问虚拟机的磁盘映像文件,几乎可访问任意类型的文件系统。debian系安装命令为"sudo apt install libguestfs-tools",安装完成后会有很多"virt-开头的命令。

将fortios.vmdk从下载好的fortigate压缩包中解压出来,使用"sudo virt-filesystems -a fortios.vmdk"也是查看磁盘的分区情况。然后使用"sudo guestmount -a fortios.vmdk -m /dev/sda1 --ro mount_dir_name"进行挂载。

mount成功后,rootfs.gz为文件系统压缩包,我们将其复制出来。

5000396e-5c49-11ed-a3b6-dac502259ad0.png

rootfs.gz解压后为rootfs,使用"cpio -i 2> /dev/null < rootfs"命令进行提取。提取后发现大量文件系统的目录和.tar.xz文件,.tat.xz文件使用xz解压时会失败,我们可以使用文件系统中自带的(sbin/xz)程序进行解压,这里只需注意它的链接器路径(将其修改至主机系统的链接器路径),我们patch后并保存。

502f0118-5c49-11ed-a3b6-dac502259ad0.png

xz解压后提取出各个文件系统目录,进入到bin目录后寻找httpsd程序。httpsd是init程序的软连接,并且这里可以看出init程序非常大,逆向该程序比较费时。所以我们可以根据调试信息先来逆向程序逻辑。

507fc90e-5c49-11ed-a3b6-dac502259ad0.png

运行以下命令开启httpsd程序的调试信息,当开启调试信息后,当我们对fotigate的web服务进行操作时,该操作的信息就会打印到屏幕上。

diagnosedebugenable
diagnose debugapplication httpsd -1
diagnose debugcli 8

50c83e00-5c49-11ed-a3b6-dac502259ad0.png

调试开启后,下面以登录授权访问api为例,简单分析一下流程,当我们在浏览器输入admin:password点击登录后访问api打印的调试信息如下

5163723a-5c49-11ed-a3b6-dac502259ad0.png

我们根据调试信息打印的字符在程序中进行搜索,根据字符串引用进行定位,发现程序执行了fweb_debug_init函数

51aa3404-5c49-11ed-a3b6-dac502259ad0.png

大致浏览一遍后发现后发现程序使用了Apache Portable Runtime库,我们可以根据函数库对函数的使用进行查询。这里的apr_table_get函数为从表单中取出key值对应的value。

51c1259c-5c49-11ed-a3b6-dac502259ad0.png

对fweb_debug_init函数进行交叉引用,发现sub_C4BF20调用了fweb_debug_init函数,这个函数与上面中的调试信息并无联系,我们继续往上跟。

51da9a90-5c49-11ed-a3b6-dac502259ad0.png

sub_C4C480调用了sub_C4BF20函数,并且后面的fweb_debug_final函数与上面图中最后登录成功后的最后产生的调试信息相同。那么fweb_debug_init与fweb_debug_final之间的俩个函数v3[1]函数和sub_C4C2A0产生了大量调试信息。我们跟进分析一下v3[1]函数

51fac9c8-5c49-11ed-a3b6-dac502259ad0.png

v3由参数a2赋值,a2为sub_C4C480函数的参数,

52e42294-5c49-11ed-a3b6-dac502259ad0.png

a2参数为off_3FEA400函数数组的地址

5305c5fc-5c49-11ed-a3b6-dac502259ad0.png

off_3FEA400函数数组为传入sub_C4C480函数的参数,当函数执行完fweb_debug_init后,通过参数加索引的方式调用相应hanler函数,这里v3[1]执行sub_c929F0函数

531705e2-5c49-11ed-a3b6-dac502259ad0.png

sub_c929F0函数中调用了api_check_access函数,并且程序会根据api_check_access返回值返回用户对应响应码的reponse。我们进入api_check_access函数中进行查看

534dba92-5c49-11ed-a3b6-dac502259ad0.png

api_check_access函数的返回值由几个子函数共同决定,当我们根据调试信息追函数流程时,发现在api_check_access中并没有输出任何调试信息,而是在sub_c929F0函数中调用了handle_cli_request输出了调试信息。同时handle_cli_request函数输出完vdom "root"后,该handler函数执行完毕并返回执行fweb_debug_final函数,随后结束该次event响应。

538aa54c-5c49-11ed-a3b6-dac502259ad0.png

上面我们大概知道了访问api时程序执行大概流程,但是具体细节和身份验证的流程我们还是不知道。下面我们直接用已公开的poc进行测试,并关注其调试信息以方便逆向。

53c35f9a-5c49-11ed-a3b6-dac502259ad0.png

此时调试如下,我们发现和上面已授权登录相比,多了俩条调试信息,分别是fweb_authorize_all和api_access_check_for_trusted_access,下面我们跟进去分析一下。

53ed507a-5c49-11ed-a3b6-dac502259ad0.png

当我们跟进去时发现sub_C4AC70函数先调用了sub_C4B590函数,然后ap_hook_handler hook前面我们分析的sub_C4AC60函数。sub_C4B590也同样是ap_hook_check_access_ex hook的fweb_authorize_all函数。那么到此所有的流程我们已经知道了,接下来我们分析一下漏洞是如何形成的。

557f7774-5c49-11ed-a3b6-dac502259ad0.png

在认证过程中,函数首先调用fweb_authorize_all判断v2+64是否等于"127.0.0.1",即判断是否本机访问,如果本机访问则sub_C50E80函数内部继续判断接口如果是否为vsys_fgfm接口。随后取Forwarded头的value值,strstr函数查找"for="的位置,随后执行if结构体内容,再次判断Forwarded_header_content_tmp中是否存在"by"字符,如果判断不通过并不会进入到api_check_access函数中。

559eff7c-5c49-11ed-a3b6-dac502259ad0.png

api_access_check_for_trusted_access函数中调用sub_C510D0,传入参数为"Node.js"

55d20548-5c49-11ed-a3b6-dac502259ad0.png

sub_C510D0函数中判断表单中User-Agent的value值是否与Node.js是否相同

55f9715a-5c49-11ed-a3b6-dac502259ad0.png

如果不是"Node.js",则判断User-Agent的value值是否与Report Runner是否相同

56006898-5c49-11ed-a3b6-dac502259ad0.png

进入到过以上俩种方式中的某一种,用户赋值为"Local_Process_Access",此时会绕过身份认证。也就是说要想攻击成功,需要设置Forwarded头value值必须为"for=",后面可以设置127.0.0.1来隐藏防火墙中的攻击记录,而User-Agent的value可以设置"Node.js"和"Report Runner"俩种中的一个。

562fd3c6-5c49-11ed-a3b6-dac502259ad0.png

以上俩种绕过测试只在Fortigate-VM-7.2.1(Fortigate-VM-7.2.0由于没有镜像所以没有测)有效,当fortigate-vm版本在7.0.0-7.0.5中User-Agent需要为Node.js(7.0.6没测)。

漏洞复现

未攻击前,使用ssh连接fortigate的admin用户需要密码登录。

564a3e46-5c49-11ed-a3b6-dac502259ad0.png

使用kali生成ssh-pulibc-key,然后利用漏洞绕过身份认证,并使用PUT方法设置fortigate的ssh-public-key1(实现这种攻击方式需设置User-Agent头为"Report Runner"),点击send进行攻击(或使用github已公开的exp脚本进行攻击)。

566b0da6-5c49-11ed-a3b6-dac502259ad0.png

出现"SSH key is good."后,说明攻击成功,此时使用ssh连接fortigate防火墙则需不要输入密码。获取fortigate终端后,可执行任意命令。

5672acaa-5c49-11ed-a3b6-dac502259ad0.png

总结

我们这一小节简单了解了身份认证绕过流程,分析并复现了fortigate防火墙身份认证绕过漏洞的形成过程以及如何利用。

蛇矛实验室成立于2020年,致力于安全研究、攻防解决方案、靶场对标场景仿真复现及技战法设计与输出等相关方向。团队核心成员均由从事安全行业10余年经验的安全专家组成,团队目前成员涉及红蓝对抗、渗透测试、逆向破解、病毒分析、工控安全以及免杀等相关领域。

审核编辑:汤梓红
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 物联网
    +关注

    关注

    2896

    文章

    43583

    浏览量

    367747
  • 操作系统
    +关注

    关注

    37

    文章

    6560

    浏览量

    122869
  • 防火墙
    +关注

    关注

    0

    文章

    411

    浏览量

    35536

原文标题:物联网安全实战从零开始-飞塔(Fortinet)防火墙认证绕过漏洞

文章出处:【微信号:蛇矛实验室,微信公众号:蛇矛实验室】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    【电脑安全技巧】电脑防火墙的使用技巧

    防火墙是最容易受到攻击的吗?事实上,系统标准版的防火墙使用也是有技巧的,现在就让番茄花园系统下载的小编介绍五种最佳实践方法,以减少黑客入侵心爱的电脑,让您的电脑系统既流畅又安全。 一、所有的
    发表于 07-12 15:59

    发现 STM32 防火墙安全配置

    前言 STM32 防火墙(Firewall)能够构建一个与其它代码隔离的带有数据存储的可信任代码区域,结合RDP、WRP以及PCROP,可用来保护安全敏感的算法。在STM32 Cube固件库参考代码
    发表于 07-27 11:04

    高防独立主机租用/托管的注意事项:防火墙的基本特征

    通道,才可以更加全面、有效地保护企业网内部网络不受侵害。防火墙的目的就是在网络连接之间建立一个安全控制点,通过允许、拒绝或重新定向经过防火墙的数据流,实现对进、出内部网络的服务和访问的审计和控制。二、只有
    发表于 12-03 16:06

    Linux防火墙入门教程分享

    合理的防火墙是你的计算机防止网络入侵的第一道屏障。你在家里上网,通常互联网服务提供会在路由中搭建一层防火墙。当你离开家时,那么你计算机上的那层防火墙就是仅有的一层,所以配置和控制好你
    发表于 12-28 06:54

    联网防火墙与机器学习技术解析

    联网防火墙与机器学习技术
    发表于 02-25 06:05

    防火墙多级安全参考模型的设计与实现

    为了更好地利用防火墙阻止拒绝服务攻击和信息泄露,针对防火墙发展现状和存在的问题基础上,提出了防火墙多级安全参考模型,设计了对防火墙的自主和强
    发表于 02-27 16:09 21次下载
    <b class='flag-5'>防火墙</b>多级<b class='flag-5'>安全</b>参考模型的设计与实现

    防火墙技术

    防火墙技术.ppt 防火墙及相关概念包过滤型防火墙代理服务型防火墙 防火墙的配置分布式防火墙
    发表于 06-16 23:41 0次下载

    防火墙防火墙的渗透技术

    防火墙防火墙的渗透技术 传统的防火墙工作原理及优缺点: 1.(传统的)包过滤防火墙的工作原理   包过滤是在IP层实现的,因
    发表于 08-01 10:26 1025次阅读

    防火墙术语-Backdoor

    防火墙术语-Backdoor  英文原义:Backdoor 中文释义:后门 注  解:绕过安全性控制而获取对程序或系统访问权的
    发表于 02-24 11:00 644次阅读

    究竟什么是防火墙

    究竟什么是防火墙?     Q:防火墙初级入门:究竟什么是防火墙?     A:防火墙定义
    发表于 02-24 11:51 766次阅读

    什么是数据库防火墙 数据库防火墙作用是什么

    由于数据库防火墙这个词通俗易懂,和防火墙、Web防火墙、下一代防火墙等主流安全产品一脉相承,很多公司也就把自己的数据(库)
    发表于 07-04 14:50 1.2w次阅读

    什么是防火墙防火墙如何工作?

    防火墙将阻止流量或将其允许通过。 网络的安全防火墙是一种网闸,可以根据已配置的策略和规则集控制进入和离开网络的所有流量。 本质上,它是您的网络和万维网之间的缓冲区,就像带射频识别( RFID )的
    的头像 发表于 09-30 14:35 5214次阅读

    恒讯科技分析:什么是防火墙与下一代防火墙(NGFW)?

    在本文中,小编将详细给大家分析一下什么是防火墙与下一代防火墙(NGFW)? 一、什么是防火墙防火墙是一种网络安全系统,它遵循预先确定的
    的头像 发表于 06-13 17:38 1201次阅读

    WAF与防火墙:Web 应用程序和网络防火墙

    容易受到 Web 应用程序漏洞的攻击。然而WAF无法防御网络层的攻击,因此它应该是网络防火墙的补充而不是替代。
    的头像 发表于 07-24 17:34 747次阅读
    WAF与<b class='flag-5'>防火墙</b>:Web 应用程序和网络<b class='flag-5'>防火墙</b>

    联网HMI与防火墙安全协作

    虹科IIoT虹科联网HMI与防火墙安全协作虹科方案01前言随着联网技术的快速发展,
    的头像 发表于 07-31 17:52 843次阅读
    <b class='flag-5'>物</b><b class='flag-5'>联网</b>HMI与<b class='flag-5'>防火墙</b>的<b class='flag-5'>安全</b>协作