Firepower Management Center での自動チューニングは本当に正しく動くのか 

# はじめに
この記事は、Cisco Systems Japan Advent Calendar 2019 の 15日目として投稿しています。
シスコシステムズ合同会社としては 2017年、2018年にも Advent Calendar を公開しており、メーカーの中の人からの発信として約に立つ情報から、ただ単に面白いだけの記事までいろいろと掲載しております。
私もこの「お祭り」に参加し、2018年には、VPN ロードバランスという 20年以上前からある技術の検証記事を書いております。

2017年版: https://qiita.com/advent-calendar/2017/cisco
2018年版: https://qiita.com/advent-calendar/2018/cisco
2019年版: https://qiita.com/advent-calendar/2019/cisco

# IPS 運用の悩み
境界セキュリティ対策の1つに IPS というソリューションがあります。
Intrusion Prevention System の略で、シグニチャやルールといったパターンと照らし合わせ、攻撃や情報漏えい、マルウェア侵入や C&C サーバへの通信を検知し、ブロックすることができます。
Firewall に比べて、複数のパケットの組み合わせ等、深いレベルでの精査ができるため、公開サーバの堅牢化や仮想パッチ適用、あるいは内部ネットワークからの不正通信の阻止など、セキュリティレベルの差があるネットワークの境界地点 (インターネット接続境界等) で非常によく使われます。
ただし、IPS は運用が非常に大変なイメージがあります。というのも、何万とシグニチャ (あるいはルール) があり、このチューニングを行うのがとても大変であり、ありがちな間違った運用として、とりあえずずっとデフォルトのままにしてしまう、ということが、非常によくあります。結果、必要なルールは無効化されたままだったり、不要なルールを有効にしているままにしてしまい、正しい運用ができていない例をよく見かけます。
その他にも IPS が出力するログが多すぎて、本当に危険な通信をブロックできているのかがわからない、あるいは実は止めてはいけない通信を止めてしまっている、という問題もよく見かけます。

# Firepower Management Center の自動チューニング機能
シスコの IPS 製品である Firepower (正しく言えば、Firepower Threat Defense: FTD というソフトウェアで、次世代 Firewall もマルウェア対策も可能) で、Firepower Management Center (以下、FMC) という管理サーバを使うと、「自動チューニング」という便利な機能が使えます。正しくは Firepower Recommendation という機能ですが、IPS を運用管理する上でとても便利です。こんな仕組みで動作します。

- IPS (兼 Firewall) or IDS (Intrusion Detection System: パケットのミラーを受け取ってアラートを出すだけのモード) である FTD は、自身を通った or 自身が受け取った通信の情報をすべて FMC に送る
- FMC は様々な OS やアプリケーションのバージョンを識別可能なデータベースを保有している
- FMC は FTD から送られた情報を受け取り、通信パターンのフィンガープリンティングにより、決められた IP アドレスの範囲でどのような OS やアプリケーションで動いているかを学習していく
- FMC で自動チューニングを実施する際に、FMC が学習した内容に合わせて必要な IPS のルールを有効化し、不要な IPS のルールを無効化していく

これにより、IPS 運用時の大きな悩みである「ルールのチューニングどうしよう」を解決できます。

# 実際にやってみよう 
## 初期設定 
FMC の仮想版 (FMCv) と FTD の仮想版 (FTDv) をそれぞれ用意し、FTDv の inside 側にいくつかのホストを置いて、そこでいくつかのサービスを立ち上げてから、実際にいろいろと通信を発生させ、FMC にネットワークを学習させてみます。FMC と FTD のバージョンは 6.4.0.4 を使います。IPS のベースのルールセットは Balanced を使います。余談ですが、新規で Firepower システムを導入する場合、一般論で言えば、現時点ではソフトウェアバージョンは 6.4.0.4 もしくは 6.4.0.x の最新版がおすすめです。今後のサポート期間や実績等でシスコが推奨しているバージョンです。
FMC でのネットワーク学習はまだ無効にしておきます。当然、学習したホストはありません。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/309674/576ea0d2-81ed-9ad7-2dd0-fe8624bcf1f9.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/309674/dd2a871b-ff2f-722d-3792-60139815cd42.png)

