【AIS3】網頁動態安全檢測與報戶 (RASP)
網頁動態安全檢測與報戶 (RASP)
-中華資安國際 資安研究員 zodius
Lab: https://github.com/zodius/rasp-lab
Introduction
防護邊界
- firewall
- WAF
- IPS
攻擊
- 內部攻擊
- 感染設備
- 雲端服務
傳統網路防護模型
- 外部檢查
- DDOS
- IPS/IDS
- WAF
- firewall
- 應用程式
- code effort
- 端點防護
- EDR/MDR
- SOC
- 預防 vs 偵測
- prevention
- 偵測特徵
- 缺點:混淆、新型態攻擊
- detection
- 發生傷害
- 應變
- prevention
RASP
- Real-time Application Self-Protection
- hook 系統底層的 instruction
- 執行前做檢核
- 四個特性
- 避免混淆或序列化
- 精準阻擋 - 執行前先判斷,避免誤殺
- 偵測未知漏洞 - 不使用特徵偵測
- 結合 SIEM
回顧計算機組織
Source -> Transform -> Intermediate -> Execution
- Source
- Source Code
- Serialized code
- Transform
- Compile
- Interpret
- bytecode
- Intermediate
- IL(中間碼) <- RASP
- Execution
- VM
- JIT
- Machine code <- RASP
偵測 IL、Machine code
RASP 機制
執行 execve 前 -> hook 檢查 -> forward/deny
Hook Instruction
- Hook OS
- 修改 syscall table
- 透過 kernel module 改寫 syscall table 指標
- 指向客製化 function
- Hook VM syscall
- hypervisor
- interface 修改 syscall/instruction 行為 (like s2e)
- qemu
- hypervisor
- 修改 syscall table
- Hook Application
- DBI(Dynamic binary instruction)
- 申請存取目標程式的記憶體空間
- 指向 hook 再跳回去
- 修改 text segment
- Intel Pin/Frida
- Fork-base
- 親代程式可 fork 子程式
- Shared Library Injection
- 載入自己的 DLL
- Language specific hook
- Csharp .NET Hook
- 因為沒 doc,沒什麼人做
- Java javaagent
- java reflection 特性
- PHP extension
- Python audit
- 程式碼自己提供的 hook api
- Csharp .NET Hook
- DBI(Dynamic binary instruction)
RASP in PHP
PHP Zend Engine
PHP File -> Check, Parse, Compile -> OP Code -> Execute(Zend Engine)
- Compile
- 把語法轉成 AST
- 變數存在 symbol table
- compile 成 Zend OP Code
Zend OP Code
結構
|
|
PHP 是弱型別,opcode 不知道型別,所以需要 pointer 去指向 handler
|
|
|
|
Internal function call
|
|
- zend_set_user_opcode
- ZEND_USER_OPCODE_DISPATCH: 跳回原本的 handler
- ZEND_USER_OPCODE_CONTINUE: 繼續執行
- ZEND_USER_OPCODE_DISPATCH_TO: goto
Zend lifecyle
MINIT() # module init, hook opcode handler
RINIT() # user request init
...
RSHUTDOWN()
RINIT()
...
RSHUTDOWN()
...
MSHUTDOWN()
lab
照 readme 設定完環境
php 編譯
|
|
|
|
|
|
Request http://127.0.0.1:8080/xss.php?name=...
|
|
php 使用 macro 加速
- zval 取型態
RT
CT
EX
EG
CG
Detect backdoor obfuscation
不管怎麼混淆,都會執行到 eval
案例:Laravel CVE-2021-3129
Deploy to cloud
- 換掉 base container
- 可帶入 CI/CD
- 偵測 SSRF、攻擊路徑
- 定位漏洞程式碼位置
Wargame
Rules
- 不動 php code,修改 rasp code
- docker compose up -d 把環境跑起來
- 五個 case
- 如果使用者無法存取,會收到客訴信
- 如果攻擊者攻擊成功,會收到勒索信
- 如果全部正常,會收到系統通知
Epilogue
- 補足實體設備的盲區
- 沒有穩定的產品
- OpenRASP
- Imperva
- 輔助檢測
- symbolic execution