ブルート・フォース攻撃

 

xfiles     

先月、このサイトのプラットフォームであるWordPressにクロスサイトスクリプティング(XSS)の脆弱性が発見されました。
よって、4月22日から28日までの間、セキュリティ保全の為にリリースされたWordPress4.1.2/4.2/4.2.1へとアップデートを順次実施しました。

それに伴い、WordPressの不具合も発生し、WordPressのフォーラムへの報告など、色々と面倒な作業も発生してしまいました。
丁度彼らがその機会を得たかのように、その間に当サイトへハッカー軍団からの猛烈なアタックを受けました。
結局、その対策が必要となったため、先月はブログを執筆するような余裕はありませんでした。

最初の添付写真は、perlの監視プログラムの画面ですが、18時に1628件のアクセスを検知しています。
NewStatPressのログを調べたところ、アクセス元の「ns396380.ovh.net」は、wp-login.phpを狙ったフランスからのブルート・フォース攻撃である事が判明しました。
しかし、最も多い攻撃は、コメントフィールドへの不正な書き込み(SPAM)と旧バージョンでの脆弱性が知られているプラグイン「RevSlider」への攻撃です。その他、xmlrpc.phpを経由し、パスワードのハッキングやpingback攻撃(DDoS攻撃)もアクセス・ログから確認しています。
アタック元は、ウィルスやマルウエアを介して、ハッカーにより乗っ取られたPC(Windows XPが多い)やWebサイトからの発信が大多数を占めています。
組織的なハッキング行為は、ロシアやウクライナからが非常に多いように思えます。
それらのソフトウエアは、何処かの悪い奴らから遠隔操作されているものと思われます。

もし、ブルート・フォース攻撃を放置していると、パスワードが解読されサーバーを乗っ取られたり、リソースを食い尽くされサーバーがダウンする場合もあるので、現在、それらのIPアドレスは全てアクセス禁止にしています。

WordPressは、誰でも手軽にブログ・サイトが無料で構築でき、豊富なプラグインも揃っているため、世界で最も利用者が多いCMSなのですが、反面、常にハッカーからの攻撃を受けています。

以下のリンクには、2013年に発生したレンタルサーバー「ロリポップ」の大規模ハッキング事件の経緯が書かれています。

第三者によるユーザーサイトの改ざん被害に関するご報告

8000件以上のWordPressサイトがハッキングされ、HPが改竄されたという事実は、本当にショッキングな出来事でした。

ハッカーから身を守る為には、

  • パスワードを強固なものに設定する。
  • 重要なシステムファイル(wp-config.php/wp-login.php/admin-post.php/xmlrpc.php等)のパーミッションを第三者からアクセス出来ないようにする、または参照できないようにする、そして書き換えられないようにする。
  • WordPressの本体とプラグインを最新の状態に保つ。
  • セキュリティ関連のプラグインをインストールしておく。
  • 不審なアクセスがないかどうかの監視を怠らない。
  • ハッカーからのアクセスをブロックする。 👉 悪質なBOTからのアクセスを制限

こんな感じでしょうか?

因みに、URL/wp-login.phpが実際のURL(URL/wordpress/wp-login.php)へリダイレクトされる事を防ぐため、fuctions.phpに以下の定義を追加しています。

そして、wp-config.phpのパーミッションは、404に設定しています。本当は、400に設定したいのですが、ドメインキングのサーバー環境ではApacheに所有権が無いため無理です。
でも、外部からのアクセスがかなり制限されているので、安全性は高いです。
(私が所有するもう一つのサーバーは、telnet/SSHが使えます)

まぁ、兎に角、色々と大変ですね。 (m_m)

なお、あなたのサイトがマルウエアに侵され他サイトへの攻撃に加担しているかどうかについて、以下のサイトでチェックできます。

Sucuri Research

Webサイトがウィルスに侵されると、ブラックリストに登録され、インターネットから遮断されるペナルティを受ける事になります。ですので、十分注意しましょう!

※ 5月8日 追記
私が指摘したWordPressのバグが4.2.2のリリースで、やっとFIXしました。

👉 4.1.2/4.2へアップデート後、記事の更新でブラウザが固まる

悪質なBOTからのアクセスを制限

 

Mission Impossible     

* このページは、常時更新中です。

本サイトに設置したPerlのアクセス解析プログラムのログとWordPressのプラグイン「NewStatPress」の分析結果を調査しました。
その結果、相変わらず、自身をBOTと名乗らない迷惑BOTから大量のアクセスがある事が確認できました。

そのBOTについてですが、当サイトでは以下のような種類を確認しています。

(1) 手当たり次第に掲示板やコメントフィールドへ商品の宣伝を書き込む「SPAM・BOT」
⇒ “Google No CAPTCHA reCAPTCHA”により、全てガードされています。

