Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Reproducing Vulnerability in IoT@HackerSir Stud...
Search
YJK
January 13, 2025
0
9
Reproducing Vulnerability in IoT@HackerSir StudyGroup
YJK
January 13, 2025
Tweet
Share
More Decks by YJK
See All by YJK
Basic Reverse-逆要做什麼@THUHC
yjk0805
0
10
你 PWN 不動我@HackerSir 10th
yjk0805
0
6
Reverse 0x1@HackerSir 10th
yjk0805
0
9
Reverse 0x2@HackerSir 10th
yjk0805
0
7
不要亂 PWN 我@HackerSir 10th
yjk0805
0
8
Assembly@HackerSir 10th
yjk0805
0
7
Featured
See All Featured
Navigating Team Friction
lara
184
15k
Gamification - CAS2011
davidbonilla
81
5.2k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.5k
4 Signs Your Business is Dying
shpigford
183
22k
Thoughts on Productivity
jonyablonski
69
4.5k
Visualization
eitanlees
146
16k
KATA
mclloyd
29
14k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
51
2.4k
The Straight Up "How To Draw Better" Workshop
denniskardys
232
140k
Unsuck your backbone
ammeep
670
57k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
16k
Being A Developer After 40
akosma
90
590k
Transcript
1st Reproducing Vulnerability in IoT YJK@HackerSir
Table of contents 01 03 02 04 IoT Security Get
Firmware Firmware Emulation CVE-2024-2897 實作
IoT Security 01
Why learn IoT Security
Everything Can PWN • C/C++ • Browser • Blockchain •
Kernel • Mobile • Virtualization • IoT
Everything Can PWN • C/C++ • Browser • Blockchain •
Kernel • Mobile • Virtualization • IoT
Why learn IoT Security • I use many IoT device
▪ router ▪ nas ▪ light ▪ fan ▪ …
Why learn IoT Security
Why learn IoT Security • code base 相對小 • firmware
以實用為優先 • 保護機制有時會比較神奇
Get Firmware 02
How To Get Firmware? • 下載網站 • 資安公告 • 尋找同一系列產品
• 都找不到?
How To Get Firmware? • dump using UART • dump
using Bus-Pirate • during OTA Upgrade
Extract Firmware • 7z ▪ get image file or file
system • binwalk • dd • squashfs-tools • lzma
排雷 • 建議 binwalk 可以載 source code compile • 直接
apt install 會有某些 dependencies 載不好 • Compile From Source
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 預設會直接讀到檔案尾端
Firmware Encrypt • binwalk –E [file] 可以觀察 entropy • 需要往前看前面版本是否有解密函式
• 從 u-boot 尋找:通常無法加密
Firmware Analysis • 建議可以使用 Ghidra • 相對 ida free 支援更多的架構
• 後面需要 patch binary 好使用 (可以 patch instruction) • 可以用 BinDiff 觀察與前一版 firmware 的差異 • Free!!Free!!Free!!
目標 • 拿到 file system • 獲得 binary 分析 •
直接模擬 file system • 重點還是實際找漏洞並且寫 PoC 測試
Firmware Emulation 03
Tools • chroot、systemd-nspawn • QEMU • Firmadyne • Firmware Analysis
Toolkit • Qiling • Unicorn Engine
chroot、systemd-nspawn • dynamically linked 的程式會有 library 路徑問題 • 需要包住整個 filesystem
• 如果有找到啟動 script 也可以直接執行 • /etc/init.d 可以優先看
QEMU • virtual machine monitor • System Emulation/User Mode •
System Emulation 會較接近真實系統 • User Mode 可以只執行一個 binary • 支援多種架構 ▪ 包含 IoT 會見到的 mips、arm…
Firmadyne • https://github.com/firmadyne/firmadyne • 自動模擬 & 分析 • 可以進行漏洞測試 •
需進行基礎設定 • Based on QEMU
Firmadyne • 解壓縮 firmware • 分析架構 • 採集資訊 • 建立模擬鏡像
• 識別韌體網路設定 • 運行 firmware
Firmware Analysis Toolkit • 自動化 Firmadyne 的 script • 處理
Firmadyne 中的初始設定工作 • 只需要給 root 密碼跟 Firmadyne 路徑
Firmware Analysis Toolkit • 自動化 Firmadyne 的 script • 處理
Firmadyne 中的初始設定工作 • 只需要給 root 密碼跟 Firmadyne 路徑 • 目前與 Firmadyne 相同皆只有 sample 可以成功執行
Unicorn Engine • CPU emulator framework • 支援多種架構 • 可以只執行一個
function ▪ 用來解加密 firmware • 需要先 mapping 每一個 Section 到模擬的記憶體區塊 • hook 程式流程
Qiling • https://github.com/qilingframework/qiling • 支援多種架構 • 可以動態 patch • 透過
unicorn 模擬 instruction • 有 loader、linker,並可以處理 IO
Now • chroot、systemd-nspawn 掛起來跑 script • QEMU • Qiling
CVE-2024-2897 實作 04
firmware • https://www.tenda.com.cn/download/detail-2776.html • 沒有加密 • 直接 binwalk 或是 7z
就可以解開 filesystem
漏洞點 • https://nvd.nist.gov/vuln/detail/CVE-2024-2897 • network service • binary:/bin/httpd • function:formWriteFacMac
• file:/goform/WriteFacMac • argument:mac
分析 • 未經驗證直接將參數帶入 doSystemCmd function
分析 • 事實上最後會直接跑 system
模擬 • 確認檔案類型 ▪ MIPS, MIPS32 rel2 version 1 (SYSV)
• cp /usr/bin/qemu-mipsel-static . • sudo chroot ./ ./qemu-mipsel-static ./bin/httpd
模擬
模擬 • 逆向分析會發現有幾個部分需要 patch • IoT firmware 會有某些部份需要跟硬體做交互 • 根據結果有兩種方式
(將驗證部分直接修改為相反邏輯) ▪ == -> != ▪ < -> >= ▪ ...
模擬 • 逆向分析會發現有幾個部分需要 patch • IoT firmware 會有某些部份需要跟硬體做交互 • 根據結果有兩種方式
(直接給回傳值) ▪ init_core_dump 需要回傳 0 ▪ apmib_init 需要回傳 1 ▪ check_network 需要回傳 1 ▪ ConnectCfm 需要回傳 1
模擬 • 逆向分析會發現有幾個部分需要 patch • IoT firmware 會有某些部份需要跟硬體做交互 • 根據結果有兩種方式
(直接給回傳值) ▪ init_core_dump 需要回傳 0 ▪ apmib_init 需要回傳 1 ▪ check_network 需要回傳 1 ▪ ConnectCfm 需要回傳 1 • 稍微看一下 mips 的 instruction 做 patch,非本日重點
模擬 • 沒有 listen 到正常 port
模擬 • 沒有 listen 到正常 port • 逆向發現應該是會去拿 br0 這張網卡的
ip
模擬 • 加一張網卡 • sudo brctl addbr br0 • sudo
ifconfig br0 192.168.132.169/24
模擬
PoC • 依照分析結果應該只需要一次請求 • 直接用 firefox 送 GET 請求 •
http://192.168.132.169/goform/WriteFacMac?mac=;ls
PoC
PoC PWNED!!!!!!
結論 • 超基本 command injection 爛洞 • Tenda 有一整排這種 command
injection • IoT 這種洞不少見 • 希望下次不是復現可以有新的漏洞點
None