官术网_书友最值得收藏!

前言

代碼審計是指對源代碼進行檢查,尋找代碼中的bug,這是一項需要多方面技能的技術(shù),包括對編程的掌握、漏洞形成原理的理解,系統(tǒng)和中間件等的熟悉。

為什么需要代碼審計

代碼審計是企業(yè)安全運營以及安全從業(yè)者必備的基礎(chǔ)能力。代碼審計在很多場景中都需要用到,比如企業(yè)安全運營、滲透測試、漏洞研究等。目前已經(jīng)有不少公司在推廣微軟的軟件SDL(Security Development Lifecycle,安全開發(fā)周期),它涵蓋需求分析→設(shè)計→編碼→測試→發(fā)布→維護,安全貫穿整個軟件開發(fā)周期,其中設(shè)計、編碼和測試是整個SDL的核心,安全問題大多在這里被解決掉。其中在安全設(shè)計這塊,必須要非常了解漏洞形成原理,縱觀全局。而在代碼實現(xiàn)也就是編碼階段,安全依靠于編程人員的技術(shù)基礎(chǔ)以及前期安全設(shè)計的完善性。然后是測試,測試包括白盒測試。黑盒測試以及灰盒測試。黑盒測試也叫功能測試,是指在不接觸代碼的情況下,測試系統(tǒng)的功能是否有bug,是否滿足設(shè)計需求。而白盒測試就是我們說的代碼審計,以開放的形式從代碼層面尋找bug,如果發(fā)現(xiàn)有bug則返回修復(fù),直到?jīng)]有bug才允許軟件發(fā)布上線。

滲透測試人員掌握代碼審計是非常重要的,因為我們在滲透過程中經(jīng)常需要針對目標環(huán)境對payload進行調(diào)試。另外,如果通過掃描器掃描到Web目錄下的一個源碼備份包,通常攻擊者都會利用源碼包找一些配置文件,因為里面有數(shù)據(jù)庫、API等一類配置。如果環(huán)境有限制,比如目標站數(shù)據(jù)庫限制連接IP等,那么工具小子可能在源碼包進行的漏洞利用也就到此為止。對于懂代碼審計的人,結(jié)果完全不一樣,他可以對源碼包進行安全審計,發(fā)現(xiàn)網(wǎng)站代碼里存在的漏洞,然后利用挖掘到的漏洞進行滲透。

編程能力要求

代碼審計對編程語言的基礎(chǔ)有一定要求,至少要能看得懂代碼,這里說的看懂代碼不是簡單地理解幾個if...else語句和for循環(huán),而是能看懂代碼的邏輯,即使有很多函數(shù)沒見過,也是可以到Google去查的。都說編程在語言這塊是一通百通,只要我們對編程思想理解得非常透徹,重新接觸一種編程語言也是非常快就能上手的,所以不管你之前寫過Java還是C#程序,想玩一玩PHP的代碼審計都應(yīng)該不是什么大問題。

代碼審計環(huán)境準備

代碼審計首先要準備的是審計環(huán)境工具,不同的環(huán)境會影響漏洞的利用,所以建議Linux和Windows系統(tǒng)下的PHP環(huán)境都搭建一套,并且需要多個PHP版本。關(guān)于版本切換這塊,建議安裝phpStudy,phpStudy是一套Apache+Nginx+LightTPD+PHP+MySQL+phpMyAdmin+Zend Optimizer+Zend Loader的集成環(huán)境,可以很方便地安裝和切換環(huán)境。代碼審計的工具有很多個,這里推薦使用筆者開發(fā)的Seay源代碼審計系統(tǒng)以及RIPS,二者都是免費開源工具。

除了自動化審計工具外,還有一些像Burp Suite、瀏覽器擴展以及編碼工具等審計輔助工具也都是必備的。

代碼審計思路

通常做代碼審計都是檢查敏感函數(shù)的參數(shù),然后回溯變量,判斷變量是否可控并且沒有經(jīng)過嚴格的過濾,這是一個逆向追蹤的過程。而代碼審計并非這一種手段,還可以先找出哪些文件在接收外部傳入的參數(shù),然后跟蹤變量的傳遞過程,觀察是否有變量傳入到高危函數(shù)里面,或者傳遞的過程中是否有代碼邏輯漏洞,這是一種正向追蹤的方式,這樣的挖掘方式比逆向追蹤挖掘得更全。還有一種方式是直接挖掘功能點漏洞,根據(jù)自身的經(jīng)驗判斷該類應(yīng)用通常在哪些功能中會出現(xiàn)漏洞,直接全篇閱讀該功能代碼。

可能不少新手對于學習PHP代碼審計還有一些迷茫,或許之前嘗試過學習,但一直沒有很好的進展,因為代碼審計是一門很專的技術(shù)活,要學好PHP代碼審計,需要掌握以下幾點:

? PHP編程語言的特性和基礎(chǔ)。

? Web前端編程基礎(chǔ)。

? 漏洞形成原理。

? 代碼審計思路。

? 不同系統(tǒng)、中間件之間的特性差異。

主站蜘蛛池模板: 宜州市| 四会市| 哈巴河县| 绥德县| 嘉荫县| 犍为县| 新丰县| 湘阴县| 新丰县| 松江区| 阿克| 浦东新区| 高碑店市| 松滋市| 灌南县| 永平县| 安多县| 开远市| 鲁甸县| 孝义市| 西昌市| 卫辉市| 内乡县| 临泉县| 钟祥市| 偃师市| 衡山县| 玉田县| 厦门市| 乌鲁木齐市| 田阳县| 光山县| 什邡市| 威信县| 长泰县| 衡东县| 囊谦县| 康平县| 德州市| 绥滨县| 察隅县|