[-]=======================================================================[-] Wizard Bible vol.25 (2006,4,6) [-]=======================================================================[-] x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x ---- 第0章:目次 --- x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x ○第1章:ピッキングツール作成方法 copyman 著 ○第2章:LogoVistaプロクシ Forging 著 ○第3章:ハニーポットを作ろう(連載第9回) Narusase 著 ○第4章:HTMLで作るWEBサイト 〜 第1回 〜 Defolos 著 ○第5章:ハッカーの達人で吠える MaD 著 ○第6章:開発者のための正しいCSRF対策 金床 著 ○第7章:お知らせ ○第8章:著者プロフィール x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x --- 第1章: ピッキングツール作成方法 --- 著者:copyman x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x ■0x01.) はじめに  数多くのピッキングネタがWBにも投稿されてるわけですが、実際にやってみよ うと思ってもピッキングツールがないことには始まりません。しかし、買うとな ると、ほとんどの場合海外サイトで注文することになってしまいます。出費が痛 いという私のような貧乏学生や、海外の取引は不安という理由などで買い渋って る人も数多くいると思います。そこで、ピッキングツール作成方法を紹介したい と思います。  ピッキングツール作成方法については、セキュリティアカデメイアの特別講座 <ピッキング編>でも書かれているので、あわせて見ていただくとわかりやすい と思います。 ・特別講座<ピッキング編> http://www.akademeia.info/main/lecture3/tokubetu_picking.htm ■0x02.) 必要な物  ピッキングツールを作成するにあたって、必要な材料・工具を紹介します。ち ゃんと作ればどれでもピッキングはできるので、身近にある物で作ってみてくだ さい。それが使いにくかったり不満があったら違う物で試してみましょう。  材料説明の項目は次の通りです。  ・詳細:私が使った物の詳細  ・値段:材料1個あたりの値段  ・本数:1個から作れるピック又はテンションの本数  ・強度:素材の強度ではなく、出来上がった物の強度  ・加工のしやすさ:手間等を含む加工の難易度  ・使いやすさ:個人的な使いやすさの感想  ・必要な工具:加工に必要な工具  ・備考:その他の情報 ●ピック用材料 ○安全ピン、クリップ、ヘアピン ・詳細:どこにでもある普通の物 ・値段:10円以下 ・本数:1本 ・強度:△ ・加工のしやすさ:○ ・使いやすさ:× ・必要な工具:ペンチ×2 ・備考:ペンチで曲げるだけでOK     本格的な物を期待してはいけない     一応作ってみて応用力を高める程度の物 ○ピンセット ・詳細:100円ショップダイソー「ステンレス製ピンセット」切手用 ・値段:100円 ・本数:2本 ・強度:○ ・加工のしやすさ:△ ・使いやすさ:○ ・必要な工具:ルーター ・備考:切手用ピンセットなら曲げる必要がない     学生なら学校から拝借すればタダ ○金ノコの刃 ・詳細:100円ショップダイソー「フレーム用鋸替刃」 ・値段:25円 ・本数:2〜3本 ・強度:○ ・加工のしやすさ:△ ・使いやすさ:○ ・必要な工具:ルーター ・備考:ピックならこれがオススメ     加工に手間がかかるのが難点     個人的に一番使いやすい ○ワイパーの芯 ・詳細:NWB「ワイパー用替えゴム」525mm ・値段:350円 ・本数:4〜5本 ・強度:○ ・加工のしやすさ:○ ・使いやすさ:△ ・必要な工具:ルーター ・備考:これもかなりオススメ     一番加工しやすい     細いので使いづらいのが難点     廃車から拝借してくればタダ     気合を入れてその辺の車から拝借してくる手もある ○バーベキューの串 ・詳細:100円ショップダイソー「ステンバーベキュー串」串の形:平 ・値段:25円 ・本数:2〜3本 ・強度:○ ・加工のしやすさ:△ ・使いやすさ:△ ・必要な工具:ルーター ・備考:太いので細くしないと鍵穴に入らない     それゆえ加工の工程が長くなり面倒くさい ●テンション用材料 ○安全ピン、クリップ、ヘアピン ・詳細:どこにでもある普通の物を使いました。 ・値段:不明、とにかく安い。 ・本数:1本 ・強度:× ・加工のしやすさ:○ ・使いやすさ:× ・必要な工具:ペンチ×2 ・備考:ペンチで曲げるだけでOK。     ただし本格的な物を期待してはいけない     一応作ってみて応用力を高める程度の物 ○ピンセット ・詳細:100円ショップダイソー「ステンレス製ピンセット」切手用 ・値段:100円 ・本数:2本 ・強度:○ ・加工のしやすさ:△ ・使いやすさ:△ ・必要な工具:ルーター、ペンチ×2 ・備考:ダブルディスクテンションが作成できる     学生なら学校から拝借すればタダ ○金ノコの刃(テンション) ・詳細:100円ショップダイソー「フレーム用鋸替刃」 ・値段:\25円 ・本数:2〜3本 ・強度:× ・加工のしやすさ:△ ・使いやすさ:○ ・必要な工具:ルーター、ペンチ×2 ・備考:強度に問題あり     熱してから曲げないと折れる ○ワイパーの芯 ・詳細:NWB「ワイパー用替えゴム」525mm ・値段:350円 ・本数:4〜5本 ・強度:○ ・加工のしやすさ:○ ・使いやすさ:○ ・必要な工具:ルーター、ペンチ×2 ・備考:テンションならこれがオススメ     ペンチで曲げるだけで完成     非常に曲げやすく、強度も及第点     廃車から拝借してくればタダ     気合を入れてその辺の車から拝借してくる手もある ○バーベキューの串(テンション) ・詳細:100円ショップダイソー「ステンバーベキュー串」串の形:平 ・値段:25円 ・本数:2〜3本 ・強度:○ ・加工のしやすさ:△ ・使いやすさ:○ ・必要な工具:ルーター、ペンチ×2 ・備考:かなりの強度     曲げるのには相当力が必要     ガスバーナーがあれば楽に曲げることができる     先端に加工が必要 ○六角レンチ(テンション) ・詳細:不明(家にあったのを使いました) ・値段:100円程度じゃないでしょうか? ・本数:1本 ・強度:○ ・加工のしやすさ:× ・使いやすさ:○ ・必要な工具:パワーのあるルーター ・備考:かなりの強度     それゆえ加工にはパワーのあるルーターが必要     先端が3mm程度の物を買えば手間が省ける ○マイナスドライバー(テンション) ・詳細:100円ショップダイソー「クリアグリップドライバー」3mm ・値段:100円 ・本数:1本 ・強度:○ ・加工のしやすさ:× ・使いやすさ:△ ・必要な工具:強力なガスバーナー ・備考:熱してから曲げないと折れる     熱するには強力なガスバーナーが必要     先端が3mm程度の物を買えば手間が省ける ●工具 ○ルーター  ピッキングツールを作るなら、金属を削る工具が必要です。今回はルーターに 話を絞ってしまいますが、金属が削れるのであればグラインダーでもなんでも代 用できます。  お金をかけたくない場合は100円ショップ「ダイソー」で売っている600円のル ーターがお勧めです。ただし、パワーがないので削るのに根気が必要だったり、 削れなかったりします。また、安物なので壊れる可能性もあります。  多少お金を出しても良いのならSHINKO製の「SHR-300」というルーターがお勧め です(私も使ってます)。こちらはYahooオークションで4000円前後で、送料込み で5000円前後で購入できます。基本的に何でも削れそうで便利です。 ○ルーターの刃  ダイヤモンドカッターもしくは切断用砥石を使います。他にもあれば便利な刃 は多数ありますが、なくてもなんとかなります。基本的にルーターとセットで刃 はついてくると思います。購入する必要があるなら100円ショップダイソーにて1 00円で売ってます、種類も多数置いてあるのでお勧めです。 ○ガスバーナー  硬い金属を曲げるのに必要です。わざわざ買う必要はありません。 ○紙やすり  ルーターで削った部分が角張って手などを切る可能性があるんで、紙やすりで 角を落としておきましょう。200番くらいがちょうどよいかもしれないです。私は 240番を購入しましたが、もうちょっと粗い方がよさそうな感じでした。 ■0x03.) 作業の前の注意点  ルーター使うときの注意点です。まず気をつけて欲しいのが火花です、手にか かっても別段何も感じませんが、目に入ると危険です。安物ルーターとはいえ少 なからず火花は飛び散るので、目を守る物を装着しましょう。作業用ゴーグルが 望ましいですが、ここでの出費を省くために眼鏡でも水中眼鏡でも代用できるも のどんどん使っていきましょう。  火花以外の注意点として、鉄粉が飛び散ることにも注意が必要です。コレも目 に入るのは危険ですので、目を守る物は必ず装着しましょう。しかし、鉄粉は目 だけではなく、口や鼻からも入ってきます。恐らく問題は無いと思いますが、一 応マスクをして作業をしましょう。  長時間にわたって切断や研磨作業をしていると、素材が熱くなります。定期的 に水で冷やす作業が必要ですので、コップなどに水を用意しておきましょう。  最後に、広範囲に鉄粉が飛び散ります、出来れば屋外等の汚しても良い場所で 作業することが望ましいです。それと騒音などの問題もありますので、できれば 日中に作業したいところです。 ■0x04.) ピックの作成  基本的にはルーターで削って、最後に紙やすりをかけて完成です。とはいえ見 本がないと作れないですよね。そこで、Xero-opsさんが作成してくださったテン プレート集を使います。 ・テンプレート集 http://www.akademeia.info/main/sample/046.zip  このテンプレートを印刷して、材料に貼り付けて切り抜きましょう。このテン プレートは目安ですので、これを元に自分なりにアレンジすることもできます。 私の場合先端を小さくしたほうが使いやすかったです。 ■0x05.) テンションの作成  基本的にはペンチで90℃に曲げて、先端を幅3mm程度の板状にして、最後に紙や すりをかけて完成です。4章で紹介したXero-opsさんが作成してくださったテンプ レート集に、テンションのテンプレートもありますので、それを見本に作ります。 曲げるときの注意ですが、熱してから曲げないと折れるものがあります。2章の材 料の所の紹介で、必要な工具のところにガスバーナーとある物は特に熱する必要 があります。それ以外の材料はペンチ2本で挟んで力任せに曲げても恐らく平気で す。ただし、私が使った物と違う物の場合、力任せに曲げて折れてしまうかもし れません。 ■0x06.) ピッキングツール作成動画  4章と5章の説明はかなり簡略化しています。物によって加工の仕方が変わるの で詳細に書くことができないからです。しかし、それではあんまりなので、動画 を紹介したいと思います。これらは既にセキュリティアカデメイアにて紹介され ている動画ですが、ピッキングツールを作るならば一度は見たほうが良い動画で す。 ・ピックとテンション作成 http://www.abeclan.com/makingpicks.wmv ・ピック作成 http://www.akademeia.info/main/douga/sprinfe.mpg ・テンション作成 http://www.akademeia.info/main/douga/springt.mpg ・テンション作成 http://www.akademeia.info/main/douga/aliedt.mpg ■0x07.) ゴムチューブの利用  こちらも既にセキュリティアカデメイアにて紹介されていることですが、自作 のピッキングツールは、元々手に持って使うような物を材料として使っていない ので、長時間ピッキングを行っていると手が痛くなったりします。そこで必要な のがゴムチューブです。私はまだ利用したことがないので詳しくは書けませんが、 セキュリティアカデメイアに詳細が書かれています。 ■0x08.) 最後に  今回はピッキングツール作成方法について書かせてもらいましたが、いかがだ ったでしょうか。今回は簡単な説明しかしていませんが、実際に1本作ってみれば 意外なほど簡単に作れることがわかります。あまり難しく考えずにまず1本作って みてください。このテキストがこれからピッキングを始めようと言う人の役に立 てれば幸いです。  それでは、最後まで呼んでくださった方、ありがとうございました。 x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x --- 第2章: LogoVistaプロクシ --- 著者:Forging x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x ■0x01.) LogoVistaプロクシについて  LogoVistaプロクシ(LogoVista串、翻訳串とも呼ぶ)とは、「コリャ英和」や 「EtoJ」、「X PRO」のWeb翻訳機能であるローカルプロクシが外部から利用でき る状態になっているものです。これらの多くはおそらくパソコンにバンドルされ た「コリャ英和」がそのまま使用可能な状態になっているのではないかと思われ ます。ただし、利用できるのはプロクシ機能だけで、残念ながら翻訳機能は利用 できないようです。  見分け方は、「http://ホスト名:ポート番号/」のようにHTTP接続すると、「L ogoVista Web Translator Error」と表示されます。  通常のWebプロクシとして利用可能なのは当然として、カスケード接続できる場 合があるという特徴を持ちます。よって、LogoVistaプロクシを複数用意したり、 他のプロクシを併用して多段プロクシが可能です。また、速度もそこそこ早いも のが多々あります。 何よりもこの手のプロクシのメリットは、国内プロクシで あり、通常のホスト端末でしかないため、プロクシ規制を回避できる可能性が格 段に高いということです。匿名性の点については、漏れない上に当該パソコンに ログが残るわけではないので一見無敵なようですが、ISPのサーバーのログに足跡 が残るので、完全な匿名というわけにはいきません。 ■0x02.) LogoVistaプロクシ発見のアプローチ  そのような便利なプロクシも見つけられなければ存在しないも同然です。  では、どうやって見つけたらよいのでしょうか? 前述の通りLogoVista製品の 内、「コリャ英和」は一般ユーザー向けで数も多いので、かなり探しやすいかと 思います。特に製品を区別できるわけではありませんが…。一般ユーザーは普通、 ISPのドメインにぶら下がっていますので、これらをターゲットにすればよいこと は容易に想像できます。そこでISPのIPアドレスに対してプロクシのポート番号 が開いているホストが存在しているかどうかをブルートフォース的に調べればよ いでしょう。その作業にはポートスキャナーを使えばよいのですが、ここではPr oxyHunterというツールを用いることにします。 ●注意:「お客様のシステムとネットワークリソースを保護するため、ProxyHunt erのような無差別ポート・スキャンニング・プログラムまたはその他の違法行為 が可能なIPアドレスブロックからの全ての送受信を拒否することがあります」と 宣言しているISPもあります。各自確認の上実行してください。アカウントを取り 消されても当方は責任を負いません。 ■0x03.) ProxyHunterの基本  ProxyHunterは公式配布場所が見つからないのですが、「proxyht」という単語 で検索すると、いくつも転載配布されているファイルが見つかります。バージョ ンは2.8と3.1b1を良く見かけますが、使用上の大きな違いはないと思います。  ProxyHunterはユーザーが指定したサイトに対しユーザーが指定したIPアドレス とポートを通してHTTP接続してGETし、HTTP接続できたか、GET結果に所定の文字 列があるかどうかをレポートする機能を持ったソフトウェアです。  接続先と文字列はデフォルトで設定されたものがありますが、日本のサイトへ の接続で使用するプロクシを探すなら、ヤフージャパンのトップページを指定す るのがよいでしょう。比較用文字列は例えばhtmlヘッダ部の「Yahoo! JA PAN」を指定します。そして、スタートとエンドのIPアドレスと、トライ するポート番号を指定してやれば、順にトライしてくれます。ポート番号は一般 的な「8080」だけ指定すれば十分でしょう。その他の細かい使い方は各自研究し てください。 ■0x03.) LogoVistaプロクシ発見の方法  IPアドレス範囲は闇雲に決めてやればよいというわけにはいきません。間違っ て政府機関のIPアドレスに接続するのは避けたいところです。では、一般ユーザ ーのIPアドレスの範囲をどうやって調達してくればよいのでしょうか? 自分の ウェブサイトを持っている方はアクセスログから抽出すればいいですね。自サイ トは持っていないという方にうってつけの場所はteacupの掲示板です。teacup内 には「みんなの掲示板」という板があり、ソースには投稿者のリモートホストが 記録されています。適当に好みのISPのリモホを取ってきて、JPNICやAPNICのWHO ISサービスに食わせれば、そのISPのIPアドレス範囲がたちどころに戻ってきます。 この得られた結果をProxyHunterにセットして寝る前に仕掛けておけば、朝目覚め たときには複数の使えるプロクシが引っかかってくることでしょう。  結果がGOODのものだけでなく、timeoutのものも保存しておくようお勧めします。 後日のベリファイで使えるようになってることがあるからです。  そして、たまに漏れ串も引っかかるので注意が必要です。  手順をまとめると次のようになります。 1:teacup等でリモホを見繕ってくる。 2:WHOISサービスでISPのIP範囲を調査してくる。  国内ISPであれば拙作の「IPレンジゲッター」でまとめて処理可能する。 3:得られたIP範囲をProxyHunterにセットして実行する。  ProxyHunter2.8であれば拙作ProxyHunterSupportでまとめてセット可能、Proxy Hunter3.*であればProxyHunter3Supportでタスク生成可能。 4.収穫し、拙作の「串検良好」で漏れ串を排除する。  なお、IPレンジゲッター、ProxyHunterSupport、ProxyHunter3Support、串検良 好は「村の鍛冶屋」(http://www.geocities.jp/kajiya_forging/)にて配布して います。 x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x --- 第3章: ハニーポットを作ろう(連載第9回) --- 著者:Narusase x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x ■0x01.) はじめに  前回はhoneydのネットワーク周りの機能について説明しました。  今回はhoneydの個々の仮想PCの設定に関して説明したいと思います。 ■0x02.) 設定ファイル等の準備  今回はhoneydの設定ファイル(test.config)、perlのスクリプト(test.pl)、 bashのスクリプト(test.sh)を使用します。 ----- /usr/local/share/honeyd/test.config create template set template default tcp action reset set template default udp action block set template default icmp action open set template personality "Microsoft Windows XP Professional SP1" set template ethernet "3com" add template tcp port 80 "./test.pl" add template udp port 22 proxy 192.168.1.1:22 add template tcp port 1000 "nmap $ipsrc" add template tcp port 2000 "./test.sh $ipsrc $sport $ipdst $dport" bind 192.168.1.125 template ----- ----- /usr/local/share/honeyd/test.pl #! /usr/bin/perl print "Hoge\n"; print "\n"; print "
\n"; print "This is honeypots\n"; print "
\n"; print "\n"; print "\n"; ----- ----- /usr/local/share/honeyd/test.sh #! /bin/bash echo "SRC=${1},${2} DST=${3},${4}" >> test.log -----  なお、次のように入力して、各ファイルに関してに作成と権限を付加します。 ----- # echo "Log" > /usr/local/share/honeyd/test.log # chmod 755 /usr/local/share/honeyd/test.log # chmod 755 /usr/local/share/honeyd/test.pl # chmod 755 /usr/local/share/honeyd/test.sh -----  また、PerlとSSHが導入されている状態で、SSHサービスが動作していることを 前提とします。 ■0x03.) プロトコルごとのデフォルト動作の設定  さて、それではこれらの設定ファイルを使って、早速honeydを動かしてみまし ょう。起動のためのコマンドでは、honeyd自体が持つWebサーバーの機能を無効に する--disable-webserverオプションを使います。 ----- # cd /usr/local/share/honeyd/ # honeyd -d -f test.config -i eth1 -u 1000 -g 32767 192.168.1.125-192.168.1.126 --disable-webserver -----  設定ファイルの次のような部分ではプロトコルごとのデフォルトの動作を指定 しています。 ----- set template default tcp action reset set template default udp action block set template default icmp action open -----  ここの設定ではTCP、UDP、ICMPの各プロトコルへのアクセスに対してデフォル トではどのように対応するかを設定できます。対応の種類はアクセスを受け付け るopenと、アクセスを受け入れた後に即座に接続を切断するreset、アクセスを無 視するblockがあります。  では実際の動作をみていきましょう。  まず、honeydを起動した状態で192.168.1.125のTCPのポート20〜30をリモート からポートスキャンしてみてください。  すると、すぐに完了して22番ポートが開いているように見えるはずです。  次は、resetとなっている部分をblockに変更し、honeydを再起動してから同様 にポートスキャンしてみてください。 ----- set template default tcp action reset ----- ↓ ----- set template default tcp action block -----  今度は、先ほどとは違い少し余計に時間がかかり22番ポートが開いているよう に見えるはずです。この差はresetの場合即座に接続を切るのに対して、blockの 場合はツールなどがタイムアウトが発生するまで待っていることに起因します。 では、次にICMPに対する設定の確認を行います。 192.168.1.125に対してpingを実行してみてください。 ----- C:\>ping 192.168.1.125 Pinging 192.168.1.125 with 32 bytes of data: Reply from 192.168.1.125: bytes=32 time<10ms TTL=128 Reply from 192.168.1.125: bytes=32 time<10ms TTL=128 Reply from 192.168.1.125: bytes=32 time<10ms TTL=128 Reply from 192.168.1.125: bytes=32 time<10ms TTL=128 Ping statistics for 192.168.1.125: Packets: Sent = 4, Received = 4, Lost = 0 (0% loss), Approximate round trip times in milli-seconds: Minimum = 0ms, Maximum = 0ms, Average = 0ms -----  このようにきちんとPingに応答が返ってきます。  次に下記のようにICMPの設定をopenからblockに変更してhoneydを再起動します。 そして、再度Pingを実行します。 ----- set default default icmp action open ----- ↓ ----- set default default icmp action block -----  結果は次のようにタイムアウトしてしまいます。 ----- C:\>ping 192.168.1.125 Pinging 192.168.1.125 with 32 bytes of data: Request timed out. Request timed out. Request timed out. Request timed out. Ping statistics for 192.168.1.125: Packets: Sent = 4, Received = 0, Lost = 4 (100% loss), Approximate round trip times in milli-seconds: Minimum = 0ms, Maximum = 0ms, Average = 0ms -----  このように、honeydではTCP、UDP、ICMPに対するデフォルトの動作を設定する ことができます。 ■0x04.) プロトコルごとの個別動作の設定  ここからはプロトコルのポートごとの動作を変更する機能について説明します。 ●コマンド実行機能  次に、下記の部分の設定について説明します。 ----- # add template tcp port 80 "./test.pl" -----  まず、試しにWebブラウザで192.168.1.125にアクセスしてみてください。する と、test.plに書いたようなWebページが表示されます。これは、ポート80番に対 するアクセスに対してはtest.plの実行結果を返すように設定がされているためで す。つまり、引数として指定されたコマンドを実行し、その結果を返しているの です。このため、引数の部分をたとえば「ls / -al」などとすると、ルートディ レクトリの内容が表示されます。 ●プロキシ機能  次に、下記の部分の設定について説明します。 ----- # add template tcp port 22 proxy 192.168.1.1:22 -----  では、次にSSHのクライアントで192.168.1.125の22番ポートにアクセスしてみ てください。すると、SSHで普通にアクセスできてしまいます。これは、192.168 .1.125のポート22番に対するアクセスを192.168.1.1にリダイレクトしているため、 本来そのIPアドレスでは起動していないはずのサービスを利用できるのです。つ まり、この例ではhoneyがプロキシサーバのような機能を担っているのです。 ●展開可能な変数  次に、下記の部分の設定について説明します。 ----- # add template tcp port 1000 "nmap $ipsrc" # add template tcp port 2000 "./test.sh $ipsrc $sport $ipdst $dport" -----  honeydのコマンド実行機能では、$ipsrc、$sport、$ipdst、$dportの4種類の展 開可能な変数があります。それぞれ、パケットの送信元IP、送信元ポート、送信 先IP、送信先ポートを意味しています。これらをうまく使うことで、様々な処理 を実現できます。  これは本来の使い方ではないのですがリモートからのnmapの結果を知りたい場 合があります。この場合、上段の設定で充足できます。ブラウザから192.168.1. 125:1000にアクセスしてみてください。少々見難いですがnmapの結果が返される のがわかるかと思います。  また、下段の設定ではいったんシェルスクリプトをかませてやることで、各変 数をファイルに記録しています。ブラウザから192.168.1.125:2000にアクセスし てから、test.logファイルに各変数の値が書き込まれていることを確認してみて ください。  ただ、これらのコマンド実行機能を利用した方法はセキュリティ的は色々と問 題があるためその使用に当たっては十分な注意を払ってください。 ■0x05.) おわりに  今回はhoneydの個々の仮想PCの設定に関して説明しました。これでhoneydで簡 単なハニーポットを作るのに必要な機能については説明が終了しました。他にも honeydには細かな機能がいろいろとあるのですが、これらに関しては次回以降で 必要になった場合に順次説明していきたいと思います。  次回は、どうするか悩んでいます…。 x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x --- 第4章: HTMLで作るWEBサイト 〜 第1回 〜 --- 著者:Defolos x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x ■0x01.) はじめに  こんにちは、Defolosです。今回はHTML(Hyper Text Markup Language)につい て執筆いたします。  HTMLはご存じの方も多いと思いますが、Webサイト(俗にいうホームページ)を 構成するもっともメジャーなマークアップランゲージです。HTML以外にもXMLやXH TMLなどのマークアップランゲージも存在しますが、今回はHTMLのバージョン4.01 についてのみ言及いたします。  よくハッカーの必須スキルのひとつとして取り上げられるHTMLですが、これほ ど誤用が多く軽んじられる技術は少ないと思います。そのようなわけで、このレ ポートでは正しいHTMLの用法に重点を置き、その簡単な歴史、基礎概念、実際の コーディングからWEBサイトを作り上げる方法をまとめたいと思います。 ■0x02.) HTMLの簡単な歴史  HTMLは1989年3月にSGML(Standard Generalsed Markup Language - ISO8879:1 986)をベースとしてTim Berners-Leeが発案したマークアップランゲージで、後 の1994年にHTMLの仕様を策定するW3Cが発足しています。この章ではHTML発案以前 のWWW(World Wide Web)に関する歴史でHTMLに大きく関係するものを取り上げま す。 ●Memex  ハイパーテキストの概念の大元となった概念は1945年にVannevar Bushが発表し た「我々が考えるように」というタイトルの論文に出てくるMemexです。Memexは 1945年、アメリカ軍の原子爆弾開発計画「マンハッタン計画」の指揮を勤めるVa nnevar Bushが考案したシステムで、大量の資料をいつでも簡単に取り出せるよう にするシステムを目的として、関連した情報を容易に閲覧でき、容易に新たな情 報を加えることができるシステムでした。資料を撮影するためのカメラと、撮影 したフィルムを保存しておくマイクロフィルム、それとマイクロフィルムを投影 するスクリーンを持った機械だったようです。  彼が初めてハイパーテキストシステムについての論説を発表したのですが、「 ハイパーテキスト」という名前を初めて使ったのは後述するTed Nelsonです。こ のように彼の思想は先駆的であり、Vannevar Bushの発表した概念が現在私達が利 用しているWWWの下地になっています。 ●Xanadu  XanaduはTed Nelsonが発表したグローバルハイパーテキストシステムの概念で、 現在のWWWがこの概念にもっとも近いシステムとされています。WWWの歴史を語る 上でなくてはならない概念であり、現在のWWWはXanaduのサブセットとしてその機 能の一部を実現するものです。  Ted Nelsonは1965年にACM(Association for Computin Machinery)に提出した 論文で、初めて「HyperText」(ハイパーテキスト)という言葉を発表しました。 Ted Nelsonは後に、この考え方をSamuel Taylor Coleridge著作の小説に登場する 架空都市から名前をとり、Xanaduと名付けました。このXanaduの概念は非常に巨 大なもので、現在でもこの機能のすべてを満たすシステムは発表されていません。 Xanaduの概念の一部を大雑把に列挙すると次のようなものがあります。 ・情報のリンク ・情報の半永久的保存および文書のバージョン化 ・引用窓による著作権問題の解決 ・電子出版 ・ネットワーク利用による分散処理  詳細はここでは愛割させていただきますが、リンク、電子出版、ネットワーク の利用という部分は現在のWWWでも実現されている部分です。  Xanaduはあまりにも巨大な概念であったため、近年ではサブセットであるWWWに 足りない部分を補う形で実現が検討されているようです。彼の発表したXanaduも また後の技術に大きな影響を与えました。 ●WWW  WWWは1989年にジュネーブ郊外にあるCERN(Conseil europeen pour la Recher che Nucleaire:ヨーロッパ素粒子物理学研究所)に勤めていたTim Berners-Lee とRobert Caillauによって発案されました。  Tim Berners-LeeはCERNにある異なったコンピュータのどれからでも情報にアク セスできるようなリンクされた情報データベース共有システムで、ダム端末(※1 )からグラフィカルなX Windowワークステーションまで幅広い種類の端末で文書 を共有できるように設計されたシステム、WWWを考案しました。当時、SGMLを使う 人は何人かいたようですが、多くの人はTeXやPostScriptを使って文書を作成して いました。文書データベースの利用にハイパーテキストを使用するという考えが 考案され、非常に習得が困難だったSGMLの一部の機能として独立させることで簡 単にし、SGMLのサブセットとしてHTMLが考案されました。ちなみにWWWは正確に言 いますとTed Nelsonの提唱したハイパーテキストとは似て非なるものではありま す。  このようにHTMLは環境に依存せずに情報を共有するために発案され、そのHTML を送信するためのプロトコルとしてHTTP(Hyper Text Transfer Protocol)が作 られました。 ●注釈 (※1)ダム端末(dumb terminal)  ホストコンピュータが表示する文字列を、単純にスクロールさせながら表示す る端末。カーソル移動などの画面制御が可能な端末(こちらはインテリジェント 端末などと呼ばれる)と対比して用いられることが多い。 ・「@nifty:デジタル用語辞典:ダム端末」を引用。 http://www.nifty.com/webapp/digitalword/word/010/01015.htm ■0x03.) HTMLの特徴  HTMLはSGMLのサブセットとして定義されました。SGMLで定義されたマークアッ プランゲージはSGMLアプリケーションと呼ばれ、HTMLもSGMLアプリケーションの ひとつだということになります。SGML文書にはSGML Declarationと後述するDTDお よびDocument Instanceが含まれます。 ・SGML Declaration:SGMLアプリケーションにどのような文字や区切り子が出て くるかを定義する ・Document Type Definition:文字参照を含むマークアップの文法を定義する ・Document Instance:マークアップされた文書の本文  HTMLはSGML DeclarationとDocument Type Definitionは用意されていますので、 文書の本文をマークアップするだけで文書を作ることができます。  HTMLは文章構造を論理的にマークアップ(意味付け)するための言語で、その 文章が見出しなのか段落なのか強調なのかといった構造・意味を定義します。つ まり、HTMLは文字の大きさや色などのWebサイトの見栄えをデザインするための言 語ではないということです。このことをまず念頭に置いてください。  しかし、Internet ExprolerなどのブラウザでWebサイトを閲覧すると様々な大 きさの文字やカラフルな文字が使われていたり、背景に色が付いていたりします。 このように見た目もしっかり変わっているのにどうしてHTMLで見栄えをデザイン してはいけないのかと疑問に思う方も多いと思います。なぜHTMLで見栄えのデザ インをしてはいけない(むしろ見栄えをデザインできない)かと申しますと、環 境に依存しないためです。例えば、ブラウザはInternet ExprolerやNetscape Na vigatorのようなグラフィカルなブラウザだけではありません。ブラウザによって は1色のひとつの大きさの文字しか表示できないブラウザや音声で読み上げるだけ のブラウザ、さらにHTMLを解釈するプログラムには検索エンジンのクローワやプ ロクシなども含まれます。こういったHTMLを扱うものの総称をユーザエージェン トと呼びます。私の考えではHTMLを解釈するという点で人間もただのユーザだけ でなくユーザーエージェントにも分類されるのではないかと考えております。  正しく作られたWebサイトはすべてのユーザーエージェントに正しく解釈されま す。例えば見出しは、それとわかるように大きな文字で表示されたり、中央に表 示されたり、見出しだけ男性の声で読み上げられたりします。もしここで、Inte rnet Exprolerだと見出しが大きく表示されるからといって文字を大きくするため に見出しを使ってしまうと他のユーザーエージェントでは解釈できなくなってし まいます。また、「文字を大きくする」といった物理的な見栄えしか意味を持た ないようなものは、音声で読み上げることしかできなかったり、ひとつの大きさ の文字しか表示できないようなユーザーエージェントでは解釈できません。  様々な環境、即ち様々なユーザーエージェントでHTMLにアクセスしているユー ザーがいるということを忘れないようにしてください。  上記で、HTMLで見栄えをデザインするべきではないと言ってきましたが、やは りデザイン性というものはそう簡単に捨て去ることができるものではありません。 そこでHTMLにはデザインを指定するCSS(Cascading Style Sheet)というものが 策定されています。デザインにこだわりたい方はCSSを使ってHTMLの見栄えをデザ インすることができます。このCSSの目的は見栄えと文章構造を分離することにあ ります。CSSはユーザーエージェントが表示する見栄えを統一するための技術では ないため、CSSでの見栄えもそれぞれのユーザーエージェントに依存することにな ります。これはHTMLの本質的なものであり、巷でよく見られるようにそれぞれの ブラウザで見た目を統一するといったことは本来のHTMLの思想概念から外れてい るように思われます。  HTMLの仕様は、現在ではW3C(World Wide Web Consortium)という非営利団体 が策定しています。ブラウザの開発ベンダーなどが独自拡張した仕様も存在しま すが、基本的にそれらの独自拡張は使用せずにW3Cの策定した仕様に従ってHTMLを 記述するべきです。W3Cの策定した仕様は設計段階からアクセシビリティ、ユーザ ーシビリティ、後方互換などが深く検討されており、W3Cの仕様に従うだけで非常 に優秀なHTML文書を作ることができます。もしどうしてもW3Cの仕様に従えない理 由がある場合はW3Cの仕様書はあくまで勧告(今のところ標準ではありませんが、 現在さらに厳格な文法で標準とする動きもあるようです)ですので無理に従う必 要性はないと思いますが、できる限りW3Cの仕様に従うべきだというのが私の考え です。 ■0x04.) URIについて  WWWの思想のひとつには情報のリンクというものがあります。HTMLではリンクな どでリソースの場所を指し示すのにURI(Uniform Resource Identifier)を利用 します。URIには聞き馴れないものがあるかもしれませんが、URL(Uniform Reso urce Locator)というのは皆様ご存じではないかと思います。URLはURIのサブセ ットですが、URLとURIを置き換えて解釈してもそう間違えはありません。URIは次 のように記述されます。 http://ruffnex.oc.to/defolos/ ●URIの構成  URIの構成はいくつかの部分に分けられます。 ○http  一番左に記述されるhttpなどの部分は「スキーム」(Scheme)です。日本語で は「命令概念」と訳すことができ、そのリソースにアクセスするために用いるメ カニズムの概念の名前です。  よくプロトコルと間違われることがありますが、スキーム名とプロトコル名と は必ずしも一致するわけではありません。例えばmailtoというスキーム名があり ますが、この場合「メールを送信する」という命令の概念を表すにすぎません。 実際にこの命令を実行するのはSMTPなどのプロトコルです。httpの場合スキーム 名とプロトコル名は一致しますが、多くの場合は一致しません。 ○:  おそらく「:」が区切りとして用いられます。RFCのスキームリストには「:」を スキームに含めていなかったのですが、W3CのNoteでは「:」もスキームに含める 例があり、非常に混乱する部分です。ですのでこの部分は不確かな情報として取 り扱いください。 ○//  「//」がついているのはリソースがネットワーク上にあることを表します。ロ ーカル内のリソースの場合ホスト名は省略されるため、「///」になります。 ○ruffnex.oc.to  ホスト名です。リソースが存在するサーバに割り振られているドメインネーム です。 ○/defolos/  サーバーの中のdefolosというディレクトリのファイルを指定します。ファイル 名は省略することができ、その場合サーバで決められたファイル(多くの場合in dex.htmlやhome.html)やディレクトリにあるファイルリスト、エラーコードなど が返されます。ここで注意していただきたいのは、ファイル名は省略できますが、 ディレクトリは省略できないということです。つまり「/」を省略することはでき ませんが、多くのブラウザではブラウザ側で「/」を補ってくれるようです。 ●フラグメントURI  その文書内のある一部分を指し示すURIをフラグメントURIといい、次のように 記述されます。 http://ruffnex.oc.to/defolos/test.html#section3  これはtest.thml内にある、nameやidアトリビュートでsection3という名前が付 けられた部分を指し示すことになります。 ●フルURIと相対URI  フルURIとは前述の例のようにスキーム名からファイル名(ファイル名は省略可 能)までをすべて記述する方式です。相対URIはその文書から見たリソースの位置 です。これはUNIXなどのディレクトリ移動などを考えてもらえるとわかりやすい と思います。例えば次のアスキーアートをご覧ください。 +==[defolos]================================================+ | | | +----------+ +----------+ +---------+ +-----------+ | | |index.html| |about.html| |hack.html| |source.html| | | +----------+ +----------+ +---------+ +-----------+ | | | | +==[figure]=============+ +==[source]===================+ | | | +------+ +---------+ | | +----------+ +------------+ | | | | |bg.jpg| |banna.jpg| | | |hello.html| |tab_ins.html| | | | | +------+ +---------+ | | +----------+ +------------+ | | | +=======================+ +=============================+ | | | +===========================================================+  defolosディレクトリ内にindex.html、about.html、hack.html、source.htmlと いう4つのHTMLファイルとfigure、sourceという2つのディレクトリがあることを 表しています。この場合index.htmlからabout.htmlを相対URIで指し示すには「. /about.html」と記述します。index.htmlからhello.htmlを指し示すには「./sou rce/hello.html」のように記述します。もしhello.htmlからindex.htmlを指し示 すには「../index.html」のように記述します。「.」はカレントディレクトリを 表し、「..」は1階層下のディレクトリを表します。  今後の解説では、このディレクトリ構造を用いて解説を行います。 ■0x05.) はじめてのHTML  それでは、はじめてのHTMLを書いて見ましょう。サンプルとしてハッキング技 術周辺を紹介するようなサイトを想定してWebサイトを実際に書きながら解説を進 めていきたいと思います。サイト名は「ハッキングラボラトリ」にしましょう(*'ω') ----- ハッキングラボラトリ - トップページ

