はじめに
サイバー攻撃がニュースで取り上げられてセキュリティに対する需要が高まりつつある今。
ひょんなことからAWS WAFのログを見ていると、なんとXSSの形跡があったので載せてみました。
実際のログ
早速ですが実際のログ全体を下記に貼り付けました。
今回のタイトルにあるXSSをブロックしたという内容を掘り下げたいと思います。
{"timestamp":1768265060971,
"formatVersion":1,
"webaclId":"arn:aws:wafv2:region:accountId:global/webacl/ACL_name",
"terminatingRuleId":"AWS-AWSManagedRulesCommonRuleSet",
"terminatingRuleType":"MANAGED_RULE_GROUP",
"action":"BLOCK",
"terminatingRuleMatchDetails":[{"conditionType":"XSS", "location":"BODY", "matchedData":["<?","xml"], "matchedFieldName":""}],
"httpSourceName":"CF",
"httpSourceId":"xxxxxxxxx",
"ruleGroupList":[{"ruleGroupId":"AWS#AWSManagedRulesCommonRuleSet", "terminatingRule":{"ruleId":"CrossSiteScripting_BODY", "action":"BLOCK", "ruleMatchDetails":null}, "nonTerminatingMatchingRules":[], "excludedRules":null, "customerConfig":null}],
"rateBasedRuleList":[],
"nonTerminatingMatchingRules":[],
"requestHeadersInserted":null,
"responseCodeSent":null,
"httpRequest":{"clientIp":"45.157.54.xx", "country":"IQ", "headers":[{"name":"host", "value":"xxxxxx.co.jp"}, {"name":"user-agent", "value":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36"}, {"name":"accept", "value":"*/*"}, {"name":"content-type", "value":"text/xml"}, {"name":"content-length", "value":"267"}],
"uri":"/xmlrpc.php", "args":"",
"httpVersion":"HTTP/2.0",
"httpMethod":"POST",
"requestId":"xxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"fragment":"", "scheme":"https", "host":"xxxxxxxx.co.jp"},
"labels":[{"name":"awswaf:managed:aws:core-rule-set:CrossSiteScripting_Body"}],
"requestBodySize":267, "requestBodySizeInspectedByWAF":267,
"ja3Fingerprint":"f436b9416f37d134cadd04886327d3e83897dfa",
"ja4Fingerprint":"t13d3113h2_e8f1e7e78f70_1b3407easd9f8_2c936"}
どのルールが適用されたのか
AWSのマネージドルールが適用された事が確認できます。
- terminatingRuleId(終了ルールID):AWS-AWSManagedRulesCommonRuleSet
- terminatingRuleType(終了ルールのタイプ):MANAGED_RULE_GROUP
またその詳細が下記になります。
terminatingRuleMatchDetails(終了ルールの一致詳細)の中
- conditionType(状態タイプ):XSS
- location(場所):BODY
- matchedData(一致したデータ):["<?","xml"](WAFのXSSルールが <?xml という記述を「攻撃の可能性がある文字列(シグネチャ)」として検知したことを示す)
最初見た時はこれってどういう事???と思ったんですが、もっと下の方を見ると状況が理解できました。
HTTPリクエストの詳細
- clientIp(クライアントIP)これが接続元のIPアドレス。
- country(国)これがイラクになってます。
- accept:クライアントが許容するデータ「/」ワイルドカードになっています。あらゆるコンテンツタイプを受け入れますという意味です。(APIやクローラーがよく使う設定)
- content-type:こちらに送信されたデータ形式「text/xml」。
- uri:リソースが存在する場所を示すんですが、これが「/xmlrpc.php」になってます。
これらの情報から、WordPressの脆弱性を狙ったスキャン(攻撃の足掛かり探し)ではないかと推測できます。
実際にググッてみると、下記の情報にたどり着きました。
基本情報を勉強していた時に、「WordPressは過去にディレクトリートラバーサルの脆弱性があり多くのユーザーが被害を受けた」という話しを例にあげていたぐらいでした。
開発していてHTTPリクエストのヘッダー情報を気にする事が無いんですが、こうやってまじまじと見てみると思ったより楽しく感じました(笑)
本来はXMLデータとしての送信ですが、WAFの検知ロジックが <?xml という文字列を(HTMLタグに似ているため)XSSのリスクとして拾い上げたようです。このように、攻撃意図が別(脆弱性スキャンなど)であっても、WAFが汎用的なルールでブロックしてくれるのは心強いですね。
おわりに
普段あまりログなんて見ないので確認するきっかけがあり、初めて実際にXSSの攻撃を受けているのだと気付きました。
私の部署はwebアプリケーションを開発しているメンバーはインフラを別の部署に任せているので開発に集中できます。
でもサーバーレスの場合はこちらがインフラ周りの設定等もしないといけないので、広範囲の知識がないとメンテすらできないなと感じました。
セキュアなシステム構築に向けてもっと勉強していこうと思います!