php程式碼審計入門前必看
- 首先先介紹什麼是程式碼審計?
程式碼審計:是指標對原始碼進行檢查,尋找程式碼中的bug,這是一項需要多方面技能的技術
包括:對程式設計的掌握,漏洞形成原理的理解,系統和中介軟體等的熟悉
2.為什麼要進行程式碼審計,這也是對剛進入程式碼審計領域的小白愛問的問題?
程式碼審計是企業安全運營以及安全從業者必備的基礎能力
程式碼審計在很多場景中都需要用到,比如:企業安全運營,滲透測試,漏洞研究。
目前已經有不少公司在推廣微軟的軟體SDL(Security Development Lifecycle,安全開發週期)
他涵蓋需求分析--->設計---->編碼---->測試----->
其中設計,編碼和測試是整個SDL的核心,安全問題大多在這裡被解決掉。
其中在安全設計這一塊,必須要非常瞭解漏洞形成的原理,縱觀全域性。
而在程式碼實現也就是編碼階段,安全依靠於程式設計人員的技術基礎以及前期安全設計的完整性。
然後才是測試,測試包括:白盒測試,黑盒測試,灰盒測試。
黑盒測試又叫功能測試,是指在不接觸程式碼的情況下,測試系統的功能是否存在bug,是否滿足設計需求。
而白盒測試就是我們說的程式碼審計,以開放的形式從程式碼層面尋找bug,如果發現有bug則返回修復,直到沒有bug才允許軟體釋出上線
滲透測試人員掌握程式碼審計是很重要的,因為我們在滲透過程中經常需要針對目標環境對
另外,如果通過掃描器掃描到目錄下的1一個原始碼備份包,通常攻擊者都會利用原始碼包找到一些配置檔案,因為裡面有資料庫,API等一類配置。
如果環境有限制,比如目標站點資料庫限制連線ip等,那麼工具小子可能在原始碼包進行的漏洞利用也就到此為止。
對於懂程式碼審計的人,結果就完全就不同了,它可以對原始碼進行安全審計,發現網站程式碼裡存在的漏洞,然後利用挖掘到的漏洞進行滲透。
3.這個時候有小白想說:那程式碼審計對程式設計能力的要求是什麼?
程式碼審計對程式語言的基礎有一定要求,至少要能看懂程式碼,這裡說的看懂程式碼不是簡單的理解幾個if.....else語句和for迴圈,而是能看的懂程式碼的邏輯,即使有很多的程式碼或函式沒有見過,也是可以去百度進行搜尋查詢的。
都說程式設計在語言在一塊都是一通百通,只要我們對程式設計思想理解的非常透徹,重新學習一門語言也是非常容易上手的,所以不管你之前寫過java還是C#程式,想玩一玩php的程式碼審計都應該不是什麼大的問題。
4.程式碼審計的思路
通常做程式碼審計都是檢查敏感函式的引數,然後回溯變數,判斷變數是否可控並且沒有經嚴格的過濾,這是一個逆向追蹤的過程。
而程式碼審計並非這一種手段,還可以先找出哪些檔案在接收外部傳入的引數,然後跟蹤變數的傳遞過程,觀察是否有變數傳入到高危函式裡,或傳遞的過程中是否有程式碼邏輯漏洞,這是一種正向追蹤的方式,這樣的挖掘方式比逆向追蹤挖掘的更全。
還有一種方式是直接挖掘功能點漏洞,根據自身經驗判斷該類應用通常在哪些功能中會出現漏洞,直接全篇閱讀該功能程式碼。
可能不少小白對於學習php程式碼審計還有一些迷茫,或許之前嘗試過學習,但是一直沒有很好的進展,因為程式碼審計是一門很專的技術活,要學好php程式碼審計,需要掌握以下幾點:
①php程式語言特性和基礎要有
②web前端基礎要有
③漏洞形成的原理要懂
④程式碼審計的思路要有
⑤不同系統和中介軟體之間的特性差異要了解