IPSとしてのスリカタ

まえがき



Habréへの侵入の防止または防止に関する記事が非常に人気がないことを見るのは悲しいです。

若い戦闘機コース:ルーターで保護されています。 継続:IPS - 5つのプラス。

サービスIPSとしてのSNORT - 25以上

OSSEC:ビッグブラザーがあなたを見ています -13プラス。

ただし、浸透の結果の分析に関する記事は非常に人気があります。 情報セキュリティのもう1つの普及を試みます。

Suricataの説明





侵入防止システム-侵入またはセキュリティ侵害を検出し、それらを自動的に保護するソフトウェアまたはハードウェアネットワークおよびコンピュータセキュリティシステム。

IPSシステムは、侵入追跡システム(IDS)の拡張とみなすことができます。攻撃を追跡するタスクは同じままであるためです。 ただし、IPSはアクティビティをリアルタイムで監視し、攻撃を防ぐためのアクションを迅速に実装する必要があるという点で異なります。 考えられる対策は、ネットワーク内のトラフィックフローのブロック、接続のリセット、オペレーターへの信号の発行です。 IPSは、パケットをデフラグし、TCPパケットを並べ替えて、SEQ番号とACK番号が変更されたパケットから保護することもできます。

ウィキ



Suricata-オープンソースのIPS / IDSシステム。 SnortのIPSバージョンに取り組んだ開発者によって設立されました。 SuricataとSnortの主な違いは、IDSモードでGPUを使用する機能、従来の機器で最大10Gbitまでのトラフィックを処理できる高性能の結果として、より高度なIPSシステム、マルチタスク、およびSnortルール形式の完全サポートなどです。 公式Webサイトですべてを読むのがいいです。 今日はIPSについて話しましょう。



Suricataは2つのIPSモードを使用します: NFQおよびAF_PACKET



NFQ IPSモードは次のように機能します。

1)パッケージがiptablesに入る

2)iptablesルールは、それをNFQUEUEキューに向けます。たとえば、 iptables -I INPUT -p tcp -j NFQUEUE

3)NFQUEUEキューから、パケットをユーザーレベルで処理できます。これはSuricataが行います

4)Suricataは設定されたルール(ルール)に従ってパケットを実行し、それらに応じてNF_ACCEPTNF_DROP 、および最も興味深い-NF_REPEATの 3つの判定のいずれかを行うことができます。

5)NF_REPEATに分類されるパケットは、システムでマークされ、 現在の iptablesテーブルの先頭に送り返されます。これにより、iptablesルールを使用してパケットの運命に影響を及ぼす可能性が大きくなります。



バージョン1.4以降、SuricataはゼロコピーAF_PACKETシステムモードを使用してIPSとして動作できますが、いくつかの制限があります。 システムは、2つのネットワークインターフェイスを備えたゲートウェイとして機能する必要があります。 パケットがDROPルールに該当する場合、2番目のインターフェイスに転送されません。 ゼロコピーの利点は、パケットを処理する速度です。これは、怠慢の場合にRoskomnadzorから罰金のリスクを負うプロバイダーに間違いなくアピールします。



UbuntuへのSuricataのインストールについては、公式Wikiで説明されています



WEBサーバー上のNFQの例を考えてみましょう



初期iptablesルールを構成します。

#    ,    80-   <b></b>    0x1/0x1     iptables -t mangle -I PREROUTING -p tcp -m tcp --dport 80 -m mark ! --mark 0x1/0x1 -j NFQUEUE --queue-num 0
      
      





マングルを使用します このテーブルは、パッケージパスの最初のテーブルの1つです。

オプション--queue-bypass2.6.38カーネルに登場し、リスニングアプリケーションNFQUEUEがないときにキュー内のすべてのパケットをスキップできます。 つまり Suricataが実行されていない場合、ルールに該当するすべてのパッケージは、何も起こらなかったかのように進みます。

オプション--queue-numは、キュー番号を設定します。

-mマーク! --mark 0x1 / 0x1はSuricataによって既に処理されたすべてのパケットを無視します



SuricataをIPSモードで構成します(パッケージに付属の標準構成と比較して):

 nfq: mode: repeat #      repeat-mark: 1 repeat-mask: 1 ... ... ... default-rule-path: /etc/suricata rule-files: - test.rules #    
      
      







