2018開源靜態分析工具-第一部分-python
翻譯自:https://medium.com/@prasincs/open-source-static-analysis-for-security-in-2018-part-1-python-348e9c1af1cd 翻譯:聶心明 我對靜態分析工具的態度是即愛也恨。我喜歡他們,我使用他們並且在他們執行停止之前,我都無法交付產品。並且我討厭他們,因為我目前對“安全和合規”的工作定義的相當廣泛,偶爾,我會有一些關於安全程式碼和靜態/動態程式碼審計中的一些問題。我決定選幾種語言去看看開源社群的觀點。很明顯,這個不能代替嚴格的安全掃描,整合測試和滲透測試等在軟體開發週期中不同的方面的測試。
這篇文章包含4種程式語言,這四種語言在我們公司中非常重要,但這並不意味著我們不用其他的語言。但這至少可以讓我們對這些語言有一個很好的瞭解。我發現靜態掃描有一點收斂。雖然型別檢查正在復興,但我們還需要一段時間才能讓靜態程式碼審計變得更加強大。 下面的語言我都會講到,這篇文章我先講python
- python
- java
- go
- JavaScript
目標不是那麼完全,但是卻很實用
精確度:這個工具會有很多誤報嗎?以至於工程師最好的辦法就是禁用它。 實踐性:這個工具會給我很多可實踐的建議和例子嗎? 整合性:我能和我現有的工具搭配使用嗎? 可維護性:我不知道未來會發生什麼,但是這個工具的可維護性怎麼樣?或者它是否有足夠好的文件,以至於可以讓我自己可以維護它?
python
從靜態分析的角度來看,python是一個有趣的語言,它有AST包,但是很多程式碼可以在執行時被改變。圍繞“pythonic”化的想法是存在的並且頻繁的程式碼檢查可能會發現一些問題,但是能在早期發現一些問題是極好的。
- 檢查你的requirements.txt
在2018年,幾乎所有的python程式碼被執行和部署在虛擬環境中。這意味著,上游的依賴全部被記錄在requirements.txt中。如果你沒有這樣做,請停下來,然後按照下面的說明去安裝和使用虛擬環境。 http://docs.python-guide.org/en/latest/dev/virtualenvs/
safety check -r $TOPDIR/requirements.txt --full-report --json > $TOPDIR/safety-report.json if [[ $open_vulnerabilities -gt 0 ]]; then echo "$open_vulnerabilities open known vulnerabilities exist in packages, failing build" safety check -r $TOPDIR/requirements.txt --full-report exit 1 fi
可維護性:如果safety-db可行的話,我不知道為什麼有些人或者有些組織不想擁有它。而且,為啥PyPI不做這個事情。
2.檢查你的程式碼
準確性:我發現在我測試的程式碼中都是相對準確的。
實踐性:這給要特別注意,無論怎樣,工具提供多種方式去匯出成不同的格式並且可以用-lll
提高嚴格性,並且可以用-iii
提高可信度。所以你如果想看最嚴格的情況和最可信的情況,你可以執行
bandit -lll -iii -r dir
整合性:你可以使用-f
這個標誌把結果匯出成csv,html,json,screen,txt或者xml。如果你想去分類,解說,或者匯入JIRA中,這個功能都是非常有用的。
可維護性:這看上去對我非常友好,這個專案被Openstack 管理並且它支援在自己的AST中做hook。所以我能看到更多新的應用場景。
明天,我將討論關於Java程式碼靜態分析工具的古往今來。