FortiGateの設計/設定ガイド

FortiGateの設計・設定方法を詳しく書いたサイトです。 FortiGateの基本機能であるFW(ファイアウォール)、IPsec、SSL‐VPN(リモートアクセス)だけでなく、次世代FWとしての機能、セキュリティ機能(アンチウイルス、Webフィルタリング、SPAM対策)、さらにはHA,可視化、レポート設定までも記載します。初期化方法やバージョンアップなどの管理面も書いています。標的型攻撃を守るためのゲートウェイとしても導入されることが多いので、セキュリティ機能に関しては充実した記載を心がけます。

IPS(侵入防止)

1.IPS機能

❶IPSとは
IPS(Intrusion Prevention System)は、「侵入(Intrusion)」を「防御(Prevention)」するシステム(System)です。
主目的は、外部から公開Webサーバなどへの攻撃を防ぐことです。

❷外部からの攻撃と内部からの攻撃
上記で述べましたように、IPSは、基本は外からの攻撃パケットを防御します。
も防ぐために、内側にもIPS機能を有効にする場合があります。
たとえば、マルウェアに感染したPCが、外部のサーバへコマンドを送信して通信をします。そのコマンドや通信を検知してブロックします。

❸FortiGateのIPSでできること
・危険度やカテゴリ単位に応じて、IPSの設定ができます。
・カスタムシグネチャとして、脅威に対して自らがシグネチャを作成して適用することができます。
・上記のIPSをポリシーとして、セグメント単位などのグループ単位で設定を適用できます。
・また、外部からの通信だけでなく、内部からの通信にIPS機能を持たせることができます。

❹ライセンス
IPSを利用するには、別途ライセンスが必要です。

