CERT Top 10 Secure Coding Practices

CERTは米カーネギーメロン大学に設置されたコンピュータセキュリティ対策を行う老舗の組織です。CERTが設立される前もセキュリティが無視されていたのではありませんが、CERT設立後と前ではコンピュータセキュリティ、特にソフトウェアセキュリティに対する考え方が大きく変わりました。詳しくはセキュアプログラミング(防御的プログラミング)の歴史をざっと振り返るを参照してください。

CERTはSecure Coding Standardsとして

を公開しています。その中でもセキュアコーディング(セキュアプログラミング/防御的プログラミング)で最も重要なトップ10をTop 10 Secure Coding Practicesとしてまとめています。

日本語訳が無いようなので資料として利用できるよう私訳しておきます。
(追記:IPAのセキュアコーディングガイドは入力対策が出鱈目でした。 2017年からやっとIPAがCERT Secure Coding Practicesをセキュアコーディングの”原則”として紹介するようになりました。CERT版では出力対策を7番目に記載しています。IPAは順序を変えて2番目にしています。トップ10の原則とする際に順序を入れ替えるのは混乱の元です。オリジナルの順序のままにすべきだと思います。順序を変えると外国人とコミュニケーションが取れなくなります。)

よく勘違いされているので書いておきます。入力対策と出力対策は”独立したセキュリティ対策”です。間違えないようにしましょう。

入力バリデーションが第1位の対策であるのは科学的論理的原理的な理由が根拠となっています。最も重要な対策ですが、よく誤解されています

参考:

“CERT Top 10 Secure Coding Practices” の続きを読む

OWASP Secure Coding Practices – Quick Reference Guide

OWASPのガイドラインはPCI DSSでも参照するように指定されているセキュリティガイドラインです。その中でも比較的簡潔かつ体系的にセキュアプログラミングを解説した資料がOWASP Secure Coding Practices – Quick Reference Guide (v2) です。

日本語訳がないようなので一部未訳ですが訳しました。CC-BY-SAライセンスです。クリエイティブコモンズライセンスに従って自由に配布できます。

チェックリスト形式になっているので、自分のコーディング/開発スタイルがどの程度適合しているのか、簡単にチェックできるようになっています。コーディングスタイルのみでなく、運用はシステム構成に関連する物も含まれています。私が解説/紹介しているセキュリティ対策を行っている開発チームであればこれらの殆どに適合しているはずです。どのくらい適合していたでしょうか?

イントロダクションでは、開発者に対して少々厳しいことが書いてあります。

この技術的不可知論文書は一般的なセキュアコーディングを実践に必要な要素をソフトウェア開発ライフサイクルに統合可能なチェックリストとして定義します。

「技術的不可知論文書」(不可知論:物事の本質は人には認識することが不可能である、とする立場のこと ※ )としているのは、この文書が取り扱うセキュアコーディングの本質が理解されていない、理解されることがない、と嘆いていることを意味します。セキュアコーディングの本質の解説は諦めて作ったチェックリストであることを示唆しています。私も同じ感覚を共有しています。興味がある方はぜひ以下の参考資料を参照してください。原理と原則を知った方が応用範囲が広がります。

正確な直訳より分かり易さを優先しました。見直しをする時間まではありませんでした。誤り、誤解を招く訳などの指摘を歓迎します。

※ Agnostic(不可知論)について: このガイドは2010年に公開された文書です。最近、agnosticは「〜に依存しない」「〜に関わらず」「〜を問わず」「汎用的」「プラガブル」「詳しく知らなくても使える」といったコンテクストで割と一般的なIT用語として利用されています。2010年頃は哲学的意味が強かったと思いますが、現在は先に書いたような意味で使われているケースが多くあります。

参考資料:

“OWASP Secure Coding Practices – Quick Reference Guide” の続きを読む

セキュアなアプリ開発 – もしあなたが開発を丸投げするなら?

もし「新規開発を丸投げしセキュアなWebアプリ開発を実現してください」と依頼されたらどうするでしょうか?開発者として開発に参加するのではなく、開発主体、つまりアプリの運営者としてして「新規開発を丸投げしセキュアなWebアプリ開発を実現すること」が目的です。開発プロジェクトのディレクションを担当し、開発は丸投げなので自分が開発に一切関わらないことが前提条件です。

セキュア開発を行うには?を考えたメモです。

“セキュアなアプリ開発 – もしあなたが開発を丸投げするなら?” の続きを読む

セキュアプログラミング(防御的プログラミング)の歴史をざっと振り返る

キュアプログラミング(防御的プログラミング)の歴史をざっと振り返ってみたいと思います。セキュアプログラミングは防御的プログラミングとも言われるプログラミングの原則の1つ※です。古くからある概念ですが、誤解または理解されていない概念の1つではないでしょうか?

Defensive Programmingとして記載されています。

何故、一般に広く常識として理解されていないのか?その理由は防御的プログラミングの歴史にあるのかも知れません。

参考:

“セキュアプログラミング(防御的プログラミング)の歴史をざっと振り返る” の続きを読む

Building Dynamic websites. Harvard OpencourseWare. CS E-75

すこし古い(2012年)ハーバード大学での「動的Webサイト構築」の動画です。英語の勉強を兼て基礎からWeb開発を学ぶには良い動画です。長いので流石に全部は見ていません。しかし、ほとんどの内容は現在でも通用する物になっていると思います。

“Building Dynamic websites. Harvard OpencourseWare. CS E-75” の続きを読む

不整合が起きてはならない場合、トランザクションはシリアライザブル

リレーショナルデータベースが優れている点はトランザクションをサポートしている点です。トランザクションは手続きが一貫性ある形で実行されることを保証してくれます。しかし、トランザクションを使えばOK、という物ではありません。

もしトランザクションさえ使っていればOKと思っていた方はトランザクション分離レベルを理解してください。

“不整合が起きてはならない場合、トランザクションはシリアライザブル” の続きを読む

いちばんやさしいPHPの教本

一番やさしいPHPの教本」を献本いただきました。表紙に書いてある通り、パソコンさえつかえれば知識ゼロではじめても挫折せずに動くプログラムが作れます。最初の一歩を踏み出すための本なのでこれだけで十分とは言えませんが、初めてWebアプリを作ってみたい、という方にはぴったりの本だと思います。

DSC_0339
DSC_0339

“いちばんやさしいPHPの教本” の続きを読む

VMWareのWindowsがBSoD(ブルースクリーン)でクラッシュする場合の対処

VMWare 11上のWindows 7 VMがBSoD(Blue Screen of Death)で時々クラッシュするので困っていたのですが、少し大きなファイルをネットワークを使ってコピーなどするとクラッシュするようになり使い物になりませんでした。対処方法が分ったので書いておきます。

“VMWareのWindowsがBSoD(ブルースクリーン)でクラッシュする場合の対処” の続きを読む