AWS WAF を利用して、WordPress「XML-RPC」への不正アクセスを制限してみた

2016.12.14

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

AWSチームのすずきです。

ALB(Application Load Balancer)に対応した「AWS WAF」を利用し、 WordPressのAPI(XML-RPC)への不正な呼び出しを制限する機会がありました。 その設定方法について紹介させて頂きます。

経緯

  • WordPressのAPI(XML-RPC)に対し、多数の「xmlrpc.php」宛のリクエストが発生
  • 負荷分散に利用していたELBを、CLB→ALBと変更し、AWS WAFによるアクセス制限を実施しました

アクセスログ

  • ELBのアクセスログより抜粋
  • IP等はマスク済
2016-12-12T04:00:00.339366Z elb-name 51.00.00.00:42048 10.00.00.00:80 0.000035 0.084439 0.000093 200 200 301 370 "POST http://52.00.00.00:80/xmlrpc.php HTTP/1.0" "Mozilla/4.0 (compatible: MSIE 7.0; Windows NT 6.0)" - -
2016-12-12T04:00:00.567752Z elb-name 51.00.00.00:44392 10.00.00.00:80 0.000038 0.136221 0.000071 200 200 294 370 "POST http://52.00.00.00:80/xmlrpc.php HTTP/1.0" "Mozilla/4.0 (compatible: MSIE 7.0; Windows NT 6.0)" - -
2016-12-12T04:00:00.628673Z elb-name 51.00.00.00:59698 10.00.00.00:80 0.000033 0.088418 0.000049 200 200 294 370 "POST http://52.00.00.00:80/xmlrpc.php HTTP/1.0" "Mozilla/4.0 (compatible: MSIE 7.0; Windows NT 6.0)" - -

WAF設定

リクエストヘッダに含まれるURIとして「/xmlrpc.php」を含む全てのアクセスの制限を行いました。

Confitionの作成

  • WAFのチェック対象とする条件を指定します
  • リクエストヘッダ(URI)の文字列判定を行う条件として、「String matching」を指定し 「Create condition」を行います

waf-url-block-01

Confition設定

  • ALBで利用するリージョンの指定と、条件の名称を設定します

waf-url-block-02

Filter 設定

  • 対象として「URI」を指定します
  • 判定条件は「Contains」部分一致とし、判定文字列は「/xmlrpc.php」とします
  • URLエンコード、Base64エンコードされた不正呼び出しに備え、「Transformation」「Value is base64 encoded」の指定を実施しました

waf-url-block-03

Rule 作成

  • 先に作成した「Confition」を含む、「Rule」を作成します。

waf-url-block-04

  • 任意の名称と、保護対象のALBが存在するリージョンを指定します
  • 先に作成した、「Condition」を指定し、ルールを作成します。

waf-url-block-05

ACLの作成

  • ACLを作成します。

waf-url-block-06

  • 任意のACL名と、保護対象のALBを指定します

waf-url-block-07

  • 保護対象のALB名は、予めEC2のロードバランサー画面で確認します。

waf-url-block-08

  • 今回は、作成済みの設定(Condition)を利用するため、そのまま「Next」に進みます

waf-url-block-09

  • 先に作成した「Rules」を指定します
  • 今回、指定条件に一致したリクエストはアクセス禁止(Block)、他は全て許可(Allow)とする設定としました。

waf-url-block-10

  • 設定内容を確認し、ACLを作成します

waf-url-block-11

確認

  • 「/xmlrpc.php」を含むアクセス、HTTPレスポンスコード403が戻ります
  • HTTPSでのアクセスも、WAFでブロックする事が可能です。

waf-url-block-12

まとめ

ALBとAWS WAFを利用する事で、EC2のサーバリソースを圧迫する事無く、簡単にアクセス制限を実施する事が可能になりました。

安価な費用(1つのACLあたり5$、1つのルールあたり1$、100 万ウェブリクエストあたり 0.60 $)利用でき、 簡単な設定で不正アクセス制限を実現できる AWS WAF、 AWS上で稼働するWebアプリケーションの保護対策の一つとして是非ご活用ください。