rasp 系统_RASP攻防 —— RASP安全应用与局限性浅析
文|【騰訊安全平臺(tái)部數(shù)據(jù)安全團(tuán)隊(duì)】 qiye & baz
前言
隨著Web應(yīng)用攻擊手段變得復(fù)雜,基于請(qǐng)求特征的防護(hù)手段,已經(jīng)不能滿(mǎn)足企業(yè)安全防護(hù)需求。在2012年的時(shí)候,Gartner引入了“Runtime application self-protection”一詞,簡(jiǎn)稱(chēng)為RASP,屬于一種新型應(yīng)用安全保護(hù)技術(shù),它將防護(hù)功能“ 注入”到應(yīng)用程序中,與應(yīng)用程序融為一體,使應(yīng)用程序具備自我防護(hù)能力,當(dāng)應(yīng)用程序遭受到實(shí)際攻擊傷害時(shí),能實(shí)時(shí)檢測(cè)和阻斷安全攻擊,而不需要進(jìn)行人工干預(yù)。
騰訊洋蔥反入侵團(tuán)隊(duì)早在很多年前就研究RASP的應(yīng)用場(chǎng)景,2014年還在TSRC搞了一次基于rasp的webshell攻防挑戰(zhàn)賽,詳見(jiàn)(https://security.tencent.com/index.php/blog/msg/57);近幾年從PHP逐步擴(kuò)展到Java,Python,Nodejs等其他語(yǔ)言。RASP通過(guò)實(shí)時(shí)采集Web應(yīng)用的高風(fēng)險(xiǎn)行為,通過(guò)特征規(guī)則、上下文語(yǔ)義分析及第三方安全產(chǎn)品數(shù)據(jù)關(guān)聯(lián)分析等多種安全模型來(lái)提升檢測(cè)準(zhǔn)確率,相較于傳統(tǒng)Web應(yīng)用安全產(chǎn)品,RASP從海量的攻擊中排除掉了大量的無(wú)效攻擊,聚焦發(fā)現(xiàn)真實(shí)的已知和未知安全威脅。經(jīng)過(guò)多年的實(shí)踐我們發(fā)現(xiàn)RASP也存在一些缺陷和不足,本文以PHP RASP作為研究對(duì)象拋磚引玉,在此分享RASP的應(yīng)用場(chǎng)景和問(wèn)題。本文主要分三個(gè)部分:RASP架構(gòu)原理簡(jiǎn)要介紹、RASP安全應(yīng)用場(chǎng)景介紹 及 RASP對(duì)抗淺析。
注意:文中涉及的文章pdf ,代碼,思維導(dǎo)圖存放于https://github.com/qiyeboy/my_tsrc_paper倉(cāng)庫(kù)中,喜歡的朋友可以自取。一、 RASP架構(gòu)原理簡(jiǎn)要介紹
以PHP語(yǔ)言為例,PHP語(yǔ)言自身提供擴(kuò)展機(jī)制,可以基于擴(kuò)展機(jī)制開(kāi)發(fā)RASP系統(tǒng)。
騰訊自研的TRASP架構(gòu)示意圖:
TRASP 整個(gè)架構(gòu)大致分為3個(gè)部分:1. 客戶(hù)端模塊;2. 云端數(shù)據(jù)分析模塊; 3. 安全處置模塊。
1、客戶(hù)端模塊;負(fù)責(zé)數(shù)據(jù)采集和規(guī)則匹配,數(shù)據(jù)采集可以配置策略采集需要的數(shù)據(jù)(如SQL執(zhí)行/命令執(zhí)行/代碼執(zhí)行/文件操作等),RASP可以根據(jù)需求配置數(shù)據(jù)采集策略,需要注意的是采集數(shù)據(jù)越多資源消耗也會(huì)隨之增大;
2、云端數(shù)據(jù)分析模塊;有些場(chǎng)景通過(guò)前端規(guī)則無(wú)法完全解決,需要上報(bào)數(shù)據(jù)到云端分析進(jìn)行二次分析,包括使用機(jī)器學(xué)習(xí)算法,關(guān)聯(lián)分析等;
3、安全處置模塊;負(fù)責(zé)配置事件安全等級(jí)和處置策略,RASP串行在業(yè)務(wù)中,誤報(bào)會(huì)影響業(yè)務(wù),需要根據(jù)安全事件的等級(jí)和精準(zhǔn)度配置阻斷/異步告警/安全通知等不同的處置策略。
PHP RASP擴(kuò)展原理和實(shí)現(xiàn)簡(jiǎn)要介紹:
PHP RASP作為PHP解釋器的擴(kuò)展,是一個(gè)動(dòng)態(tài)庫(kù)so文件,PHP語(yǔ)言中類(lèi)似的動(dòng)態(tài)庫(kù)很多,比如:mysql.so,RASP和MYSQL擴(kuò)展的加載方式和運(yùn)行原理一樣,集成在PHP解釋器中。接下來(lái)從3個(gè)方面簡(jiǎn)單描述一下TRASP擴(kuò)展模塊的實(shí)現(xiàn)原理。
1. 預(yù)加載
任何一個(gè)PHP實(shí)例都會(huì)經(jīng)過(guò)Module init、Request init、Request shutdown和Module shutdown四個(gè)過(guò)程。
Module init
在所有請(qǐng)求到達(dá)前發(fā)生,例如啟動(dòng)Apache服務(wù)器,PHP解釋器隨之啟動(dòng),相關(guān)的各個(gè)模塊(Redis、Mysql等)的MINIT方法被調(diào)用。僅被調(diào)用一次。在開(kāi)發(fā)XXX擴(kuò)展時(shí),相應(yīng)的XXX.c文件中將自動(dòng)生成該方法:
Request init
每個(gè)請(qǐng)求到達(dá)時(shí)都被觸發(fā)。SAPI層將控制權(quán)交由PHP層,PHP初始化本次請(qǐng)求執(zhí)行腳本所需的環(huán)境變量,函數(shù)列表等,調(diào)用所有模塊的RINIT函數(shù)。XXX.c中對(duì)應(yīng)函數(shù)如下:
Request shutdown
每個(gè)請(qǐng)求結(jié)束,PHP就會(huì)自動(dòng)清理程序,順序調(diào)用各個(gè)模塊的RSHUTDOWN方法,清除程序運(yùn)行期間的符號(hào)表。典型的RSHUTDOWN方法如:
Module shutdown
所有請(qǐng)求處理完畢后,SAPI也關(guān)閉了(即服務(wù)器關(guān)閉),PHP調(diào)用各個(gè)模塊的MSHUTDOWN方法釋放內(nèi)存。
RASP預(yù)加載主要在Module init 階段實(shí)現(xiàn), 通過(guò)在初始化階段預(yù)先加載RASP模塊, 替換opcode handler與通過(guò)自定義函數(shù)替換全局函數(shù)表位置。
PHP把中間字節(jié)碼稱(chēng)之為OPCODE,每個(gè)OPCODE對(duì)應(yīng)ZEND底層的一個(gè)處理函數(shù),ZEND引擎最終執(zhí)行這個(gè)處理函數(shù)。2. Hook Opcode 或 Hook 內(nèi)部函數(shù)
RASP需要監(jiān)控各個(gè)敏感函數(shù)的調(diào)用,在PHP中比較好的方式便是 Hook Opcode 和 Hook內(nèi)部函數(shù)。
(1) 實(shí)現(xiàn)Hook Opcode 功能只需要改變 Hook Opcode 對(duì)應(yīng)的處理函數(shù)即可,而 zend 預(yù)先就提供了一個(gè)現(xiàn)成的接口:zend_set_user_opcode_handler, 如:
替換 Opcode handler 后便可以自定義函數(shù)調(diào)用前后的操作, 如獲取參數(shù)、阻斷攻擊等, 還可以通過(guò) ZEND_USER_OPCODE_DISPATCH 跳回至原來(lái)的Opcode執(zhí)行,雖然PHP調(diào)用函數(shù)的方式多種多樣, 但從Opcode角度分析, 主要還是分為以下幾類(lèi), 以php7為例:
(2) 另一種實(shí)現(xiàn)Hook函數(shù)調(diào)用的方式就是Hook內(nèi)部函數(shù), Opcode最終還是會(huì)通過(guò)CG(function_table)獲取所調(diào)用函數(shù)的handler執(zhí)行, 那么我們通過(guò)修改CG(function_table)表對(duì)應(yīng)函數(shù)的handler指向, 便可以指向我們實(shí)現(xiàn)的函數(shù),在完成相應(yīng)操作后繼續(xù)調(diào)用原來(lái)的函數(shù)實(shí)現(xiàn)hook。
兩種方式皆可實(shí)現(xiàn)Hook函數(shù),有各自的優(yōu)點(diǎn)。第一種,適合工程化,只需要對(duì)幾種Opcode類(lèi)型進(jìn)行hook,后續(xù)Hook的敏感函數(shù)可以自行添加;第二種則是需要對(duì)敏感函數(shù)進(jìn)行逐一替換,比較繁瑣,但優(yōu)點(diǎn)是替換發(fā)生在函數(shù)表內(nèi),故通過(guò)越過(guò)Opcode進(jìn)行函數(shù)執(zhí)行的手法也無(wú)法繞過(guò)檢測(cè),更加可靠。
3. 參數(shù)獲取與分析
在完成對(duì)敏感函數(shù)調(diào)用行為的監(jiān)控后,通過(guò)ZEND_CALL_NUM_ARGS和ZEND_CALL_ARG,我們可以獲取到函數(shù)的參數(shù)個(gè)數(shù)和內(nèi)容,便可根據(jù)函數(shù)的參數(shù)制定相應(yīng)的策略。如文件類(lèi)可以關(guān)注是否讀取了敏感文件, 數(shù)據(jù)庫(kù)操作類(lèi)是否語(yǔ)法結(jié)構(gòu)發(fā)生了變化等等。
二、 RASP 安全應(yīng)用場(chǎng)景介紹
1. 基于規(guī)則的漏洞攻擊檢測(cè)
通過(guò)RASP實(shí)時(shí)采集Web應(yīng)用的高風(fēng)險(xiǎn)行為,具體實(shí)現(xiàn)為hook漏洞相關(guān)的函數(shù),如檢測(cè)SQL注入(劫持mysqli_query等)、命令注入(system/exec等)、文件上傳漏洞(move_uploaded_file等)、xss漏洞(echo/print等);拿到函數(shù)數(shù)據(jù)后對(duì)參數(shù)進(jìn)行規(guī)則匹配判斷是否存在漏洞攻擊。舉兩個(gè)例子:
(1)文件上傳漏洞,以move_uploaded_file為例,函數(shù)說(shuō)明:move_uploaded_file ( string filename,stringdestination ) : bool,第一個(gè)參數(shù)為上傳文件,如果上傳了一個(gè)動(dòng)態(tài)php腳本后綴文件即判斷存在上傳漏洞。
【ip xxx 安全漏洞告警】
TRASP 發(fā)現(xiàn)ip xxx存在上傳漏洞,漏洞細(xì)節(jié)如下:
漏洞文件: /data/webroot/xxx/x.php(第201行)
上傳的PHP動(dòng)態(tài)腳本: /data/webroot/xxx/1.php
(2)SQL注入,可以發(fā)現(xiàn)下圖正常的sql和惡意的注入sql有區(qū)別,比如使用了union select,可以基于此做安全策略;
傳統(tǒng)規(guī)則可能存在誤報(bào),也可以對(duì)sql語(yǔ)句做語(yǔ)義解析判斷是否存在sql注入攻擊,非本文重點(diǎn)不再過(guò)多介紹。
2. 基于污點(diǎn)追蹤的漏洞檢測(cè)
通過(guò)追蹤外部可控制的輸入變量(如GET,_POST,REQUEST,REQUEST,_COOKIE等)是否未經(jīng)安全處理進(jìn)入危險(xiǎn)函數(shù)執(zhí)行,危險(xiǎn)函數(shù)包括各種可能導(dǎo)致漏洞的函數(shù),如命令注入相關(guān)的system/exec,xss相關(guān)的echo/print。污點(diǎn)追蹤原理借用了php變量結(jié)構(gòu)體預(yù)留的一個(gè)標(biāo)記位,業(yè)界知名的相關(guān)系統(tǒng)有鳥(niǎo)哥開(kāi)發(fā)的Taint擴(kuò)展,詳情可參考:https://www.laruence.com/2012/02/14/2544.html, 本文不再做過(guò)多介紹。
3. IAST掃描聯(lián)動(dòng)
先簡(jiǎn)要介紹下IAST,IAST中文名是交互式應(yīng)用安全測(cè)試,相較于傳統(tǒng)的DAST和SAST掃描方式,漏洞檢出率更高&誤報(bào)率更低。IAST目前常見(jiàn)的實(shí)現(xiàn)方式有兩種,一類(lèi)是基于代理或網(wǎng)關(guān)等形式抓取業(yè)務(wù)CGI流量后做安全測(cè)試掃描,一類(lèi)是在業(yè)務(wù)web容器插樁獲取業(yè)務(wù)代碼執(zhí)行細(xì)節(jié)結(jié)合DAST掃描用例判斷是否存在漏洞,比如DAST發(fā)起一個(gè)帶有test_from_dongxi字符串的SQL注入測(cè)試請(qǐng)求,web容器內(nèi)插樁劫持?jǐn)?shù)據(jù)庫(kù)相關(guān)函數(shù),發(fā)現(xiàn)sql語(yǔ)句中有test_from_dongxi的字符串,從而聯(lián)動(dòng)發(fā)現(xiàn)安全漏洞;RASP可以用于插樁獲取代碼執(zhí)行流程,相較于傳統(tǒng)漏洞檢測(cè)方法可以直接定位到有漏洞的代碼文件和具體代碼行號(hào),業(yè)務(wù)修復(fù)起來(lái)更加便捷。
4. Webshell檢測(cè)
Webshell文件是一個(gè)特殊的cgi文件,有文件操作、命令執(zhí)行等管理功能,可以基于rasp采集的數(shù)據(jù)在云端做檢測(cè);檢測(cè)方法包括 規(guī)則匹配(適用于一句話(huà)木馬和混淆webshell有明顯特征的樣本)、行為統(tǒng)計(jì)分析(適用于大馬);此外,RASP結(jié)合污點(diǎn)追蹤也是一種檢測(cè)方法,通過(guò)標(biāo)記非信任的數(shù)據(jù)源,監(jiān)測(cè)整個(gè)數(shù)據(jù)鏈路,此前寫(xiě)過(guò)一篇文章,詳情可參考:https://security.tencent.com/index.php/blog/msg/152, 本文不再做過(guò)多介紹。
三、RASP 對(duì)抗淺析
在上文中,介紹了PHP RASP的安全應(yīng)用場(chǎng)景和實(shí)現(xiàn)原理,寫(xiě)了很多RASP的優(yōu)點(diǎn),但俗話(huà)講的好:沒(méi)有絕對(duì)安全的系統(tǒng),接下來(lái)分享一下RASP存在的不足。先看一下RASP在LINUX系統(tǒng)中的層級(jí):
PHP RASP作為php解釋器的擴(kuò)展,運(yùn)行在php解釋器層面,也就是說(shuō)在與PHP RASP同級(jí)或者在其層級(jí)之下的操作,它的監(jiān)控基本上是失效的,這包括與PHP RASP同一級(jí)的其他擴(kuò)展,PHP解釋器之外的進(jìn)程,以及通過(guò)glibc的操作,這很關(guān)鍵。
既然分析繞過(guò)手法,那就需要一個(gè)繞過(guò)的標(biāo)準(zhǔn),由于命令風(fēng)險(xiǎn)很高,同時(shí)更加普遍,因此選擇命令作為突破口:
接下來(lái)從9個(gè)方面來(lái)闡述繞過(guò)方法,文中部分知識(shí)都是公開(kāi)的,只是用在了新的場(chǎng)景。
1.函數(shù)監(jiān)控不全
php手冊(cè)中的函數(shù)太多了,總有你想不到的,多翻翻PHP手冊(cè),比如rasp hook了以下常用的命令執(zhí)行函數(shù)
利用Windows中COM組件繞過(guò):
2.函數(shù)參數(shù)混淆
RASP檢測(cè)基于函數(shù)和參數(shù)做安全策略,可以對(duì)參數(shù)做變形繞過(guò)檢測(cè),舉個(gè)例子: system 函數(shù),用來(lái)執(zhí)行命令,很多業(yè)務(wù)文件也用,比如運(yùn)維管理后臺(tái)。RASP不能只根據(jù)函數(shù)做報(bào)警,會(huì)帶來(lái)大量誤報(bào),需要結(jié)合參數(shù)來(lái)做策略,system函數(shù)底層原理是執(zhí)行 sh -c "函數(shù)參數(shù)",因此我們可以通過(guò)命令混淆的方式,成功將RASP動(dòng)態(tài)檢測(cè)轉(zhuǎn)化為對(duì)函數(shù)參數(shù)的靜態(tài)檢測(cè),這樣操作空間就會(huì)變得很大。示例如下:
其實(shí)在存在命令注入漏洞的場(chǎng)景中,使用混淆的方式是有很大的機(jī)會(huì)繞過(guò)RASP的監(jiān)控。
3.loader型函數(shù)
什么叫l(wèi)oader型函數(shù)呢? 簡(jiǎn)單來(lái)說(shuō)函數(shù)是正常的,但是通過(guò)改變參數(shù)來(lái)實(shí)現(xiàn)惡意行為,函數(shù)參數(shù)相當(dāng)于payload。
比如 mail() 函數(shù)的第五個(gè)additional_parameters參數(shù)可用于設(shè)置命令行選項(xiàng)傳遞給配置為發(fā)送郵件時(shí)使用的程序。
mail 函數(shù)的底層原理是調(diào)用sendmail程序,當(dāng)系統(tǒng)使用Exim來(lái)發(fā)送郵件時(shí),sendmail 的 -be 參數(shù)支持運(yùn)行擴(kuò)展模式,可以 對(duì)指定字符串?dāng)U展格式進(jìn)行解析。
默認(rèn)情況下 sendmail時(shí)不支持 -be參數(shù)的,如何測(cè)試主機(jī)上的sendmail是否支持-be擴(kuò)展呢? 使用sendmail執(zhí)行whoami,如果成功則沒(méi)有問(wèn)題:
借用github中使用mail 實(shí)現(xiàn)命令執(zhí)行的開(kāi)源代碼:
除了mail函數(shù),還有imap_open 函數(shù)在ssh建立連接可利用t代替空格進(jìn)行-o ProxyCommand參數(shù)命令拼接,從而調(diào)用系統(tǒng)shell執(zhí)行命令。示例代碼如下:
4.LD_PRELOAD
LD_PRELOAD 是Linux中比較特殊的環(huán)境變量,它允許用戶(hù)指定程序運(yùn)行前優(yōu)先加載的動(dòng)態(tài)鏈接庫(kù)。在php中,可使用putenv()函數(shù)設(shè)置LD_PRELOAD環(huán)境變量來(lái)加載指定的so文件,so文件中包含自定義函數(shù)進(jìn)行劫持從而達(dá)到執(zhí)行惡意命令的目的。
mail() 、 error_log()、ImageMagick() 是常用于劫持的觸發(fā)函數(shù),原因是在運(yùn)行的時(shí)候能夠啟動(dòng)子進(jìn)程,這樣才能重新加載我們所設(shè)置的環(huán)境變量,從而劫持子進(jìn)程所調(diào)用的庫(kù)函數(shù)。
以mail函數(shù)為例:mail函數(shù)在運(yùn)行時(shí),會(huì)啟動(dòng)子進(jìn)程來(lái)調(diào)用系統(tǒng)的sendmail,sendmail引用了getegid() 函數(shù)。
那么我們可以通過(guò)重寫(xiě) getegid() 函數(shù)編譯為so文件,代碼內(nèi)部執(zhí)行了whoami:
在利用過(guò)程中,通過(guò)設(shè)置LD_PRELOAD環(huán)境變量引入自定義的so庫(kù)。由于真正的惡意代碼運(yùn)行在php之外的進(jìn)程,自然避過(guò)了RASP監(jiān)控。
5. htaccess和mod_cgi
在apache的WEB環(huán)境中,我們經(jīng)常會(huì)使用.htaccess這個(gè)文件來(lái)確定某個(gè)目錄下的URL重寫(xiě)規(guī)則,如果.htaccess文件被攻擊者修改的話(huà),攻擊者就可以利用apache的mod_cgi模塊,直接繞過(guò)PHP來(lái)執(zhí)行系統(tǒng)命令。需要滿(mǎn)足四個(gè)條件:
舉個(gè)例子:
.htaccess內(nèi)容:
shell.tt
6. PHP-FPM
PHP-FPM是一個(gè)fastcgi協(xié)議解析器,默認(rèn)監(jiān)聽(tīng)在9000端口。php-fpm由于未授權(quán)訪(fǎng)問(wèn)的設(shè)計(jì)缺陷,它沒(méi)有相應(yīng)的訪(fǎng)問(wèn)驗(yàn)證,因此 可以自己構(gòu)造fastcgi協(xié)議,與php-fpm進(jìn)行通信,讓它幫我們干一些"壞事",比如動(dòng)態(tài)加載上傳的惡意php擴(kuò)展。
FastCGI協(xié)議由多個(gè)record組成,和HTTP協(xié)議類(lèi)似,也有header和body ,但是和HTTP頭不同,record的頭固定8個(gè)字節(jié),body是由頭中的contentLength指定,其結(jié)構(gòu)如下:
在傳入的FastCGI協(xié)議數(shù)據(jù)包中,設(shè)置 type=4,就可以給php-fpm傳遞環(huán)境參數(shù),指揮它工作。
通過(guò)FastCGI協(xié)議告訴php-fpm去加載一個(gè)我們自定義的擴(kuò)展,這涉及到php-fpm的兩個(gè)環(huán)境變量,PHP_VALUE 和 PHP_ADMIN_VALUE。這兩個(gè)環(huán)境變量就是用來(lái)設(shè)置PHP配置項(xiàng)的,PHP_VALUE可以設(shè)置模式為PHP_INI_USER和PHP_INI_ALL的選項(xiàng),PHP_ADMIN_VALUE可以設(shè)置所有選項(xiàng)。我們只要發(fā)送如下類(lèi)似的請(qǐng)求就可以實(shí)現(xiàn)擴(kuò)展的自動(dòng)加載。
推薦幾個(gè)項(xiàng)目,可以方便大家更好的操作:
7. C接口
FFI(Foreign Function Interface)是 PHP7.4 新加入的功能,即外部函數(shù)接口,允許從共享庫(kù)中調(diào)用C代碼,導(dǎo)致風(fēng)險(xiǎn)點(diǎn)擴(kuò)大。調(diào)用glibc中的system:
8. 已知漏洞
php有一些已知的釋放重引用漏洞,比如 GC UAF、Json Serializer UAF 、Backtrace UAF等,具體的exp位于https://github.com/mm0r1/exploits/
通過(guò)第一部分對(duì) RASP(PHP)原理的講解,我們知道PHP函數(shù)的底層調(diào)用都要通過(guò)CG(function_table)獲取所調(diào)用函數(shù)的handler。無(wú)論 RASP 是hook opcode 還是 hook function,本質(zhì)上都沒(méi)有從內(nèi)存中刪除所調(diào)用的函數(shù),只是改變了走向,指向了我們自定義的函數(shù)。正因如此,我們可以通過(guò)上述漏洞,找到內(nèi)存中對(duì)應(yīng)的函數(shù)地址,將其封裝為閉包實(shí)現(xiàn)調(diào)用,從而完成繞過(guò) 。以 system函數(shù)為例,繞過(guò)原理簡(jiǎn)單總結(jié)如下圖所示:
對(duì)于 正常的php 文件 system("whoami")而言,由于php rasp 將function_table 函數(shù)指向從原來(lái)的zif_system 內(nèi)置函數(shù) 改為 自定義的fake_system監(jiān)控函數(shù),導(dǎo)致命令執(zhí)行在RASP的控制之下。而通過(guò)上述漏洞的方式,可以在內(nèi)存中直接找到 zif_system函數(shù)地址,找到地址后,通過(guò)偽造閉包對(duì)象,將對(duì)象中的函數(shù)handler指向該地址,實(shí)現(xiàn)對(duì) zif_system函數(shù)的調(diào)用,從而繞過(guò)RASP監(jiān)控。
9. GOT 表劫持
在linux系統(tǒng)中,procfs 文件系統(tǒng)是個(gè)特殊的存在,對(duì)應(yīng)的是 /proc目錄,php 可以通過(guò)/proc 目錄讀寫(xiě)自己所在進(jìn)程的內(nèi)存,將非敏感函數(shù)地址替換成glibc 中的system地址,從而執(zhí)行命令,其涉及的技術(shù)叫做 GOT表劫持。
通過(guò)正常函數(shù)實(shí)現(xiàn)敏感行為繞過(guò) RASP ,舉個(gè)例子,如果能將open函數(shù)地址換成system地址,那么便可以將fopen打開(kāi)文件的命令,最終變成glibc調(diào)用system執(zhí)行命令。
適用條件:
針對(duì)適用條件的第2點(diǎn)簡(jiǎn)要說(shuō)明一下:
- apache+php 由于 apache調(diào)用setuid設(shè)置www權(quán)限工作進(jìn)程,/proc/self/目錄屬于root用戶(hù),導(dǎo)致沒(méi)有權(quán)限讀寫(xiě)。
- nginx+php,對(duì)于低版本的php -fpm www權(quán)限工作進(jìn)程, /proc/self/目錄屬于www用戶(hù)可以讀寫(xiě)。經(jīng)不完全測(cè)試,php<5.6 版本是可以使用GOT表劫持。
下面簡(jiǎn)單描述一下劫持GOT表的步驟,以system替換open函數(shù)為例:
不在文中放exp源碼了,具體源碼在前文提到的git倉(cāng)庫(kù)中,大家可以根據(jù)實(shí)際環(huán)境進(jìn)行調(diào)試修改,并不通用。
四、總結(jié)
單純就RASP本身而言,RASP的優(yōu)點(diǎn)在于能嵌入在應(yīng)用程序內(nèi)部,應(yīng)用代碼無(wú)感知,更了解應(yīng)用程序上下文,方便定位漏洞信息,更少的誤報(bào)和漏報(bào),對(duì)各種繞過(guò)手法具有更強(qiáng)的防護(hù)能力;但缺點(diǎn)在于PHP RASP會(huì)對(duì)服務(wù)器的性能造成影響,推動(dòng)部署落地相對(duì)困難。不過(guò)隨著DevSecOps理念的推廣,未來(lái)借助于云、容器等成熟的大規(guī)模基礎(chǔ)設(shè)施和技術(shù),通過(guò)優(yōu)化完全有可能提供更優(yōu)雅更易于接受和使用的部署方案,能夠帶來(lái)更快更精準(zhǔn)更細(xì)致入微的安全檢查及防護(hù)能力。關(guān)于DevSecOps理念與思考,大家可以參考我們團(tuán)隊(duì)之前的文章: “安全需要每個(gè)工程師的參與”-DevSecOps理念及思考 。
雖然依然有一些對(duì)抗手段,但是RASP 在Web安全領(lǐng)域依然是現(xiàn)階段強(qiáng)有力的存在。但是安全沒(méi)有銀彈,不存在一勞永逸的系統(tǒng)和辦法,在漏洞/入侵檢測(cè)上我們需要掃描器,WAF,IDS,EDR等系統(tǒng)的配合共建防御體系,縱深防御才是長(zhǎng)久之道,并且需要持續(xù)研究在對(duì)抗中不斷提升和發(fā)展。
參考文獻(xiàn):
https://www.cnblogs.com/zw1sh/p/12632126.htmlhttps://zhuanlan.zhihu.com/p/75114351?from_voters_page=truehttps://www.cnblogs.com/tr1ple/p/11213732.htmlhttps://www.freebuf.com/articles/others-articles/232329.htmlhttps://x-c3ll.github.io/posts/UAF-PHP-disable_functions/ 與50位技術(shù)專(zhuān)家面對(duì)面20年技術(shù)見(jiàn)證,附贈(zèng)技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的rasp 系统_RASP攻防 —— RASP安全应用与局限性浅析的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: css 剪辑图片_CSS clip:re
- 下一篇: ai边缘平滑_华为P40的多帧曝光AI智