kousukeのブログ

株式会社グローバルアイティー 代表取締役

メール/Web/SQL/DNS系の攻撃と防御/出口対策

UTM機能あれこれ

メールの検疫をしてみる(今時平文のメールなんて使うかなあ)

ひとまず、ブラックリスト式のメール検疫

今回はFG60Cで検証。以前試したFG30ではもっと機能が豊富だったような。
 →そのFG30ではトランスペアレントモードが使えないので今回の検証からは除外。
■構成

■要件
 ・メールクライアントが自分自身にメールを送信する。
  メールサーバを介して、メールが戻って来る。
 ・FG60では上記メールアドレスを使用するメールにマーキングを施す。

 

■FGの設定
ひとまず赤く囲んだところをチェックして、その後オプションボタンを全て有効化

次も、赤囲みを選択後、下記のオプションボタンを選択し、青囲み部分を記入/選択する。

ポリシーに適用する

※メールサーバとクライアントの設定方法は割愛。普通にBJDと雷鳥で構築した。

■結果:マーキング成功(赤囲み部分)

 

ホワイトリスト式でやってみる。

 →今回使用したFG60Cでは出来ないっぽい。後日他機種にて試す予定。

■アクションを「廃棄」に変更する

 →今回使用したFG60Cでは出来ないっぽい。後日他機種にて試す予定。

ブラックリストの名前を変える

■結果:マーキングされない。(成功)

 

■雑感
 メール内の文言やDNS解決の可否での検疫をすることが出来ないっぽい。
 以前、古いFG30ではできたはずなのだけど
 そのFG30はトランスペアレントモード使えないので、今回やりたいことに
 合致しない。どうしようかな。。。

※中古のFortiMailは再契約しないとGUIのパスワードが判明しないらしい。どうした
 ものか・・・

 



逆方向の通信を防御する

逆方向のDNS
これはレガシFWでも出来てくれないと困るのだけど、下記の構成で
PC①までパケットが到達するかを確認する。

※送信ツールはipsendwin

具体的には

当該パケットはPC①に到達せず!

反証として、下記の構成も試してみる。

PC①側のキャプチャ結果 → 当然、遮断されない。


逆方向のSSH

PC④から「送信元ポート22のTCP」を送信する。
結果:当然通る。


 ※synフラグのみを立てた時のみ、パケットが通る。(フラグについて他のパターンは未検証)

つぎに、下記を検証する。

こんなポリシー

結果
もちろん、こうあってほしいが遮断出来てる。

tcpのフラグを工夫すれば逆方向のパケットも通るのでは??
→後日検証します。

DNSサーバが乗っ取られたら?

■FakeDNSでFortigateを騙す

FakeDNS(フリーのDNSサーバ。何を聞かれても1つのIPしか回答しない。Aレコードのみ回答する。)でFortigateを騙してみる。

・まず、FortigateがデフォルトでDNSリクエストを行う宛先IPをPCに設定し、
 FakeDNSを起動する。

それではPingしてみる。


バッチリ騙されている様だ。

 

DNSへの再送攻撃(NTPあり/無し両方のパターン)検証

構成

ツール説明
 ・NTPサーバ Csicoルータを使用する
 ・正当なDNSサーバ FakeDNSを使用する
 ・DNS再送攻撃 ColaSoft PackectBuilder

 

ColaSoftPacketPlayerによる再送攻撃を実施する

DNSのReplyをキャプチャして、(例えばSorcePortNo.でFilterして)
パケットを1個だけ取り出して、下記のように再生する。

同時に、クライアント側でキャプチャしてみる。
→ICMP PortUnreachalbeだけが出る。SorcePortが不一致だから当然だ。
つまりもうちょっと工夫しないとダメ。
Pythonとかでカンタンに書けると良いのだけど。。。

 

セキュアDNSの有効化を試してみる


と、思ったのだけど、、、デフォルトのFortiDNSのIP忘れちゃった。。。
これも後日。。。あーそういえば1.1.1.1にDNSoverTLS張ったり出来ないのかなあ。
ーつづく-

 

出口対策(情報漏洩防止)

今のところ計画のみ示す。※これからしばらく出張なので検証も投稿もできない。

・やりたい事

 ・特定のキーワードを埋め込んだファイルは送信できないようにする。

 ・シグネチャマジックナンバー)をキーにしてブラック/ホワイトリスト
  実装する。
 ・指定したファイルを送信できないようにする。

 

・使用できるプロトコルは下記の通り

故にNW構成は

ではFortiの設定内容。

情報漏洩を防ぐのはDLPという機能。


一番下行のオブジェクトから手を付ける。
この階層では「Edit」。(デフォルトのものに追記する)


ここから「更に子」オブジェクトの作成に入るので、「CreateNew」。

Shagai-hi
って書いたファイルを送信できないようにできたら良いな。


適用されたか確認する。

されてる模様


ではいよいよ各部品の組み立てに。

 

※「アクション」はユーザ毎に検疫とかIPアドレスで検疫したりもできるみたい。


出来上がったセキュリティポリシー


上位(既存)ポリシーで有効化してみる。


ポチっとな(他のセキュリティポリシーは無効化する)

確認


おまけ
 ファイルを利用したオリジナルのフィンガープリントも作ってみた。
 ※Criticalで作成

セキュリティポリシーとして適用された様子

 

マジックナンバーによる情報漏洩防止機能

 

 あとで

 

実機検証は出張帰ってから。

囮HTTPサーバへのWeb/SQL系の攻撃を防いでみる。

→CTFとは無関係の書籍を参考にしています。

では本題。
まず、下記の画面はフツーにSQLを呼び出している様子。(ブラウザ画面の切り貼り)


つぎに、(参考書籍に載っていたphpのコード見たい人はは上記の本買ってください。)

URLについては下記みたいな感じで。


2行目のURLがSQLインジェクションになるのだそう。(コピペし辛くしてあります)

 

みたいな感じでSQLインジェクションを実行すると

とブラウザに表示される。これがSQLインジェクションの成功例なのだそうな。
確かにパスワード見えてる。

いよいよ本番、Fortigateにて、

とし、

としてみる。
再度SQLインジェクションを実行すると、

おっと大失敗。デフォルトシグネチャでは防げないのか?

単なる設定ミスだと思うけど、Fortigateのライセンス切れの可能性もあり、ヤフオク
新しいFortigate買って来てから検証再開とします。

なお、ローカルプロキシ(OwaspZap)でみたリクエストは

レスポンスは

との事。もっと分析できる方法を探ってみます。


おまけ:
SQLインジェクションWireSharkで撮った画像

 

■新しく買ったFortigateを試す前に、ActionをDefaultからBlockに変更してリトライ

■結果:ダメだブロックしない。。

FortigateのWAF機能を有効化する

まず、

でWAFを有効化。ところが、

で、L4のポリシーと紐づけるのでは無さそう。

どうやら↓で適用する模様。

適用した様子。※デフォルトのAll-DenyをMoveしないと警告が出る。


これから2泊の出張。この間じゅうハニーポットを稼働させてみます。
 →WAF以外は実績あり。稼働させるサーバは下記2個。
   ・HTTPサーバ:アクセスすると同時に、100GBのファイルダウンロードが始まるように設定。
   ・DNSサーバ:FakeDNSで何を聞かれても「8.8.8.8」しか返さないように設定。(侵入試験してくれるWebサービス等に転送しても良いかも
。。。)

 

ーつづく-