人間になりすますウェブ巡回プログラム

人間になりすますウェブ巡回プログラム

こんな記事があったとは。ホフマン氏は今回開発したプログラムを公表したとのことですけれど、ううむ。チューリングマシンかぁ。中国語の部屋かぁ。「ホフマン氏が発表したアプリケーションがあれば、格段に簡単な手順で、しかも迅速に脆弱性を見つけられる」とボール氏、とのことですけれど。スロースキャンですよね、いわゆる。それの人工知能版。激しく興味深いと共に、賢いスロースキャン対策ってどうするんだろうとか思ったり。サーバーサイドの防衛側が人間の目でログを追う時代はとうに過ぎ去っていることを改めて痛感。

イメージリプレイスメントと XSS 対策

イメージリプレイスメント

北村曉さんのものしたCSS Nite Vol.5と、画像置換について考えたこと::徒書を拝見しつつ、画像置換(=イメージリプレイスメント)について以前より調べたり考えていたりすることをちょっとだけ。

イメージリプレイスメントについては、下記が私の情報源。各ブラウザ別の実装の一覧表やスクリーンリーダー周りの考察などアクセシビリティユーザビリティ関連の考察も一部あって、勉強したいなあと思っておりました。順不同ですので適宜。ちなみにCSS周りであちこち引用されているmooseさんのサイトのページは引越してあるみたいなので以下のリストの最下部に。

イメージリプレイスメントXSS対策

CSS3 content property は実は Operaについては Opera7 の頃から既に実装済みなんだそうで。例えば以下のように。

<style>
h1 {
	font-size: 36px;
	content:  url(/css/archive/screen/x-text.png);
	margin: 20px auto;
	width: 400px;
	display: block;
}
</style>
<h1>Thomas Hardy</h1>

まぁ一番綺麗な書き方ですよね。ブロックの大きさやらfont-size固定は微妙とか思いますが、充分に考えておけばいいのかな?うむ。さまざまな Image Replacement のノウハウの大半は HTML に余計なものを付加したり、スクリーンリーダーでアウトだったり、スタイルシートオンで画像オフだと本末転倒にもテキストが読めなかったりして欠陥があるわけですが、CSS3 content property はそれらを克服できるわけでして。で、Opera7 の時代からサポートされていたということで。Operaで以下を閲覧してソースを読めばよくわかると思います。

さて、XSS対策の要点ですが、content property でウッカリ、JavaScript擬似スキームの存在を許してしまったりすると大変だよ?というところです。このことを指摘している文書をあんまり見ていないので…

url()の中身におけるURIのスキームとしてhttpとhttpsしか明示的に許さないホワイトリスト方式を使っているようなシステム(例えばはてなダイアリー)ならば、この意味での、XSS脆弱性はないと明言できます。これはIPAが推奨している方式でもあります。

一方、HTML文書の中の危険文字列の"javascript"等をブラックリストにあげているものの、特に構文解析せずに、平たくなめていって、javascript無効化処置をするようなセキュリティ対策をしているケースであるならば(スタイル記述を許している中では多数派ですけれどね)Operaの場合、ある特定の方法で防衛対策を回避出来てしまうことがあります。

Opera software の hallvors氏によれば、We'll just drop javascript: support for CSS URL altogether..とおっしゃっています。 content property ばかりでなく、例えば、background property などでもJavaScript擬似スキームの混入が無意味となってきますので歓迎したいところです。ところで、img要素でも退治してくれるのかなぁ?(わくわく)つうか他のブラウザでも是非そうして下さい。スタイルシート記述からスクリプトを呼び出せることは本来あってはならないはずですので。スクリプトからスタイルを動的に替えることは、まぁ、正統派の DHTML として許容できますし、また、XSS対策の上でも、それほど難しく考える必要も無いところではあります。

既に挙げた北村さんの記事中に

Motohikoさんによると、CSS3ではcontentプロパティが拡張され、通常の要素にも適用できるようになるとのこと。なるほどそちら方が良さそうですね。しかもテキストからテキストにも置き換えられるとはすごい。

とあります。テキストから画像、だけではなくて、テキストからテキスト、にもです。