パッケージ内のTESTテキストに応答するSuricataルール(/etc/suricata/test.rules):

 pass tcp any any -> any any (content: "TEST"; msg: "TEST was marked!"; nfq_set_mark:0x2/0xffffffff; sid:2455;)
      
      





sidは一意でなければなりません



Suricataの設定とルールとともに、「不良」パケットのマーキングとマスクは次のようになります: 0x02 / 0xfe(0xff XOR 0x01 = 0xfe)



Suricataを起動します。

 suricata -q 0 -c /etc/suricata/suricata.yaml
      
      







iptablesルールによるさらなるパケット解析:

 #  ,     iptables -t mangle -A PREROUTING -p tcp -m tcp --dport 80 -m mark --mark 0x2/0xfe -j LOG --log-prefix "TEST packet detected"
      
      





リモートクライアントでの実行後:

 curl http://221.141.200.189/TEST
      
      





フォームのエントリは/ var / log / syslogに表示されます。

 Sep 9 14:23:06 server kernel: [ 2897.581561] TEST packet detectedIN=eth0 OUT= MAC=c5:d5:08:8f:2d:be:ce:df:3e:af:8c:06:08:00 SRC=97.17.34.191 DST=221.141.200.189 LEN=133 TOS=0x00 PREC=0x00 TTL=64 ID=57685 DF PROTO=TCP SPT=33949 DPT=80 WINDOW=115 RES=0x00 ACK PSH URGP=0 MARK=0x3
      
      







Suricataはパッケージにのみラベルを付けることを忘れないでください。 ルール全体が接続全体で機能するには、マークを付ける必要があります。

 #       iptables -t mangle -A PREROUTING -m mark --mark 0x2/0xfe -j CONNMARK --save-mark #  ,     iptables -t mangle -A PREROUTING -m connmark --mark 0x2/0xfe -j LOG --log-prefix "TEST connection detected" #  ,        iptables -t mangle -A PREROUTING -m connmark --mark 0x2/0xfe -j CONNMARK --restore-mark
      
      







RAW DNAT / SNATのようなiptablesへのすばらしい追加に注意を払うと、Suricataを使用して、異なるタイプのトラフィックを異なる宛先アドレスにルーティングできます。 ここでも、接続の整合性が失われるなど、いくつかのニュアンスがありますが、これは、接続をその場で復元できるプロキシソフトウェアを使用して簡単に解決できます。



さらに、Suricataはその場でパッケージを変更できます。 例:

 pass tcp any any -> any any (content: "TEST"; replace:"SETS"; msg: "TEST was marked!"; nfq_set_mark:0x2/0xffffffff; sid:2455;)
      
      





パッケージ内のTESTテキストをSETSに置き換えますが、1つの条件で-置き換えデータは元のデータとまったく同じサイズでなければなりません。 この場合、コマンド:

 curl -v http://221.141.200.189/TEST
      
      





WEBサーバーログに保存します。

 97.17.34.191 - - [09/Sep/2013:14:51:04 +0400] "GET /SETS HTTP/1.1" 200 151 "-" "curl/7.26.0"
      
      







ゲートウェイでAF_PACKETを使用した例を考えてみましょう



ここではすべてが簡単です。 suricata.yaml設定は次のようになります。

 af-packet: - interface: eth0 threads: 1 defrag: yes cluster-type: cluster_flow cluster-id: 98 copy-mode: ips copy-iface: eth1 buffer-size: 64535 use-mmap: yes - interface: eth1 threads: 1 cluster-id: 97 defrag: yes cluster-type: cluster_flow copy-mode: ips copy-iface: eth0 buffer-size: 64535 use-mmap: yes
      
      





3.6より古いカーネルの場合、プロセッサスレッドの数は1つ以下である必要があります。そうしないと、スレッドの数が増えると無限ループが発生します。

両方のネットワークインターフェイスのMTUは同一である必要があります。



Suricataを起動します。

 suricata -c /etc/suricata/suricata.yaml --af-packet
      
      







おわりに



Suricataはパケットを処理するための柔軟なツールであり、パケットの内容に応じてルートを変更し、攻撃を検出し、不正なパケットがシステムに侵入するのを防ぎます(たとえば、DROPまたはWEBサーバーに到達するまでパケットを置換します)。 おそらく今、 政府のプロバイダーはDPIとしてSuricataを使用しています。



記事を書くために、Suricataの開発者の1人のブログと公式Wikiの情報を使用しました。



All Articles