これは私のはじめてのWEBサイトです。

-----  ソース中の改行はHTMLでは無視されますので、改行してもブラウザでの表示に は影響しません。多くの場合ブラウザは適切な位置で自動的に改行しますが、単 語の途中などでは出来る限り改行せず、「。」の後ろなどで改行するようにした 方が無難です。  HTMLは「タグ」を用いて文章構造を定義します。タグはのような開始タ グとのような終了タグを総称して「タグ」と呼びます。<と>に囲まれたh tmlのような文字を「エレメント」(要素)と呼び、langなどの要素の後に続くも のを「アトリビュート」(属性)と呼び、この例では言語を指定しています。ま た、lang="ja"のjaのようなものを「バリュー」(値)と呼び、この例では日本語 を表しています。開始タグと終了タグの間に挟まれた部分を「コンテント」(内 容)と呼びます。タグの中には終了タグを省略できるものや、終了タグを書いて はならないものもあります。  ちなみに、エレメント名やアトリビュート名は大文字、小文字で識別はされま せん。このレポート内では見やすさのため、すべて小文字で書いてあります。HT MLの仕様書の中ではエレメント名は大文字で、アトリビュート名は小文字で記述 されていますが、これに習う必要性はありません。  また、バリューは"(ダブルクォーテーション)で囲むようにしてください。バ リューに使用できるものは""で囲まれた文字列かname tokenだけです。name tok enは英数字と「.」、「-」、「:」、「_」で構成された文字列で、よくわからな いならすべて""で囲んだほうが無難です。  HTML文書は大まかにわけて、次の3つの部分に分けられます。 ●DOCTYPE宣言  DOCTYPE宣言(文書型宣言)はそのHTML文書がどのDTD(Document Type Defini tion:文章型定義書)にのっとって書かれたものなのかを明示します。前述の例 ではの部分で、空白文字と注釈宣言、処理命令を除いてHTML 文書の最初に記述します。これはHTMLにおいては必須で、DOCTYPE宣言を省略する ことはできません。 ○DOCTYPE宣言の詳細  HTMLにもバージョンがあり、バージョンによって使えるエレメントやアトリビ ュート、キャラクタセットなどが異なります。こういった情報はすべてDTDに明記 されています。つまりDOCTYPE宣言はHTML文書がどのバージョンやDTDに沿って書 かれたものなのかをユーザエージェントに知らせる役割を持ちます。DOCTYPE宣言 もいくつかの部分に分けることができます。 ・  マーク宣言終了区切り子です。これによりマーク宣言が終わりであることを表 します。 ○HTML4.0で参照されるDTD  このレポートを執筆している2006年2月20日現在で最新バージョンのHTML4.0に は、さらに3つの規格があり、それぞれ参照するDTDなどに違いがあります。 ・Strict  通常HTML4.0といえばこの規格をさします。厳格な決まりがあり、非推奨のエレ メントやアトリビュート、バリューなどを一切使わないだけでなく、それぞれの エレメントの配置位置なども厳格に規定されています。また、Strictはフレーム 内に出現することはできません。Strictの場合のDOCTYPE宣言は次のようになりま す。 ・Transitional  Strictよりもルーズな規格です。非推奨のエレメントやアトリビュートの使用 ができますが、framesetエレメントを使用することはできません。Transitional の場合のDOCTYPE宣言は次のようになります。 ・Frameset  Trasitioalで規定されたエレメントやアトリビュートおよびframesetエレメン トを使用することができます。フレームでWEBサイトを構成する場合に使用します。 Framesetの場合のDOCTYPE宣言は次のようになります。 ●ヘッド部分  ヘッド部分はHTMLではheadタグによって分けられます(〜の部分)。 ヘッド部分にはそのHTML文書のタイトルやメタ情報(文書の中身以外の情報)、 スタイルシートやスクリプトなどを記述します。この中でtitleタグは省略するこ とができません。titleエレメントはそのHTML文書の概要を簡単に述べるためのも ので、ブラウザの上部に表示されたり、お気に入りの名前になったりします。厳 密にはheadエレメントは省略可能ですが、通常省略するべきではありません。  また、ヘッド部分のメタ情報はmetaエレメントで指定することができます。me taエレメントは文書のプロパティ(著者、キーワードなど)を設定したり、それ らのプロパティのバリューを設定するのに用いることができます。例えばメタ情 報は次のように記述されます。 ----- -----  これは著者がDefolosであることを表すメタ情報です。nameのバリューはプロパ ティ名となります。contentのバリューはプロパティに設定される値となります。 プロパティやそのバリューは自分で定義することもでき、その場合プロパティと プロパティに設定されたバリューがどういった意味と関連付けられているのかは headエレメントのplofileアトリビュートで指定されたリファレンス(URIで指定) に記載されることになります。metaエレメントは必ずプロパティとバリューのペ アで用いられ、nameやhttp-equivアトリビュートでプロパティを指定し、conten tアトリビュートでバリューを指定します。  meteエレメントのアトリビュートは次のものがあります。 ・name  プロパティ名を識別するものとなります。name="keywords"でそのWebサイトに 含まれるキーワードを表したり、name="description"でWebサイトの簡単な説明を 表したりできます。 ・contet  プロパティのバリューとなり、プロパティに設定される値を指定します。 ・scheme  プロパティのバリューを翻訳するために利用するスキームの名前を指定します。 メタ情報の翻訳上の文脈をより多くユーザエージェントに提供します。例えば日 付データに「10-12-05」というフォーマットで情報を設定した場合、これは「20 05年10月12日」を表すものなのか「2010年12月5日」を表すのか不鮮明です。そこ でscheme="Month-Day-Year"を指定することで「2005年10月12日」を表すものだと いうことをユーザエージェントに明示することができます。  次の例はcontentがISBNだということをschemeを使って明示した例です。 ----- -----  schemeアトリビュートのバリューはnameで指定されたプロパティやprofileでプ ロパティに関連付けられた意味に依存します。 ・http-equiv  nameアトリビュートの代わりに用いられます。HTTPサーバーはHTTPレスポンス のメッセージヘッダーの情報源としてこのアトリビュートを参照します。例えば 次のようなメタ情報をご覧ください。 ----- -----  このメタ情報の場合、HTTPレスポンスのメッセージヘッダー中のエンティティ ヘッダーに「Content-Type: text/html: charset=SHIFT_JIS」というヘッダーが 付加されることになります。HTTPのヘッダーについてはRFCなどを参照してくださ い。  metaエレメントは開始タグは必須で、終了タグを書くことは禁止されています。 ●本文  本文はHTMLではbodyタグによって分けられます(〜の部分)。本 文にはそのHTML文書の本文を記述します。前述の例では

