メール/Web/SQL/DNS系の攻撃と防御/出口対策
UTM機能あれこれ
- メールの検疫をしてみる(今時平文のメールなんて使うかなあ)
- 逆方向の通信を防御する
- DNSサーバが乗っ取られたら?
- DNSへの再送攻撃(NTPあり/無し両方のパターン)検証
- ColaSoftPacketPlayerによる再送攻撃を実施する
- セキュアDNSの有効化を試してみる
- 出口対策(情報漏洩防止)
- マジックナンバーによる情報漏洩防止機能
- 囮HTTPサーバへのWeb/SQL系の攻撃を防いでみる。
- FortigateのWAF機能を有効化する
メールの検疫をしてみる(今時平文のメールなんて使うかなあ)
ひとまず、ブラックリスト式のメール検疫
今回は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サービス等に転送しても良いかも。。。)
ーつづく-