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标志。