Intrusion Detection: Real-World Analysis
No doubt you've had your fill of healthy, low-fat theory on packet dissection and header fields. How about bringing on some of the more interesting, tasty, real-world traffic? That is what we are about to embark on in this chapter. For you to understand the analysis that will be shown here, it was necessary to lay the groundwork in previous chapters first.
To refresh your memory of the intent of this section, we want to analyze traffic from many different viewpoints. We've evolved from bits and fields in previous chapters to inspecting one or more packets for their intent and explaining some actual events of interest that were captured by Shadow from sites.
The transition from understanding theory to actually explaining some traffic that you see is not necessarily an easy or intuitive one. It takes time and exposure to some interesting traffic before you gain the confidence and experience to make this transition. The examples shown in this chapter should help you get started.
You've Been Hacked!
The simplicity of this first real-world event belies its poignancy. In a former lifetime, I worked for a local military Computer Emergency Response Team (CERT). I worked an early shift beginning about 5:30 A.M. to avoid the brunt of the rush hour traffic from the suburbs of one of the nation's most awful commuting cities, Washington, DC. I walked into the office one morning, and the phone was already ringingnot a good sign unless it is Ed McMahon calling to tell me I'd won the Publisher's Clearinghouse Sweepstakes. Instead, the call was from one of our parent military CERTs informing us that we'd had a break-in over night.
As a bit of background, the parent CERT used a different set of tools to monitor our site than we did, and would sometimes call when it had an inquiry about traffic or to report something noteworthy, as in this case. The CERT supplied the date, approximate time, and source and destination IPs associated with the break-in, but could supply no more information than this when queried.
The destination IP of the alleged victim host was a DNS server at the site. This was probably one of the best maintained hosts on the site; it had the most recent patches of BIND, it had all ports closed except for secure shell (SSH) from specific source addresses and DNS queries, and it had been stripped of all unnecessary user accounts. It was not as if this was some legacy system sitting openly on a DMZ with no recent attention, superfluous ports open, and unrestricted access. Still, although my first reaction was skepticism, I wasn't naive enough to think that any host connected to the Internet was impervious to attack. After all, this was a DNS server, and the venerable BIND software has been plagued with a history of problems, including buffer overflow attacks that allowed remote root access.
A rational way to approach this early morning report was to use TCPdump records from Shadow to examine all traffic to and from our DNS server from the alleged attacker's IP address. Before showing you an excerpt of the results of that, let's just re-examine what an established TCP session looks like in terms of TCPdump.
boulder.myplace.com.38060 > aspen.myplace.com.telnet: S 3774957990: 3774957990(0) win 8760 <mss 1460> (DF) aspen.myplace.com.telnet > boulder.myplace.com.38060: S 2009600000: 2009600000(0) ack 3774957991 win 1024 <mss 1460> boulder.myplace.com.38060 > aspen.myplace.com.telnet:. ack 1 win 8760 (DF)
boulder.myplace.com.38060 > aspen.myplace.com.telnet: P 1:28(27) ack 1 win 8760 (DF) aspen.myplace.com.telnet > boulder.myplace.com.38060: P 1:14(13) ack 1 win 1024 aspen.myplace.com.telnet > boulder.myplace.com.38060: P 14:23(9) ack 28 win 1024
aspen.myplace.com.telnet > boulder.myplace.com.38060: F 4289:4289(0) ack 92 win 1024 boulder.myplace.com.38060 > aspen.myplace.com.telnet: .ack 4290 win 8760 (DF) boulder.myplace.com.38060 > aspen.myplace.com.telnet: F 92:92(0) ack 4290 win 8760(DF) aspen.myplace.com.telnet > boulder.myplace.com.38060: .ack 93 win 1024
First, for two hosts to exchange some kind of data, they have to complete the three-way handshake. In this case, we have host boulder.myplace.com requesting to connect to host aspen.myplace.com on port telnet. Host aspen.myplace.com offers telnet service; and the two hosts synchronize sequence numbers and the connection is established.
Next, typically a client connects to a host for the purpose of exchanging some data. And in this case, we witness the exchange between both hosts as we see 27, 13, and 9 bytes of data sent respectively in the three PUSH packets displayed. More data was exchanged before the session was terminated, but that is not shown because it really adds no new insight into this discussion.
Finally, the two hosts gracefully sever the connection by exchanging and acknowledging FIN packets. That is what normal TCP sessions look like.
Now, examine some of the traffic from the alleged break-in:
whatsup.net.24997 > dns.myplace.com.sunrpc: S 2368718861:2368718861(0) win 512 <mss 1460> whatsup.net.25002 > dns.myplace.com.139: S 4067302570:4067302570(0) win 512 <mss 1460> whatsup.net.25075 > dns.myplace.com.ftp: S 1368714289:1368714289(0) win 512 <mss 1460> dns.myplace.com.ftp > whatsup.net.25075: R 0:0(0) ack 1368714290 win 0 (DF) whatsup.net.25177 > dns.myplace.com.1114: S 3231175487:3231175487(0) win 512 <mss 1460> whatsup.net.25189 > dns.myplace.com.tcpmux: S 368146356:368146356(0) win 512 <mss 1460> whatsup.net.25118 > dns.myplace.com.22: S 2035824356:2035824356(0) win 512 <mss 1460>
The malicious host is whatsup.net and our DNS server is dns.myplace.com. We see a bunch of attempted SYN connections to various different ports staring with port 111, also known as sunrpc or portmapper, port 139, NetBIOS session manager, ftp, and so on. We see no response from the DNS server except to return a RESET on the ftp query. We can surmise that the packet-filtering device blocked the other ports we see, yet not ftp. When the DNS server received the ftp SYN attempt, it responded with a RESET because it didn't listen at that port.
This is just an excerpt of the traffic seen, yet it all was similar except for the different destination ports attempted. The point is that there were no successful three-way handshakes, data exchange, or session terminations witnessed. Unless there was some kind of unknown backdoor into our network that was not monitored, it appears that this was a simple scan of the DNS server and not a break-in.
After analyzing this traffic, I called the person who had reported the break-in. I shared my results and asked what kind of evidence they had that there was a break-in. The person replied that one of their parent CERT organizations had reported this and was just passing the information on to our site. I got the contact information for the original person who reported the incident and called to inquire why he believed we had suffered an intrusion. The response was that he had reported it as a scan, and it had been mistakenly communicated to me as a break-in.
My mission had not been to determine culpability; it was to determine what kind of solid evidence anyone had to refute my belief that we had only had a scan. But, as it turned out, there really was no break-in after all. This incident brought home the necessity for having an audit trail of activity into and out of the network. Had we not had the TCPdump records of the scan, we would have had no evidence to refute the intrusion claim. We would have had to trust the caller and believe that we had an intrusion that none of our NIDS had detected.
We could have logged on to the DNS server. Yet, there would be an absence of any evidence, if we were lucky. There would be no changes in any of the Tripwire logs that maintained integrity audits of important files, there would be no rootkits, and there would be no changes to password files or inetd startup files. It would be impossible to know for certain that there had been no intrusion; there would be lingering doubt that we just were not seeing the manifestations of the break-in, perhaps because of installed rootkits and Trojaned software. In such a case where you are still uncertain about the health of the host, there are not a lot of options. You have to rebuild the system from the ground upnot a desirable task.
Prior to this event, I had been a proponent of Shadow and had been collecting TCPdump activity at monitored sites. This converted me to a die-hard Shadow user, and I now use Shadow for all sites that I monitor. Truthfully, it doesn't matter if you use TCPdump or any other collection mechanism. What matters is that you have this historical capture of the traffic entering and leaving your network. And, you don't need to capture payload, just the header portions of the records, to understand the nature of the activity as was demonstrated in this incident. Indeed, it also can be helpful to capture payload if you have enough space, even if only to keep it a couple of days before archiving it.