2-5 セキュアプログラミング
概要 (引用)
ソフトウェア実装でのコーディング標準,セキュアプログラミングなどについて,必要な指導・助言を行い,支援する。
要求される知識
・ セキュアプログラミングの原則,実践規範に関する知識
・ OS 及びコンパイラでの攻撃防止技術に関する知識
・ 統合開発環境に関する知識
・ プログラム言語,データベース言語,マークアップ言語に関する知識
要求される技能
・ ソフトウェア実装について,セキュアプログラミングの原則,実践規範と照らしてレビューする能力
・ コーディング標準に沿ったセキュアプログラミングを実践する能力
- 引用元
- 情報処理推進機構 「情報処理安全確保支援士試験(レベル4)シラバス- 情報処理技術者試験における知識・技能の細目 Ver.2.1(2023年12月25日掲載)
- https://www.ipa.go.jp/shiken/syllabus/nq6ept00000014ir-att/syllabus_sc_ver2_1.pdf
セキュアプログラミングの原則
セキュアプログラミングの原則は、「脆弱性の原因を設計・実装の段階から排除する」ための基本的な考え方です。以下に主要な原則を示します。
1. 最小権限の原則(Principle of Least Privilege)
- プログラムは、必要最小限の権限で動作させる。
- 万一侵害されても、被害を最小限に抑える。
2. 入力の検証と無害化(Input Validation and Sanitization)
- 信頼できない入力(ユーザ入力、外部APIなど)には必ず検証・制限を行う。
- ホワイトリスト方式によるチェックが推奨される。
3. デフォルト拒否(Fail-safe Defaults)
- 明示的に許可された操作以外はすべて拒否する(例:ファイアウォールのルール設定)。
4. セキュリティは設計に組み込む(Security by Design)
- セキュリティ対策を後付けではなく、設計段階から盛り込む。
- 例:ユーザ認証や暗号化の必要性をアーキテクチャ設計に反映。
5. 安全な失敗(Fail Securely)
- エラー発生時に不正な操作が許容されないようにする。
- 例:ログイン失敗時に理由を詳細に表示しない(「パスワードが違います」など)。
6. 完全な仲介(Complete Mediation)
- リソースへのアクセス要求は、毎回適切に検査・認可する。
セキュアプログラミングの実践規範
実践規範は、これらの原則を具現化するための具体的なコーディングルールやフレームワークです。代表的なものを以下に示します。
1. OWASP Secure Coding Practices
- Webアプリケーション向けのセキュアコーディングチェックリスト。
-
主なカテゴリ:
- 入力検証
- 認証とセッション管理
- アクセス制御
- 暗号化
- エラーハンドリング
2. CERT Secure Coding Standards
- プログラミング言語ごとのセキュアコーディングルール(C/C++/Javaなど)。
- 例:
strcpyなどの危険な関数は使わない、バッファサイズのチェック徹底。
3. IPA「安全なウェブサイトの作り方」
- 日本の開発現場向けにまとめられた実践ガイド。
- XSS、SQLインジェクション、CSRFなどの攻撃への対応策を具体的に提示。
4. 静的解析・SASTの導入
- 開発段階でコードを自動解析して脆弱性を検出する。
- 規範に基づいたルールセット(例:MISRA、SEI CERT)でチェック。
セキュアプログラミングとは
情報処理安全確保支援士(Registered Information Security Specialist)は、ソフトウェアの安全性確保の観点から、セキュアプログラミングの実践を指導・助言・支援する役割を担っています。以下に、その内容を踏まえて説明します。
セキュアプログラミングとは、ソフトウェア実装時にセキュリティを考慮した安全なコーディング手法を用いることで、脆弱性の混入を未然に防ぐ開発技術です。たとえば、バッファオーバーフロー、SQLインジェクション、クロスサイトスクリプティング(XSS)などの攻撃手法への対策が含まれます。
支援士は、以下のような形でセキュアプログラミングを実現・促進する役割を果たします。
1. コーディング標準の策定・導入支援
- 安全なコーディングに関するガイドライン(例:CERT C Coding Standard、OWASP Secure Coding Practicesなど)を参照し、組織の開発基準として策定。
- チーム内での共有や教育を行い、共通理解のもとに統一された安全な実装を実現。
2. セキュアコーディングの指導・助言
- 開発者に対し、安全な入力処理、エラー処理、セッション管理、暗号化の使い方などについて指導。
- 脆弱なコードの発見や修正に関するアドバイスを実施(例:静的解析ツールの活用方法の指導)。
3. ソフトウェア開発プロセスへの組み込み
- セキュリティ要求を開発プロセスに組み込み、設計・実装段階から脆弱性の混入を予防。
- DevSecOpsの導入支援など、開発と運用にまたがるセキュリティ活動の強化。
4. 脆弱性への対応支援
- 公開された脆弱性(CVE)への迅速な対応方法、影響範囲の調査方法などを開発者へ助言。
- 安全なアップデート手法やパッチ適用方法に関する指導。
支援士に求められる知識・スキル例
-
プログラミング言語特有の脆弱性への理解
- C/C++のメモリ管理、Javaのオブジェクト操作、JavaScriptのDOM操作など
-
セキュリティテスト手法
- ソースコードレビュー、静的解析、動的解析、ペネトレーションテストの支援
-
関連規格やフレームワークの知識
- OWASP Top 10、ISO/IEC 27034(アプリケーションセキュリティ)など
まとめ
情報処理安全確保支援士は、組織の安全なソフトウェア開発を実現するために、セキュアプログラミングやコーディング標準の策定・運用についての専門的な知見をもって、現場の開発者を技術的に支援することが求められます。
この支援は、製品・サービスの品質と信頼性を高め、情報セキュリティリスクの低減に大きく寄与します。