(2) WordPressへのログインを試みる「ハッキングBOT」(Brute Force Attack)
⇒ “Google No CAPTCHA reCAPTCHA”により、全てガードされていますし、更に、強固なパスワードに変更していますので、まず大丈夫でしょう。

* 4月20日 追記
その後、更にログ解析を進めた結果、ログイン名とパスワードをWordPressのxmlrpc.phpへ送信する方法で、裏口からの侵入を試みる多数のハッキングサイトを確認しました。 因って、そのIPアドレスを本日ブロックしました。

(3) プラグインの脆弱性を利用し、記事の書き換えを試みる「ハッキングBOT」
⇒ 当該プラグインは当サイトでは使用していません。なお、当サイトでは、プラグイン「Revslider」等へのアタックを確認しています。 ⇒ wp-config.phpを閲覧することで、彼らはDBやWebサイトへの侵入を企んでいます。

これらのアタックサイトに関しては、Windows XPやWindows 2000等のセキュリティが脆弱なPCやWebサイトがウィルスに感染し、それを踏み台にして邪悪なBOTへと変貌している可能性が考えられます。

上記の調査結果を踏まえ、これ以上、悪質なBOTの行為を許す事が出来なくなりましたので、この度、特に悪質なBOTへの大規模なアクセス制限を実施しました。

以下は、Apacheの「.htaccess」に追記した当サーバーへのアクセス拒否設定の一部です。
* 10月1日時点において、合計で302個のIPアドレスを昇順に定義しています。

 

これで、BOTで賑わっていた当サイトがかなり静かになりました。 (笑)

【アクセス制限について】
アクセス解析の結果、ApacheによるIPアドレスからホスト名への逆引きが不可能なケースを散見しましたので、ホスト名ではなく、全てIPアドレスの記述により、アクセス制限を実施しました。
例として、以下のように複数のIPアドレスを使って攻撃してくるBOTについては、IPのサブネットマスクを指定する事で対象IPを纏めて拒否するよう設定しました。

 

【サブネットマスクの指定方法について】
これ以降、情報処理技術者の方は読み飛ばして下さって結構です。
迷惑BOTの疑いのあるホスト名またはIPアドレスを以下のwhoisデータベースのサイトで、サーバー情報を取得します。

https://www.cman.jp/network/support/ip.html

実例として、「195.154.188.41」を検索します。
その結果、以下のように当該ネットワークが使用するIPアドレスの範囲が確認出来ます。

inetnum: 195.154.128.0 – 195.154.255.255

これを二進数に展開します。

11000011 10011010 10000000 10000000
11000011 10011010 10000000 10000001
11000011 10011010 10000000 10000010
11000011 10011010 10000000 10000011



11000011 10011010 11111111 11111110
11000011 10011010 11111111 11111111

これで、上位17bitが固定で、下位15bitが可変である事が解ります。
よって、上位17bitを固定するためのサブネットマスクは、以下のように表記出来ます。

11111111 11111111 10000000 00000000

対象IPアドレスに対し、このサブネットマスクと二進数の論理積の演算結果の値が一致すれば、制限IPアドレスという事になります。
このサブネットマスクは、「.htaccess」の中で以下のように記述します。

195.154.0.0/17
または
195.154.0.0/255.255.128.0

未だ全てのBOTを排除していないので、小さなBOTは居ますが、以前よりはかなり静かになった感じがします。
以下は、BOTへのアクセス制限を行った後におけるPerlのアクセス解析プログラムのモニター画面です。

*4月9日 追記
念のため、ログイン画面への総当たり攻撃を防御するためのプラグイン「Jetpack-Protect」も本日有効にしておきました。

*4月17日 追記
不正ログインをチェックするために開発された日本製のプラグイン「Crazy Bone」をインストールしました。

*9月18日 追記
先日、韓国からのDOSアタックやウクライナからのSPAMアタックを受け、サーバがダウンしたため、「.htaccess」を更新しました。以下の記述はその一部です。

なお、robots.txtにおいても、以下のように迷惑BOTからのアクセスを拒否しています。
因みに、SteelerとShim-Crawlerは、東京大学の研究室から来るクローラです。

 

*9月26日 追記
アクセスログの解析から、WordPressのピングバック機能を利用したDDOS攻撃の形跡も確認しましたので、本サイトのピングバック機能を無効に設定しました。
参考記事は、こちら ⇒ 注意喚起:WordPressの機能を悪用したDDoS攻撃対策のお願い

プラグイン「Disable XML-RPC Pingback」をインストールする事でピングバック機能を無効にし、更に、「.htaccess」に以下の定義を追加し、リモート投稿プログラム「xmlrpc.php」へのアクセスも禁止に設定しました。