❻その他(詳細情報)
・IPSのエンジンは独自★
・IPSのシグネチャ情報は、定期的に更新されます(更新周期はこちら

2.設定の確認

(1)表示機能設定

エントリーモデルの場合、IPS(侵入防止)機能が表示されません。
そこで、システム > 表示機能設定 > 侵入防止 をONにします。

(2)ライセンスとライセンスの更新

❶ライセンスの確認
システム > ForiGuard でライセンス情報を確認できます。

❷ライセンスの更新
・画面の右の方に、「ライセンスと定義を今すぐ更新」ボタンがあり、そこを押して
すぐに最新化ができます。
・デフォルトでは自動更新になっていて、比較的短時間で更新されるはずです。

3.IPSのアクション

選択できるアクションは、下記6つです。

アクション 動作
許可 許可
モニタ(Monitor) 許可するが、ログを取得
ブロック 通信をブロック
Reset ※恐らくだがRSTパケットを送信元に送る。普通は使わないだろう
Default シグネチャのデフォルト設定に従う
隔離(Quarantine) これを選択すると、隔離する時間を日時分で指定できる

4.事前に定義されたプロファイル

OSのバージョンによっても変わるが、以下がある。

プロファイル アクション
all_default 全て(all)のIPSシグネチャに対し、アクションがシグネチャのdefault setting.
all_default_pass 全て(all)のIPSシグネチャに対し、PASS action.
default 重要度がcritical(SeverityがCritical(=5),High(=4),Middle(=3) に対してデフォルトのアクション
high_security Blocks all Critical/High/Medium and some Low severity vulnerabilities.
protect_client Protect against client-side vulnerabilities.
protect_email_server Protect against email server-side vulnerabilities.
protect_http_server Protect against HTTP server-side vulnerabilities.
sniffer-profile Monitor IPS attacks.

実際にどうなっているかは、中身を見るとわかる。
たとえば、defaultのプロファイルを確認すると、SeverityがCritical(=5),High(=4),Middle(=3) に対してデフォルトのアクションをしていることがわかる。

5.IPSの設定

(1)ポリシーへの適用

デフォルトでIPSセンサー(プロファイル)が出来上がっているので、それをポリシーに適用する。

(2)プロファイルの作成

自分でプロファイル(IPSセンサー)を作成することもできる。
セキュリティプロファイル > 侵入防止 > 新規作成

新規作成>新規IPSセンサー
名前を入れる
「+新規作成」を押して、たとえば、フィルタにて、重要度が5のものだけを検知するようにした。

6.カスタムシグネチャの作成方法

以下に例が記載されています。
https://archives2011-2018.fortinet.co.jp/security_blog/141016-poodle-faq.html

HTTPの通信ヘッダを見ると、ブラウザの情報などがわかると思います。それをみて、IEからは通信させないとか、Windows7のOSからは通信させないなどのカスタムシグネチャが作成できるはずです。

では、カスタムシグネチャを作ってみましょう。

(1)カスタムシグネチャの作成

「カスタムシグネチャ」のメニューから作成する。
たとえば、「seeeko.com」のサイトへの通信をブロックする。

以下、マニュアルではあるが、日本語化するといいだろう

https://help.fortinet.com/fos60hlp/60/Content/FortiOS/fortigate-security-profiles/IPS/Creating%20a%20custom%20signature%20to%20block%20access%20to%20example.com.htm?Highlight=F-SBID

ただし、「(」が全角だったり「--」が怪しいので、以下をどうぞ
※大文字小文字は区別する。

①カスタムシグネチャの作成
方法はいくつかあり、侵入防止のIPSシグネチャ表示から新規作成も可能。以下は、カスタムシグネチャのボタンから実施。
セキュリティプロファイル>カスタムシグネチャ
新規作成>IPSシグネチャ

シグネチャ名:Block.seeeko.com

F-SBID( --name "Block.seeeko.com"; --pattern "seeeko.com"; --service HTTP;-- no_case; --flow from_client; --context host; )

②defaultのシグネチャに適用する
セキュリティプロファイル>侵入防止>で、新規作成やら、既存のプロファイルを開くと、「IPSシグネチャ」が右に現れる。
または、セキュリティプロファイル>IPSシグネチャ>「新規作成」
default のポリシーに、「IPSシグネチャとフィルタ」>新規作成で、作成したカスタムシグネチャを追加する。このときシグネチャのタブに切り替える。また、作成したカスタムシグネチャを選択して、その上の「選択したものを追加」を押す。
さらに、アクションの欄で、「デフォルト」になっているところを右クリックで「ブロック」にする。

(2)特定のOSやブラウザの通信を止める。

たとえば、古いブラウザやOSはインターネットに接続すると攻撃を受けるリスクがある。
たとえば、以下のように、「Internet Explorer」に未修正の脆弱性、すでに悪用した攻撃を確認」という記事が出ることがある。未修整の脆弱性であるから、カスタムシグネチャというのが対策の一つになりえる。
https://internet.watch.impress.co.jp/docs/news/1230236.html

どうやって作るか。実際に通信させてみて、その通信の中にある固有の情報をつかもう。たとえば、パケットキャプチャでHTTPヘッダを見るとWindows10の場合、以下のように表示される。

Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko

※余談であるが、Mozillaとなっているが、実際に使ったブラウザはIEである。

ちなみに、Windows NTに続き表記は以下のようにOSのバージョンを表す。
Windows NT 10.0 →Windows10やWindows Server2016
Windows NT 6.3 →Windows8.1など
Windows NT 6.1 →Windows7など

情報は以下
https://ja.wikipedia.org/wiki/Windows_NT%E7%B3%BB

なので、サポートが終了したWindows7のPCからの通信を止める場合には、このキーワードを入れればよい。
→もちろん、誤検知もあるので、しばらくはモニターして、問題がなさそうであればBlockがいいだろう。

シグネチャ名:Block.Windows7

F-SBID( --name "Block.Windows7"; --pattern "Windows NT 6.1"; --service HTTP;-- no_case; --flow from_client; --context header; )

テストとしてはわかりにくいので、自分が使っているバージョンのChromeのみを拒否してみよう。IEは許可されるので違いを見てみる。
注意点はSSLのサイトはヘッダ部分が暗号化されているのでスルーされる点である。SSLフルインスペクションをすればいいのだが、テストとしてはわかりにくい。
暗号化されていないサイトでテストがいいだろう。
※最後の「--context」部分は、先ほどの「host」ではなく、「header」である。

F-SBID( --name "Chrome/79.0"; --service HTTP; --protocol tcp; --pattern "Chrome/79.0"; --no_case; --context header; )

※ --flow from_client は、サーバではなくクライアントに限定する場合に使う。

7.IPSの試験

簡単なテストとしては以下。

❶Web.Server.Password.Files.Access
URLに続けて、etc/passwdを入れてhttp://www.example.com/etc/passwd とすると「Web.Server.Password.Files.Access」というシグネチャでブロックされる
httpのサイトであれば、どこでもいいだろう。

❷HTTP.URI.SQL.Injection
SQLインジェクションで、入力フォームに以下を入れると「HTTP.URI.SQL.Injection」というシグネチャでブロックされる。
「1' or '1' = '1';-- 」※最後は空白スペース
MySQLなどでデータベースを構築する必要はなく、以下のようなシンプルなWebフォームでもいい。

<html>
<head>
<title>IPS Test Form</title>
</head>
<body>

<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    $inputText = $_POST["inputText"];
    echo "<p>入力フォームに入力された文字は以下です: $inputText</p>";
}
?>

<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>">
    <label for="inputText">入力フォーム:</label>
    <input type="text" id="inputText" name="inputText" required>
    <br>
    <input type="submit" value="Submit">
</form>

</body>
</html>

❸XSSなどのスクリプト
以下を参照すると、上記で作成したPHPのフォームに、以下を入れればブロックされると思ったけど、実際にはされなかった。
https://docs.fortinet.com/document/fortiweb/7.4.2/administration-guide/981691/syntax-based-sql-xss-injection-detection
要確認。

<script>alert(document.cookie)</script>