目次

  1. 1.はじめに
  2. 2.不正管理アカウント乗っ取り防止(ATP)ルール とは
  3. 3.設定方法
  4. 4.テスト
  5. 5.WafCharm での対応
  6. 6.おわりに

1. はじめに

2022年2月11日 PTD に AWS WAF のアップデートにより、不正管理アカウント乗っ取り防止(ATP)のマネージドルールが利用できるようになりましたので、設定方法について説明します。

2. 不正管理アカウント乗っ取り防止(ATP)ルール とは

アカウント情報を不正に乗っ取るアクセスや、すでに漏洩していると思われるアクセスを監視及び制御するための AWS が提供するマネージドルールとなります。ATP は 「Account takeover prevention」の略称となります。

ルールの内容としては大きく分けて二つあります。
・異常なログイン試行を検知するルール
・すでに漏洩したと思われる資格情報をダークウェブ上から入手して検査するルール

異常なログイン試行のルール例は、アカウントを固定してパスワードを変え続けたアクセスを検知したり、パスワードを固定してアカウントを変え続けたアクセスを検知したり、長時間続くセッションなどを検知するようです。

ダークウェブとはインターネットを利用するものの、通常のブラウザでアクセスすることができないウェブとなります。匿名でのアクセスとなることから違法性の高いやりとりが行われる場として利用されるケースがあります。流出したアカウント情報もダークウェブ上でやりとりされているようで、その情報と照合してくれるルールが提供されるようです。

ルール名 説明とラベル
VolumetricIpHigh 個々のIPアドレスから送信された大量のリクエストを検査します。
high ルールは次のラベルをリクエストに適用しますが、ルールアクションは評価 のあるWebリクエストにのみ適用されます。
awswaf:managed:aws:atp:aggregate:volumetric:ip:high
awswaf:managed:aws:atp:aggregate:volumetric:ip:medium
awswaf:managed:aws:atp:aggregate:volumetric:ip:low
AttributePasswordTraversal パスワードトラバーサルを使用する試行を検査します。
awswaf:managed:aws:atp:aggregate:attribute:password_traversal
AttributeLongSession 長時間続くセッションを使用する試行を検査します。
awswaf:managed:aws:atp:aggregate:attribute:long_session
AttributeUsernameTraversal ユーザー名トラバーサルを使用する試行を検査します。
awswaf:managed:aws:atp:aggregate:attribute:username_traversal
AttributeCompromisedCredentials 盗まれた資格情報を使用する試みを検査します。
awswaf:managed:aws:atp:aggregate:attribute:compromised_credentials
VolumetricSession 個々のセッションから送信された大量のリクエストを検査します。
awswaf:managed:aws:atp:aggregate:volumetric:session
MissingCredential 不足している資格情報を検査します。
awswaf:managed:aws:atp:signal:missing_credential
TokenRejected トークン検証サービスによって拒否されたトークンを検査します。
awswaf:managed:token:rejected
ルールはありません。
一致するリクエストごとに、ルールグループはラベルを追加し、リクエストに対してアクションを実行しません。
ラベルは、リクエストで送信されたクレデンシャルが盗まれたクレデンシャルデータベースに存在することを示します。
awswaf:managed:aws:atp:signal:credential_compromised
ルールはありません。
一致するリクエストごとに、トークンサービスはラベルを追加し、リクエストに対してアクションを実行しません。
ラベルは、リクエスト内のトークンがトークン検証サービスによって受け入れられたことを示します。
awswaf:managed:token:accepted

ラベルを付与されるだけの動きもあるようなので、後続にラベルを利用したルールを作成することでレスポンスをコントロールすることも想定しているようです。

ラベルの利用方法は以下のブログをご確認ください。
https://www.wafcharm.com/blog/aws-waf-label-usage-ja/

3. 設定方法

対象リージョンの us-east1 でWeb ACLを作成して試します。
対象の ACL の Rules から 「Add rules」を押して「Add managed rule groups」を選択します。

auto

Account takeover prevention を Add します。

auto

Edit するように指示がでますので Edit 画面を開きます。

auto

ログインパスとアカウント情報の形式を選択します。

auto

保存するとsaveできた旨が表示されましたので画面下の Add rules で登録します。

auto

