本環境是蛇矛實驗室基于"火天網演攻防演訓靶場"進行搭建,通過火天網演中的環境構建模塊,可以靈活的對目標網絡進行設計和配置,并且可以快速進行場景搭建和復現驗證工作。
背景
Fortinet FortiOS是美國飛塔(Fortinet)公司的一套專用于FortiGate網絡安全平臺上的安全操作系統。該系統為用戶提供防火墻、防病毒、IPSec/SSLVPN、Web內容過濾和反垃圾郵件等多種安全功能。10月10日,Fortinet官方發布安全公告,修復了其多個產品中的一個身份驗證繞過漏洞(CVE-2022-40684),其CVSSv3評分為9.8。攻擊者可以通過向易受攻擊的目標發送特制的 HTTP 或 HTTPS 請求,有權訪問管理界面的遠程攻擊者可以執行管理員操作。
漏洞分析
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聯網。
使用瀏覽器訪問ip后,使用admin:password進行登錄,登錄后界面如下所示。至此,fortigate環境已配置完畢,接下來我們進行分析。
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為文件系統壓縮包,我們將其復制出來。
rootfs.gz解壓后為rootfs,使用"cpio -i 2> /dev/null < rootfs"命令進行提取。提取后發現大量文件系統的目錄和.tar.xz文件,.tat.xz文件使用xz解壓時會失敗,我們可以使用文件系統中自帶的(sbin/xz)程序進行解壓,這里只需注意它的鏈接器路徑(將其修改至主機系統的鏈接器路徑),我們patch后并保存。
xz解壓后提取出各個文件系統目錄,進入到bin目錄后尋找httpsd程序。httpsd是init程序的軟連接,并且這里可以看出init程序非常大,逆向該程序比較費時。所以我們可以根據調試信息先來逆向程序邏輯。
運行以下命令開啟httpsd程序的調試信息,當開啟調試信息后,當我們對fotigate的web服務進行操作時,該操作的信息就會打印到屏幕上。
diagnosedebugenable diagnose debugapplication httpsd -1 diagnose debugcli 8
調試開啟后,下面以登錄授權訪問api為例,簡單分析一下流程,當我們在瀏覽器輸入admin:password點擊登錄后訪問api打印的調試信息如下
我們根據調試信息打印的字符在程序中進行搜索,根據字符串引用進行定位,發現程序執行了fweb_debug_init函數
大致瀏覽一遍后發現后發現程序使用了Apache Portable Runtime庫,我們可以根據函數庫對函數的使用進行查詢。這里的apr_table_get函數為從表單中取出key值對應的value。
對fweb_debug_init函數進行交叉引用,發現sub_C4BF20調用了fweb_debug_init函數,這個函數與上面中的調試信息并無聯系,我們繼續往上跟。
sub_C4C480調用了sub_C4BF20函數,并且后面的fweb_debug_final函數與上面圖中最后登錄成功后的最后產生的調試信息相同。那么fweb_debug_init與fweb_debug_final之間的倆個函數v3[1]函數和sub_C4C2A0產生了大量調試信息。我們跟進分析一下v3[1]函數
v3由參數a2賦值,a2為sub_C4C480函數的參數,
a2參數為off_3FEA400函數數組的地址
off_3FEA400函數數組為傳入sub_C4C480函數的參數,當函數執行完fweb_debug_init后,通過參數加索引的方式調用相應hanler函數,這里v3[1]執行sub_c929F0函數
sub_c929F0函數中調用了api_check_access函數,并且程序會根據api_check_access返回值返回用戶對應響應碼的reponse。我們進入api_check_access函數中進行查看
api_check_access函數的返回值由幾個子函數共同決定,當我們根據調試信息追函數流程時,發現在api_check_access中并沒有輸出任何調試信息,而是在sub_c929F0函數中調用了handle_cli_request輸出了調試信息。同時handle_cli_request函數輸出完vdom "root"后,該handler函數執行完畢并返回執行fweb_debug_final函數,隨后結束該次event響應。
上面我們大概知道了訪問api時程序執行大概流程,但是具體細節和身份驗證的流程我們還是不知道。下面我們直接用已公開的poc進行測試,并關注其調試信息以方便逆向。
此時調試如下,我們發現和上面已授權登錄相比,多了倆條調試信息,分別是fweb_authorize_all和api_access_check_for_trusted_access,下面我們跟進去分析一下。
當我們跟進去時發現sub_C4AC70函數先調用了sub_C4B590函數,然后ap_hook_handler hook前面我們分析的sub_C4AC60函數。sub_C4B590也同樣是ap_hook_check_access_ex hook的fweb_authorize_all函數。那么到此所有的流程我們已經知道了,接下來我們分析一下漏洞是如何形成的。
在認證過程中,函數首先調用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函數中。
api_access_check_for_trusted_access函數中調用sub_C510D0,傳入參數為"Node.js"
sub_C510D0函數中判斷表單中User-Agent的value值是否與Node.js是否相同
如果不是"Node.js",則判斷User-Agent的value值是否與Report Runner是否相同
進入到過以上倆種方式中的某一種,用戶賦值為"Local_Process_Access",此時會繞過身份認證。也就是說要想攻擊成功,需要設置Forwarded頭value值必須為"for=",后面可以設置127.0.0.1來隱藏防火墻中的攻擊記錄,而User-Agent的value可以設置"Node.js"和"Report Runner"倆種中的一個。
以上倆種繞過測試只在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用戶需要密碼登錄。
使用kali生成ssh-pulibc-key,然后利用漏洞繞過身份認證,并使用PUT方法設置fortigate的ssh-public-key1(實現這種攻擊方式需設置User-Agent頭為"Report Runner"),點擊send進行攻擊(或使用github已公開的exp腳本進行攻擊)。
出現"SSH key is good."后,說明攻擊成功,此時使用ssh連接fortigate防火墻則需不要輸入密碼。獲取fortigate終端后,可執行任意命令。
總結
我們這一小節簡單了解了身份認證繞過流程,分析并復現了fortigate防火墻身份認證繞過漏洞的形成過程以及如何利用。
蛇矛實驗室成立于2020年,致力于安全研究、攻防解決方案、靶場對標場景仿真復現及技戰法設計與輸出等相關方向。團隊核心成員均由從事安全行業10余年經驗的安全專家組成,團隊目前成員涉及紅藍對抗、滲透測試、逆向破解、病毒分析、工控安全以及免殺等相關領域。
-
物聯網
+關注
關注
2903文章
44284瀏覽量
371331 -
操作系統
+關注
關注
37文章
6742瀏覽量
123194 -
防火墻
+關注
關注
0文章
416瀏覽量
35594
原文標題:物聯網安全實戰從零開始-飛塔(Fortinet)防火墻認證繞過漏洞
文章出處:【微信號:蛇矛實驗室,微信公眾號:蛇矛實驗室】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論