PIED_PIPER’s diary

ネットワークエンジニア視点からの Web Security, WAF についてのブログです.

F5 Networks の Application Security Manager (ASM) セットアップ

ここでは F5 Networks 社の ASM のセットアップから使い方を解説します.細かい設定項目は別の投稿で詳解する予定なので,ここではセットアップの流れを詳解します.

 

ASM のセットアップ手順

1.ライセンスの確認

2.プロビジョニング

3.セキュリティポリシーの作成

4.作成したセキュリティポリシーを Virtual Server に適用する

 

1.ライセンスの確認

ライセンスの確認は GUI の 《 System タブ ➡︎ Resource Provisioning 》からできます.Application Security (ASM) の項目が Licensed になっていれば,ASM 用のライセンスが有効になっている,という事になります.

f:id:PIED_PIPER:20170103194430j:plain

 

2.プロビジョニング

プロビジョニングの変更時にはシステムが Offline となりますので,プロダクション環境で行う際には,冗長構成のスタンバイ側で先に変更を実施し,Failover を行ってもう一方の機器でも実施するようにしましょう.

 

ASM の項目のチェックボックスをクリックすると,Provisioning モードが選択できます.デフォルトは Nominal です.その他に Minimal, Dedicated があります.変更に応じて画面上のリソースの割り当てを示すバーグラフが更新されます.

 

Minimal : ASM を動かすのに必要最小限のリソースを割り当てる

Dedicated : 機器のリソースを ASM に最大限割り当てる.このモードを選択するとその他のモジュールを使うことができません (その他のモジュールを全て None にしなくてはならない).

f:id:PIED_PIPER:20170103195359j:plain

プロビジョニング設定を変更したら Submit をクリックして,適用します.クリックすると以下の様な確認メッセージが出てきますので,OK をクリックすると適用が開始されます.

《 Reprovisioning may restart daemons or reboot the system, which causes lost connections.  Are you sure you want to proceed? 》

 

OK をクリックすると以下のような画面となり,しばらく Offiline になります.

f:id:PIED_PIPER:20170103200457j:plain

 

3.セキュリティポリシーの作成

プロビジョニングが完了すると,GUI の左のメインタブの中に "Security" というタブが表示されます.ASM の設定のほとんどはこのタブの中で行います.

 

では,セキュリティポリシーを作ってみましょう.GUI から以下の様に進みます.

《 Security ➡︎ Application Security ➡︎ Security Policies ➡︎ Active Policies 》

 

f:id:PIED_PIPER:20170103201109j:plain

Create をクリックすると,以下のメニューが表示されます.ここでは,『作成したセキュリティポリシーを既存の Virtual Server に適用する』方法で作成します.

f:id:PIED_PIPER:20170103201853j:plain

Next をクリックすると,以下のメニューが表示されます.ここでは,適用する Virtual Server の名前と,Virtual Server が HTTP なのか HTTPS なのかを選択します.

f:id:PIED_PIPER:20170103202154j:plain

Next をクリックすると,以下のメニューが表示されます.ここではデプロイメント シナリオを選択します.今回はマニュアル設定のオプションで説明します.

Create a security policy automatically (recommended)

ポリシービルダーを使ってセキュリティポリシーを作り上げていく場合に選択します.ポリシービルダーとは,一定期間実際にトラフィック(リクエスト)を流してトラフィックから自動的にポリシーの詳細定義を学習していく機能です.ポリシービルダーの詳細については別の投稿で説明しようと思います.

Create a security policy manually or use template (advanced)

手動でポリシーの詳細を定義していくオプションです.アプリケーションで使用している URL やパラメータなどが判っていて,それに応じてポリシーを定義したい場合や,テンプレートを使用したい場合にはこのオプションになります.

Create a security policy for XML and web services manually

あまり利点がないので使いません.マニュアル設定で問題なし.

Create a security policy using third party vulnerability assessment tool output

IBM, HP, Qualys などのスキャナーからのレポートをもとにポリシーを定義するオプションです.例えば監査に通るように,スキャナーで報告されたセキュリティホールに対応したポリシーを作れと言われたら,このオプションで作ったポリシーをベースに設定を始めます.

