From: www.itworld.com
April 3, 2001 —
Two weeks ago I wrote about stealth scans and promised to follow up with a column on NMAP, Fyodor's wonderful open source port scanner. But between that time and the appearance of this column, two big stories got in the way. First came word that LinuxWorld.com was moving to ITworld.com's site. Then came a rare opportunity to bring together Bob Young and a player from the Dark Side in an exclusive one-on-one, which was presented last week in place of the stealth scan follow-up (see Resources for links). My apologies for being late, but here it is. And just as someone out there is certain to be snickering about my network security skills, better late than never. (See Resources for links to previous columns.)
Call it baud karma. Call it carelessness. Call it inevitable. I was 0wn3d and didn't know it. After downloading and installing BETA 21 of version 2.54 of NMAP (and its graphical frontend), I su'd to root, fired it up, and aimed a FIN stealth scan at ports 1-32000 on my server. I was running portsentry on the server, but my desktop machine -- the one I was running NMAP on -- was on the portsentry ignore list so that it wouldn't simply reroute my inquisitive packets to /dev/null after I hit the first protected port.
The image above shows the way I had NMAP configured for the scan. It took less than a minute to ruin my entire week. The results are below. The same scan produces markedly different results today.
Starting nmap V. 2.54BETA22 ( www.insecure.org/nmap/ ) Interesting ports on pooh.pjprimer.com (216.140.158.195): (The 31957 ports scanned but not shown below are in state: closed) Port State Service 1/tcp open tcpmux 7/tcp open echo 9/tcp open discard 11/tcp open systat 15/tcp open netstat 21/tcp open ftp 23/tcp open telnet 25/tcp open smtp 70/tcp open gopher 79/tcp open finger 80/tcp open http 98/tcp open linuxconf 109/tcp open pop-2 110/tcp open pop-3 111/tcp open sunrpc 113/tcp open auth 119/tcp open nntp 138/tcp open netbios-dgm 139/tcp open netbios-ssn 143/tcp open imap2 512/tcp open exec 513/tcp open login 514/tcp open shell 515/tcp open printer 540/tcp open uucp 635/tcp open unknown 1080/tcp open socks 1524/tcp open ingreslock 2000/tcp open callbook 2001/tcp open dc 4000/tcp open unknown 4001/tcp open unknown 5742/tcp open unknown 6000/tcp open X11 6001/tcp open X11:1 6667/tcp open irc 8892/tcp open seosload 10000/tcp open unknown 12345/tcp open NetBus 12346/tcp open NetBus 20034/tcp open unknown 30303/tcp open unknown 31337/tcp open Elite Remote operating system guess: Linux 2.1.122 - 2.2.16 Uptime 130.704 days (since Wed Nov 1 16:21:30 2000) Nmap run completed -- 1 IP address (1 host up) scanned in 42 seconds
The feeling you get in the pit of your stomach when you first suspect that your site has been cracked is similar to the feeling you get when you first discover your house has been broken into. It is a sickening sense of muted outrage. Muted because you are still hoping against hope that it hasn't really happened. But your eyes are telling you that it has, that in spite of your denial you've been violated, that you're 0wn3d.
I wasn't running IRC on my server, but someone was. NMAP uses the service name "Elite" for anything running on port 31337. Port 31337 is the one Back Orifice most often uses. The handwriting was on the wall.
One of the security mailing lists I subscribe to (but obviously don't heed as well as I should) mentioned a tool called chkrootkit, so I downloaded, compiled, and installed it on my server (see Resources for a link). The news was grim. It found several suspicious binaries that it suggested were trojans and said the machine was possibly infected with Ambient's rootkit.
At this point I was past the denial stage. I knew I had been rooted. But I didn't shut the server down immediately. First I notified the local LUG that was using my server for its mailing list, and the community theatre whose Website I host. I told them what had happened and that I would bring the server down for at least a day or so. Then I backed up my own Website and the theatre's Website. Only then did I throw the switch.
Starting from a new hard drive, I rebuilt the server from the ground up. I used RedHat 7.0. I had been running 6.1, and obviously I had not been good about keeping up with security updates. My best guess is that at some point, one of the widely known and exploited problems in earlier versions of wu-ftpd or sendmail had provided an open door for someone. I would add bind to that list of suspects except for the fact that I don't run it.
I moved the original hard drive to the secondary IDE controller so that I could peruse the disk at my leisure to learn what I could about when, how, and why my system had been cracked. I still don't know when it was cracked, but the rootkit seems to have been installed on February 22. I downloaded a copy of Ambient's rootkit (ARK) 1.0.1 and uncompressed the tarball on my desktop machine.
Here is the text from the ARK README:
[--ARK version 1.0 - Ambient's Rootkit for Linux--] THIS PACKAGE IS STRICTLY PRIVATE **DO NOT SPREAD THIS AROUND** This package includes backdoored versions of: syslogd login sshd ls du ps pstree killall top netstat Quick explanation: syslogd Prevents logging if they match a certain string in /dev/ptyxx/.log login Login: arkd00r , Password:and you got a rootshell. sshd Login: root , Password: will spawn a .. guess what? ls File hiding using /dev/ptyxx/.file as the index du eq. ls ps Hide processes saved in /dev/ptyxx/.proc (LRK style, explanation stolen too ;-) w00h, evil me!) Example data file: 0 0 Strips all processes running under root 1 p0 Strips tty p0 2 sniffer Strips all programs with the name sniffer 3 hack Strips all programs with 'hack' in them ie. proghack1, hack.scan, snhack etc. pstree eq. ps killall eq. ps top eq. ps netstat For hiding Ports, Connections, etc. saved in /dev/ptyxx/.addr (LRK style, explanation stolen too ;-) w00h, evil me!) type 0: hide uid type 1: hide local address type 2: hide remote address type 3: hide local port type 4: hide remote port type 5: hide UNIX socket path Example data file: 0 500 <- Hides all connections by uid 500 1 128.31 <- Hides all local connections from 128.31.X.X 2 128.31.39.20 <- Hides all remote connections to 128.31.39.20 3 8000 <- Hides all local connections from port 8000 4 6667 <- Hides all remote connections to port 6667 5 .term/socket <- Hides all UNIX sockets including the path .term/socket Gr33tZ (in no particulair order) fly out 2: ice-devil, Beast|E, togooz, orangehaw, CuCc`, mo`, ^Trance^, [dG], deaddrokz, Annihi|aT, Leentje.. and ofcourse whoever i forgot to mention.. not that you're forgotten though ;-) - |Ambient|
I followed the trail of clues from the README and sure enough in /dev of the cracked drive I found a directory called ptyxx. It had been created on March 2 by "operator." Inside the directory were the .addr, .file, .log, and .proc files mentioned above. In those files I learned that the utilities installed by the rootkit as a trojan would mask the comings and goings of the users "operator" and "MAL." I also found that BNC, a proxy IRC server, had been installed. That gave the bad guys a way to use IRC in complete anonymity. Any misdeeds there would only lead back to me.
I did find in the logs that on March 4, "operator" signed on from the country of Brunei in the South China Sea, and got the password wrong several times. I also found traces of Telnet visitation during March from users at Verio, from an ISP in South Texas, from an ISP in the Netherlands, and elsewhere. My site was a lot more popular than I had realized. I have no way of knowing if those Telnet sessions were the same person using different accounts or a close circle of friends.
The invading binaries that chkrootkit detected were not exactly the same size as those included in ARK 1.0.1. I suspect there is a later version of ARK that hasn't made its way onto a white-hat security site yet, but the discrepancy could also be differences in the compiler or compile options.
Today my server is considerably tighter than it was about a week ago, but I'm not nearly finished with the wrench. I noted earlier that I did a clean install of Red Hat 7.0. Since then I have also applied all the security updates to that release that Red Hat has issued. I've disabled Telnet and started using SSH instead. All new passwords.
I had been running Psionic's portsenty most of the time on the old server, but that was all. Now I'm running hostsentry and logcheck, also by Craig Rowland at Psionic. You can find all three of those tools on the Psionic Website (see Resources for a link).
And that's not all. I've also added SNORT (a network intrusion detection system) and Freeveracity, which monitors critical system files to detect whether they've been replaced with trojans. SNORT seems an excellent tool. It comes with a default set of rules that allow you to be alerted for just about any kind of attack or scan. Other rule sets are available from places like Max Vision Network Security.
I'll also add a package called Analysis Console for Incident Databases (ACID) so that I can view SNORT alerts in real time. And I'm building a new box that will become a dedicated firewall based on the 2.4 kernel.
Paranoid? Yeah, probably. But I don't like being rooted. In retrospect, my great sin was not so much that I didn't have a firewall, or even that I wasn't running all that great security software. My sin was running apps with both known exploits and available security updates. I might as well have put up a blinking neon sign reading, "Crack Me!" Sure enough, somebody did. If you're reading this in the same state I was in last week, I strongly recommend that you move. It's no place to be.
Resources
ACID information page: http://www.cert.org/kb/acid
chkrootkit homepage: http://www.chkrootkit.org
FreeVeracity homepage: http://www.freeveracity.org/
Max Vision Network Security: http://www.maxvision.net
NMAP homepage: http://www.nmap.org
Psionic homepage: http://www.psionic.com
SNORT Network Intrusion Detection: http://www.snort.org
"Understanding Stealth Scans: Forewarned is Forearmed," Joe Barr (LinuxWorld.com, March 2001): http://www.itworld.com/Sec/2202/LWD010321vcontrol3/
"Bob Young, Tete-a-Tete With the Monopoly," Joe Barr (LinuxWorld.com, March 2001): http://www.itworld.com/Comp/2362/LWD010328vcontrol4/
Top 50 Security Tools: http://www.nmap.org/tools.html
LinuxWorld.com