この付録の内容は、次のとおりです。
この章では、Oracle Database Firewall、BIG-IP Application Security Manager(ASM)、WebクライアントおよびWebアプリケーション・サーバーの統合について説明し、統合による動作とその主な利点についても説明します。
F5 Networks社のBIG-IP Application Security Manager(ASM)は高度なWebアプリケーション・ファイアウォール(WAF)で、Webベースの様々な攻撃に対してネットワークのエッジで包括的な保護を実現します。
図11-1に示すように、BIG-IP ASMはWebクライアントとWebアプリケーション・サーバーの間にデプロイされます。これによって、各HTTPおよびHTTPSリクエストが分析され、攻撃がWebアプリケーション・サーバーに達する前に潜在的な攻撃をブロックします。BIG-IP ASMは様々なBIG-IPプラットフォームにインストールできます(「Oracle Database FirewallとBIG-IP ASMの統合のデプロイ」を参照)。
Oracle Database FirewallとBIG-IP ASMの統合は、ArcSight SIEMを統合するとさらに機能が向上します。詳細は、第12章「Oracle Database FirewallとArcSight SIEMの併用」を参照してください。
図11-1 Oracle Database FirewallとF5 BIG-IP ASMのデータ・フロー・ユニット
Oracle Database FirewallはWebアプリケーション・サーバーとデータベースの間にデプロイされます。これによって、データベースに送信されたSQL文の目的が分析され、ネットワーク内外からの攻撃に対してデータベースが保護されます。セキュリティ上の既知の脅威の構文を認識するだけでなく、それまで認知されていなかった攻撃(組織を標的にした攻撃を含む)もブロックします。
BIG-IP ASMとOracle Database Firewallの両方を含むデプロイメントによって、両方の製品が持つセキュリティ機能の利点をすべて利用でき、2つのシステムが連携して機能して比類なきレベルのデータ・セキュリティを実現します。
この統合の主な利点は、BIG-IP ASMからOracle Database Firewallに、データベースに送信されたSQL文に関する追加情報(SQL文を送信したWebユーザーの名前やIPアドレスを含む)を渡すことができることです。この情報は、Webアプリケーション・サーバーで生成されたSQL文からは通常取得できません。
BIG-IP ASMおよびOracle Database Firewallシステム自体から取得された情報は、Oracle Database Firewallによって該当する文の属性としてログに記録されます。データがログに記録されるとトラフィック・ログのビューに取り込むことができるため、あらゆる攻撃のソースと特性を完全に視覚化できます。
2つのシステムが連携することによってセキュリティが向上します。
Oracle Database Firewallでは、Webアプリケーション層からのSQL文の作成元と内容に関する詳細情報を提供できます。
Oracle Database Firewallは、BIG-IP ASMで生成されたデータのログ・ストアとして機能できます。
ネットワークのエッジ、およびデータベース周りにおいて階層化されたセキュリティを提供できます。
統合によって、syslogメッセージ・システムを使用してWebアプリケーション・ファイアウォールからアラートを配信できます。標準のBIG-IP ASM syslogメッセージは、ASMロギング・プロファイルを使用して有効化され、ユーザーのソースIPアドレス、セッションのその他の属性など各アラートの詳細を提供します。
さらに、オプションのBIG-IP ASM iRule(tm)を設定すると、ユーザーのログイン中にsyslogメッセージが生成され、Webユーザー名を特定できます。Oracle Database FirewallにはサンプルのiRuleが用意されており、Webアプリケーションの特定のログイン手順に一致するようにカスタマイズする必要があります。「BIG-IP ASM iRuleの開発」を参照してください。
デプロイメント手順の間、BIG-IP ASMはすべてのsyslogメッセージをOracle Database Firewallにルーティングするように設定されます。Oracle Database Firewallでは、関連する各BIG-IP ASM syslogメッセージと、Webアプリケーション・サーバーで生成された該当するSQL文が照合されます。一致が検出されると、BIG-IP ASM syslogメッセージに含まれている情報が抽出され、ログに記録されたSQL文の属性としてその情報が格納されます。一致が検出されなかった場合は、別のレコードがトラフィック・ログに追加され、syslogメッセージに含まれる属性が格納されます。
このソフトウェアでは、Cookieを使用してSQL文とWebユーザーが照合されます。ユーザーがログインすると、BIG-IP ASMでは一意のCookieがそのユーザーに割り当てられます(通常、Cookieの名前は「TS」で始まります)。そのCookieとユーザー名は、Oracle Database Firewall iRuleで生成されたsyslogメッセージによってOracle Database Firewallに送信されます。ユーザーのアクションによってアラートまたは他のイベントが発生した場合、BIG-IP ASMでは同じ識別Cookieを含む追加のsyslogメッセージが生成され、ソフトウェアでそのsyslogメッセージと特定のユーザーを照合できます。Oracle Database FirewallシステムでもsyslogメッセージとSQL文を照合できるため、潜在的な脅威に関連するSQL文を特定のWebユーザーに結び付けることができます。
Oracle Database Firewallでは、BIG-IP ASMから受信したすべてのsyslogメッセージを外部のsyslogサーバーに自動的にリレーできます(最大サイズは各2KB)。必要な場合は、Oracle Database Firewall自体で生成されたsyslogメッセージも同じ宛先にルーティングできます。Oracle Database FirewallがBIG-IP ASM syslogのトラフィックを変更することはありません。
Oracle Database FirewallではBIG-IP ASMとの接続の状態を監視し、接続が検出されない場合または接続が失われた場合は、syslogメッセージが2分ごとに生成されます。
この項で説明する項目は、次のとおりです。
Oracle Database Firewallを使用してBIG-IP ASMをデプロイするには、両方のシステムで簡単な設定をいくつか構成し、Webアプリケーションの構成に一致するように、iRuleをカスタマイズする必要があります。
Oracle Database Firewall
F5 BIG-IP ASMバージョン9.4.5およびバージョン10。FirePass®、BIG-IP LTM(tm)、BIG-IP GTM(tm)、WebAccelerator(tm)、WANJet®など他のF5製品は、現在サポートされていません。
このガイドが発行された時点でBIG-IP ASMがサポートされているのは、BIG-IP 3600、4100、6900、8400および8800ハードウェア・プラットフォームです。必要に応じて、F5のWebサイトで最新情報を閲覧してください。URLは次のとおりです。
Oracle Database Firewallは、保護対象データベースに強制ポイントを設定した後にのみ、F5 BIG-IP ASMとともに動作するように構成できます。
Oracle Database FirewallがF5 BIG-IP ASMとともに動作するように構成する手順は、次のとおりです。
Management Serverの管理コンソールにログインします。
詳細は、「管理コンソールへのログイン」を参照してください。
保護対象データベースに強制ポイントが定義されていることを確認します。
「Monitoring」タブをクリックします。
次のように、強制ポイントがリストされます。
保護対象データベースを監視する強制ポイントで「Advanced」をクリックします。
オプションを設定します。
System Address: この情報は読取り専用で、「System Settings」ページで設定したOracle Database FirewallのIPアドレスが表示されます。BIG-IP ASMは、syslogメッセージをこのアドレスとポートに送信する必要があります。
WAF Addresses: syslogメッセージを生成してOracle Database Firewallに送信する各BIG-IP ASMシステムのIPアドレスを入力します。各IPアドレスは空白で区切ります。
Destination Host and TCP Port: Oracle Database Firewallから転送されたBIG-IP ASM syslogメッセージを受信するsyslogサーバーのIPアドレスとポート番号を指定します。Oracle Database Firewallは、これらのメッセージを変更せずにリレーします。
このIPアドレスは、Oracle Database Firewall自体で生成されるsyslogメッセージのsyslog宛先と同じである必要はありません。
Disable WAF Alert Forwarding: Oracle Database Firewallでsyslogメッセージの転送を停止する場合は、このチェック・ボックスを選択します。アラート転送の現在のステータスがこのオプションの下に表示されます。
Enhance reports with WAF logging data: Oracle Database Firewallのトラフィック・ログに、syslogメッセージから取得したBIG-IP ASM属性(IPアドレス、Webアプリケーション・ユーザーの名前など)を記録する場合は、このチェック・ボックスを選択します。このチェック・ボックスを選択しない場合、Database FirewallはF5とDatabase Firewall SQLのメッセージの照合を試みません。
Session Idle Timeout: このフィールドに指定した時間の長さだけユーザーのCookieが保存されます。このため、ここで指定した時間が経過すると、同じCookieを別のユーザーが使用できるようになります。
Exclude Addresses: レポート作成の目的で無視する、Webアプリケーション・サーバーまたは他のSQL生成ソースのIPアドレスのリストを指定できます。たとえば、内部Webアプリケーション・サーバーのIPアドレスを追加できます。
この項では、ロギング・プロファイルの作成方法とポリシー設定の記述方法について説明します。
BIG-IP ASM syslogメッセージをOracle Database Firewallに送信するように、Webアプリケーションのロギング・プロファイルを構成します。「Server IP」と「Server Port」(たとえば、5514)を使用して、Oracle Database FirewallのIPアドレス(管理コンソールへの接続に使用するIPアドレスと同じ)を指定します。プロトコルは「TCP」を選択します。
「Selected Items」には、次の属性が含まれている必要があります。
violations
unit_hostname
management_ip_address
policy_name
policy_apply_date
x_forwarded_for_header_value
support_id
request_blocked
response_code
method
protocol
uri
query_string
ip
web_application_name
request
注意: 属性は、ここに示した順序で「Selected Items」ボックスに表示される必要があります。 |
ポリシー設定によって、必要なイベントを有効にしてsyslogを送信します(この方法が不明な場合は、ASMのヘルプを参照してください)。
Oracle Database Firewallでは、次のイベントが認識されます。
Evasion technique detected
Request length exceeds defined buffer size
Illegal dynamic parameter value
Illegal meta character in header
Illegal meta character in parameter value
Illegal parameter data type
Illegal parameter numeric value
Illegal parameter value length
Illegal query string or POST data
Illegal static parameter value
Parameter value does not comply with regular expression
Attack signature detected
Illegal HTTP status in response
オプションで、iRuleを使用すると、ログイン・ページを監視し、ユーザーがWebアプリケーションにログインするたびにsyslogメッセージを生成できます。syslogメッセージには、Webアプリケーション・ユーザーのユーザー名、およびそのユーザーに関連付けられたCookieが含まれます。メッセージはOracle Database Firewallにルーティングされ、Webアプリケーション・サーバーで生成されたSQL文に対してユーザー名がログに記録されます。
Oracle Database Firewallで提供されるサンプルのiRuleには、syslogメッセージの必要な形式が含まれていますが、使用するWebアプリケーションの特定のログイン要件にあわせてカスタマイズする必要があります。
# F5 BIG-IP example iRule # Description: Capture username and cookies from user login to web application # # Global variable definitions and other initialisation logic goes here when RULE_INIT { ### Customise this to suit your application # The page that user logins from set ::login_page "/login.asp" # The name of the field holding the user name set ::login_parameter_name "Uname" # The method of authentiaction which will be sent to Oracle Database Firewall set ::auth_method "webforms" # HTTP protocol methods that is used by the login form set ::login_method "POST" ### Don't change these # Limit the length of the HTTP request for safety set ::max_header_content_length 5242880 # Log iRule trace messages to /var/log/ltm? 1=yes, 0=no # Must be set to 0 for production systems set ::payload_debug 0 } # HTTP request received, check if it's a login request and start assembling the # data when HTTP_REQUEST { # Log the debug message if trace is enabled if {$::payload_debug}{log local3. "[IP::client_addr]:[TCP::client_port]: New HTTP [HTTP::method] request to [HTTP::host][HTTP::uri]"} # Reset cookies to empty, later used as an indicator of the fact that # login HTTP request has been received set cookie_all "" # If the request is to the login page populate cookie_all variable with # all the cookies received if {[HTTP::path] starts_with $::login_page and [HTTP::method] eq $::login_method} { set cookie_name [HTTP::cookie names] for {set c 0}{$c < [HTTP::cookie count]}{incr c}{ set cookie_string [split [lindex $cookie_name $c] " "] set cookie_list $cookie_string=[HTTP::cookie [lindex $cookie_string 0]] append cookie_all "," $cookie_list } # Log the debug message if trace is enabled if {$::payload_debug}{log local3. "[IP::client_addr]:[TCP::client_port]: Matched path and method check"} # Validate the Content-Length value and set the content_length variable if {[HTTP::header value Content-Length] > $::max_header_content_length } {set content_length $::max_header_content_length } else { set content_length [HTTP::header value Content-Length] } # Get the payload data if {$content_length > 0}{ HTTP::collect $content_length # Log the debug message if trace is enabled if {$::payload_debug}{log local3. "[IP::client_addr]:[TCP::client_port]: Collecting $content_length bytes"} } } } # Got the data, parse them and generate the syslog message when HTTP_REQUEST_DATA { # If cookies are present this is a login request, get the user name if {$cookie_all != "" } { # Log the debug message if trace is enabled if {$::payload_debug}{log local3. "[IP::client_addr]: [TCP::client_port]: Collected request data: [HTTP::payload]"} # Reset the error flag to 0 set uname_logged 0 # Find the $::login_parameter_name among the parameters in the request and extrat its value set param_value_pairs [split [HTTP::payload] "&"] for {set i 0} {$i < [llength $param_value_pairs]} {incr i} { set params [split [lindex $param_value_pairs $i] "="] if { [lindex $params 0] equals $::login_parameter_name } { # User name was found, generate the syslog message # which includes IP, port, all the cookies, user name and # the auth_method string set username [lindex $params 1] log local3. "DBFIREWALL:CLIENT=[IP::client_ addr]:[TCP::client_port]$cookie_all, USERNAME=$username,AUTHMETHOD=$::auth_method" # Set the flag so not to trigger the error reporting log message below set uname_logged 1 break } } # If user name has not been found in parameters log an error if {$uname_logged == 0 } { log local0. "ERROR: iRule failed to extract user name from page $login_page with parameter $login_parameter_name" } } }
カスタムiRuleで生成されるsyslogメッセージの必要な形式は、次のとおりです。
Rule [iRuleName] HTTP_REQUEST_DATA: DBFIREWALL:CLIENT=[ClientIPAddress]:[ClientPort],[Cookies], USERNAME=[Name],AUTHMETHOD=[AuthMethod]
詳細は、次のとおりです。
[iRuleName
]は、iRule
の名前です。
[ClientIPAddress
]は、WebクライアントのソースIPアドレスです。
[ClientPort
]は、Webクライアントのソース・ポート番号です。
[Cookies
]は、BIG-IP ASM HTTPオブジェクトから使用可能なCookieのリストです。
[Name
]は、ユーザー名です。
[AuthMethod
]は、F5 WebサーバーとそのWebクライアントの間で使用される認証の方法で、BIG-IP ASMで設定されます。Oracle Database Firewallでは、使用される認証方法をレポートするとき以外はこの情報を使用しません。
次に例を示します。
Rule capture_login_rule HTTP_REQUEST_DATA:
DBFIREWALL:CLIENT=10.190.0.1:443,ASPSESSIONIDSASSBSCD=1234,TS10da7b=23545,
USERNAME=FredBloggs,AUTHMETHOD=webforms
iRule syslogメッセージがOracle Database Firewallに転送されるようにするには、BIG-IPハードウェア・プラットフォームにログインし、次のBIG-IP ASMコマンドを実行して/etc/syslog-ng /syslog-ng.conf
を変更する必要があります(直接変更するとシステムの再起動後に変更が保持されないため、ファイルを直接変更しないでください)。
bigpipe syslog include "destination d_dbfw { tcp(\"dbfw_ip_address\" port(dbfw_port));};log { source(local); filter(f_local3); destination(d_dbfw);};"
dbfw_ip_address
とdbfw_port
は、Oracle Database FirewallのIPアドレスとポート番号です(ステップ5で指定)。次に例を示します。
bigpipe syslog include "destination d_dbfw { tcp(\"192.168.0.181\" port(5514));};log { source(local); filter(f_local3); destination(d_dbfw);};"
syslog宛先名(d_dbfw
)の2つのインスタンスを変更する必要があるのは、万一宛先名がすでに使用されている場合のみです。
この項で説明する項目は、次のとおりです。
Oracle Database Firewall管理コンソールの「Dashboard」ページには、Webユーザー別の上位10件の脅威、ブロックされた文に関する統計、およびBIG-IP ASMへのリンクの現行ステータスの概要が表示されます。この情報を表示すると、脅威の概要を把握し、システムが動作していることを確認できます。
情報を表示するには、Oracle Database Firewall管理コンソールにログインし、「Dashboard」ページを表示します。
WAF情報は、「Dashboard」ページの2つの領域に表示されます。
WAF Status: ここには、BIG-IP ASMへのリンク(最上行)の現行ステータス、および次の統計が表示されます。
Policy Confirmed: 過去1時間に、SQL文と一致してOracle Database Firewallの「ブロック」または「警告」が生成されたBIG-IP ASM syslogメッセージの数。
Policy Conflict: 過去1時間に、SQL文と一致したがOracle Database Firewallの「ブロック」または「警告」が生成されなかったBIG-IP ASM syslogメッセージの数。
Matched: 過去1時間に、SQL文と正常に一致したBIG-IP ASM syslogメッセージの数。
Unmatched: 過去1時間に、SQL文と正常に一致しなかったBIG-IP ASM syslogメッセージの数。
Events in Last Hour: 過去1時間におけるBIG-IP ASMからのsyslogメッセージの合計数。
Top Ten Threats by Web User: 指定した期間内で最も重大な脅威がリストされます。Webユーザー名別に脅威がリストされます。1名のユーザーに対して1行が使用されます。
ユーザーをクリックすると、そのユーザーによる攻撃がすべてリストされます。
Oracle Database Firewall管理コンソールでトラフィック・ログを表示すると、BIG-IP ASMから収集されたデータを表示できます。トラフィック・ログに格納される内容は、次のとおりです。
Oracle Database Firewallによってログに記録された各SQL文、および各文に関連付けられた属性。属性には、Oracle Database Firewallシステムからのデータ(脅威の重大度、アクション・レベルなど)、およびSQL文と一致したBIG-IP ASM syslogメッセージから取得したデータ(使用可能な場合)が含まれます。
SQL文と一致しなかったBIG-IP ASM syslogメッセージによって報告された各違反。
ログ・トラフィックを表示する手順は、次のとおりです。
Management Serverの管理コンソールにログインします。
詳細は、「管理コンソールへのログイン」を参照してください。
「Reporting」タブをクリックします。
「Traffic Log」メニューから「Search Log」を選択します。次に示すページが表示されます。
タイトルを入力し、トラフィック・ログから必要なレコードを取得するために使用する検索条件を指定します。「Search」をクリックします。
「Search Traffic Log」ページへのアクセスに関する詳細は、『Oracle Database Firewallセキュリティ・ガイド』を参照してください。
「Searches」ページに検索が完了したことを示すメッセージが表示されたら、レポート・タイトルをクリックします。
「Search Results」ページに、検出された文が表示されます。
Oracle Database Firewallロゴとともに表示される属性は、Oracle Database Firewallシステムから取得されます。F5ロゴとともに表示されるのは、BIG-IP ASMから取得または導出されたものです。属性の詳細は、付録C「トラフィック・ログの属性」を参照してください。
Oracle Database Firewall管理コンソールからは、次のようないくつかのレポートを生成できます。
F5 Alerts Blocked by F5: BIG-IP ASMによってブロックされたすべてのアラート。
F5 Confirmed Alert: BIG-IP ASMで検出され、Oracle Database Firewallで「ブロック」または「警告」が生成されるアラート。
F5 Incident Report: すべてのインシデントの時間別リスト。
F5 Incident Summary by User: ユーザー別にグループ化されたインシデントのリスト。
F5 Incident Summary by Cluster: SQL文のクラスタ別にグループ化されたインシデントのリスト。
F5 No WAF Match: BIG-IP ASMで検出され、Oracle Database FirewallでSQL文と一致しなかったアラート。
F5 Policy Conflict: BIG-IP ASMで検出され、Oracle Database Firewallで「ブロック」または「警告」が発生しないアラート。
F5 Policy Conflict by User: ユーザー別にグループ化されたポリシー競合レポート。