これは私のはじめての Webサイトです。

の部分が本文ということになります。このHTML文書は「これ は私のはじめてのWebサイトです。」という内容が段落を表すpエレメントでマー クアップされており、ひとつの段落からなる文書であることがわかります。body エレメントも厳密に言えば省略は可能ですが、省略するべきではありません。 ■0x06.) エレメント  エレメントはタグがどのような意味を持つものかを定義します。エレメントは ブロックレベルエレメントとインライン(テキストレベル)エレメントに大別さ れます。 ●ブロックレベルとインライン  通常ブロックレベルエレメントのコンテントはインラインエレメントと他のブ ロックレベルエレメントになります。また、通常インラインエレメントのコンテ ントはデータか他のインラインエレメントのみになります。これはブロックレベ ルエレメントはインラインエレメントよりも「大きな」構造を創り出すという構 造上の特徴によるものです。例えば、段落を表すpエレメントはブロックレベルエ レメントで、強調を表すemエレメントはインラインエレメントですので次のよう な記述は文法エラーとなります。 -----

強調です

-----  ブロックレベルエレメントはインラインエレメントと比べて特異性があります。 通常ブロックレベルエレメントは独立した行に配置されます。インラインエレメ ントは通常その前後で改行されたりせず、その続きに他のデータが続きます。  ブロックレベルエレメントは見出しや段落などの他のデータと独立させる必要 性のあるものであり、インラインエレメントは強調やリンクなどの文章中の装飾 のようなものです。次の例を見て見ましょう。 -----

