50万件のセキュリティ脆弱性を修正
2023年5月4日
0 分で読めますハッカソンは、イノベーションとコラボレーションを促進する取り組みとして、ソフトウェア開発チームの間でよく知られています。では、このモデルをサイバーセキュリティに応用し、組織のアプリケーションセキュリティ態勢を改善するとしたらどうでしょうか。CISOやセキュリティ実務者にとって夢のような話ですが、まさにこれを実現するため、Snykは2023年2月に取り組みを開始しました。


パネルでの思わず笑ってしまう名場面をご覧ください。
The Big Fixとは何ですか?
2023年2月14日から3月14日まで、Snykは毎年恒例のセキュリティハッカソン、The Big Fixを開催しました。この1か月にわたるキャンペーンでは、セキュリティ意識の向上と、開発者が自発的にセキュリティ脆弱性を発見・修正することの促進を目指しました。セキュリティチームと開発チームが連携すれば、より安全なソフトウェアエコシステムの構築に具体的な成果をもたらせる(そして、その過程も楽しめる)と考えています。
私たちは、20万件のセキュリティ脆弱性を修正することを目指して取り組みを始めました。その結果をご紹介します。

セキュリティ修正ハッカソンの開催
イベントを成功させるうえで重要なのは、開発者とセキュリティ専門家が楽しみながら新しいスキルを学び、それを個人や仕事のプロジェクトに活用できるようにすることです。そのため、次の取り組みを用意しました。
継続的なサポートを提供し、ハッカソン参加者がSnykのDiscordコミュニティで仲間と交流しながら、セキュリティを学び、修正のサポートを受けられるようにしました。
教育を促進するという約束を実現した24時間のライブ配信は、今年のBig Fixの重要なイベントでした。Atlassian、Dynatrace、Morgan Stanley、The Linux Foundation、Sysdig、AWS、StackHawkなどの登壇者を迎え、YouTubeとTwitchで24時間のライブ配信を世界に向けて実施しました。
賞品:より安全なソフトウェアの実現に向けて取り組んだすべての参加者に感謝を伝えたいと考えました。そこで、セキュリティ脆弱性を1件以上修正した全員に、限定版The Big Fix Tシャツ、またはオープンソースプロジェクトやメンテナーへの寄付に使える15ドル分のOpenCollectiveクレジットを贈りました。
リーダーボード:競争要素を加えるため、修正件数の上位参加者をリーダーボードで紹介しました。セキュリティ脆弱性の修正件数が最も多かった上位3名には、それぞれVRヘッドセット(1位)、ワイヤレススピーカー(2位)、Arduinoスターターキット(3位)を贈りました。

このハッカソンの大きな魅力の一つは、アプリケーションセキュリティやクラウドセキュリティの経験がなくても参加でき、リーダーボードの上位を目指せたことです。
それを可能にしたのは、開発者を第一に考えるSnykの姿勢、豊富なエコシステム連携、自動修正機能です。これらにより、セキュリティの問題を簡単に発見し、修正できます。開発者、DevOps、セキュリティ、品質保証のどのエンジニアにも、すぐに取り組みを始めるために必要なツールがSnykには揃っています。
今こそ、Snyk Code、Snyk Open Source、Snyk Container、Snyk Cloudを使い始める絶好の機会です。
世界中のソフトウェアを安全に
では、結果はどうだったのでしょうか。The Big Fixが終了した今、データを見ながら、開発者がセキュリティ問題を修正できるよう支援するイベントの成果を振り返りましょう。
The Big Fixの開催期間中、参加者は1か月で、クローズドソースとオープンソースを問わず、ソフトウェアプロジェクトに597,589件のセキュリティ修正を加えました。イベントには1,800人を超えるユーザーが登録しました。参加者には、Snyk社員が120人以上、顧客が220社以上、さまざまな企業のエンジニアが1,480人以上含まれていました。
Snykで監視されているプロジェクトにイベントがどのようなセキュリティ上の影響をもたらしたかを調べるため、Snykのデータベースを詳しく分析しました。以下の指標と分析結果は、ハッカソンに追加されたプロジェクトだけでなく、イベントに関連付けられたアカウントのすべてのアクティビティから収集したプロダクト分析データを対象としています。そのため、より多くのプロジェクトや、発見・修正されたセキュリティ脆弱性が含まれています。
コンテナイメージは脆弱性の影響を受けやすい一方で、最も修正しやすい
Snykで監視されているコンテナ、コード、インフラのプロジェクト全体で、数百万件のセキュリティ脆弱性が検出されました。そのうちDockerコンテナプロジェクトの修正率は73.3%でした。この高い修正率の大きな要因として、Snyk Containerが、自動プルリクエスト修正とベースイメージの推奨を提供していることが挙げられます。脆弱性の少ない代替コンテナイメージを先回りして提案します。

コードや依存関係に関するセキュリティ対応では、修正の適用率は比較的低い結果となりました。Snyk Codeは、82,160件を超える潜在的なコードのセキュリティ脆弱性を発見し、参加者による修正率は10.2%でした。オープンソースの依存関係における公知の脆弱性を検出するSnyk Open Sourceの修正率は14.4%でした。依存関係の修正はプルリクエストで自動化され、コードのセキュリティ問題はSnykの推奨エンジンを使ってIDE内で対処されます。そのため、開発プロセスの早い段階で(しかも迅速に)軽減されたセキュリティ脆弱性は、数千件に上ります。
コンテナイメージプロジェクトのデータセットを詳しく見てみましょう。Snykで監視されているDockerコンテナプロジェクトの上位10件では、セキュリティ問題の修正率が非常に高く、こうした問題は比較的簡単かつ迅速に修正できるという先ほどの見解を裏付けています。ubuntu:rollingやnodeのようなUbuntuベースのディストリビューションやコンテナイメージでは、セキュリティ問題の修正率が90%を超えています。

