俗話說“人怕出名豬怕壯”,當系統小有名氣以後就會被一些黑客盯上,三天兩頭的用各種漏洞掃描工具做滲透,如果不希望某天你負責的系統因為安全問題而出名,那就提前行動起來吧,這就是今天要講的OWASP Dependency-Check。
圖片來源於百度
背景
隨著業務的發展,系統的使用者逐漸增多,這時就會有一些不速之客找上門來。
俗話說“人怕出名豬怕壯”,當系統小有名氣以後就會被一些黑客盯上,三天兩頭的用各種漏洞掃描工具做滲透,如果不希望某天你負責的系統因為安全問題而出名,那就提前行動起來吧,這就是今天要講的OWASP Dependency-Check。
何為OWASP Dependency-Check
依賴項檢查是一種軟體組成分析(SCA)工具,它試圖檢測專案依賴項中包含的公開披露的漏洞。它通過確定給定依賴項是否存在通用平臺列舉(CPE)識別符號來完成此操作。如果找到,它將生成一個報告,連結到相關的CVE條目。
翻譯成大白話就是藉助掃描工具和一些公開的漏洞庫提前告知開發者潛在的風險,比如你專案中依賴了Struts 2.0.0,那這個工具會告訴你Struts2.0.0相關的jar包存在風險,如果你不為所動那隻能等老闆約你喝茶了。
具體介紹請參閱:https://owasp.org/www-project-dependency-check/
開始之前
通過官方的介紹,目前提供了四種掃描方式,分別是Jenkins整合,命令列工具,Maven外掛,Ant task,有興趣的去https://github.com/jeremylong/DependencyCheck瞭解,這裡不再多說。
我自己使用的是Maven外掛這種方式,後面內容會以這種方式來展開。
開始掃描
Maven方式掃描很簡單,只需要兩步即可。
1.在pom.xml增加dependency-check-maven外掛的配置,如下:
<project> <build> <plugins> <plugin> <groupId>org.owasp</groupId> <artifactId>dependency-check-maven</artifactId> <version>6.1.0</version> <executions> <execution> <goals> <goal>check</goal> </goals> </execution> </executions> </plugin> </plugins> </build> </project>
2.執行mvn org.owasp:dependency-check-maven:check
為了測試,我給專案增加了fastjson依賴
<dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.7</version> </dependency>
幸運的話你會在target目錄看到dependency-check-report.html,這就是掃描結果,瀏覽器開啟看看大概長啥樣。
如果不幸運的話可能會遇到下面提到的問題,聽我娓娓道來。
FAQ
問題1-漏洞庫載入慢或者載入失敗
[ERROR] Unable to download meta file: https://nvd.nist.gov/feeds/json/cve/1.1/nvdcve-1.1-modified.meta org.owasp.dependencycheck.data.update.exception.UpdateException: Unable to download meta file: https://nvd.nist.gov/feeds/json/cve/1.1/nvdcve-1.1-modified.meta at org.owasp.dependencycheck.data.update.NvdCveUpdater.getMetaFile (NvdCveUpdater.java:347) at org.owasp.dependencycheck.data.update.NvdCveUpdater.getUpdatesNeeded (NvdCveUpdater.java:385) at org.owasp.dependencycheck.data.update.NvdCveUpdater.update (NvdCveUpdater.java:122) at org.owasp.dependencycheck.Engine.doUpdates (Engine.java:855) at org.owasp.dependencycheck.Engine.initializeAndUpdateDatabase (Engine.java:662) at org.owasp.dependencycheck.Engine.analyzeDependencies (Engine.java:592) at org.owasp.dependencycheck.maven.BaseDependencyCheckMojo.runCheck (BaseDependencyCheckMojo.java:1641) at org.owasp.dependencycheck.maven.BaseDependencyCheckMojo.execute (BaseDependencyCheckMojo.java:910) at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java:137) at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:210) at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:156)
原因分析
依賴檢查的時候會通過外網去下載&更新漏洞庫,初始下載可能需要十分鐘或者更長時間,對於網路環境超好的使用者來說自然不會有問題,但網路環境一般的使用者失敗的機率就會非常高,因此官方提供了一種方案“在區域網內部建立漏洞庫”,以此來加速日常的檢查,內部漏洞庫的更新頻率結合自己的實際情況,可以是每天也可以是每週。
如何搭建內部漏洞庫
1.通過官方提供的一個java程式來下載漏洞庫到指定目錄
具體參考 :
https://github.com/stevespringett/nist-data-mirror/
https://jeremylong.github.io/DependencyCheck/data/mirrornvd.html
例如 java -jar nist-data-mirror.jar nist-data #執行nist-data-mirror.jar 將漏洞庫下載到nist-data目錄
2.自建漏洞庫
我是採用的nginx作為漏洞庫代理,參考如下配置:
server { listen 80; location / { root 具體的nist-data目錄; } }
3.pom.xml中配置cveUrlModified、cveUrlBase屬性
<plugin> <groupId>org.owasp</groupId> <artifactId>dependency-check-maven</artifactId> <version>6.1.0</version> <configuration> <cveUrlBase>http://nginxip/nvdcve-1.1-%d.json.gz</cveUrlBase> <cveUrlModified>http://nginxip/nvdcve-1.1-modified.json.gz</cveUrlModified> </configuration> <executions> <execution> <goals> <goal>check</goal> </goals> </execution> </executions> </plugin>
總結
藉助現有的工具提前做一些安全預警,不要讓亡羊補牢的故事重演。
道高一尺魔高一丈,對自己的系統時刻保持一絲敬畏之心。
推薦閱讀
https://owasp.org/www-project-dependency-check/
https://github.com/stevespringett/nist-data-mirror/