第5回 利便性 それはほんとは 誰のため? - セキュリティ講座

PHP 中級 講座

がる先生のセキュリティ講座

Lecutures on PHP

第5回 利便性 それはほんとは 誰のため? (その1)

 このエントリーをはてなブックマークに追加

親切…?

今回は、いつもよりももうちょっと設計よりの話をしてみましょう。

一般的なログイン画面を、あなたが設計していると思ってください。がる先生
IPとパスワードの入力画面ですが、多くのWeb Pageでは、どちらを間違えたのかがよくわからない、とても不親切なエラーメッセージを出すことが多々あります。

ここはちょっと親切に

  • IDが存在しないなら「存在しないIDです」
  • IDはあるんだけどパスワードが違うのなら「パスワードが違います」

って書いたほうが親切だと思いませんか?

…で首を縦に振った人は、要注意。

この親切は、正規のユーザ以上に「クラッカー達」にとって、とても親切な仕様になってしまいます。
それはなぜでしょうか?
ちょっと切り口を変えてみてみます。見る方角は「悪意のある」方角から。

ログイン画面がありました。あなたはここに「不正侵入をしたい」と考えます。
とりあえずでたらめにいくつか入力をした結果、「IDが違ったらIDが違う、と明示する」画面仕様であることがわかりました。
では、バッチを作りましょう。IDの部分をブルートフォースアタック(Brute Force Attack:力ずくで、総当たりに)します。で、画面に「IDが違います」が出なかったものだけをどこかにList Upしておきます。
これでとりあえず「有効なIDのList」が出来ました。
お次はこのIDに対してパスワードクラックをかければ、無駄な手間が一つ省けます。
嗚呼なんてクラッカーフレンドリー。

こういったものは、正確には「設計段階での脆弱性」になります…が。やはり、それに誰も気づかずに、現場に降りてきてしまう事も少なくありません。がる先生
そんなときに、最終的に「どこかで誰かが」食い止めないと、被害が現実化してしまうことになるのです。

また、似たような別事例もあります。

「パスワードを忘れたときはここにメールアドレスを入力してください。そのメール宛にパスワードを送ります」という機能がありますよね? よく「パスワードリマインダ」などと呼称されますが。

ここで、やはり親切な設計者はこう考えます。

「メールアドレスをもし間違えたら"メールアドレスが違うよ"って教えてあげた方が親切だよね」。

さて…もう何がおきるかわかりますね?

該当サイトの「参加者のメールアドレス一覧」が、容易に手に入ります。
メールアドレス、しかも「極めて高い確率で生きている(ちゃんと送信出来る)メールアドレス」が手にはいるわけです。しかも、サイトの性質である程度ユーザ層もしぼれます(占いのサイトなら女性とか、お見合いサイトなら適齢期な人たちとか)。いわゆるspamerさん達に、比較的高額で買い取っていただけそうな内容です。がる先生

もう一つ、違うラインを見ていきましょう。

時々、PHPがはき出すSQL文などのエラーがそのまま画面に出力されてしまうPageがあります。
それそのものが問題になる可能性は必ずしも高くないのですが。エラーによって「テーブル名などが明確になる」ために、もしそのサイトのどこかにSQL Injection脆弱性でもあれば、調査のための一手間がなくなるので、クラックが容易になってしまいます。

さて。ここまでで、なにか「似たような空気」を感じていただけたかもしれないと思うのですがどうでしょうか?
こういったモノを、セキュリティの世界ではUnnecessary Information(不必要情報)と呼称します。

それぞれは「断片的な、意味を成さないと思われる情報」であっても、それらを適切に組み合わせると「悪意ある人間にとって非常に価値のある情報になる」事は多々あるのです。

たとえば書籍として、Kevin D. Mitnick(ケビン ミトニック)とWilliam L. Simon(ウィリアム サイモン)が書いた「The Art of Deception(邦題:欺術)」が、そういった内容を書いてある良書になります。

「不必要と思われる情報が複数集まって意味を成す」事のすべてに思いを馳せるのは、難しいかもしれません。でも、わかっているところからだけでも不必要な情報を排除していくことは、決して無意味ではないと思います。

  • 1
  • 2

  



Pick Up Q&A

Q
負荷時のmysql_connect()エラー
 このエントリーをはてなブックマークに追加 
A
これはPHPというよりOSまたはMySQLのコミュニティで質問されたほうがいいと思います。 ぱっと思いついた範囲で記すと MySQL等のDBに「ある時点において同時に接続可能なクライアントの最大数」に制限があるよう...

>>続きを読む

今回のような実践的な経験がエンジニアのキャリアに繋がると思います。是非サービスを成功させて下さい!

▲解説者:岡本(アシアル株式会社 教育コーディネーター兼 システムエンジニア)