一応CSS3 Generated and Replaced Content Moduleで拡張されるcontentプロパティでは、::before、::afterに加え通常の要素などにも適用できるようになります。値 (computed value) が単一のURIの時、要素・擬似要素の内容を置き換えます。多分こんな感じにすればお望みのとおりになるかと:

要素 { content: url(画像のURI), contents }

対応非対応、存在非存在に関しては記述がありますが、画像ブロックの際の挙動は明確じゃないかも知れません。

# あ、気付いたけどURI値って画像を前提にしてるような気が。

通常の要素の置換
Bug 215083 - Support CSS3 content property replacement of element (rather than pseudo-element)
代替値の列挙
Bug 309217 - support CSS3 content property fallback lists

というわけで、近い?将来の、各ブラウザのCSS3の実装状況によっては、フィルタリングの見直しが必要になりますよね。テキストtoテキストの置換でスクリプト混入された日には大変ですから。まぁ大丈夫のような感触はありますけれどIEとかは油断がなりませぬ。

XSS ばなしと雑談

XSS脆弱性がブラウザ起因のものであったりするとセッション管理を平気で乗り越えてくるヤカラが現われると思います。すなわち、乗っ取りです。個人なり企業なり組織なりのサイトのふりをしてみなさんの情報を盗んだりエセ情報を風説で流したり悪意あるマルウェアを利用者みなさんのパソコンに仕込んだり大変です。

古い話ですので申し上げます。Operaでは、かつてOpera7の初期の頃、スタイルシートの@import記述に欠陥がありました。@importの替わりに、&#64;importでもOK!という不思議な時代が一時的にあったのです。そこを手がかりにしてJavaScript起動も可能だったようです。利用者はXSSの餌食です。こんなものはサーバーサイド管理者側で気がつくはずもありません。と言いますか、なぜに外部スタイルシートでHTMLでもないのに@の数値文字参照が可能だったのか、激しく疑問でした。今は治っていますよ。御安心あれ。それにOperaユーザはこまめに更新をかけますので実質的な脅威は現時点では存在しません。このネタはXSSハックならぬCSSハックの研究サイトで公然化していました。CSSの実装違いを補正する用途としてのブラウザ判定としては筋悪でしたのでCSSハッカーには利用はされなかったようです。XSSクラッカーが悪用したかどうかについては見当もつきません…

ところで、児童小銃のid:rnaさんの20060215の日記の冒頭に、こんにちは! こんにちは!、とあります。例のはまちや氏の仕掛けではありません。これは恐らくid:rnaさんが自分のページにCSSXSSの手法でテストで書き込んだものと推察されます。 http://d.hatena.ne.jp/hoshikuzu/comment?date=20060214#c でのコメントから推察するに、cookieこそCSSXSSでは盗めませんが、なんらかの方法でHTML記述の中のセッションID周辺を盗み出す実験をなさったのでしょう。ブラウザのキャッシュを援用してでしょうから。まぁそのぉプライベートモードで非公開になっているはてなダイアリーの中身を覗き見る手法、それをさらに発展させて擬似的かつCSRFまがいの書き込みの自動化に成功しているのでしょうね。はまちや氏がワームを作るかもしれません。結構あぶないと思いますがどうなんでしょう。根性ないので追試はしていません(ペコリ)

CSSXSSの対策パッチは今月も出ませんでした。

世界的にユーザ数が多い複数のWEBアプリでもIECSSXSS欠陥によってセンシティブな情報がだだ漏れであることを当方確認済みでして、2件ほどIPAにポストしましたが、うち1件は受理すらされていません。ちなみに当日記でも書いたようにCSSXSSとは無関係な各種バーの偽装方法も報告済みなのですが、やはり中の人からのお返事は頂いておりません。両方ともIEのパッチは局所的な影響を押さえればいいだけなので、ひどく簡単そうに思えますが(悩)

CSSXSSIE側の対処策は、サーバーから提供されるスタイルシートのmedia型が、text/css以外、importをしなければ良いだけと思うのですが、どこが難しいのか…ちょっと不満です>マイクロソフト社さん。