SnykOpenSourceで始めるセキュリティチェック #Snyk
おはようございます( ◜◡◝ )
ゲームソリューション部/業務効率化ソリューション部のきだぱんです。
脆弱性管理ツールのSnykというSaas製品をご存知でしょうか。
近年、サプライチェーン攻撃が増加する中、オープンソースの依存関係管理は重要性を増しています。
本記事では、開発者向けセキュリティツールSnykのOpenSource機能について書いていきたいと思います。
Snykとは
そもそもSnykとは、何なのか。 Snyk(スニーク)はデベロッパーファーストのセキュリティプラットフォームです。
Snykは、コードやオープンソースとその依存関係、コンテナやIaC(Infrastructure as a Code) における脆弱性を見つけるだけでなく、優先順位をつけて修正するためのツールです。 Gitや統合開発環境(IDE)、CI/CDパイプラインに直接組み込むことができるので、デベロッパーが簡単に使うことができます。
Snyk は、Java、.NET、JavaScript、Python、Golang、PHP、C/C++、Ruby、Scalaなど、多くの言語とツールをサポートしています。
また、Docker、Terraform、k8s、Infrastructure as Codeのファイルスキャンもサポートしています。
SnykOpenSourceとは
私たちが日々開発しているアプリケーションの実に90%が、オープンソースコードで構成されています。
開発者がオープンソースを活用することで開発スピードは確かに加速しますが、それと同時に気付かないうちにセキュリティの脆弱性や法的リスクを組織内に持ち込んでしまう可能性があります。
このジレンマを解決するツールとして注目を集めているのが、開発者視点で設計されたSCA(Software Composition Analysis)ツール「Snyk」です。
Snykは、開発ライフサイクルの早期段階から、オープンソースコードの脆弱性を自動検出し、効率的な修正を支援する画期的なプラットフォームとして、多くの組織で採用されています。
Snykには、Snyk Open Source、Snyk Container、Snyk Infrastructure as Code、Snyk Codeの 4つの製品があります。
その中の一つがOpenSourceを対象とした機能です。
他のSCAソリューションとは異なり、Snyk Open Sourceは開発者を念頭に置いて構築されており、開発者の ワークフローにシームレスに統合することができます。
他の機能についての記事はこちら。
SnykOpenSourceの対象
対象パッケージは以下です。
Language | Snyk Open Source |
---|---|
C/C++ | ✓ |
Dart and Flutter | ✓ |
Elixir | ✓ |
Go | ✓ |
Java and Kotlin | ✓ |
JavaScript | ✓ |
.NET | ✓ |
PHP | ✓ |
Python | ✓ |
Ruby | ✓ |
Rust | ✓ |
Scala | ✓ |
Swift and Objective-C | ✓ |
TypeScript | ✓ |
Snykに連携していく
脆弱性結果を見る前に、パッケージを連携していきます。
Snykではさまざまな連携が可能です。
今回は、GitLabと連携しまして、脆弱性を多く含むものをスキャン対象とします。
脆弱性を確認する
実際に、Snyk UI上で、脆弱性をチェックしてみましょう。
まずは脆弱性スキャン対象のプロジェクトを表示する画面[project]で確認していきましょう。
- パッケージ名
- CWE(共通脆弱性タイプ)
- CVSSのスコア※
- 問題のあるバージョン番号
- Fixされたバージョン
が表示されます。
※CVSSについて
それぞれの脆弱性情報もチェックできます。
そして、Snyk OSSでは脆弱性の自動修正機能を提供します。
具体的には、脆弱性が検出された依存パッケージに対して、セキュアなバージョンへの更新を自動提案します。
「Fix these vulnerabilities」ボタンを選択することで、安全なバージョンへの更新を含むMarge requestが自動生成されます。
今回は連携先がGitLabでしたので、MargeRequestが作成されました。
また、CLIのSnyk testコマンドでも、詳細を確認出来ます。(以下結果は一部です。)
# 主要なコマンド
$ snyk test # 脆弱性スキャン
$ snyk monitor # 継続的なモニタリング
$ snyk ignore # 特定の脆弱性を無視
以下は、Snyk testの結果です。
- 脆弱性の種類
- 深刻度: High(高)など
- 影響を受けるパッケージ
- 依存関係について
- 影響範囲
- 詳細リンク: 例) https://security.snyk.io/vuln/SNYK-JS-QS-3153490
が表示されます。
$ snyk test
Testing /.../goof...
Tested dependencies for known issues, found 98 issues, 279 vulnerable paths.
Issues to fix by upgrading:
Upgrade body-parser@1.19.1 to body-parser@1.20.3 to fix
✗ Asymmetric Resource Consumption (Amplification) [High Severity][https://security.snyk.io/vuln/SNYK-JS-BODYPARSER-7926860] in body-parser@1.19.1
introduced by body-parser@1.19.1 and 1 other path(s)
✗ Prototype Poisoning [High Severity][https://security.snyk.io/vuln/SNYK-JS-QS-3153490] in qs@6.9.6
introduced by body-parser@1.19.1 > qs@6.9.6 and 2 other path(s)
Upgrade check-dependencies@1.1.0 to check-dependencies@2.0.0 to fix
✗ Prototype Pollution [Low Severity][https://security.snyk.io/vuln/SNYK-JS-MINIMIST-2429795] in minimist@0.2.1
introduced by check-dependencies@1.1.0 > bower-config@1.4.3 > minimist@0.2.1 and 18 other path(s)
✗ Excessive Platform Resource Consumption within a Loop [High Severity][https://security.snyk.io/vuln/SNYK-JS-BRACES-6838727] in braces@2.3.2
introduced by check-dependencies@1.1.0 > findup-sync@2.0.0 > micromatch@3.1.10 > braces@2.3.2 and 1 other path(s)
✗ Denial of Service (DoS) [High Severity][https://security.snyk.io/vuln/SNYK-JS-DECODEURICOMPONENT-3149970] in decode-uri-component@0.2.0
introduced by check-dependencies@1.1.0 > findup-sync@2.0.0 > micromatch@3.1.10 >
/// (以下省略)
おわりに
今回は、SnykOpenSourceを使用した脆弱性管理について解説してきました。
JavaScript、Python、Javaをはじめとする14以上のプログラミング言語をサポートし、GitLabなどの主要なバージョン管理システムとも簡単に連携できることが分かりました。
SnykOpenSourceの導入により、開発者は日々の開発作業の中で自然とセキュリティ対策を実施できるようになり、より安全で効率的な開発プロセスを実現できることが期待できまそうですね。
Snykに関するブログも沢山展開されていますので、是非こちらもご覧ください。
この記事がどなたかのお役に立てば幸いです。
以上、きだぱんでした。