この章の内容は、次のとおりです。
この章では、Audit Vault and Database Firewall (Oracle AVDF)、BIG-IP Application Security Manager (ASM)、WebクライアントおよびWebアプリケーション・サーバーの統合について説明し、統合による動作とその主な利点についても説明します。
F5 Networks社のBIG-IP Application Security Manager (ASM)は高度なWebアプリケーション・ファイアウォール(WAF)で、Webベースの様々な攻撃に対してネットワークのエッジで包括的な保護を実現します。
図8-1に示すように、BIG-IP ASMはWebクライアントとWebアプリケーション・サーバーの間にデプロイされます。これによって、各HTTPおよびHTTPSリクエストが分析され、攻撃がWebアプリケーション・サーバーに達する前に潜在的な攻撃をブロックします。BIG-IP ASMは様々なBIG-IPプラットフォームにインストールできます(「Oracle AVDFとBIG-IP ASMの統合のデプロイ」を参照)。
Database FirewallはWebアプリケーション・サーバーとデータベースの間にデプロイされます。これによって、データベースに送信されたSQL文の目的が分析され、ネットワーク内外からの攻撃に対してデータベースが保護されます。セキュリティ上の既知の脅威の構文を認識するだけでなく、それまで認知されていなかった攻撃(組織を標的にした攻撃を含む)もブロックします。
BIG-IP ASMとDatabase Firewallの両方を含むデプロイメントによって、両方の製品が持つセキュリティ機能の利点をすべて利用でき、2つのシステムが連携して機能して比類なきレベルのデータ・セキュリティを実現します。
この統合の主な利点は、BIG-IP ASMからDatabase Firewallに、データベースに送信されたSQL文に関する追加情報(SQL文を送信したWebユーザーの名前やIPアドレスを含む)を渡すことができることです。この情報は、Webアプリケーション・サーバーで生成されたSQL文からは通常取得できません。
BIG-IP ASMおよびDatabase Firewallシステム自体から取得された情報は、Database Firewallによって該当する文の属性としてログに記録されます。データがログに記録されるとトラフィック・ログのビューに取り込むことができるため、あらゆる攻撃のソースと特性を完全に視覚化できます。
主な利点の概要
2つのシステムが連携することによってセキュリティが向上します。
Oracle AVDFでは、Webアプリケーション層からのSQL文の作成元と内容に関する詳細情報を提供できます。
Oracle AVDFは、BIG-IP ASMで生成されたデータのログ・ストアとして機能できます。
ネットワークのエッジ、およびデータベース周りにおいて階層化されたセキュリティを提供できます。
統合によって、syslogメッセージ・システムを使用してBIG-IP ASMからアラートを配信できます。標準のBIG-IP ASM syslogメッセージは、ASMロギング・プロファイルを使用して有効になり、セキュア・ターゲット・クライアントのIPアドレス、セッションのその他の属性など各アラートの詳細を提供します。
BIG-IP ASM iRule(tm)が設定されるため、ユーザーのログイン中にsyslogメッセージが生成され、Webユーザー名が特定されます。Oracle AVDFにはサンプルのiRuleが用意されていますが、Webアプリケーションの特定のログイン手順に一致するようにカスタマイズする必要があります。「BIG-IP ASM iRuleの開発」を参照してください。
デプロイ手順中に、BIG-IP ASMはすべてのsyslogメッセージをOracle AVDFにルーティングするように設定されます。Oracle AVDFでは、関連する各BIG-IP ASM syslogメッセージと、Webアプリケーション・サーバーで生成された該当するSQL文が照合されます。一致が検出されると、BIG-IP ASM syslogメッセージに含まれている情報が抽出され、ログに記録されたSQL文の属性としてその情報が格納されます。一致が検出されなかった場合は、別のレコードがトラフィック・ログに追加され、syslogメッセージに含まれる属性が格納されます。
このソフトウェアでは、Cookieを使用してSQL文とWebユーザーが照合されます。ユーザーがログインすると、BIG-IP ASMでは一意のCookieがそのユーザーに割り当てられます(通常、Cookieの名前は「TS」で始まります)。そのCookieとユーザー名は、ASM上のiRuleで生成されたsyslogメッセージによってOracle AVDFに送信されます。ユーザーのアクションによってアラートまたは他のイベントが発生した場合、BIG-IP ASMでは同じ識別Cookieを含む追加のsyslogメッセージが生成され、ソフトウェアでそのsyslogメッセージと特定のユーザーを照合できます。Oracle AVDFシステムでもsyslogメッセージとSQL文を照合できるため、潜在的な脅威に関連するSQL文を特定のWebユーザーに結び付けることができます。
Oracle AVDFでは、BIG-IP ASMから受信したすべてのsyslogメッセージを外部のsyslogサーバーに自動的にリレーできます(最大サイズは各2KB)。必要な場合は、Oracle AVDF自体で生成されたsyslogメッセージも同じ宛先にルーティングできます。Oracle AVDFがBIG-IP ASM syslogのトラフィックを変更することはありません。
Oracle AVDFではBIG-IP ASMとの接続の状態を監視し、接続が検出されない場合または接続が失われた場合は、syslogメッセージが2分ごとに生成されます。
この項の内容は次のとおりです。
Oracle AVDFを使用してBIG-IP ASMをデプロイするには、両方のシステムで簡単な設定をいくつか構成し、Webアプリケーションの構成に一致するように、iRuleをカスタマイズする必要があります。
Oracle AVDF
F5 BIG-IP ASMバージョン9.4.5、バージョン10またはバージョン11。FirePass®、BIG-IP LTM(tm)、BIG-IP GTM(tm)、WebAccelerator(tm)、WANJet®など他のF5製品は、現在サポートされていません。
F5のWebサイト(http://www.f5.com/
)でBIG-IP ASMの最新情報を閲覧してください。
Oracle AVDFは、セキュア・ターゲットの強制ポイントを構成した後にのみ、F5 BIG-IP ASMと連携して動作するように構成できます。
セキュア・ターゲットのF5 BIG-IP ASMと連携して動作するようにOracle AVDFを構成する手順は、次のとおりです。
強制ポイントがこのセキュア・ターゲットに定義されていることを確認します。
「強制ポイントの構成」を参照してください。
Audit Vault Serverコンソールに管理者としてログインします。
「セキュア・ターゲット」タブをクリックした後、「監視」メニューから「強制ポイント」をクリックします。
このセキュア・ターゲットを監視する強制ポイントの名前をクリックします。
「詳細」をクリックします。
オプションを設定します。
システム・アドレス: この読取り専用情報は、この強制ポイントに関連付けられたDatabase FirewallのIPアドレスを示します。BIG-IP ASMは、syslogメッセージをこのアドレスとポートに送信する必要があります。
WAFアドレス: 単語DISABLED
を削除し、syslogメッセージを生成してDatabase Firewallに送信する各BIG-IP ASMシステムのIPアドレスを入力します。各IPアドレスは空白で区切ります。
WAFアラート転送の無効化: Database Firewallでsyslogメッセージの転送を停止する場合は、このチェック・ボックスを選択します。アラート転送の現在のステータスがこのオプションの下に表示されます。
宛先ホストおよび宛先ポート: Database Firewallから転送されたBIG-IP ASM syslogメッセージを受信するsyslogサーバーのIPアドレスとポート番号を指定します。Database Firewallは、これらのメッセージを変更せずにリレーします。
このIPアドレスは、Database Firewall自体で生成されるsyslogメッセージのsyslog宛先と同じである必要はありません。
WAFログ・データによるレポートの拡張: syslogメッセージから取得したBIG-IP ASM属性(IPアドレス、Webアプリケーション・ユーザーの名前など)をDatabase Firewallで記録できるようにする場合は、このチェック・ボックスを選択します。このチェック・ボックスを選択しない場合、Database FirewallはF5とDatabase Firewall SQLのメッセージの照合を試みません。
Cookie接頭辞: F5では、Cookieに標準の接頭辞を付けて、提供するページに追加します。必要に応じて、このフィールドでこれらのCookieの接頭辞を変更します。Database Firewallでは、この接頭辞を使用してCookieを検索します。
Session Idle Timeout: このフィールドに指定した時間の長さだけユーザーのCookieが保存されます。このため、ここで指定した時間が経過すると、同じCookieを別のユーザーが使用できるようになります。
Exclude Addresses: レポート作成の目的で無視する、Webアプリケーション・サーバーまたは他のSQL生成ソースのIPアドレスのリストを指定できます。たとえば、内部Webアプリケーション・サーバーのIPアドレスを追加できます。
この項では、ロギング・プロファイルの作成方法とポリシー設定の記述方法について説明します。
BIG-IP ASM syslogメッセージをOracle AVDFに送信するように、Webアプリケーションのロギング・プロファイルを構成します。サーバーIPとサーバー・ポート(たとえば、5514)を使用して、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
(F5バージョン9の場合)またはrequest_status
(F5バージョン10およびバージョン11の場合)
response_code
method
protocol
uri
query_string
ip
(F5バージョン9の場合)またはip_client
(F5バージョン10およびバージョン11の場合)
web_application_name
request
注意: 属性は、ここに示した順序で「Selected Items」ボックスに表示される必要があります。 |
ポリシー設定によって、必要なイベントを有効にしてsyslogを送信します(この方法が不明な場合は、ASMのヘルプを参照してください)。
Oracle AVDFでは、次のイベントが認識されます。
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が含まれます。メッセージはDatabase Firewallにルーティングされ、Webアプリケーション・サーバーで生成されたSQL文に対してユーザー名がログに記録されます。
Oracle AVDFに用意されているサンプルの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 AVDFでは、使用される認証方法をレポートするとき以外はこの情報を使用しません。
次に例を示します。
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 AVDFに転送されるようにするには、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
は、Database FirewallのIPアドレスとポート番号です(手順6で指定)。次に例を示します。
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つのインスタンスを変更する必要があるのは、万一宛先名がすでに使用されている場合のみです。