AWS WAF
AWS Black Belt Tech Webinar 2015アマゾン ウェブ サービス ジャパン株式会社
荒⽊靖宏
2015/12/09
アジェンダ
• AWS WAF• General Overview • 位置付け • Technical Deep Dive
AWS WAF (Web Application Firewall)
Why AWS WAF?
• アプリ脆弱性
Good users
Bad guys
Web server Database
Exploit code
Why AWS WAF?
• Abuse
Good users
Bad guys
Web server Database
Why AWS WAF?
• Application DDoS
Good users
Bad guys
Web server Database
What is AWS WAF?
• Application DDoS
Good users
Bad guys
Web server Database
AWSWAF
What is AWS WAF?
• Application DDoS
Good users
Bad guys
Web server Database
AWSWAF
AWS WAF rules:1: BLOCK from 悪者.2: ALLOW from not 悪者.
What is AWS WAF?
• Application DDoS
Good users
Bad guys
Web server Database
AWSWAF
WAFとは?
• Web Application Firewall (WAF) は、HTTPトラフィックをフィルタなどの制御をするためのアプライアンスや、サーバプラグインなどのルールセットのこと。
• WAFは以下4つで提供されることが多い• Pure Play: スタンドアローンのアプライアンスやソフトウェア• CDN: Content Delivery Networkへのバンドル• Load Balancer: ロードバランサへのバンドル• Universal Threat Manager (UTM): 統合セキュリティ管理
(UTM)の⼀部として提供
なぜWAFを使うのか
• WAFは、Webサイトやアプリケーションが、攻撃されてダウンしたりデータが流出したりすることがないように⼿助けをする
• WAFの⼀般的なユースケース• SQL Injection (SQLi) 、Cross Site Scripting (XSS)対策• Webクローラ、スクレイピング等のBOT対策• DDoS緩和 (HTTP/HTTPS floods)
• ガートナーのレポートによると、導⼊理由の25-30%はPCI-DSS対応のため• Magic_Quadrant_for_Web_Application_Firewalls.pdfによる
AWS WAFカスタムルールによるフィルタ
SQLインジェクション、XSSなどのよくある攻撃への対策
モニタリング
これまでのWAF
• 設定は複雑で時間がかかる
これまでのWAF
• ルールが増えるにつれ誤検知(False positive)に悩むことになる
これまでのWAF
• No API
これまでの WAF
• 導⼊と維持コストが⾼すぎる
• プロフェッショナルサービスが必要になる
• ⾒積もりが過⼤になりがち
お客様の要望に応じてAWSが実現したWAF
• 実践的なセキュリティモデルを簡単に導⼊
• フレキシブルにルールをカスタマイズできる
• DevOpsとの統合
それらをAWSの「使っただけ」の⽀払い
AWS WAF• Amazon CloudFrontとの併⽤• クラウドベースの防御• セルフサービス、簡単なデプロイ、
使った分だけのお⽀払い• オートスケール• DevOpsと相性がいい• “Do it yourself”
AWS WAFとMarketplaceの併⽤について
Marketplace WAFs• EC2インスタンス上で動作• マネージドサービス、BYOL、1時間単
位など様々• スケールさせるには別途設定、変更点、
特別作業等必要
CloudFront
Edge Location
EC2
users
hackers
bad bots site scraping
SQL Injection, XSS, other
attacks
legitimatetraffic
悪意をもったトラフィックを含めてHTTP/HTTPSであれば通る
ELB
CloudFront without WAF
S3
AND/OR
Customer On Premises Environment
Origin Server Origin Storage
これまでのWAF配置
CloudFront
Edge Location
users
hackers
bad bots site scraping
SQL Injection, XSS, other
attacks
legitimatetraffic
WAF on EC2はELBでサンドイッチする。結果、複雑になり、レイテンシも上昇する
EC2ELBWAFELB
ELB Sandwich
Customer On Premises Environment
Origin Origin StorageWAF
CloudFront with AWS WAF
CloudFront
Edge Location WAF
users
hackers
bad bots site scraping
SQL Injection, XSS, other
attacks
legitimatetraffic
不正なトラフィックはエッジロケーションにあるWAFでブロック。• AWS外のリソースでもOK• 動的なコンテンツでも静的なコンテンツでもOK
EC2ELBS3
AND/OR
Customer On Premises Environment
Origin Server Origin Storage
AWS WAF Components
1. Web Access Control Lists (WebACL)2. 条件 – IPアドレス / ⽂字列 / SQLインジェクション3. ルール - 順位 / アクション4. AWSリソース (現状ではCloudFront)5. レポート (リアルタイムのメトリクスとサンプリングされたリ
クエスト)
AWS WAF: WebACL
• WebACLsは、condition, rules, actionで構成
• WebACLsは⼀つあるいは複数のCloudFront distributionに適⽤
• WebACLsはリアルタイムのメトリクスと、サンプリングされたリクエストをルールごとに表⽰
AWS WAF: Conditions
• Conditionsはwebリクエストを判定するコンポーネント
• Conditionsでは⼀致判定を⾏う• IPアドレス i.e., /8, /16, /24, /32• ⽂字列, i.e., URI, クエリ⽂字列, ヘッダ, etc.• SQLインジェクション, i.e., looks for invalid
SQL statements• Conditionsは論理的に分離されている(OR)
Match conditions: IPSets
CIDR はオクテット毎の設定: • 192.0.0.0/8 – Matches 192.*.*.*• 192.168.0.0/16 • 192.168.32.0/24 • 192.168.32.64/32 – IPアドレスべた指定は/32を使う
制限についてl IPSetあたり1,000 CIDRまでl webACLあたり、CIDRはトータルで10,000まで
Match conditions: Strings and bytes
Webリクエストの内容と照合する
Host: www.example.comUser-Agent: Mozilla/5.0 (Macintosh; …Accept: image/png,image/*;q=0.8,*/*;q=0.5Accept-Language: en-US,en;q=0.5Accept-Encoding: gzip, deflateReferrer: http://www.example.com/Connection: keep-alive
AWSWAF
RAW request headers
CloudFront
Check: Header “Referrer”Match Type: ContainsMatch: “example.com”Action: ALLOW
RuleString match condition
Good users
Match conditions: Strings and bytes
Host: www.example.comUser-Agent: badbotAccept: image/png,image/*;q=0.8,*/*;q=0.5Accept-Language: en-US,en;q=0.5Accept-Encoding: gzip, deflateReferrer: http://www.example.com/Connection: keep-alive
AWSWAF
RAW request headers
CloudFront
Check: Header “User-Agent”Match Type: ContainsMatch: “badbot”Action: BLOCK
RuleString match condition
Scraper bot
Match conditions: Strings and bytes
“transforms”をつかってちょっとした変更には対応可能
Host: www.example.comUser-Agent: bAdBoTAccept: image/png,image/*;q=0.8,*/*;q=0.5Accept-Language: en-US,en;q=0.5Accept-Encoding: gzip, deflateReferrer: http://www.InTeRnEtkItTiEs.com/Connection: keep-alive AWS
WAF
RAW request headers
CloudFront
Check: Header “User-Agent”Transform: To lowerMatch Type: ContainsMatch: “badbot”Action: BLOCK
RuleString match condition
Scraper bot
Match conditions: Strings and bytes
条件1. Contains2. Exact3. Begins with4. Ends with5. Contains word
Transformation1. Convert to lowercase2. HTML decode3. 空⽩除去4. Simplify command line5. URL decode
Match conditions: Strings and bytes
悪意のあるバイナリの発⾒にはBase64エンコードが使える
“iVBORw0KGgoAAAAN”8950 4e47 0d0a 1a0a 0000 000d
bad.bin
1. Select binary file 2. Base64 encode 3. Set match criteria
$> base64 bad.biniVBORw0KGgoAAAAN
Match conditions: SQLインジェクション
query stringsを URL decode後にチェックする
SQLiについてはAWS WAFが定義しているコードの
み
Match conditions: SQLインジェクション
/login?x=test%27%20UNION%20ALL%20select%20NULL%20--
/login?x=testʼ UNION ALL select NULL --
クエリ文字列のチェックには URL decode
URL decode
AWS WAF: Rules• ルールはあらかじめ決められたcondition
とアクションのセット• 利⽤可能なアクション
• Block• Allow• Count
• ルールは論理的には結合している(AND)
• ルールは複数のWebACLsと適⽤される
Reuse conditions
• web ACLの再利⽤イメージ
CloudFrontdistributions
Web ACL #1
Web ACL #2
Shared blacklist
AWS WAF: Resource
• WebACLsはCloudFront distributionsに適⽤される• ルールは再利⽤できる:ひとつのWebACLを全ての
distributionsに使える• フレキシブル: WebACLをdistributionに個別にセットできる
AWS WAF: Reporting and Logs
• Real-Time Metrics (CloudWatch):• ブロック• 許可• カウントのみ– 分析のためのルールはすぐに適
⽤される– 時間区切りはグラフをスライド
させて指定できる• WAFのログはCloudFrontと統
合
AWS WAF: Request Process
HTTP/HTTPSのリクエストがCloudFront
に発せられる
WAFはリクエストをレビューし、CFに対してallow/denyを伝
える
CFはWAFの対象かどうかを判定
WAFはメトリクスをCloudwatchに送る。
利⽤者はルールをいつでも変更可
CloudFront経由でコンテンツ配送エラーページがCloudFrontから戻される
費⽤について
⽉間の費⽤例– テスト⽤ (1 rule): $6– Small site (6 rules, 58M views): $46– Medium site (6 rules, 260M views): $167
AWS WAFの利⽤戦略
ネガティブ• 多くの本番はこちら• ALLOW by default• BLOCK known-bad threats
ルール戦略
ポジティブ• 制限実⾏時が多い• BLOCK by default• ALLOW known-good
Examples• BLOCK マルウェア配布IPレンジ• BLOCK “{;}”
Examples• ALLOW オフィスのIPレンジ• ALLOW referrer header
“example.com”
緩和戦略
• Static policies – よく知られた⼿法の脅威むけ• Reactive policies – ⼿法が変化する脅威向け
AWS WAF パートナーによるルールの更新も
カウント機能を使った脅威発⾒
Count mode Alert on Amazon CloudWatch metricsGet sampled requestsAdd bad IPs to BlackList
これらをあわせた典型的な使い⽅
• Ruleの順番に注意!1. WhiteListed IPs – ALLOW2. BlackListed IPs – BLOCK3. BlackListedSignatures – BLOCK4. SQLInjection – COUNT5. SuspiciousActivity - COUNT
• Default: ALLOW
レポート⾃動化の流れ
CloudWatch
Alarm
SNS
Topic
AWS Lambda
AWS WAF
Operator
SNS
Topic
1. Alarm on count 2. Send Amazon SNS notification
4. Formatsampled requests
5. Getsampled requests
6. Send emailnotification
AWS WAFウォークスルー
AWS WAF: End to End Flow
1) WebACLの作成2) Conditions (IP, string match, SQL)作成3) RulesとActions (order, rule, action)作成4) WebACLをCloudFrontに適⽤5) レビュー
AWS WAF: Update WAF resources via API
• トークンベースで処理:
変更⽤トークン取得: WAFリソースを変更するための⼀回限りのトークンを取得変更のためにトークン使⽤
ステータス確認のためにトークン使⽤: INSYNCは、変更中であることを⽰す
1
2
3
GetChangeToken
$ aws waf get-change-token
{ "ChangeToken”:"d4c4f53b-9c7e-47ce-9140-0ee5765d6bff"
}
Create*
$ aws waf create-web-acl --name Test --metric-name Test --default-action Type=ALLOW --change-token d4c4f53b-9c7e-47ce-9140-0ee5765d6bff
GetChangeTokenStatus
$ aws waf get-change-token-status--change-token d4c4f53b-9c7e-47ce-9140-0ee5765d6bff
{
"ChangeTokenStatus":{ ”ChangeToken":"d4c4f53b-9c7e-47ce-9140-0ee5765d6bff ",
“Status”:"PROVISIONED", OR
"PENDING", OR "INSYNC" ] },}
Update*Set
$ aws waf update-ip-set--ip-set-id --change-token d4c4f53b-9c7e-47ce-9140-0ee5765d6bff--updates[ {"Action": "INSERT", "IPSetDescriptor": {"Type": "IPV4", "Value": "192.168.0.0/16"}
}, {"Action": "INSERT", "IPSetDescriptor": {"Type": "IPV4", "Value": "192.168.5.0/24"} }]
GetSampledRequests
GetSampledRequestsは、指定された時間内(最⼤3時間前まで)に⾏われた最⼤500リクエストをサンプリングした情報を得るのにつかう。{"MaxItems": number,"RuleId": "string","TimeWindow": {"EndTime": number,"StartTime": number},"WebAclId": "string"}
WAF Example: A Technical Implementation
悪いボットを動的に退治する
WAF Example: Blocking Bad Bots
• 必要なもの• IPSet: ブロックするIPアドレスリスト• Rule: IPSetにマッチしたら、ブロックする• WebACL: デフォルトではリクエストは許可。Ruleに含まれる
• 加えて必要なのは…• 悪いボットを検出する⽅法• 悪いボットのIPアドレスをIPSetに追加する⽅法
WAF Example: 悪いボットの検出
• robots.txt にスクレイプ禁⽌条項を書いておく
• スクレイプ禁⽌コンテンツへのリンクを隠しリンクとして書いておく
• $ cat webroot/robots.txt
• User-agent: *
• Disallow: /honeypot/
• <a href="/honeypot/" class="hidden" aria-hidden="true">click me</a>
WAF Example: 悪いボットのブラックリスト
• 悪いボット (robots.txtを無視するもの)は隠しリンクをリクエストする
• トリガスクリプトが• ソースIPアドレスを検出• トークンを変更• ソースIPアドレスをIPSetのブ
ラックリストに追加• WebACLは続くリクエストをブロッ
ク
$ aws --endpoint-url https://carrot.amazon.com/ carrot get-change-token
{
"ChangeToken": "acbc53f2-46db-4fbd-b8d5-dfb8c466927f”
}
$ aws --endpoint-url https://carrot.amazon.com/ carrot update-ip-set --cli-input-json '{ "IPSetId": ”<<IP SET ID>>", "ChangeToken": "acbc53f2-46db-4fbd-b8d5-dfb8c466927f", "Updates": [ { "Action": "INSERT", "IPSetDescriptor": { "Type": "IPV4", "Value": ”<<SOURCE IP>>/32" } } ] }’
{
"ChangeToken": "acbc53f2-46db-4fbd-b8d5-dfb8c466927f”
}
Q&A
次回Webinarのお申し込みhttp://aws.amazon.com/jp/event_schedule/
AWS Black Belt Tech Webinar 2015 〜今後の配信
• 12⽉は「新サービス紹介⽉間」– 12/16 Amazon EC2 スポットインスタンス & Auto Scaling– 12/22 AWS Black Belt 年の瀬座談会(※⽕曜⽇開催です)
• お申し込みサイト• http://aws.amazon.com/jp/about-aws/events/
Webinar資料の配置場所
• AWS クラウドサービス活⽤資料集– http://aws.amazon.com/jp/aws-jp-introduction/
公式Twitter/FacebookAWSの最新情報をお届けします
@awscloud_jp検索
最新技術情報、イベント情報、お役⽴ち情報、お得なキャンペーン情報などを⽇々更新しています!
もしくはhttp://on.fb.me/1vR8yWm
ご参加ありがとうございました。
Top Related