検索
ニュース

Microsoft、安全で高効率のプログラミング言語として「Rust」を高く評価メモリ破壊バグを避けるには

Microsoft Security Response Center(MSRC)は、ソフトウェアのセキュリティ確保と効率性の両方の要件を満たす最も有望なシステムプログラミング言語の一つとして、「Rust」を高く評価した。メモリ破壊バグをそもそも作り込まないことでセキュリティを確保できるという。

Share
Tweet
LINE
Hatena

 Microsoft Security Response Center(MSRC)は2019年7月16日(米国時間)、ソフトウェアのセキュリティを確保しつつ、効率性も保ちたい場合、利用可能なシステムプログラミング言語として、「Rust」を高く評価した。

 MSRCによれば、「CVE(共通脆弱性識別子)」を割り当てられ、Microsoftが修正してきた同社ソフトウェアのセキュリティ脆弱(ぜいじゃく)性の大部分は1つの要因から起こっている。開発者がC/C++コードにうっかりメモリ破壊バグを作り込んでしまったことだ。

 近年、Microsoftのコードベースはますます増加している。同社はオープンソースソフトウェアの利用を拡大しているが、メモリ破壊バグは依然として減っていない。MSRCは、このような脆弱性は、Microsoftだけに限られた問題ではないとも述べている。


Microsoftが毎年CVEを割り当てる脆弱性のうち70%程度が、メモリの安全性に関わるもの(濃い色の部分)だ(出典:Microsoft

解決策はこれまでもあったが……

 開発者が安全なコードを作成できるよう支援するツールは多い。学習に1〜2カ月は必要となるような複雑な静的分析ツールや、クラッシュした場合の優先順位を決めることが可能な大規模なファジング、テイント解析、制約ソルバーなどだ。

 開発者が安全なプラクティスを採用するためのガイダンスもある。セキュアな開発ライフサイクルや、コーディングガイドライン、何時間ものコードレビュー、トレーニング、脅威モデリングのガイダンスなどだ。

 Microsoftによる改善もある。「Visual Studio」は潜在的な欠陥を強調する表示を出力する。同社はコンパイラを改善し、メモリ破壊を起こすようなエラーから開発者を守ろうとしてきた。

そもそもプログラミング言語がマズいのでは?

 それにもかかわらず、メモリ破壊バグは一向に減っていない。これは開発者に非があるのだろうか。

 開発者の本分は、セキュリティを心配することではなく、必要な機能を実装することだ。メモリに安全性の問題が残るコードを、そもそも開発者が作成できないような開発言語を使うことができれば、開発者はもちろん、セキュリティエンジニアにも、顧客にも恩恵があると、MSRCは述べている。

 MSRCによると、メモリ破壊の脆弱性を発生させないと考えられる言語は、「C#」など幾つかある。

 それでも、C++を使い続ける開発者が多いのは、C++にはさまざまな長所があるからだ。例えば、非常に高速なコードを記述でき、メモリやディスクの要件が低く、完成度が高いコードを記述でき、実行したときに何が起きるのか予測しやすく、対応プラットフォームが多く、追加コンポーネントをインストールしなくても使える、といった長所だ。

C#とC++のメリットを兼ね備えるのは

 C#のような言語が提供するメモリ関連のセキュリティと、C++の効率性を兼ね備えた言語があれば、開発者にとって理想的だ。MSRCは、両方の要件を満たす最も有望なシステムプログラミング言語として、Mozillaの公式プロジェクトとして進化してきた「Rust」を挙げている。

 さらにMSRCは、業界として真のセキュリティ対策を進めるには、脆弱性に対処するためのツールやガイダンスを提供するよりもむしろ、「開発者にそもそも脆弱性を発生させないための取り組みを行わなければならない」との見解を示した。

 MSRCは、安全性の低いレガシー言語から、モダンで安全なシステムプログラミング言語への移行を促進するという観点から、Rustをはじめとする安全なシステムプログラミング言語の活用に向けて、Microsoftが行ってきた取り組みを今後も紹介していくという。

【訂正:2019年7月19日午後6時30分】本記事の初出時、「Microsoftが『CVE(共通脆弱性識別子)』を割り当て、修正してきた」としていた箇所は、正しくは「『CVE(共通脆弱性識別子)』を割り当てられ、Microsoftが修正してきた」でした。お詫びして訂正いたします。該当箇所は既に修正済みです(編集部)。



Copyright © ITmedia, Inc. All Rights Reserved.

ページトップに戻る