3 posts tagged “security”
ブラウザのアドレスバーに表示された URL というのは,(hosts や DNS が信頼できる限り) 現在自分がどこにいるのかを容易に知ることができる唯一の情報となる.
見慣れたページ内容であっても URL 中のドメインがいつもと異なればそれは別の誰かが設置したページ (罠) かもしれないし,たとえ鍵マーク付きの HTTPS 通信をしていたからといって URL から目を離しちゃいけない.ましてやアドレスバーの表示されていないポップアップウィンドウなんて最悪だ.ページのプロパティを参照すれば URL を確認できるが,遷移する度にそんな手間はかけられない.故に「アドレスバーを表示しない設計がおかしい」としばしばサイト側は責められた."location=no" と書けるから書いてみただけなのに.
でも,もうそろそろいいだろう.ブラウザ側が対応すれば問題は解決する.Opera は以前から "location=no" でもドメイン名が強制表示されていたようだし,とうとう Internet Explorer 7 ではアドレスバーを非表示にすることができなくなった.これは革命だ!! Firefox も見習うといいよ.すぐに.
話は変わって,ケータイについて.
ケータイでは狭い画面を有効に使うためか,現在表示中の URL をページと同一画面上に表示してくれない.DoCoMo 端末の場合は「URL 表示」というメニューがあって,いつでも URL を参照することができる.SoftBank はよく知らない.J-PHONE 時代は全く URL を参照できなかったように記憶している.Vodafone 以降は DoCoMo 同様「URL 表示」的なメニューのある端末もチラホラ出てきたが,某仕様の所為で常に正確な URL が表示されるというわけではなかったような気がする (それでもドメインは確認できた).
さて,au はどうだろう.最近の au 端末は KCP によってブラウザが共通化され,基本的にどの端末でも同じ仕様になっているハズなので,自分の au 端末 (W51SA) を見てみると少なくとも「URL 表示」というメニューは存在しない.一応,「お気に入り登録」というメニューを選択するとページタイトルおよび URL を参照・編集できるのだが,au の場合ページ内に仕掛けを施すことによってお気に入りへの登録を禁止することができる.こうなっていると無残にも「このページはお気に入りリストに登録できません」と言われてしまい,URL を拝むことができない.冒頭でも挙げたように,URL が参照できないと言うことは自分が今どこにいるのかが分からないということで,非常に Phishing 耐性が低いと言える.EZweb の Google 提携によってオープンサイトへのアクセスが増加している昨今,端末がこのような仕様では自衛もままならない.改善を期待したい.
どうもケータイ文化というものは安易な「隠蔽によるセキュリティ」の上に成り立っているように思えてならない.「URL が見えると危険」,「HTML ソースを見られると危険」,こんな思惑が覗き見えるような気がするのは心が荒んでいる所為だろうか.先のブックマーク禁止仕様も「セキュリティ」の名の元に追加されたのではないかと勘繰っているのだが (MARKABLE 属性は HDML の構造上必要だったのかな?),PC 向けサイト作ってる人間からすりゃ「一連の遷移途中でブックマークされても問題ないように作る」のが当たり前であって,こんな機能に頼ってたらオープンなサイト作れませんよ,みたいな.
ITpro: 本当に怖い「パスワード破り」で SSH サーバに対するブルートフォース攻撃について触れられている.ハニーポット侵入後の挙動なども紹介されていて,(痕跡が改竄されていないのであれば) 非常に興味深い.
確かに,自分が (なんちゃって) 管理しているサーバでも SSH のログイン試行痕跡の量は凄まじい.みんな踏み台探しに余念がないのだ.パスワード認証を禁止してしまえば安全性は劇的に向上するが,そうもいかない場合も多いだろう.パスワード認証を許可している限り「SSH だから安全」ということはなくて,結局はパスワードで身を守るしかない.telnet 時代と比べても傍目には「盗聴されない」くらいしかメリットが感じられないのでは少々心許ない.
記事後半で,攻撃者が用いる辞書に含まれる特殊文字の比率が紹介されているが,
特殊文字の中でも,使用比率にはばらつきが存在し,「-」の比率は特に高かった。パスワードに特殊文字を含めることは重要だが,「-」の使用は控えたほうがよいだろう。
という部分に違和を感じた.何故だろう.「別に控える必要ないじゃん」と思ってしまう.例えばアルファベットの使用頻度が高いからといって「アルファベットの使用は控えたほうがよいだろう」ということにはならない気がする.自ら文字集合を狭めてどうする.
# 諸事情あって nucleus の公開運用に踏み切れないので,それまで Vox にて代用しよう :)
PS3 の発売と同日に neucleus 3.24 英語版が公開された.
3.23 からの修正点は 5 個所で,該当ファイルは ADMIN.php と SKIN.php のみ.ADMIN.php は (名称の通り) 管理画面に関するものなので,基本的には (セッションハイジャックや CSRF 等の攻撃を受けない限り) 悪意のある入力は行われないはずだが,上記エントリを読むに,おそらくグローバル設定の「ビジターにメンバーアカウント作成を許可する」を「はい」に設定 している場合に外部から呼び出されることがあるのだと思う (「はい」にして運用したことがないのでよく分からない).
ADMIN.php の変更点は以下の通り.
- メンバを編集する際に,入力された「表示名」,「本名」,「備考」からタグ文字列が削除されるようになった.
- メンバ一覧表示時に「Web サイト (URL)」の項目がエスケープされるようになった.
- パスワード変更に関する不要なコードが削除された.
- 管理画面下部の copyright 表示方法が変更された.
1 に関しては,表示時には適切にエスケープされているようなので意図がよく分からない (他の項目と処理を合わせた?).更に,処理が適用されているのはメンバ編集の時だけで,メンバ追加の際には削除されない (なぜ編集時だけ?).2 は XSS 対応 (*後述) で,3 と 4 は特筆するまでもないと思う.
SKIN.php の変更点は以下の通り.
- スキン変数 blogsetting/member の表示時にエスケープされるようになった (全ての引数に対して適用).
こちらも XSS 対応だと思うが,ADMIN.php/SKIN.php 共にエスケープ処理として
echo htmlspecialchars($str);
という手続きを行っている.htmlspecialchars のデフォルト quote_style は ENT_COMPAT なので,このままだとシングルクォーテーション記号がエスケープされない.ここは
echo htmlspecialchars($str, ENT_QUOTES);
としないと,スキン変数が HTML 属性内でシングルクォートされている場合に XSS 攻撃を許してしまうだろう.
いっそのこと,htmlspecialchars は以下の関数を定義して全て置き換えてしまいたい.
function h($str)
{
return htmlspecialchars($str, ENT_QUOTES);
}
というか,PHP Web アプリケーションを書き始める時はまずこの関数から書き始めるとか,いっそのこと htmlspecialchars のデフォルト第二引数を ENT_QUOTES になるよう PHP をリコンパイルするとか (無理).
とはいっても,nucleus (に限らず多くの PHP Web アプリケーション) では第二引数なしの htmlspecialchars 呼び出しが濫用されているのだし,抜本的に改善するのは難しいだろう.書きながらちょっと絶望的な気分に浸ってみたり :P
まぁ,nucleus のような Web アプリケーションが受け得る XSS 攻撃といえば
- 悪意あるリンク等から nucleus サイトに遷移した (させられた) 際に,サイトが意図せぬ表示内容になる可能性がある.
- 悪意あるリンク等から nucleus サイトに遷移した (させられた) 際に,攻撃者に管理画面を乗っ取られる可能性がある.