情報セキュリティ教育の実験

情報セキュリティ教育で必要な物は既に判っています。基礎的なセキュリティ対策ではSANS TOP 25のMonster Mitigationsだと思います。(この他に概念の話も必要です)

情報セキュリティに関わっている人で、入力と出力のセキュリティ対策の重要性を解ってない人は居ないはずです。問題なのは広く認知されていない状況にあります。そして効果的な方法はどのような方法であるか、を見つける事でしょう。
“情報セキュリティ教育の実験” の続きを読む

情報セキュリティの概念・用語

基礎、基本が大切です、とブログに書いてきました。しかし、情報セキュリティを語る上で最も基礎的と言える情報セキュリティの概念について、まだ書いていません。今日は情報セキュリティの用語の定義、概念を紹介します。

用語の定義、概念レベルで認識の違いがあると、コミュニケーションはなかなか成り立ちません。情報エンジニアは次々に現れる新技術や日々の業務に追われ、情報セキュリティの概念について学ぶ機会はなかったと思います。一般の教育機関は勿論、情報セキュリティ教育・対策を専門で行う組織であっても目の前にある個々の脆弱性対策教育に追われ概念の解説を行えない状況でしょう。

この結果、異なるITセキュリティの概念が幾つも生まれ、コミュニケーション自体が難しくなっている状況にあると思います。特に情報セキュリティ対策の定義は重要であるにも関わらず、あまり浸透していないように思えます。このエントリが少しでもこの状況を改善する一助となれば幸いです。
“情報セキュリティの概念・用語” の続きを読む

インジェクション対策、基礎の基礎

インジェクション攻撃には様々な手法があります。メモリ管理をプログラマが行うC言語などではメモリにインジェクションするバッファローオーバーフロー/アンダーフロー、テキストベースのインターフェースではテキストインジェクション(JavaScriptインジェクション、SQLインジェクションなど)があります。

これらのインジェクション脆弱性はなぜ発生するのでしょうか?

今回は「インジェクション対策、基礎の基礎」の話です。

“インジェクション対策、基礎の基礎” の続きを読む

サニタイズは絶対的な悪か?

いつも堅苦しく「こうするほうが良い」とばかり書いているので、たまには「あまり良くない」と言われているセキュリティ対策も、有用かつ必要である例を紹介します。サニタイズの話です。

サニタイズ(Sanitize)とは消毒、汚れた物を綺麗にする事を意味します。汚れた物、つまり悪い物を除去・変換して綺麗にする処理がサニタイズ処理と言われています。悪い物を定義し排除する典型的なブラックリスト型の処理です。ブラックリスト型の処理を行うと「悪い物」の指定に「漏れ」が発生しやすく、間違いの元なのでセキュリティ処理では基本的に使わないことが推奨されています。

「サニタイズはするな!」これはほとんどの状況でサニタイズしない方が安全になる可能性が高くなるので正しいと言えます。しかし、これは全ての状況で正しいでしょうか?

“サニタイズは絶対的な悪か?” の続きを読む

開発者は必修、SANS TOP 25の怪物的なセキュリティ対策

SANS TOP 25 の解説はもっと後で行うつもりでした。しかし、現在のアプリケーション開発者向け教育に対する疑念のエントリへの反響が大きいようなので書くことにしました。

やるべきセキュリティ対策には優先順位があります。効果が大きい対策から行うべきです。セキュリティ対策は全体的に行うべきものですが、最も効果的な対策を除いて対策を行うようでは全体的な対策など行えません。
“開発者は必修、SANS TOP 25の怪物的なセキュリティ対策” の続きを読む

OSコマンドのエスケープ – シェルの仕様とコマンドの実装

OSコマンドのエスケープの続きです。OSコマンドインジェクションを防ぐための、OSコマンドのエスケープはSQLのエスケープに比べるとかなり難しいです。

難しくなる理由は多くの不定となる条件に依存する事にあります。
“OSコマンドのエスケープ – シェルの仕様とコマンドの実装” の続きを読む

そもそもエスケープとは何なのか?

まずエスケープ処理について全て書こう、ということでPHP Securityカテゴリで様々なエスケープ処理について書いてきました。しかし、「エスケープ処理とは何か?」を解説していなかったので解説します。

エスケープ処理は文字列処理の基本中の基本です。

「エスケープは要らない、知る必要もない」という意見を稀に聞きますが、プログラムに於ける文字列処理とその重要性を理解していないからでしょう。全ての開発者はエスケープ処理の必要性を理解し、確実かつ適切にエスケープできなければなりません。
“そもそもエスケープとは何なのか?” の続きを読む