公知のセキュリティ脆弱性全体の13~30%を、より早く、より迅速に修正
言語エコシステムごとに詳しく見ると、各プログラミング言語におけるセキュリティ修正率も確認できます。開発用依存関係で報告されるような重要度の低いセキュリティ問題の脆弱性が含まれることで、数値に偏りが生じる場合があります。また、メンテナンスされていないコードプロジェクトでは、修正できないセキュリティ問題があることも理由として考えられます。全体として、依存関係に起因するセキュリティ脆弱性の修正率はおよそ13~30%です。修正を自動化すれば、ソフトウェア開発者はセキュリティ問題への対処ではなく、アプリケーションの構築に集中できます。

Goコードでは、サービス拒否、制御フロー、ポインターに関するセキュアコーディング上のエラーが発生しやすい
Goで修正された脆弱性の上位を見ると、開発者がプログラムの制御フロー、サービス拒否、ポインター処理に関するセキュアコーディング上のエラーの軽減に取り組んでいることがわかります。Goプロジェクトで修正されたセキュリティ脆弱性の上位5件は次のとおりです。
CWE-400:制御されていないリソース消費
CWE-266:不適切な権限の割り当て
CWE-787:範囲外書き込み
CWE-674:制御されていない再帰
CWE-476:NULLポインター参照
Pythonプロジェクトでは、メモリ関連の問題、入力検証、プログラムの制御フローに関する脆弱性が多い
Pythonの脆弱性上位には、制御されていないリソース消費、範囲外書き込み、範囲外読み取りなど、Goプロジェクトと共通するものがあります。Pythonのコードベースで確認されたその他の主な脆弱性は次のとおりです。
CWE-369:ゼロ除算
CWE-617:到達可能なアサーション
CWE-1333:正規表現の計算量の非効率性
JavaとJavaScriptのコードベースには、共通する主な脆弱性の種類がある
The Big Fixの期間中に監視した脆弱性の上位10種類のうち、JavaとJavaScriptのコードベースに共通するCWEは次のとおりです。
CWE-400:制御されていないリソース消費
CWE-94:コード生成の不適切な制御(「コードインジェクション」)
CWE-22:制限されたディレクトリへのパス名の不適切な制限(「パストラバーサル」)
CWE-200:権限のない主体への機密情報の漏えい
Rubyでは、サービス拒否、クロスサイトスクリプティング、HTTPリクエストスマグリングの脆弱性が多い
RubyはRuby on Railsでよく知られ、主にWeb開発で使われています。そのため、イベント中に修正された上位5件のセキュリティ脆弱性が、Webアプリケーションのリスクに関係しているのも意外ではありません。
CWE-1333:正規表現の計算量の非効率性
CWE-400:制御されていないリソース消費
CWE-79:Webページ生成時の入力の不適切な無害化(「クロスサイトスクリプティング」)
CWE-444:HTTPリクエストの解釈の不一致(「HTTPリクエスト/レスポンススマグリング」)
CWE-200:権限のない主体への機密情報の漏えい
実際、参加者が発見して修正した脆弱性の上位には、HTTPリクエストスマグリングという、あまり知られていないセキュリティ問題が含まれていました。
静的アプリケーションテストで発見された、最も修正しやすいセキュリティ脆弱性
静的アプリケーションテストは、抽象構文木などのコードレベルの分析やコードパスのワークフローを活用し、潜在的な脆弱性や安全でないコーディング規約を特定する手法です。開発者がコードを書いている間にセキュリティ上の懸念を伝え、早い段階でフィードバックを提供できるため、機能の構築後に対処するよりも効果的です。
Snyk Codeは、IDEに統合されたセキュリティ分析と修正の推奨を提供します。開発者はVS Code拡張機能をインストールするだけで簡単に活用できます(IntelliJなどのIDEにも対応)。Brian ClarkとNate Michalovが、このライブコーディングセッションでセキュリティ問題の発見と修正方法を紹介します。

Snyk CodeのSASTツールが検出した問題のうち、特に多かった脆弱性の種類は次のとおりです。
CWE-94:コード生成の不適切な制御(「コードインジェクション」)
CWE-79:Webページ生成時の入力の不適切な無害化(「クロスサイトスクリプティング」)
CWE-916:計算コストが不十分なパスワードハッシュの使用
CWE-798:ハードコードされた認証情報の使用
CWE-352:クロスサイトリクエストフォージェリ(CSRF)
次のステップ
今年のThe Big Fixに参加してくださった皆さんに感謝します。また、アプリケーションセキュリティについて学び、ほかのサイバーセキュリティ仲間と交流できる、今後開催予定の公開イベントをご案内します。
CTF 101 Workshop(2023年5月25日):キャプチャー・ザ・フラッグ(CTF)チャレンジの解き方を学べる、実践型ワークショップです。
Ethical Hacking Workshop(2023年6月21日):倫理的なハッキングと責任ある情報開示の方法を学べる、実践型ワークショップです。
DevSecCon(2023年6月27日):DevSecOpsのあらゆるテーマを扱う、Snykを代表するコミュニティカンファレンスです。
同じ関心を持つ開発者やセキュリティ専門家とつながりたい方は、DevSecOps Discordにご参加ください。
