OSS(オープンソースソフトウェア) は非常に便利で、 多くの開発者が利用しています。
コミュニティの力を活用して継続的に改善されるため、 非常に信頼性が高いことが魅力です。 新機能の追加やバグ修正が迅速に行われ、多くの開発者が検査・修正を行うことで、 迅速な対応が可能となります。
ただし、ソースコードが公開されていることから、 セキュリティの脆弱性が発見されやすく、攻撃の対象になるリスクもあります。 それでも、公開されていることで多くの目がコードをチェックするため、 問題が発見された際には迅速に対応されることが多くあります。
そのため、利用者にとって迅速なアップデートが不可欠となります。
多くのOSSを使用するプロジェクトにおいては、 1つ1つ脆弱性の有無を確認していくだけでも 多大なコストがかかってしまうことになります。
実際、弊社プロジェクトでは多くのOSSの恩恵を受けており、 いかに脆弱性に関する情報やそのアップデートを迅速に把握し セキュリティの高い運用ができるかが課題となっておりました。
そのため、利用しているすべてのOSSに対して
・危険性の高い脆弱性が発見されていないか。
・対処済みのアップデートが公開されているかどうか。
を定期的に調べることが不可欠となります。
そこで、OSSの脆弱性診断の方法には色々ありますが 効率的に脆弱性チェックを行うための方法を2点ご紹介いたします。
① npm(Node Package Manager)
⇒「npm audit」コマンドを使います。
このコマンドはnpmに組み込まれているセキュリティ監査ツールで、Node.jsプロジェクトで使用されている依存パッケージに関するセキュリティの問題を特定し、開発者に警告および修正の提案を提供します。 |
※コマンド実行例:下記のように出力することが可能です。
② NuGet Package
⇒https://www.nuget.org/packages/
上記のNuGetパッケージギャラリーで各ライブラリごとの脆弱性情報を確認して、
脆弱性報告があるライブラリを洗い出します。
※上記のように該当のバージョンに警告マークがついているものを抽出します。
上記のチェックを自動的に行うためにスクリプトを用意して、 定期的に実行することで脆弱性の有無をチェックできるようにすると、工数削減に繋がります!
【脆弱性のあるOSSを抽出した後は】
これらの手段で脆弱性を含むライブラリを抽出した後は、
更新対応(バージョンの更新や代替処理への切り替え)を行います。
ただし、更新対応にもリスクは伴います。主に以下が考えられます。
・対象ライブラリ以外に、その他関連するライブラリにも修正が必要となる場合がある
・仕様変更により、多くのコード修正が発生する可能性がある
(特にメジャーバージョンの変更時)
上記を考慮したうえで対応を行い、
動作が変わることもあるため入念な検証を行う必要があります。
弊社プロジェクトにおいても上記は常に付きまとい、大変な対応ではありますが、 脆弱性のあるOSSを使い続けるリスクのほうが勝るため、 徹底した対応を行っております。
以上、いかがでしたでしょうか。
OSSはエンジニアにとって、切っても切れないものです。
今後も、脆弱性への配慮を徹底しつつ、OSSの利便性を最大限に活用していきましょう。