Software Design 2015年2月号とインフラエンジニア教本
久しぶりのSoftware Design (ソフトウェア デザイン) 2015年 02月号 [雑誌]
に寄稿させていただきました。テーマは「開発者は、セキュリティ問題を自己解決できるのか?」です。Software Designの見本と一緒に別冊の「インフラエンジニア教本 ~ネットワーク構築技術解説 (Software Design 別冊)」も頂きました。こちらも簡単に紹介します。
久しぶりのSoftware Design (ソフトウェア デザイン) 2015年 02月号 [雑誌]
に寄稿させていただきました。テーマは「開発者は、セキュリティ問題を自己解決できるのか?」です。Software Designの見本と一緒に別冊の「インフラエンジニア教本 ~ネットワーク構築技術解説 (Software Design 別冊)」も頂きました。こちらも簡単に紹介します。
SQLiteはファイルベースのオープンソースRDBMSです。オープンソースとしては珍しいパブリックドメインライセンスを採用しています。SQLiteはファイルベースなのでデータベースサーバーが必要なく手軽に利用できます。SQLiteは組み込みデバイスで広く利用され、Android/iOSなどでは標準的なデータベースとして利用されています。モバイルデバイス以外での利用も広がっており例えば、Drupal8はSQLite3に対応しています。
普通のRDBMSのようにSQLクエリが利用できるのでとても便利ですが、SQLiteの仕様は他のRDBMSと異なるので注意が必要です。
追記:論理的・体系的セキュリティを構築していれば、ここに書かれているようなセキュリティ上問題となる事を自身で分析/対応できるようになります。
昨日書いた安全なAPI過信症候群の処方箋 – execv/SQLite3編はSQLiteの仕様がRDBMSとしてエキゾチック過ぎて、さらっと書いたよくあるRDBMSでの「安全なAPI過信症候群」を全く理解して頂けなかったケースもあるようなのでもう一度書きます。
プリペアードクエリには色々問題もあり、セキュリティ対策としてそれだけ教えるのはNG、と考えている方はプリペアードクエリ過信症候群ではないので、このエントリを読む必要はありません。
またプリペアードクエリなど、安全とされるAPI万能と考えている方に会ったのでエントリを書きました。広く病気として治療すべき、と思いエントリを書きます。安全なAPI過信症候群と名付けました。
安全なAPI過信症候群(同類にプリペアードクエリ過信症候群など):「安全」とされるAPIを使えば安全と、盲目的に信用し考慮すべきリスクを考えない症候群。ITエンジニアが発症し最も重要なセキュリティ対策である入力バリデーションを「必要ない、できない、セキュリティ対策ではない」エスケープは「必要ない、有害である」とする場合、かなり重度の場合が多い。
このブログでは既に何度もプリペアードクエリクエリは不完全である、と指摘しています。プリペアードクエリを使っていれば安全と盲目的に信じている方向けの基礎知識を紹介します。コマンド実行APIのexecvと最も多く利用されているRDBMS、SQLite3が題材です。
現実を知れば安全とされるAPIを盲信することも危険だと解り、安全なAPI過信症候群を完治できると思います。
最近、ファイルアップロード/ダウンロード対策に関する検索が増えているようなので書きました。PHPの場合、スクリプトがアップロードされ実行されてしまうと致命的です。アップロードされたファイルを公開ディレクトリに保存することは好ましくありあせん。しかし、既にそうなっているアプリケーションの場合、改修が困難な時もあります。このような場合もより安全に利用できる設定を紹介します。
参考:「スクリプトアップロード対策」も合わせてどうぞ。
ソフトウェア開発において開発者はセキュリティ問題を自己解決できるのか?それとも自己解決できないのか?どちらが正しいのか考えてみます。
もう十年以上前に書いた本でプロアクティブなセキュリティ対策が重要と書いていたと思います。OWASPのプロアクティブコントロールTOP10を紹介します。
password_hash関数はcrypt関数のラッパーです。パスワードを簡単かつ安全にハッシュ化するための関数です。現在のPHPマニュアルにはpassword_hash関数の重要な制限が未記載であったため追加しました。 もっと読む
Hearbleed脆弱性はSSL接続を処理するサーバーのメモリ内容を盗める脆弱性です。メモリ内には様々な機密情報が含まれています。Webサーバープロセスのメモリ内に保存されている内容は全て盗まれる可能性があります。セッションIDやユーザーのパスワードが盗める場合もあります。Heartbleed脆弱性は任意アドレスのメモリ内容をリモートから自由に読み出す脆弱性なので、サーバーのメモリ内に保存された秘密情報は、SSL秘密鍵に限らず、メモリ内容から盗めます。
影響範囲はシステム構成により異なるので、どのような条件で盗まれるのかまとめました。
ここ数年だけでもSSLに対する攻撃方法やバグが何度も見つかっています。SSLで通信を暗号化していてもパスワード認証時のトラフィックを解読されてしまえば、パスワードが漏洩していまいます。パスワードが判ってしまえば、攻撃者は何度でも被害者のアカウントを利用できます。
脆弱性でなくても、SSLも無効化したMITM(中間者攻撃)も可能です。SSLだから安心、とは考えられません。これを何とかできないか、考えてみます。
参考:
Rubyデフォルトの正規表現では^は行の先頭、$は改行を含む行末にマッチします。PHPのPCREとmbregexでは^はデータの先頭、$は改行を含む行末にマッチします。
この仕様の違いはデータのバリデーションに大きく影響します。
参考: PHPer向け、Ruby/Railsの落とし穴 の続きの解説になります。こちらのエントリもどうぞ。
OpenSSLにメモリを自由に参照できるhearbleedと呼ばれるバグ(CVE-2014-0160)がありました。概要はTechCruchで解説されています。昨日は対応に追われたエンジニアも多いのではないでしょうか?OpenSSLを利用したシステムの場合、影響がある可能性があります。詳しくは
http://heartbleed.com/(英語サイト)
で解説されています。
今回は情報技術者にも役立つ経済学の用語を紹介します。多くのWebアプリケーション開発者、もしかすると他の技術者も知らない合成の誤謬です。「合成の誤謬」(ごうせいのごびゅう)とはもともとは経済学用語で、以下のように定義されています。
《 fallacy of composition 》個人や個々の企業がミクロの視点で合理的な行動をとった結果、社会全体では意図しない結果が生じること。例えば、企業が経営を健全化するために人件費を削減すると、個人消費が減少し、景気の低迷を長引かせる結果となることなど。
注:誤謬(ごびゅう)とは「誤り」「間違い」を意味する言葉です。解りやすく書くなら「合成の誤り」です。あまり一般的な用語ではないと思いますが、経済学用語なのでそのまま使っています。
前のエントリでオーストラリア政府のTOP 35のセキュリティ対策を紹介しました。NSA(国家安全保障局)のセキュリティ策も紹介します。米国の情報機関と言えばCIAが有名ですが、NSAも情報機関として大きな組織です。米国政府の情報セキュリティを担保する機関がNSAです。映画などでもよく出てくる情報機関なのでご存知の方も多いと思います。
SANS TOP 25以外のセキュリティ対策ガイドラインとしてオーストラリア政府のセキュリティ対策ガイドラインを紹介します。