A Short Guide on SNORT (Network Intrusion Detection System) short article by : Antonius www.cr0security.com SNORT is a famous NIDS. SNORT has 3 modes, such as: Sniffer Mode Packet Logger Mode Network Intrusion Detection Mode SNORT use pcap library some /dev and /proc pcap use ? /sys/class/net/ (NIC's interfaces detail) /proc/net/dev (interfaces, packets,etc) /dev/input (kernel space input) Sniffer Mode Sniffer mode is basic usage of snort, to start : "snort -v" , if you wanna specify an interface : "snort -v -i interface" Example: libpcap#snort -v -i eth1 Running in packet dump mode --== Initializing Snort ==-- Initializing Output Plugins! Initializing Network Interface eth1 Decoding Ethernet on interface eth1 --== Initialization Complete ==-- ,,_ -*> Snort! <*- o" )~ Version 2.8.5.2 (Build 121) '''' By Martin Roesch & The Snort Team: http://www.snort.org/snort/snort-team Copyright (C) 1998-2009 Sourcefire, Inc., et al. Using PCRE version: 8.02 2010-03-19 Not Using PCAP_FRAMES 09/27-06:20:05.508892 192.168.1.3:60384 -> 192.168.1.1:53 UDP TTL:64 TOS:0x0 ID:13476 IpLen:20 DgmLen:60 DF Len: 32 =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ 09/27-06:20:05.557801 192.168.1.1:53 -> 192.168.1.3:60384 UDP TTL:255 TOS:0x0 ID:20613 IpLen:20 DgmLen:140 DF Len: 112 =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ 09/27-06:20:05.558217 192.168.1.3:34173 -> 74.125.235.18:80 TCP TTL:64 TOS:0x0 ID:20224 IpLen:20 DgmLen:60 DF ******S* Seq: 0x5AF57BB0 Ack: 0x0 Win: 0x16D0 TcpLen: 40 TCP Options (6) => MSS: 1460 NOP NOP TS: 9450672 0 NOP WS: 9 =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ 09/27-06:20:05.587413 74.125.235.18:80 -> 192.168.1.3:34173 TCP TTL:251 TOS:0x0 ID:14453 IpLen:20 DgmLen:60 DF ***A**S* Seq: 0xBEA22679 Ack: 0x5AF57BB1 Win: 0x1068 TcpLen: 40 TCP Options (6) => MSS: 1400 NOP WS: 0 NOP NOP TS: 83065381 9450672 =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ 09/27-06:20:05.587480 192.168.1.3:34173 -> 74.125.235.18:80 TCP TTL:64 TOS:0x0 ID:20225 IpLen:20 DgmLen:52 DF ***A**** Seq: 0x5AF57BB1 Ack: 0xBEA2267A Win: 0xC TcpLen: 32 TCP Options (3) => NOP NOP TS: 9450680 83065381 =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ 09/27-06:20:05.587584 192.168.1.3:34173 -> 74.125.235.18:80 TCP TTL:64 TOS:0x0 ID:20226 IpLen:20 DgmLen:584 DF ***AP*** Seq: 0x5AF57BB1 Ack: 0xBEA2267A Win: 0xC TcpLen: 32 TCP Options (3) => NOP NOP TS: 9450680 83065381 =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ 09/27-06:20:05.655396 74.125.235.18:80 -> 192.168.1.3:34173 TCP TTL:251 TOS:0x0 ID:15005 IpLen:20 DgmLen:52 DF ***A**** Seq: 0xBEA2267A Ack: 0x5AF57DC5 Win: 0x127C TcpLen: 32 TCP Options (3) => NOP NOP TS: 83065451 9450680 =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ 09/27-06:20:05.719556 74.125.235.18:80 -> 192.168.1.3:34173 TCP TTL:251 TOS:0x0 ID:15419 IpLen:20 DgmLen:528 DF ***AP*** Seq: 0xBEA2267A Ack: 0x5AF57DC5 Win: 0x127C TcpLen: 32 TCP Options (3) => NOP NOP TS: 83065506 9450680 =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ 09/27-06:20:05.719609 192.168.1.3:34173 -> 74.125.235.18:80 TCP TTL:64 TOS:0x0 ID:20227 IpLen:20 DgmLen:52 DF ***A**** Seq: 0x5AF57DC5 Ack: 0xBEA22856 Win: 0xE TcpLen: 32 TCP Options (3) => NOP NOP TS: 9450713 83065506 =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ ok, let's see here: ==== 09/27-06:20:05.719609 192.168.1.3:34173 -> 74.125.235.18:80 TCP TTL:64 TOS:0x0 ID:20227 IpLen:20 DgmLen:52 DF ***A**** Seq: 0x5AF57DC5 Ack: 0xBEA22856 Win: 0xE TcpLen: 32 TCP Options (3) => NOP NOP TS: 9450713 83065506 ===== 09/27-06:20:05.719609 -> time stamp 192.168.1.3:34173 -> source ip:source port 74.125.235.18:80 -> destionation ip : destination port TCP -> protocol TTL:64 -> time to live TOS:0x0 -> type of service specify datagram priority ID:20227 ->packet identification IpLen:20 -> ip header length DgmLen:52 -> datagram length (datagram is a basic transfer unit associated with a packet-switched network) DF (Don't Fragment) bit -> This is a bit in the IP header that can be set to indicate that the packet should not be fragmented by routers Packet Logger Mode Here's a sample of using snort as packet logger mode: #snort -i eth1 -K pcap -l /var/log/snort -d the result should be on /var/log/snort, you may read the pcap format using tcpdump : #ls /var/log/snort 192.168.1.3 alert PACKET_NONIP snort.log.1348703594 tcpdump.log.1348697823 #mv snort.log.1348703594 /root/snort.pcap #tcpdump -tttt -r /root/snort.pcap 2012-09-27 06:53:24.875937 IP ev1lut10n-Vostro1310.37492 > sin04s01-in-f23.1e100.net.www: Flags [P.], seq 2143183534:2143184094, ack 662251960, win 97, options [nop,nop,TS val 9950502 ecr 85006748], length 560 2012-09-27 06:53:24.939287 IP sin04s01-in-f23.1e100.net.www > ev1lut10n-Vostro1310.37492: Flags [.], ack 560, win 11977, options [nop,nop,TS val 85037786 ecr 9950502], length 0 2012-09-27 06:53:25.009151 IP sin04s01-in-f23.1e100.net.www > ev1lut10n-Vostro1310.37492: Flags [P.], seq 1389:1419, ack 560, win 11977, options [nop,nop,TS val 85037855 ecr 9950502], length 30 2012-09-27 06:53:25.009239 IP ev1lut10n-Vostro1310.37492 > sin04s01-in-f23.1e100.net.www: Flags [.], ack 1, win 97, options [nop,nop,TS val 9950535 ecr 85037786], length 0 2012-09-27 06:53:25.060405 IP sin04s01-in-f23.1e100.net.www > ev1lut10n-Vostro1310.37492: Flags [.], seq 1:1389, ack 560, win 11977, options [nop,nop,TS val 85037855 ecr 9950502], length 1388 2012-09-27 06:53:25.060501 IP ev1lut10n-Vostro1310.37492 > sin04s01-in-f23.1e100.net.www: Flags [.], ack 1419, win 103, options [nop,nop,TS val 9950548 ecr 85037855], length 0 2012-09-27 06:53:25.087271 IP sin04s01-in-f23.1e100.net.www > ev1lut10n-Vostro1310.37492: Flags [.], seq 1419:2807, ack 560, win 11977, options [nop,nop,TS val 85037855 ecr 9950502], length 1388 NIDS Mode Example #snort -i eth1 -b -A fast -c /etc/snort/snort.conf Running in IDS mode --== Initializing Snort ==-- Initializing Output Plugins! Initializing Preprocessors! Initializing Plug-ins! Parsing Rules file "/etc/snort/snort.conf" PortVar 'HTTP_PORTS' defined : [ 80 ] PortVar 'SHELLCODE_PORTS' defined : [ 0:79 81:65535 ] PortVar 'ORACLE_PORTS' defined : [ 1521 ] PortVar 'FTP_PORTS' defined : [ 21 ] Tagged Packet Limit: 256 Loading dynamic engine /usr/lib/snort_dynamicengine/libsf_engine.so... done Loading all dynamic preprocessor libs from /usr/lib/snort_dynamicpreprocessor/... Loading dynamic preprocessor library /usr/lib/snort_dynamicpreprocessor//libsf_dcerpc_preproc.so... done Loading dynamic preprocessor library /usr/lib/snort_dynamicpreprocessor//libsf_dce2_preproc.so... done Loading dynamic preprocessor library /usr/lib/snort_dynamicpreprocessor//libsf_dns_preproc.so... done Loading dynamic preprocessor library /usr/lib/snort_dynamicpreprocessor//libsf_ftptelnet_preproc.so... done Loading dynamic preprocessor library /usr/lib/snort_dynamicpreprocessor//lib_sfdynamic_preprocessor_example.so... done Loading dynamic preprocessor library /usr/lib/snort_dynamicpreprocessor//libsf_ssh_preproc.so... done Loading dynamic preprocessor library /usr/lib/snort_dynamicpreprocessor//libsf_ssl_preproc.so... done Loading dynamic preprocessor library /usr/lib/snort_dynamicpreprocessor//libsf_smtp_preproc.so... done Finished Loading all dynamic preprocessor libs from /usr/lib/snort_dynamicpreprocessor/ Log directory = /var/log/snort Frag3 global config: Max frags: 65536 Fragment memory cap: 4194304 bytes Frag3 engine config: Target-based policy: FIRST Fragment timeout: 60 seconds Fragment min_ttl: 1 Fragment Problems: 1 Overlap Limit: 10 Min fragment Length: 0 Stream5 global config: Track TCP sessions: ACTIVE Max TCP sessions: 8192 Memcap (for reassembly packet storage): 8388608 Track UDP sessions: INACTIVE Track ICMP sessions: INACTIVE Log info if session memory consumption exceeds 1048576 Stream5 TCP Policy config: Reassembly Policy: FIRST Timeout: 30 seconds Min ttl: 1 Maximum number of bytes to queue per session: 1048576 Maximum number of segs to queue per session: 2621 Reassembly Ports: 21 client (Footprint) 23 client (Footprint) 25 client (Footprint) 42 client (Footprint) 53 client (Footprint) 80 client (Footprint) 110 client (Footprint) 111 client (Footprint) 135 client (Footprint) 136 client (Footprint) 137 client (Footprint) 139 client (Footprint) 143 client (Footprint) 445 client (Footprint) 513 client (Footprint) 514 client (Footprint) 1433 client (Footprint) 1521 client (Footprint) 2401 client (Footprint) 3306 client (Footprint) HttpInspect Config: GLOBAL CONFIG Max Pipeline Requests: 0 Inspection Type: STATELESS Detect Proxy Usage: NO IIS Unicode Map Filename: /etc/snort/unicode.map IIS Unicode Map Codepage: 1252 DEFAULT SERVER CONFIG: Server profile: All Ports: 80 8080 8180 Server Flow Depth: 300 Client Flow Depth: 300 Max Chunk Length: 500000 Max Header Field Length: 0 Max Number Header Fields: 0 Inspect Pipeline Requests: YES URI Discovery Strict Mode: NO Allow Proxy Usage: NO Disable Alerting: NO Oversize Dir Length: 500 Only inspect URI: NO Normalize HTTP Headers: NO Normalize HTTP Cookies: NO Ascii: YES alert: NO Double Decoding: YES alert: YES %U Encoding: YES alert: YES Bare Byte: YES alert: YES Base36: OFF UTF 8: OFF IIS Unicode: YES alert: YES Multiple Slash: YES alert: NO IIS Backslash: YES alert: NO Directory Traversal: YES alert: NO Web Root Traversal: YES alert: YES Apache WhiteSpace: YES alert: NO IIS Delimiter: YES alert: NO IIS Unicode Map: GLOBAL IIS UNICODE MAP CONFIG Non-RFC Compliant Characters: NONE Whitespace Characters: 0x09 0x0b 0x0c 0x0d rpc_decode arguments: Ports to decode RPC on: 111 32771 alert_fragments: INACTIVE alert_large_fragments: ACTIVE alert_incomplete: ACTIVE alert_multiple_requests: ACTIVE Portscan Detection Config: Detect Protocols: TCP UDP ICMP IP Detect Scan Type: portscan portsweep decoy_portscan distributed_portscan Sensitivity Level: Low Memcap (in bytes): 10000000 Number of Nodes: 36900 FTPTelnet Config: GLOBAL CONFIG Inspection Type: stateful Check for Encrypted Traffic: YES alert: YES Continue to check encrypted data: NO TELNET CONFIG: Ports: 23 Are You There Threshold: 200 Normalize: YES Detect Anomalies: NO FTP CONFIG: FTP Server: default Ports: 21 Check for Telnet Cmds: YES alert: YES Ignore Telnet Cmd Operations: OFF Identify open data channels: YES FTP Client: default Check for Bounce Attacks: YES alert: YES Check for Telnet Cmds: YES alert: YES Ignore Telnet Cmd Operations: OFF Max Response Length: 256 SMTP Config: Ports: 25 587 691 Inspection Type: Stateful Normalize: EXPN RCPT VRFY Ignore Data: No Ignore TLS Data: No Ignore SMTP Alerts: No Max Command Line Length: Unlimited Max Specific Command Line Length: ETRN:500 EXPN:255 HELO:500 HELP:500 MAIL:260 RCPT:300 VRFY:255 Max Header Line Length: Unlimited Max Response Line Length: Unlimited X-Link2State Alert: Yes Drop on X-Link2State Alert: No Alert on commands: None SSH config: Autodetection: DISABLED Challenge-Response Overflow Alert: ENABLED SSH1 CRC32 Alert: ENABLED Server Version String Overflow Alert: ENABLED Protocol Mismatch Alert: ENABLED Bad Message Direction Alert: DISABLED Bad Payload Size Alert: DISABLED Unrecognized Version Alert: DISABLED Max Encrypted Packets: 20 Max Server Version String Length: 80 (Default) MaxClientBytes: 19600 (Default) Ports: 22 DCE/RPC 2 Preprocessor Configuration Global Configuration DCE/RPC Defragmentation: Enabled Memcap: 102400 KB Events: none Server Default Configuration Policy: WinXP Detect ports SMB: 139 445 TCP: 135 UDP: 135 RPC over HTTP server: 593 RPC over HTTP proxy: None Autodetect ports SMB: None TCP: 1025-65535 UDP: 1025-65535 RPC over HTTP server: 1025-65535 RPC over HTTP proxy: None Maximum SMB command chaining: 3 commands DNS config: DNS Client rdata txt Overflow Alert: ACTIVE Obsolete DNS RR Types Alert: INACTIVE Experimental DNS RR Types Alert: INACTIVE Ports: 53 SSLPP config: Encrypted packets: not inspected Ports: 443 465 563 636 989 992 993 994 995 Server side data is trusted +++++++++++++++++++++++++++++++++++++++++++++++++++ Initializing rule chains... Warning: /etc/snort/rules/dos.rules(42) => threshold (in rule) is deprecated; use detection_filter instead. 3379 Snort rules read 3379 detection rules 0 decoder rules 0 preprocessor rules 3379 Option Chains linked into 261 Chain Headers 0 Dynamic rules +++++++++++++++++++++++++++++++++++++++++++++++++++ +-------------------[Rule Port Counts]--------------------------------------- | tcp udp icmp ip | src 121 18 0 0 | dst 2921 129 0 0 | any 115 53 56 27 | nc 31 10 15 20 | s+d 12 6 0 0 +---------------------------------------------------------------------------- +-----------------------[detection-filter-config]------------------------------ | memory-cap : 1048576 bytes +-----------------------[detection-filter-rules]------------------------------- | none ------------------------------------------------------------------------------- +-----------------------[rate-filter-config]----------------------------------- | memory-cap : 1048576 bytes +-----------------------[rate-filter-rules]------------------------------------ | none ------------------------------------------------------------------------------- +-----------------------[event-filter-config]---------------------------------- | memory-cap : 1048576 bytes +-----------------------[event-filter-global]---------------------------------- | none +-----------------------[event-filter-local]----------------------------------- | gen-id=1 sig-id=2923 type=Threshold tracking=dst count=10 seconds=60 | gen-id=1 sig-id=100000310 type=Limit tracking=src count=1 seconds=360 | gen-id=1 sig-id=3273 type=Threshold tracking=src count=5 seconds=2 | gen-id=1 sig-id=2496 type=Both tracking=dst count=20 seconds=60 | gen-id=1 sig-id=100000159 type=Both tracking=src count=100 seconds=60 | gen-id=1 sig-id=100000160 type=Both tracking=src count=300 seconds=60 | gen-id=1 sig-id=100000311 type=Limit tracking=src count=1 seconds=360 | gen-id=1 sig-id=2523 type=Both tracking=dst count=10 seconds=10 | gen-id=1 sig-id=100000161 type=Both tracking=dst count=100 seconds=60 | gen-id=1 sig-id=100000163 type=Both tracking=src count=100 seconds=60 | gen-id=1 sig-id=2495 type=Both tracking=dst count=20 seconds=60 | gen-id=1 sig-id=100000312 type=Limit tracking=src count=1 seconds=360 | gen-id=1 sig-id=100000158 type=Both tracking=src count=100 seconds=60 | gen-id=1 sig-id=100000923 type=Threshold tracking=dst count=200 seconds=60 | gen-id=1 sig-id=2275 type=Threshold tracking=dst count=5 seconds=60 | gen-id=1 sig-id=2494 type=Both tracking=dst count=20 seconds=60 | gen-id=1 sig-id=3152 type=Threshold tracking=src count=5 seconds=2 | gen-id=1 sig-id=100000162 type=Both tracking=src count=100 seconds=60 | gen-id=1 sig-id=2924 type=Threshold tracking=dst count=10 seconds=60 +-----------------------[suppression]------------------------------------------ | none ------------------------------------------------------------------------------- Rule application order: activation->dynamic->pass->drop->alert->log Verifying Preprocessor Configurations! Warning: flowbits key 'ms_sql_seen_dns' is checked but not ever set. Warning: flowbits key 'community_uri.size.1050' is set but not ever checked. Warning: flowbits key 'realplayer.playlist' is checked but not ever set. Warning: flowbits key 'smb.tree.create.llsrpc' is set but not ever checked. 37 out of 512 flowbits in use. Initializing Network Interface eth1 Decoding Ethernet on interface eth1 [ Port Based Pattern Matching Memory ] +-[AC-BNFA Search Info Summary]------------------------------ | Instances : 241 | Patterns : 22046 | Pattern Chars : 207188 | Num States : 137776 | Num Match States : 18341 | Memory : 3.51Mbytes | Patterns : 0.70M | Match Lists : 0.96M | Transitions : 1.79M +------------------------------------------------- --== Initialization Complete ==-- ,,_ -*> Snort! <*- o" )~ Version 2.8.5.2 (Build 121) '''' By Martin Roesch & The Snort Team: http://www.snort.org/snort/snort-team Copyright (C) 1998-2009 Sourcefire, Inc., et al. Using PCRE version: 8.02 2010-03-19 Rules Engine: SF_SNORT_DETECTION_ENGINE Version 1.11 Preprocessor Object: SF_SMTP Version 1.1 Preprocessor Object: SF_SSLPP Version 1.1 Preprocessor Object: SF_SSH Version 1.1 Preprocessor Object: SF_Dynamic_Example_Preprocessor Version 1.0 Preprocessor Object: SF_FTPTELNET Version 1.2 Preprocessor Object: SF_DNS Version 1.1 Preprocessor Object: SF_DCERPC2 Version 1.0 Preprocessor Object: SF_DCERPC Version 1.1