はじめに
「セキュアコーディング」
あたかも完全に理解したような顔で日々過ごしている人間です。
強がってタイトルにはおさらいと書いてしまいました。
正確な定義とか、どこを見たら良いか調べてまとめて残しておきます。
参照文献
デジタル庁「政府情報システムにおけるセキュリティ・バイ・デザインガイドライン」
JPCERT セキュアコーディングページ
CERTコーディングスタンダード(JPCERT)
経済産業省 情報セキュリティ管理基準(PDF)
NISC 政府機関等のサイバーセキュリティ統一基準群
IPA セキュアプログラミング講座
セキュリティ・バイ・デザイン
セキュアコーディングを語るには、
セキュリティバイデザイン(Security by Design)を理解していないといけない。
セキュリティバイデザインとは、システムやソフトウェアの企画・設計段階からセキュリティ対策を組み込み、全ライフサイクルを通じてセキュリティを確保する「設計思想」や「考え方」のこと。
完成後に後付けでセキュリティを加えるのではなく、最初から安全な仕組みを設計し、リスクアセスメントを基に防御策を計画的に組み入れるアプローチであり、組織の方針やプロセスも含む。
デジタル庁「政府情報システムにおけるセキュリティ・バイ・デザインガイドライン」
ガイドラインの「5)セキュリティ実装」章に以下のように記載されている。
ア 要求事項
• 設計に基づいて、セキュリティ機能の実装が完了していること
• セキュリティ設計方針に基づいて、脆弱性を作りこまないよう、
アプリケーションのセキュアコーディングが実施されていること
• セキュリティ設計方針に基づいて、システム基盤となるプラットフォーム
のセキュリティ設定の実施(堅牢化、要塞化)が完了していること
つまり、「セキュアコーディング」とは、
セキュリティ・バイ・デザイン思想に則った具体的な技術的アプローチの一つであり、ソフトウェア開発の実装フェーズでの「安全なコーディング手法」のこと。
具体的には入力検証、エラーハンドリングなどの技術的対策を取り入れて、コードの脆弱性を減らすことを目的としている。
セキュアコーディング
定義
「セキュアコーディング」とは、
悪意のある攻撃者の攻撃やソフトウェアの脆弱性を防ぐために、設計・実装段階で安全なプログラミング手法・原則を適用し、不正アクセスや情報漏洩などのリスクを低減する技術的な方法論のこと。
「CERT C」は、その方法論の具体的な標準のひとつである。
CERT Cの目的は、それぞれのプログラミング言語で開発されたソフトウェアシステムのセキュリティを確保するために必要な(ただし十分ではない)一連のルールを定めることである。
CERT C
| カテゴリ名 | 略号 | 概要・主な内容 |
|---|---|---|
| プリプロセッサ | PRE | マクロの安全な使い方、文字列結合の禁止など |
| 宣言と初期化 | DCL | 変数・関数の宣言と初期化 |
| 式 | EXP | 副作用管理、定数の変更禁止 |
| 整数 | INT | 整数の範囲チェック、符号の扱い |
| 浮動小数点 | FLP | 浮動小数点処理、誤差への対応 |
| 配列 | ARR | 境界の管理、ポインタの安全利用 |
| 文字と文字列 | STR | 文字列操作の安全化、非終端文字列の回避 |
| メモリ管理 | MEM | 動的メモリ割当・解放、解放後アクセス禁止 |
| 入出力 | FIO | ファイル操作の安全性 |
| エラー処理 | ERR | 一貫したエラー処理方針 |
| 競合状態 | CON | スレッド同期、データ競合防止 |
| アプリケーションプログラミングインターフェイス | API | API利用時のセキュリティ注意点 |
| 一般的事項 | MSC | その他一般的な安全ルール |
| POSIX | POS | POSIX API利用時の安全注意 |
| Microsoft Windows | WIN | Windows環境固有の安全コーディング |