LoginSignup
8
4

More than 3 years have passed since last update.

ネットワーク初心者が OCI WAF で不正アクセスを防御できるか試してみた (設定と保護ルール編)

Posted at

WAFの基本動作

OCI WAFは下図の手順で動作するものと理解してます。

image-20200908165129125.png

  1. Webサーバ(オリジン)にアクセスするためDNSサービスへドメイン名(web.cocotaro.com(例))の名前解決を問合せる

  2. ドメイン名の別名として定義したWAFのエンドポイント(xxx.waas.oci.oraclecloud.net(例))へ転送

  3. WAFのエンドポイント(xxx.waas.oci.oraclecloud.net(例))にアクセス。
    WAFでトラフィックが多層の防御フローで分析され、不正なトフィックを防御

  4. 正常なトラフィックのみオリジンサーバへ転送

テストするために事前に必要なもの

  • 外部公開用のドメイン名
    お試し用のドメインがなければ、お名前.com などから取得してください。

  • オリジン(Webサーバ、もしくはロード・バランサ)のグローバルIPアドレス
    今回は Apache をコンピュートインスタンスにインストールし、サンプルのWebページを使用します。
    Webページについては任意のものを用意ください。

  • SSL/TLSサーバ証明書 (※暗号化が必要な場合) - 今回は使用しません
    image-20200908171428335.png

DNS 関連の用語

これまでネットワーク、DNSのしくみはよく知らなかったため、WAFの設定項目を見てもなんかピンとこなかったのですが、以下のDNS用語を知ることで OCI WAF の設定の意味と動きが理解できた気がしました。私含めネットワークに詳しくない方のためにも記載しておきます。既にご存知の方はスキップしてください。

DNS用語 意味
DNS DNS(Domain Name Service)はドメイン名をIPアドレスに変換してくれるサービス
Aレコード Aレコードはアドレス(Address)のAからきており、名の通りドメイン名をIPアドレスに置き換える 例. web.cocotaro.com → 140.238.49.129
CNAMEレコード CNAMEレコードはキャノニカルネーム(Canonical NAME)の略でドメインを別のドメインに置き換える。特定のドメインを別のドメインに転送する場合に使用する。
OCI WAF では CNAMEレコードを使い、オリジンへのリクエストを WAFのエンドポイントへ転送し、OCI WAFで不正なトラフィックを検知したり防御したりします。

OCI WAF 設定

WAFの設定は、以下の2ステップです。

1. WAFポリシーの作成

ナビゲーションメニューから[セキュリティ]-[Webアプリケーション・ファイアウォール] を選択し、WAFポリシーの作成をクリックします。
image-20200909131937795.png
[ポリシー名] 任意のポリシー名
[プライマリ・ドメイン] 外部公開用ドメイン名
[オリジン名] オリジンのドメイン名
[URI] オリジンのグローバルIPアドレス

入力後、WAFポリシーの作成をクリックします。
image-20200909132829520.png
WAFポリシーが作成されると、DNSに登録するCNAME(WAFのエンドポイント)が表示されるのでコピーします。

2. DNSへのCNAMEレコードの登録

ナビゲーションメニューから[ネットワーキング]-[DNSゾーン管理] を選択し、DNSゾーンを選択します。ここでは ドメイン登録済みの cocotaro.com を選択します。
image-20200909134211456.png
[レコード]を選択し、レコードの追加をクリックし、DNSへCNAMEレコードの登録をおこないます。
image-20200909134751298.png
[レコード型] CNAMEを選択
[名前 オプション] web.cocotaro.com
[TARGET(ターゲット)] WAFポリシー作成時にコピーしたCNAME(WAFのエンドポイント)を入力します。

入力後、送信すると、レコードにCNAMEが追加表示されます。選択して変更の公開をクリックします。確認画面で、変更の公開 をクリックすると、CNAMEの登録が公開されます。
image-20200909140032694.png
変更の公開が反映されると、web.cocotaro.com へのリクエストは、WAFのエンドポイントへ転送されることになります。nslookup するとWAFのアドレスを指していることが確認できました。
image-20200909141203174.png
続いてWAFの保護動作について試していきます。

どうやって防御するのか

保護ルール

OCI WAF での不正アクセスや攻撃への検知/防御は保護ルールを使います。OCI WAF では現在643件(2020年9月時点)の保護ルールが事前定義されています。これらは適宜更新されています。
image-20200910140444561.png

1. 特定の保護ルールでの防御

事前定義済みの保護ルールから特定の保護ルールを選択し不正アクセスをしかけます。

保護ルール 950002 "System Command Access" の不正アクセスをWAFで防御できるか?

保護ルールの設定

保護ルール 950002 を選択し、検出時にブロック(防御)するに変更します。特定の保護ルールを複数ページで探すのはたいへんなので、左下のフィルタの機能をうまく使いましょう。
image-20200910142047544.png

ブロック(防御)を選択すると、
image-20200910142336491.png

保護ルールの画面上部に公開するかを聞かれるので、すべて公開をクリックし公開します。
image-20200910142704164.png

防御できるか?

更改完了後に、コマンド、及びブラウザからWebサーバ(オリジン)に 950002 に該当するアクセスをおこないます。

コマンドからアクセスimage-20200910144452585.png

ブラウザからアクセスimage-20200910144422529.png

403 Forbidden が返されブロック(防御)されていることが確認できました。

2. 保護ルールをすべてブロックとし、ログからも防御を確認

保護ルールの設定

保護ルール すべてをブロック(防御)に設定します。
image-20200910153157601.png

すべての保護ルール(643件)をブロック(防御)で公開します。
image-20200910153313379.png

公開されるまで、しばらく時間を要します。
image-20200910153350088.png

防御できるか?

公開完了後に次のコマンドを実行してアクセスを試みます。

*保護ルール 981317 “SQL SELECT Statement Anomaly Detection Alert” *を複数回実行します。

curl -lvk -verbose http://web.cocotaro.com/JS/displayName.js/?a=select%26b%3Dunion%26c%3Dtop%26d%3Dwhere%0A

image-20200910161815523.png
また、複数回のアクセス後にログを参照するといくつかブロックされたことが確認できます。
image-20200910162323452.png
各ブロックの行を展開し、JSONの表示をクリックすればさらに詳細なブロック情報が表示されます。
image-20200910162943519.png

403 Forbidden が返されブロック(防御)されていました。またログからもブロック(防御)されていることが確認できました。

まとめ

OCI WAF の基本の動きを理解すれば設定自体も非常に簡単で、WAFを使って素早く安全対策をうてることがわかりました。次回はBotの防御を予定しています。

参考URL

Supported Protection Rules

8
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
4