f:id:PIED_PIPER:20170103202603j:plain

Next をクリックすると,以下のメニューが表示されます.ここではいくつか設定項目がありますが,以下の3つは必須項目です.

Security Policy Name : 任意の名前を指定します

Application Language : アプリケーションで使用している文字エンコーディング方式を指定します.これは,後に変更することができません.デフォルトは UTF-8 です.

Enforcement Readness Period : 別の投稿で説明する予定です.デフォルトは 7 日です.

f:id:PIED_PIPER:20170103204826j:plain

Next をクリックすると,以下のメニューが表示されます.ここでは Attack Signature の初期設定を行います.アプリケーションのタイプを選択するとそれに応じた Attack Signature が適用されます.デフォルトは以下の通りです. 

f:id:PIED_PIPER:20170104094214j:plain

Next をクリックすると,以下のメニューが表示されます.ここではエンティティ(File Type,URL,Parameter の事をエンティティという)の学習の粒度を設定します.ここではデフォルトのまま進みます.

f:id:PIED_PIPER:20170104095955j:plain

最後に設定確認画面が表示されます.Finish をクリックするとセキュリティポリシーの作成は完了です.

f:id:PIED_PIPER:20170107102923j:plain

 セキュリティポリシー作成が完了すると以下の画面に移ります.

青い枠で囲んである部分が,現在表示されている画面への Path を表しています.

同画面へは,左の赤枠の Security タブから,《 Security >> Application Security : Policy : Policy Properties 》のように開くこともできます.

f:id:PIED_PIPER:20170107104032j:plain

では,同画面の表示内容について見ていきましょう.

Current edited policy のドロップダウンから,表示するセキュリティポリシーを選択します.ここでは,先ほど作成した myPolicy しかありませんので,選択する必要はありません.次に,Enforcement Mode に着目しておきましょう.ここでは Transparent になっています.この設定はリクエストをブロックするのか,または全て通過させるのかというセキュリティポリシーの基本動作を指定します.Blocking にすると,ポリシー定義に反するリクエストはブロックします.Transparent の場合はリクエスは通過し,設定に応じた violation のログが残されます.Transparent はポリシーを作り上げる過程で,アプリケーションへの影響を出さずにリクエストの内容を把握する時に利用します.

f:id:PIED_PIPER:20170107104727j:plain

 

4.作成したセキュリティポリシーを Virtual Server に適用する

 

最後に,作成したセキュリティポリシーを Virtual Server に適用しましょう.今度は Virtual Server に関する設定なので,Security タブではなく,Local Traffic タブから

《 Local Traffic >> Virtual Servers >> Virtual Server List 》のように適用したい Virtual Server を選択します.その後に,上部の赤枠の Security タブから Policies を開くと以下の画面が表示されます.

Application Security Policy に,作成したセキュリティポリシーをセットします.

Log Profile には,ここではデフォルトで用意されている Log all requests をセットしています.

f:id:PIED_PIPER:20170107110414j:plain

 

以上で ASM セキュリティポシリーの作成と Virtual Server への適用は完了です.実際にリクエストを送ってイベントログを確認してみましょう.テストには,BigIP 自体から cURL コマンドで Virtual Server 宛にリクエストを投げて行います.

