※このお話はすべてローカルの出来事です。
攻撃する側になってみよう
このシリーズはとりあえずこの回で一休みして、また次回からは基本的なプログラムの勉強に戻ろうと思います。
攻撃する側になってみるって事ですが、最近ちまた流行っているというと語弊があるかもしれないですけど、DoS攻撃ではなくて古典的ですがコメントスパムをやってみようかと。
BBSはKentWebさんのBBSを使ってますが、デフォルト設定だとセキュアなので、できる限り脆弱に、意図的に脆弱にデフォルト設定から変更しているので、kentwebさんのBBSをちゃんと使っている利用者の方は安心してください。だがしかし、どこぞの脆弱なBBSを使っている人はかなり危険だという事を知ってください。
コメントスパムどうやるの
スクリプトでできます。たけけんはPerlの経験は全くといっていいくらいないのですが、今回使えるPerlのモジュールを探してちょこっとやったら作れちゃいました。たださっきも書いたように脆弱なBBSにしか使えないですが、頑張ればそこそこセキュアなBBSでもなんとかなるかもしれないです。
スクリプトは秘密ですが、とっても簡単です。
実行するとこんな感じ。
早朝からなにやってんのって感じですけど、脆弱なBBSにはいとも簡単に攻撃できてしまいます。
ここでポイントは、こないだ作ったLoadAverage+CPU時間高い プロセスをKILLするDaemonは動いてないってとこですかね。仮に動くように閾値を変えてみても、無駄無駄無駄~なのは想像できますか?
攻撃サーバーのスクリプトはKILLできないのです。
サーバーサイドから見ると対策できる事と言えば、iptablesとかファイアウォールを使うとか、一時的な改善策の話になってきて、BBSを守るという事については、サーバーからはなかなか難しいというのを実際に攻撃をしてみて実感したのです。
弾幕うすいぞ、管理者なにやってんの
たぶんこういう考え方をするかもしれないけど、コメントスパムっていうよりもDoS攻撃に近い感じになったら話の本筋が変わってしまうので、あくまでコメントスパムというレベルで、長文のスパムを作ってみた。
有名なコピペらしいけど、これを使ってみた。
これを書き込むスパムを数10個立ち上げてみたら、攻撃側の負荷の方が高くなってしまった(笑)
こっちが受けている方 last pid: 2824; load averages: 29.30, 19.39, 10.98 こっちが攻撃している方 top - 00:20:15 up 3 days, 8:13, 3 users, load average: 58.31, 50.42, 24.10
数値で見るとかなり高いように見えますけど、受けている方のサーバー本体はかなり余裕があります。どういう事かというと、やっぱりBBSは守れないという事です。
ではせっかくハイパーバイザーをこないだ作ったとこなので、4個のサーバーから負荷分散して1台に一気にやってみました。
受けている側のサーバーのtopとvmstatを載せます。
top - 03:19:24 up 3 days, 21:01, 2 users, load average: 37.74, 22.02, 14.06 14662 apache 20 0 39416 7676 3604 R 3.3 0.8 0:00.02 regist.cgi 14663 apache 20 0 39284 7596 3604 R 3.3 0.8 0:00.02 regist.cgi 14664 apache 20 0 39284 7612 3604 R 3.3 0.8 0:00.02 regist.cgi 6543 apache 20 0 251m 6516 1364 S 1.7 0.6 0:00.24 httpd 13038 root 20 0 15028 1396 1008 R 1.7 0.1 0:00.09 top 14655 apache 20 0 39416 7708 3612 R 1.7 0.8 0:00.02 regist.cgi 14660 apache 20 0 39416 7712 3612 R 1.7 0.8 0:00.01 regist.cgi 14661 apache 20 0 39416 7644 3604 R 1.7 0.8 0:00.01 regist.cgi 14665 apache 20 0 39284 7576 3604 R 1.7 0.7 0:00.01 regist.cgi 14668 apache 20 0 39284 7548 3604 R 1.7 0.7 0:00.01 regist.cgi 14669 apache 20 0 39152 7376 3604 R 1.7 0.7 0:00.01 regist.cgi 14677 apache 20 0 39152 6956 3292 R 1.7 0.7 0:00.01 regist.cgi 14678 apache 20 0 34288 4760 1936 R 1.7 0.5 0:00.01 regist.cgi 14693 apache 20 0 34024 4496 1928 R 1.7 0.4 0:00.01 regist.cgi 14694 apache 20 0 31796 4332 1912 R 1.7 0.4 0:00.01 regist.cgi 14697 apache 20 0 31796 4228 1884 R 1.7 0.4 0:00.01 regist.cgi 14698 apache 20 0 31796 4296 1912 R 1.7 0.4 0:00.01 regist.cgi 14709 apache 20 0 29596 4168 1868 R 1.7 0.4 0:00.01 regist.cgi 14711 apache 20 0 29596 4080 1868 R 1.7 0.4 0:00.01 regist.cgi 14712 apache 20 0 29332 3860 1856 R 1.7 0.4 0:00.01 regist.cgi 40 0 13604 372400 61708 298988 0 0 0 200 1356 1541 79 21 0 0 0 41 0 13604 398444 61708 299084 0 0 0 0 1525 2239 74 26 0 0 0 40 0 13604 390444 61708 299176 0 0 0 0 1347 1654 78 22 0 0 0 45 0 13604 382508 61708 299280 0 0 0 0 1459 2016 77 23 0 0 0 42 0 13604 411076 61708 299356 0 0 0 0 1426 1812 77 23 0 0 0 45 1 13604 378708 61716 299468 0 0 0 200 1423 1969 77 23 0 0 0 43 0 13604 404620 61716 299544 0 0 0 0 1462 1961 76 24 0 0 0 41 0 13604 364220 61716 299608 0 0 0 0 1332 1729 82 18 0 0 0 51 0 13604 402416 61716 299732 0 0 0 0 1535 2215 75 25 0 0 0 40 0 13604 374016 61716 299840 0 0 0 0 1317 1623 79 21 0 0 0 44 0 13604 396192 61724 299964 0 0 0 200 1538 2232 74 26 0 0 0 42 0 13604 389740 61724 300020 0 0 0 0 1369 1633 78 22 0 0 0
topでもRunばっかりですが、実際に軽いです。vmstatを見ると余裕そうに見えますが、実際に余裕があります。どれだけの攻撃をしたかというと、VM4台で1台につき10個のスクリプトを立ち上げています。
という感じで、簡単にまとめると
BBSとかコンテンツを守るにはコンテンツ側で対策しないと運営は難しいという事ですな。今回サーバー監視のプログラムを考えるうえで、ユーザーサイドのプログラムを考えるとなかなか難しいゾという事が発覚しました。
もっと高負荷でサーバーじたいに負荷をかける攻撃だったり、ネットワークに(ネットワークになったら完全にユーザーの域を超えているけど)負荷をかける攻撃だったりはサーバーサイドの対策に任せておけばいいけど、ウェブコンテンツはウェブ管理者が守らないといけない。
コメントスパムなら防ぐ手立てはたくさんあるけど、Wordpressのゼロデイ攻撃なんか防げたもんじゃないが、やられちゃうとそのサーバーが攻撃側のサーバーになってしまって、そうなってしまったらどうしようもない。
どうしようもないんで、できるだけ頑張ろうというところまでならサーバー監視でもできそうかも、なんとかなるかもなのでそのラインでいこうかな。と、今思った。
BBSの対策を何個か載せておくので、参考にだうぞ。
Geekなページ コメントスパム対策
みんなのSHIFTWEB コメントスパム対策 REFERER編
Hail2u.net コメント・スパム対策いろいろ
リンクかよ!って思ったかもしれないけど、BBSに限らず参考になるので読むのがいいかと。RefererなんかはDL対策にもいいし。応用が利くやつはどんどん覚えるのがイイね。
てなわけで、Cでサーバー監視のプログラムを作ってみようシリーズはいったん休憩です。