
- •Network Intrusion Detection, Third Edition
- •Table of Contents
- •Copyright
- •About the Authors
- •About the Technical Reviewers
- •Acknowledgments
- •Tell Us What You Think
- •Introduction
- •Chapter 1. IP Concepts
- •Layers
- •Data Flow
- •Packaging (Beyond Paper or Plastic)
- •Bits, Bytes, and Packets
- •Encapsulation Revisited
- •Interpretation of the Layers
- •Addresses
- •Physical Addresses, Media Access Controller Addresses
- •Logical Addresses, IP Addresses
- •Subnet Masks
- •Service Ports
- •IP Protocols
- •Domain Name System
- •Routing: How You Get There from Here
- •Summary
- •Chapter 2. Introduction to TCPdump and TCP
- •TCPdump
- •TCPdump Behavior
- •Filters
- •Binary Collection
- •TCPdump Output
- •Absolute and Relative Sequence Numbers
- •Dumping in Hexadecimal
- •Introduction to TCP
- •Establishing a TCP Connection
- •Server and Client Ports
- •Connection Termination
- •The Graceful Method
- •The Abrupt Method
- •Data Transfer
- •What's the Bottom Line?
- •TCP Gone Awry
- •An ACK Scan
- •A Telnet Scan?
- •TCP Session Hijacking
- •Summary
- •Chapter 3. Fragmentation
- •Theory of Fragmentation
- •All Aboard the Fragment Train
- •The Fragment Dining Car
- •The Fragment Caboose
- •Viewing Fragmentation Using TCPdump
- •Fragmentation and Packet-Filtering Devices
- •The Don't Fragment Flag
- •Malicious Fragmentation
- •TCP Header Fragments
- •Teardrop
- •Summary
- •Chapter 4. ICMP
- •ICMP Theory
- •Why Do You Need ICMP?
- •Where Does ICMP Fit In?
- •Understanding ICMP
- •Summary of ICMP Theory
- •Mapping Techniques
- •Tireless Mapper
- •Efficient Mapper
- •Clever Mapper
- •Cerebral Mapper
- •Summary of Mapping
- •Normal ICMP Activity
- •Host Unreachable
- •Port Unreachable
- •Admin Prohibited
- •Need to Frag
- •Time Exceeded In-Transit
- •Embedded Information in ICMP Error Messages
- •Summary of Normal ICMP
- •Malicious ICMP Activity
- •Smurf Attack
- •Tribe Flood Network
- •WinFreeze
- •Loki
- •Unsolicited ICMP Echo Replies
- •Theory 1: Spoofing
- •Theory 2: TFN
- •Theory 3: Loki
- •Summary of Malicious ICMP Traffic
- •To Block or Not to Block
- •Unrequited ICMP Echo Requests
- •Kiss traceroute Goodbye
- •Silence of the LANs
- •Broken Path MTU Discovery
- •Summary
- •Chapter 5. Stimulus and Response
- •The Expected
- •Request for Comments
- •TCP Stimulus-Response
- •Destination Host Listens on Requested Port
- •Destination Host Not Listening on Requested Port
- •Destination Host Doesn't Exist
- •Destination Port Blocked
- •Destination Port Blocked, Router Doesn't Respond
- •UDP Stimulus-Response
- •Destination Host Listening on Requested Port
- •Destination Host Not Listening on Requested Port
- •Windows tracert
- •TCPdump of tracert
- •Protocol Benders
- •Active FTP
- •Passive FTP
- •UNIX Traceroute
- •Summary of Expected Behavior and Protocol Benders
- •Abnormal Stimuli
- •Evasion Stimulus, Lack of Response
- •Evil Stimulus, Fatal Response
- •No Stimulus, All Response
- •Unconventional Stimulus, Operating System Identifying Response
- •Bogus "Reserved" TCP Flags
- •Anomalous TCP Flag Combinations
- •No TCP Flags
- •Summary of Abnormal Stimuli
- •Summary
- •Chapter 6. DNS
- •Back to Basics: DNS Theory
- •The Structure of DNS
- •Steppin' Out on the Internet
- •DNS Resolution Process
- •TCPdump Output of Resolution
- •Strange TCPdump Notation
- •Caching: Been There, Done That
- •Reverse Lookups
- •Master and Slave Name Servers
- •Zone Transfers
- •Summary of DNS Theory
- •Using DNS for Reconnaissance
- •The nslookup Command
- •Name That Name Server
- •HINFO: Snooping for Details
- •List Zone Map Information
- •Tainting DNS Responses
- •A Weak Link
- •Cache Poisoning
- •Summary
- •Part II: Traffic Analysis
- •Chapter 7. Packet Dissection Using TCPdump
- •Why Learn to Do Packet Dissection?
- •Sidestep DNS Queries
- •Normal Query
- •Evasive Query
- •Introduction to Packet Dissection Using TCPdump
- •Where Does the IP Stop and the Embedded Protocol Begin?
- •Other Length Fields
- •The IP Datagram Length
- •Increasing the Snaplen
- •Dissecting the Whole Packet
- •Freeware Tools for Packet Dissection
- •Ethereal
- •tcpshow
- •Summary
- •Chapter 8. Examining IP Header Fields
- •Insertion and Evasion Attacks
- •Insertion Attacks
- •Evasion Attacks
- •IP Header Fields
- •IP Version Number
- •Protocol Number
- •The Don't Fragment (DF) Flag
- •The More Fragments (MF) Flag
- •Mapping Using Incomplete Fragments
- •IP Numbers
- •IP Identification Number
- •Time to Live (TTL)
- •Looking at the IP ID and TTL Values Together to Discover Spoofing
- •IP Checksums
- •Summary
- •Chapter 9. Examining Embedded Protocol Header Fields
- •Ports
- •TCP Checksums
- •TCP Sequence Numbers
- •Acknowledgement Numbers
- •TCP Flags
- •TCP Corruption
- •ECN Flag Bits
- •Operating System Fingerprinting
- •Retransmissions
- •Using Retransmissions Against a Hostile Host—LaBrea Tarpit Version 1
- •TCP Window Size
- •LaBrea Version 2
- •Ports
- •UDP Port Scanning
- •UDP Length Field
- •ICMP
- •Type and Code
- •Identification and Sequence Numbers
- •Misuse of ICMP Identification and Sequence Numbers
- •Summary
- •Chapter 10. Real-World Analysis
- •You've Been Hacked!
- •Netbus Scan
- •How Slow Can you Go?
- •RingZero Worm
- •Summary
- •Chapter 11. Mystery Traffic
- •The Event in a Nutshell
- •The Traffic
- •DDoS or Scan
- •Source Hosts
- •Destination Hosts
- •Scanning Rates
- •Fingerprinting Participant Hosts
- •Arriving TTL Values
- •TCP Window Size
- •TCP Options
- •TCP Retries
- •Summary
- •Part III: Filters/Rules for Network Monitoring
- •Chapter 12. Writing TCPdump Filters
- •The Mechanics of Writing TCPdump Filters
- •Bit Masking
- •Preserving and Discarding Individual Bits
- •Creating the Mask
- •Putting It All Together
- •TCPdump IP Filters
- •Detecting Traffic to the Broadcast Addresses
- •Detecting Fragmentation
- •TCPdump UDP Filters
- •TCPdump TCP Filters
- •Filters for Examining TCP Flags
- •Detecting Data on SYN Connections
- •Summary
- •Chapter 13. Introduction to Snort and Snort Rules
- •An Overview of Running Snort
- •Snort Rules
- •Snort Rule Anatomy
- •Rule Header Fields
- •The Action Field
- •The Protocol Field
- •The Source and Destination IP Address Fields
- •The Source and Destination Port Field
- •Direction Indicator
- •Summary
- •Chapter 14. Snort Rules - Part II
- •Format of Snort Options
- •Rule Options
- •Msg Option
- •Logto Option
- •Ttl Option
- •Id Option
- •Dsize Option
- •Sequence Option
- •Acknowledgement Option
- •Itype and Icode Options
- •Flags Option
- •Content Option
- •Offset Option
- •Depth Option
- •Nocase Option
- •Regex Option
- •Session Option
- •Resp Option
- •Tag Option
- •Putting It All Together
- •Summary
- •Part IV: Intrusion Infrastructure
- •Chapter 15. Mitnick Attack
- •Exploiting TCP
- •IP Weaknesses
- •SYN Flooding
- •Covering His Tracks
- •Identifying Trust Relationships
- •Examining Network Traces
- •Setting Up the System Compromise?
- •Detecting the Mitnick Attack
- •Trust Relationship
- •Port Scan
- •Host Scan
- •Connections to Dangerous Ports
- •TCP Wrappers
- •Tripwire
- •Preventing the Mitnick Attack
- •Summary
- •Chapter 16. Architectural Issues
- •Events of Interest
- •Limits to Observation
- •Human Factors Limit Detects
- •Limitations Caused by the Analyst
- •Limitations Caused by the CIRTs
- •Severity
- •Criticality
- •Lethality
- •Countermeasures
- •Calculating Severity
- •Scanning for Trojans
- •Analysis
- •Severity
- •Host Scan Against FTP
- •Analysis
- •Severity
- •Sensor Placement
- •Outside Firewall
- •Sensors Inside Firewall
- •Both Inside and Outside Firewall
- •Analyst Console
- •Faster Console
- •False Positive Management
- •Display Filters
- •Mark as Analyzed
- •Drill Down
- •Correlation
- •Better Reporting
- •Event-Detection Reports
- •Weekly/Monthly Summary Reports
- •Summary
- •Chapter 17. Organizational Issues
- •Organizational Security Model
- •Security Policy
- •Industry Practice for Due Care
- •Security Infrastructure
- •Implementing Priority Countermeasures
- •Periodic Reviews
- •Implementing Incident Handling
- •Defining Risk
- •Risk
- •Accepting the Risk
- •Trojan Version
- •Malicious Connections
- •Mitigating or Reducing the Risk
- •Network Attack
- •Snatch and Run
- •Transferring the Risk
- •Defining the Threat
- •Recognition of Uncertainty
- •Risk Management Is Dollar Driven
- •How Risky Is a Risk?
- •Quantitative Risk Assessment
- •Qualitative Risk Assessments
- •Why They Don't Work
- •Summary
- •Chapter 18. Automated and Manual Response
- •Automated Response
- •Architectural Issues
- •Response at the Internet Connection
- •Internal Firewalls
- •Host-Based Defenses
- •Throttling
- •Drop Connection
- •Shun
- •Proactive Shunning
- •Islanding
- •Reset
- •Honeypot
- •Proxy System
- •Empty System
- •Honeypot Summary
- •Manual Response
- •Containment
- •Freeze the Scene
- •Sample Fax Form
- •On-Site Containment
- •Site Survey
- •System Containment
- •Hot Search
- •Eradication
- •Recovery
- •Lessons Learned
- •Summary
- •Chapter 19. Business Case for Intrusion Detection
- •Part One: Management Issues
- •Bang for the Buck
- •The Expenditure Is Finite
- •Technology Used to Destabilize
- •Network Impacts
- •IDS Behavioral Modification
- •The Policy
- •Part of a Larger Strategy
- •Part Two: Threats and Vulnerabilities
- •Threat Assessment and Analysis
- •Threat Vectors
- •Threat Determination
- •Asset Identification
- •Valuation
- •Vulnerability Analysis
- •Risk Evaluation
- •Part Three: Tradeoffs and Recommended Solution
- •Identify What Is in Place
- •Identify Your Recommendations
- •Identify Options for Countermeasures
- •Cost-Benefit Analysis
- •Follow-On Steps
- •Repeat the Executive Summary
- •Summary
- •Chapter 20. Future Directions
- •Increasing Threat
- •Improved Targeting
- •How the Threat Will Be Manifested
- •Defending Against the Threat
- •Skills Versus Tools
- •Analysts Skill Set
- •Improved Tools
- •Defense in Depth
- •Emerging Techniques
- •Virus Industry Revisited
- •Smart Auditors
- •Summary
- •Part V: Appendixes
- •Appendix A. Exploits and Scans to Apply Exploits
- •False Positives
- •All Response, No Stimulus
- •Scan or Response?
- •SYN Floods
- •Valid SYN Flood
- •False Positive SYN Flood
- •Back Orifice?
- •IMAP Exploits
- •10143 Signature Source Port IMAP
- •111 Signature IMAP
- •Source Port 0, SYN and FIN Set
- •Source Port 65535 and SYN FIN Set
- •DNS Zone Followed by 0, SYN FIN Targeting NFS
- •Scans to Apply Exploits
- •mscan
- •Son of mscan
- •Access Builder?
- •Single Exploit, Portmap
- •rexec
- •Targeting SGI Systems?
- •Discard
- •Weird Web Scans
- •IP-Proto-191
- •Summary
- •Appendix B. Denial of Service
- •Brute-Force Denial-of-Service Traces
- •Smurf
- •Directed Broadcast
- •Echo-Chargen
- •Elegant Kills
- •Teardrop
- •Land Attack
- •We're Doomed
- •nmap
- •Distributed Denial-of-Service Attacks
- •Intro to DDoS
- •DDoS Software
- •Trinoo
- •Stacheldraht
- •Summary
- •Appendix C. Detection of Intelligence Gathering
- •Network and Host Mapping
- •Host Scan Using UDP Echo Requests
- •Netmask-Based Broadcasts
- •Port Scan
- •Scanning for a Particular Port
- •Complex Script, Possible Compromise
- •"Random" Port Scan
- •Database Correlation Report
- •SNMP/ICMP
- •FTP Bounce
- •NetBIOS-Specific Traces
- •A Visit from a Web Server
- •Null Session
- •Stealth Attacks
- •Explicit Stealth Mapping Techniques
- •FIN Scan
- •Inverse Mapping
- •Answers to Domain Queries
- •Answers to Domain Queries, Part 2
- •Fragments, Just Fragments
- •Measuring Response Time
- •Echo Requests
- •Actual DNS Queries
- •Probe on UDP Port 33434
- •3DNS to TCP Port 53
- •Worms as Information Gatherers
- •Pretty Park Worm
- •RingZero
- •Summary
TCP TTL:64 TOS:0x10 ID:30124 DF |
Win: 0x7D78 |
|||
***AP*** |
Seq: 0x93EE0AB7 |
Ack: 0xB8352E61 |
||
TCP Options => |
NOP NOP TS: |
112024246 27551686 |
|
|
55 53 45 |
52 20 |
61 6E 6F 6E |
79 6D 6F 75 73 0D 0A USER anonymous.. |
The text "anonymous" is found at the 6th byte in the payload, but because we begin the offset count at 0, it is found in offset byte 5.
Depth Option
The depth option is another useful option to help limit the amount of processing Snort must do on content searches. The depth specifies the number of bytes to search from the offset. If no offset is given, the offset is assumed to be 0. This option can drastically improve Snort's performance if packets have large payloads and the content being sought appears in well-defined areas of the payload.
Format:
depth: <number>
Sample rule:
alert udp !$HOME_NET any -> $HOME_NET 5632 \
(msg: "PCAnywhere Startup"; content: "ST"; depth: 2;)
Sample output:
[**] PCAnywhere Startup [**]
04/24-12:11:08.724441 192.168.143.15:3484 -> 192.168.143.16:5632 UDP TTL:64 TOS:0x10 ID:30124 DF
73 74 61 72 74 75 70 STARTUP
This rule is triggered if the characters "ST" are discovered two bytes from the default offset of byte 0.
Nocase Option
The nocase option makes the content search in the payload case insensitive. This means that Snort will match the content string being searched no matter what case is used. This is one of the few options that does not have an option value partnered with it.
Format:
nocase;
Sample rule:
alert tcp any any -> any 21 \
(msg: "FTP warez snooping"; content: "warez"; nocase;)
Sample output:
[**] FTP warez snooping[**]
04/25-05:28:28.146374 192.168.143.15:3487 |
-> 192.168.143.16:21 |
|||
TCP TTL:64 TOS:0x10 ID:30637 DF |
Win: 0x7D78 |
|||
***AP*** |
Seq: 0xE1977C8D |
Ack: 0x452F7F9 |
||
TCP Options => |
NOP NOP TS: |
118248207 33775174 |
||
43 57 44 |
20 57 |
61 52 65 5A |
0D 0A |
CWD WaReZ.. |
Regex Option
The regex option modifier of content allows wildcard characters to appear in the content string. Two wildcard characters are available: the ? specifies that a single character can be substituted in the position where the ? is found. The second wildcard character * indicates that any number of characters can be substituted where the * is found.
One excellent use of the regex option is looking for signs of buffer overflow characters. If a buffer overflow is successful on a UNIX host, the attacker might very well try to gain access to a shell such as the Bourne shell using /bin/sh. Yet, there are many other shells that can be used such as the C shell (csh), the Korn shell (ksh), and Bourne again shell (bash), to name a few. Therefore, specifying a proper string and wildcard character will
find all of the various shells. Prior to the addition of the regex option, the only way to test for all different shells was to use different rules. Be warned that the regex option will not be fully functional until release 2.0 of Snort.
Format:
regex;
Sample rule:
log tcp any any -> 192.168.5.0/24 515/
(msg: "Attempted shell on lpd"; content: "/bin/*sh"; regex;)
Sample output:
[**] Attempted shell on lpd [**]
03/23-07:41:11.282960 1.1.0.1:1892 -> 192.168.5.55:515
TCP TTL:64 TOS:0x0 ID:63821 IpLen:20 DgmLen:60 |
TcpLen: 20 |
||||
***AP*** |
Seq: 0x32A77D55 Ack: 0x0 |
Win: 0x200 |
|||
2F |
62 |
69 |
6E 2F 63 73 68 0A 00 00 00 |
00 00 00 00 |
/bin/csh........ |
00 |
00 |
00 |
00 |
|
|
The previous rule looks for shell access to destination port 515 known as the line printer daemon. The regex qualifier to the content value of /bin/*sh is used to find all the different
types of shell access.
Session Option
The session option is used to capture user data from TCP sessions. It can provide a good forensics tool to see what a particular user is doing, especially if you suspect some kind of malicious behavior is taking place.
There are two available argument keywords for the session rule option: printable or all. The printable keyword only prints out data that the user would normally see or be able to type. The all keyword substitutes non-printable characters with their hexadecimal equivalents.
You should be aware that the use of the session option can degrade the performance of Snort, so it is best used retrospectively; capture the data in binary format (TCPdump files) and then run it through Snort. Also, note that typically when you use this option, you should use the direction operator that specifies both directions as shown in the example. Finally, it is best to use the –d command-line option to dump at the application level; otherwise, it doesn't make much sense to specify the session option.
By default, the session is recorded in the default log directory. The subdirectory beneath that is the IP number of the host initiating the activity. A file named SESSION:sourceportdestport, where sourceport and destport are the actual source, destination ports for the connection will be located in that directory.
Format:
session: [printable|all]
Sample rule:
log tcp any any <> 192.168.5.0/24 21 (session: printable;)
Sample output:
Assuming the source host for the session is 1.2.3.4 on port 1025, the following output will
be in the log directory in subdirectory 1.2.3.4 file SESSION: 1025-21:
220 linux2 FTP server (Version wu-2.5.0(1) Tue Sep 21 16:48:12 EDT 1999) ready.
USER jsmith
331 Password required for jsmith. PASS snorty-the-p1g
230 User jsmith logged in. SYST

215 UNIX Type: L8 QUIT
221-You have transferred 0 bytes in 0 files.
221-Total traffic for this session was 239 bytes in 0 transfers. 221-Thank you for using the FTP service on linux2.
221 Goodbye
Resp Option
The resp option allows an automated active response when malicious activity is detected. An active response attempts to disable a connection. There are many different combinations of active responses and multiple resp options can be given in a single rule. TCP connections can be aborted by sending a reset to the sending host socket connection, the receiving host socket connection, or both hosts' socket connections. If the offending packet is UDP, different ICMP messages can be sent in an attempt to interrupt the UDP data flow. An ICMP network, host, or port unreachable message—or a combination of all three of these ICMP messages—can be sent.
The response option doesn't come automatically enabled with the source distribution. To
enable it, you must explicitly configure Snort via the following command:
./configure --enable-flexresp
This includes the necessary code for compilation. It is also possible that your configuration of UNIX doesn't have a libnet.h include file required for this to compile. It is available from
www.packetfactory.net.
No discussion of active response is complete unless the requisite caveats are offered. First, think smoking-brain hard before you decide to indiscriminately use active response. It should be used for situations where you perceive that unauthorized harmful access could occur such as a buffer overflow. Keep in mind that attackers can spoof source IP addresses, and you might end up using active response against an IP address or addresses that never sent you traffic to begin with. Think about the consequences of active response if someone spoofs a legitimate partner's IP addresses; it is possible for you to end up attacking a vital resource. Also, a false positive could cause a totally benign connection to be halted. This can cause a denial of service to legitimate users.
Another concern is timing issues. Many requests and responses are almost instantaneous, especially one such as a UDP DNS query-response pair. Attempting to actively respond to a perceived malicious DNS query might prove to be futile because by the time Snort reacts, the response has probably already been sent.
Format:
resp <resp_option[, resp_option…]>;
Available choices for the response are:
rst_snd |
Send TCP RESET packets to sending socket |
rst_rcv |
Send TCP RESET packets to receiving socket |
rst_all |
Send TCP RESET packets to both sending and receiving sockets |
icmp_net |
Send an ICMP_NET_UNREACH to sender |
icmp_host |
Send an ICMP_HOST_UNREACH to sender |
icmp_port |
Send an ICMP_PORT_UNREACH to sender |
icmp_all |
Send all of the above ICMP_UNREACH packets to sender |
Sample rule: |
|
\ |
alert tcp any any -> $HOME_NET 21 |
||
(msg: "FTP |
password file retrieval"; |
\ |
flags: A+; |
resp: rst_all; content: "passwd";) |
Sample session:
[root@verbo hping2-beta53]# ftp sparky Connected to sparky.
220 sparky FTP server (SunOS 5.7) ready. Name (sparky:root): jsmith
331 Password required for jsmith. Password:
230 User jsmith logged in. Remote system type is UNIX.
Using binary mode to transfer files. ftp> cd /etc
250 CWD command successful. ftp> get passwd
local: passwd remote: passwd 200 PORT command successful.
421 Service not available, remote server has closed connection
The previous rule calls for an active response to a connection to an ftp server that references the password file passwd. Snort resets both ends of the connection to interrupt this attempt because the resp option of rst_all was selected.
Look at the last line of the ftp session. You see that right after the attacker entered the command get passwd, the connection was actually closed. It is possible that the
password file had already been transferred before the reset occurred.
Tag Option
The use of the tag option enables Snort to dynamically capture additional packets after a rule triggers. Without the tag option, only the packet that caused the rule to be triggered is recorded. This is an excellent way to see what transpires after the rule is triggered to get a better idea of the intent of the activity. This can also be useful for validating that some activity that triggered a rule is simply a false positive.
Format:
tag: <type>, <count>, <metric>, [direction]
type. What traffic to record.
session. Record the packets from both sides of the connection
host. Record the packets from the host that caused the rule to trigger (must use direction modifier)
count. Number of units specified by metric.
metric. Number of packets/seconds to record.
packets. Record host/session for <count> packets.
seconds. Record host/session for <count> seconds.
direction. Used only with "host" type to indicate host to tag.
src. Tag all traffic of source IP in triggered rule.
dst. Tag all traffic of destination IP in triggered rule.
Sample rule:
alert tcp any any -> any 21 (msg: "FTP passwd access"; flags: A+; \ content: "passwd"; tag: session, 10, packets;)
Sample output:
The alert file shows the abbreviated data from the miscreant connection to destination port
21:
[**] FTP passwd access [**]
03/21-20:31:05.610035 10.10.10.101:1454 -> 10.10.10.100:21