【Welcartセキュリティ対策 – ブルートフォースアタック編】
WordPressのECプラグイン「Welcart」をお使いの方で、世界中から日々不正なログインを試みようとブルートフォースアタック(総当り辞書攻撃)を受けている方に、簡単にできる対策例をご紹介いたします。
管理者ログインの方はWordPressのプラグインやフックスクリプトでセキュリティ対策をおこなっていると思いますが、会員ログインはWelcart実装なので、あまりソリューションが落ちていません。
Welcartはデフォルトのログインフォームが固定ページのIDが7番で構築されているので、ここが狙われます。
ここに対して、ログインに必要な各パラメータを変えながらアタックしてきます。
(ちなみに弊社システムでは、1日あたり多いときで、中国をブロックするまでは8,000回、ブロック後は2,000回くらいのアタックがありました)
簡単で効果的な対策として、3行のクエリ発行で、この攻撃を無害化する対策をご紹介いたします。
WelcartのDBにログインして、以下を発行します。
UPDATE wp_posts SET ID={まだ使用されていない任意のID} WHERE ID=7; UPDATE wp_postmeta SET post_id={まだ使用されていない任意のID} WHERE post_id=7; UPDATE wp_options SET option_value={まだ使用されていない任意のID} WHERE option_name='usces_member_number';
これでログインフォームの固定ページのIDが任意のIDに変更されるので、上述の攻撃はすべて404エラーになります。
必要な対策はこれだけですが、もうひとつ付け加えると、攻撃者が404を検知した場合に、攻撃用の辞書がIDもインクリメントしてブルートフォースを実行してくる場合、いずれ変更した任意のIDに追いついてしまうので、あえて200を返すという方法も書いておきます。
functions.php
add_action('parse_query', 'my_parse_query'); function my_parse_query($query) { if (isset($_REQUEST['page_id']) && $_REQUEST['page_id'] === '7') { http_response_code(200); sleep(10); exit(); } }
ついでに10秒程度のスリープも入れて、サーバーリソースを優しく労わってあげます。
汎用的なシステムは攻撃手法も汎用化されています。
IPSやWAFによる包括的な対策と共に、今回のような局所的な対策をおこなうことで、システム堅牢化の維持・向上に努めたいものですね。