spp_fnord.cの導入 |
ではSnortでの対策だが、ADMmutateに対抗するためのSnortのpreprocessorとして、「spp_fnord.c」というものが公開されている。spp_fnord.cの作者のコメントを見る限りでは、Snortのバージョン1.9には収録されるようだ。ここでは、spp_fnord.cを導入したSnortでも同様のアタックを行い、検出できるのかテストしてみることしよう。
spp_fnord.cを導入するためには、Snortを再インストールする必要がある。また、Snortを展開したディレクトリにて./configure後に、Makefileとplugbase.cの2つを編集しなければならない。
# wget http://cansecwest.com/spp_fnord.c # vi spp_fnord.c //<html><body><pre> ←削除 /* spp_fnord:snort preprocessor - Multi-architecture mutated NOP sled detector - copyright 2002 Dragos Ruiu (dr@kyx.net) 〜省略〜 /* end of spp_fnord.c ←削除 //</pre></body></html> ←削除 (※ダウンロードしたspp_fnord.cのソースにはヘッダ部分・フッタ部分にHTMLの記述があるため、削除する) # wget http://www.snort.org/dl/snort-1.8.7.tar.gz # tar xvzf snort-1.8.7.tar.gz # cp spp_fnord.c ./snort-1.8.7 # cd snort-1.8.7 # ./configure |
Makefileの編集
# viMakefile (「snort_SOURCES」に「spp_fnord.c」、「snort_OBJECTS」にspp_fnord.oを記述して保存) 〜省略〜 snort_SOURCES = snort.c snort.h log.c log.h decode.c decode.h \ mstring.h mstring.c rules.c rules.h plugbase.c plugbase.h \ sp_pattern_match.c sp_pattern_match.h sp_tcp_flag_check.c \ sp_tcp_flag_check.h sp_icmp_type_check.c sp_icmp_type_check.h \ sp_icmp_code_check.c sp_icmp_code_check.h sp_ttl_check.c\ sp_ttl_check.h sp_ip_id_check.c sp_ip_id_check.h sp_tcp_ack_check.c \ 〜省略〜 spo_unified.c spo_unified.h generators.h spp_stream4.h spp_stream4.c\ ubi_SplayTree.h sys_include.h spp_frag2.c spp_frag2.h spp_arpspoof.c\ spp_arpspoof.h spo_idmef.h spo_idmef.c spo_SnmpTrap.c spo_SnmpTrap.h\ event.h spo_log_null.c spo_log_null.h cdefs.h spp_fnord.c ←記述 〜省略〜 snort_OBJECTS = snort.o log.o decode.o mstring.o rules.o plugbase.o \ sp_pattern_match.o sp_tcp_flag_check.o sp_icmp_type_check.o \ sp_icmp_code_check.o sp_ttl_check.o sp_ip_id_check.o sp_tcp_ack_check.o \ sp_tcp_seq_check.o sp_dsize_check.o spp_http_decode.o spp_portscan.o \ 〜省略〜 spp_rpc_decode.o spp_bo.o spp_telnet_negotiation.o spo_csv.o \ sp_ip_same_check.o sp_priority.o sp_ip_proto.o ubi_BinTree.o \ ubi_SplayTree.o spo_unified.o spp_stream4.o spp_frag2.o spp_arpspoof.o \ spo_idmef.o spo_SnmpTrap.o spo_log_null.o spp_fnord.o ←記述 〜省略〜 |
plugbase.cの編集
同様に、「plugbase.c」の「InitPreprocessors()」部分のルーチンに下記のように記述して保存する。
# vi plugbase.c 〜省略〜 void InitPreprocessors() { if(!pv.quiet_flag) { printf("Initializing Preprocessors!\n"); } SetupHttpDecode(); SetupPortscan(); SetupPortscanIgnoreHosts(); SetupDefrag(); SetupTcpStream2(); SetupSpade(); SetupUnidecode(); SetupRpcDecode(); SetupBo(); SetupTelNeg(); SetupStream4(); SetupFrag2(); SetupARPspoof(); SetupFnord(); ←記述 } 〜省略〜 |
インストール
Snortが起動している場合はmake後にSnortを終了させてから、make installを行う。
# make # killall snort # make install |
snort.confの編集
/etc/snort以下にあるsnort.confのpreprocessor部分に、導入したfnordの記述を加える。「ポート番号:長さ;」のように、セミコロン区切りで入力すればよい。長さの最大値は2048で、0にするとそのポートを無視するという意味になる。ポート80番のデフォルト値は768だが、そのほかは384となっている。
例) preprocessor fnord: 80:768; 110:768; |
以上で導入が完了する。あとはSnortを再起動すればよい。
preprocessor fnord導入後のアタック |
では、fnordを導入後に、先ほどと同様にADMmutateを利用したアタックを行った結果を見てみよう。
下記のログから、アタックは「spp_fnord: Possible Mutated IA32 NOP sled detected」として検出されていることがわかる。今回はさなざなな攻撃でテストしたわけではないが、導入しておくのも1つの手だろう。
Snortのログ
○アラートログ 08/17-15:32:49.301713 [**] [114:1:1]
spp_fnord: Possible Mutated IA32 NOP sled detected. [**] {TCP} 192.168.1.10:1050 -> 192.168.1.4:2600 |
○ログ
[**] spp_fnord:
Possible Mutated IA32 NOP sled detected. [**] 08/17-15:32:49.301713 192.168.1.10:1050 -> 192.168.1.4:2600 TCP TTL:64 TOS:0x0 ID:2613 IpLen:20 DgmLen:1500 DF ***AP*** Seq: 0x1F0393CDAck: 0x4F020F8EWin: 0x7D78TcpLen: 32 TCP Options (3) => NOP NOP TS: 237861 2308427 49 27 60 9B 98 37 98 4C 5A 53 3F 49 47 44 93 FC I'`..7.LZS?IGD.. 56 4E 5E 4B 92 3F 48 37 F5 60 53 42 96 93 4B 95VN^K.?H7.`SB..K. 42 97 95 93 54 50 98 54 57 42 9F 46 4D 27 49 3FB...TP.TWB.FM'I? 54 9C 5A F8 99 45 43 5F F8 41 49 3F FC 54 F9 43T.Z..EC_.AI?.T.C 97 97 59 5D 45 5F 43 92 2F 54 4B 4B 52 2F 4D 44..Y]E_C./TKKR/MD 54 5B F8 45 9E FC 49 4D FC 5A 2F 27 93 4B F8 96T[.E..IM.Z/'.K.. 48 56 42 4F 55 5A 9C 99 5B 51 5B 4E 52 5F 51 46HVBOUZ..[Q[NR_QF 91 5A 5B 53 41 5A 52 9F 57 5F F9 59 F8 53 2F FC.Z[SAZR.W_.Y.S/. 43 92 93 FC 44 F9 4C 55 50 52 97 2F 27 37 9B FCC...D.LUPR./'7.. 4B 48 3F 46 F5 99 95 41 92 97 97 97 99 45 F8 99KH?F...A.....E.. 〜以下略〜 |
4/5 |