Web Application Firewall(WAF)を使ってWebサーバを保護する - Oracle Cloud Infrastructureアドバンスド

Version 26

    目次に戻る : チュートリアル : Oracle Cloud Infrastructure を使ってみよう

     

    インターネットに公開されているWebサーバは常にサイバー攻撃の脅威にさらされています。Webアプリケーションに対して常に新しい攻撃手法が生み出されており、いつ被害にあってもおかしくありません。

    これを防御する手段としてWeb Application Firewall(WAF)を用いることにより、容易にサイバー攻撃からWebアプリケーションを保護することができます。

    このチュートリアルでは、WAFを設定して既存Webサーバを保護する手順を確認します。

     

    所要時間 : 約30分

     

    前提条件 :

    1. インスタンスを作成する - Oracle Cloud Infrastructureを使ってみよう(その3) を通じてコンピュート・インスタンスの作成が完了していること
    2. 上記、手順1で作成したインスタンスにApache HTTPサーバーをインストールし、インターネット上から参照できるように設定が完了していること
    3. 外部公開用のドメインを取得済みであること

     

    注意 : チュートリアル内の画面ショットについては Oracle Cloud Infrastructure の現在のコンソール画面と異なっている場合があります

     

     

    1. Webサーバ用のインスタンスの作成

     

    外部公開するWebサーバ用のインスタンスを作成します。今回はインスタンスを作成する - Oracle Cloud Infrastructureを使ってみよう(その3) で作成したコンピュート・インスタンスにApache HTTPサーバをインストール済みであるものとします。

    作成したインスタンスのパブリックIPアドレスは [129.213.80.156] であることが確認できます。WAF設定時に、転送先を指定するのに必要となるため控えておいてください。

     

     

    2. WAFの設定

    2-1. ポリシーの作成

     

         1. OCIのGUIコンソールから Edge ServicesWAF Policies を選択し、Create WAF Policy をクリックします。

     

         2. POLICY NAME に任意の名前を入力します。

              続いて、PRIMARY DOMAIN に外部公開する際に使用するFQDNを入力します。ここでは waf.ocitest.tk としています。

             

     

         3. ORIGIN NAME に任意の名前を入力します。

              続いて、URI にトラフィックの転送先となるWebサーバのIPアドレスもしくはFQDNを入力します。ここで先ほど控えておいたパブリックIPアドレス [129.213.80.156] を入力します。

              入力が完了したら、Create WAF Policy をクリックします。

            

         4. 以下のようにポリシーが作成されました。

              CNAME Target に記載されたFQDN(ここでは waf-ocitest-tk.b.waas.oci.oraclecloud.net )を外部公開する waf.ocitest.tk の別名としてCNAMEに登録する必要があるため、控えておいてください。

            

     

    2-2. CNAMEレコードの追加

         ドメインを管理している任意の外部DNSサーバに対して、waf.ocitest.tk の別名としてwaf-ocitest-tk.b.waas.oci.oraclecloud.net を追加します。

        外部DNSサーバは既存で利用しているものを使って結構です。

          以下は、OCI DNS サービスを使用した例となります。

            

     

    2-3. アクセス確認

          外部公開したWebサーバ waf.ocitest.tk にアクセスできれば、正常にWAFを経由して通信を行っています。

    [opc@web01 ~]$ curl http://waf.ocitest.tk

    <!DOCTYPE html>

    <html lang="ja">

      <head>

        <meta charset="UTF-8">

        <title>WAF TEST PAGE</title>

      </head>

      <body>

        <h1>WAF TEST</h1>

      </body>

    </html>

    [opc@web01 ~]$

     

     

    3. WAF 保護ルールの有効化

     

    この段階ではまだ保護ルールは有効化されていないため、Webサーバは外部攻撃から保護されていません。

    適用する保護ルールを有効化することにより、外部攻撃から保護することができます。

    今回は疑似的にShellshock脆弱性(CVE-2014-6271)に対する攻撃を行い、WAFで検知、防御してみます。

     

    3-1. 保護ルールの有効化

          1. OCIのGUIコンソールから Edge ServicesWAF Policies を選択し、先ほど作成したポリシー WAF TEST Policy をクリックします。

            

     

          2. 画面左のWAF Policyメニューの Protection Rules をクリックすると、保護ルール一覧が表示されます

              

          3. 有効とするルールのチェックボックスを有効化して、 ActionsBlock をクリックします。

              

     

          4. すると、ルールのActionが Block(Modified) に変更します。この段階ではまだ設定は反映されません。

               

          5. 今回は、テスト結果をわかりやすくするため、ブロック時にエラーページを応答するように変更します。

         Rule Settings タブを選択して、 Edit Rule Settings をクリックします。

               

          6. ブロック時の応答をエラーページに変更するため、BLOCK ACTIONShow Error Page に変更し、 Save をクリックします。

               

     

          7. 変更を反映するために、Unpublished ChangesPublish All をクリックします。

               

     

          8. 変更してもよいか確認されますので、Publish All をクリックして反映します。    

                  

     

          9. 変更が反映されるとステータスが ACTIVE となります。以上で、保護ルールの有効化は完了です。

                   

     

    3-2. WAFテスト

             curlコマンドを用いて、疑似的にShellshock脆弱性(CVE-2014-6271)に対する攻撃を行い、WAFで検知、防御するかテストしてみます。

     

          1. 任意の端末より www.ocitest.tk に対して、以下コマンドを実行します。

    [opc@web01 ~]$ curl -H "User-Agent: () { :; }; /bin/cat /etc/passwd"  http://waf.ocitest.tk

     

          2. 以下のようなエラーページが表示され、正常にWAFでブロックされました。

    <!DOCTYPE html>

    <html>

      <head>

        <title>waf.ocitest.tk - Access to the website is blocked.</title>

        <meta charset="utf-8">

        <meta http-equiv="X-UA-Compatible" content="IE=edge">

        <meta name="viewport" content="width=device-width, initial-scale=1">

        <link href="/__zenedge/assets/styles.min.css" rel="stylesheet">

      </head>

      <body><div class="box">

      <h2>waf.ocitest.tk</h2>

      <p>Access to the website is blocked.</p>

      <hr />

      <table>

        <tr><td>Incident ID</td><td>2019-04-09T09:14:48Z|aa969fd22c|129.213.95.244|vSZ9bek05d</td></tr>

        <tr><td>Your IP address</td><td>129.213.95.244</td></tr>

        <tr><td>Server IP</td><td>XXX.XXX.XXX.4</td></tr>

        <tr><td>Code</td><td>403</td></tr>

        <tr><td>Description</td><td>Access blocked by website owner. Please contact support.</td></tr>

      </table>

    </div>

    </body>

    </html>

     

          3. ログを確認してみます。再度OCIのGUIコンソールから Edge ServicesWAF Policies を選択し、先ほど作成したポリシー WAF TEST Policy をクリックします。

         画面左のWAF Policyメニューの Logs をクリックするとログが表示されます。

                 以下の画面では、Actionの項で Block が表示されており、何かトラフィックがブロックされていることが確認できます。

             

     

          4. 対象のログを展開することにより、ログの詳細を確認することができます。さらに View JSON ボタンをクリックすることにより、JSON形式でログを参照することができます。

                

     

          5. Shellshock脆弱性(CVE-2014-6271)に対する攻撃を検出し、ブロックしたことが確認できました

                  

     

    以上で、WAFを使ってWebサーバに対する脆弱性攻撃からの保護する一連の作業を確認してきました。

     

    目次に戻る : チュートリアル : Oracle Cloud Infrastructure を使ってみよう