ワードプレスからPerlのアクセス解析プログラムを呼び出す実験

これまでの実験で、WordPressにおけるテーマのheader.phpより、単純にperlのアクセス解析プログラム「perlstats.cgi(仮称)」を呼び出すと、サーバーの環境変数が引き継がれない事が判明しています。

今回は、WordPressのindex.phpのプログラム内にperlのアクセス解析プログラムを呼び出す実験をしました。
なお、普通に呼び出すと、やはり環境変数が渡らないようなので、予め、PHPのプログラム側から環境変数を取得し、パラメーターで渡す方式でperlのプログラムも修正しました。

index.phpのプログラムコードは、以下の通りです。
(セキュリティ上、実際のコードを少し修正しています)

 

perlstats.plの実行後の結果を表示する管理プログラムの画面を以下に示します。

 

上の画面を見ると、以下のサーバーの環境変数は、引き渡されている事が分かります。

REMOTE_HOST
REMOTE_ADDR
HTTP_USER_AGENT

しかし、残念ながら、リンク元URLの集計が’0’のままなので、HTTP_REFERERは送られていない模様です。

そこで、そもそも、HTTP_REFERERがPHPならびにperlで正しく設定されているのかどうかを確かめるため、簡単な実験サイトを作って検証して見ました。

まず、使用可能な環境変数を表示するPHPのプログラム「server_key.php」です。(以下)

 

次に、使用可能な環境変数を表示するperlのプログラム「server_key.pl」です。(以下)

 

そして、それらのプログラムを呼び出す側のHTMLコード「test_referer.html」です。 (以下)

 

上の二つのリンクのそれぞれの結果は、以下の通りです。

PHP、perlともサーバー環境変数の取得はちゃんと出来ている事がこれで、分かりました。
WordPress上でなければ、問題なく動くようです。

 

問題は、三番目のリンク(index.php)です。
結局、HTTP_REFERERは取得できていませんでした。

そこで、index.phpへのコードの挿入位置に問題があるのかもしれないという事で、以下のように変更して見ました。

 

その結果は、見事に失敗でした。 (>_<)

PHPの同一スコープ内に置いても、同じ結果でした。
NewStatPressなど、WordPressのプラグインでHTTP_REFERERの情報が非同期にリセットされているような気がするのですが、詳しい原因は私には良く分かりません。
もしかしたら、プラグイン「WP Super Cache」によるキャッシュが原因かもしれません。

この件で解る方、誰か、エロイ先生教えて下さい!!(笑)

という事で…

WordPressからperlプログラムへHTTP_REFERERを渡すのは難しいので、perlのアクセス解析プログラム「perlstats.cgi」において、「リンク元URLの集計」の部分はできないという事で諦めます。 orz

検索キーワードが消えている謎

そういえば、Google Analyticsを眺めていて気が付いた事ですが、何故かアクセス解析の結果に検索キーワードが含まれていません。

何故だろうかと、ググってみたら、とあるブログ「検索キーワードが追えなくなる…ノーリファラー対策はあるのか? 」にその理由が書かれていました。

つまり、Googleが2011年10月に検索自体をSSL暗号化してしまったため、Google経由で訪問してきたユーザーの検索キーワードが取得できなくなってしまったことが原因

だそうです。Webマスターからすれば、この情報が一番知りたいところなんですが、これじゃアクセス解析なんかやってもあまり意味が無いような気がしました。
Yahoo!, Bingとか他の検索エンジンもこの方向なんでしょうかねぇ(–;)

Google Analytics

Googleが提供するWebサイトのアクセス解析システム「Google Analytics」のリポートの一部を紹介します。
驚いた事に、Webサイトを訪問した人の年齢・性別・嗜好、端末の機種まで詳細な報告が上がっています。恐らく、Googleアカウントを押さえたGoogleだからこそ出来る技かと思います。Google恐るべしです!

Introduces a part of the reports of Google Analytics that is analysis system for web sites provided by Google.
I’m surprised at this reports because a content of the details on age, sex, taste and kind of terminal, and so on has been reported.
I think maybe, only google can be done due to having a google account.
It’s awesome Google!

Reports-010 Reports-020 Reports-030

WordPressのアクセス解析 (access analysis)

WordPressの勉強を兼ね、アクセス解析のプログラムを3個組み込んでおきました。
最初の1個はWordPress内部にあるテーマのテンプレートPHPプログラムから呼び出すようにした①perlのCGIプログラム。
もう1個はgoogleが提供する②Google Analyticsというウェブサイトのトラッキングサービス(Java)。
最後の一つは、デベロッパーが開発したWordPressのプラグインで、③NewStatPress(PHP言語)です。
(続きを読む…)