- Project 介紹
- VM image
Goals
- Understand how to hijack an IPSec/SIP session
- Non-3GPP network access of 4G/5G core network is protected by IPSec
- You will learn about
- the IPSec operation
- using adb shell for development on smartphones
- fabricating packets using raw socket
- fabricating ESP headers and authentication data
- fabricating TCP packets
介紹
IPSec 是什麼
Internet Protocol Security 是一安全的網路協定套件,而在傳輸層就是利用 TLS,IPSec 透過對 IP 協定的封包進行加密和認證來保護 IP 協定的網路傳輸協定族(一些相互關聯的協定的集合),簡單來說就是運用多種協定和演算法來保護 IP 封包。
- 兩個主要功能
- 封裝安全載荷(ESP),提供機密性、資料來源認證、無連接完整性、防重放和有限的傳輸流(traffic-flow)機密性
- 網際網路金鑰交換(Internet Key Exchange,簡稱IKE或IKEv2),為 AH、ESP 操作所需的安全關聯(SA)提供演算法、封包和金鑰參數 –> 在這個 project 不會討論到這個,因為在 core network 中 key 來自於 SIM 卡
Security Association(SA)
SA 是資料庫(SAD)中的某一筆紀錄,登錄所需的安全機制,例如: 安全協定(AH 或 ESP)、操作模式(傳輸或通道模式)、認證演算法(HMAC-MD5等)、加密系統(DES-CBC等)、或共享秘密金鑰等。
更多關於 SA 細節可以參考: 連結
IPSec Primer
Security Associations
為 IPSec 內的安全關聯(SA)。
- A key concept of IPSec
- One-way relationship between a sender and a receiver: 如果有 bi-directional 通訊就需要 2-way Associations
- Two-way secure exchange: two SAs are required
- Uniquely identified by three parameters: 辨識每個 SA
- Security parameter index (SPI)
- IP destination address
- Protocol identifier: AH or ESP: AH 目前已經很少在用了,因為可以被複製
Two IPSec Operation Modes
IPSec 的運作模式有兩種:
- Transport mode: 像是 Vo-wifi
- Tunnel mode: 兩個 router 或是 gateway 之間,假設公司有多個 branches,可以利用 IPsec 保護 branch 之間的通訊,而使用者不用安裝任何 IPSec 軟體,直接被 gateway 保護
Encapsulating Security Payload(ESP)
Payload Data,可以是 TCP/UDP 或是 IP 封包,藍色框框中包含加密資料,所以要使用加密演算法來加密這些資料,紅色框框中包含需要提供的資料完整性保護。
Transport 和 Tunnel Mode 比較
IPSec 的兩種運作模式:
- Transport mode
- Protection: IP 封包的 payload
- 常用於兩主機間端對端的通訊
- ESP 保護 IP payload,不是 IP header
- Tunnel Mode
- Protection: 整個 IP 封包
- 整個來源封包利用 tunnel 傳送到另一個點
- 當其中一端的 SA 是 security gateway
- 防火牆後面的網路上主機可以在不實作 IPSec 的情況下進行安全通訊。
AH+ESP
VoWi-Fi Security
- Wi-Fi IF 與 ePDG 間是 IPSec Tunnel Mode
- IMS VIF 與 IMS Core 間是 IPSec Transport Mode
project 就是要 hijack 這個 Transport mode
IPSec Hijacking Attack
IPSec Hijack 實作步驟
前言
情境: UE(智慧手機)在傳輸中有 IPSec association,這個 association 承載 TCP 連接,與模擬的 IMS 伺服器(筆電或虛擬機)。
:::info
攻擊者開發一個攻擊程式來 hijack IPSec/TCP association
:::
如何進行
開啟一程序來建立 IPSec/TCP 關聯,並在 UE 上開發一個攻擊程序以劫持 IPSec/TCP 關聯,並用攻擊者程式向伺服器傳送特定旗標。
劫持成功後,伺服器會用正確的回應回覆(如上圖)。
設置環境
使用 Wi-Fi 將 UE 和 IMS 伺服器連接到同一個局域網,首先,下載 VM image,包含所有程式和範例程式碼。
如何攻擊
攻擊者程式要做什麼
- 訊息即時監控和收集
- 從 SIP/TCP header 中取得 session 訊息,例如 TCP sequence 和 ESP SPI
- 從安全關聯資料庫(SAD)中檢索 IPSec 安全 context(如 ESP 驗證密鑰)
- 製作(fabrication) IPSec/TCP 封包
- 製作 TPC/IPSec/IP header,包括所有 field 和 checksum
- 產生 ESP padding
- Pad Length 和 Next Header field 必須與 4-byte word 右對齊(RFC4303 Section 2.4)
- 產生 ESP 驗證資料
- 使用
hmac_sha1_96
- 使用
Todo List
File | Description |
---|---|
./src/dev.c | 填寫 struct sockaddr_ll addr ,用於在函式 set_sock_fd 中 bind |
./src/dev.c | 把整個訊框儲存到 self->frame |
./src/transport.c | 完成 TCP checksum 計算 |
./src/transport.c | 收集 segm 資訊 |
./src/transport.c | 填寫 self->tcphdr |
./src/net.c | 完成 IP checksum 計算 |
./src/net.c | 收集 pkt 資訊 |
./src/net.c | 從 SAD dump 身份驗證密鑰 |
./src/esp.c | 填寫 self->pad 和 self->pad_len (參考 RFC4303 Session 2.4) |
./src/esp.c | 把所有需要驗證的東西都放到 buff 並加上 nb |
./src/esp.c | 收集 esp_pkt 資訊 |
./src/esp.c | 填寫 ESP header 和 tailer |
:::warning | |
更多詳細介紹參考: 連結 | |
::: |
驗證是否成功兩步驟
- single handshake test with a flag (70%)
- An example with an invalid flag and a valid flag
- An example with an invalid flag and a valid flag
- multiple handshake tests with three flags (30%)
- An example with an invalid flag and two valid flags
- An example with an invalid flag and two valid flags