Snykで脆弱性を先回りして修正し、Javaのセキュリティとプロジェクトの健全性を維持する
Lee Turner
2021年11月16日
0 分で読めます開発者として、私はGitHubアカウントで多くの時間を過ごしています。アプリや小さなユーティリティを作ったり、新しいことを学ぶために概念実証を作成したりしています。GitHubを頻繁に利用しているので、自分のアカウントは全体的に健全な状態だと思っています。アカウントでYubiKeyベースの2要素認証を有効にしたり、シークレットや機密ファイルをコミットしないようにしたり、オープンソースプロジェクトに関するGitHubのセキュリティに関するベストプラクティスに沿ってアカウントを定期的に確認したりと、重要な点に気を配っています。
チェックポイント!ソースコードリポジトリで2要素認証を有効にしていますか?セキュリティチャンピオンとしてさらに成長するには、セキュアコードレビューに取り組むのもおすすめです。
ただし、あらゆるシステムの健全性や衛生状態と同様に、私たちが積極的に行うことだけで決まるわけではありません。気づきにくい要素も影響します。これは、開発を終了したリポジトリで特に重要です。コードが変更されず、主な関心対象ではなくなったとしても、周囲の世界は進み続けます。面識のない人がそのリポジトリを見つけ、コードを学ぶため、あるいは現在書いているコードの基盤として利用する可能性があります。
だからこそ、私たち開発者には、コードを書いた時点だけでなく、そのコードがリポジトリで公開されている間ずっと、できる限り最良の状態に保つ責任があります。
先ほど述べたように、コードを取り巻く世界は変化していきます。利用している依存関係の新しいバージョンがリリースされ、依存するフレームワークやライブラリの古いバージョンにセキュリティ上の問題が見つかることもあります。常に最新バージョンに移行すればよいというわけではありませんが、こうした変更を継続的に把握し、リポジトリを最新かつ安全な状態に保つために必要な対応を取れる方法を見つける必要があります。
ヒント:GitHub Actionsや、リポジトリのコード変更に組み込まれたセキュリティ機能を活用している方は、GitHub Security Code Scanningについてぜひご覧ください。
脆弱性管理は、組織のセキュリティ態勢の強化に役立つプロセス、標準、ツールを備えた独自の分野です。保守しているレガシーJavaプロジェクトでそれを実現する方法や、セキュリティ対策を効率化する方法について詳しく知りたい方には、脆弱性の修正プロセスについて調べることをおすすめします。
レガシーJavaプロジェクトの脆弱性を発見して修正する
そこで役立つのがSnykです。Snykは、これまで見えなかった問題を可視化し、対処可能にします。Snykにリポジトリ(GitHub、GitLab、Bitbucket、Azureなど)を監視させることで、必要な情報を得て、コードの安全性を保つための対策を取れます。Snykは次のような方法でこれを実現します。
依存するフレームワークやライブラリで見つかった脆弱性を報告
利用している依存関係の新バージョンを通知
Snykをアカウントに接続すると、思いがけない発見があるかもしれません。私はSnykの無料プランから始め、いくつかのリポジトリをスキャンさせました。するとすぐに、古いSpring Bootアプリで重大度が「高」および「中」の問題が複数見つかりました。原因は、アプリが古いSpring Bootリリースでビルドされていたことだけでした。更新する理由がなかったため、そのままにしていたのです。

幸い、修正は簡単でした。使用していたSpring Bootのバージョンを更新し、アプリケーションを再テストして、変更をプッシュするだけです。
もちろん、アプリケーションの依存関係を常に最新に保てるのが理想です。ここで、先ほど挙げた2つ目の点についてSnykが役立ちます。Snykは新しい依存関係のバージョンが見つかったことを知らせるだけでなく、レビューとテストの準備ができたプルリクエストをリポジトリに作成することもできます。

GitHubアカウントの健全性やセキュリティを高めるには、それらに影響するすべての要因を把握する必要があります。見えなかったものが見えるようになれば、是正措置を講じ、コードのライフサイクル全体を通してその状態を維持できます。Snykは、日々利用するツールと連携し、取るべき措置を判断するための知識を提供します。さらに、自動化できる作業は自動化します。
Javaのセキュリティに関するその他のリソース
この記事が、古いプロジェクトを保守して安全に保つうえで参考になれば幸いです。Java開発者としてセキュリティのスキルを高めたい方に、役立つリソースをいくつかご紹介します。
OWASPのBrian Vermeer氏とJim Manico氏が執筆した、優れた Javaセキュリティの10のベストプラクティス
最後に、安全なデシリアライゼーションのコーディングプラクティスを実践していますか?よくわからない場合は、Vermeer氏によるJavaのシリアライズとデシリアライズ:Javaのデシリアライズ脆弱性を解説をご覧ください。
CTFを始めよう
オンデマンドのバーチャル入門ワークショップで、CTFチャレンジの解き方を学びましょう。



