セキュリティー解説
今話題のセキュリティーの大ネタ小ネタを書き連ねます。
守る方も、攻撃する方も、知っておくとプログラマが苦労する知識集。
これを書くことによって世界が滅びようと発展しようと研究者にとっては知ったこっちゃ無いという方向で。
順次執筆。
心意気
- 対策を怠ってはダメ
- 中国からの攻撃にみる日本企業の愚かさ。インターネットは世界とつながっています。不正アクセス禁止法が通用するのは国内だけ。
- 新しいものは良いものだ
- 古いバージョンやメンテナンスされてないものを使い続けてませんか?
- マイナーなものよりメジャーなものを
- 利用者が多いということはクラッカーの利益も報告者の利益も大きいということ。
- ソースが有無は大きな違い
- ソースの有無はスタンスの違い。リアルタイムサポートがある場合を除く。
- 下手な改造は危険
- 改造した箇所が特定され、脆弱そうな場所が浮き彫りに。
- 対処療法では解決できない
- 表面だけ改善しても無意味です。例えば直接cgiを叩かれたら…。根本を解決することが重要です。
身近なサイトにセキュリティー問題
- 2chにもセキュリティ問題があった!?
- フィーネ萌え、一行スクリプトによるfusianasan、キャップ漏れ(UIの欠陥)、XSSなど
- Yahoo投票の不正多重投票問題
- セキュリティ問題の一種。
ツールやWEBサービスを使おう
- firefox
- セキュリティーを扱うのに必需。ScrapBookとLiveHttpHeadersの話。JSのデバッガは使い方わかんね
- curl
- これ一個でhttpの全機能をカバー。
- 田代砲
- 2chで開発された田代砲。果たしてその威力とは。
- nmap
- 正直嫌がらせにしか使えない気ガス
- 短縮URI
プログラムを書くときに気をつけること
ヌル文字とか正規表現とかその他
- 全言語共通
- ログの取り方、...
- C言語
- 安全ではない関数、printfの第一引数、その他
- perl
- php
文字コードに纏わる因縁
脆弱な箇所を探そう!
- 基礎の基礎
- ディレクトリを辿る、全てを落とす、その他
- 使われてるcgiの種類の推測
- Googleをフル活用! cgiの一覧が分かれば手段も広がる!
- データベースを使っているサイト
- SQLインジェクションなど
- クッキーを使っているサイト
- XSS、text/htmlなど。javascript禁止みたいな。XML+cookieの話も。dataスキーマでXSS!?
- 古いcgiがそのまま放置!?
- パスワードの問題
- サルベージ、ブルーフォースアタック、その他
攻撃の歴史
攻撃から身を守るために
攻撃対策のために攻撃の基礎の基礎を知ろう。もちろん対策法もあるよ。
- 海外のレンタルサーバーを借りる
- プロキシを使う
- 匿名プロキシやTOR、P2Pを使ったWebブラウザ、レンタルサーバー+cgiでの接続など。
- クッキーを受け取って書き出すcgiを作る
- アクセスされたら、直ぐにすり変わってアクセス! その対処法も。
- HEADリクエストとRangeヘッダでcgiをアタック
- いかに早くcgiを叩くか、それが問題だ。
- リファラ隠し
- ime.nu、dataスキーマなど
- プロキシを作り登録する
- ログ取り、改竄など
- GETメソッドのcgiを画像などとして貼る
- ログアウトやサーバーに負荷をかけるなど。
- 自動的にPOSTメソッドを送信するページを作る
- 第三のページからのformのサブミット
- HTTPSでオレオレ証明書
- #あまり詳しくない予感
荒らし/スパム対策
近年は荒らしの行為は少なくなってきましたが、それでも対策は万全にすべきです。
スパムの脅威は年々広がっています。スクリプトだけでなく、人手で書き込む業者まで現れました。
その防ぎ方を紹介します。これらは組み合わせて使うことで絶大な効果を与えます。
- 複数IPの問題を考える
- proxy(CoralやTor、JAP(Java Anon Proxy)を含む)、動的IP、複数プロバ、ボットネット、その他
- 連投規制
- sambaのような
- 連続リロード規制
- バーボンのような
- whitelistやblacklistを作る
- 基礎の基礎。登録/解除は手動なり、自動なりで。
- 既存のブラックリスト(RBL、DNSBLなど)を使う
- BBQ、BBX、dsbl、spamlookupなど。BBMやBBNも扱う?
- ポートスキャンしてみる
- 80、81、8080、3128、1080などのproxyによく使われるポートをポートスキャンする。
- 特定条件で弾く
- bbcodeや文字数、文字種、禁止ワード、禁止URLなど
- 仕組みを複雑にする
- クッキー、javascript、flashなどを多用してスクリプトを防ぐ。アクセシビリティの低下が玉に致命傷。
- トラップを仕掛ける
- フォームのダミー項目など。mailやnameなどのダミー項目でspamを、exec=./write --appendなどのダミー項目で荒らしを釣ろう。
- ハッシュを作る
- フォームの規定の項目をハッシュにして検証する。ハッシュの種はcgiごとに一意にする(初回生成)。
- 設問を設ける
- spamには効果的。運用コスト多少あり(ある程度の頻度で問題を作らなければいけない)。荒らしには効果無し。破る技術は開発されてる?
- 画像認証(Captcha)を使う
- ちゃんとした作り方をすれば現在はほぼ弾ける。いい加減な作り方だと荒らしの餌食に。破る技術が発達中。fc2の日本語チャプタ(「ゼロ いち に サン」で「0123」を入力させる)が良い発想だった。
- ベイジアンフィルタを使う
- これ最強。
ブラクラ
嫌がらせを目的に作られたもの。ウイルスのダウンロードの目くらましにも使われる。
- 歴史
- fileへのアクセスができた時代。自動でポップアップが開けた時代。自動でフルスクリーン化できた時代。閉じるを無効化できた時代。
- mailtoやtelnetなどのスキーマでのアタック
- 何故か未だに修正されていない脆弱性
- Javascriptでの無限ループ
- for(;;){}なら中断するか継続するかのダイアログが実行中にでるが、alertをはさむとダメ。alertがはさまれたのもESCキー+Enter連打で抜けられる…が、そこを狙ってダウンロードボタンを押させられる可能性もあり?
- クラッシュを狙ったもの
- クラッシュだけだと思っていると痛い目にあう!? バッファオーバーフローまで。
- ハングアップを狙ったもの
- OSを巻き込む…ことは減ってきてるんだっけか。
- ブラクラを踏ませる
- typoを狙う、I'm feeling Luckyを使う、短縮urlを使う、urlリダイレクト(scriptやhttp)を使う
ウイルス/ワーム
- 感染経路/増殖
- コンピュータが起動不可に
- アンチウイルスソフトを止めてしまう
- ウイルスの起動を阻止できなかった場合、たいていアンチウイルスソフトは役に立ちません。
- hosts書き換え
- 機密情報の漏洩
- サーバーを立てる、アップローダにアップロード、Winnyに流すなど
- 広告表示
- 全ては金の為に
- ボット化
- 知らないうちに攻撃してる!? バックドアが開けられて、DDOSやスパム送信など
- その他色々
- 色々
体験談
さらに上級者になるために
- 仕様を読もう!
- インターフェースは仕様にあります。特にマイナーな機能に注目すべし!
- ソースを読もう!
- 全てはソースの中に。仕様の独自拡張の部分は特に注目。
- インターネットを活用する
- Googleの罪と功績。検索キーワードの工夫で一発検索!
一消費者にもできること
消費者の立場になった時に一体何ができるのか
- 安全かどうかは見た目では分からない
- 絶対安全というものはない
これからのこと
- プロトコル考案
- HTTPは欠陥プロトコル?クライアント側での暗号化が今後重要になる。