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 BalancersHTTP Load Balancers を開き、対象のLoad Balancerを表示し画面右側に遷移します。

../../_images/dcs-edit-lb5.jpg

すでに作成済みのオブジェクトを変更する場合、対象のオブジェクト一番右側 から、 Manage Configuration をクリックします

../../_images/dcs-edit-lb23.jpg

設定の結果が一覧で表示されます。画面右上 Edit Configuration から設定の変更します。 Security Configuration 欄 右上の Show Advanced Fields をクリックします。

動作確認するクライアントの通信を Malicious User として判定するため、App Firewallを用いて通信をブロックします。 以前作成した App Firewall のポリシーを割り当てます。(App Firewallの操作手順は XC WAF を参照してください。

../../_images/dcs-edit-lb-malicious-user-waf.jpg

Malicious User Mitigation の方法を指定します。 Select Type of ChallengePolicy Based Challenge を選択し、 Configure をクリックしてください。 Policy Based Challenge の設定が表示されますので、内容を変更せず初期設定のまま Apply をクリックしてください。

../../_images/dcs-edit-lb-malicious-user.jpg

Malicious User Detection の方法を指定します。 今回は、単一のLoad Balancerを対象とした設定となりますので、 ML ConfigSingle Load Balancer Application を選択します。 その配下に表示される Malicious User DetectionEnable Malicious User Detection を選択してください。 その他機能は利用しませんので、 無効 (Disable) を選択してください

../../_images/dcs-edit-lb-single-malicious-user.jpg

正しく設定されたことを確認し、画面最下部の Apply をクリックしてください。

../../_images/dcs-edit-lb-malicious-user-apply.jpg

3. Single LB での Malicious User の動作確認

1. Curlコマンドによる Malicious User の確認

以下Curlコマンドを実行します。1秒毎にクロスサイトスクリプティング(XSS)として検知されるリクエストを送付します。

Curl コマンドを使った https://echoapp.f5demo.net への接続結果
1
$ while : ; do sleep 1 ; date ; curl -ks "https://echoapp.f5demo.net/?<script>"  ; done

一定時間、コマンドを実行してください。 次の項目からステータスの確認について説明します。これらの内容が確認できれば、 Ctrl-C でコマンドを停止させてください

2. Security Event の確認

以下の手順で Security Event を開いてください

../../_images/dcs-app-fw-log3.jpg ../../_images/dcs-app-fw-log21.jpg

最新の情報を取得するため、画面右上 Refresh をクリックしてください。 画面中段で Security Events が選択され、下に WAF events の一覧が表示されていることを確認してください。 いくつかログが表示されており、XSS を検知していることがわかります。

../../_images/dcs-malicious-user-log.jpg

詳細は別途 XC WAF を参照ください。

画面中段の Malicious User Events が選択してください。 下に Malicious User events の一覧が表示されていることを確認してください。

../../_images/dcs-malicious-user-log2.jpg

どのようなユーザが、どのようなイベントで検知されたか確認することができます。

JSONの表示内容は以下のとおりです。

Malicious User waf_sec_event
 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 が検知されている場合には複数表示されます

../../_images/dcs-malicious-user-log3.jpg

各エントリにリンクとして表示される項目をクリックすると、項目に該当する期間の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. ブラウザによる Malicious User の確認

ブラウザで複数回、継続して攻撃に相当するリクエストを送ることで Malicious User として検知することが可能です。

ブラウザで、攻撃として検知されるURL https://echoapp.f5demo.net/?<script> にアクセスし、連続して一定時間ページの更新を行ってください。

攻撃がブロックされると以下のような画面が表示されます

../../_images/dcs-malicious-user-browser.jpg

4. JS / Captcha Challenge の確認

JavaScript や Captcha を用いて Malicious User であるかどうか検査することが可能です。 以下に動作確認を目的としたパラメータの変更方法と動作確認の結果を紹介します。

1. Challenge Type の選択

HTTP Load Balancer の設定変更します。 Security Configuration 欄 右上の Show Advanced Fields をクリックします。

先程設定した Challenge に関する設定を変更します。 Select Type of ChallengePolicy Based Challenge 下の Edit Configuration をクリックしてください。

../../_images/dcs-edit-lb-malicious-user-challenge.jpg

表示された画面の Select Type of Challenge のプルダウンから項目が選択できます。

2. JS Challenge の設定・確認

Javascript による Challenge の動作を確認します。 プルダウンから Always enable JS Challenge を選択し、 画面最下部の Apply をクリックし、さらに、HTTP Load Balancer の Apply をクリックし設定を反映してください。

../../_images/dcs-edit-lb-malicious-user-challenge2.jpg

設定の反映後、ブラウザで https://echoapp.f5demo.net/ にアクセスしてください。

JS Challenge は、HTTP Load Balancer がリクエストに対し、Malicious User であるか判定するのに用いる JavaScript を応答し動作を確認します。 初期設定では以下のような画面が表示され、画面の案内の通り1秒後画面が本来期待したコンテンツへと切り代わります。

  • JS Challenge の表示

    ../../_images/dcs-edit-lb-malicious-js-challenge-browser.jpg
  • 正しくCpatchaが処理され、コンテンツが表示される

    ../../_images/dcs-edit-lb-malicious-challenge-result.jpg

3. Captcha Challenge の設定・確認

Captcha による Challenge の動作を確認します。 プルダウンから Always enable JS Challenge を選択し、 画面最下部の Apply をクリックし、さらに、HTTP Load Balancer の Apply をクリックし設定を反映してください。

../../_images/dcs-edit-lb-malicious-user-challenge3.jpg

設定の反映後、ブラウザで https://echoapp.f5demo.net/ にアクセスしてください。

Captcha Challenge は、HTTP Load Balancer がリクエストに対し、Malicious User であるか判定するのに用いる Captcha を応答し動作を確認します。 以下のような画面が表示されます。ユーザは自身がロボットではないことを証明するため、チェックボックスにチェックを入れた後、支持に従って画像を選択します。 その後、本来期待したコンテンツへと切り代わります。

  • Captchaの表示

    ../../_images/dcs-edit-lb-malicious-captcha-challenge-browser.jpg ../../_images/dcs-edit-lb-malicious-captcha-challenge-browser2.jpg
  • 正しくCpatchaが処理され、コンテンツが表示される

    ../../_images/dcs-edit-lb-malicious-challenge-result.jpg

注釈

JS / Captcha Challengeがクライアントに表示される動作は、各種ログ Security EventsMalicious Users に都度記録されるものではありません

5. XC Malicious User Detection の解除

その他の機能を確認するため設定を解除する手順です。

こちら の手順を参考に、HTTP Load Balancerに割り当てたMalicious Userの設定を解除してください

../../_images/dcs-single-malicious-user-disable.jpg

6. Terraform を用いた HTTP Load Balancer + Malicious User Detection の作成

ここで紹介したHTTP load Balancer + Malicious User Detection を Terraform を使ってデプロイすることが可能です。

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 を修正してください。

main.tf JS/Captch Challenge に関する内容
 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 の利用

以下コマンドを参考に実行および削除をしてください。

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 の利用で必要となる事前作業については こちら の手順を参考してください

以下マニュアルを参考に、パラメータを指定して実行してください。

送付する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を実行してください。 証明書のファイル名、パスワード情報は適切な内容を指定してください。

  • ファイル取得
APIによるオブジェクトの作成
1
2
$ git clone https://github.com/BeF5/f5j-dc-waap-automation
$ cd f5j-dc-waap-automation/api/malicious-user-detection
  • オブジェクトの作成
APIによるオブジェクトの作成
 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
  • オブジェクトの削除
APIによるオブジェクトの削除
 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