攻撃者が”嫌う”セキュリティ対策とは何か?
「攻撃者が”嫌う”セキュリティ対策=効果的なセキュリティ対策」です。これに異論は無いと思います。
攻撃者が最も困るセキュリティ対策とは何でしょうか?それは境界防御です。なぜ境界防御が攻撃者が最も困るセキュリティ対策なのでしょうか?それはCWEやCVEを見ればわかります。CWEやCVEに登録されている脆弱性の多くが、境界防御で守れるからです。
「攻撃者が”嫌う”セキュリティ対策=効果的なセキュリティ対策」です。これに異論は無いと思います。
攻撃者が最も困るセキュリティ対策とは何でしょうか?それは境界防御です。なぜ境界防御が攻撃者が最も困るセキュリティ対策なのでしょうか?それはCWEやCVEを見ればわかります。CWEやCVEに登録されている脆弱性の多くが、境界防御で守れるからです。
今回は一部の技術者が勘違いしているセキュリティ概念の話です。技術者とはWebアプリケーションのソフトウェア技術者を指していますが、他の分野の技術者にも同じ勘違いが多いかも知れません。常識であるべき知識が常識でないのが現状のようです。全ての技術者が知っておくべきセキュリティの基礎知識です。
残念ながらセキュリティ対策の定義どころか、プログラムの構造・動作原理も正しく理解されていないと言える状態です。
ソフトウェア開発には膨大な知識が必要です。目的(ソフトウェアを作ること)以外の知識を取り入れる機会や余裕が無かった方も多いと思います。セキュリティ基礎知識を知らなかった方、安心してください!基本は簡単です。一度知ってしまえば忘れるような難しい事ではありません。勘違いしていた方、問題ありません。正しい知識を身に付ければ良いだけです。誰にでも勘違いはあります。
思い違いをしやすい部分を、かい摘んで解説します。
追記:ホワイトリストの基本中の基本は”デフォルトで全て拒否する”であることに注意してください。全て拒否した上で、許可するモノ、を指定しないとホワイトリストになりません。
ここでのセキュリティはITセキュリティを意味しています。
参考:
こちらも合わせてご覧ください。
とくに IPAは基礎的誤りを明示し、正しい原則を開発者に啓蒙すべき は開発者であれば、目を通しておく方が良いです。IPAが10年以上も原理的に誤ったソフトウェアセキュリティ対策を啓蒙していました。今もその影響が大きいです。
HTTPセッション管理はWebセキュリティの中核と言える機能です。Webセキュリティの中核であるHTTPセッション管理に設計上のバグがある事は少なくありません。今回のエントリはPHP Webアプリ開発者ではなく、主にWebフレームワーク側の開発者、つまりPHP本体の方に間違いがあるという話しです。Webアプリ開発者の回避策も紹介します。
まずセキュリティの基本として「入力のバリデーションを行い、正当な入力のみを受け入れる」があります。しかし、PHPに限らず多くのセッション管理機構は当たり前の「入力のバリデーションを行い、正当な入力のみを受け入れる」を行っていません。セッションIDの再生成(リセット)も不完全な物が多いと思います。
参考:
CRIMEやBREACHといったSSL暗号を無効化する攻撃を知っている方は多いと思います。しかし、その仕組みや攻撃方法は広くは理解されていないようです。Webシステムに関わる方であれば、BREACH攻撃の原理と対策を理解しておいて損はありません。BREACHや類似の攻撃は全く難しくありません。直ぐに理解できると思います。原理は簡単です!
もっと読む
PHP 5.6からタイミング攻撃に対する対策が導入されます。メジャーなアプリケーションはタイミング攻撃対策が導入されていますが、PHP 5.6から簡単に対策できるようになります。
タイミングセーフな文字列比較関数はhash_equalsとして実装されました。
http://php.net/manual/es/function.hash-equals.php
色々やることがあってブログを更新できていませんでした。久々のブログはPHPのOpenSSL関数を使ってAES-256-CBCを使って暗号化する例です。今時のハードウェアとソフトウェアならハードウェアAESが利用できるので普通はAES-256-CBCで構わないでしょう。
もっと読む昨日はHTTPヘッダーのセキュリティについて解説しました。SMTPはHTTPと似た構造を持つため、メールを送信する場合も似たようなヘッダーインジェクション問題が発生します。
もっと読む
テキストインターフェース処理の基本でもう書いてしまいましたが、今回はHTTPヘッダーインジェクションの解説です。
もっと読む
Webアプリは基本的にテキストインターフェースを利用して構築します。HTML、JSON、SQL、XML、XPath/LDAPクエリ、HTTP、SMTP、これら全てテキストインターフェースです。
今日はインターフェースとテキストインターフェースの基本を紹介します。
基礎、基本が大切です、とブログに書いてきました。しかし、情報セキュリティを語る上で最も基礎的と言える情報セキュリティの概念について、まだ書いていません。今日は情報セキュリティの用語の定義、概念を紹介します。
用語の定義、概念レベルで認識の違いがあると、コミュニケーションはなかなか成り立ちません。情報エンジニアは次々に現れる新技術や日々の業務に追われ、情報セキュリティの概念について学ぶ機会はなかったと思います。一般の教育機関は勿論、情報セキュリティ教育・対策を専門で行う組織であっても目の前にある個々の脆弱性対策教育に追われ概念の解説を行えない状況でしょう。
この結果、異なるITセキュリティの概念が幾つも生まれ、コミュニケーション自体が難しくなっている状況にあると思います。特に情報セキュリティ対策の定義は重要であるにも関わらず、あまり浸透していないように思えます。このエントリが少しでもこの状況を改善する一助となれば幸いです。
もっと読む
インジェクション攻撃には様々な手法があります。メモリ管理をプログラマが行うC言語などではメモリにインジェクションするバッファローオーバーフロー/アンダーフロー、テキストベースのインターフェースではテキストインジェクション(JavaScriptインジェクション、SQLインジェクションなど)があります。
これらのインジェクション脆弱性はなぜ発生するのでしょうか?
今回は「インジェクション対策、基礎の基礎」の話です。
いつも堅苦しく「こうするほうが良い」とばかり書いているので、たまには「あまり良くない」と言われているセキュリティ対策も、有用かつ必要である例を紹介します。サニタイズの話です。
サニタイズ(Sanitize)とは消毒、汚れた物を綺麗にする事を意味します。汚れた物、つまり悪い物を除去・変換して綺麗にする処理がサニタイズ処理と言われています。悪い物を定義し排除する典型的なブラックリスト型の処理です。ブラックリスト型の処理を行うと「悪い物」の指定に「漏れ」が発生しやすく、間違いの元なのでセキュリティ処理では基本的に使わないことが推奨されています。
「サニタイズはするな!」これはほとんどの状況でサニタイズしない方が安全になる可能性が高くなるので正しいと言えます。しかし、これは全ての状況で正しいでしょうか?
SANS TOP 25 の解説はもっと後で行うつもりでした。しかし、現在のアプリケーション開発者向け教育に対する疑念のエントリへの反響が大きいようなので書くことにしました。
やるべきセキュリティ対策には優先順位があります。効果が大きい対策から行うべきです。セキュリティ対策は全体的に行うべきものですが、最も効果的な対策を除いて対策を行うようでは全体的な対策など行えません。
もっと読む
OSコマンドのエスケープの続きです。OSコマンドインジェクションを防ぐための、OSコマンドのエスケープはSQLのエスケープに比べるとかなり難しいです。
難しくなる理由は多くの不定となる条件に依存する事にあります。
もっと読む
プログラムからOSコマンドを実行する場合、エスケープ処理を行わないと任意コマンドが実行される危険性があります。
今回はOSコマンドのエスケープについてです。