• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      RASP技術(shù)在關(guān)鍵信息基礎(chǔ)設(shè)施防護(hù)中的局限性分析

      2021-03-11 06:04:22王奕鈞
      信息安全研究 2021年3期
      關(guān)鍵詞:源代碼調(diào)用進(jìn)程

      王奕鈞

      (公安部第一研究所信息安全部 北京 100048)

      (wangyj@gov110.cn)

      隨著近年來(lái)網(wǎng)絡(luò)安全工作的持續(xù)推進(jìn),公安部相關(guān)領(lǐng)導(dǎo)已經(jīng)多次在全國(guó)性的安全大會(huì)上強(qiáng)調(diào)網(wǎng)絡(luò)安全等級(jí)保護(hù)和關(guān)鍵信息基礎(chǔ)設(shè)施保護(hù)已經(jīng)進(jìn)入了轉(zhuǎn)型期,提出了“三化六防”新思想,即以“實(shí)戰(zhàn)化、體系化、常態(tài)化”為新理念,以“動(dòng)態(tài)防御、主動(dòng)防御、縱深防御、精準(zhǔn)防護(hù)、整體防護(hù)、聯(lián)防聯(lián)控”為新舉措,構(gòu)建網(wǎng)絡(luò)安全綜合防控體系,深入推進(jìn)等保和關(guān)保的積極實(shí)踐.傳統(tǒng)的網(wǎng)絡(luò)安全防護(hù)體系多依賴于網(wǎng)絡(luò)層的防火墻、IDS/IPS、WAF、流量清洗等設(shè)備,出于降低對(duì)業(yè)務(wù)影響和便于業(yè)務(wù)部署的考慮,在服務(wù)器上幾乎不安裝防護(hù)軟件,或僅安裝威脅監(jiān)測(cè)類的軟件.而在2012年,Gartner引入了RASP[1](runtime application self-protection)一詞,RASP屬于一種新型應(yīng)用安全保護(hù)技術(shù),它將防護(hù)功能“注入”到應(yīng)用程序中,與應(yīng)用程序融為一體,使應(yīng)用程序具備自我防護(hù)能力,當(dāng)應(yīng)用程序遭受到實(shí)際攻擊傷害時(shí)能實(shí)時(shí)檢測(cè)和阻斷安全攻擊,而不影響業(yè)務(wù)正常運(yùn)行.

      1 RASP技術(shù)介紹

      RSAP技術(shù)是將防護(hù)模塊自身注入到應(yīng)用程序中,與應(yīng)用程序融為一體,實(shí)時(shí)監(jiān)測(cè),阻斷攻擊,使程序自身?yè)碛凶员Wo(hù)的能力[2].并且應(yīng)用程序無(wú)需在編碼時(shí)進(jìn)行任何修改,只需進(jìn)行簡(jiǎn)單的配置即可.RASP技術(shù)原理示意圖如圖1所示:

      圖1 RASP技術(shù)原理示意圖

      相較于在網(wǎng)絡(luò)層部署設(shè)備的檢測(cè)方式,由于RASP技術(shù)將防護(hù)模塊注入到進(jìn)程中,所以RASP技術(shù)有如下特點(diǎn):

      1) 運(yùn)行在應(yīng)用程序內(nèi)部,應(yīng)用代碼無(wú)感知;

      2) 檢測(cè)點(diǎn)位于應(yīng)用程序的輸入輸出位置;

      3) 輸入點(diǎn)包括用戶請(qǐng)求、文件輸入等;

      4) 輸出點(diǎn)包括數(shù)據(jù)庫(kù)、網(wǎng)絡(luò)、文件系統(tǒng)等.

      由此可見,相對(duì)于部署在網(wǎng)絡(luò)層的防護(hù)手段,RASP技術(shù)更貼近網(wǎng)絡(luò)攻擊最后的落腳點(diǎn),也就是有價(jià)值的數(shù)據(jù)、文件等.只要RASP技術(shù)使用的檢測(cè)點(diǎn)選取合理,就可以獲取到已經(jīng)解碼過(guò)的真實(shí)攻擊負(fù)載,可以減少由于防護(hù)規(guī)則不完善導(dǎo)致的漏報(bào).以網(wǎng)絡(luò)層防護(hù)設(shè)備中比較有代表性的WAF為例[3],RASP技術(shù)與WAF設(shè)備的優(yōu)缺點(diǎn)對(duì)比如表1所示:

      表1 RASP技術(shù)與WAF設(shè)備特點(diǎn)對(duì)比表

      由于RASP技術(shù)將防護(hù)模塊注入到進(jìn)程中,與應(yīng)用融為一體,可以獲取到應(yīng)用運(yùn)行時(shí)的上下文,根據(jù)運(yùn)行時(shí)上下文或者監(jiān)控到的敏感操作,對(duì)攻擊進(jìn)行精準(zhǔn)的識(shí)別或攔截,因此RASP可在如下安全場(chǎng)景中發(fā)揮更大的作用:

      1) 基于規(guī)則的漏洞攻擊檢測(cè).

      通過(guò)RASP實(shí)時(shí)采集Web應(yīng)用的高風(fēng)險(xiǎn)行為、hook漏洞相關(guān)的函數(shù),如檢測(cè)SQL注入可hook mysqli_query、檢測(cè)命令注入可hook system/exec、檢測(cè)文件上傳漏洞可hook move_uploaded_file、檢測(cè)xss漏洞可hook echo/print,hook成功后當(dāng)相關(guān)函數(shù)被調(diào)用時(shí),RASP探針可對(duì)函數(shù)的參數(shù)進(jìn)行規(guī)則匹配,判斷是否存在漏洞攻擊.以SQL注入、文件上傳漏洞舉例:

      ① SQL注入.比如在請(qǐng)求中檢測(cè)到進(jìn)程使用了union select即可以判斷此請(qǐng)求存在惡意行為;

      ② 文件上傳漏洞[4].以move_uploaded_file為例,move_uploaded_file(string filename, string destination),第1個(gè)參數(shù)為上傳文件,如果檢測(cè)到上傳了1個(gè)動(dòng)態(tài)PHP腳本后綴文件即判斷存在上傳漏洞.

      2) Webshell檢測(cè).

      Webshell文件是特殊的cgi文件,有文件操作、命令執(zhí)行等管理功能.RASP探針可以采集進(jìn)程中的數(shù)據(jù)或行為進(jìn)行規(guī)則匹配或者行為統(tǒng)計(jì)分析,從而發(fā)現(xiàn)請(qǐng)求中是否包含Webshell的代碼特征或進(jìn)程行為.并且RASP探針監(jiān)測(cè)的位置可以設(shè)置在代碼混淆、解密之后,因此,RASP對(duì)于Webshell的監(jiān)測(cè)具有不容易被繞過(guò)、特征庫(kù)小的優(yōu)點(diǎn).

      3) 基于污點(diǎn)追蹤的漏洞檢測(cè).

      污點(diǎn)追蹤原理[5]借用了PHP變量結(jié)構(gòu)體預(yù)留的一個(gè)標(biāo)記位,通過(guò)追蹤外部可控制的輸入變量(如GET,_POST,REQUEST,REQUEST,_COOKIE等)是否未經(jīng)安全處理進(jìn)入危險(xiǎn)函數(shù)執(zhí)行,危險(xiǎn)函數(shù)包括各種可能導(dǎo)致漏洞的函數(shù),如命令注入時(shí)經(jīng)常利用的函數(shù)system/exec,xss攻擊經(jīng)常利用的echo/print等.

      2 RASP技術(shù)局限性分析

      雖然RASP技術(shù)對(duì)于漏洞檢測(cè)、Webshell檢測(cè)具有檢測(cè)機(jī)制上的優(yōu)勢(shì),但使用RASP技術(shù)進(jìn)行檢測(cè)也不是萬(wàn)無(wú)一失的解決方案.下面將以PHP探針為例對(duì)RASP技術(shù)局限性進(jìn)行分析,RASP PHP探針通常會(huì)以PHP解釋器擴(kuò)展的形式被加載,運(yùn)行在PHP解釋器層面,RASP PHP探針運(yùn)行的層級(jí)如圖2所示:

      圖2 RASP運(yùn)行層級(jí)示意圖

      由圖2可見RASP同級(jí)或者在其層級(jí)之下的操作,其監(jiān)控基本上是失效的,這包括與PHP RASP同一級(jí)的其他擴(kuò)展、PHP解釋器之外的進(jìn)程以及通過(guò)GLIBC的操作.主要繞過(guò)RASP監(jiān)測(cè)的手段如下:

      1) 函數(shù)監(jiān)控不全.

      PHP支持的函數(shù)多種多樣,RASP探針不可能監(jiān)控所有函數(shù)的調(diào)用,通常RASP 會(huì)監(jiān)控常用的命令執(zhí)行函數(shù):system(),exec(),shell_exec(),passthru(),popen(),proc_open(),pcntl_exec(),‘單引號(hào)執(zhí)行’等,這就給攻擊者繞過(guò)監(jiān)控提供了可能,例如利用Windows中COM組件完成對(duì)RASP監(jiān)控的繞過(guò),示例代碼如圖3所示:

      圖3 COM組件利用源代碼示例

      2) 函數(shù)參數(shù)混淆.

      RASP檢測(cè)基于函數(shù)和參數(shù)作安全策略,可以對(duì)參數(shù)作變形繞過(guò)檢測(cè),例如用來(lái)執(zhí)行命令的函數(shù)system. RASP為了降低誤報(bào)率,需要結(jié)合函數(shù)與參數(shù)聯(lián)合判斷,函數(shù)system底層原理是執(zhí)行sh -c“函數(shù)參數(shù)”,因此通過(guò)命令混淆的方式,可以將RASP動(dòng)態(tài)檢測(cè)轉(zhuǎn)化為對(duì)函數(shù)參數(shù)的靜態(tài)檢測(cè),從而繞過(guò)RASP監(jiān)測(cè),尤其是存在命令注入漏洞的場(chǎng)景中,使用函數(shù)混淆的方式繞過(guò)RASP監(jiān)控的成功率更高.示例代碼如圖4所示:

      圖4 參數(shù)混淆利用源代碼示例

      3) loader型函數(shù).

      loader型函數(shù)可以在執(zhí)行函數(shù)本身的過(guò)程中把其中的參數(shù)按函數(shù)執(zhí)行的方式加載.因此在改變函數(shù)調(diào)用的條件下,通過(guò)構(gòu)造惡意參數(shù),把函數(shù)參數(shù)巧妙地轉(zhuǎn)義成payload即可實(shí)現(xiàn)攻擊,并繞過(guò)RASP的監(jiān)測(cè).

      例如函數(shù)imap_open(string mailbox, string username, string password, int [flags])的第1個(gè)參數(shù)mailbox用來(lái)傳遞郵件服務(wù)器的位置信息,但在建立ssh連接時(shí)可利用 代替空格,對(duì)參數(shù)-o ProxyCommand進(jìn)行命令拼接,從而調(diào)用系統(tǒng)shell執(zhí)行命令.示例代碼如圖5所示:

      圖5 imap_open函數(shù)利用源代碼示例

      除了函數(shù)imap_open,還有函數(shù)mail(to,subject,message,headers,parameters)的第5個(gè)參數(shù)parameters,可以用來(lái)設(shè)置命令行并傳遞給發(fā)送郵件時(shí)使用的程序.函數(shù)mail()的底層原理是調(diào)用sendmail程序, sendmail的參數(shù)-be支持運(yùn)行擴(kuò)展模式,可以對(duì)指定字符串?dāng)U展格式進(jìn)行解析.示例代碼如圖6所示:

      圖6 函數(shù)mail利用源代碼示例

      4) LD_PRELOAD.

      LD_PRELOAD是Linux中比較特殊的環(huán)境變量,它允許用戶指定在程序運(yùn)行前優(yōu)先加載指定的動(dòng)態(tài)鏈接庫(kù).在PHP中,可使用函數(shù)putenv()設(shè)置LD_PRELOAD環(huán)境變量來(lái)加載指定的so文件,因此劫持so文件中包含的自定義函數(shù)就可以達(dá)到執(zhí)行惡意命令的目的.

      函數(shù)mail(),error_log(),ImageMagick()經(jīng)常被攻擊者利用,用于觸發(fā)已劫持的so文件,原因是這類函數(shù)在運(yùn)行時(shí)能夠啟動(dòng)子進(jìn)程,便于預(yù)先加載已被重新設(shè)置的環(huán)境變量,從而劫持子進(jìn)程所調(diào)用的庫(kù)函數(shù).

      以函數(shù)mail()為例:函數(shù)mail()在運(yùn)行時(shí),會(huì)啟動(dòng)子進(jìn)程來(lái)調(diào)用系統(tǒng)的函數(shù)sendmail(),函數(shù)sendmail()又繼續(xù)引用函數(shù)getgid().那么就可以通過(guò)重寫函數(shù)getgid(),并編譯為so文件,其中假如代碼執(zhí)行了whoami命令,示例代碼如圖7所示:

      圖7 LD_PRELOAD payload源代碼示例

      在利用過(guò)程中,通過(guò)設(shè)置LD_PRELOAD環(huán)境變量引入自定義的so庫(kù).由于真正的惡意代碼運(yùn)行在PHP之外的進(jìn)程,自然避過(guò)了RASP監(jiān)控.示例代碼如圖8所示:

      圖8 LD_PRELOAD利用源代碼示例

      5) htaccess和mod_cgi.

      在apache的Web環(huán)境中,我們經(jīng)常會(huì)使用.htaccess這個(gè)文件來(lái)確定某個(gè)目錄下的URL重寫規(guī)則,如果.htaccess文件被攻擊者修改,攻擊者就可以利用apache的mod_cgi模塊,直接繞過(guò)PHP來(lái)執(zhí)行系統(tǒng)命令.利用這種攻擊方法需要滿足4個(gè)條件:

      ① apache環(huán)境;

      ② mod_cgi為啟用狀態(tài);

      ③ 允許.htaccess文件,即在httpd.conf中,AllowOverride選項(xiàng)為All,而不是none;

      ④ 有權(quán)限寫.htaccess文件.

      例如,.htaccess文件的內(nèi)容如圖9所示:

      圖9 htaccess利用源代碼示例

      如果想讀取Linux的密碼文件,構(gòu)造如下cgi-script.tt文件內(nèi)容即可,如圖10所示:

      圖10 htaccess payload源代碼示例

      6) PHP-FPM.

      PHP-FPM是一個(gè)FastCGI協(xié)議解析器,默認(rèn)監(jiān)聽在9000端口.PHP-fpm由于未授權(quán)訪問(wèn)的設(shè)計(jì)缺陷,它沒有相應(yī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é)議類似,也有header和body,但是和HTTP頭不同,record頭的長(zhǎng)度固定為8 B,body是由頭中的contentLength指定,其結(jié)構(gòu)如圖11所示:

      圖11 FastCGI結(jié)構(gòu)體源代碼示例

      在傳入的FastCGI協(xié)議數(shù)據(jù)包中,設(shè)置type=4,就可以給PHP-fpm傳遞環(huán)境參數(shù),通過(guò)FastCGI協(xié)議指揮PHP-fpm加載自定義的擴(kuò)展,這里涉及到PHP_VALUE和PHP_ADMIN_VALUE這2個(gè)環(huán)境變量,這2個(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ā)送如下類似的請(qǐng)求就可以實(shí)現(xiàn)擴(kuò)展的自動(dòng)加載.示例代碼如圖12所示:

      圖12 FastCGI利用源代碼示例

      7) C接口.

      FFI(foreign function interface)是PHP 7.4新加入的功能,即外部函數(shù)接口,允許從共享庫(kù)中調(diào)用C代碼,導(dǎo)致PHP直接加載外部的函數(shù).例如利用FFI查看Linux的密碼文件,示例代碼如圖13所示:

      圖13 C接口利用源代碼示例

      8) 已知漏洞.

      PHP某些版本存在釋放重引用漏洞,比如GC UAF,Json Serializer UAF,Backtrace UAF等,PHP函數(shù)的底層調(diào)用都要通過(guò)CG(function_table)獲取所調(diào)用函數(shù)的handler.無(wú)論RASP是hook opcode還是hook function,本質(zhì)上都沒有從內(nèi)存中刪除所調(diào)用的函數(shù),只是改變了函數(shù)執(zhí)行的走向,指向了我們自定義的函數(shù).因此,攻擊者可以通過(guò)上述漏洞找到內(nèi)存中對(duì)應(yīng)的函數(shù)地址,將其封裝為閉包實(shí)現(xiàn)調(diào)用,從而完成對(duì)RASP的繞過(guò).以函數(shù)system為例,繞過(guò)原理簡(jiǎn)單總結(jié)如圖14所示.

      圖14 漏洞繞過(guò)原理示意圖

      對(duì)于正常的PHP文件system(“whoami”)而言,由于PHP RASP將函數(shù)function_table指向從原來(lái)的內(nèi)置函數(shù)zif_system改為自定義的監(jiān)控函數(shù)fake_system,導(dǎo)致命令執(zhí)行在RASP的控制之下.而通過(guò)上述漏洞的方式,可以在內(nèi)存中直接找到函數(shù)zif_system地址,找到地址后,通過(guò)偽造閉包對(duì)象,將對(duì)象中的函數(shù)handler指向該地址,實(shí)現(xiàn)對(duì)函數(shù)zif_system的調(diào)用,從而繞過(guò)RASP監(jiān)控.

      9) GOT表劫持.

      在Linux系統(tǒng)中,procfs文件系統(tǒng)是個(gè)特殊的存在,對(duì)應(yīng)的是/proc目錄,PHP可以通過(guò)/proc目錄讀寫自己所在進(jìn)程的內(nèi)存,將非敏感函數(shù)地址替換成glibc中的system地址,從而執(zhí)行命令,這個(gè)過(guò)程就是GOT表劫持.

      例如,如果能將函數(shù)open地址換成system地址,那么便可以將fopen打開文件的命令,最終變成glibc調(diào)用system執(zhí)行命令.GOT表劫持需滿足3個(gè)條件:

      ① Linux內(nèi)核版本≥2.98);

      ② 基于www權(quán)限的PHP-fpm/PHP-cgi work進(jìn)程必須有權(quán)限讀寫/proc/self/目錄;

      ③ open_basedir=off(或者能繞過(guò)open_basedir讀寫 /lib/ 和/proc/).

      下面以system替換函數(shù)open為例,簡(jiǎn)單描述劫持GOT表的步驟:

      1) 讀取/proc/self/maps,找到PHP與glibc在內(nèi)存中的基地址;

      2) 解析/proc/self/exe,找到PHP文件中open@plt的偏移,解析libc.so,找到函數(shù)system的偏移地址;

      3) 解析/proc/self/mem定位open@plt對(duì)應(yīng)open@got的地址,以及l(fā)ibc.so中函數(shù)system的內(nèi)存地址;

      4) 將函數(shù)system的內(nèi)存地址寫入到open@got里;

      5) 主動(dòng)調(diào)用fopen(“/bin/whoami”),即相當(dāng)于調(diào)用system(“/bin/whoami”).

      3 RASP技術(shù)局限的解決方案

      由上述分析可知,RASP技術(shù)的局限性的根源來(lái)自于無(wú)法hook所有的函數(shù)調(diào)用,黑客可以通過(guò)偽裝、混淆、再調(diào)用的方式繞過(guò)RASP的檢測(cè),那么回到關(guān)鍵信息基礎(chǔ)設(shè)施防護(hù)的本質(zhì),就是數(shù)據(jù)和文件不能被竊取和篡改,所以可以引入對(duì)進(jìn)程行為可信認(rèn)證的方式進(jìn)行零信任防護(hù)[6],通過(guò)RASP探針結(jié)合污點(diǎn)追蹤機(jī)制,首先需要增加一個(gè)操作系統(tǒng)底層驅(qū)動(dòng)用來(lái)監(jiān)控進(jìn)程的行為,其次對(duì)標(biāo)識(shí)出需要保護(hù)的文件或命令,然后在RASP探針監(jiān)測(cè)到申請(qǐng)?jiān)L問(wèn)以上文件或執(zhí)行以上命令時(shí)通知操作系統(tǒng)底層驅(qū)動(dòng)放行對(duì)文件或命令的攔截.如果操作系統(tǒng)的底層驅(qū)動(dòng)在沒有RASP探針通知的情況下發(fā)現(xiàn)有進(jìn)程要訪問(wèn)受保護(hù)的文件或命令,那么就攔截這些操作并報(bào)警.通過(guò)在操作系統(tǒng)不同部位對(duì)應(yīng)用的行為進(jìn)行聯(lián)合判斷,通過(guò)標(biāo)記信任的數(shù)據(jù)源監(jiān)測(cè)整個(gè)數(shù)據(jù)鏈路,從而杜絕繞過(guò)RASP監(jiān)測(cè)的可能性.具體流程如圖15所示.

      圖15 引入零信任機(jī)制的RASP監(jiān)測(cè)流程圖

      4 結(jié) 語(yǔ)

      對(duì)于關(guān)鍵信息基礎(chǔ)設(shè)施“三化六防”的防護(hù)要求中強(qiáng)調(diào)實(shí)戰(zhàn)化、體系化、常態(tài)化的防護(hù)思路,以及動(dòng)態(tài)防御、主動(dòng)防御、縱深防御、精準(zhǔn)防護(hù)、整體防控、聯(lián)防聯(lián)控的防護(hù)措施[7],近年來(lái)新興起的RASP技術(shù)作為落實(shí)主動(dòng)防御、縱深防御、精準(zhǔn)防護(hù)的網(wǎng)絡(luò)安全防護(hù)手段,一直被業(yè)內(nèi)廣泛關(guān)注.隨著更多的廠商在自己的產(chǎn)品線中加入了該技術(shù)的應(yīng)用實(shí)踐,越來(lái)越多的攻擊者開始研究繞過(guò)RASP技術(shù)監(jiān)測(cè)的辦法.而在通過(guò)引入零信任的進(jìn)程行為判斷后,利用RASP技術(shù)與文件監(jiān)控技術(shù)聯(lián)合捕捉惡意進(jìn)程行為,并對(duì)其進(jìn)行攔截阻斷,可以很好地實(shí)現(xiàn)對(duì)關(guān)鍵信息基礎(chǔ)設(shè)施進(jìn)行有效防護(hù).本文給出了引入零信任機(jī)制的RASP監(jiān)測(cè)防護(hù)方法,但在效率和性能上還有很大的研究空間,這是下一步關(guān)鍵信息基礎(chǔ)設(shè)施防護(hù)研究工作的重點(diǎn).

      猜你喜歡
      源代碼調(diào)用進(jìn)程
      人工智能下復(fù)雜軟件源代碼缺陷精準(zhǔn)校正
      基于TXL的源代碼插樁技術(shù)研究
      核電項(xiàng)目物項(xiàng)調(diào)用管理的應(yīng)用研究
      債券市場(chǎng)對(duì)外開放的進(jìn)程與展望
      LabWindows/CVI下基于ActiveX技術(shù)的Excel調(diào)用
      軟件源代碼非公知性司法鑒定方法探析
      基于系統(tǒng)調(diào)用的惡意軟件檢測(cè)技術(shù)研究
      揭秘龍湖產(chǎn)品“源代碼”
      社會(huì)進(jìn)程中的新聞學(xué)探尋
      我國(guó)高等教育改革進(jìn)程與反思
      大渡口区| 龙胜| 南川市| 开远市| 乌兰察布市| 龙山县| 广安市| 汝州市| 吴旗县| 富平县| 广南县| 县级市| 琼海市| 许昌市| 遂昌县| 曲阜市| 漳浦县| 伊宁县| 武功县| 册亨县| 平武县| 定南县| 南漳县| 千阳县| 呼伦贝尔市| 东兰县| 株洲县| 师宗县| 海兴县| 行唐县| 和顺县| 四会市| 嫩江县| 平塘县| SHOW| 鹿邑县| 成安县| 巍山| 古田县| 宜良县| 句容市|