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
3
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
3
你 PWN 不動我@HackerSir 10th
yjk0805
0
4
Reverse 0x1@HackerSir 10th
yjk0805
0
6
Reverse 0x2@HackerSir 10th
yjk0805
0
4
不要亂 PWN 我@HackerSir 10th
yjk0805
0
6
Assembly@HackerSir 10th
yjk0805
0
5
Featured
See All Featured
Fashionably flexible responsive web design (full day workshop)
malarkey
406
66k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
3.6k
Optimizing for Happiness
mojombo
376
70k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
280
13k
Building Better People: How to give real-time feedback that sticks.
wjessup
366
19k
GraphQLとの向き合い方2022年版
quramy
44
13k
Agile that works and the tools we love
rasmusluckow
328
21k
Rails Girls Zürich Keynote
gr2m
94
13k
Building an army of robots
kneath
302
45k
Scaling GitHub
holman
459
140k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
10
860
Designing Experiences People Love
moore
139
23k
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