Sobelowは、Elixir&The Phoenixフレームワーク向けのセキュリティ中心の静的分析ツールです。セキュリティ研究者にとって、それは興味のあるポイントをすばやく見るための便利なツールです。プロジェクトメンテナーの場合、多くの共通の脆弱性の導入を防ぐために使用できます。
現在、Sobelowは次のセキュリティ問題のいくつかのタイプを検出します。
潜在的な脆弱性は、不安に対する自信に応じて異なる色でフラグを立てられます。自信が高く、中程度の自信は黄色で、低い自信は緑です。
関数が不安定に使用できるように見える場合、発見は通常、「低い信頼性」とマークされますが、関数がユーザーがサプセルした入力を受け入れるかどうかを確実に決定することはできません。 IEでは、発見が緑色にマークされている場合、それは非常に不安定である可能性がありますが、より大きな手動検証が必要になります。
注:このプロジェクトは絶え間ない開発中であり、時間が経つにつれて追加の脆弱性がフラグを立てます。バグに遭遇した場合、または追加機能やセキュリティチェックをリクエストしたい場合は、問題を開いてください!
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
インストール後、フェニックスプロジェクトをスキャンする最も簡単な方法は、プロジェクトルートから以下を実行することです。
$ mix sobelow
注:パス引数は、絶対的なパス、またはアプリケーションルートに関連するものでなければなりません。
--rootまたは-rアプリケーションルートディレクトリを指定します。パス引数../my_project受け入れます。
--verboseまたは-vコードスニペットを印刷し、追加の検索の詳細を印刷します。
--ignoreまたは-i発見の種類を無視します。モジュール名のコンマ分離されたリスト、例: XSS.Raw,Traversalを受け入れます。
--ignore-filesファイルを無視します。 config/prod.exsなどのファイル名のコンマ区切りリストを受け入れます。
--detailsまたは-d検索タイプの詳細を取得します。たとえば、 Config.CSRFなどの単一のモジュール名を受け入れます。
--all-detailsすべてのFindingタイプの詳細を取得します。
--private - 更新チェックをスキップします。
--router - ルーターの場所を指定します。これは、ルーターの場所が標準以外の場合にのみ使用する必要があります。 PATH引数、 my/strange/router.exなどを受け入れます。
--exit low 、 medium 、またはhighの信頼性のしきい値以下でゼロ以外の出口ステータスを返します。デフォルトはfalseになり、ゼロの出口ステータスを返します
--threshold low (デフォルト)、 medium 、またはhighの信頼レベル以下の調査結果を返します。
--formatまたは-f調査結果出力形式を指定します。たとえば、 txtまたはjsonなどの形式を受け入れます。
--verboseなどのオプションはjson形式では動作しないことに注意してください。 jsonフォーマットされたすべての調査結果には、 type 、 file 、およびlineキーが含まれています。他のキーは異なる場合があります。
--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 configファイルを作成できます。
$ 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のエイリアスを追加できます。
defp aliases do
[
sobelow: [ "cmd mix sobelow" ]
]
end傘下アプリで構成ファイルを使用する場合は、各子供アプリケーションで.sobelow-confを作成し、 --configフラグを使用します。
プロジェクトをスキャンするとき、Sobelowは時々更新をチェックし、新しいバージョンが利用可能な場合はアラートを印刷します。 Sobelowは、スキャンされたプロジェクトのルートで.sobelowファイルを作成することにより、最後の更新チェックを追跡します。
この機能が望ましくない場合、 --privateフラグはスキャンで使用できます。