NGINX App Protect WAF (NAP WAF)
#######
NAP WAF について
====
NAP WAFは、ワールドワイドで実績豊富なF5製WAFの機能を移植した、NGINX Plusの動的モジュールで実現するWAFです。
.. image:: ./media/nap-waf.jpg
:width: 400
| NAP WAFはNGINXの動的モジュールであるという特徴から、GatewayからIngress Controller、更にコンテナとして柔軟なデプロイが可能です。
| アプリケーションの性質によりセキュリティ機能の実装方法が異なると思いますが、NAP WAFはその柔軟な適応力から最適な形でWAFを実現することができます。
.. image:: ./media/nap-waf-structure.jpg
:width: 400
| 以下項目では主要な設定について、それぞれの設定と動作を確認します。
| 設定の詳細は、 `こちら `__ の内容を参照してください。
1. シンプルなWAFの設定
====
1. 設定
----
WAFを設定します
.. code-block:: cmdin
# sudo su
cd /etc/nginx/conf.d
cp ~/f5j-nginx-plus-lab2-security-conf/waf/waf-l1_demo.conf default.conf
cp ~/f5j-nginx-plus-lab2-security-conf/waf/waf-l1_custom_log_format.json custom_log_format.json
cp ~/f5j-nginx-plus-lab2-security-conf/waf/waf-l1_custom_policy.json custom_policy.json
WAFの設定を確認します
設定ファイルを確認します。 ``listen 80`` の server block にて各種WAFの設定を読み込んでいます。
.. code-block:: cmdin
cat default.conf
.. code-block:: bash
:linenos:
:caption: 実行結果サンプル
:emphasize-lines: 7-10, 13
upstream server_group {
zone backend 64k;
server security-backend1:80;
}
# waf
server {
listen 80;
app_protect_enable on;
app_protect_security_log_enable on;
app_protect_security_log "/etc/nginx/conf.d/custom_log_format.json" syslog:server=elasticsearch:5144;
location / {
app_protect_policy_file "/etc/nginx/conf.d/custom_policy.json";
proxy_pass http://server_group;
}
}
# no waf
server {
listen 81;
location / {
proxy_pass http://server_group;
}
}
| NAP WAFでは、ログフォーマットをJSONファイルで指定します。
| 設定ファイルの内容を確認します。
.. code-block:: cmdin
cat custom_log_format.json
.. code-block:: bash
:caption: 実行結果サンプル
:linenos:
{
"filter": {
"request_type": "all"
},
"content": {
"format": "default",
"max_request_size": "any",
"max_message_size": "10k"
}
}
| NAP WAFでは、WAFのセキュリティポリシーをJSONファイルで指定します。
| 設定ファイルの内容を確認します。
.. code-block:: cmdin
cat custom_policy.json
.. code-block:: bash
:caption: 実行結果サンプル
:linenos:
:emphasize-lines: 7
{
"policy":
{
"name": "acceptall",
"template": { "name": "POLICY_TEMPLATE_NGINX_BASE" },
"applicationLanguage": "utf-8",
"enforcementMode": "transparent"
}
}
| このサンプルでは、まずWAF設定が正しく設定されることを確認しています。
| ``enforcementMode`` で ``transparent`` と指定しているため、通信のBlockは行われません。
プロセスを再起動し、設定を反映します
.. code-block:: cmdin
nginx -s reload
2. 動作確認
----
まず初めにサンプルアプリケーションにアクセスできることを確認します。
| バックエンドには ``OWASP Juice Shop`` というアプリケーションが動作しています。
| 正しく接続できることを確認します
.. code-block:: cmdin
curl -s localhost | grep title
.. code-block:: bash
:caption: 実行結果サンプル
:linenos:
OWASP Juice Shop
この通信の結果をELKで取得していることを確認します
``Jump Host`` でブラウザを起動し、 `http://elk:5601 `__ を開いてください
.. NOTE::
クライアント端末のブラウザより、以下の手順で接続いただくことも可能です
.. image:: ./media/udf_docker_elk.jpg
:width: 200
左上メニューを開いてください。
.. image:: ./media/elk-menu.jpg
:width: 400
``Discover`` をクリックし、表示された画面の `+ Add filter` の下にすでに登録されている ``waf-logs-*`` を選択してください
.. image:: ./media/elk-discover-waflogs.jpg
:width: 400
| 正しくNAP WAFよりログが転送されている場合、画面のようなグラフが表示されます。
| 画面の内容が最新の状態となっていない場合、画面右上の時間を確認の上、 ``Refresh`` をクリックしてください。
.. image:: ./media/elk-discover-waf2.jpg
:width: 400
| 表示されたログの詳細を一つ確認してみましょう。
| 当該のログの左側 ``>`` をクリックすると詳細が表示されます。参考に内容を確認すると ``bot_signature_name`` に ``curl`` と表示されていることがわかります。
.. image:: ./media/elk-l1-discover.jpg
:width: 400
通信は確認した通り許可されておりますが、Curlコマンドを利用した通信が到達していることが確認できます。
2. 通信のブロック
====
1. 設定
----
通信のブロックを行うため設定を変更します。
``Default Policy`` の設定・動作の詳細については、 `こちら Basic Configuration and the Default Policy `__ を参照してください
それでは、WAFのセキュリティポリシーのみ変更し、設定を反映します
.. code-block:: cmdin
# sudo su
# cd /etc/nginx/conf.d
# cp ~/f5j-nginx-plus-lab2-security-conf/waf/waf-l1_demo.conf default.conf
# cp ~/f5j-nginx-plus-lab2-security-conf/waf/waf-l1_custom_log_format.json custom_log_format.json
cp ~/f5j-nginx-plus-lab2-security-conf/waf/waf-l2_custom_policy.json custom_policy.json
WAFの設定を確認します
今回確認するポリシーについて `2. 通信のブロック `__ のポリシーの内容との差分を確認します。
.. code-block:: cmdin
diff -u ~/f5j-nginx-plus-lab2-security-conf/waf/waf-l1_custom_policy.json custom_policy.json
.. code-block:: bash
:caption: 実行結果サンプル
:linenos:
--- /root/f5j-nginx-plus-lab2-security-conf/waf/waf-l1_custom_policy.json 2022-04-14 23:27:19.383236359 +0900
+++ custom_policy.json 2022-04-14 23:21:06.978541812 +0900
@@ -1,9 +1,9 @@
{
"policy":
{
- "name": "acceptall",
+ "name": "blocking",
"template": { "name": "POLICY_TEMPLATE_NGINX_BASE" },
"applicationLanguage": "utf-8",
- "enforcementMode": "transparent"
+ "enforcementMode": "blocking"
}
}
| ``enforcementMode`` で ``blocking`` と指定されていることがわかります。
| この設定により通信をブロックすることが可能です。
プロセスを再起動し、設定を反映します
.. code-block:: cmdin
nginx -s reload
2. 動作確認
----
クロスサイトスクリプティング(XSS)に該当する通信を発生させます。以下のCurlコマンドを実行し、結果を確認します。
.. code-block:: cmdin
curl -s "localhost/?a=",
+ "responseHeader": "HTTP/1.1 200",
+ "responseActionType": "custom",
+ "responsePageType": "default"
+ }
+ ]
}
}
- ``blocking-settings`` の ``violations`` で、パラメータ制御に関連する VIOLATION を有効にしています
- ``parameters`` でパラメータ制御の設定をしています。今回対象となるパラメータは ``username`` で ``最大文字数(maximumLength)`` 、 入力値を ``アルファベットと数字(dataType)`` を指定しています。
- ``response-pages`` で エラーページを指定します。条件で拒否対象と判定された場合、自動的にリダイレクトするようにしています
プロセスを再起動し、設定を反映します
.. code-block:: cmdin
nginx -s reload
3. 動作確認
----
1. 長い名前の入力
``Username`` に ``longname`` を入力します。
エラーページは5秒のみの表示となりますので、Support ID を取得する場合には注意ください。
.. image:: ./media/chrome-setusername-longname.jpg
:width: 400
ログを確認します。 ``Jump Host`` でブラウザを起動し、 `http://elk:5601 `__ を開いてください。
``ELK`` > ``Discover`` > ``waf-logs-*`` を開きます。
.. image:: ./media/elk-discover-waflogs.jpg
:width: 400
画面上部の検索窓に ``support_id **画面に表示されたsupport ID**`` と入力し ``Enter`` を押してください。
.. image:: ./media/elk-discover-longname.jpg
:width: 400
該当の通信が表示されています。
- ``username`` に ``longname`` が入力されています
- ``violations`` に、 ``Illegal parameter value length`` と表示されています
この様に、文字列の長さを指定することで想定外の入力値を制御することが可能です。
2. 許可されない文字の入力
``Username`` に 許可されない文字列 ``a@!b`` を入力します。
エラーページは5秒のみの表示となりますので、Support ID を取得する場合には注意ください。
.. image:: ./media/chrome-setusername-nonalphanum.jpg
:width: 400
ログを確認します。 ``Jump Host`` でブラウザを起動し、 `http://elk:5601 `__ を開いてください。
``ELK`` > ``Discover`` > ``waf-logs-*`` を開きます。
画面上部の検索窓に ``support_id **画面に表示されたsupport ID**`` と入力し ``Enter`` を押してください。
.. image:: ./media/elk-discover-nonalphanum.jpg
:width: 400
該当の通信が表示されています。
ログの内容を確認すると、 ``username`` に ``a@!b`` が入力され、 ``violations`` に、 ``Illegal Base64 value`` と表示されていることがわかります。
この様に、文字列のタイプを指定することで想定外の入力値を制御することが可能です。
7. Bot Clientの確認
====
NAP WAFはBot Signatureを持ち、クライアントが操作するツール以外に、Google等に代表される各サイトをクロールするツールに於いても判定・制御することが可能です。
1. 設定
----
Botの設定を行います。
WAFのセキュリティポリシーを変更し、設定を反映します
.. code-block:: cmdin
# sudo su
# cd /etc/nginx/conf.d
# cp ~/f5j-nginx-plus-lab2-security-conf/waf/waf-l1_demo.conf default.conf
# cp ~/f5j-nginx-plus-lab2-security-conf/waf/waf-l1_custom_log_format.json custom_log_format.json
cp ~/f5j-nginx-plus-lab2-security-conf/waf/waf-l7_custom_policy.json custom_policy.json
WAFの設定を確認します
今回確認するポリシーについて `2. 通信のブロック `__ のポリシーの内容との差分を確認します。
.. code-block:: cmdin
diff -u ~/f5j-nginx-plus-lab2-security-conf/waf/waf-l2_custom_policy.json custom_policy.json
.. code-block:: bash
:caption: 実行結果サンプル
:linenos:
--- /root/f5j-nginx-plus-lab2-security-conf/waf/waf-l2_custom_policy.json 2022-04-20 10:00:50.107946293 +0900
+++ custom_policy.json 2022-04-21 00:49:07.276916732 +0900
@@ -1,9 +1,30 @@
{
"policy":
{
- "name": "blocking",
+ "name": "bot-signature",
"template": { "name": "POLICY_TEMPLATE_NGINX_BASE" },
"applicationLanguage": "utf-8",
- "enforcementMode": "blocking"
+ "enforcementMode": "blocking",
+ "bot-defense": {
+ "settings": {
+ "isEnabled": true
+ },
+ "mitigations": {
+ "classes": [
+ {
+ "name": "trusted-bot",
+ "action": "alarm"
+ },
+ {
+ "name": "untrusted-bot",
+ "action": "block"
+ },
+ {
+ "name": "malicious-bot",
+ "action": "block"
+ }
+ ]
+ }
+ }
}
}
このラボでCurlコマンドによる疎通確認を行っている箇所があります。
| デフォルトのセキュリティポリシーであればCurlコマンドはブロックされず、コンテンツの取得が可能です。
| ただし、Curlはブラウザなどとは異なり ``Untrusted Bot`` というクラスに分類されます。
今回の設定では、 ``Untrusted Bot`` を ``Block`` に変更します。
疎通確認で、 ``Curl`` と ``ブラウザ`` の双方から接続を行い、挙動を確認します
プロセスを再起動し、設定を反映します
.. code-block:: cmdin
nginx -s reload
2. 動作確認
----
Curl コマンドを使ってリクエストを送信します。
.. code-block:: cmdin
curl -s "localhost/" | grep title
.. code-block:: bash
:caption: 実行結果サンプル
:linenos:
Request Rejected
The requested URL was rejected. Please consult with your administrator.
Your support ID is: 16452723180063667004
[Go Back]
ログを確認します。 ``Jump Host`` でブラウザを起動し、 `http://elk:5601 `__ を開いてください。
``ELK`` > ``Discover`` > ``waf-logs-*`` を開きます。
画面上部の検索窓に ``support_id **画面に表示されたsupport ID**`` と入力し ``Enter`` を押してください。
.. image:: ./media/elk-discover-botsig.jpg
:width: 400
該当の通信が表示されています。
- ``bot_category`` が ``HTTP Library`` 、 ``bot_signature_name`` が ``curl`` 、 ``client_class`` が ``Untrusted Bot`` となっています
- ``outcome`` が ``REJECTED`` となっています。このことから通信が拒否されたことがわかります
- ``violations`` が ``Bot Client Detected`` となっていることから、Botの判定によって通信が拒否されたと判断できます
次にブラウザでTopページにアクセスしてください
ブラウザの場合、通信はエラーなく終了しました。
ログを確認します。
画面上部の検索窓に ``client_class Browser`` と入力し ``Enter`` を押してください。
.. image:: ./media/elk-discover-botsig.jpg
:width: 400
ブラウザを通じてアクセスした場合、様々な通信が行われます。
今回はBotとの比較が主な目的となりますので、適当なログを選択いただければ問題ありません。
- ``bot_***`` に関する項目に情報がなく、 ``N/A`` となっています
- ``client_application`` が ``Chrome`` 、 ``client_class`` が ``Browser`` となっています
この様に、Curlコマンドとブラウザで接続した場合にはそれぞれ別のクライアントであることが識別されており、
NAP WAFが持つBot Signatureの機能により通信の制御が可能です
8. IPアドレスによる制御
====
NAP WAFの機能でIPアドレスによる制御を行い、同様にログを確認することができます。
1. 設定
----
IPアドレス制御の設定を行います。
WAFのセキュリティポリシーを変更し、設定を反映します
.. code-block:: cmdin
# sudo su
# cd /etc/nginx/conf.d
# cp ~/f5j-nginx-plus-lab2-security-conf/waf/waf-l1_demo.conf default.conf
# cp ~/f5j-nginx-plus-lab2-security-conf/waf/waf-l1_custom_log_format.json custom_log_format.json
cp ~/f5j-nginx-plus-lab2-security-conf/waf/waf-l8_custom_policy.json custom_policy.json
WAFの設定を確認します
今回確認するポリシーについて `2. 通信のブロック `__ のポリシーの内容との差分を確認します。
.. code-block:: cmdin
diff -u ~/f5j-nginx-plus-lab2-security-conf/waf/waf-l2_custom_policy.json custom_policy.json
.. code-block:: bash
:caption: 実行結果サンプル
:linenos:
--- /root/f5j-nginx-plus-lab2-security-conf/waf/waf-l2_custom_policy.json 2022-04-20 10:00:50.107946293 +0900
+++ custom_policy.json 2022-04-21 08:38:00.828843367 +0900
@@ -1,9 +1,16 @@
{
"policy":
{
- "name": "blocking",
+ "name": "iplist",
"template": { "name": "POLICY_TEMPLATE_NGINX_BASE" },
"applicationLanguage": "utf-8",
- "enforcementMode": "blocking"
+ "enforcementMode": "blocking",
+ "whitelist-ips": [
+ {
+ "blockRequests": "always",
+ "ipAddress": "10.0.0.0",
+ "ipMask": "255.0.0.0"
+ }
+ ]
}
}
| ``whitelist-ips`` でIPアドレスを指定した通信の制御を行います。
| ``blockRequests`` で以下パラメータを指定することにより、指定したIPアドレスに対し通信を制御することが可能です。
+---------------+--------------+-------------------------------------------------------------------------------+
| |指定する値 |動作 |
+---------------+--------------+-------------------------------------------------------------------------------+
|Policy Default |policy-default|指定したIPからの通信をBlocking Settingの内容に従って処理する |
+---------------+--------------+-------------------------------------------------------------------------------+
|Never Block |never |指定したIPからの通信を許可する。Policyのその他設定よりこちらの処理が優先される |
+---------------+--------------+-------------------------------------------------------------------------------+
|Always Block |always |指定したIPからの通信をブロックする |
+---------------+--------------+-------------------------------------------------------------------------------+
プロセスを再起動し、設定を反映します
.. code-block:: cmdin
nginx -s reload
2. 動作確認
----
Curl コマンドを使ってリクエストを送信します。
.. code-block:: cmdin
curl -s "localhost/" | grep title
.. code-block:: bash
:caption: 実行結果サンプル
:linenos:
OWASP Juice Shop
Curlコマンドではローカルホストへアクセスしており、正常が完了したことを確認できます。
ブラウザでアクセスします。通信がブロックされました。
.. image:: ./media/chrome-ips-blocked.jpg
:width: 400
ログを確認します。 ``Jump Host`` でブラウザを起動し、 `http://elk:5601 `__ を開いてください。
``ELK`` > ``Discover`` > ``waf-logs-*`` を開きます。
.. image:: ./media/elk-discover-waflogs.jpg
:width: 400
画面上部の検索窓に ``support_id **画面に表示されたsupport ID**`` と入力し ``Enter`` を押してください。
.. image:: ./media/elk-discover-ips.jpg
:width: 400
該当の通信が表示されています。
- ``ip_client`` が ``10.1.1.4`` となっており設定の内容に該当することがわかります
- ``outcome`` が ``REJECTED`` となり通信が拒否されています
- ``violations`` に IPアドレスがリストに含まれていると記載があります
特定のIPアドレスに対して制御することができます
9. Signatureのアップデート
====
NAP WAFのSignatureは頻繁にアップデートされます。
Signatureのアップデートはインストール時に確認いただいた通り、各種OSのパッケージ管理コマンドを通じて管理を頂きます。
以下が参考の確認結果です。
.. code-block:: bash
:linenos:
# dpkg-query -l | grep app-protect
ii app-protect 25+3.671.0-1~focal amd64 App-Protect package for Nginx Plus, Includes all of the default files and examples. Nginx App Protect provides web application firewall (WAF) security protection for your web applications, including OWASP Top 10 attacks.
ii app-protect-attack-signatures 2021.11.16-1~focal amd64 Attack Signature Updates for App-Protect
ii app-protect-common 8.12.1-1~focal amd64 NGINX App Protect
ii app-protect-compiler 8.12.1-1~focal amd64 Control-plane(aka CP) for waf-general debian
ii app-protect-dos 25+2.0.1-1~focal amd64 Nginx DoS protection
ii app-protect-engine 8.12.1-1~focal amd64 NGINX App Protect
ii app-protect-plugin 3.671.0-1~focal amd64 NGINX App Protect plugin
このコマンドの出力結果では、Signatureは ``2021/11/16`` のものであることがわかります
インストール可能なパッケージを Ubuntu で確認する方法は以下です。
.. code-block:: bash
:linenos:
# apt list app-protect -a
Listing... Done
app-protect/stable,now 26+3.796.0-1~focal amd64 [installed]
app-protect/stable 26+3.780.1-1~focal amd64
app-protect/stable 25+3.760.0-1~focal amd64
app-protect/stable 25+3.733.0-1~focal amd64
app-protect/stable 25+3.671.0-1~focal amd64
app-protect/stable 24+3.639.0-1~focal amd64
app-protect/stable 24+3.612.0-1~focal amd64
app-protect/stable 24+3.583.0-1~focal amd64
app-protect/stable 24+3.512.0-1~focal amd64
app-protect/stable 23+3.462.0-1~focal amd64
# apt list app-protect-attack-signatures -a
Listing... Done
app-protect-attack-signatures/stable,now 2022.04.10-1~focal amd64 [installed]
app-protect-attack-signatures/stable 2022.03.31-1~focal amd64
app-protect-attack-signatures/stable 2022.03.23-1~focal amd64
app-protect-attack-signatures/stable 2022.03.15-1~focal amd64
app-protect-attack-signatures/stable 2022.03.02-1~focal amd64
app-protect-attack-signatures/stable 2022.02.24-1~focal amd64
app-protect-attack-signatures/stable 2022.02.15-1~focal amd64
app-protect-attack-signatures/stable 2022.02.08-1~focal amd64
app-protect-attack-signatures/stable 2022.02.01-1~focal amd64
app-protect-attack-signatures/stable 2022.01.25-1~focal amd64
app-protect-attack-signatures/stable 2022.01.12-1~focal amd64
app-protect-attack-signatures/stable 2022.01.04-1~focal amd64
** 省略 **
| NAP WAFのSignatureは、そのSignatureがリリースした時点にサポートされるNGINX PlusとNAP WAF、そしてその後にリリースされるNGINX PlusとNAP WAFで動作します。
| つまり、Signatureがリリースした時点の前にサポートされていたNGINX PlusとNAP WAFでは動作しません。
| 最新のSignatureを利用するためには、その時点でサポートされているNGINX PlusとNAP WAFにアップグレードする必要があります。
参考に、Attack Signatureをダウングレードする手順を以下に示します
`NAP WAFのドキュメント `__ の ``Releases`` を見ると、このパッケージは ``March 9, 2022`` リリースされたものであることがわかります。
Versionを指定してSignatureをインストールします。(この例では、古いSignatureを選択します)
.. code-block:: bash
:linenos:
# apt install app-protect-attack-signatures=2022.03.15-1~focal
** 省略 **
Unpacking app-protect-attack-signatures (2022.03.15-1~focal) over (2022.04.10-1~focal) ...
Setting up app-protect-attack-signatures (2022.03.15-1~focal) ...
In order for the signature update to take effect, NGINX must be reloaded.
# apt list app-protect-attack-signatures -a
Listing... Done
app-protect-attack-signatures/stable 2022.04.10-1~focal amd64 [upgradable from: 2022.03.15-1~focal]
app-protect-attack-signatures/stable 2022.03.31-1~focal amd64
app-protect-attack-signatures/stable 2022.03.23-1~focal amd64
app-protect-attack-signatures/stable,now 2022.03.15-1~focal amd64 [installed,upgradable to: 2022.04.10-1~focal]
app-protect-attack-signatures/stable 2022.03.02-1~focal amd64
app-protect-attack-signatures/stable 2022.02.24-1~focal amd64
app-protect-attack-signatures/stable 2022.02.15-1~focal amd64
** 省略 **
NGINXを再起動し、Signatureが反映されたことを確認します
.. code-block:: bash
:linenos:
# nginx -s reload
# grep attack_signatures_package /var/log/nginx/error.log | tail -2
2022/04/22 08:18:20 [notice] 8423#8423: APP_PROTECT { "event": "configuration_load_success", "software_version": "3.796.0", "completed_successfully":true,"attack_signatures_package":{"version":"2022.04.10","revision_datetime":"2022-04-10T12:51:45Z"},"threat_campaigns_package":{},"software_version":""}
2022/04/22 09:27:35 [notice] 8452#8452: APP_PROTECT { "event": "configuration_load_success", "software_version": "3.796.0", "completed_successfully":true,"attack_signatures_package":{"version":"2022.03.15","revision_datetime":"2022-03-15T11:35:54Z"},"threat_campaigns_package":{},"software_version":""}
2行目が該当のログとなります。1行目と比較すること ``attack_signatures_package`` の ``version`` の項目に変更後のVersionが記載されたことがわかります。
10. NAP WAF のアップグレード
====
ここでは、NAP WAFのアップグレードについてまとめます。
| NAP WAFはアップグレードすることが可能です。
| NAP WAFを古いVersionから新しいVersionにアップグレードされる場合、NAP WAFは一度削除され、再度新しいVersionがインストールされます。
| 同時に古いデフォルトPolicyが削除され、新しいデフォルトPolicyが配置されます。独自にポリシーの設定を行っている場合には、NGINXの設定ファイルに従って動作します。
NGINXのバージョンのみをアップグレードした場合、NAP WAFはアンインストールされるため、再度 NAP WAFのインストールが必要となります。
NAP WAFのインストール後、以下コマンドを参考にNGINXの再起動を行ってください。
.. code-block:: bash
:linenos:
# sudo su
systemctl restart nginx
11. Threat Campaign Signature
====
NAP WAFは Threat Campaign という機能を持っています。
これは、F5のセキュリティチームで観測した、攻撃のキャンペーン(主要な攻撃の手口)の一連のふるまいから同種の攻撃であることを特定し高い精度で検知、制御する機能です。
Attack Signatureは各通信のデータを対象とするのに対し、この機能は攻撃開始から複数の通信に渡るまでそのふるまいで判定する点が違いとなります。
詳細は `Threat Campaigns `__ をご覧ください。
Threat Campaign の導入方法を紹介します。
パッケージを確認します
.. code-block:: bash
:linenos:
# dpkg-query -l | grep app-protect
ii app-protect 26+3.796.0-1~focal amd64 App-Protect package for Nginx Plus, Includes all of the default files and examples. Nginx App Protect provides web application firewall (WAF) security protection for your web applications, including OWASP Top 10 attacks.
ii app-protect-attack-signatures 2022.04.10-1~focal amd64 Attack Signature Updates for App-Protect
ii app-protect-common 10.29.1-1~focal amd64 NGINX App Protect
ii app-protect-compiler 10.29.1-1~focal amd64 Control-plane(aka CP) for waf-general debian
ii app-protect-dos 26+2.2.20-1~focal amd64 Nginx DoS protection
ii app-protect-engine 10.29.1-1~focal amd64 NGINX App Protect
ii app-protect-plugin 3.796.0-1~focal amd64 NGINX App Protect plugin
ii app-protect-threat-campaigns 2022.03.30-1~focal amd64 Threat Campaign Updates for App-Protect
もし、上記でapp-protect-threat-campaignsがインストールされていない場合は、Threat Campaign Signature を以下にてインストールするしてください。
.. code-block:: bash
:linenos:
# sudo su
apt-get install app-protect-threat-campaigns
プロセスを再起動します。
.. code-block:: bash
:linenos:
# nginx -s reload
Threat Campaign Signatureを確認します。読み込むまでに数分程度時間がかかる場合があります
.. code-block:: bash
:linenos:
# grep attack_signatures_package /var/log/nginx/error.log | tail -2
2022/04/22 11:12:43 [notice] 8452#8452: APP_PROTECT { "event": "configuration_load_success", "software_version": "3.796.0", "completed_successfully":true,"attack_signatures_package":{"version":"2022.04.10","revision_datetime":"2022-04-10T12:51:45Z"},"threat_campaigns_package":{},"software_version":""}
2022/04/22 11:16:33 [notice] 8452#8452: APP_PROTECT { "event": "configuration_load_success", "software_version": "3.796.0", "completed_successfully":true,"attack_signatures_package":{"version":"2022.04.10","revision_datetime":"2022-04-10T12:51:45Z"},"threat_campaigns_package":{"version":"2022.04.20","revision_datetime":"2022-04-20T14:14:04Z"},"software_version":""}
2行目が該当のログとなります。1行目と比較すること ``threat_campaigns_package`` の項目にVersionが記載されたことがわかります。
このように設定することで Threat Campaigns Signature を利用することが可能です。
Tips1. アカウントの登録
====
OWASP Juice Shopではアカウントの登録が可能です。ログインいただくと、カートへ商品の追加などの操作をいただくことが可能です。
1. アカウントの登録
----
動作確認の為、 ``OWASP Juice SHop`` に新規アカウントを登録します。
``Jump Host`` より ``Owasp Juice Shop`` にアクセスします。ブラウザを起動し、 `http://juice-shop `__ を開いてください
画面右上 ``Account`` > ``Login`` をクリックします。
すでに別のアカウントでログインしている場合、一度ログアウトをしてください。
画面中段 「Not yet a customer?」をクリックし、以下の内容を入力してください。
.. image:: ./media/owasp-js-new-account.jpg
:width: 400
+-------------------+------------------------+
|Email | ``test@example.com`` |
+-------------------+------------------------+
|Password | ``testuser`` |
+-------------------+------------------------+
|Repeat Password | ``testuser`` |
+-------------------+------------------------+
|Security Questions | ``自由に指定下さい`` |
+-------------------+------------------------+
|Answer | ``自由に指定下さい`` |
+-------------------+------------------------+
(説明の用途でメールアドレス・パスワードを指定していますがいずれの文字列でも問題ありません)
再度表示されますログイン画面に作成したアカウントの情報を入力し、ログインしてください。
.. image:: ./media/owasp-js-new-account2.jpg
:width: 400
アカウント情報を確認すると指定のメールアドレスでログインしたことが確認できます。
.. image:: ./media/owasp-js-new-account3.jpg
:width: 400