オレオレSQLセキュリティ教育は論理的に破綻している

ツイッターでの議論を見て「SQLエスケープを教える必要はない」とする原因は「教育の基本」と「セキュリティの基本」の理解不足が「根本的な原因」だと解ってきました。この事についてもブログを書くかも知れませんが、今日は「オレオレSQLセキュリティ教育」、言い換えると「自分の環境に特化したSQLセキュリティ教育」について書きます。一般論・基礎としてのセキュリティ教育は、自分の環境に特化したセキュリティ教育では困る、という話です。

このエントリは「貴方が普段言っている事が間違っている」と非難または攻撃しているのではありません。実務で「プリペアードクエリ・プレイスホルダ・ORMを使いましょう」と言うことは全く間違っていません。セキュリティ教育はこういう手順で教えたほうが解りやすいです、と提案しています
“オレオレSQLセキュリティ教育は論理的に破綻している” の続きを読む

エスケープファースト、この順序は変えられない

アプリセキュリティ対策の根本的なセキュリティ対策は教育です。セキュリティ対策を教育する場合、エスケープファースト(エスケープを一番)にすると最も高い効果を期待できます。汎用性もあり、自己解決する能力も付きます。

“エスケープファースト、この順序は変えられない” の続きを読む

PHP文字列のエスケープ

PHP文字列をテキストとして出力したい場合もあります。PHPの文字列型はバイナリセーフなのでどのようなデータでも保存可能ですが、プログラム中でPHP変数をPHPのテキスト(リテラル)として出力するにはaddslashes()によるエスケープ処理が必要です。

【重要】エスケープ/API/バリデーション1は出力先に合った方法でないと意味がないです。一口にHTMLと言っても複数の”コンテクストがあります。

  • JavaScript(識別子、変数など)、CSS、タグ属性名、タグ属性値(URIコンテクストに特に注意。BASE64、JavaScriptを使う場合もある)

があります。
SQLクエリと言っても

  • 引数(更にLIKE、正規表現、JSON、XMLなどに別れる)、識別子、SQL語句

などがあります。全てのテキストインターフェースにコンテクスト2があります。
それぞれの”コンテクスト
に適切なエスケープ/API/バリデーションを利用しなければ意味がありません

“PHP文字列のエスケープ” の続きを読む

ジョブセキュリティ:セキュリティ業界の為のセキュリティ対策ではありませんか?

追記:このエントリの背景となる根拠の一部となる開発者は必修、SANS TOP 25の怪物的なセキュリティ対策に書きました。こちらも合わせてご覧ください。

今日のエントリは「セキュリティ業界ジョブセキュリの為のセキュリティー対策になっていないか?」という話です。

ジョブセキュリティ

知らないと仕事にならないような、雇用を守る作用を持つ手法や知識のこと。

セキュリティ対策は様々な対象を守る為に行いますが、このエントリではアプリケーションセキュリティを維持することだけを考えます。

“ジョブセキュリティ:セキュリティ業界の為のセキュリティ対策ではありませんか?” の続きを読む

IPAの「安全なSQLの呼び出し方」が安全になっていた

IPAは「安全なSQLの呼び出し方」(PDF)を以下のURLから公開しています。

http://www.ipa.go.jp/security/vuln/websecurity.html

「安全なSQLの呼び出し方」は危険である、とするエントリを書こうかと思い、内容を確認するとそうでもありませんでした。

訂正:ツイッターで徳丸氏に確認したところ、徳丸氏もエスケープを含めたSQLインジェクション対策が必要であると考えられていた、ことを確認しました。徳丸氏にはセキュリティ専門家として大変不名誉な記述であった事を訂正し、深くお詫びいたします。内容についての修正は、識別子エスケープについてブログに書くとの事でしたのでブログの内容を確認してから修正します。

別冊の「安全なSQLの呼び出し方」は基本中の基本である「正確なテキストの組み立て」によるセキュリティ対策も解説しており、概ね安全な解説書になっています。

“IPAの「安全なSQLの呼び出し方」が安全になっていた” の続きを読む

根本的なセキュリティ対策とは?

何年間も下書きのまま塩漬けになっていたエントリを多少修正して公開します。

プログラミングではホワイトリスティングが基本ではプログラミング/システム開発とセキュリティに対する基本的な考え方をまとめて説明していませんでした。手短にこれらの基本的な考え方・解決策を紹介します。

このエントリでは「アプリケーション開発における根本的なセキュリティ対策」を考えています。

“根本的なセキュリティ対策とは?” の続きを読む