あいさつ

ようこそいらっしゃいました。これは私のはじめてのWEBサイトです。 まず始めにこのサイトについてをお読みください。

-----  h1エレメントは最も重要な見出しを表すブロックレベルエレメントで、emエレ メントとリンクを表すaエレメントはインラインエレメントです。h1エレメントは ブロックレベルエレメントですので独立した行に配置され、pエレメントもブロッ クレベルエレメントですので複数行にまたがりますが独立した行に配置されます。 一方emエレメントやaエレメントなどはインラインエレメントですので前後で改行 などは行われません。 ●汎用エレメント  HTMLでは汎用エレメントはdivとspanがあります。divはブロックレベルエレメ ントの汎用エレメントで、spanはインラインエレメントの汎用エレメントです。 ちなみにdivはDivisionの略で、区切りのことです。  汎用エレメントとは特に意味を持たないエレメントです。これまで出てきたエ レメントはタイトルや強調を表すエレメントなど、なんらかの意味を持っていま した。しかし汎用エレメントはそういった意味を持ちません。では汎用エレメン トは何のために存在しているのでしょうか。  これらの汎用エレメントは後述するidアトリビュートやclassアトリビュートを 一緒に用いることで意味をなします。例えばHTMLには「電話番号」を表すエレメ ントは存在しませんが、spanエレメントにclass(id)を設定することで「電話番号」 を表すことができます。また、同じように「警告」を表すようなエレメントは存 在しません(強調を表すエレメントは存在します)が、divエレメントを用いるこ とで「警告」を表すことができます。次の例をご覧ください。 -----

電話番号:0120-00-0000

この電話番号は架空のものです。 いたずら電話しないようにしましょう。
-----  このようにclassアトリビュートを用いることでdivやspanがどういった意味を 持つのかということを明示することができます。さらにスタイルシートを用いる 場合、classがworningであるエレメントのコンテントの文字を赤色にするなどの 管理も容易になります。また、次のように言語を指定する場合に利用することも できます。 -----

ケヴィン=ミトニックはエフ・ビー・アイをクラックして end up in prisonになった。

-----  少々むちゃのある例でしたが、このように日本語として指定したの段落の中に 英語が入ってくるような場合に「end up in prison」の部分が英語であることを 明示するのにspanエレメントを用いて言語指定をすることができます。  divエレメントは開始タグ、終了タグともに必須で、コンテントはブロックレベ ルエレメントとインラインになります。spanエレメントも開始タグ、終了タグと もに必須で、コンテントはインラインです。 ■0x07.) アトリビュート  アトリビュートとは前述のように属性と訳せ、のlang="ja"の ような部分です。そのエレメントの付加情報のようなものです。エレメントによ って書くことのできるアトリビュートは決まっており、エレメントによっては必 ず書かなければならないアトリビュートもあります。これらはDTDに明記されてい ます。  アトリビュートの中には、ほぼすべてのエレメントに書くことができる共通ア トリビュートと呼ばれるものも存在しています。  lang、dir、style、title、id、classアトリビュートなどは非常に多くのエレ メントに共通して指定することができるため、共通アトリビュートと呼ばれてい ます。共通アトリビュートの種類はインターナショナリゼーション、コアアトリ ビュート、イベントアトリビュートの3種類に分かれます。 ●インターナショナリゼーション  インターナショナリゼーションは国際化のことで、internationalizationと綴 ります。あまりに長いのでi18n(iとnの間に18文字あるという意味)と省略され ます。HTML4ではRFC2070を統合してHTMLを国際化しているため、これらのアトリ ビュートを指定することができます。i18nのアトリビュートにはlangとdirがあり ます。 ○lang  langアトリビュートはlang="ja"のように言語コードをバリューにとり、エレメ ントのコンテントがどういった言語で書かれたものなのかということをユーザー エージェントに伝えます。もしエレメントにlangが指定されていない場合は親要 素から言語情報を継承します。 ○dir  dirアトリビュートはltrかrtlをバリューとしてとり、文字が左から始まる(l tr)のか、右から始まる(rtl)のかをユーザーエージェントに伝えます。西洋諸 国語や日本語などは文字は左から始まりますが、アラビア語などは右から書きま すので、日本語の段落の中にアラビア語を含める場合などに指定することになり ます。 ●コアアトリビュート  id、class、style、titleがコアアトリビュートに含まれます。これらはHTML4 ではほとんどすべてのエレメントに指定することができます。 ○id  エレメントに固有のIDをつけます。スタイルシートやスクリプトの対象になっ たり、リンクのアンカーになったりします。IDはひとつの文書中に重複してつけ ることはできません。idのバリューにはアルファベットから始まり、それに続く 数字、"-"、"_"、":"、"."が指定できます。これらは大文字小文字で識別されま す。 ○class  エレメントにクラス名をつけます。主にスタイルシートの対象として用いられ ることがほとんどです。文書中に何度でも出現可能であり、ひとつのエレメント にスペースで区切って複数のクラス名をつけることも可能です。classのバリュー にはHTML2.xでは英数字と "."、"-"のみが使えましたが、HTML4では制限がなくな っています。 ○style  スタイルシートを直接エレメントに指定するためのアトリビュートです。詳し くはCSSの説明で述べますが、カスケーディングの最下層になります。CSSの利点 を崩すことになりかねないので、できる限りこのアトリビュートは使わないほう がいいでしょう。ちなみにこのアトリビュートを使うときはヘッド部分でを指定する必要がありま す。 ○title  エレメントにタイトルをつけます。タイトルは読み上げられたり、カーソルを 持っていったときに表示されたりすることが予想されます。わかりにくいエレメ ントには積極的に利用して細く情報を付けるようにしましょう。 ●イベントアトリビュート  スクリプトなどを使った動的なWebサイトを作る際に、イベントアトリビュート にある事象が発生したときにイベントアトリビュートのバリューのスクリプトが 実行されます。  著者であるDefolsoがスクリプトは所詮プラグインであるなどの理由からスクリ プトの使用に否定的であるため、動的なWEBサイトについてはここでは言及しませ ん。ですので今回は省略させていただきます。 ■0x08.) 非推奨と廃止  HTMLにはバージョンがあり、バージョンによって使うことができるエレメント やアトリビュート、それらを配置してよい場所などが異なります。前のバージョ ンで採用されていたのに新しいバージョンでは採用されなかったエレメントやア トリビュートは廃止されたことになり、今後の新しいバージョンでも出現するこ とは基本的になくなります。  一方、非推奨は今後廃止される可能性があり、使うべきではないとされるもの です。非推奨となるにはいくつかの条件があります。 1:物理的に見栄えを指定するだけの要素や属性である 2:スタイルシートで代用可能である  これらの条件に合致するものは非推奨となりますが、W3Cの仕様書では後方互換 のためにブラウザベンダは非推奨となったエレメントやアトリビュートにも対応 するべきだと言及されています。それゆえにブラウザでは非推奨のエレメントな ども表示できたりしますが、将来廃止されたとき書き直す手間が増えたり、グラ フィカルなブラウザにしか情報が伝わらなかったりと不利益しか得ることができ ません。出来る限り非推奨となったものは使わないようにしましょう。  例として非推奨の代表格、fontエレメントを例にとって解説しましょう。font エレメントはネットスケープブラウザが独自拡張したエレメントでしたが、HTML 3.2で正式採用され、HTML4.0で非推奨となりました。などの ようにアトリビュートを指定することで文字の色を変えたり、の ように文字の大きさを変えたりすることができます。一見便利そうに見えますが、 このエレメントには多くの弊害があります。  fontエレメントはそれ自体が論理的な意味を持たないエレメントです。次のソ ースをご覧ください。 -----

ポートスキャンは不正アクセス予備行為 となることがあります。

-----  上記のソースをグラフィカルブラウザ以外でアクセスした場合、赤い色という だけの情報では強調を表しているのか引用なのか気まぐれで赤くしたのか判断で きなくなってしまいます。もし仮にこれが強調したいために赤くしたのだとすれ ば、次のように書くことでグラフィカルブラウザ以外でも情報が伝わります。 -----

