AWSでWebサイトやサービスを構築しているユーザーはアプリケーションロードバランサー(ALB)やクラウドフロント(CloudFront)、そしてサーバレスでWebサービスを構築している場合、APIゲートウェイやAppSyncと言ったサービスを利用しているケースが考えられます。
もし、それらのAWSリソースを利用している場合は、AWS WAFが利用できますのでWebサイトやWebサービスをサイバー攻撃から保護するには利用することを推奨します。
そこで、今回はAWS WAFを理解するために基礎知識としてご参考にいただければと思いAWS WAFについて解説させていただければと思います。
まず、WAF(Web Application Firewall/ウェブアプリケーションファイアウォール)について簡潔に説明いたしますと、WAFとは不正なWebリクエストからWebサイトやWebサービスを守るために、攻撃で使われるような文字列や不正なデータを検知する専用のルールで悪意のあるWebリクエストを検知します。
ルールには検知した場合のアクションが設定でき、Webリクエストをブロックしたり、Webリクエストをそのまま通し記録したりすることができます。
その他にも異常なリクエスト数を受信した場合、受信量を制限したり、特定の国やIPなどのリクエストを制限することができます。
AWS WAFで防御可能なサイバー攻撃
では、どのような攻撃が防げるのかみてみましょう。WAFはネットワークファイアウォールと異なり、Webアプリケーションの通信内容を検査できますので、Webアプリケーションを狙った攻撃に効果があります。具体的にAWS WAFで防御可能なサイバー攻撃の例をあげてみます。
1. 不正な入力を試みるインジェクション型の攻撃(インジェクション攻撃)
インジェクション攻撃の中でもSQLインジェクションやXSSは有名な攻撃手法ですが、インジェクション型の攻撃はユーザーや外部システムから入力を受ける機能を介して、細工したデータを送信して攻撃を行います。
成功するとWebアプリケーションから非公開のデータが参照できたり、データを書き換えることができ、情報漏洩やコンテンツの改ざんなどクリティカルなセキュリティインシデントが発生してしまう場合があります。
インジェクション型の攻撃の場合、Webリクエストに含まれるデータが細工されていないかWAFでチェックすることで多くの攻撃を防ぐことができます。
以下はSQLインジェクションを検出するルールの例ですが、正規表現で記述したルールを用いて特定のキーワードが送信されている場合に検知します。下の例ではユーザーが入力するデータにpg_sleepなどが含まれていると検知し、アクションでブロックするように設定している場合、そのリクエストをブロックすることができます。
\\s*?shutdown\\s*?(?:[#;]|\\/\\*|–|\\{)|waitfor\\s*?delay\\s?[\”‘`]+\\s?\\d|select\\s*?pg_sleep
今回、SQLインジェクションを例に出しましたが、SQLインジェクションの他に、以下の攻撃が考えられます。
各攻撃の説明は省かせていただきますが、いずれもアプリケーションで処理するデータが細工され、攻撃されます。入力チェックする機能がアプリケーション側で備わっていれば脆弱性が発生する可能性が低くなりますが、検査機能が備わっていなかったり、脆弱な検査プログラムであれば、細工されたデータが通過し攻撃が成立する可能性が高くなります。
・クロスサイトスクリプティング (XSS) ・コマンドインジェクション ・XPathインジェクション ・リモートコードの実行 (RFI) ・ローカルファイルインクルージョン (LFI) ・GraphQLインジェクション ・LDAPインジェクション ・NoSQLインジェクション ・XML外部エンティティ参照 (XXE) ・サーバーサイドリクエストフォージェリー (SSRF)
AWS WAFではSQLインジェクションやクロスサイトスクリプティング攻撃を検出するための、ストリングセットが提供されていたり、サードパーティのマネージドルールを利用することで他のインジェクションタイプの攻撃からアプリケーションを保護することができます。
また、カスタムルールで正規表現など使って個別に定義することも可能です。
2. ボット・プローブ
世界中に脆弱性をスキャンする活動を行うボットが存在し、サイトに脆弱性が検出されると闇サイトで情報共有されたり、その脆弱性を狙ってサイバー攻撃を仕掛けてきます。このようなボットは不特定でサイトを狙う為、このような活動を行うボットの情報を収集し、そのボットからサイトへアクセスできないように制御することでリスクを低減させることができます。
脅威インテリジェンスとしてボットの接続元のIPアドレス情報を収集し、アクセスコントロールをかけるような対策が可能です。
AWS WAFではIPルールセットでIPアドレスを登録することができ、収集した不正IPを登録することもできますが、AWSやサードパーティのベンダーがIPレピュテーションとして配信しているルールもあります。弊社のクラウドサービス「CyberNEO」でも提供しております。
3. DoS/DDoS
DoS/DDoSはネットワークやアプリケーションへ負荷がかかるように大量の通信を送信して、負荷をかける攻撃を行います。Webアプリケーションの場合は、大量のリクエストを攻撃者が送信してリクエストを処理できなくさせ、サービスが利用できない状態を作ります。
人気のあるコンサートのチケットでWebサイトがアクセス不能になるような状態を悪意を持って故意に作り出すことを目的とします。
AWS WAFでは、特定の送信元から受け付けるリクエスト量をレイトリミットとして制限することができますのでそのような対策でリスクを低減させます。
しかし、攻撃の内容によってはAWS WAFでは防御が難しい場合もありますので、その場合はAWS Sheildを活用し対策を別途検討する必要があります。
AWS WAFで保護するリソースについて
AWS WAFはALBやクラウドフロント(CloudFront)、APIゲートウェイ、AppSyncで利用することができます。
AWS WAFはWeb ACL単位でWAFの設定を管理することができ、そのWeb ACLにルールやルールグループを関連付けたり、ログの出力先の設定することが可能です。
Web ACLが作成できましたら、保護したいリソースに関連付けを行うことでWeb ACLで設定した内容が適用されます。ALBで運用されているWebサイトを保護したい場合は、ALBにWeb ACLを関連付けることで有効になります。
1つのWebACLは複数のリソースに関連付けることも可能です。但し、異なるルールで運用したい場合はWeb ACLを別に作成していただき、関連付けする必要があります。
AWS WAFの機能
AWS WAFでは悪意のあるリクエストをブロックするためにSQLインジェクションのルールセットやXSSのルールセット、またマネージドルールとしてパッケージ化されたルールグループを提供しています。
マネージドグループで構成されるルールは不正なリクエストを検出するためにどのような文字列がどこに「Body部やヘッダーの特定フィールドやクエリー」に含まれているかなど、あらかじめ条件がセットされたものです。
ユーザーはルールを作らないくてもすぐに利用できる汎用的なルールになっています。
ルールの内容をより厳格にしたい、またサポートされていない攻撃に対応したいなどルールを個別の環境や事情にあわせて作りたい場合があるかと思います。
その場合、自分で条件を指定して作成することができます。
正規表現、特定の文字列が含めれているか、リクエストの レートリミットや、特定のIPや国からの制限など条件を設定することができます。
AWS WAFの種類
現在サポートされているWAFはAWS WAF ClassicバージョンとClassicの後にリリースされた現行のAWS WAFバージョンの2種類になります。
新しくAWS WAFを利用する場合は現行のAWS WAFを利用してください。Classicより現行のAWS WAFの方がリソースの制限が緩和されており、より柔軟なルールが作成できます。ルールの論理条件もClassicではAND/NOTだけですが、現行のAWS WAFではORが追加されています。
また今後機能の拡張も現行に対して行われると思いますので、特別な理由がない限り現行のAWS WAFを利用することを推奨します。
Classicを利用している場合は現行に切り替えることも今後のサポート面から考慮しても良いかと思います。
まとめ
AWSでWebサイトやWebサービスを構築している場合、Web経由でアクセスできる部分はサイバー攻撃から最も狙われやすい箇所になります。脆弱性診断やペネトレーションテストで脆弱な箇所を特定することはもちろん、AWS WAFを利用してサイバー攻撃を未然に防ぐことも重要です。WAFを導入するだけでなく、WAFをすり抜けるような攻撃が発生していないか、またそのようなリスクの高い攻撃が発生した場合には攻撃が継続している間、送信元をブロックするなど適切な対応が必要になります。
サイバーマトリックスはCyberNEOでAWS WAFの運用をAIで自動化し、人間が関与することなく運用が実現するクラウドサービスを提供しています。多くの場合、導入時のルールの調整やAIの調整は不要ですが、調整が必要な場合はサイバーマトリックスの技術者がサポートしていますので、導入から運用へスムースに進めることができます。
是非、AWS WAFを導入の際にはCyberNEOをご検討ください。