Snortを使用してスクリプトkiddis攻撃をブロックする

この記事は、Snortシステムの完全な説明を装うわけではありませんが、小さな遊び心のあるペンからサーバーを保護するためのターンキーソリューションのみをユーザーに提供します。

私は個人的にすべてをOpenBSDに置きましたが、本質はシステムの変更から変わりません。



叙情的な余談



snorthttp://snort.org )は、libpcapベースのipv4ネットワーク用の攻撃検出システム(NIDS)です。 それ自体は通常のtcpdumpです。 ただし、有害なトラフィックをブロックし、セキュリティイベント(アラート)を作成するルールを作成できます。

追加されたプレリュード( http://prelude-ids.org )に基づいたコレクターを介して互いに接続された多数のSnortセンサーがあります。 すべてのルールは手書きで書かれています。

結果(4か月の労働統計による):

誤検知-約2%(平均トラフィック-120 Mbps)。

1日あたりのロック-約15。

失敗した攻撃の数は0です(セキュリティシステムの導入後、単一のサーバーがハッキングされたわけではありません。ホスティングとVDSは保護されています)。

さらに、自動バスモジュールがRIPEデータベースに追加され、ルートtsiskaでトラフィックがブロックされました。



だから私たちは:

snort-inlineがインストールされた特定のサーバー(* BSDの場合、ポートから、Linuxの場合は--enable-inlineオプションが指定されたソースからインストールされます)。

まず、snort自体を構成します(OSのパスは異なる場合があります-デフォルトの構成を参照してください)。 /etc/snort/snort.conf



# - SourceFire .

var HOME_NET 1.2.3.4 # ip-

var EXTERNAL_NET any

var HTTP_SERVERS $HOME_NET

portvar HTTP_PORTS [80,8080]

#

var RULE_PATH /etc/snort/rules

var PREPROC_RULE_PATH /etc/snort/preproc_rules

# -

config disable_decode_alerts

config disable_tcpopt_experimental_alerts

config disable_tcpopt_obsolete_alerts

config disable_tcpopt_ttcp_alerts

config disable_tcpopt_alerts

config disable_ipopt_alerts

#

dynamicpreprocessor directory /usr/local/lib/snort_dynamicpreprocessor/

dynamicengine /usr/local/lib/snort_dynamicengine/libsf_engine.so

# - tcp

preprocessor frag3_global: max_frags 65536

preprocessor frag3_engine: policy linux

# tcp udp - httpinspect

preprocessor stream5_global: max_tcp 8192, track_tcp yes, track_udp no

preprocessor stream5_tcp: policy linux

#preprocessor stream5_udp: ignore_any_rules

# http_inspect

# unicode.map 1251

preprocessor http_inspect: global iis_unicode_map unicode.map 1251

preprocessor http_inspect_server: server default profile apache no_alerts ports { 80 8080 8180 } oversize_dir_length 500

output alert_syslog: LOG_ALERT

#

include classification.config

include reference.config

#

include $RULE_PATH/local.rules









そして$ RULE_PATH / local.rulesを作成します:

# UNION SQL injection

drop tcp any any -> $HOME_NET $HTTP_PORTS (msg:"UNION SQL Injection";uricontent:"union";nocase;uricontent:"select";nocase;sid:1;gid:666;)

# blind SQL injection

drop tcp any any -> $HOME_NET $HTTP_PORTS (msg:"Blind SQL Injection";uricontent:"ascii";nocase;uricontent:"substr";nocase;uricontent:"select";nocase;sid:2;gid:666;)

# XSS/CSS

drop tcp any any -> $HOME_NET $HTTP_PORTS (msg:"XSS/CSS attack";uricontent:"";nocase;sid:4;gid:666;)

# XSS/CSS

drop tcp any any -> $HOME_NET $HTTP_PORTS (msg:"XSS/CSS attack";pcre:"/GET \/.*\?.*=(javascript:|onclick=|onmouseover=|onmouseout=|onload=).*\n/i";sid:5;gid:666;)

# ../../../etc/passwd

drop tcp any any -> $HOME_NET $HTTP_PORTS (msg:"PHP include attack";uricontent:"=../..";sid:6;gid:666;)







Snortを実行する

snort -i em0 -c /etc/snort/snort.conf -D

確認して喜ぶ。

ご注意 ここでは、POSTリクエストのセキュリティ問題については説明しませんが、不可能なことは何もありません。



PSこの記事は、Habréには存在しない特定のクレオンの要求に基づいて公開されています。



All Articles