ルールを登録後に対象のマネージドルールを確認すると先ほど設定したログインパスの情報が確認できます。また Edit で編集することも可能でした。

auto

必須ではありませんが、アプリケーション統合機能を設定することで自動攻撃に対する検出を強化することが可能です。公式情報では以下の説明があります。

The integration SDKs manage token authorization for your client applications, and help ensure that login attempts to your protected resource are only allowed after the client has acquired a valid token. Additionally, the SDKs gather information about the client to determine whether it's being operated by a bot or by a human being.

統合SDKは、クライアントアプリケーションのトークン認証を管理し、クライアントが有効なトークンを取得した後にのみ、保護されたリソースへのログイン試行が許可されるようにします。さらに、SDKはクライアントに関する情報を収集して、クライアントがボットによって操作されているのか、人間によって操作されているのかを判断します。

画面左にあるApplication Integration SDKs を開くと設定できるACLが表示されます。

auto

ACL を選択すると JavaScript SDK 用のコードが生成されました。

auto

アプリケーション側へ組み込むことでトークン認証を管理することができるようです。
詳しい導入方法は公式情報を確認してください。
※ Android および iOS モバイルアプリケーション用の SDK の用意もあります。

https://docs.aws.amazon.com/waf/latest/developerguide/waf-application-integration.html

4. テスト

どのような検知が行われるかテストを実施してみました。
用意した環境は API Gateway と Lambda を連携して簡単な HTML を返す単純な構成です。

・必要な情報が揃っていないケースとして、受け渡す JSON 上で password の項目を削ったところ、 MissingCredential として検知しました。password の項目はあるものの値は何も入れない形では検知することはありませんでした。

・盗まれたクレデンシャル情報をテストしたい場合にはすでに AWS が用意したアカウント情報が公開されているため、それを利用して実施したところ WAF ログ上に想定通りのラベルが付与されたことを確認しました。

https://docs.aws.amazon.com/waf/latest/developerguide/waf-atp-deploying.html

````
   "labels": [
        {
            "name": "awswaf:managed:aws:atp:signal:credential_compromised"
        }
    ]
````

この付与されたラベルを利用して後続ルールを作成し、BLOCKすることも確認できました。

auto

・同一IPから同一アカウント、同一パスワードという形で繰り返しアクセスを短期間に行ったところ、VolumetricIpHigh のルールにマッチしました。ラベルは low 〜 high まで設定があり徐々に付与されるラベルが増えていきました。

````
      "labels": [
              {
                     "name": "awswaf:managed:aws:atp:aggregate:volumetric:ip:low"
              },
              {
                     "name": "awswaf:managed:aws:atp:aggregate:volumetric:ip:high"
              },
              {
                     "name": "awswaf:managed:aws:atp:aggregate:volumetric:ip:medium"
              }
       ]
````

VolumetricIpHigh のルールでは high の状況になると BLOCK されるので low の段階で止めてしまいたい場合はラベルルールを後続に付与することで、より厳しい対応も可能です。
ただし、環境によっては同一拠点からのログインを想定していることもあるかと思いますので注意が必要です。

・アカウントを固定してパスワードを変える形で AttributePasswordTraversal での検知も確認しようとしましたが、先に VolumetricIpHigh のルールが反応したため、同一IPからのテストはうまくいきませんでした。

・アプリケーション統合機能については、JavaScript を Lambda に設定した HTML に組み込み、トークンの付与がなされるかを確認したところ、ブラウザからのアクセスを実施後に aws-waf-token という名前でリクエストに含まれていることを確認できました。

````
{
                "name": "cookie",
                "value": "aws-waf-token=520afcXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX:XXXXXXXXXXXXXXXX:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX=="
            }
````

・ボットによる操作なのか、人間による操作なのかをアプリケーション統合により判断できるようになるとの記述もありましたが、テストアクセスをされた形跡もなく、どのような対応が行われるかを判断することはできませんでした。

5. WafCharm での対応

不正管理アカウント乗っ取り防止(ATP)のマネージドルールは、WafCharm ルールと併用しても問題ございません。

6. おわりに

アカウントを利用した不正アクセス対策としては豊富な機能があることが確認できました。有償な点は気になりますが、導入はおすすめです。
ただし現状全てのリージョンで利用できるわけではないので注意してください。※ 2022/2/17 現在