当然、この状態で自動チューニングを動作させても FMC は何も推奨してくれず、エラーになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/309674/92a42b92-5517-846f-466c-ca58c25c1645.png)

## ネットワーク学習の有効化
FMC で 192.168.20.0/24 の範囲を学習するように設定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/309674/717fc84c-ba2e-5d0e-6110-bf497d6a6a4f.png)

ネットワーク学習ポリシー作成時に、Advanced 設定で General Settings の Capture Banners を有効にしておくと、学習の精度が上がります。検証時にはおすすめの設定です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/309674/b6a1091b-2d30-46ba-9e67-6a6127ee477b.png)

設定後、デプロイを忘れないでください。

## ネットワーク学習内容の確認
実際にいろいろと通信を発生させた後に、FMC でどのようにネットワークを学習したか、確認してみます。
実際には、192.168.20.105 に Windows 10 の VM を、192.168.20.202 に　Windows 7 の VM を置いており、特に Windows 7 では、様々なサービスを起動させております。
結果、ネットワークの学習内容は以下のようになりました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/309674/c3ba3a72-80a0-8f1d-b09d-2bb522fd3fea.png)

## IPS の自動チューニングを実施
この状態で、IPS の自動チューニングを行ってみます。すると、以下のように多くのルールが有効になりました。すべてを確認したわけではないですが、やはり Windows に関するルールやこの Windows 7 & Windows 10 で動作しているブラウザの脆弱性に関するルール等が有効になっているようです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/309674/5576acb4-2d88-ab0c-5f9f-deb91c14f1d7.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/309674/2f7f7a06-e5da-0b43-3dfe-330917adb013.png)

また、その Windows 7 では FTP サーバ等を動作させていますが、その FTP に関するルールも有効化されているようです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/309674/8dfa813b-e3d5-b952-89c9-2ee925b06abb.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/309674/2a8a76ba-d08e-19b9-6dca-5632036dd3e7.png)


## 学習したネットワークからホストを１つ削減
Windows 7 (192.168.20.202) の運用を止めた、という想定のもと、このホストをシャットダウンし、さらに FMC のネットワークマップから削除します。実環境ではデフォルトで一週間 inactive なホストはネットワークマップから自動的に削除されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/309674/ca53612a-bbf1-73b0-13a7-1997f955c7ae.png)

## IPS の自動チューニングを再度実施
再び IPS の自動チューニングを実施してみます。先程に比べて、様々なサービスが起動している Windows 7 のホストがいなくなった分、IPS のルールも無効化されていることがわかります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/309674/56cc9d56-8fdc-6a5d-1fc9-59bc126c2858.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/309674/bcd8b7ab-acba-b512-475d-1a63a135329a.png)

やはりすべてを確認したわけではないですが、先程まで動作していた Windows 7 で起動していたサービスに関するルールが無効化されているようです。例として、FTP に関するルールを確認してみましたが、全く有効化されていないことがわかります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/309674/12a63ebc-f115-a582-d92c-aaf9a9af7af2.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/309674/0bc008d2-52fb-3082-4984-765a891cf113.png)


# まとめ
最小環境での検証ですが、FMC における自動チューニングは、学習したホストの増減で正しく動作することがわかりました。
もちろん、ネットワーク学習機能の精度に大きく依存するところもあり、思った通りに学習してくれない場合には手動でのホスト編集を行ったり、また、自動チューニングでも特定のルールが思った通りに有効にならない場合には手動で当該ルールを有効化する必要があるなど、完全・完璧を期すならば、ある程度の手動でのチューニングを行うか、あるいは MSSP のサービスを受ける等の対応が必要です。
しかしながら、FMC を使うことで、ある程度の自動チューニングは正しく動作するため、ネットワーク・セキュリティ運用者のリソースを大きく使うことなく、IPS を正しく運用できることがわかりました。
今後の IPS 導入検討の際に、ほんの少しでも参考になれば幸いです。