憑借廣泛的語言支持,Graudit 可以讓你在開發(fā)過程中的審計(jì)你的代碼安全。
測(cè)試是軟件開發(fā)生命周期(SDLC)的重要組成部分,它有幾個(gè)階段。今天,我想談?wù)勅绾卧诖a中發(fā)現(xiàn)安全問題。
在開發(fā)軟件的時(shí)候,你不能忽視安全問題。這就是為什么有一個(gè)術(shù)語叫 DevSecOps,它的基本職責(zé)是識(shí)別和解決應(yīng)用中的安全漏洞。有一些用于檢查 OWASP 漏洞的開源解決方案,它將通過創(chuàng)建源代碼的威脅模型來得出結(jié)果。
處理安全問題有不同的方法,如靜態(tài)應(yīng)用安全測(cè)試(SAST)、動(dòng)態(tài)應(yīng)用安全測(cè)試(DAST)、交互式應(yīng)用安全測(cè)試(IAST)、軟件組成分析等。
靜態(tài)應(yīng)用安全測(cè)試在代碼層面運(yùn)行,通過發(fā)現(xiàn)編寫好的代碼中的錯(cuò)誤來分析應(yīng)用。這種方法不需要運(yùn)行代碼,所以叫靜態(tài)分析。
我將重點(diǎn)介紹靜態(tài)代碼分析,并使用一個(gè)開源工具進(jìn)行實(shí)際體驗(yàn)。
為什么要使用開源工具檢查代碼安全?
選擇開源軟件、工具和項(xiàng)目作為開發(fā)的一部分有很多理由。它不會(huì)花費(fèi)任何金錢,因?yàn)槟闶褂玫氖且粋€(gè)由志趣相投的開發(fā)者社區(qū)開發(fā)的工具,而他們希望幫助其他開發(fā)者。如果你有一個(gè)小團(tuán)隊(duì)或一個(gè)初創(chuàng)公司,找到開源軟件來檢查你的代碼安全是很好的。這樣可以讓你不必單獨(dú)雇傭一個(gè) DevSecOps 團(tuán)隊(duì),讓你的成本降低。
好的開源工具總是考慮到靈活性,它們應(yīng)該能夠在任何環(huán)境中使用,覆蓋盡可能多的情況。這讓開發(fā)人員更容易將該軟件與他們現(xiàn)有的系統(tǒng)連接起來。
但是有的時(shí)候,你可能需要一個(gè)功能,而這個(gè)功能在你選擇的工具中是不可用的。那么你就可以選擇復(fù)刻其代碼,在其上開發(fā)自己的功能,并在你的系統(tǒng)中使用。
因?yàn)?,大多?shù)時(shí)候,開源軟件是由社區(qū)驅(qū)動(dòng)的,開發(fā)的速度往往是該工具的用戶的加分項(xiàng),因?yàn)樗麄儠?huì)根據(jù)用戶的反饋、問題或 bug 報(bào)告來迭代項(xiàng)目。
使用 Graudit 來確保你的代碼安全
有各種開源的靜態(tài)代碼分析工具可供選擇,但正如你所知道的,工具分析的是代碼本身,這就是為什么沒有通用的工具適用于所有的編程語言。但其中一些遵循 OWASP 指南,盡量覆蓋更多的語言。
在這里,我們將使用 Graudit,它是一個(gè)簡(jiǎn)單的命令行工具,可以讓我們找到代碼庫(kù)中的安全缺陷。它支持不同的語言,但有一個(gè)固定的簽名集。
Graudit 使用的 grep 是 GNU 許可證下的工具,類似的靜態(tài)代碼分析工具還有 Rough Auditing Tool for Security(RATS)、Securitycompass Web Application Analysis Tool(SWAAT)、flawfinder 等。但 Graudit 的技術(shù)要求是最低的,并且非常靈活。不過,你可能還是有 Graudit 無法滿足的要求。如果是這樣,你可以看看這個(gè)列表的其他的選擇。
我們可以將這個(gè)工具安裝在特定的項(xiàng)目下,或者全局命名空間中,或者在特定的用戶下,或者任何我們喜歡地方,它很靈活。我們先來克隆一下倉(cāng)庫(kù)。
$ git clone https://github.com/wireghoul/graudit
現(xiàn)在,我們需要?jiǎng)?chuàng)建一個(gè) Graudit 的符號(hào)鏈接,以便我們可以將其作為一個(gè)命令使用。
$ cd ~/bin && mkdir graudit
$ ln --symbolic ~/graudit/graudit ~/bin/graudit
在 .bashrc (或者你使用的任何 shell 的配置文件)中添加一個(gè)別名。
#------ .bashrc ------
alias graudit=“~/bin/graudit”
重新加載 shell:
$ source ~/.bashrc # 或
$ exex $SHELL
讓我們通過運(yùn)行這個(gè)來檢查是否成功安裝了這個(gè)工具。
$ graudit -h
如果你得到類似于這樣的結(jié)果,那么就可以了。
我正在使用我現(xiàn)有的一個(gè)項(xiàng)目來測(cè)試這個(gè)工具。要運(yùn)行該工具,我們需要傳遞相應(yīng)語言的數(shù)據(jù)庫(kù)。你會(huì)在 signatures 文件夾下找到這些數(shù)據(jù)庫(kù)。
$ graudit -d ~/gradit/signatures/js.db
我在現(xiàn)有項(xiàng)目中的兩個(gè) JavaScript 文件上運(yùn)行了它,你可以看到它在控制臺(tái)中拋出了易受攻擊的代碼。
JavaScript file showing Graudit display of vulnerable code
JavaScript file showing Graudit display of vulnerable code
你可以嘗試在你的一個(gè)項(xiàng)目上運(yùn)行這個(gè),項(xiàng)目本身有一個(gè)長(zhǎng)長(zhǎng)的數(shù)據(jù)庫(kù)列表,用于支持不同的語言。
Graudit 的優(yōu)點(diǎn)和缺點(diǎn)
Graudit 支持很多語言,這使其成為許多不同系統(tǒng)上的用戶的理想選擇。由于它的使用簡(jiǎn)單和語言支持廣泛,它可以與其他免費(fèi)或付費(fèi)工具相媲美。最重要的是,它們正在開發(fā)中,社區(qū)也支持其他用戶。
雖然這是一個(gè)方便的工具,但你可能會(huì)發(fā)現(xiàn)很難將某個(gè)特定的代碼識(shí)別為“易受攻擊”。也許開發(fā)者會(huì)在未來版本的工具中加入這個(gè)功能。但是,通過使用這樣的工具來關(guān)注代碼中的安全問題總是好的。
總結(jié)
在本文中,我只介紹了眾多安全測(cè)試類型中的一種:靜態(tài)應(yīng)用安全測(cè)試。從靜態(tài)代碼分析開始很容易,但這只是一個(gè)開始。你可以在你的應(yīng)用開發(fā)流水線中添加其他類型的應(yīng)用安全測(cè)試,以豐富你的整體安全意識(shí)。
責(zé)編AJX
-
Linux
+關(guān)注
關(guān)注
87文章
11304瀏覽量
209541 -
源代碼
+關(guān)注
關(guān)注
96文章
2945瀏覽量
66752 -
命令行
+關(guān)注
關(guān)注
0文章
77瀏覽量
10392
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論