本ブログがDoS攻撃で死んでいた件について


お久しぶりです。
すみません、今度もまただいぶ更新が空いてしまいました。9ヶ月ぶりです。

なぜ書こうと思ったかというとですね。。。
久々に何の気なしにブログにアクセスすると

「ん?」

「あれ?」

「エラーで開けんぞ。。。?」

なぜか本ブログがエラーで動かない状態になっていたんです。
なので今回は、その復旧までの道のりを書いてみます。

前提

このブログは

  • ServersMan@VPSの上で
  • Nginx + PHP-FPM でWordPressを動かす

という構成です。詳しくはこのへん参照で。

現象

①アクセスするとNginxが「502 Bad Gateway」を返す(サイトが見れない)
②サーバーを再起動してみる
③再起動後はサイトがちょっとだけ見れてもすぐにまた①の状態に

調査

①Nginxのエラーが出ていたので/var/log/nginx/error.logを確認。

failed (12: Cannot allocate memory) while connecting to upstream
request: "POST /xmlrpc.php HTTP/1.0", upstream: "fastcgi://unix:/var/run/php-fpm.sock:
failed (12: Cannot allocate memory) while connecting to upstream
request: "POST /xmlrpc.php HTTP/1.0", upstream: "fastcgi://unix:/var/run/php-fpm.sock:
failed (12: Cannot allocate memory) while connecting to upstream
request: "POST /xmlrpc.php HTTP/1.0", upstream: "fastcgi://unix:/var/run/php-fpm.sock:
failed (12: Cannot allocate memory) while connecting to upstream
request: "POST /xmlrpc.php HTTP/1.0", upstream: "fastcgi://unix:/var/run/php-fpm.sock:
failed (12: Cannot allocate memory) while connecting to upstream
request: "POST /xmlrpc.php HTTP/1.0", upstream: "fastcgi://unix:/var/run/php-fpm.sock:
failed (12: Cannot allocate memory) while connecting to upstream
request: "POST /xmlrpc.php HTTP/1.0", upstream: "fastcgi://unix:/var/run/php-fpm.sock:

ってのが無限に出てる。

②メモリ食いまくって動かなくなっている模様
③request: “POST /xmlrpc.php HTTP/1.0”,ってなんじゃボケって感じで/var/log/nginx/access.logも一応確認

/xmlrpc.php HTTP/1.0" 500 595 "-" "Mozilla/4.0 (compatible: MSIE 7.0; Windows NT 6.0)" "-"
/xmlrpc.php HTTP/1.0" 500 595 "-" "Mozilla/4.0 (compatible: MSIE 7.0; Windows NT 6.0)" "-"
/xmlrpc.php HTTP/1.0" 500 595 "-" "Mozilla/4.0 (compatible: MSIE 7.0; Windows NT 6.0)" "-"
/xmlrpc.php HTTP/1.0" 500 595 "-" "Mozilla/4.0 (compatible: MSIE 7.0; Windows NT 6.0)" "-"
/xmlrpc.php HTTP/1.0" 500 595 "-" "Mozilla/4.0 (compatible: MSIE 7.0; Windows NT 6.0)" "-"
/xmlrpc.php HTTP/1.0" 500 595 "-" "Mozilla/4.0 (compatible: MSIE 7.0; Windows NT 6.0)" "-"
/xmlrpc.php HTTP/1.0" 500 595 "-" "Mozilla/4.0 (compatible: MSIE 7.0; Windows NT 6.0)" "-"
/xmlrpc.php HTTP/1.0" 500 595 "-" "Mozilla/4.0 (compatible: MSIE 7.0; Windows NT 6.0)" "-"

ってのが無限に出てる。

④①③の結果から同じIPから明らかにDoS攻撃を受けていることが発覚 tail -fでログを監視してると攻撃受けてる感がすごくて逆にテンションが上がりました。

対策

/xmlrpc.php へのアクセスをNginxで弾いてしまう。
/etc/nginx/nginx.conf
を、

location = /xmlrpc.php {
    deny all;
    access_log /dev/null;
    error_log /dev/null;
}

と設定変更して、
/etc/init.d/nginx restart
でNginxを再起動。

無事攻撃を弾くことができ、メモリが食いつぶされることもなくなり、ブログは復旧しました。めでたしめでたし。

で、/xmlrpc.php is 何?

いや待て、今回踏み台になった/xmlrpc.phpって何なのよ。と気になったので少し調べてみました。
XMLRPCとは、「XML Remote Procedure Call」の略らしく、
「HTTPを介してXMLを扱い透過的にサーバ側のメソッドを実行するAPI実装」
のことらしいです。

APIってJSONしか見たことなかったのですが、いろんな形式があるんですね。知らなかった。。。

今回の攻撃は、wordpressのAPIの仕組みを利用して不正な操作をしようとした悪い人の企みだった、という感じでしょうか。
みなさんも気をつけましょう。

おわりに

よく見ると、同じような事象に遭遇している人がまあまあいるみたいで、結構ネットにも記事が転がっていますね。
ただ、そこにたどり着くためには、

①画面に出るエラーメッセージをきちんと読む
②そこから見るべきログファイルを推定しログをきちんと読む

という基本中の基本が大事だなと再確認しました。ログをググればだいたい解決するし。

このブログはもともと、
「自分でサーバーを借りて、自分で環境を構築して、自分で運用しなさい。そうすると、自然とインフラ周りに詳しくなれるよ。」
という私の師匠の教えで開設したものです。
この記事の内容ですね。

今回、自分のブログ、自分のサーバーが攻撃を受けて、ちょっとびっくりしましたが、
本当に勉強になったなぁと感じました。実際の仕事で同じような現象が起こったときに、自分に対応する・勉強するチャンスが回ってくるとは限りませんしね。

エンジニアの皆さん、ブログ立てるのはいいですよ本当に。

てなわけで、今度こそちゃんと更新するぞ。(フラグ


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です