悟空云課堂丨代碼安全第五期:OS命令注入漏洞

該欄目為中科天齊全新規(guī)劃的悟空云課堂,旨在科普軟件安全相關(guān)知識,助力企業(yè)有效防范軟件安全漏洞,提升網(wǎng)絡(luò)安全防護(hù)能力。本期主題為OS命令注入漏洞的相關(guān)介紹。
一、什么是OS命令注入?
軟件在構(gòu)造OS命令時(shí)使用了外部輸入的數(shù)據(jù),如果沒有對外部輸入中可能影響OS命令的特殊元素進(jìn)行過濾,或是過濾不充分/不正確,就有受到OS命令注入攻擊的風(fēng)險(xiǎn)。
OS命令注入缺陷允許攻擊者直接在操作系統(tǒng)執(zhí)行各種命令,當(dāng)缺陷存在于網(wǎng)頁應(yīng)用等無法直接訪問操作系統(tǒng)的軟件中時(shí),會造成一些脆弱性問題。而當(dāng)該缺陷存在于有高級權(quán)限的軟件中時(shí),攻擊者可通過缺陷獲得高級權(quán)限,從而造成極大的危害。
二、OS命令注入兩種常見的子類型有哪些?
1、應(yīng)用程序通過用戶輸入的參數(shù)來構(gòu)造OS命令。
例如,程序可能使用system(“nslookup [HOSTNAME]”)來運(yùn)行nslookup命令,其中的HOSTNAME由用戶輸入。由于沒有檢查HOSTNAME中是否存在命令分隔符,攻擊者可將想執(zhí)行的命令通過分隔符加在HOSTNAME中,當(dāng)系統(tǒng)執(zhí)行完nslookup后就會執(zhí)行攻擊者的命令;
2、應(yīng)用程序?qū)⑤斎氲恼麄€(gè)字符串作為一個(gè)OS命令。
例如,通過exec([COMMAND])來執(zhí)行命令,其中COMMAND由用戶輸入,此時(shí)攻擊者可以通過命令分隔符注入命令。
三、OS命令注入漏洞會造成哪些后果?
關(guān)鍵詞:執(zhí)行未經(jīng)授權(quán)的代碼或命令; DoS:崩潰,退出或重啟; 讀取文件或目錄; 修改文件或目錄; 讀取應(yīng)用數(shù)據(jù); 修改應(yīng)用數(shù)據(jù); 隱藏活動(dòng)。
攻擊者可以執(zhí)行未經(jīng)授權(quán)的命令,然后可以使用這些命令來禁用軟件,或者讀取和修改攻擊者無權(quán)直接訪問的數(shù)據(jù)。由于目標(biāo)應(yīng)用程序直接執(zhí)行命令而不是攻擊者,因此任何惡意活動(dòng)似乎都來自應(yīng)用程序或應(yīng)用程序的所有者。
四、如何防范修補(bǔ)OS命令注入漏洞?
從架構(gòu)和設(shè)計(jì)的角度來說:
1、要用最小權(quán)限去運(yùn)行程序,不要給予程序多余的權(quán)限,最好只允許在特定的路徑下運(yùn)行,可以通過明確的路徑運(yùn)行命令;
2、盡可能使用庫或框架:使用不允許此弱點(diǎn)出現(xiàn)的經(jīng)過審核的庫或框架,或提供更容易避免此弱點(diǎn)的構(gòu)造。盡可能地使用庫調(diào)用,而不是調(diào)用外部進(jìn)程來完成所需功能。
3、減少被攻擊面:對于那些被用于生成待執(zhí)行命令的數(shù)據(jù),盡可能避免其被外部可控的數(shù)據(jù)污染。
從實(shí)現(xiàn)的角度來說:
1、雖然使用動(dòng)態(tài)生成的查詢字符串,代碼或命令將控制和數(shù)據(jù)混合在一起是有風(fēng)險(xiǎn)的,但有時(shí)它可能是不可避免的。正確引用參數(shù)并轉(zhuǎn)義這些參數(shù)中的任何特殊字符。最保守的方法是轉(zhuǎn)義或過濾所有未通過極其嚴(yán)格的白名單的字符(例如不是字母數(shù)字或空格的所有內(nèi)容)。如果仍然需要一些特殊字符,例如空格,則在轉(zhuǎn)義/過濾步驟之后將每個(gè)參數(shù)包裝在引號中;
2、如果只允許運(yùn)行有限的命令,使用白名單方式過濾。
五、OS命令注入漏洞樣例:
![]()