ポートスキャンは不正アクセス予備行為 となることがあります。

-----  上記の例はfontエレメントで色を指定した場合と同じように表示されますが、 グラフィカルブラウザ以外でアクセスした場合でもブラウザが強調を表している ことを読み取り、強調だと分かるように、大きな声で読み上げたり文字を括弧で くくったり、しかるべき出力を行ってくれます。  非推奨とされるものはこのようにスタイルシートで代用が可能です。出来る限 り論理要素+スタイルシートでマークアップするようにしましょう。  このレポートの次の章では実際のソースを例としてエレメントやアトリビュー トの使い方を解説していきますが、非推奨となったエレメントやアトリビュート は紹介しません。これは非推奨となったものを知らなくても正当なHTMLを記述す ることができるからです。本来、非推奨のものも知っておくことは大切ですが紙 面の都合上、愛割とさせていただきます。 ■0x09.) 実際のコーディング  それでは実際のソースコードを元にエレメントやアトリビュートなどの解説を 行っていきましょう。次のサンプルは「ハッキングラボラトリ」のWebサイトです。 html、head、meta、title、body、div、spanエレメントと共通アトリビュートは すでに解説済みなため省略します。 ●index.html ----- ハッキングラボラトリ - トップページ

ハッキングラボラトリ トップページ


メニュー


あいさつ

ようこそいらっしゃいました。これは私のはじめてのWEBサイトです。 まず始めにこのサイトについてをお読みください。

