|
掲示板、チャットが荒らされる! |
|
|
掲示板や(Web)チャットというのを見たことがあるだろう。
これらは、誰でもどんな内容でも書き込める。その場にあわない内容でも
、相手の顔が見えないので平気で書き込める。幸いこの手の行為をする人はそんなに技術があるわけではない。
システム攻撃その17
掲示板攻撃、チャット荒らしにはいくつかのパターンがある。多くのものが技術的には大したことではないので、誰でが知っていることが多い。
- 保存限界件数まで書き込みデータを消す。
- 多くの掲示板は最大記録件数に制限がある、もし十分な対策がなされていないなら、簡単なスクリプトを作成するだけですべての発言を埋めることが出来る。手動で埋めようとするご苦労な人もいますが。
- HTTP1.1プロトコルを使って消す。
- 多くの設置者は、掲示板スクリプトの標準位置にデータファイルをおきます。当然誰でも書き込むことが出来る設定になっています。つまり、掲示板のスクリプト名が分かれば誰でも消せるのです。
- 不快な言葉、画像を書き込む。
- もし、あなたが掲示板SPAMerなら、掲示板をみれば広告を書き込むだろう。とうぜん、その場にあわない内容でも。たいていはアダルト系の内容だ。最低でも、小中学生のページの掲示板には、アダルト系の広告はしないで欲しい。
- 個人情報を書き込む。
- 掲示板・チャットユーザーの多くが匿名性が高いと思っているので、なんでも、気軽に書いているようである。しかしながら、優れた管理者やハッカーはその限られた情報からでも、あなたの提供していると思っている以上の情報を得ることが出来ます。本名や、住所、電話番号、経歴、家族構成などまでも。 こんな内容を公開してしまっては当然法にふれます。
また、いたずらをするために、ターゲットの電話番号を卑猥な発言とともに、書き込まれることがあります。場合によっては、傷害になりますので、絶対にやらないでください。そういうところには、追跡機能付き掲示板をどうぞ。
- とても古いブラウザでしか見れないページ
- もし、どんなダグでも受け付ける場合、ページを0秒でリフレッシュさせることが出来る。つまり、ずっと表示が完了しないのだ。ただ、古いブラウザーや、対応していないブラウザーなら見れる、そういうのはフレームも対応していない。
- なりすまし
- 誰かの言動の記録を注意深く観察すれば、その人になりすますことが出来るであろう、掲示板の訪問者はあなたの顔などはみることが出来ない。ただ、最低でもプロバイダーとアクセスポイント、ブラウザなどは面倒でも合わせないとすぐにばれるでしょう。
- 一定時間ごとに、適当なメッセージを流す。
- 一定時間ごとに、メッセージを流すと言うこともできる、1分おきとか、1日おきとか様々だが、自動でやるため、あるていどの技術がある者にしかできないと思われる。そういうことが出来るマシンでやるのだ。
- ページを強制的に移動させる。
- もし、どんなタグでも書けるのなら、その掲示板をから他の掲示板にとばすことが出来る。HTMLの仕様である。
- 意味のない長いメッセージを流す。
- 関係ないメッセージや長いだけで意味のないメッセージは、表示するのに時間がかかったりするので嫌われる。あえて、やる人がこういう方々だ。
- 公開proxyによる発信元隠し
- おそらく、ほとんどの荒らし屋がとる手段である。一見発信元を隠すことが出来る。逆に、この発言をみれば公開proxyが発見できる。
- quota限界まで書くことにより追加不能にする。
- ホームディレクトリというのは、たいてい容量制限がつている。これ以上はか書けないと言うやつだ。もし掲示板のデータだけで限界まで書ければ、その掲示板はこれ以上書くことが出来なくなる。
- サーバーを止める。
- 多くのWebサーバーが、ある攻撃を受けると、非常に負荷の高い状態になってしまうことが知られている。これを使って、cgiの実行時間中にhttpdのタイムアウト時間になれば、事実上掲示板は止まったことになる。他にも、サーバーOSが止まるような攻撃を受けることもある。
- 大きい文字にする。
- もし、文字の大きさを変えるタグを閉じ忘れたらどうなるであろうか。それから続くメッセージが大きいままだ。非常に読みにくいでしょう。
- Javaスクリプトの使える掲示板
- タグが使える掲示板でときどきあるようです。これは非常に危険で場合によってはメールアカウントとパスワードが奪われることがあります。また、訪問者のファイルを取得したりする事も可能です。非常に多くのウインドウを出して、マシンを過負荷にすることも可能なときもあります。
- 完全に発信元を隠す
- 実は完全に追跡不可能な形で行う方法もあります。方法は書きませんが。
システム防御その17
掲示板の対策には、いろいろな方法があるが、下手にすべての機能を付けてしまうと、不便になるばかりか、サーバーにかかる負荷が非常に大きくなる。ユーザーの少ないサーバーなら良いが、そのような機能を特にチャットにつけると、確実にサーバーのパフォーマンスが落ちる。すべて実践しても防げない攻撃もある。最終的には管理者自身が管理しなくてはいけない。
- データファイルを公開ディレクトリにおかない。
- 一般的なCGIの使えるホームページをおけるサーバでは、ユーザーのホームディレクトリのなかのディレクトリがホームページのディレクトリになっています。もっとも多いWebサーバーApacheのディフォルトでは、各ユーザーのホームディレクトリのpublic_htmlというディレクトリが、index.htmlなどのhtmlファイルをおく場所になっています。それより上のディレクトリは普通は見れません。そこに、データファイルを置くことによって、掲示板データの消去を防ぐことが出来ます。
- setuid
- 掲示板のデータは、誰でも書ける設定になっている。もし、データファイル名が知られた場合消されるおそれがある。とくにそれが公開ディレクトリに置かれた場合はなおさらである。公開ディレクトリに置かれる場合は、是非ともsetuidしてあなたの作った実行ファイル(掲示板チャット)からしか、書き込めない用にしていただきたい。
方法をminibbs.cgiで例示しよう。まずは、Shellアカウントが必要だ、無い場合は、そこのサーバーの管理者にやっていただこう。セキュリティー上の問題はない。
例はわかりやすいのでtcshだ、~/public_htmlにminibbs.cgiが、~にbbsdata.datがあるとする。パーミッションは~/public_html/minibbs.cgiが775、minibbs.datが666になっているはずだ。
ホームディレクトリのpublic_htmlが公開ディレクトリの場合。他のユーザーがshellやcgiが使える場合は、効果がある。
**** funi? * ~yourname/minibbs.dat
とかやられたら。どうなるか分かるでしょう。(都合によりコマンドは一部マスクさせていただきます。)
host:~>chmod +s ~/public_html/minibbs.cgi
host:~>chmod 644 ~/minibbs.dat
ホームディレクトリ全体が公開ディレクトリの場合。絶対にやっておこう、Webサーバーの設計ミスです。
host:~>chmod +s ~/minibbs.cgi
host:~>chmod 644 ~/minibbs.dat
- 容量リミッターを外す
- ホームディレクトリの容量が少ない場合、簡単に容量オーバーになることがある。もし、できるなら、容量制限のない場所にデータファイルをおいてみよう。
- メッセージ制限数
- メッセージ数の制限があると、連続的にそれ以前に書き込まれた場合データが無くなってしまう。ホームページ容量制限のあるところでの、対策のためだがこれがあだとなることがある。出来るだけ大きくとっておいて欲しい。また、実際の制限よりも、少ない容量しか保存できないと、書いておくのも良い。また、実際に保存している量よりも少ないメッセージ数までしか、表示しないようにすれば、データを戻すことが出来る。
- 単語フィルター
- ある、不快な言動があるとき、簡単なものならタイトルや文章にに対して、管理者の不快と思われる単語が合った場合、発言の登録を拒否します。アダルト系、金銭取引、IDパスワード、IPアドレスといった様々な内容を制限できます。管理者の想像力がないと、どの単語を制限したらよいか分かりません。あまりもひどい単語なので、ここには書きません。
*minibbs.cgiでの例、入力されたデータのチェックってところで、こんな感じに入れることで出来ます。
if (grep(/嫌な言葉/,$FORM{'value'}) || grep(/その手の隠語/,$FORM{'value'}))
{ &error('不適切な入力','内容を改めてください');}
$FORM{'value'} =~ s//>/g;
- HTTP環境変数をすべて保存
- apacheなどで、printenvというCGIが標準で入るのを知っているだろうか。これは、すべての環境変数を表示する。このようにして得たデータを保存しておけば、たいていのことは事足りるでしょう。
- タグ禁止
- タグを許可しているとろくなことがありません。場合によっては、訪問者にまで迷惑がかかります。HTMLタグは禁止しましょう<と>が入ったらタグ付きです。説明を読めば、ほとんどの掲示板で出来ると思います。
- 同一ユーザー判別
- もし、なりすまされるとが、いやならばユーザーを特定するHTTP環境変数や発信元より、名前(ハンドル)をキーとして、ユーザーのデータベースを作成します。毎回ユーザーは同じデータを吐き出してくれれば、ほぼ確実に同一ユーザーかどうかが分かります。 これによって、いやなユーザーには全く発言させないということもできます。
- どこから書くか制限
- ごく簡単なGETプロセスでやっているような掲示板では、簡単に大量のメッセージを送ることが出来てしまう。POSTでは多少技術が必要である。掲示板のあるとところから、書き込むと、どこから来たかは必ず掲示板からになります。具体的にはrefererを比較します。掲示板POSTスクリプトに1行加えたら、書かれてしまいますが。
- HTTP_X_FORWARDED_FOR
- もし、発言者がproxyサーバーを使っている場合、HTTP_X_FORWARDED_FORという、環境変数で発信元が得られる。ほとんどの場合これで、発信元を追跡できる。ときどきこれが入らないproxyサーバがある、HTTP_X_FORWARDED_FORが無くHTTP_VIAの内容がある場合は、受け付けない方がよい。簡単には追跡できないproxyを使っているからだ。
- 長さ制限
- チャットなら200バイト100文字、掲示板なら4000バイト2000文字、大体これ以上書くことは無いかと思います。文字列長を調べて、これ以上の文字に関しては受け付けないようにしてみてください。
- 連続禁止
- 全く同じ内容の文書が連続して書き込まれるなら、内容をチェックして全く同じものがある場合は、登録されないようにしてみましょう。 内容が違うときはちょっと複雑です。同じユーザーかIPアドレスからの発言を一定時間規定数以上は、出来ないようにするなどを行ましょう。
- 発見したら警告してみる
- 警告は本当に分かっている範囲でやらないといけません。javaを使ってコンピューター名、ユーザー名、IPアドレス、警告メッセージを出しても。あなたがこの情報を得られていないので、実際意味がありません。一番いいのは、HTTP環境変数から得られる、発信元の情報を見せつけましょう。proxyのときは、種類によって対応方法が異なるので。 よくあるのが、発信元IPアドレスです。そこから、プロバイダーなどを表示してやると効果があります。他のことも分かりますが、毎回これをやっているとcgiが重くなります。
ただIPアドレスから得られる情報は、発信元の企業、プロバイダーの情報公開がないと得られません。刑事事件にしてしまえば、警察が情報公開を請求してくれるでしょうが、一般ユーザーがちょっといたずらされたぐらいでは、そう簡単に教えてくれません。中には、どんな人にでも公開してしまう。お人好しプロバイダーもいますが。
- 公開proxy、匿名proxy禁止
- 公開proxyというのは、管理者の意図により公開している場合は、いいのですが、意図しないところで公開してしまっている場合もあります。公開プロキシーが意図しないで公開されている場合で、ファイヤーウォールの代わりとして利用している場合は、完全に設定ミスであり、重大なセキュリティーホールなので、やっている管理者は少ないと思いますが。さて、この公開プロキシーというのは、行くところに行けば、そのリストが得られます。そのリストに載っている発信元がある場合は、発言を受け付けなければ、十分な対策が出来ます。
匿名proxyというのは、普段ブラウザーが吐き出している情報を削除して、中継します、発言者の情報が非常に少なくなってしまうため。追跡を多少困難にしています。
- 掲示許可と発言メール転送
- 具体的なものになりますが、minibbs version
8では、管理者が発言されたメッセージを読んでからでないと、掲示されないように出来ます。これをやれば、内容のチェックはパスワードが奪われない限り出来ます。また、メールで発言された内容を送ることもできます。掲示板よりメールをチェックしている方はそういうのも良いでしょう。ただ管理が面倒ですのと、管理を止めた時点で掲示板は止まります。
- 追跡する
- HTTPはTCPなので、接続中は追跡が可能です。proxyの中継先の協力(設定ミス?)があれば完全に、発信元IPアドレスの追跡が可能です。
#実際にどうやって良いか分からないって?掲示板、チャットのソースを読みましょう。それが出来ないなら、出来る人にお金を払ってやっていただきましょう。