分みなさん,はじめまして。はせがわようすけと申します。最近,文字コードと関連したセキュリティの話題を目にすることが増えてきました。文字コードを利用した攻撃は技術的に未開拓ということもあり,参考となる情報がなかなか見当たりません。この連載では,文字コードを利用した攻撃やそれに対する対策について正しい知識を解説していきます。文字コードとセキュリティが関連するもっとも大きな点は,やはり文字列の比較でしょう。「危険な文字列の検出」「安全な文字列であることの確認」といった文字列の比較は,セキュリティを考えるうえで避けて通れない処理だと思います。文字列の比較においては,単純にバイト列を比較するだけでは不十分で,文字列がメモリ上でどのようなバイト列として格納されているのか(このルールを符号化方式あるいは文字エンコーディングと言います)に注意しなければならないこともあるでしょう。攻撃者は巧みに文字コードを操ることにより,文字列の比較処理において本来不一致であるものを一致させ,あるいは検出されるべき文字列をかいくぐるといったことが可能になります。文字コードを利用したトリックは,比較の一致・不一致といったソフトウェアの処理上の問題だけでなく,人間に対する視覚的な効果という点でも強く影響を与え,攻撃者にとっての強力な道具となり得ます。いった,文字コードが引き起こすセキュリティ上の問題について近年特に目にする機会が増えてきた背景には,もちろんWebアプリケーションの著しい成長があると思います。WebブラウザはHTMLやXMLをはじめとするテキストデータを大量に扱う巨大なテキストパーサであり,データを適切に解釈するために文字コードは重要な位置を占めていますので,文字コードに関する処理が適切でない場合にはセキュリティ上の問題に直結することも多々あります。Webアプリケーション以外のローカル環境上で動くアプリケーションであっても,EUC-JPやShift_JISといったレガシーなエンコーディングからUnicodeへ遷移している現状において様々な混乱が生まれ,場合によってはセキュリティ上の問題を引き起こすこともあります。このような背景事情を踏まえ,今回および次回でUTF-7によるクロスサイトスクリプティング(XSS)という話題について説明したいと思います。UTF-7によるXSSの話題は,Webアプリケーションのセキュリティに関わっている方なら一度は聞いたことがあるかと思いますが,まだまだきちんとした解説は少ないようですので,この記事を読んだ人にはUTF-7によるXSSは二度と発生させない,というくらいの意気込みで徹底的に説明しておきたいと思います。charset=EUC-JPのいずれかを出力することで完全に防ぐことができます。これ以外にもUTF-7によるXSSが発生しない条件は多々ありますが,できる限りシンプルで覚えやすいルールということで,「レスポンスヘッダで」「この3種類のcharsetのいずれかを指示」の2つの条件を覚えておいてください。これがなぜ完全な対策になるのか,そもそもUTF-7によるXSSはどのようなときに発生するのかを詳細に説明していきます。UTF-7とはUTF-7は符号化方式のひとつで,Unicodeのすべての文字を7ビットで表現できます。メール環境での利用が想定されていましたが,現在のUnicode規格からはすでに削除されています。明記されており,UTF-7という符号化方式は現在は標準的には利用されていません。すべての文字を7ビットで表すために,英数字と一部の記号を除き,base64をもとにした方法で各文字が符号化されます。+ADw-/script+AD4-のようになります。このように,UTF-7では「<」「>」「"」といったメタキャラクタを直接記述せずにそれらの文字を表すことができます。Explorerで閲覧している際に攻撃対象となります。文字エンコーディングが不明瞭なWebアプリケーションにおいて,先に示したように「+ADw-script+AD4-」のような文字列を生成させておき,その状態でIEに「このHTMLはUTF-7である」と認識させることでXSS攻撃が成立します。Webアプリケーション上では「<」「>」などを正しくエスケープしているにもかかわらず,ブラウザ側で「<」「>」と同じ意味を持つバイト列を挿入するという,まさに冒頭で述べたような「比較検出のすり抜け」が行われているのです。,「文字エンコーディングが不明瞭」とは具体的にどのような状況なのかというと,以下のような条件のいずれかに該当するときです。レスポンスヘッダ,meta要素のどちらでもcharsetが指定されていないcharsetにIEが解釈できないエンコーディング名が指定されているmeta要素でcharsetを指定しているときに,meta要素より前に攻撃者が文字列を挿入可能このようなWebアプリケーションでは,攻撃者はIEに文字エンコーディングをUTF-7であると誤認させることができますので,XSSが成立してしまいます。次回以降で,UTF-7によるXSSが発生するメカニズムについて引き続き説明していきます。Unicodeなどの文字コードが引き起こすセキュリティ上の問題点について調査・研究を行っている。はじめソフトウェア製品およびWebアプリケーションに関する脆弱性を多数発見。そこにはヒットメーカーの極意があった噂の超高速分析データベースを試してみよう~ログ解析,機械学習なんでもござれ~ワールドワイドで3,500社以上が活用しているビッグデータ高速分析用のデータベース「Vertica」。クエリ性能を簡単に数百倍にする術をご紹介します。「JIRA」をはじめとするアトラシアンのツール群。多くのオープンソースソフトウェアを継続して提供する支えとなっている使い易さを探ってみます。Cloud」が,いよいよ日本でのサービスを本格的に開始します。その他の連載CSS3アニメーションでつくるインターフェイス表現CSS3によるアニメーション表現を紹介していきます。その中でも,幅広い読者に応用してもらえるだろうインターフェイスを主なお題とします。MySQL道普請便り本連載では,MySQLを使ったアプリ開発・運用に関するノウハウをご紹介していきます。RecipeUbuntuの強力なデスクトップ機能を活用するための,いろいろなレシピをお届けします。JavaScriptセキュリティの基礎知識JavaScriptに関するセキュリティ上の問題はどこで発生し,どうすれば防ぐことができるのか?について解説していきます。〜システムをきちんと運用するための基礎知識システムは「作って終わり」ではなく,運用の中でさまざまな問題が発生します。問題の発生に備えて事前にどのような対応をしておくべきなのか,問題発生時に何をしなければならないのか,ポイントを解説していきます。きたみりゅうじの聞かせて珍プレーソフトウェア開発の現場で体験したトホホな失敗,思わずうなる珍プレーをきたみりゅうじ氏が四コママンガで紹介。Linuxのメンテナンスの傍ら,Linuxやオープンソースソフトと日々を過ごす著者が,その魅力とつきあい方を,エッセイ風味でお届けします。PRESS特別編集部員,さわやか笑顔のスーパーハカーはまちちゃんとネット大好き14歳わかばちゃんが,毎号,読者の皆さんから寄せられたおたよりを紹介します。皆さんの日頃の悩みにも答えちゃいますよ。]メールでのお知らせメールで次の案内をお送りしております。メールの配信を希望する方は,利用したい項目をチェックしてメールアドレスを入力し,[登録]ボタンをクリックしてください。UPDATES[ほぼ週間に1回]新刊メールマガジン[ほぼ週間に1回]電脳会議の各号案内[ほぼ1ヵ月半に1回]※変更する場合や停止する場合は,登録情報変更ページをご覧ください。※登録いただいたメールアドレスには,そのお知らせ以外,配信いたしません。Ltd.ページ内容の全部あるいは一部を無断で利用することを禁止します。個別にライセンスが設定されている記事等はそのライセンスに従います。