---
# System prepended metadata

title: 'Hunting in the Near Field: An Investigation of NFC-related bugs of Android / Qi Zhao (Joachim Hyrathon)'
tags: [HITCONCMT, HITCON, HITCONCMT2019]

---

Hunting in the Near Field: An Investigation of NFC-related bugs of Android / Qi Zhao (Joachim Hyrathon)
===

### Speaker

- Speaker: JHyrathon (360 Alpha Team)
- Pwn Contest冠軍

### Content

- NFC 肥大，從 RFID 開始演進有很多歷史問題 -> 較好找洞

- 攻擊面和目標
    1.Binder進程間通訊
    2.應用到NFC協定疊(stack)
    3.卡片/讀卡器到NFC協定疊
    4.HwBinder近程間通訊
    5.System on Chip
    6.手機到卡片/讀卡器
    7.讀寫功能模組
    8.卡模擬(HCE)模組
    9.點到點通訊模組(PTP) -> 即將被 Google 廢棄 (Android Beam)
    10.通用基礎模組
- AOSP 的 `system/nfc` folder
     1.協定疊實現在此
     2.大量直接操作raw buffer
     3.用戶可控資料
- 基礎概念
    1.gki
        - 緩衝區記憶體分配器,based on ring buffer,難以破壞heap,較少出現"double heap"
          訊息傳遞，不同Task傳遞訊息
        - 計時器
    2.nfa "管家程序"
        - 系統管理器
        - 設備管理器
        - 狀態機管理器
            - 初始化和釋放資源
            - 在協定碟中切換
            - 消息收發
            - 與上層間進行溝通
        管家程序
        大部分資源皆為全域變數
    3.type of tags
        - 隨興命名
        - Reader/Writer支援：t1t,t2t,t3t,t4t,t5t,i93(ISO-15693)，???
        - 卡片模擬支援: t3t(with limited functionality), t4t
- 模糊測試還是代碼審計
    - 大量線程，大量狀態機，大量狀態
    這些狀態機若有大量的狀態進去，效果不是很好
    - 多階段輸入，順序不定
    拼包及代碼合併效果不好
    - 代碼耦合度高，難以分辯
    模塊想拆出來只能拆出子模塊，產生第四條問題
    - 約數條件較多，從程序中間觸發模子crash不意味著能夠依賴用戶輸入實現同樣效果
    - **結論**: 審計優於模糊測試
- 使用到的工具: Proxmark3
    - 如何寫PoC
        - 買張卡片惡意修改
        - 使用Android模擬設備攻擊卡片
            - 雖然支援很多，但功能有限
            - android支援卡片模擬協定有限
        - Proxmark 3
- Proxmark 3 介紹
    - (官網敘述)'the proxmark3 is a powerful general purpose blablabla
    - 文檔豐富->好上手
    - 晶片 高頻天線 低頻天線(非必要) USB
    - 請遵守法律w
        - 不要做snoop之類的動作   
    - 官方支援的指令有限，可是可以自己改寫 compile 並燒進去

### 實例分析

#### CVE-2019-9358

不能觸發的原因更有趣(但我沒聽懂)
1.前導結構(buffer)
2.從 p pointer讀到前面的參數，並p移位
3.???
4.
![](https://i.imgur.com/xQSNJkO.jpg)
因auto bound產生的問題
Android系統限制Felica模擬能力
https://www.sony.net/Products/felica/NFC/index.html

#### CVE-2019-2034

具有代表性
"高危"
高危漏洞常見形式
- gki緩衝區運行特點
    - NFC協定疊包含多個層次，每一層都會在資料外多加一層
    - 引入offset字段
    - 當需要玻璃某層header時，警需要增加offset並減少len
    - 降低反沖拷貝區的頻率

buffer沒有做"--"(減減)的檢查
>buffer length=0
>整數型下溢
>成為非常大的值(第一個下溢還未有影響)
>符合後面code: if的條件
>進入PIESP函數
>第二個length向下溢出(進一步繞過)
>以參數傳遞出去
call back????(聽不懂QQ)

講者得到了下溢漏洞不可控的結論 一樣沒聽懂過程...
**還記得gki是基於ring buffer嗎?其記憶體佈局上可達成一定的預測及控制

#### CVE-2019-2099

- 在2019-06-01修復
- `nfa_rw_store_ndef_rx_buf` 這個函數有問題

**拼接須考慮數組可接納多大數值

### Summary

- 難以模糊測試
- 難以利用
    - 物理接觸
    - 跨設備
    - 處理代碼位於沙箱化的，開啟多種保護的進程中(我怎麼看不懂打了啥XD誰註解下
- 潛在研究方向 \OvO/
    - Hal
    - SoC
    - Kernel

Q: trust zone是否都是用模糊測試?
A: 看廠商

    
(〒︿〒) 四樓有車輪餅，吃一吃開心點(?
吃都吃 吃起來!!!
我好懵阿QQ



###### tags: `HITCONCMT2019`,`HITCONCMT`,`HITCON`