XC Malicious User Detection & Mitigation
※本資料の画面表示や名称は資料作成時点の画面表示を利用しております。アップデート等より表示が若干異なる場合がございます。
XC Malicious User Detection & Mitigation を利用する方法や、各種設定について紹介します
マニュアルは以下のページを参照してください
1. XC Malicious User Detection & Mitigation について
XC Malicious User Detection & Mitigationは、以下の特徴を備えております
- サイトへのアクセスからユーザを識別し、ある特定のユーザのセキュリティ侵害や攻撃トラフィック、またJavaScript や Captcha の結果など、様々な観点から調査し、そのユーザのふるまいから悪意あるユーザであるか判定
- 識別したユーザの通信をダッシュボードで確認
- 対象のユーザからの通信をブロック
- Malicious User の機能は、XCが提供する AI & ML の機能を利用しています。Malicious User Detection の設定を単一(Single)の Load Balancer で利用する場合と、複数(Multi)の Load Balancer で利用する場合で設定方法が異なる
XC WAAPはこれらの高度なセキュリティをアプリケーションの迅速な展開に合わせて自由にご利用いただける環境を実現します
2. Single LB で Malicious User の設定
単一のLoad Balancerで設定する方法を示します
1. Malicious User Detection & Mitigation の設定
作成済みのHTTP Load Balancerに Malicious User Detaction & Mitigation に関連するパラメータを設定します。 HTTP Load Balancer の設定手順は こちら を参照ください
画面左側 Manage欄の Load Balancers
、 HTTP Load Balancers
を開き、対象のLoad Balancerを表示し画面右側に遷移します。
すでに作成済みのオブジェクトを変更する場合、対象のオブジェクト一番右側 ‥
から、 Manage Configuration
をクリックします
設定の結果が一覧で表示されます。画面右上 Edit Configuration
から設定の変更します。
Security Configuration 欄 右上の Show Advanced Fields
をクリックします。
動作確認するクライアントの通信を Malicious User として判定するため、App Firewallを用いて通信をブロックします。 以前作成した App Firewall のポリシーを割り当てます。(App Firewallの操作手順は XC WAF を参照してください。
Malicious User Mitigation の方法を指定します。
Select Type of Challenge
で Policy Based Challenge
を選択し、 Configure
をクリックしてください。
Policy Based Challenge
の設定が表示されますので、内容を変更せず初期設定のまま Apply
をクリックしてください。
Malicious User Detection の方法を指定します。
今回は、単一のLoad Balancerを対象とした設定となりますので、 ML Config
で Single Load Balancer Application
を選択します。
その配下に表示される Malicious User Detection
で Enable Malicious User Detection
を選択してください。
その他機能は利用しませんので、 無効 (Disable)
を選択してください
正しく設定されたことを確認し、画面最下部の Apply
をクリックしてください。
3. Single LB での Malicious User の動作確認
1. Curlコマンドによる Malicious User の確認
以下Curlコマンドを実行します。1秒毎にクロスサイトスクリプティング(XSS)として検知されるリクエストを送付します。
1 | $ while : ; do sleep 1 ; date ; curl -ks "https://echoapp.f5demo.net/?<script>" ; done |
一定時間、コマンドを実行してください。
次の項目からステータスの確認について説明します。これらの内容が確認できれば、 Ctrl-C
でコマンドを停止させてください
2. Security Event の確認
以下の手順で Security Event を開いてください
最新の情報を取得するため、画面右上 Refresh
をクリックしてください。
画面中段で Security Events
が選択され、下に WAF events
の一覧が表示されていることを確認してください。
いくつかログが表示されており、XSS を検知していることがわかります。
詳細は別途 XC WAF を参照ください。
画面中段の Malicious User Events
が選択してください。
下に Malicious User events
の一覧が表示されていることを確認してください。
どのようなユーザが、どのようなイベントで検知されたか確認することができます。
JSONの表示内容は以下のとおりです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | { "country": "JP", "kubernetes": {}, "app_type": "ves-io-http-loadbalancer-demo-echo-lb", "summary_msg": "4 WAF security events in last 15 seconds.", "waf_sec_event_count": 100, "failed_login_suspicion_score": 0, "mitigation_activity_info": "{\"mum_captcha_challenge\":10,\"mum_js_challenge\":0,\"mum_temporarily_blocking\":0}", "incremental_activity_info": "{\"err_count\":0,\"failed_login_count\":0,\"forbidden_access_count\":0,\"req_count\":14,\"waf_sec_event_count\":4}", "suspicion_log_type": "detection", "hostname": "master-1", "req_count": 2286, "tenant": "f5-apac-ent-uppdoshj", "longitude": "139.689900", "app": "obelix", "source_type": "kafka", "pdf_inference_score": [ 0, 0, 0, 0 ], "start_time": 1646835501, "feature_score": "{}", "gmm_anomaly": 0, "err_count": 798, "region": "13", "city": "Tokyo", "latitude": "35.689300", "messageid": "6f2a6baa-3a2c-470f-a0ec-527c63f5c723", "method_counts": "{\"CONNECT\":0,\"DELETE\":0,\"GET\":2151,\"HEAD\":0,\"OPTIONS\":0,\"PATH\":0,\"POST\":135,\"PUT\":0,\"TRACE\":0}", "smg_anomaly": 0, "network": "18.176.0.0", "src_ip": "18.178.83.1", "failed_login_count": 0, "forbidden_access_suspicion_score": 0, "stream": "svcfw", "suspicion_score": 1, "message_key": null, "severity": "info", "cluster_name": "ty8-tky-int-ves-io", "headers": {}, "threat_level": "High", "types": "input:string", "ip_reputation_suspicion_score": 0, "behavior_anomaly_score": 0, "end_time": 1646835516, "apiep_anomaly": 0, "message": "User Suspicion Score", "site": "ty8-tky", "@timestamp": "2022-03-09T14:18:36.042Z", "forbidden_access_count": 31, "namespace": "h-matsumoto", "time": "2022-03-09T14:18:36.042Z", "asn": "AMAZON-02(16509)", "sec_event_type": "malicious_user_sec_event", "user": "IP-18.178.83.1", "vh_name": "ves-io-http-loadbalancer-demo-echo-lb", "waf_suspicion_score": 1 } |
- 4行目にメッセージの概要が表示されています
- 8行目、9行目では、このイベントでどのような
Activity
が行われているのか確認できます - 38行目では
suspicion_score
、43行目ではthreat_level
が表示されています
その他にも多くの情報が記載されておりますので、適宜参照してください。
3. Malicious Users の確認
Security Event は主に時系列でのイベントを表示しています。 Malicious Users では、Malicious User と判定されたユーザ毎にどのような判定がなされたのかその経緯を俯瞰的に確認することが可能です。
画面上部 Malicious Users
をクリックしてください。
この例では、画面左側 Malicious User
が1つで、そのアクティビティの詳細が右側に表示されます。
複数の Malicious User が検知されている場合には複数表示されます
各エントリにリンクとして表示される項目をクリックすると、項目に該当する期間のEventを確認することができます
また実際にブロックされた場合には、Error 403 Forbidden
という形で通信がブロックされます
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | > GET /?<script> HTTP/2 > Host: echoapp.f5demo.net > User-Agent: curl/7.58.0 ** 省略 ** < HTTP/2 403 < content-length: 27653 < content-type: text/html; charset=UTF-8 ** 省略 ** <h1> Error 403 - Forbidden </h1> |
4. JS / Captcha Challenge の確認
JavaScript や Captcha を用いて Malicious User であるかどうか検査することが可能です。 以下に動作確認を目的としたパラメータの変更方法と動作確認の結果を紹介します。
1. Challenge Type の選択
HTTP Load Balancer の設定変更します。
Security Configuration 欄 右上の Show Advanced Fields
をクリックします。
先程設定した Challenge に関する設定を変更します。
Select Type of Challenge
の Policy Based Challenge
下の Edit Configuration
をクリックしてください。
表示された画面の Select Type of Challenge
のプルダウンから項目が選択できます。
2. JS Challenge の設定・確認
Javascript による Challenge の動作を確認します。
プルダウンから Always enable JS Challenge
を選択し、
画面最下部の Apply
をクリックし、さらに、HTTP Load Balancer の Apply
をクリックし設定を反映してください。
設定の反映後、ブラウザで https://echoapp.f5demo.net/
にアクセスしてください。
JS Challenge
は、HTTP Load Balancer がリクエストに対し、Malicious User であるか判定するのに用いる JavaScript を応答し動作を確認します。
初期設定では以下のような画面が表示され、画面の案内の通り1秒後画面が本来期待したコンテンツへと切り代わります。
JS Challenge の表示
正しくCpatchaが処理され、コンテンツが表示される
3. Captcha Challenge の設定・確認
Captcha による Challenge の動作を確認します。
プルダウンから Always enable JS Challenge
を選択し、
画面最下部の Apply
をクリックし、さらに、HTTP Load Balancer の Apply
をクリックし設定を反映してください。
設定の反映後、ブラウザで https://echoapp.f5demo.net/
にアクセスしてください。
Captcha Challenge
は、HTTP Load Balancer がリクエストに対し、Malicious User であるか判定するのに用いる Captcha を応答し動作を確認します。
以下のような画面が表示されます。ユーザは自身がロボットではないことを証明するため、チェックボックスにチェックを入れた後、支持に従って画像を選択します。
その後、本来期待したコンテンツへと切り代わります。
Captchaの表示
正しくCpatchaが処理され、コンテンツが表示される
注釈
JS / Captcha Challengeがクライアントに表示される動作は、各種ログ Security Events
や Malicious Users
に都度記録されるものではありません
5. XC Malicious User Detection の解除
その他の機能を確認するため設定を解除する手順です。
こちら の手順を参考に、HTTP Load Balancerに割り当てたMalicious Userの設定を解除してください
6. Terraform を用いた HTTP Load Balancer + Malicious User Detection の作成
ここで紹介したHTTP load Balancer + Malicious User Detection を Terraform を使ってデプロイすることが可能です。
Terraform の利用で必要となる事前作業については こちら の手順を参考してください
パラメータの指定
実行に必要なファイル、また実行環境に合わせたパラメータを指定してください
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | $ git clone https://github.com/BeF5/f5j-dc-waap-automation $ cd f5j-dc-waap-automation/terraform/malicious-user-detection $ vi terraform.tfvars # ** 環境に合わせて適切な内容に変更してください ** api_p12_file = "**/path/to/p12file**" // Path for p12 file downloaded from VoltConsole api_url = "https://**api url**" // API URL for your tenant # 本手順のサンプルで表示したパラメータの場合、以下のようになります myns = "**your namespace**" // Name of your namespace op_name = "demo-origin-pool" // Name of Origin Pool pool_port = "80" // Port Number server_name1 = "**your target fqdn1**" // Target Server FQDN1 server_name2 = "**your target fqdn1**" // Target Server FQDN2 httplb_name = "demo-echo-lb" // Name of HTTP LoadBalancer mydomain = ["echoapp.f5demo.net"] // Domain name to be exposed cert = "string///**base 64 encode SSL Certificate**" // SSL Certificate for HTTPS access private_key = "string///**base 64 encode SSL Private Key**" // SSL Private Key for HTTPS access // WAF Parameter waf_name = "demo-app-fw" // Name of App Firewall |
Terraform でオブジェクトを作成すると、Malicious User Detectionの動作を確認できます。
その他、本資料で紹介した、JS/Captcha Challenge について確認をしたい場合、以下の内容を参考に main.tf
を修正してください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | // Manage HTTP LoadBalancer resource "volterra_http_loadbalancer" "example" { name = var.httplb_name namespace = var.myns domains = var.mydomain advertise_on_public_default_vip = true // no_challenge = true policy_based_challenge { default_js_challenge_parameters = true default_captcha_challenge_parameters = true default_mitigation_settings = true no_challenge = true // JS/Captcha Challenge を利用する場合、こちらをコメントアウトしてください // always_enable_js_challenge = true // JS Challenge を利用する場合、こちらの行を有効にしてください // always_enable_captcha_challenge = true // Captcha Challenge を利用する場合、こちらの行を有効にしてください } |
Terraform の利用
以下コマンドを参考に実行および削除をしてください。
1 2 3 4 5 6 7 8 9 | # 実行前事前作業 $ terraform init $ terraform plan # 設定のデプロイ $ terraform apply # 設定の削除 $ terraform destroy |
7. API を用いた HTTP Load Balancer + Malicious User Detection の作成
ここで紹介したHTTP load Balancer + Malicious User Detection を API を使ってデプロイすることが可能です。
API の利用で必要となる事前作業については こちら の手順を参考してください
以下マニュアルを参考に、パラメータを指定して実行してください。
- HTTP Load Balancer
- API for http_loadbalancer
- Example of creating http_loadbalancer
- ページ中段
Request using curl
をご覧ください
- ページ中段
送付するJSON データの書式は実際に作成したコンフィグのJSONデータからも確認をいただけます。合わせてご確認ください
パラメータの指定
GitHubよりファイルを取得します。 malicious-user-detection-httplb.json
をAPIの値として指定します。
**<変数名>**
が環境に合わせて変更するパラメータとなります。適切な内容に変更してください。
Originl Pool Object
は HTTP Load Balancer の Originl Pool 作成手順に従って作成ください。App Firewall Object
は WAF の App Firewall 作成手順に従って作成してくださいAPIの利用
以下のサンプルを参考にAPIを実行してください。 証明書のファイル名、パスワード情報は適切な内容を指定してください。
- ファイル取得
1 2 | $ git clone https://github.com/BeF5/f5j-dc-waap-automation $ cd f5j-dc-waap-automation/api/malicious-user-detection |
- オブジェクトの作成
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | # Originl Pool の作成 (HTTP LoadBalancer のパラメータを指定) $ curl -k https://**tenant_name**.console.ves.volterra.io/api/config/namespaces/**namespace**/origin_pools \ --cert **/path/to/api_credential.p12-file**:**password** \ --cert-type P12 \ -X POST \ -d @../http-load-balancer/base-origin-pool.json # APP Firewall の作成 $ curl -k https://**tenant_name**.console.ves.volterra.io/api/config/namespaces/**namespace**/app_firewalls \ --cert **/path/to/api_credential.p12-file**:**password** \ --cert-type P12 \ -X POST \ -d @../waf/app-fw.json # HTTP LB の作成 $ curl -k https://**tenant_name**.console.ves.volterra.io/api/config/namespaces/**namespace**/http_loadbalancers \ --cert **/path/to/api_credential.p12-file** \ --cert-type P12 \ -X POST \ -d @malicious-user-detection-httplb.json |
- オブジェクトの削除
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | # HTTP LB の削除 $ curl -k https://**tenant_name**.console.ves.volterra.io/api/config/namespaces/**namespace**/http_loadbalancers/**httplb_name** \ --cert **/path/to/api_credential.p12-file** \ --cert-type P12 \ -X DELETE # APP Firewall の削除 $ curl -k https://**tenant_name**.console.ves.volterra.io/api/config/namespaces/**namespace**/app_firewalls \ --cert **/path/to/api_credential.p12-file** \ --cert-type P12 \ -X DELETE # Origin Pool の削除 $ curl -k https://**tenant_name**.console.ves.volterra.io/api/config/namespaces/**namespace**/origin_pools/**op_name** \ --cert **/path/to/api_credential.p12-file** \ --cert-type P12 \ -X DELETE |