(Last Updated On: 2018年8月4日)

セキュアプログラミングの啓蒙にも少々食傷気味ですが、今回もセキュアプログラミングの話題です。IPAのセキュアプログラミング講座Web編は削除予定であるとFacebookではお伝えしましたが、ブログではまだだったので合わせて紹介します。

ISO 27000がセキュアプログラミングついてどのように書いているのか紹介します。ISO 27000シリーズはISMS(Information Secuirty Management System – 情報セキュリティマネジメントシステム)認証の根幹となっている国際セキュリティ標準です。ISMS導入で自動的にセキュリティ問題に対応できる!といったモノではありませんが、体系的なセキュリティ導入にとても役立つ規格で2015年6月29日時点で4646組織の認証登録があります。

 

セキュアプログラミングとは?

セキュアプログラミングの別名は「防御的プログラミング」「セキュアコーディング」です。セキュアプログラミングの基本は既に書いていますが、ここでもトップ10項目だけ記載しておきます。セキュアプログラミングの歴史については”セキュアプログラミング(防御的プログラミング)の歴史をざっと振り返る”を参照してください。

CERT Top 10 セキュアコーディングプラクティス

  1. 入力をバリデーションする
  2. コンパイラの警告に用心する
  3. セキュリティポリシーの為に構成/設計する
  4. 簡易にする
  5. デフォルトで拒否する
  6. 最小権限の原則を支持する
  7. 他のシステムに送信するデータを無害化する
  8. 縦深防御を実践する
  9. 効果的な品質保証テクニックを利用する
  10. セキュアコーディング標準を採用する

セキュアプログラミングの本家と言えばCERT/カーネギーメロン大学です。セキュアプログラミングのテクニックは色々ありますが、基本はこの10項目です。

IPAのセキュアプログラミング講座Web編は削除予定

IPAのセキュアプログラミング講座Web編は削除予定である、と書きました。これは個人的にIPAにセキュアプログラミング講座Web編の内容が「セキュアプログラミングとは掛け離れていて問題である」と指摘した問い合わせに対する回答としていただきました。

IPAのセキュアプログラミング講座Web編を見るとすぐ分りますが、第一位の入力バリデーションの記載がなかったり、出力対策にあたる部分がなぜか「入力対策」となっている、など世間一般で確立されてきたセキュアプログラミングとは随分異る内容になっています。

メールを見ると6月4日に指摘をして、6月9日にはこの講座を削除するとの回答を頂きました。IPAのような組織からすると迅速な対応だと思います。現在のところはまだ参照できますが、近いうちに削除されるものと思われます。

 

ISO 27002のセキュアプログラミングの記述

最近知ったのですがJIS規格の規格部分はオンライン参照できるようになっていました!素晴らしい!これは快挙だと思います。時々システム障害(過負荷?)で見れないことがありますが、誰でも気軽に参照できることは素晴らしいことだと思います。

「情報セキュリティ」をキーワードにして検索するとJIS Q 27002:2014(ISO/IEC 27002:2013)などが表示されます。Windows 7+IE 11+Adobe Reader 11の環境ではオンライン参照(つまり、ダウンロード/印刷などは不可)できることを確認しています。

27002でセキュアプログラミングに言及している部分は以下の2箇所です。

14.2.1 セキュリティに配慮した開発のための方針

開発に適用される標準類が知られていない可能性がある場合、又は現行の最適な慣行に整合していなかった場合には、新規開発する場合及びコードを再利用する場合の両方に、セキュアプログラミング技術を用いる事が望ましい。セキュリティに配慮したコーディングに関する標準類を考慮し、該当する場合には、その使用を義務付けることが望ましい。開発者は、これらの標準類の使用及び試験について訓練を受けているいることが望ましく、また、コードレビューによって標準類の使用を検証することが望ましい。

 

14.2.5 セキュリティに配慮したシステム構築の原則

アプリケーションの開発手順では、入出力インターフェースをもつアプリケーションの開発に対し、セキュリティに配慮した構築技術(セキュアプログラミングなど)を適用することが望ましい。

CERTがセキュアプログラミングの第一位にしているだけあって入力バリデーションと第7位の出力処理には念を入れて書かれています。

ISO 27000シリーズに詳しくない方の為に解説します。ISO 27002はISMS構築のガイドラインです。ガイドラインなので全ての項目が実施済みであることは”要求されません”。ISOのマネジメントシステムは”継続的改善の実施”を要求しています。クリティカルでない物、リソース制約などから直ぐに実現不可能な物は将来実現してもよく、ガイドラインではほぼすべて「○○することが望ましい」の形式になっています。どうでもよい、という意味ではありません。

 

以前のバージョンとの違い

ISO/JIS規格はバージョンアップされ内容が更新されます。以前のバージョンではより具体的にセキュアプログラミング技法の1つである入力バリデーションなどを例まで挙げて紹介していました。

現在のバージョンでは「セキュアプログラミングを行いなさい」とだけ記載されています。この経緯は印刷物として取得できるJISハンドブックに記載されています。そこにはセキュアプログラミングは体系的に整備されているので「セキュアプログラミングを行う」旨の記載のみした、と解説されています。要するに当たり前になってきたので「セキュアプログラミングを行う」という簡潔な記述にしたということです。

 

まとめ

ISMS認証を取得するようなセキュリティに能動的な組織ではセキュアプログラミングは当たり前になっています。残念ながらそうではない方も多いです。セキュアプログラミングを行うと確実に前より安全なプログラムが記述できるようになります。契約プログラミングも合わせて習得すると良いでしょう。

ところで、今週末の7/11(土曜)は岡山大学大学院のビジネスマインド養成講座があり私が担当の日です。直接申し込み無しで来ていただいても大丈夫なので是非おこしください。タイトルに「経営者/マネージャー」がありますが、開発者の方にも興味深い話になっています!

 

 

 

投稿者: yohgaki