/* * 掲示板、チャットが荒らされる! * */ 掲示板や( 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 というのは、普段ブラウザーが吐き出している情報を削除して、中継します、 発言者の情報が非常に少なくなってしまうため。追跡を多少困難にしています。 ・掲示許可と発言メール転送 具体的なものになりますが、minibbsversion8 では、管理者が発言されたメッセージを読 んでからでないと、掲示されないように出来ます。これをやれば、内容のチェックはパス ワードが奪われない限り出来ます。また、メールで発言された内容を送ることもできます 。掲示板よりメールをチェックしている方はそういうのも良いでしょう。ただ管理が面倒 ですのと、管理を止めた時点で掲示板は止まります。 ・追跡する HTTPはTCP なので、接続中は追跡が可能です。proxy の中継先の協力(設定ミス?)があ れば完全に、発信元IPアドレスの追跡が可能です。 #実際にどうやって良いか分からないって?掲示板、チャットのソースを読みましょう。 #それが出来ないなら、出来る人にお金を払ってやっていただきましょう。