本ブログは、Strengthening the Fort 🏰: OpenSSF Releases Compiler Options Hardening Guide for C and C++ の参考訳です。
Thomas Nyman, Ericsson; David A. Wheeler, Linux Foundation; Mark Esler, Canonical; Siddhesh Poyarekar, Red Hat
急速に変化するサイバーセキュリティの状況において、OpenSSFはCおよびC++ソフトウェアのセキュリティ強化に向けて重要な一歩を踏み出しました。この取り組みは、インターネットの黎明期以来、オープンソースソフトウェア(OSS)を含むソフトウェアに影響を与えてきました。OpenSSFベストプラクティスワーキンググループは、包括的な「CおよびC++のためのコンパイラー・オプション強化ガイド」を発表することで、より安全なCおよびC++アプリケーションを構築するための専門知識とリソースを開発者に提供することを目指しています。
このガイドは、様々な組織や個人の努力の積み重ねによって実現されました。本ガイドは、ネットワーク・プラットフォームおよび通信企業のエリクソン社からの最初のコンテンツ寄贈をきっかけに誕生し、その後、Linux Foundation、Intel、Microsoft、Red Hat、Canonical、Control Plane、Woven by Toyotaをはじめとする数多くの組織や、CおよびC++のエコシステムやコンパイラに関する貴重な見識を持つ個人から貴重な協力を得ています。
このブログ記事では、このガイドの意義を探り、CおよびC++のセキュリティの課題を理解し、開発者が潜在的なリスクを軽減するのに役立つ方法を学びます。
The C and C++ Hardening Challenge
CとC++は、システム・プログラミング、組込みシステム、さまざまなパフォーマンス・クリティカルなアプリケーションで一貫して使われてきた言語です。これらの言語は、優れた制御とパフォーマンスを提供する一方で、セキュリティ上のユニークな課題ももたらします。CとC++の設計と低レベルのアクセスは、そのコードを様々な脆弱性の影響を受けやすくなります。特に、バッファ・オーバーフロー、フォーマット文字列の脆弱性、メモリ破壊などのメモリ安全性の問題が挙げられます。
最近、米国サイバーセキュリティ&インフラセキュリティ局(CISA)、国家安全保障局(NSA)、英国国家サイバーセキュリティセンター(NCSC)など、サイバーセキュリティをリードする組織から、メモリの安全性に関する問題への注目が高まっています。これらの当局は、メモリの安全性の問題がもたらす重大なリスクを総体的に重視しています。メモリ安全性の問題は、今日、悪用可能なソフトウェアの脆弱性の大部分を占め続けています。例えば、マイクロソフトとグーグルの両社は、マイクロソフトのソフトウェア・スイートやChromeブラウザを含むそれぞれの製品のセキュリティ脆弱性の約70%がメモリ安全性の問題に起因すると報告しています。ほとんどの場合、CやC++ではこのようなミスが起こりやすいからです。
しかし、これらの脆弱性に大規模に対処するには、いくつかの重大な課題があります:
第一に、既存のCやC++のコードをすべて別の言語に書き換えるのは、とても不可能です。CやC++で書かれたコードは、数百億行から数千億行に及ぶ可能性があります。これらの言語は、過去数十年にわたって私たちの社会のデジタル化の基礎となってきました。
第二に、たとえ最終的にCやC++を段階的に廃止し、より安全な言語に切り替えたとしても、すべてのセキュリティ脆弱性がなくなることはありません。Rustのような有望な代替言語でさえ、現状ではCやC++、あるいは「安全でない」言語拡張を必要とするコードに依存しています。最近のデータによると、「クレート」とも呼ばれるRustパッケージの70%以上が、CまたはC++に依存しています。
CおよびC++に関連するリスクを軽減するために、開発者は、メモリ安全性の問題やその他のソフトウェアの欠陥に対してソフトウェアを強化するためのコンパイラオプションについて、十分な情報を得た上で選択する必要があります。コンパイラフラグは、CおよびC++コードのセキュリティを大幅に強化できる強力なツールです。しかし、すべての開発者が、利用可能なオプションの複雑さを効果的に操れるわけではありません。そこで、OpenSSFのオプション強化ガイドは、ソフトウェアのセキュリティを最適化しようとする開発者に重要な指針を提供します。
OpenSSF’s Compiler Options Hardening Guide
OpenSSFのコンパイラオプション強化ガイドは、開発者がCおよびC++のコンパイラオプションのセキュリティ上の意味をよりよく理解するのに役立つ包括的なリソースです。以下のような幅広いトピックをカバーしています:
- 推奨されるコンパイラオプション – このセクションでは、オープンソースコンパイラで広く使われているコンパイラオプションフラグの概要を示します。推奨されるオプションには、開発者に警告するフラグと、バッファオーバーフローやその他のメモリ破壊の原因を含む、一般的な欠陥に対してソフトウェアを強化するフラグの両方が含まれています。これらのオプションの大部分は、今日の主要なLinuxディストリビューションですでに有効になっています。
- 推奨されないコンパイラオプション – このセクションでは、不適切に使用された場合、生成されたバイナリに重大なセキュリ ティ上の問題を引き起こす可能性のある、特定のコンパイラ・オプション・フラグを示します。
- Sanitizers – このセクションでは、アプリケーションのメモリ安全性の問題やその他の不具合を検出して特定するために設計された、コンパイラベースのツールを開発者に紹介します。サニタイザーを使用することは、リリース・コンフィギュレーションではパフォーマンス・ ペナルティーやメモリ・オーバーヘッドという点で法外にコストがかかるかもしれませんが、デバッグやテス トの段階では非常に価値のある診断ツールです。
なぜこのガイドが重要なのか
コンパイラオプション ハードニングガイドは、CおよびC++のセキュリティにとって重要なコンパイラオプションのフラグをナビゲートするための包括的なリソースの重要なニーズに対応しています。このガイドを開発者が自由に利用できるようにすることで、OpenSSFはセキュリティのベストプラクティスを推進し、業界全体のセキュリティ標準の向上に貢献しています。
以下は、このガイドが重要である主な理由です:
- 脆弱性の予防と軽減: 本ガイドは、推奨されるコンパイラオプションを理解し、適用することによって、開発者がコードに潜在するセキュリティー脆弱性を積極的に最小化することを支援します。
- 開発者教育の向上: このガイドは、初心者の開発者も経験豊富な開発者も、コンパイラのオプションについて十分な情報を得た上で判断するのに役立つ教育リソースです。
- コラボレーションとベストプラクティス: オープンソースコミュニティ内でのコラボレーションと、安全なソフトウェア開発のためのベストプラクティスの採用を促進しています。
- 無料かつオープンなアクセス: OpenSSFのフリーアクセスへのコミットメントにより、リソースが限られたプロジェクトでも、強化されたセキュリティの実践から利益を得ることができます。
例えば、_FORTIFY_SOURCE機能は、ガイドの推奨に従って有効にすると、多くのC標準ライブラリ関数をバッファ・オーバーフローから保護し、メモリ安全性の問題の発見を支援します。この1年で、Qemu、Bind 9、autogen、rsync、PRIMAといったいくつかの著名なオープン・ソース・プロジェクトが、_FORTIFY_SOURCE機能の強化により、これまで知られていなかったバッファ・オーバーフローの不具合を特定し、修正することに成功しました。
[placeholder for Mark to add some text here on the role of both memory-safe languages and hardening practices “meeting in the middle”, e.g., in projects such as the Linux kernel ]
参加するには
CまたはC++でソフトウェアを開発されている方は、ぜひこちらのガイドをご覧ください: CおよびC++のコンパイラ・オプション強化ガイド
このブログ記事はガイドの最初のリリースをお知らせするものですが、私たちの仕事はまだ終わっていません。ソフトウェアの改善は、これまで以上に重要です。主要なコンパイラによるセキュリティ機能の採用は拡大しています。将来的には、より多くのコンパイラー(インテルやマイクロソフトのものなど)に関する情報を追加し、より多くのオプションを追加したいと考えています。私たちの目標は、このガイドを継続的に更新していくことです。
貢献することに興味があれば、GitHubやOpenSSF Slackチャンネルで歓迎するBEST WGコミュニティに参加することができます。
OpenSSFの取り組みに参加する方法については、「参加する」のページをご覧ください。
著者について
Thomas Nymanは、OpenSSFベストプラクティスワーキンググループの下で、C/C++ コンパイラー強化ガイドのイニシアチブをリードしています。エリクソン社のシニア・セキュリティ・テクノロジー・スペシャリストとして、重要な通信インフラのプラットフォーム・セキュリティに従事。フィンランドのアールト大学でコンピュータサイエンスの博士号を取得し、モバイルおよび組み込みプラットフォームのセキュリティ分野におけるシステムセキュリティ研究に従事。 | |
David A. Wheeler は、Linux Foundation のオープンソース・サプライチェーン・セキュリティ担当ディレクターです。情報工学博士、コンピュータサイエンス修士、情報セキュリティ修了証、ソフトウェア工学修了証、電子工学学士。公認情報システム・セキュリティ・プロフェッショナル(CISSP)、IEEE上級会員。バージニア州北部在住。 | |
Mark Eslerは、Ubuntuセキュリティのメンバーで、セキュリティのメンテナンス、ソフトウェアの監査、脆弱性の調整に注力しており、Ubuntuのコンパイラーフラグの強化に取り組んでいます。 | |
Siddhesh Poyarekarは、Red Hatのプラットフォーム・ツール・グループのセキュリティ・リーダーです。GNU Cライブラリのリード・メンテナーの一人であり、GCCのコントリビューターでもある。 | |
クリストファー・ロビンソン(通称CRob)は、Intel Product Assurance and Securityのセキュリティ・コミュニケーション・ディレクターであり、Open Source Security Foundation(OpenSSF)のコミュニティ・リーダーでもある。 |
翻訳協力:吉田行男
- OpenSSF、CおよびC++のコンパイラ・オプション強化ガイドを発表 - 2023-12-12
- CおよびC++のコンパイラ・オプション強化ガイド - 2023-12-12