After configuring network services, it is important to pay attention to
which ports are actually listening on the system's network
interfaces. Any open ports can be evidence of an intrusion.
There are two basic approaches for listing the ports that are listening
on the network. The less reliable approach is to query the network stack
by typing commands such as netstat -an or
lsof -i. This method is less reliable since these
programs do not connect to the machine from the network, but rather
check to see what is running on the system. For this reason, these
applications are frequent targets for replacement by attackers. In this
way, crackers attempt to cover their tracks if they open unauthorized
network ports.
A more reliable way to check which ports are listening on the network is
to use a port scanner such as nmap.
The following command issued from the console determines which ports
are listening for TCP connections from the network:
The output of this command looks like the following:
Starting nmap 3.55 ( https://www.insecure.org/nmap/ ) at 2004-09-24 13:49 EDT
Interesting ports on localhost.localdomain (127.0.0.1):
(The 1653 ports scanned but not shown below are in state: closed)
PORT STATE SERVICE
22/tcp open ssh
25/tcp open smtp
111/tcp open rpcbind
113/tcp open auth
631/tcp open ipp
834/tcp open unknown
2601/tcp open zebra
32774/tcp open sometimes-rpc11
Device type: general purpose
Running: Linux 2.4.X|2.5.X|2.6.X
OS details: Linux 2.5.25 - 2.6.3 or Gentoo 1.2 Linux 2.4.19 rc1-rc7)
Uptime 12.857 days (since Sat Sep 11 17:16:20 2004)
Nmap run completed -- 1 IP address (1 host up) scanned in 5.190 seconds |
This output shows the system is running
portmap due to the presence of the
sunrpc service. However, there is also a
mystery service on port 834. To check if the port is associated with
the official list of known services, type:
cat /etc/services | grep 834 |
This command returns no output. This indicates that while the port is in
the reserved range (meaning 0 through 1023) and requires root access to
open, it is not associated with a known service.
Next, check for information about the port using
netstat or lsof. To check for
port 834 using netstat, use the following command:
The command returns the following output:
tcp 0 0 0.0.0.0:834 0.0.0.0:* LISTEN 653/ypbind |
The presence of the open port in netstat is
reassuring because a cracker opening a port surreptitiously on a hacked
system would likely not allow it to be revealed through this
command. Also, the [p] option reveals the process id
(PID) of the service which opened the port. In this case, the open port
belongs to ypbind (NIS), which is an RPC service
handled in conjunction with the portmap service.
The lsof command reveals similar information
since it is also capable of linking open ports to services:
Below is the relevant portion of the output for this command:
ypbind 653 0 7u IPv4 1319 TCP *:834 (LISTEN)
ypbind 655 0 7u IPv4 1319 TCP *:834 (LISTEN)
ypbind 656 0 7u IPv4 1319 TCP *:834 (LISTEN)
ypbind 657 0 7u IPv4 1319 TCP *:834 (LISTEN) |
These tools reveal a great deal about the status of the services running
on a machine. These tools are flexible and can provide a wealth of
information about network services and configuration. Consulting the man
pages for lsof, netstat,
nmap, and services is therefore
highly recommended.