先日、はじめてSnykを使ったのですが、SAST1とSCA2が、簡単に始められましたので、記録として残しておきます。
ユーザ登録をする
ユーザ登録をします。
Free利用は、クレジットカードの登録が不要であり、GitHubアカウントでサインアップ可能です。
GitHubリポジトリを登録する
GitHubリポジトリを登録します。
Integrationsから、対象を選択します。今回は、GitHubにあるリポジトリに対してSASTとSCAを実施するためGitHub
を選択します。
対象のリポジトリを選択します。事前にOWASP Juice shop3をクローンしていますので、こちらを選択します。
Import and scan
をクリックするとインポートとスキャンが始まりますので、スキャンが終わるまでしばらく待ちます。
結果を確認する
結果を確認します。Projects
から結果をインポートしたプロジェクトのスキャン結果を確認することができます。
この一覧画面でも、スキャン件数の概要を知ることができますので、複数のプロジェクトに携わっている場合に、スキャン結果を確認する優先度付に一役買いそうです。
SASTの結果を確認する
SASTの結果はCode analysis
をクリックすると見ることができます。脆弱性の名称や脆弱性があるコードのが表示されているため、ひと目で脆弱性を認識することができます。
脆弱性の詳細を確認するには、Full details
をクリックします。入出力が追えるようになっているため、脆弱性の影響を把握しやすいです。
Fix analysis
をクリックすると、脆弱性の詳細情報が表示されます。また、一般的な修正方法を記載されますので、脆弱性の修正に迷うことも少なくなると思います。
SCAの結果を確認する
SCAの結果はpackage.json
をクリックすると見ることができます。
- パッケージ名
- CWE(共通脆弱性タイプ)
- CVSSのスコア
- 問題のあるバージョン番号
- Fixされたバージョン
SCAの場合、SASTと異なり半自動で修正することができます。Fix these vulnerabilities
をクリックするとPRを作成することができます。
このように、SnykがPRを発行してくれます。
修正内容を確認すると、バージョンが更新されていることがわかります。
ここまで自動で対応してくれるので、エンジニアが脆弱性の修正にかけるコストを最小限にでき、本来のタスクに集中しやすくなると思いました。
Log4Shellが検知できるか試してみる(OWASP ZAP)
Log4Shellが検知できるかをOWASP ZAP
4試してみました。すでに、main
リポジトリは2.17.0にバージョンアップ済みでしたが、master
ブランチが残されていましので、master
を対象にスキャンします。
実施をしたのですが、スキャン結果にbuild.gradle.kts
がありません。
マニュアルを調べてみたのですが、Gitではbuild.gradle.kts
をサポートしていないようです。
build.gradle.kts files are not currently supported in Git.
ただし、CLIツールでは、サポートされているようなので今後のサポートに期待したいところです。
Snyk CLI with Gradle: To build the dependency graph, Snyk integrates with Gradle and inspects the dependencies returned by the build. The following manifest files are supported: build.gradle and build.gradle.kts
Log4Shellが検知できるか試してみる(Logstash)
OWASP ZAPはうまく検知ができなかったので、今後はLogstash
5で試してみます。Logstashも最新版はすでに2.17.0バージョンアップ済みでしたが、7.15
のブランチがありましたので、こちらを対象にスキャンします。
build.gradle
がしっかり認識されていますが、Critical/Highが0件となっています。(対象: logstash-core/build.gradle
)
詳細を確認すると、以下の2件しか検出がされていません。
Dependencies
を確認して認識をしている、ライブラリを確認したところorg.apache.logging.log4j:log4j-core@$
のように、バージョンを認識できていないことがわかりました。
ソースを確認したところ、以下のように変数が使用されおり、どうやら変数の展開がうまくできていないため、Dependencies
で認識ができていないようです。
implementation "org.apache.logging.log4j:log4j-api:${log4jVersion}"
バージョンの変更漏れを防ぐために変数の利用の利用をしている所も多いともいますので、改善されることを期待しています。
まとめ
特別な知識がなくても簡単に始められ、SCAではPRを自動生成するなど、セキュリテ対策コストを最小限にする仕組みが具備されていると感じました。
ただし、Log4Shellの脆弱性検知を試した限りうまく認識ができない部分があるため、機能改善に期待したいところです。