公開されている最新のIPS/IDSルールをAWS Network Firewallに自動取り込みできるようにするハンズオンやってみた

コンサルティング部の枡川です。

AWS Networkについて、公開されているIPS/IDSルールを自動で取得してルールグループ化するように設定するハンズオンがあったのでやってみました。
最近AWSマネージドのルールグループも追加されてどんどん使いやすくなっていると思うので是非活用していきたいですね。

ハンズオンについて

今回実施したハンズオンはAWS Security Blogで紹介されている2部構成のハンズオンです。
1部では基本的なAWS Network Firewallについて学習できます。

2部では、厳格なルール評価順の指定とEmerging threatから自動的に最新のSuricataベースのルールを取得するように設定する方法を学習できます。

2部のハンズオンで使用する公開ルールを自動取得するサーバレスアプリケーションはaws-samplesリポジトリにサンプルとして公開されています。
AWS SAM CLIを使用して、簡単にアプリケーションを構築することができます。
aws-samples / aws-network-firewall-rulegroups-with-proofpoints-emerging-threats-open-ruleset

Network Firewallについて

AWS Network FirewallはAWS環境で使用可能なマネージドのファイアウォールサービスです。
ステートレスエンジンとステートフルエンジンの2つのトラフィック検査ルールエンジンを持っています。
2つの検査エンジンを使用した実際の評価の流れは下図のようになっています。
抜粋:Network Firewall stateless and stateful rules engines

ステートレスエンジンでは、送信元IPやポートなどでルールを指定します。
その後、dropやpassの他にステートフルエンジンへの転送も選択することができます。
下図では転送とだけ記載されていますが、この場合はICMP通信だけ通信を遮断し、その他の通信はステートフルな検索エンジンで判断する形とすることができます。
ステートフルエンジンでは、SuricataベースのIPS/IDSルールでのチェックを行うことができます。
今回公開ルールを取得して適用しようとしているのはステートフルエンジンでのルールの方です。
ハンズオンで実施するように、ルールをダウンロードしてくることもできますし、AWSマネージドルールを使用することもできますが、いろいろと自分で書いてみたいという方は下記ブログが詳しいです!

ハンズオンやってみた

ハンズオンのアーキテクチャーは下記です。
抜粋:Hands-on walkthrough of the AWS Network Firewall flexible rules engine – Part 2

下記のようにAWS SAM CLIを使用して構築することができます。
何個か質問されます。
リージョンはap-northeast-1に変更しても良いですが、すべてデフォルト設定とYesで問題ないです。

$ sam build
$ sam deploy --guided

生成されたリソースを見てみます。
まず、Event Bridgeのルールが設定されます。
デフォルトは6時間間隔でLambda関数のAWSSuricataRulesDownloaderを呼び出します。
この関数はhttps://rules.emergingthreats.net/open/suricata-VERSION/emerging.rules.tar.gzからファイルをダウンロードしてS3のextracted配下にルールを記載したファイルを格納します。
この時、SSMパラメータで現在保持しているEmerging threatのversionを管理しています。
そのため、ルールセットに更新が無い際は不要にダウンロードをしないようになっています。
また、S3にはイベント通知が設定されており、S3バケットに格納されたファイルに対してAWSSuricataRulesProcessorという関数が後続処理を実施します。
このAWSSuricataRulesProcessorによってダウンロードしたルールがAWS Network Firewallのルールグループとして登録されます。
下図のようにEmerging threatに公開されているルールが自動でAWS Network Firewallルールグループとして作成されました。
また、ダウンロード時点ではEmerging threatのルールはIDSルール(alertで記載)になっているため、SSMパラメータのConvertRuleGroupIDStoIPSにフラグ立てすることで次回の更新時にIPSルールに変更することができるようになっています。

注意点

やってみた結果を記載しましたが、このハンズオンの内容はAWS Network Firewallのクォータに引っかかります。
AWS Network Firewallのルールグループの上限はデフォルトで50個であるのに対して、Emerging Threatsには50以上のルールが存在するからです。
今回はあくまで検証であったため、AWSSuricataRulesDownloaderextract_ruleset関数を修正して所望のルールのみがAWS Network Firewallルールグループに取り込まれるようにしましたが、本格的に使用する際はService Quotas等から上限を引き上げてしまうのが楽だと思います。

まとめ

AWS上でネットワークファイアウォールを構成する方法はAWS Network Firewall以外にも複数存在しますが、今回のハンズオンのようにプログラムを使って柔軟に機能を作成、利用できるのはAWSマネージドサービスの大きなメリットに思えます。
AWSもAWS Network Firewallももっと使いこなせるようになって、より楽にセキュリティを高めていきたいですね!