[root@asm2:Active:Standalone] config # curl 10.10.0.101/login.php -v
* About to connect() to 10.10.0.101 port 80 (#0)
*   Trying 10.10.0.101... connected
* Connected to 10.10.0.101 (10.10.0.101) port 80 (#0)
> GET /login.php HTTP/1.1
> User-Agent: curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 OpenSSL/1.0.1l zlib/1.2.3 libidn/1.18
> Host: 10.10.0.101
> Accept: */*
>
< HTTP/1.1 200 OK
< Date: Wed, 14 Dec 2016 20:33:17 GMT
< Connection: close
< Vary: Accept-Encoding
< Content-Length: 91
< Content-Type: text/html;charset=UTF-8
< Set-Cookie: TS015ffd33=0154569298fa6d5cdea94dbf487ad976893f2bba5fa19a410517b8b3de70b51495da692fe26b292e285bfd035aeff2d6ca9a6f73c5; Path=/
<
<html>
省略
</html>

 レスポンスに TSxxxxx という Cookie がセットされているのが見えます.ASM はこのような TSxxxxx という cookie をセッション管理や様々なセキュリティ機能を実現するために使います.

 

最後にイベントログを確認してみましょう.

イベントログの画面は《 Security >> Event Log : Application : Requests 》です.

f:id:PIED_PIPER:20170107112704j:plain

 

以上で ASM のセットアップの流れを説明しました.設定内容の詳細はまた別の投稿で説明したいと思います.

WAF は何を何から守るのか? OWASP Top 10 ?

OSI 階段を登ってきた人にとっては WAF が具体的に何を何から守っているのか,イメージがつきにくいのではないだろうか?(わたしはそうでした).

スイッチでセキュリティといったら,ポートセキュリティや IEEE802.1x をイメージすると思います.

ルータでセキュリティといったら,ACL や reverse path forwarding とか思い浮かべるのではないでしょうか.

L4 FW なら ACL など L3/L4 のポリシーでしょう.

ここまでは所謂ネットワークの世界なので,たとえ具体的に製品を扱ったことがなくても,ネットワークエンジニアであればイメージが持てると思います.

さて,WAF ですが,WAF が Web Application Firewall というように,ウェブアプリケーションの保護に特化したネットワーク機器です.具体的に言うと,SQL Injection, Cross Site Scripting, Path Traversal などなど,ウェブアプリケーション自体やその背後で動作しているデータベースから情報を盗んだり,悪用されることを防ぐのが WAF です.

それでは,世の中にはどのような攻撃手法があって,WAF はどの攻撃に対応していれば良いのか? そこで OWASP Top 10.OWASP とは About The Open Web Application Security Project といい,ウェブ上のセキュリティ問題解決を目的とした国際的なオープンコミュニティです.その中のプロジェクトの一つとして,Top 10 Project というものがあり,毎年攻撃手法の Top 10 ランキングを発表しています.多くの WAF ベンダーは OWASP Top 10 攻撃に対応していることを謳っていると思います.

 

Category:OWASP Top Ten Project - OWASP

Positive Security Model と Negative Security Model

WAF にも色々なベンダーや Open Source のものがあると思いますが,基本的なアプローチは Positive Security Model か Negative Security Model に則っているはずです.

 

Positive Security Model : 

ホワイトリスト型のアプローチ.例えば, URI は /home.html と /profile.html だけを許可して,あとは全て violation と認識するといったように,許可するリソースを明示的に設定する方法.

 

Negative Security Model : 

ブラックリスト型のアプローチ.例えば既知の攻撃パターンに該当するものはブロックして,あとは許可するといった方法.

 

Positive, Negative という話が出たので,False Positive と False Negatie の説明もしておきます.

 

False Positive :

正当なリクエスト (legitimate request) を不正なリクエストとして誤検知してしまうこと.

False Negative :

不正なリクエスト (illegal request) を許可してしまうこと.

Web Application Firewall

いきなりですが,ネットワークを仕事にしています.スイッチ,ルータ,ロードバランサ,Web Application Firewall (WAF) と,OSI 参照モデルの階段を登ってきました.そんな私の経験として,下層レイヤから登ってきた人にとって,取っつきやすいロードバランサや WAF など上層レイヤ機器の情報が少ないなと思ってきました.6,7年前にロードバランサーについて勉強をした際には,良書はなかったが幾つか書籍を見つけることができた(最近はサーバ負荷分散入門という書籍がありますね).でも,WAF に関する書籍や網羅的な情報って未だにない.HTTP や Web プログラミングに関する情報がネット上に沢山あります,でも,それらは Web プログラマさん達の情報なのでちょっと視点が違う.

そういう訳で,WAF のトピックを中心にしたブログを始めようかと思います.