ISO/IEC TR 24772-1:2019 プログラミング言語—プログラミング言語の脆弱性を回避するためのガイダンス—パート1:言語に依存しないガイダンス | ページ 3

※一部、英文及び仏文を自動翻訳した日本語訳を使用しています。

序章

すべてのプログラミング言語には、不完全に指定された構造、未定義の動作を示す構造、実装に依存する構造、または正しく使用するのが難しい構造が含まれています。したがって、これらの構造を使用すると脆弱性が発生する可能性があり、その結果、作成者が意図したものとは異なる方法でソフトウェア プログラムが実行される可能性があります。場合によっては、これらの脆弱性がシステムの安全性を危険にさらしたり、攻撃者に悪用されてシステムのセキュリティやプライバシーが侵害される可能性があります。

このドキュメントは、プログラミング言語のユーザーに、言語に依存しない使用法における潜在的な脆弱性の概要と、それらを回避または軽減する方法を提供します。 ISO/IEC 24772 シリーズの他の部分では、一般的な観察事項が特定の言語にどのように適用されるかを説明しています。

このドキュメントは、複数のプログラミング言語にまたがるガイダンスを提供することを目的としています。これにより、アプリケーション開発者は、選択した言語で記述されたソフトウェアの脆弱性とそれに付随する結果につながるプログラミング構造をより適切に回避できるようになります。このガイダンスは、開発者が、ソフトウェアの脆弱性につながる可能性のある構造を検出して排除できるソース コード評価ツールを選択したり、予想される問題を回避するプログラミング言語を選択したりするためにも使用できます。

このドキュメントの対象読者は、システムのソフトウェアの予測可能な実行を保証することに関心のある人です。つまり、ソフトウェア システムの開発、認定、または保守を行っており、意図した以外の方法でソフトウェアを実行させる可能性のある言語構造を避ける必要がある人です。

明確な安全性、セキュリティ、またはミッション クリティカルな要件を持つアプリケーションの開発者は、コードに関連するリスクを認識することが期待されており、このドキュメントを使用して、選択したプログラミング言語によって提示される問題に開発プラクティスが確実に対処できるようにすることができます。コーディングガイドラインのサブセット化または提供。

このドキュメントの特定の対象者には、特に以下の開発者、メンテナー、および規制者が含まれます。

  • 人命の損失、人身傷害、または環境への損害を引き起こす可能性がある、安全性が重要なアプリケーション。
  • 機密性、完全性、および可用性の特性を確保する必要があるセキュリティ クリティカルなアプリケーション。
  • 資産または財務の損失または損害を回避する必要があるミッション クリティカルなアプリケーション。
  • ビジネスの成功には正しい操作が不可欠な、ビジネスに不可欠なアプリケーション。
  • 複雑で費用がかかり、拡張される可能性がある計算の結果に高い信頼性を必要とする科学、モデリング、およびシミュレーション アプリケーション。

ただし、他の開発者がこのドキュメントを無視できるとは限りません。重要でないアプリケーションの脆弱性は、攻撃者がシステムの制御を取得したり、重要な共同ホスト アプリケーションを妨害したりする経路を提供する可能性があります。すべての開発者がこのドキュメントを使用して、一般的な脆弱性をすべてのアプリケーションから削除するか、少なくとも最小限に抑えることを確認してください。

このドキュメントでは仕様や設計の問題については説明しませんが、さまざまなアクティビティ間の境界が明確ではないことが認識されています。このドキュメントは、低レベルの設計がどこで終わり実装が始まるかについての議論を避けるために、コーディングの問題ではなく設計の問題と見なすことができる選択された問題を扱うことを目的としています。

このドキュメントは本質的に不完全であることに注意してください。新しい脆弱性は絶えず発見されているため、プログラミング言語の脆弱性の完全なリストを提供することはできません。そのようなレポートは、発見され、特徴付けられ、十分な可能性と結果があると判断されたレポートのみを説明できます。

Introduction

All programming languages contain constructs that are incompletely specified, exhibit undefined behaviour, are implementation-dependent, or are difficult to use correctly. The use of those constructs can therefore give rise to vulnerabilities, as a result of which software programs can execute differently than intended by the writer. In some cases, these vulnerabilities can endanger the safety of a system or be exploited by attackers to compromise the security or privacy of a system.

This document provides users of programming languages with a language-independent overview of potential vulnerabilities in their usage and ways to avoid or mitigate them. Other parts of the ISO/IEC 24772 series describe how the general observations apply to specific languages.

This document is intended to provide guidance spanning multiple programming languages, so that application developers will be better able to avoid the programming constructs that lead to vulnerabilities in software written in their chosen language and their attendant consequences. This guidance can also be used by developers to select source code evaluation tools that can discover and eliminate some constructs that could lead to vulnerabilities in their software or to select a programming language that avoids anticipated problems.

The intended audience for this document are those who are concerned with assuring the predictable execution of the software of their system; that is, those who are developing, qualifying, or maintaining a software system and need to avoid language constructs that can cause the software to execute in a manner other than intended.

Developers of applications that have clear safety, security or mission-criticality requirements are expected to be aware of the risks associated with their code and can use this document to ensure that their development practices address the issues presented by the chosen programming languages, for example by subsetting or providing coding guidelines.

Specific audiences for this document include in particular developers, maintainers and regulators of:

  • safety-critical applications that can cause loss of life, human injury, or damage to the environment;
  • security-critical applications that need to ensure properties of confidentiality, integrity, and availability;
  • mission-critical applications that need to avoid loss or damage to property or finance;
  • business-critical applications where correct operation is essential to the successful operation of the business;
  • scientific, modelling and simulation applications that require high confidence in the results of possibly complex, expensive and extended calculation.

However, it should not be assumed that other developers can ignore this document. A weakness in a non-critical application can provide the route by which an attacker gains control of a system or otherwise disrupts co-hosted applications that are critical. It is hoped that all developers would use this document to ensure that common vulnerabilities are removed or at least minimized from all applications.

While this document does not discuss specification or design issues, there is recognition that boundaries among the various activities are not clear-cut. This document seeks to avoid the debate about where low-level design ends and implementation begins by treating selected issues that some can consider design issues rather than coding issues.

It should be noted that this document is inherently incomplete. It is not possible to provide a complete list of programming language vulnerabilities because new weaknesses are discovered continually. Any such report can only describe those that have been found, characterized, and determined to have sufficient probability and consequence.