[AWS]AWS WAFのマネージドルールでSQLインジェクションを簡単に防ぐ

2019年12月に「AWS WAFのマネージドルール」が発表されました。

今までは有料のWAFのルールを購入して使用するか自分で適切なルールを作成する必要がありましたが、マネージドルールを使うことでAWSが用意したOWASP Top10に対応できるルールテンプレートを無料で利用できます。

実際にこれを利用して、SQLインジェクションの攻撃を防げるのか検証をしてみました。

検証用のサイトを用意


今回はSQLインジェクションの脆弱性があるWebサイトを用意する必要があったので、既存のサービスを利用させてもらいました。

「SQL ZOO」というSQLを学習することができるWebサービスがありますが、このページの中にSQLインジェクションを体験できる項目があります。
https://sqlzoo.net/hack/というページでは脆弱性を秘めたログインフォームから、ログイン情報を知らなくてもログインする方法やパスワードの推測方法についてを解説しています。

今回はこのページを使ってSQLインジェクションの検証を行います。
しかし外部のサービスに対してAWS WAFを適用することはできないので、CloudFrontを利用することにします。


SQL ZOOのドメインをオリジンとしたCloudFrontディストリビューションを作成します。
この時に自分の管理する任意のドメインを割り当てることもできます。


今回は[attack-test.noname.work]というドメインを割り当てました。


実際に自分のドメインで、SQL ZOOの検証ページにアクセスできることを確認しました。
CloudFrontにはAWS WAFを適用することが可能ですので、マネージドルールの検証をすることができますね。


まだWAFを設定していない状態で、SQLインジェクションの脆弱性があるかを確認します。


ログイン情報が分からないにも関わらず、脆弱性を利用してログインできることを確認しました。

では、早速AWS WAFのマネージドルールを利用してこの脆弱性を回避してみます。

Web ACLの作成


AWS WAFのコンソールへアクセスして、新規に設定を作成します。


[Add managed rule groups]からAWSが用意したルールを追加することができます。


非常にたくさんのルールが用意されていますが、その中の[SQL database]への攻撃遮断ルールを有効にします。


キャパシティが決まっているので、必要なルールを選んで適用してあげる必要があります。


マネージドルールから必要な項目を有効にしたら、Web ACLを作成します。
これで準備は完了しました。

実際に試す


CloudFrontを経由してSQL ZOOにアクセスして、脆弱性を利用したアクセスができるかどうか検証します。


先ほどはログイン情報がなくてもログインできてしまっていましたが、今回は403エラーが表示されました。
きちんとSQLインジェクションが防がれていることが分かります。

終わりに

そもそもとしてプログラム側でSQLインジェクションの脆弱性を作ってはいけないのですが、Webサービス内に潜在的なSQLインジェクションが存在する可能性は否定できません。

AWS WAFのマネージドルールを利用することでOWASP Top10に該当する攻撃を簡単に対策することができるので、SQLインジェクションに限らずサービスを守るために活用すると良いでしょう。

ただし、WAFを有効にしたことでサービスが正常に動かなくなる可能性もあるため、導入にあたっては十分な検証を行う必要がありますね。

マネージドルールは無料で様々な攻撃を防ぐテンプレートが利用できますが、WAF自体は検知数に応じた料金が発生することは注意する必要があります。

特に個人運用のWebサービスなどでは導入によってコストが大きく上がってしまう可能性があるため、きちんと料金試算も行ってから導入を検討してください。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)