連載
» 2005年10月15日 00時00分 公開

星野君のWebアプリほのぼの改造計画(1):セミナー申し込みフォームがスパムの踏み台? (4/4)

[杉山俊春, Illustrated by はるぷ,三井物産セキュアディレクション株式会社]
前のページへ 1|2|3|4       

スパムの踏み台は想定外!?

 次の日の朝、星野君が出社してPCを立ち上げると、すぐさま山下君からメッセンジャーでコンタクトがあった。

山下君 「おはよ。昨日のやつ、先輩に見てもらったよ」

星野君 「お、ホントに?早速悪かったな」

 星野君は、昨日、山下君に頼んだ後、荷物整理をしてさっさと帰ってしまったことにちょっと罪悪感を覚えた。

山下君 「『出直して来い!』っていってたよ(笑)」

星野君 「えっ!!」

山下君 「ああ、そんないい方じゃないけど、いくつか直さないと駄目だって。先輩がくれたメールを転送しておいたから読んでみて。あと、今日は忙しいから相談に乗れないからね」

星野君 「ありがとう!メール見てみるよ」

 星野君は思いもよらぬ駄目出しに、ちょっと戸惑った。急いでメールに目を通すと、山下君の下らないジョークの後ろに、先輩のメールが引用されていた。そこには、こんなことが書かれていた。

▼ソースコードが閲覧可能

・コーディングは本番サーバ上で行わないこと

- 「seminar_form.php~」という、エディタが自動生成するバックアップファイルが存在。消すこと

▼スパムの踏み台になる可能性あり

・hiddenタグで埋め込んだPOSTデータは書き換えが可能だと思うこと

- seminar_mailを書き換えると任意のアドレスにメールを送ることが可能。サーバ側で管理を

※補足:入力チェックは「確認画面」→「送信完了」の間でもやること


 1つ目のバックアップファイルが見えてしまうというのは、星野君にもすぐ分かった。うっかり消すのを忘れていたのですぐ削除した。

 だが、スパムの踏み台になるというのは意味がよく分からなかった。メールの送信先はセミナー担当者固定になっているはずだ。星野君は、Webサーバに入っていたsendmailの設定を確認してみたが、特にスパムの踏み台になるようには思えなかった。

 山下君は忙しいらしいし、ほかにセキュリティに詳しい人も思い当たらない。「どうしよう……」と悩んでいると、星野君は肩をたたかれた。

平野部長 「どう? できた?」

 何やら不敵な笑みを浮かべながらこっちを見ている。「どうせできてないのだろう?」とでもいいたげな表情だ。ここで「まだ問題が残っています」と正直に話すのは悔しい。星野君は軽くむかつきながらも、勢いに任せて返事をした。

星野君 「はい。ある程度できたので最後の確認をしています」

平野部長 「え?できたの?できるとは思ってなかったよ。あっはっは」

 まずい。「できた」といってしまった以上、問題のある部分は早急に直さなくてはいけない。星野君は、もう一度メールを見返してみた。すると、メールの最後の方に、こんなことが書かれていた。

参考までに再現用のHTMLファイルを添付する。よく分からなかったら「Webアプリケーションの検査」などのキーワードで調べるべし


 添付のHTMLファイルは、星野君の作った「セミナーWeb申し込みフォーム」とよく似ている。ただ、「セミナー担当者アドレス」と赤字で書かれている入力項目が追加されていた

 試しにそこに自分のメールアドレスを入力して送信してみた。しかし、そもそもセミナー担当者の仮メールアドレスとして自分のメールアドレスを使っているので違いが分からない。そこで、プライベートで使っているメールアドレスに送信してみた。

 すると、セミナー担当者に送られてくるはずのメールと同じものが星野君のプライベートのメールボックスに届いた。HTMLファイルのソースを見ると、星野君が

<input type=hidden name=”seminar_mail” value=”hoshino@example.com”>


と書いた部分が

<input type=text name=”seminar_mail” value=”hoshino@example.com”>


に変更されている。

 なるほど。確かにこの部分を変更してしまえば、好きなあて先にメールを送信できる。よく考えれば簡単なことだった。

 また、「Webアプリケーションの検査」というキーワードを検索エンジンで調べて分かったことだが、わざわざHTMLファイルを書き換えなくても、通信の途中で送信されるパラメータを簡単に書き換えるツールがあるらしい。

 星野君は、メールにあった指示に従ってセミナー担当者アドレスをhiddenではなくサーバ側での管理にして、任意のあて先にメールを送信できないようにした。

 また、「確認画面」→「送信完了」遷移でも入力チェックを行うようにした。ユーザーが正常な画面遷移でアクセスするとは限らない。直接「送信完了」画面へアクセスされると、入力チェックを回避した不正な入力ができてしまうのだ。それを踏まえて、以下の図のように画面遷移を変更した。

セミナーWeb申し込みフォームの構成図(修正版)

星野君 「出来た!」

 初めは無理かと思った。星野君は達成感とともに、何とか出来上がった「セミナーWeb申し込みフォーム」を平野部長に報告した。この日も高橋さんを見たのは出社と退社の2回だけで、結局1人で全部の作業をやったのだった……。

次回予告:

 Webアプリケーションのセキュリティのことにちょっと詳しくなった気がして上機嫌な星野君。すでにWebサーバ上にとても危険なWebアプリケーションが存在していることに気が付くのはいつの日か……。

まこと先輩のWebアプリ・チェックポイント!

まこと先輩?

Check!
バックアップファイル、テスト用ファイルはサーバ上に残さない

ソースコードが漏えいしたり、脆弱性が残った状態のWebアプリケーションを攻撃されたりする

Check!
パラメータはなるべくサーバ側で管理する

「hiddenでやりとりしているから大丈夫」ということはない。改変されてWebアプリケーションの思わぬ誤動作の原因になる

Check!
ユーザーは正しい画面遷移をするとは限らない

一度入力チェックしたからといって安心はできない。すべてのリクエストに対して疑って掛からないといけない


Profile

杉山 俊春(すぎやま としはる)

三井物産セキュアディレクション株式会社
テクニカルサービス事業部検査グループ
コンサルタント

セキュリティコンサルタントとして、主にWebアプリケーションのセキュリティ検査などに従事している。大手就職活動支援サイト、ショッピングサイトなどの検査実績を持つ。



前のページへ 1|2|3|4       

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。