Microsoft?からブルートフォースアタックを受けた話

4連休の前半が間もなく終わろうとした22:30、晩ご飯を食べまったりと本を読んでくつろいでいたらスマホがブルブル震えるんですね。ソシャゲの体力でも回復したのかと思いしばらく放置していたのですが、そろそろ横になろうかと23:00ごろ手に取ると……Mackerel先生からCPU負荷94%突破のお知らせが(^q^)

連休中に君の名前は見たくなかったw

とはいえ見てしまったからにはしょうがないと諦め内容を確認すると、どうやら個人で利用しているWordpress用サーバが炎上なうの模様。何らかの記事がバズった?と思いダッシュボードにログインするけどアクセス数はいつもと変わらず。特定のプロセスが激重の可能性も考えたけど、突然そんなことになるとも思えず、何となしにApacheアクセスログtail -fで確認すると…。

xmlrpc.php」への大量のアクセスΣ(゚Д゚)

$ tail -f /var/log/httpd/access_log
70.132.61.91 - - [20/Sep/2020:22:41:09 +0900] "POST //xmlrpc.php HTTP/1.1" 200 497 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36"
70.132.61.143 - - [20/Sep/2020:22:41:09 +0900] "POST //xmlrpc.php HTTP/1.1" 200 497 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36"
70.132.61.95 - - [20/Sep/2020:22:41:10 +0900] "POST //xmlrpc.php HTTP/1.1" 200 497 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36"
70.132.61.147 - - [20/Sep/2020:22:41:10 +0900] "POST //xmlrpc.php HTTP/1.1" 200 497 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36"
70.132.61.143 - - [20/Sep/2020:22:41:10 +0900] "POST //xmlrpc.php HTTP/1.1" 200 497 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36"
70.132.61.81 - - [20/Sep/2020:22:41:10 +0900] "POST //xmlrpc.php HTTP/1.1" 200 497 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36"
70.132.61.144 - - [20/Sep/2020:22:41:10 +0900] "POST //xmlrpc.php HTTP/1.1" 200 497 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36"
70.132.61.91 - - [20/Sep/2020:22:41:10 +0900] "POST //xmlrpc.php HTTP/1.1" 200 497 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36"
70.132.61.97 - - [20/Sep/2020:22:41:10 +0900] "POST //xmlrpc.php HTTP/1.1" 200 497 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36"
70.132.61.95 - - [20/Sep/2020:22:41:10 +0900] "POST //xmlrpc.php HTTP/1.1" 200 497 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36"

(後述しますが上記のIPアドレスCDNの物です)

これ以外のリクエストがほぼ見えない状態でログがガンガン流れてくのを呆然と眺めること数分。明らかにアタックを受けている。それも目の前で、リアルタイムに。はっと我に返りすぐさま対応せねばと思い至りTerminalに意識を戻します。……正直寝たいw

続きを読む

[WordPress] 記事の更新日を表示する

小ネタです。 Wordpressで使っているテーマが記事の「公開日」だけしか表示してくれないので、「更新日」も表示するよう修正しました。

結論から言うと以下のようなコードをテーマに埋め込むだけです。

<span title="公開日">
  公開日:<time itemprop="datePublished" datetime="<?php the_time('c');?>"><?php the_time('Y-m-d');?></time>
</span>
<?php if( get_the_time('Ymd') !== get_the_modified_date('Ymd')){ ?>
  <span title="更新日">
    更新日:<time itemprop="dateModified" datetime="<?php the_modified_date('c');?>"><?php the_modified_date('Y-m-d'); ?></time>
  </span>
<?php } ?>
続きを読む

AdBlockを有効にしているブラウザへの対策あれこれ

白状すると私も日常的に広告ブロックツールを使ってますw PC版のChromeではAdBlockPlusの機能拡張を入れ、iOSSafariでは最近AdGuardを利用しています。正直快適でもう手放せませんw

ただこれがサイト運営者の収益を削っているのも事実。せめてサーバ代くらいは捻出したいという方も多いと思いますので今回は広告ブロックの簡易的な検出方法と、その対応策についてまとめたいと思います。

続きを読む

[WordPress] ログイン画面のURLを「wp-login.php」から変更する

WORDPRESSはログインページが「wp-login.php」、ダッシュボードが「wp-admin」と固定で変更もできないため、クラックしようと思うとドメイン名に続けてこれらを指定すれば簡単に総当たり攻撃が出来てしまいます。

WORDPRESSの公式から提供されているプラグイン「Jetpack」を利用していれば、不正なログインをある程度は防御してくれるのですが、ダッシュボードの数値が積もり積もってくると非常に不安になってきますw Jetpack 保護件数

そこで今回は「ピンポンダッシュ」を防ぐために、「wp-login」のURLを変更してくれるプラグイン「WPS Hide Login」を入れてみます。

続きを読む

[WordPress] エディタを等幅フォントで使いたい

WordPressの記事はMarkdownに対応するプラグインを入れて書いてるんですが、エディタが等幅フォントになってないことでテーブルを書く際にずれまくって終始イライラすることが増えたので対策しました。

今回はWordPress側には一切手を入れないため、突如WordPressが動かくなったり、アップデート時に設定が消えてなくなることもありません。

続きを読む

[WordPress] WP-Cronを本職のcronに任せる

wp-cron.phpへのリクエスト数が半端ない

WordPressは特定の時間になったら特定の処理を行うというタイマー的な機能を実装するにあたって、WP-CRONという仕組みを用意しています。これは通常WordPress上のいずれかのページへアクセスがあると、それと平行してwp-cron.phpへも同時にアクセスが発生し、その際に実行すべき処理があれば起動するというものです。つまりユーザーが1回アクセスすると必ず最低でも2回のアクセスが走ってしまう。

実際にアクセスログをざっくり集計すると、リクエストの27.5%程度がこのwp-cron.phpでした。

$ cat access_log | wc -l
82336
$ cat access_log | grep wp-cron.php | wc -l
22678

このブログはフロントにCDN(CloudFront)を置いているので、オリジンであるWordPressサーバには最小限のリクエストしか来ないのですが、拡張子に.phpが含まれる物はキャッシュ時間をゼロにして素通りさせている関係上、こいつだけはPV数分やってくるというわけです。そんなに上等なサーバ使ってないのでバズると死ぬw

というわけで、今回はwp-cron.phpへのアクセスを停止し、1分間に1回サーバ内部でWP-CRONを実行する設定をします。

続きを読む

[mixi] WordPressが良い感じ(お仕事)

今までずっとMovableType派だったのですが、これ少しでも「個人」的な利用から外れると(個人事業主もNG)ライセンス料が発生するのです。(5万くらい)

で、以前から気になっていたWordPressをインストールしてみると、これがMTより良い!

ja.wordpress.org

・ライセンスはGPL+無料 ・公式のデザインも1000以上と充実  http://themes.wordpress.net/ ・インストールもかんたん   1)サーバにファイルアップ   2)設定ファイルを書き替え   3)ブラウザで指定されたページにアクセス   4)サイトのタイトルを入力し、ボタンをクリック   5)完了 ・編集メニューが充実 ・記事毎にパスワード制限が自由にかけられる ・何より使いやすい

ただ、MTのように複数のブログを一度には管理できないみたい。 まだ使い始めて数時間なのでほかにも不満は出てくると思うけど、1サイトしか運営しないのであればこっちで十分かなぁ。

仕事で聞かれたら今後はこっちを勧めるかも。