Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
1st Reproducing Vulnerability in IoT YJK@HackerSir
Slide 2
Slide 2 text
Table of contents 01 03 02 04 IoT Security Get Firmware Firmware Emulation CVE-2024-2897 實作
Slide 3
Slide 3 text
IoT Security 01
Slide 4
Slide 4 text
Why learn IoT Security
Slide 5
Slide 5 text
Everything Can PWN ● C/C++ ● Browser ● Blockchain ● Kernel ● Mobile ● Virtualization ● IoT
Slide 6
Slide 6 text
Everything Can PWN ● C/C++ ● Browser ● Blockchain ● Kernel ● Mobile ● Virtualization ● IoT
Slide 7
Slide 7 text
Why learn IoT Security ● I use many IoT device ■ router ■ nas ■ light ■ fan ■ …
Slide 8
Slide 8 text
Why learn IoT Security
Slide 9
Slide 9 text
Why learn IoT Security ● code base 相對小 ● firmware 以實用為優先 ● 保護機制有時會比較神奇
Slide 10
Slide 10 text
Get Firmware 02
Slide 11
Slide 11 text
How To Get Firmware? ● 下載網站 ● 資安公告 ● 尋找同一系列產品 ● 都找不到?
Slide 12
Slide 12 text
How To Get Firmware? ● dump using UART ● dump using Bus-Pirate ● during OTA Upgrade
Slide 13
Slide 13 text
Extract Firmware ● 7z ■ get image file or file system ● binwalk ● dd ● squashfs-tools ● lzma
Slide 14
Slide 14 text
排雷 ● 建議 binwalk 可以載 source code compile ● 直接 apt install 會有某些 dependencies 載不好 ● Compile From Source
Slide 15
Slide 15 text
dd ● 只想拿特定區段檔案 ● dd if=[] bs=[] skip=[] count=[] of=[] ■ if:input file ■ bs:block size ■ skip:from which start reading ■ count:read bytes size ■ of:output file ● skip 預設會直接讀到檔案尾端
Slide 16
Slide 16 text
Firmware Encrypt ● binwalk –E [file] 可以觀察 entropy ● 需要往前看前面版本是否有解密函式 ● 從 u-boot 尋找:通常無法加密
Slide 17
Slide 17 text
Firmware Analysis ● 建議可以使用 Ghidra ● 相對 ida free 支援更多的架構 ● 後面需要 patch binary 好使用 (可以 patch instruction) ● 可以用 BinDiff 觀察與前一版 firmware 的差異 ● Free!!Free!!Free!!
Slide 18
Slide 18 text
目標 ● 拿到 file system ● 獲得 binary 分析 ● 直接模擬 file system ● 重點還是實際找漏洞並且寫 PoC 測試
Slide 19
Slide 19 text
Firmware Emulation 03
Slide 20
Slide 20 text
Tools ● chroot、systemd-nspawn ● QEMU ● Firmadyne ● Firmware Analysis Toolkit ● Qiling ● Unicorn Engine
Slide 21
Slide 21 text
chroot、systemd-nspawn ● dynamically linked 的程式會有 library 路徑問題 ● 需要包住整個 filesystem ● 如果有找到啟動 script 也可以直接執行 ● /etc/init.d 可以優先看
Slide 22
Slide 22 text
QEMU ● virtual machine monitor ● System Emulation/User Mode ● System Emulation 會較接近真實系統 ● User Mode 可以只執行一個 binary ● 支援多種架構 ■ 包含 IoT 會見到的 mips、arm…
Slide 23
Slide 23 text
Firmadyne ● https://github.com/firmadyne/firmadyne ● 自動模擬 & 分析 ● 可以進行漏洞測試 ● 需進行基礎設定 ● Based on QEMU
Slide 24
Slide 24 text
Firmadyne ● 解壓縮 firmware ● 分析架構 ● 採集資訊 ● 建立模擬鏡像 ● 識別韌體網路設定 ● 運行 firmware
Slide 25
Slide 25 text
Firmware Analysis Toolkit ● 自動化 Firmadyne 的 script ● 處理 Firmadyne 中的初始設定工作 ● 只需要給 root 密碼跟 Firmadyne 路徑
Slide 26
Slide 26 text
Firmware Analysis Toolkit ● 自動化 Firmadyne 的 script ● 處理 Firmadyne 中的初始設定工作 ● 只需要給 root 密碼跟 Firmadyne 路徑 ● 目前與 Firmadyne 相同皆只有 sample 可以成功執行
Slide 27
Slide 27 text
Unicorn Engine ● CPU emulator framework ● 支援多種架構 ● 可以只執行一個 function ■ 用來解加密 firmware ● 需要先 mapping 每一個 Section 到模擬的記憶體區塊 ● hook 程式流程
Slide 28
Slide 28 text
Qiling ● https://github.com/qilingframework/qiling ● 支援多種架構 ● 可以動態 patch ● 透過 unicorn 模擬 instruction ● 有 loader、linker,並可以處理 IO
Slide 29
Slide 29 text
Now ● chroot、systemd-nspawn 掛起來跑 script ● QEMU ● Qiling
Slide 30
Slide 30 text
CVE-2024-2897 實作 04
Slide 31
Slide 31 text
firmware ● https://www.tenda.com.cn/download/detail-2776.html ● 沒有加密 ● 直接 binwalk 或是 7z 就可以解開 filesystem
Slide 32
Slide 32 text
漏洞點 ● https://nvd.nist.gov/vuln/detail/CVE-2024-2897 ● network service ● binary:/bin/httpd ● function:formWriteFacMac ● file:/goform/WriteFacMac ● argument:mac
Slide 33
Slide 33 text
分析 ● 未經驗證直接將參數帶入 doSystemCmd function
Slide 34
Slide 34 text
分析 ● 事實上最後會直接跑 system
Slide 35
Slide 35 text
模擬 ● 確認檔案類型 ■ MIPS, MIPS32 rel2 version 1 (SYSV) ● cp /usr/bin/qemu-mipsel-static . ● sudo chroot ./ ./qemu-mipsel-static ./bin/httpd
Slide 36
Slide 36 text
模擬
Slide 37
Slide 37 text
模擬 ● 逆向分析會發現有幾個部分需要 patch ● IoT firmware 會有某些部份需要跟硬體做交互 ● 根據結果有兩種方式 (將驗證部分直接修改為相反邏輯) ■ == -> != ■ < -> >= ■ ...
Slide 38
Slide 38 text
模擬 ● 逆向分析會發現有幾個部分需要 patch ● IoT firmware 會有某些部份需要跟硬體做交互 ● 根據結果有兩種方式 (直接給回傳值) ■ init_core_dump 需要回傳 0 ■ apmib_init 需要回傳 1 ■ check_network 需要回傳 1 ■ ConnectCfm 需要回傳 1
Slide 39
Slide 39 text
模擬 ● 逆向分析會發現有幾個部分需要 patch ● IoT firmware 會有某些部份需要跟硬體做交互 ● 根據結果有兩種方式 (直接給回傳值) ■ init_core_dump 需要回傳 0 ■ apmib_init 需要回傳 1 ■ check_network 需要回傳 1 ■ ConnectCfm 需要回傳 1 ● 稍微看一下 mips 的 instruction 做 patch,非本日重點
Slide 40
Slide 40 text
模擬 ● 沒有 listen 到正常 port
Slide 41
Slide 41 text
模擬 ● 沒有 listen 到正常 port ● 逆向發現應該是會去拿 br0 這張網卡的 ip
Slide 42
Slide 42 text
模擬 ● 加一張網卡 ● sudo brctl addbr br0 ● sudo ifconfig br0 192.168.132.169/24
Slide 43
Slide 43 text
模擬
Slide 44
Slide 44 text
PoC ● 依照分析結果應該只需要一次請求 ● 直接用 firefox 送 GET 請求 ● http://192.168.132.169/goform/WriteFacMac?mac=;ls
Slide 45
Slide 45 text
PoC
Slide 46
Slide 46 text
PoC PWNED!!!!!!
Slide 47
Slide 47 text
結論 ● 超基本 command injection 爛洞 ● Tenda 有一整排這種 command injection ● IoT 這種洞不少見 ● 希望下次不是復現可以有新的漏洞點
Slide 48
Slide 48 text
No content