----- ○h1, h2, h3, h4, h5, h6 (Headings level 1-6)  見出しとそのレベルを表します。h1が最も重要な見出しで数字が下がるにした がって重要さが低い見出しになります。決して文字の大きさを表すエレメントで はありません。  ブロックレベルエレメントで開始タグ、終了タグともに必須です。コンテント はインラインのみです。 ○hr (Horizontal Rule)  水平線を配置します。水平線はどういった目的で引かれているかわかりにくい ため、titleアトリビュートで補足することが勧められます。  ブロックレベルエレメントで開始タグは必須、終了タグを書くことは禁止され ています。 ○ul (Unordered List)  順不同のリストを定義します。順序つきリストを定義する場合はolエレメント を使います。ulはリスト定義だけですので、項目は別に定義する必要があります。 項目を定義するにはliを使います。  ブロックレベルエレメントで開始タグ、終了タグともに必須です。コンテント はひとつ以上のliエレメントだけです。最低でもひとつliエレメントが必要なた め、ulエレメントだけが出現することもできません。 ○li (List Item)  リスト項目を表します。単体で用いることはできず、ul、olエレメントのコン テントとしてのみ現れます。  ブロックレベルエレメントで開始タグは必須、終了タグは省略可能ですが省略 するべきではないでしょう。コンテントはブロックレベルとインラインです。 ○a (Anchor)  ハイパーテキストの最大の特徴であるリンクを実現するエレメントで、アンカ ーを表します。よく利用されるアトリビュートには次のようなものがあります。 ・href  リンク先のURIを指定します。 ・name  リンク元となるアンカー名を指定します。idアトリビュートも同じように使用 することができます。 ・hreflang  リンク先の言語を明示します。 ・type  リンク先のMIMEタイプを明示します。リンクはHTML文書だけに限らず、画像や 動画などにも設定できるため、MIMEタイプを明示するアトリビュートがあります。 ・charset  リンク先の文字セットを明示します。 ・rel  この文書から見たリンク先の文書の関係を指定します。例えばシリーズになっ ているなら、ひとつ前の文書などです。 ・rev  リンク先の文書から見たこの文書の関係を指定します。例えば例えばシリーズ になっているなら、ひとつ先の文書などです。 ・tabindex  タブを押したときのリンクがフォーカスされる順番を指定します。1から数字が 小さい順にフォーカスされます。詳細はいずれ、アクセシビリティについてで解 説します。 ・accesskey  リンクに[アクセスキー]+[英字1文字]でリンクをクリックした時と同じよう にアクセスすることができるショートカットを指定します。詳細はいずれ、アク セシビリティについてで解説します。  リンクはWWWの基本概念として勝手にどこにでもはるものなので、決して「リン クは勝手にはらないでください」などと書かないでください。WWWの考案者である Tim Berners-Leeは「Links and Law: Myths」の中で、「リンクは著作権を侵すも のではなく、事前報告は必要ない」、「リンクになんらかの支払いを求めてはな らない」、「リンクは他人のプライバシーを侵害することはない」と結論付けて います。詳しくはLinks and Law: Myths(http://www.w3.org/DesignIssues/Lin kMyths.html)を参照してください。  インラインエレメントで開始タグ、終了タグともに必須です。コンテントはaエ レメントを除くインラインです。 ○p (Paragraph)  段落を表します。pエレメントで囲んだコンテントがひとつの段落になります。 コンテントはインラインのみなので、


ような書き方は文法違反です。  ブロックレベルエレメントで開始タグは必須、終了タグは省略可能ですが省略 するべきではないでしょう。コンテントは前述の通りインラインのみです。 ●about.html  次にabout.htmlを見て見ましょう。 ----- ハッキングラボラトリ - このサイトについて

ハッキングラボラトリ このサイトについて


概要

このサイトはHTMLの解説用に作られたサイトです。主にハッキング技術とゴミプログラムのソースを公開しています。

リンクとバナー

リンクはWWWの発案者 Tim Berners-Leeの主張に従って、どこでもご自由にどうぞ。 報告も必要ありません。 バナーは次のものを用意しております。
バナー

----- ○abbr (Abbreviation)  コンテントが省略された文字であることを明示します。titleアトリビュートで フルスペルを記述しておきましょう。コンピュータ技術には略語が多いので、非 常によく使われるエレメントです。  インラインエレメントで開始タグ、終了タグともに必須です。コンテントはイ ンラインのみです。 ○em (Emphasis)  強調を表します。ちょっと強めに読むような感じです。  インラインエレメントで開始タグ、終了タグともに必須です。コンテントはイ ンラインです。 ○strong (Strong Emphasis)  とても強い強調を表します。叫ぶような感じです。  インラインエレメントで開始タグ、終了タグともに必須です。コンテントはイ ンラインです。 ○br (Forced Line Break)  強制改行を行います。通常ブラウザは適切な位置で自動的に改行してくれます が、それ以外で改行したい場合に用います。例えば同じ段落中で改行したい場合 や詩を書く場合などです。決して一行空けるためにbrを連発しないでください。  インラインエレメントで開始タグは必須、終了タグを書くことは禁止されてい ます。 ○img (Embedded Image)  インラインの画像を埋め込みます。srcとaltは必須アトリビュートで、それぞ れ画像のURIと代替テキストを指定します。代替テキストは文字ブラウザや画像取 得エラーなどで画像が表示できない場合に表示されるテキストです。この2つ以外 では次のようなアトリビュートが主に用いられます。 ・longdesc  URIをバリューにとり、より詳しい説明へのリンクを指定します。 ・height  画像の高さを明示します。高さと横幅は指定するほうがよいとされています。 ・width  画像の横幅を明示します。高さと横幅は指定するほうがよいとされています。  インラインエレメントで開始タグは必須、終了タグを書くことは禁止されてい ます。 ●hello.html ----- ハッキングラボラトリ - ソース - 挨拶プログラム

ハッキングラボラトリ 挨拶プログラム


概要

挨拶します。char型のstring配列に文字列を格納し printf関数で出力しています。

ソース


#include <stdio.h>
int main()
{
     char string[] = 'Hello, hackers!!';
     printf ("%s", string);
     return 0;
}

実行

このプログラムは次のように実行します。

$ ./hello.exe

実行結果は次のようになります。

Hello, hackers!!

注釈

printf関数

標準入出力関数のひとつ。stdio.hをインクルードしておく必要がある。

参考文献:http://ruffnex.oc.to/defolos/test.html

----- ○<、>  これは文字参照のうちの文字実体参照です。特殊な文字はそのままではソース 中に書くことができないので、このような文字参照を利用します。文字参照はユ ーザーエージェントで表示されるときには文字参照が指し示す文字に置き換えら れています。この例ではそれぞれ<と>に置き換えられます。文字参照には数値文 字参照と呼ばれる&文字番号;のように文字番号で指定する方法と文字実体参照と 呼ばれる&文字実体;のように文字実体で指定する方法の2通りあります。アルファ ベットの「a」を指定する場合、文字番号で指定するとåのように何を表して いるか一見わかりませんが、文字実体で指定するとåのようにわかりやすく なります。  詳細はW3Cの24 Character entity references in HTML 4(http://www.w3.org /TR/html4/sgml/entities.html)を参照してください。 ○dnf (Defining Term)  他の場所で定義されている用語であることを表します。注釈などに用いものだ と思っています。  インラインエレメントで開始タグ、終了タグともに必須です。コンテントはイ ンラインのみです。 ○pre (Preformatted Text)  整形済みのテキストであることを表し、改行やスペースをそのまま表示します。 preの中でもマークアップは有効なため、次のようにマークアップすることができ ます。 -----
クラッカーはハッカーと違い、破壊活動非生産的なことに技術を使う。
-----

 ブロックレベルエレメントで開始タグ、終了タグともに必須です。コンテント
はインラインですが、imgやsub(上付き文字)などの整形済みという概念に反す
るエレメントは書けません。また、コンテントにタブ文字を書くことは非推奨で
す。

○code (Computer Code)
 このエレメントはハッカーの方に是非活用してほしいエレメントです。コンピ
ュータプログラムのソースコードを表すエレメントです。
 インラインエレメントで開始タグ、終了タグともに必須です。コンテントはイ
ンラインのみです。

○var (Variable)
 プログラムの変数のように値が変わり得るものを表します。ソースの解説など
で用います。
 インラインエレメントで開始タグ、終了タグともに必須です。コンテントはイ
ンラインのみです。

○kbd (Keyboard)
 キーボードからの入力を表します。ソフトの使い方解説などでユーザが入力す
る部分に使います。
 インラインエレメントで開始タグ、終了タグともに必須です。コンテントはイ
ンラインのみです。

○samp (Sample)
 プログラムなどの出力サンプルを表します。コードのサンプルはcodeエレメン
トを用います。これもコンピュータ技術の解説などではよく用いられるエレメン
トです。
 インラインエレメントで開始タグ、終了タグともに必須です。コンテントはイ
ンラインのみです。

○cite (Citation)
 他の権文献からの引用や参考などの出典を表します。文献名やURIなどがコンテ
ントになり、論文やレポートで用いるべきものでしょう。
 インラインエレメントで開始タグ、終了タグともに必須です。コンテントはイ
ンラインのみです。

○blockquote (Long Quotation)
 引用文を表します。句の引用を表す場合はqエレメントを使います。ブラウザの
中にはインデントで表示するものがありますが、インデント目的でこのエレメン
トを使うと環境によっては「次の文章は引用です」と表示される可能性もありま
す。また、コンテントはbodyエレメントと同じなので直接文章を書くことはでき
ません。指定できるアトリビュートには次のようなものがあります。

・cite
 引用の出典を記載します。文献名やURIを記述することになります。

 ブロックエレメントで開始タグ、終了タグともに必須です。コンテントはブロ
ックレベルエレメントとSCRIPTです。

●hack.html

-----





ハッキングラボラトリ - ハッキング技術


ハッキングラボラトリ ハッキング技術


ポートスキャン

ホストのどのポートが開いているかを調べることで、そのホストがどういったサービスを提供しているのかを予測します。クラッキングの予備調査としての位置付けで法律に触れる恐れもあります。

スニッフィング

ネットワーク上を流れるパケットを盗聴する行為です。TELNETなど平文で通信を行うプロトコルでスニッフィングだけでパスワードが盗まれる危険性もあります。

ソーシャルエンジニアリング

電話などで巧妙な身分偽証と口先のテクニックで相手をだまし、必要な情報を入手する行為です。Glazheim Lykeionでは次のように表現しています。ソーシャルエンジニアリングとは巧妙な詐欺のようなものであるさらにゴミ漁りやピッキングなどもこれに分類されます。

----- ○dl (Definition List)  定義型のリストを定義します。定義型とは例のように、ある用語についての解 説などのように、用語と解説が交互に出てくるようなリストのことです。  ブロックレベルエレメントで開始タグ、終了タグともに必須です。コンテント はひとつ以上のdtあるいはddです。 ○dt (Definition Term)  定義型リストの用語の部分を表します。dlのコンテントとしてのみ出現します。  開始タグは必須、終了タグは省略可能ですが省略するべきではないでしょう。 コンテントはインラインのみです。 ○dd (Definition Description)  定義型リストの解説の部分を表します。dlのコンテントとしてのみ出現します。   開始タグは必須、終了タグは省略可能ですが省略するべきではないでしょう。 コンテントはブロックレベルエレメントとインラインです。 ○q (Quotation)  引用句を表します。グラフィカルなユーザエージェントではコンテントの言語 に応じた引用符で囲まれて表示されるはずです。例えば日本語の場合引用符は「 」です。また、二重に引用されることもあり、その場合も正しい引用符の関係で 囲まれることになります。 ・デカルトの言葉に「我思う故に我はあり」という言葉があります。 ・その文献で「カエサルはルビコン川を渡る前に『賽は投げられた』と言った」 という文章を見た。  仮に言語が英語であった場合は次のようになります。 ・Descartes said "Cogito Ergo Sum". ・I saw "Caesar said 'Iacta alea est' before he across The Rubicon" in the book.  指定できるアトリビュートは次のようなものがあります。 ・cite  引用の出典を記載します。文献名やURIを記述することになります。  インラインエレメントで開始タグ、終了タグともに必須です。コンテントはイ ンラインです。 ■0x0A.) 参考文献 ・「HTML 4.01 Specification」 http://www.w3.org/TR/html4/ ・「Some early ideas for HTML」 http://www.w3.org/MarkUp/historical ・「HTML鳩丸倶楽部」 http://www.ne.jp/asahi/minazuki/bakera/html/hatomaru ・「Project Xanadu」 http://xanadu.com/ ・「URIとファイルディレクトリ -- ごく簡単なHTMLの説明」 http://www.kanzaki.com/docs/html/htminfo-uri.html ・「大阪市立大学 インターネット講座 第12回デジタル技術時代のテクスト(3) ハイパーテクストとテクスト」 http://www.tufs.ac.jp/ts/personal/yamaguci/inet_lec/lec12/98med12.html ・「XaQ JP」 http://web.sfc.keio.ac.jp/~yukihiko/XaS/XaQjp.html ■0x0B.) さいごに  皆様、いかがでしたでしょうか。HTMLは学術的な歴史を持ち、仕様書が公開さ れているにもかかわらず不適切な内容の書籍が多く、正確な文法を知ることは難 しいです。学術的な歴史を重んじてHTML文書を作成するために、このレポートを 役立てていただけると幸いです。  今回はHTMLについて基本的なところを執筆しましたが、大体の場合ここで取り 上げた知識だけで正当なHTML文書を作成することができます。しかし、今回取り 上げた部分はHTMLの仕様書のごく一部ですので、詳しくはW3CのHTML Specificat ionを参照してください。次回は今回のレポートで触れることができなかった、よ り細かい技術やアクセシビリティについて執筆したいと思います。  それではまたお会いしましょう。 x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x --- 第5章: ハッカーの達人で吠える --- 著者:MaD(うんこはげまど) x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x ■0x01.) はじめに  なんや、おまえら! まどさんがスーパーハカーだって言ったら、スーパーハ カーなんだって!  自分で言わんで誰が言ってくれるんじゃ!  お前ら全員! きょうつけ! 腕立て100回! 腹筋100回! わかったか!  このうんこはげ!  とりあえず、DoSアタックでPCを破壊してから能書きたれてくれや!  ……ということで、ここ最近、ご機嫌のいい、うんこはげまどさん。  いやぁ、久し振りの快挙だよ。というか、数名で喜んでいるだけなんだけどさ。  ハッカーの達人だよ、ハッカーの達人! ヾ(*ΦωΦ)ノ ヒャッホゥ  ・ハッカーになるための教室1推奨環境:WindowsXP   →http://www1.bbiq.jp/hackersroom/  まぁ、とかく、自分の考えを実ハンで堂々と述べる自信がないハカーもどきが 大勢の中、達人の行動は目をひくだけのものはある。ちょっとアホで若いだけだ。 いいじゃん、それくらい。  要は“やるか、やらないか”。それだけなんだって。  アカデメイアにしてもそう。IPUSIROMさんには悪いけど、サイトのスタート時 点のレベルなんて大差ないって。いろいろなことを学び、それを継続できるかど うかは次の問題ということで。  ただ、なんぼ頑張ってもアカデメイアに追いつくのは無理そうなので、まどさ んはアンチIPUSIROMとなり、ハッカーの達人を生温かく応援して、ともに沈没し たいと思っている。ぷげら  若者よ! 恥を怖れるな! 前へ進め! 表に出ろ! そして継続せよ! 腹 筋100回!  今回は、昔のアングラなんかについて振り返りつつ『ハッカーになるための教 室1推奨環境:WindowsXP』で起こった面白いネタを紹介しる。 ■0x02.) アングラとハカー  まず、アングラとハカーの歴史を振り返りながら伝説となった日本のアングラ &ハカーなサイトを簡単に紹介しとくね。最近、あまり語る人がいなくなったし で、いい機会かと。  今でこそ「アングラ」と「ハカー」はそれぞれカテゴライズされているが、当 時はまだ混沌としてた。 ・http://www.ugtop.com/ ・http://www.blackout.org/ ・http://www.infovlad.net/  まず、この3つだね。この3つのサイトのURLだけは今でもタイプできるくらいハ ッキリと記憶している。  ここらで活躍した人たちは、次のコミュニティで名前を挙げておいたので見て おいて。某ハカーの悪口ばかり書いているから非公開にしてるけど、誰でも参加 できるので。 ・mixi>ハッカー>好きなハカーとクラカー  そして、こうした大御所サイトに対して、新しい方向性を目指したのが次。 ・http://www.backsection.net/  元をただせば、やっぱり先に挙げた3大サイトにリスペクトして立ち上げられた ニュータイプのネットヤンキー集団。  現在は、どこのサイトも地味に再構成しているようなのでチェックしておいて。  あとは、Team404があったけど、ここはもうなくなっているからURLなし。  それ以降にできたサイトに関しては記憶に残っていないため割愛する。  そうした意味では、アカデメイアがコミュニティ再編成の担い手になって欲し いけど、まだまだ。  がんがれ! IPUSIROM!!!(編注) 【編注】「M」は誤植ではありません。ハッカーの達人の教室に偽物のMが実際に 登場したことがネタになっているようです。 ■0x03.) ハッカーになるための教室1推奨環境:WindowsXP  さて、忘れかけてた本題。  「アングラとハカー」をふったのには理由があって、その筋の人たちが初日の 授業から参戦となった。  今回のミッションの根底にあるものは、いうまでもない「大人のギスギス」で ある。決して、煽らず、いやらしい質問を浴びせて凹ませつつ、達人をリスペク トするという戦法だ。「氏ねボケうんこ」は、チリメンジャコでも言えるわけで、 それじゃ、アホ過ぎ。アングラにおける真の煽りはコレですよ、コレ。 ●授業一日目 ---------- 入室中:IPUSIRON IPUSIROM ぶーん ひろゆき@2ch管理人 YUKA くも  kn0wledge はる nad まひん mad 匿名 UNYUN ゴイック hal 右  mad Will ROMばいや〜2nd@Team0721 ----------  なんか、やたら同じような名前(全角・半角の違い)があるけど気にしない。 元t404、Krackers、backsectionという感じ。ちなみに「UNYUN」というのは成り 済まし。本人ではないので念のため。  まぁ、セオリー通り、機嫌を損ねないようジワジワと絞めたという感じ。  だが、達人は上機嫌で授業を進めていた。なかなかの大物だ。これじゃないと ね。  詳細な内容は書かない。しんどいし。詳しくはコチラw  →http://mixi.jp/view_diary.pl?id=107202087&owner_id=100281&full=1 ★MVP:t404 ●授業二日目 ---------- 入室中:k00L,ぶ〜ん^^,entry yar name,HAC DRUG,BEAMZ,RHS, ハッカーの達人◆rXO2VZp4eo,まふぃあ,☆kirby☆,まひん,kaeru,黒豆, ととりん先輩,堀江縫合,トールバズ,hail,くも,アク,ignorance,栗 ----------  ちなみに「k00L」と「BEAMZ」は成り済まし。本人ではないので念のため。k00 Lが「BEAMZ」に化けて、MADが「k00L」に化けてということで、わけわかめ。  IPUSIROM氏と2人で会議を行い、達人そっちのけで「黒豆」で入ったIPUSIROM氏 が、ものすごい勢いで生徒の質問に答えていくというミッションを遂行すること となった。 ===== ハッカーの達人◆rXO2VZp4eo 黒豆さんはハッカーですかね??もしかしたら私を超えてるかもしれないスーパ ーハッカーかもしれないですね ===== ===== ハッカーの達人◆rXO2VZp4eo 黒豆さんへ  すごいじゃないですか 私なんて最初から自分で勉強しましたよ =====  IPUSIROMさんは、すでに『ハッカーの達人』のハンドルをパクって入室してい たため、達人からスパイと見なされアクセスできなくされていた。そのため、串 というハカーを使い入室していたから、レスポンスが若干悪かった。しかし、な んとかミッションは成功した。  この教室では「〜をハッキングする」とは言ってはならない。「〜をハッカー する」というのが基本となっている。  さて、この日は、すげー盛り上がりで名言バシバシという感じで、まさしくハ カーレイヴ!  では、その名言をいくつか紹介しておこう。 ===== Macはスニッフィングの達人でうらやましいです ===== ===== OSは作ったませんよ  買いました =====  意味を理解していないのはいいけど、日本語もあやしいため意味不明な発言が グルーブを作りだしている。しかも、常に揺るぐことない自信のオーラが漂って いる。コレだよ、コレ!  詳細な内容は書かない。しんどいし。詳しくはコチラw  →http://mixi.jp/view_diary.pl?id=108213703&owner_id=100281&full=1 ★MVP:backsection ●授業三日目  なんと、PONさんまで登場。ケリ入れたり、パンチ入れたり、おまけで権限取っ たりしないかとヒヤヒヤ。  でも、とてもよい生徒で安心した。  この三日間で、もっとも名言が連発した授業だった。 ===== 別にどんなOSでもアンチウイルスさえあれば大丈夫です ===== ===== DELLはあまり攻撃対象ではないです(なかったと思います) ===== ===== WindowsXPは攻撃対象外です ===== ===== 世界でひとつだけのサイトです http://akademeia.info/main/tool/dos.htm ===== ===== ポートスキャナーはポートをハックするためのツールです ===== ===== 電話番号のようなものです(電話番号ではありません) ===== ===== rootはPCを操作できることができる権限です あなたのことです =====  まぁ、このレイヴに参加していない人には伝わりにくいと思うが、3分に1回は フキだすエンターティメントであったことは間違いない。  ただ、残念なのは、後半に荒らしがきたこと。 ===== hoshou2157 > しょうもないことばっかり教えやんといてくれますか?? =====  だから、お前らには興味ないからRFCでも読んで、家でネトゲーでもしとけ!  詳細な内容は書かない。しんどいし。詳しくはコチラw  →http://mixi.jp/view_diary.pl?id=108710372&owner_id=100281&full=1 ★MVP:UGTOP x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x --- 第6章: 開発者のための正しいCSRF対策 --- 著者:金床 x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x ■0x01.) はじめに  ウェブアプリケーション開発者の立場から見たCSRF対策について、さまざまな 情報が入り乱れている。筆者が2006年3月の時点において国内のウェブサイトやコ ンピュータ書籍・雑誌などでCSRF対策について書かれている記事を調べた結果、 おどろくべきことに、そのほとんどが誤りを含んでいたり、現実的には使用でき ない方法を紹介したりしていた。そこで本稿ではウェブアプリケーション開発者 にとっての本当に正しいCSRF対策についてまとめることとする。また、採用すべ きでないCSRF対策とその理由も合わせて紹介する。 ■0x02.) あらゆる機能がターゲットとなりうる  ウェブアプリケーションの持つ全ての機能がCSRF攻撃の対象となりうる。まず このことを認識しておく必要がある。  AmazonのようなショッピングサイトやGoogleのような検索サイト、そしてはて なダイアリーやMixiのような日記やブログを書くサイトなど、ウェブアプリケー ションにはさまざまなものが存在する。そしてそれぞれのアプリケーションは細 かい「機能」の積み重ねによって成り立っている。  例えばショッピングサイトは、次のような機能の集まりである。 ・ログインする ・商品を検索する ・商品の情報を表示する ・商品をカートに入れる ・送り先の住所やクレジットカードの番号などを入力する ・確認のため注文内容を表示する ・精算を決定する ・ログアウトする  現実のケースとしてCSRF攻撃の対象になるのは「商品をカートに入れる」など の「攻撃者にとってうまみのある機能」であることが多いが、理論的にはアプリ ケーションに存在する機能は全てCSRF攻撃の対象となりうる。CSRF対策を考える 上でまず行うべきことは「アプリケーションのうち、どの機能についてCSRF対策 を行うか」を決定することである。すべての機能について対策を施してもよいし、 重要と思われるいくつかの機能だけに絞って対策を行うという選択肢もあるだろ う。  「データベースを更新する機能のみCSRF対策をすればよい」のような考えは正 しくない。どの機能について対策を行うかは、ウェブアプリケーションの運営者 や開発者が決めるべきことである。 ■0x03.) ひとつの機能は2画面で構成される  それがどんな機能であれ、ひとつの機能は基本的には2画面で構成される。CSRF 対策を考える上で、このことをしっかり認識しておく必要がある。  例としてまず「ログインする」という機能について考えてみる。ユーザーはロ グインしたいサイトのトップページなどにアクセスする。するとブラウザにはユ ーザーIDとパスワードの入力欄を持つ画面が表示される。これが「画面1」である。 次にユーザーはユーザーIDとパスワードを入力し、「ログイン」のボタンをクリ ックする。するとブラウザには「ようこそ金床さん。」のようにログインに成功 したことを示す画面が表示される。これが「画面2」である。  2つめの例として「日記を書く」という機能について考えてみる。ユーザは日記 を書くためのページへアクセスする。するとブラウザには日記を記入するための テキスト入力欄を持つ画面が表示される。これが「画面1」である。ユーザはテキ スト入力欄に日記を書き、「書き込む」というボタンをクリックする。するとブ ラウザには「日記を書き込みました」などの画面が表示される。これが「画面2」 である。  3つめの例として検索エンジンを使った「検索する」という機能について考えて みる。ユーザーはGoogleやYahoo!などのサイトのトップページにアクセスする。 するとブラウザにはキーワード入力欄を持つ画面が表示される。これが「画面1」 である。次にユーザは検索したいキーワードを入力し、検索ボタンをクリックす る。するとブラウザには検索結果が表示される。これが「画面2」である。  最後の例として「ログアウトする」という機能について考えてみる。ユーザー はすでにウェブアプリケーションにログイン済みである。そのため、ブラウザに 表示されている画面の隅には「ログアウトする」というリンクやボタンがある。 この画面が「画面1」である。ユーザが「ログアウトする」をクリックすると、「 ご利用ありがとうございました」などの画面が表示される。これが「画面2」であ る。  HTTPレベルで考えると、まず画面1を表示する際に一度リクエストとレスポンス のやりとりが発生する。そして画面2を表示する際に、さらに一度リクエストとレ スポンスがやりとりされる。これらをそれぞれ次のように呼ぶことにする。 ・リクエスト1 ・レスポンス1 ・リクエスト2 ・レスポンス2  サーバー側に存在するプログラムは、リクエスト1を受信すると何かしらの処理 を行い、レスポンス1を送信する。また同様に、リクエスト2とレスポンス2の間に も処理を行う。これらの処理をそれぞれ次のように呼ぶことにする。 ・処理1 ・処理2  また、レスポンス1、レスポンス2によってブラウザに表示される画面をそれぞ れ次のように呼ぶことにする。 ・画面1 ・画面2 ■0x04.) 「CSRF以前の問題」については考えない  CSRF対策を考える上で、非常識的な「CSRF以前の問題」が存在すると考えてい ては話が先に進まない。「CSRF以前の問題」とは次のようなものだ。 ・アプリケーションにXSS脆弱性が存在する ・攻撃者が正規ユーザのトラフィックを盗聴可能な状態である ・正規ユーザのマシンにスパイウェアが入りこんでいる ・正規ユーザが悪意あるプロキシサーバーを経由して通信している ・正規ユーザが催眠術で攻撃者に操られている  このような仮定の下ではCSRF対策を議論する意味がない。以下の説明ではウェ ブアプリケーションを取り巻く状況はごく常識的なものであるとする。 ■0x05.) CSSXSS脆弱性を無視しない  CSSXSS脆弱性はIE(Internet Explorer)に存在するバグである。これを悪用す ると攻撃者が仕掛けた罠のページにレスポンス1のボディ部分の内容が読み込まれ、 hiddenフィールドに格納されたワンタイムトークンなどの値が攻撃者の手に落ち ることがある。これは深刻なバグであるにも関わらずパッチがリリースされてお らず、2006年3月の時点で既に数ヶ月もの間脆弱なままの状態が続いている。  「いちいちウェブブラウザのバグを気にしていてはCSRF対策など行うことがで きない。これはいわゆる(上の項で説明した)『CSRF以前の問題』なのではない か」という意見はもっともだ。しかしIEは9割近いシェアを持っているため、この バグを無視したCSRF対策を行っても、実際には1割の利用者しか保護できないとい うことになる。あなたはウェブサイトの利用者に対して「私たちのサイトではCS RF対策を行っています。しかしIEのバグについては関知しません。その結果とし てIEの利用者に対してはCSRF攻撃が可能です」などと説明できるだろうか。  せっかくCSRF対策を行おうとしているのだから、利用者全体に対して安全を提 供できるような方法を採るのがよいだろう。本稿ではこのような考えの元、 CSS XSS脆弱性も考慮に入れてCSRF対策を行う。 ■0x06.) 正しいCSRF対策  それでは、筆者が安全だと考える具体的なCSRF対策について説明する。これら の方法のうち、どれかひとつだけを採用すればよい。ここではCookieを利用した セッション管理を行うアプリケーションを対象とする。ここで注意してほしいの は、ユーザIDやパスワードを使ったいわゆる「ログイン」機能があるかないかは、 あまり重要ではないということだ。Cookieでセッション管理が行われているかぎ り、CSRF対策は「ログイン」という概念の存在に左右されない。  ちなみに、hiddenフィールドにセッションIDを格納し全ての画面遷移にPOSTを 用いるアプリケーションには、CSRF攻撃は通用しない。リクエスト1がPOSTであ ることからCSSXSS脆弱性の影響も受けない。 ■0x07.) 正しい対策その1: ワンタイムトークンを正しく使用する方法  まずひとつめはワンタイムトークンを使う方法である。ここで題に「正しく使 用する方法」と付けたのには理由がある。ひとくちに「ワンタイムトークンを使 う」といっても開発者によって実装方法がまちまちであり、場合によってはCSRF 対策とならないワンタイムトークンの使い方をしてしまうことがあるのだ(後ほ ど実例を挙げる)。そこでここでは押さえるべきポイントを明確にした、ワンタ イムトークンの正しい使用方法を紹介する。  まず、アプリケーションの作りとして、リクエスト1が必ずPOSTを用いるような 形にする。これによってCSSXSS脆弱性を利用したhiddenフィールドの情報の抜き 取りを防ぐことができる。また、通常POSTリクエストに対するレスポンスはキャ ッシュに残らないため、hiddenフィールドの内容がキャッシュとして残ってしま う可能性を下げることにも繋がる。処理1においてリクエスト1のメソッドを判別 し、GETの場合は処理を行わないようにする。または、再度POSTを用いてアクセス しなおすようなレスポンスを返すようにしてもよいだろう。  リクエスト1を受信後、サーバー側のプログラムは処理1を開始する。処理1にお いて、もしまだセッションが開始されていなければ、セッションを開始する。  トークンを生成する。トークンにはセッションIDなどと同様に充分な長さを持 つ予測不可能な文字列を使用する。  トークンをセッションと結びつけた形でサーバー側で保存する。いわゆるセッ ションオブジェクトに格納するのが分かりやすい方法だ。セッションオブジェク トではなくデータベースを利用する場合には、トークンとセッションIDが1対1で 対応付けされた状態で格納する。  hiddenフィールドにトークンを格納したレスポンス1をクライアントへ送信する。 この際、レスポンス1がキャッシュに残らないようにするため、適切なヘッダーフ ィールドを付ける。  処理1は以上となる。  続いてクライアントはトークンを含んだリクエスト2を送信してくる。このリク エストのメソッドはGETでもPOSTでもよい。  リクエスト2を受信後、サーバー側プログラムは処理2を開始する。まず、送ら れてきたトークンとセッションが正しい組み合わせであることを、処理1の際にサ ーバー側に保存しておいた情報を用いて確認する。この組み合わせが正しくない 場合にはエラーとして扱い、処理をそこで終了する。組み合わせが正しい場合に は次にすすむ。  サーバー側で保存していたトークンの情報を破棄する。これによってトークン が「ワンタイム」であることになる。  以上でワンタイムトークンの処理が終了する。続いて「日記を書き込む」など の、アプリケーション本来の機能を実行する。  以上が正しい対策その1である。  リクエスト1がGETでも安全に動作するようにしたい場合は、処理1においてトー クンをhiddenフィールドには格納せず、Cookieに格納してクライアントに渡すよ うにする。そしてレスポンス1を受信したブラウザがJavaScriptを使ってCookieか らトークンを取り出し、hidden フィールドにその値を格納するようにする。具体 的には次のようなレスポンス1を返す。 ----- HTTP/1.0 200 OK ...(略) Set-Cookie: token=8a23f9d44351895a48e15d26a8897eec;Path=/
...(略)
-----  また、トークンをワンタイムのものとするため、処理2においてCookieのトーク ンをダミー値に置き換える。  CSSXSS脆弱性はレスポンス1に含まれるクッキーの値を取得できないので、この ようにすることでリクエスト1でGETを使用できることになる。  英語で書かれたウェブサイトや文献ではCSRF対策の基本としてワンタイムトー クン方式がまっさきに挙げられていることが多いが、CSSXSS脆弱性の存在までを 考慮したものは現時点(2006年3月)では見あたらなかった。 ■0x08.) 正しい対策その2: パスワードの再入力を求める方法  この方法はアプリケーションがユーザIDやパスワードを用いたいわゆる「ログ イン」機能を持つ場合のみ使用できる。  ワンタイムトークンを使用する場合と異なり、レスポンス1にはトークンのよう な秘密情報が含まれない。そのため、この方法はCSSXSS脆弱性の影響を受けない。 また、レスポンス1がキャッシュに残っても問題が生じない。そのため、リクエス ト1はGETでもPOSTでもよい。  処理1は何も行わない。  ユーザは画面1においてパスワードを入力する。そしてパスワードを含むリクエ スト2が送信される。画面2の中のリンクなどからリファラーを通じてパスワード が漏洩してはまずいので、このリクエスト2はPOSTでなければならない。  処理2において、サーバー側プログラムは送信されてきたパスワードが正しいか どうかをサーバー側のデータベースなどの情報を用いて照合する。パスワードが 間違っていればエラーとして扱い、処理を停止する。  以上でパスワード再入力によるCSRF対策の処理が完了する。続いて「日記を書 き込む」などの、アプリケーション本来の機能を実行する。  以上が正しい対策その2である。 ■0x09.) 正しい対策その3: CAPTCHAを正しく使用する方法  CAPTCHAはトークンの一種である。トークンがhiddenフィールドに格納された文 字列ではなく、画像データとしてクライアントへ送られるという点が上で説明し たワンタイムトークン方式との違いだ。CAPTCHAは本来、HTTPクライアントを操作 しているのが人間なのか、あるいは自動化されたプログラムなのかを判別するた めに使われる技術であり、CSRF対策とは無関係だ。ただ、CAPTCHAはトークンの一 種であるので、正しくワンタイムトークンとして使われれば、結果としてCSRF攻 撃を防ぐことができる。  CAPTCHAを使用する方法はつまりはワンタイムトークン方式である。そのため、 上記で説明したhiddenフィールドを使ったワンタイムトークン方式に比べ、CSRF 対策としての利点はない。また、ユーザビリティや実装の複雑さで劣るため、進 んでCAPTCHA方式を採用する理由は存在しない。それがワンタイムトークンである ことを知らずに「CSRF対策にはCAPTCHAを使おう。画像だから安全だ。」と考える のは明らかに誤りなのである。  それでもCAPTCHA方式を採用する場合には、それが正しくワンタイムトークンと して動作するよう、次のように実装する必要がある。  レスポンス1にはトークンのような秘密情報が含まれない。そのため、リクエス ト1はGETでもPOSTでもよい。  レスポンス1にはCAPTCHA画像へのリンクが含まれる。そのため、自動的にCAPT CHA画像へのHTTPリクエストが発生する。このリクエストをリクエスト1.5とする。  リクエスト1.5はPOSTでなければならない。理由はワンタイムトークン方式と同 様、CSSXSS対策と、キャッシュ対策を兼ねる。リクエスト1.5は仕組み上最初にG ETで送られるので、再度POSTを用いてリクエストをしなおすような内容のレスポ ンスを返す必要がある。  CAPTCHA画像を含むレスポンス(レスポンス1.5とする)はキャッシュされない よう適切なヘッダーフィールドを持つ必要がある。  CAPTCHA画像に含まれるトークンはセッションと結びつけた形でサーバー側で保 存しておく。  ワンタイムトークン方式と同様、リクエスト2はGETでもPOSTでもよい。  処理2はワンタイムトークン方式と同じように行う。  以上が正しい対策その3である。これはCSRF対策として正しく機能するが、先述 の理由により推奨しない。 ■0x0A.) Basic認証の場合  Basic認証を用いて「ログイン」機能を提供しているアプリケーションでも、必 要なCSRF対策は変わらない。Cookieを使ったセッション管理を行い、上で説明し た対策のうちのひとつを正しく実装することでCSRF対策を行うことができる。 ■0x0B.) リファラーについて  リクエスト2のリファラーをチェックすることでCSRF対策が行えるのではないか、 とする説明が存在する。しかしこのリファラー方式は、正規ユーザのウェブブラ ウザがきちんとリファラーを送ってくる場合のみ機能する。アンチウイルスソフ トウェアやユーザ自身の意向によりリファラーを送出しない設定で使用されてい るブラウザも多く存在するため、この方式は現実的には機能しないケースが多い。 利用者が限定されており、その全員にブラウザをリファラーを送るような設定で 使用するように求めることができるケースでは、リファラー方式はCSRF対策とし て正しく機能する。  リファラー方式を採用する場合には次のように実装する。  処理2においてリクエスト2のリファラーを調べ、それが外部サイトのものであ ればエラーとして処理する。また、リファラーが存在しない場合も同様にエラー として処理する。  また、リファラーを調べることにより、攻撃者がCSRF攻撃のために仕掛けた罠 ページを発見できる可能性がある。そのため、実際にCSRF攻撃が行われているの かどうかを把握したい場合には、リクエスト2のリファラーを(外部サイトからの ものに限り)記録しておくとよい。 ■0x0C.) SSLについて  SSLの使用はCSRF対策には基本的には関係がない。しかしHTTPSの通信はキャッ シュされない、また盗聴されにくくなるなどの利点もあるため、可能な場合には 上記で挙げたCSRF対策と合わせて利用するのがよい。 ■0x0D.) 採用すべきでないCSRF対策  ここからは筆者がウェブサイトや書籍で見つけた、採用すべきでないCSRF対策 について説明する。これらの対策は意味がなかったり、かえってシステムを危険 な状態にしてしまうので、実施してはいけない。 ■0x0E.) 採用すべきでない対策その1: セッションIDをトークンとして使う  2006年3月の時点で、国内の多くのウェブサイトや書籍などで紹介されている方 法である。  この方法は「ブラウザに脆弱性がない」ことを前提として考案されたものであ る。しかし現実にはIEにCSSXSS脆弱性という「Cookieにはアクセスできないが、 hiddenフィールドの値にはアクセスできる」バグが存在している。そのためこの 方法を採用したウェブサイトは、リクエスト1でGETを使える場合、CSSXSS脆弱性 を悪用することによりセッションIDが盗まれ、結果としてセッションハイジャッ クされてしまう可能性がでてくる。セッションハイジャックは明らかにCSRFより も深刻なセキュリティ上の脅威である。つまりこの方法を採用することは、ウェ ブサイトを(対策を行わない状態に比べて)危険な状態にさらしてしまうことに なるのだ。CSRF対策をしたつもりが結果としてセッションハイジャック可能なセ キュリティホールを作り込むことになってしまうという、なんともやりきれない 状態となる。そのため、この対策は採用してはならない。  仮にウェブブラウザの脆弱性が存在しなければ、この方法はCSRF対策として機 能するかもしれない。しかしその場合でも、リファラからセッションIDが漏洩し ないようにするため、リクエスト2は必ずPOSTである必要がある。この方式を紹介 しているウェブサイトや書籍ではこのことが明記されていない場合が多い。  また、「わざわざ機密情報である(Cookieの)セッションIDをhiddenフィール ドに格納する意味があるのか? ハッシュ値などでよいのでは?」と思う感性は エンジニアにとって大事だと考える。この方式においてセッションIDそのものが トークンとして使用されているのは処理2においてセッションとトークンの結びつ きを確認するのが簡単であるというだけの理由しか持たない。わずか数行のコー ドを省略するために危険をおかす意味はない。  この方式は日本語圏独自のものであり、英語圏ではこの方式をCSRF対策として いる記述は見つからなかった。  セッションIDそのものをトークンとして使うことには利点がないばかりか危険 (CSSXSS脆弱性で現実になったように、何かのきっかけでセッションハイジャッ クに繋がるおそれがある)なので、この方式は採用してはならない。 ■0x0F.) 採用すべきでない対策その2: 誤ったワンタイムトークン方式  ワンタイムトークン方式では、トークンは必ずセッションと結びつけて扱う必 要がある。そうでない場合、攻撃者自らが画面1にアクセスして取得したトークン を罠のページに埋め込む「トークン固定攻撃」が可能となってしまうためだ。そ のため、このような実装をしてしまうとCSRF対策にならない。誤ったワンタイム トークン方式とは、このような「セッションとトークンの結びつき」を持たない 方式を指す。 ■0x10.) 採用すべきでない対策その3: リクエスト2をPOSTにする  IMGタグなどを利用したCSRF攻撃の例を見ると、「ではリクエスト2がPOSTで送 られるようにすればよい」と考えてしまいがちだが、 JavaScriptを利用すること で攻撃者は罠のページからPOSTリクエストを送らせることができるので、この方 法は対策にならない。具体的には次のようなコードが使われる。 -----
...(略)
----- ■0x11.) 採用すべきでない対策その4: 確認画面を挟む  確認画面を挟む方法には2通りの実装が考えられる。ひとつは確認画面がhidde n属性で全ての(確認画面に対してsubmitされた)フォームの値を持ち、3画面目 (実行画面、あるいは決定画面)にジャンプする際に再度それをsubmitするとい うもの。もうひとつは確認画面を表示する時点でサーバー側のセッションオブジ ェクトなどにフォームの値を保存しておき、3画面目を処理する際にそれを取り出 してデータベースなどを更新するものである。  1つめの方法は罠のページから直接3画面目にCSRF攻撃を行うことで回避されて しまうので、対策にはならない。  2つめの方法は罠のページをフレームなどで分割し、それぞれに読み込まれる別 の罠のページから確認画面と3画面目へのCSRF攻撃を(必要があれば時間差をおい て)それぞれ行うことで回避されてしまうので、これも対策にならない。  それでは、元々の作りとして確認画面を含んだ3画面によって構成されるアプリ ケーションでは、どのようにCSRF対策を行えばよいのだろうか。これは先述の通 り、ひとつの機能は2画面で構成されるという原則に沿って考えるとよい。1画面 目と2画面目(確認画面)によって「ユーザが入力した内容を表示する」というひ とつの機能が実現されている。さらに2画面目と3画面目で「ユーザが入力した内 容をデータベースに登録する」のような別の機能が実現されている。つまり、こ こではひとつではなく、2つの機能が連続して実行されているのだ。  従って、CSRF対策の基本であるワンタイムトークン方式を、それぞれの機能に ついて適用すればよい。  まずひとつめの機能に対するCSRF対策として、1画面目でワンタイムトークンを 発行し、2画面目を表示する際の処理でこのトークンが正しいかどうか確認する。 これによって、ひとつめの機能に対するCSRF対策が実現する。そしてこの2画面目 を生成する処理の際にさらに異なるワンタイムトークンを発行し、 3画面目でこ の2つめのトークンが正しく送られてくることを確認する。これによって2つめの 機能に対するCSRF対策が実現し、結果としてこの3画面によって実現される(ひと つに見えるが実は2つからなる)機能全体のCSRF対策が実現されることになる。 ■0x12.) 採用すべきでない対策その5: セッションIDを細かく変更する  処理1でセッションIDを切り替え、このセッションIDを持たない場合には処理2 を行わないようにする、という方式である。「確認画面を挟む」方式と同様に、 罠のページをフレームなどで分割し、画面1と画面2に連続してCSRF攻撃を行うこ とで回避されてしまうので、この方式は対策にならない。 ■0x13.) CSRF用メーリングリスト  筆者が本稿を書いた目的は、本当に正しいCSRF対策とは何なのかという疑問の 答えを得ることである。また、CSRFにまつわる情報の混乱を解決したいという思 いもある。現時点では本稿に記した対策方法が正しいものであると考えているが、 誤っている可能性ももちろんある。内容に誤りがあれば、その都度修正していき たい。修正する場合、本稿は新しい文章として書き換えてしまい、古いものは古 いバージョンとして別名で保存し残していく形をとるつもりだ。  本稿の内容についての意見や指摘などは大歓迎である。CSRFを中心にウェブア プリケーションセキュリティについて話し合うための場所として、メーリングリ ストを作成した。本稿に対するレスポンスがある場合にはこのメーリングリスト を使用して頂ければありがたい。CSRFに関しては広くアンテナを張っているつも りなので、ブログなどで言及してもらった場合にも反応するつもりだ。 Sea Surfers ML MLへの参加はこちらから: http://www.freeml.com/ctrl/html/JoinForm/seasurfers@freeml.com/ MLのトップページ http://www.freeml.com/ctrl/html/MLInfoForm/seasurfers@freeml.com  また、本稿で取り上げていない、ウェブサイトや書籍の中の細かい気になる点 についても、このメーリングリストの中で触れたいと考えている。 ■0x14.) 関連リンク おさかなラボ http://kaede.to/~canada/doc/ PHPサイバーテロの技法(書籍) http://www.amazon.co.jp/exec/obidos/ASIN/4883374718/ PEAK XOOPS Support&Experiment http://www.peak.ne.jp/xoops/md/news/ 俺専用mxxi :: ぼくはまちちゃん! http://mxxi.hamachiya.com/ hoshikuzu | star_dust の書斎 http://d.hatena.ne.jp/hoshikuzu/ 児童小銃 .456 http://d.hatena.ne.jp/rna/ INNOCENT CODE(書籍) http://www.amazon.co.jp/exec/obidos/ASIN/0470857447/ 2006年4月4日 Version 1.2 HTML版URL: http://www.jumperz.net/texts/csrf.htm x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x --- 第7章:お知らせ --- x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x ○Wizard Bible(http://akademeia.info/wizardbible/)では随時、執筆ライタ ーを募集しています。  扱う内容のテーマは広義での「under ground」です。例えば、ハッキングから サリンガスの合成法などと幅広い内容を考えています。また、各種、特殊な職業 や趣味を持った方のレクチャーなども含まれます。  一回きりでも構いません。また、必ず、毎回連載する義務もありませんのでで きる範囲で構いません。気軽に声をかけてください。もちろん一回書いたことが ある人も気軽に声をかけてください(全く気にしていない性格なので)。 ○Kenji AikoさんがQ&Aを作ってくれました。初めて参加する人でもわかりやすく 書かれていますので、参考にしてください。 http://akademeia.info/wizardbible/wbQandA.html ○支援者、参加希望者用のスレッドを立てました。 http://ruffnex.oc.to/ipusiron/cgi/forum/patio.cgi?mode=view&no=17 x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x ---- 第8章:著者プロフィール --- x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x ■copyman ●Job:Student ●Web:N/A ●Mail:copyman@hotmail.co.jp ●Team(Group):N/A ●Comment:  どうも、今回初参加させてもらったcopymanです。  名前はKaz99さんの日記からパクリました、ただのファンです、あしからず。  今回ピッキングツール作成方法について書かせてもらいましたが、実はピッキ ングに関しては素人です。これからは今回作ったピッキングツールを使って、ピ ッキングの腕を上げていこうと思います。 ●PC以外の趣味:  パチスロです。1年前から始めたんですが、毎日パチスロに行ってました。とい うのも一時期プロを目指して、必死にパチスロの勉強をして、毎日データを取り に行ってました。今は暇な時や、新しい台が出たときにチョロっと打つ程度です。  最近ハマってる台は「パワーボム」です。昔あった台のリニューアル版だそう ですが、昔の台を知らなくても楽しめます。なんといってもボーナス中のBGMがた まりません。久々に打ってて楽しい台です。 ■Forging ●Job:インチキ機械設計屋 ●Web:村の鍛冶屋(http://www.geocities.jp/kajiya_forging/) ●Mail:kajiya_forging@yahoo.co.jp ●Team(Group):N/A ●PC以外の趣味:  オートバイです。週末の度に警察主催の講習会に通い、講習会ヲタと化していま す。でも免許は中型限定(いわゆる限付免許)。早く大型に乗りたい!  オフロード車に乗っているのですが、オフロードはすっかりご無沙汰になって しまい、挙句のはてにタイヤまでオンロード用にしてしまいました。 ■Narusase ●Job: Student ●Web: (裏)雑学の博物館(http://k-o-m.hp.infoseek.co.jp/) ●Mail: narusase@mcn.ne.jp ●Team(Group): N/A ●Comment:  こんにちわ、Narusase(ナルサス)です。今回でhoneydの基本的な機能に関し ては説明が終了しました。ここから先のことですが、現在、かなり忙しい状況で 今後の予定がどうなるか予測すらできない状況です。場合によっては連載の中断 も考えなければならない状況になるかも知れません。私も可能な限り頑張ってい きますが、そうなった際は申し訳ありません。今後、連載が可能であれば、当初 の予定通りほかのソフトの話をするか実際の運用の話にシフトしていくかと思い ます。  サイトの方はまあ、ヘタレな文章と、未熟な技術、ヘボいプログラムを紹介す るサイトということで、暇があったらあら探しでもしてみてください。誤植とか ミスとかはBBSにでも書いてくだされば、こっそり修正しときます(笑 ●PC以外の趣味:  PC以外の趣味と言われるとまず思いつくのは読書です。これはかれこれ15年ぐ らい続いてる趣味なのでおそらく一生の趣味と言えるのではないかと…。なぜか 私の周りにはIPSIRONさんを初めとして読書家な人が多くいますのでその人たちと 比べると(漫画等を含めた)蔵書数はそう多いほうではありませんがそれでも1, 600冊前後の蔵書があります。  まあ、私の周りの人間はみんなPCは2〜3台はもってて普通とか、本は本棚に入 りき らないのが基本とか言う人がいっぱいです。  そんな訳で世間一般で言う一般人の方と比較すると蔵書数は多い部類なのでし ょうけど、とてもとても周りの連中には勝てないっす…(汗。 ■Defolos ●Job:Student ●Web:http://ruffnex.oc.to/defolos/ ●Mail:defolos@ruffnex.oc.to ●Team(Group):none ●Comment:  こんにちは、Defolosです。  最近、Wizard Bibleに書く記事の分野がバラバラになってきているように感じ ます。そのうち自分の「専門分野」がなくなってしまいそうで恐いです。(^^;)  話は変わって、先日ノートPCのOSをDebianにしました。本格的にデスクトップ 用にLinuxを使うのは初めてです。これからは、慣れないデスクトップLinux生活 を無理矢理エンジョイしていきたいと思います。 ●PC以外の趣味について:  もともと、ものを作ることが好きだったからでしょうか、ナイフ作りやレザー クラフトなど、何かを作ることを趣味としています。  もし、何かがあったときには「自分自身でものを作れる」ということが重要に なってくると考えています。ですので、作り方の手順が明記されているものを作 る場合でも、できる限り、その原理を理解しようとしながら作ります。  なかなか時間がとれませんが、これからも積極的に趣味を続けていきます。 ■MaD(うんこはげまど) ●Job:DATA HOUSE ●Web:http://www.data-house.co.jp/ ●Mail:mad@data-house.co.jp ●Team(Group):h@cksection,ruffnex ●PC以外の趣味:  PCなんか趣味じゃないもーん。PCなんか壊してまえばええねん。ほかせ、ほか せ! 脳みそ腐るだけやって。ほんだら、スーパーハカーの趣味を教えてたる!  いいか、よくきけ!  寝ること。気持ちイイー!  じゃぁ、またね! けーろよーん! ■金床 ●Job: プログラマー ●Web: http://guardian.jumperz.net/、http://www.jumperz.net/ ●Mail: anvil@jumperz.net ●Comment:  今回の原稿はいつにもまして気合い入ってます。CSRFは奥が深い。ていうかマ ジで疲れた。久しぶりにメーリングリストなど立ち上げてみました。ウェブアプ リ系ハックネタに興味ある方の参加お待ちしてます。 ●PC以外の趣味:  PC以外の趣味は音楽と映画と釣りです。音楽はThird Eye Blindとか。映画は バニラ・スカイとか12モンキーズとか。釣りは夏から秋の回遊魚をルアーで狙い ます。