297 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			297 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
Compromise FAQ
 | 
						|
 | 
						|
Version: 2.0
 | 
						|
-------------------------------------------------------------------------------
 | 
						|
This Security FAQ is a resource provided by:
 | 
						|
 | 
						|
     Internet Security Systems, Inc.
 | 
						|
     2000 Miller Court West            Tel: (404) 441-2531
 | 
						|
     Norcross, Georgia  30071          Fax: (404) 441-2431
 | 
						|
 | 
						|
     - Computer Security Consulting - Penetration Analysis of Networks -
 | 
						|
 | 
						|
-------------------------------------------------------------------------------
 | 
						|
To get the newest updates of Security files check the following services:
 | 
						|
 | 
						|
     mail info@iss.net with "send index" in message
 | 
						|
     http://iss.net/~iss
 | 
						|
     ftp iss.net /pub/
 | 
						|
 | 
						|
-------------------------------------------------------------------------------
 | 
						|
 | 
						|
What if your Machines are Compromised by an Intruder.
 | 
						|
 | 
						|
This FAQ deals with some suggestions for securing your Unix machine after it
 | 
						|
has already been compromised. Even if your machines have not been compromised,
 | 
						|
there are many helpful tips on securing a machine in this paper.
 | 
						|
 | 
						|
  1.  Try to trace/follow the intruder back to his origin via looking at
 | 
						|
 | 
						|
       1.  who
 | 
						|
       2.  w
 | 
						|
       3.  last
 | 
						|
       4.  lastcomm
 | 
						|
       5.  netstat
 | 
						|
       6.  snmpnetstat
 | 
						|
       7.  router information.
 | 
						|
       8.  /var/adm/messages (many crackers send e-mail to their "home"
 | 
						|
          accounts)
 | 
						|
       9.  syslog (sends logs to other hosts as well)
 | 
						|
      10.  wrapper logs
 | 
						|
      11.  do a 'finger' to all local users(and check where they last logged in
 | 
						|
          from)
 | 
						|
      12.  history files from shells, such as .history, .rchist, and similiar
 | 
						|
          files.
 | 
						|
 | 
						|
     Footnote: 'who', 'w', 'last', and 'lastcomm' are commands that rely on
 | 
						|
     /var/adm/pacct, /usr/adm/wtmp, and /etc/utmp to report the information to
 | 
						|
     you. Most backdoors will keep the intruder from being shown in these logs.
 | 
						|
     Even if the intruder has not installed any backdoors yet, it is trivial to
 | 
						|
     remove any detection in these logs. But they may just forget about one or
 | 
						|
     two of them. Especially if you have some additional, non-standard ones.
 | 
						|
 | 
						|
     Suggestion: Install xinetd or tcp_wrapper that will log all connections to
 | 
						|
     your machine to see if someone is knocking on its doors. Forward syslogs
 | 
						|
     to another machine so intruder will not easily detect the logs and modify.
 | 
						|
     Other possibilities: netlog from net.tamu.edu:/pub/security.
 | 
						|
 | 
						|
     It might be wise to monitor the intruder via some ethernet sniffer to see
 | 
						|
     how he is exploiting his systems before taking corrective measures.
 | 
						|
 | 
						|
  2.  Close the machine from outside access. Remove from network to stop
 | 
						|
     further access via intruder. If the intruder finds out that the
 | 
						|
     administrator is unto him, he may try to hide his tracks by rm -rf /.
 | 
						|
 | 
						|
  3.  Check the binaries with the originals. Especially check the following
 | 
						|
     binaries because they are commonly replaced backdoors for regaining
 | 
						|
     access:
 | 
						|
 | 
						|
       1.  /bin/login
 | 
						|
       2.  all the /usr/etc/in.* files (ie. in.telnetd)
 | 
						|
       3.  and /lib/libc.so.* (on Suns).
 | 
						|
       4.  anything called from inetd
 | 
						|
 | 
						|
     Other commonly replaced backdoor binaries:
 | 
						|
 | 
						|
       1.  netstat - allows hiding connections
 | 
						|
       2.  ps - allows hiding processes (ie Crack)
 | 
						|
       3.  ls - allows hiding directories
 | 
						|
       4.  ifconfig - hides the fact that promiscuity mode is on the ethernet
 | 
						|
       5.  sum - fools the checksum for binaries, not necessarily replaced
 | 
						|
          anymore because its possible to change the checksum of the binaries
 | 
						|
          to the correct value without modifying sum. *EMPHASIZE* Do NOT Rely
 | 
						|
          on sum.
 | 
						|
 | 
						|
     Use 'ls -lac' to find the real modification time of files. Check /etc/wtmp
 | 
						|
     (if you still have one) for any system time adjustments. Check the files
 | 
						|
     with the distribution media (CD or tape) or calculate MD5 checksums and
 | 
						|
     compare them with the originals kept offline (you did calculate them
 | 
						|
     sometime ago, didn't you?) Suggestion: cmp the files with copies that are
 | 
						|
     known to be good.
 | 
						|
 | 
						|
     Another popular backdoor is suid'ing a common command (ie. /bin/time) to
 | 
						|
     allow root access with regular accounts.
 | 
						|
 | 
						|
     To find all suid programs you may use:
 | 
						|
 | 
						|
          find / -type f -perm -4000 -ls
 | 
						|
 | 
						|
     To be thorough you may need to re-load the entire OS to make sure there
 | 
						|
     are no backdoors. Tripwire helps prevent modifying binaries and system
 | 
						|
     files (ie. inetd.conf) on the system, without the administrator knowing.
 | 
						|
 | 
						|
  4.  Implement some password scheme for your users to verify that they change
 | 
						|
     their passwords often. Install anlpasswd, npasswd, or passwd+ in place of
 | 
						|
     passwd (or yppasswd) so that your users are forced to set reasonable
 | 
						|
     passwords. Then run Crack, which is available on
 | 
						|
     ftp.cert.org:/pub/tools/crack to make sure that your users aren't
 | 
						|
     bypassing the password check. Crack ensures that users are picking
 | 
						|
     difficult passwords. With the network, clear text passwords are a problem.
 | 
						|
     Other possible choices: smart hubs (stops ethernet sniffing of the whole
 | 
						|
     LAN) and one-time password technology.
 | 
						|
 | 
						|
  5.  Check all the users' .rhosts and .forward files to make sure none of them
 | 
						|
     are weird or out of the ordinary. If .rhosts file contains '+ +', the
 | 
						|
     account can be accessed anywhere by anyone without a password. COPS has a
 | 
						|
     scripts for checking .rhosts.
 | 
						|
 | 
						|
          find / -name .rhosts -ls -o -name .forward -ls
 | 
						|
 | 
						|
     Look also for all the files created/modified in the time you are
 | 
						|
     suspecting the break-in has taken place, eg:
 | 
						|
 | 
						|
          find / -ctime -2 -ctime +1 -ls
 | 
						|
 | 
						|
     To find all the files modified not less than one day ago, but not more
 | 
						|
     than 2.
 | 
						|
 | 
						|
     All .login, .logout, .profile, .cshrc files are also worth looking at (at
 | 
						|
     least for the modification date/time). Make sure there are no '.rhosts'
 | 
						|
     for the locked or special accounts (like 'news', 'sundiag', 'sync', etc.)
 | 
						|
     The shell for such accounts should be something like '/bin/false' anyway
 | 
						|
     (and not '/bin/sh') to make them more secure. Also search for directories
 | 
						|
     that have like ". ", ".. " as names. They are usually found in /tmp ,
 | 
						|
     /var/tmp, /usr/spool/* and any other publicly writeable directory.
 | 
						|
 | 
						|
  6.  Check to make sure your NFS exports are not world writable to everyone.
 | 
						|
     NFSwatch available on harbor.ecn.purdue.edu:/pub/davy , a program by David
 | 
						|
     Curry, will log any NFS transactions that are taking place. Try 'showmount
 | 
						|
     -e' to see whether system agrees with your opinion of what are you
 | 
						|
     exporting and where. There are bugs in some nfsd implementations which
 | 
						|
     ignore the access lists when they exceed some limit (256 bytes). Check
 | 
						|
     also what are you IMPORTING!!! Use 'nosuid' flag whenever possible. You do
 | 
						|
     not want to be cracked by a sysadm from another host (or a cracker there)
 | 
						|
     running suid programs mounted via NFS, do you?
 | 
						|
 | 
						|
  7.  Make sure you have implemented the newest sendmail daemon. Old sendmail
 | 
						|
     daemons allowed remote execution of commands on any Unix machine. See the
 | 
						|
     computer-security/security-patch FAQ.
 | 
						|
 | 
						|
  8.  Try to install all the security patches available from the vendor on your
 | 
						|
     machine. See the computer-security/security-patch FAQ.
 | 
						|
 | 
						|
  9.  Here is a check list of common ways that a machine is vulnerable:
 | 
						|
 | 
						|
       1.  Do an rpcinfo -p on your machine to make sure it is not running any
 | 
						|
          processes that are not needed. (ie. rexd).
 | 
						|
 | 
						|
       2.  Check for '+' in /etc/hosts.equiv.
 | 
						|
 | 
						|
       3.  Check whether tftp is disabled on your system. If not - disable it,
 | 
						|
          or at least use '-s' flag to chroot it to some safe area, if you
 | 
						|
          really can't live without it (it is mostly used for booting up
 | 
						|
          Xterminals, but sometimes can be avoided by NFS-mounting appropriate
 | 
						|
          disks). Under no circumstances you should run it as root. Change the
 | 
						|
          line describing it in /etc/inetd.conf to something like:
 | 
						|
 | 
						|
               tftp dgram udp wait nobody /usr/etc/in.tftpd in.tftpd -s
 | 
						|
               /tftpboot
 | 
						|
 | 
						|
          or better yet, use tcpd wrapper program to protect it from addresses
 | 
						|
          which should not get access to tftp and log all other connections:
 | 
						|
 | 
						|
               tftp dgram udp wait nobody /usr/etc/tcpd in.tftpd -s
 | 
						|
               /tftpboot
 | 
						|
 | 
						|
          and edit appropriately /etc/hosts.allow to restrict access to
 | 
						|
          in.tftpd to only those addresses that really need it.
 | 
						|
 | 
						|
       4.  Check crontabs and at-jobs. Make sure there are no delayed bombs
 | 
						|
          which will explode after you think you have got rid of all the nasty
 | 
						|
          things left by a intruder.
 | 
						|
 | 
						|
       5.  Check /etc/rc.boot /etc/rc.local (SYSV: /etc/rc?.d/* ) and other
 | 
						|
          files cruicial for the system startup. (The best would be if you
 | 
						|
          could compare them with the copies kept off-line). Check all other
 | 
						|
          files containing system configuration (sendmail.cf, sendmail.fc,
 | 
						|
          hosts.allow, at.allow, at.deny, cron.allow, hosts, hosts.lpd, etc.)
 | 
						|
          In 'aliases' look for aliases expanding to some unusual programs
 | 
						|
          (uudecode is one but example).
 | 
						|
 | 
						|
       6.  Check your inetd.conf and /etc/services files to find if there are
 | 
						|
          no additional services set up by an intruder.
 | 
						|
 | 
						|
       7.  Copy all the log files you still have (pacct, wtmp, lastlog, sulog,
 | 
						|
          syslog, authlog, any additional logs you have set up earlier) to some
 | 
						|
          safe place (offline) so you may examine them later. Otherwise, do not
 | 
						|
          be surprised if they disappear the next day when the cracker realises
 | 
						|
          he forgot to remove one of them. Use your own imagination to find
 | 
						|
          what other traces he could have left in your system (What about
 | 
						|
          /tmp/* files? Check them BEFORE you reboot).
 | 
						|
 | 
						|
       8.  Make backup copy of /etc/passwd (best offline) then change all root
 | 
						|
          passwords (after verifying that 'su' and 'passwd' are not the trojan
 | 
						|
          versions left by an intruder). It may sound like a horrible thing to
 | 
						|
          do (especially if you have something like 2000 users) but *do* lock
 | 
						|
          them all by putting '*' in the password field. If the intruder has a
 | 
						|
          copy of your passwords file he may possibly sooner or later guess all
 | 
						|
          the passwords contained there (It is all the matter of proper
 | 
						|
          dictionaries). In fact he could have inserted few passwords that he
 | 
						|
          only knows for some users who for example have not logged in for a
 | 
						|
          long time.
 | 
						|
 | 
						|
          On the NIS servers check not only the real /etc/passwd /etc/groups
 | 
						|
          etc files but also those used for building NIS maps (if they are
 | 
						|
          different).
 | 
						|
 | 
						|
       9.  Check if your anonymous ftp (and other services) are configured
 | 
						|
          properly (if you have any of course) See the
 | 
						|
          computer-security/anonymous-ftp FAQ.
 | 
						|
 | 
						|
      10.  If you want to make your life easier next time (or if you still
 | 
						|
          cannot get rid of an intruder) consider installing 'ident' daemon.
 | 
						|
          Together with tcpd on a set of hosts it can be used to find what
 | 
						|
          accounts the intruder is using.
 | 
						|
 | 
						|
      11.  Make sure the only 'secure' terminal is console (if at all). This
 | 
						|
          way you prevent root logins just from the net. Maybe it is not a big
 | 
						|
          deal as if somebody knows the root password he may already know other
 | 
						|
          peoples' passwords too, but maybe not?
 | 
						|
 | 
						|
      12.  Check hosts.equiv, .rhosts, and hosts.lpd for having # as comments
 | 
						|
          within those files. If an intruder changes his hostname to #, it will
 | 
						|
          be considered a trusted host and allow him to access your machines.
 | 
						|
 | 
						|
      13.  And remember... There are so many ways that somebody could have
 | 
						|
          modified your system, that you really have to have your eyes and ears
 | 
						|
          wide open for a loooooong long time. Above, are the pointers just to
 | 
						|
          the most obvious things to check.
 | 
						|
 | 
						|
 10.  Mail all the sites that you were able to find out that the intruder was
 | 
						|
     going through and warn them. Also, CC: cert@cert.org. Check all the sites
 | 
						|
     in your near-by, ie. in your domain/institution/whatever. It's usually
 | 
						|
     trivial for a hacker to get to another system by a simple 'rlogin' if the
 | 
						|
     two systems have a common subset of users (and using .rhosts to make the
 | 
						|
     access easier).
 | 
						|
 | 
						|
 11.  A preventive from stopping many intruders from even trying your network
 | 
						|
     is to install a firewall.
 | 
						|
 | 
						|
     Side-effects: Firewalls may be expensive; filtering may slow down the
 | 
						|
     network. Consider blocking nfs (port 2049/udp) and portmap(111/udp) on
 | 
						|
     your router. The authentication and access controls of these protocols is
 | 
						|
     often minimal. Suggestion: Block all udp ports except DNS and NTP ports.
 | 
						|
     Kill all source routing packets. Kill all ip-forwarding packets.
 | 
						|
 | 
						|
Acknowledgements
 | 
						|
 | 
						|
Thanks to the following people for adding and shaping this FAQ:
 | 
						|
 | 
						|
Tomasz Surmacz <tsurmacz@asic.ict.pwr.wroc.pl>
 | 
						|
Wes Morgan (morgan@engr.uky.edu)
 | 
						|
Alan Hannan (alan@noc1.mid.net)
 | 
						|
Peter Van Epp <vanepp@sfu.ca>
 | 
						|
Richard Jones <electron@suburbia.apana.org.au>
 | 
						|
Wieste Venema <wietse@wzv.win.tue.nl>
 | 
						|
Adrian Rodriguez <adrian@caip.rutgers.edu>
 | 
						|
Jill Bowyer <jbowyer@selma.hq.af.mil>
 | 
						|
Andy Mell <amell@cup.cam.ac.uk>
 | 
						|
 | 
						|
-------------------------------------------------------------------------------
 | 
						|
 | 
						|
Copyright
 | 
						|
 | 
						|
This paper is Copyright (c) 1994, 1995
 | 
						|
   by Christopher Klaus of Internet Security Systems, Inc.
 | 
						|
 | 
						|
Permission is hereby granted to give away free copies electronically. You may
 | 
						|
distribute, transfer, or spread this paper electronically. You may not pretend
 | 
						|
that you wrote it. This copyright notice must be maintained in any copy made.
 | 
						|
If you wish to reprint the whole or any part of this paper in any other medium
 | 
						|
excluding electronic medium, please ask the author for permission.
 | 
						|
 | 
						|
Disclaimer
 | 
						|
 | 
						|
The information within this paper may change without notice. Use of this
 | 
						|
information constitutes acceptance for use in an AS IS condition. There are NO
 | 
						|
warranties with regard to this information. In no event shall the author be
 | 
						|
liable for any damages whatsoever arising out of or in connection with the use
 | 
						|
or spread of this information. Any use of this information is at the user's own
 | 
						|
risk.
 | 
						|
 | 
						|
Address of Author
 | 
						|
 | 
						|
Please send suggestions, updates, and comments to:
 | 
						|
Christopher Klaus <cklaus@iss.net> of Internet Security Systems, Inc.
 | 
						|
<iss@iss.net>
 |