2. 情報システムの企画・設計・開発・運用でのセキュリティ確保の推進又は支援に関すること(5/8)~セキュアプログラミング~

情報処理安全確保支援士

2-5 セキュアプログラミング

概要 (引用)

ソフトウェア実装でのコーディング標準,セキュアプログラミングなどについて,必要な指導・助言を行い,支援する。

要求される知識

・ セキュアプログラミングの原則,実践規範に関する知識
・ OS 及びコンパイラでの攻撃防止技術に関する知識
・ 統合開発環境に関する知識
・ プログラム言語,データベース言語,マークアップ言語に関する知識

要求される技能

・ ソフトウェア実装について,セキュアプログラミングの原則,実践規範と照らしてレビューする能力
・ コーディング標準に沿ったセキュアプログラミングを実践する能力

セキュアプログラミングの原則

セキュアプログラミングの原則は、「脆弱性の原因を設計・実装の段階から排除する」ための基本的な考え方です。以下に主要な原則を示します。

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(アプリケーションセキュリティ)など

まとめ

情報処理安全確保支援士は、組織の安全なソフトウェア開発を実現するために、セキュアプログラミングやコーディング標準の策定・運用についての専門的な知見をもって、現場の開発者を技術的に支援することが求められます。
この支援は、製品・サービスの品質と信頼性を高め、情報セキュリティリスクの低減に大きく寄与します。