Sobelow是一種以安全為中心的靜態分析工具,用於Elixir和Phoenix框架。對於安全研究人員而言,它是快速了解利益的有用工具。對於項目維護者,它可用於防止引入許多常見漏洞。
當前,Sobelow檢測到以下某些類型的安全問題:
潛在的脆弱性根據對其不安全感的信心以不同的顏色標記。高置信度是紅色,中等置信度為黃色,較低的置信度為綠色。
如果看起來像是不安全的函數,則通常將發現標記為“低置信度”,但是如果函數接受用戶提供的輸入,則無法可靠地確定它。即,如果發現發現綠色,則可能是嚴重的不安全,但需要更大的手動驗證。
注意:此項目正在不斷開發中,隨著時間的流逝,將標記其他漏洞。如果您遇到錯誤,或者想請求其他功能或安全檢查,請打開問題!
要使用Sobelow,您可以將其添加到應用程序的依賴項中。
def deps do
[
{ :sobelow , "~> 0.13" , only: [ :dev , :test ] , runtime: false }
]
end您也可以通過從命令行執行以下操作來在全球安裝Sobelow:
$ mix escript.install hex sobelow
要從主分支安裝,而不是最新版本,可以使用以下命令:
$ mix escript.install github nccgroup/sobelow
安裝後,掃描Phoenix項目的最簡單方法是從項目root運行以下內容:
$ mix sobelow
注意:任何路徑參數均應是絕對路徑,或相對於應用程序根。
--root或-r指定應用程序根目錄。接受一個路徑參數,例如../my_project 。
--verbose或-v打印代碼片段和其他查找細節。
--ignore或-i忽略給定的發現類型。接受逗號分隔的模塊名稱列表,例如XSS.Raw,Traversal 。
--ignore-files忽略文件。接受逗號分隔的文件名列表,例如config/prod.exs 。
--details或-d獲取查找類型的詳細信息。接受單個模塊名稱,例如Config.CSRF 。
--all-details - 獲取所有發現類型的詳細信息。
--private - 跳過更新檢查。
--router - 指定路由器位置。僅當路由器位置是非標準的時才需要使用的。接受路徑參數,例如my/strange/router.ex 。
- --exit以low , medium或high的置信度閾值或高位返回非零退出狀態。默認為false ,返回零退出狀態
--threshold - low (默認), medium或high的置信度以或高於置信度的回報結果。
--format或-f指定結果輸出格式。接受格式,例如txt或json 。
請注意,諸如--verbose之類的選項將無法與json格式使用。所有json格式化的發現都包含type , file和line鍵。其他鍵可能會有所不同。
--quiet Quiet-返回一條線,指示發現的數量。否則,如果沒有發現,則不返回輸出。
- --compact - 最小的單線發現,其輸出根據置信度著色。
--flycheck - 與基於蠅檢查的工具兼容的最小單線發現。
--save-config基於命令行選項生成配置文件。有關更多信息,請參見配置文件。
--config使用配置文件運行Sobelow。有關更多信息,請參見配置文件。
--mark-skip-all標記所有顯示的發現都可以跳過。
--clear-skip由--mark-skip-all創建的清除配置。
--skip忽略已標記為跳過的發現。有關更多信息,請參見誤報。
--version輸出當前版本的Sobelow。這對於CI步驟或與Salus等其他工具集成很有用。
Sobelow允許用戶將經常使用的選項保存在配置文件中。例如,如果您發現自己不斷運行:
$ mix sobelow -i XSS.Raw,Traversal --verbose --exit Low
您可以使用--save-config標誌來創建.sobelow-conf配置文件:
$ mix sobelow -i XSS.Raw,Traversal --verbose --exit Low --save-config
此命令將在您的應用程序的根部創建.sobelow-conf文件。您可以直接編輯此文件以進行更改。
您也可以在沒有任何選項的情況下運行命令:
$ mix sobelow --save-config
首次使用此軟件包開始時 - 生成的配置文件將用每個選項的默認值填充。 (這有助於快速將此軟件包納入預先存在的代碼庫中。)
現在,如果要使用保存的配置運行Sobelow,則可以使用--config標誌運行Sobelow。
$ mix sobelow --config
Sobelow偏愛過度報告與報導不足的報導。因此,您可能會在典型的掃描中找到許多誤報。在函數定義之前,添加# sobelow_skip註釋以及模塊列表可以單獨忽略這些發現。
# sobelow_skip ["Traversal"]
def vuln_func ( ... ) do
...
end將Sobelow集成到一個新項目中時,可能會有大量的誤報。要將所有印刷發現標記為假陽性,請用--mark-skip-all標誌運行Sobelow。
標記適當的發現後,用--skip標誌運行Sobelow。
$ mix sobelow --skip
雖然# sobelow_skip註釋只能標記函數級別的發現(因此不能用於跳過配置問題),但可以使用--mark-skip-all標誌來跳過任何查找類型。
發現類別分解為模塊。然後,這些模塊可用於忽略發現類(通過ignore和skip選項)或獲取漏洞詳細信息(通過details選項)。
該列表以及其他有用的信息可以在命令行中找到:
$ mix help sobelow
為了在帶有單個命令的傘應用程序中對所有子應用程序運行Sobelow,您可以在root mix.exs文件中添加一個sobelow的別名:exss file:
defp aliases do
[
sobelow: [ "cmd mix sobelow" ]
]
end如果您想在傘應用程序中使用配置文件,請在每個子女應用程序中創建一個.sobelow-conf ,然後使用--config標誌。
掃描項目時,Sobelow偶爾會檢查更新,並在新版本可用時打印一個警報。 Sobelow通過在掃描項目的根部創建.sobelow文件來跟踪最後的更新檢查。
如果不需要此功能,則可以與掃描一起使用--private標誌。