Contents:


About this document

1. Example: Hardening a Solaris Installations

The Solaris installation programme does not have a "build me a secure box" option. These notes outline how a standard Solaris 9 installation can be secured: the object is to have a box which can be accessed remotely via SSH and therefore used as a general purpose Unix server.

1.1. Patch and Firewall

First patch and firewall the machine.

1.2. Network-Related Daemons

In this section, our aim is to permanently stop network-related daemons which are not required, or better still, remove all software related to them. (Removal means fewer tools for intruders to play with.)

Whilst there are high-level, graphical tools which help with Solaris software package administration, we require something more fine-grained; in addition, it is beneficial to understand the Solaris package system so we opt for use of the command-line tools such as pkginfo and pkgrm. And /var/sadm/install/contents tells us which files belong to which packages.

The remainder of this section reflects the rough journal of the securing of and a real installation. As such it is not a textbook example, but a real one!

Initial Scan of Open Ports

Scanning the Solaris box with nmap shows a scary number of possible entry points for would-be hackers:

  7/tcp      open        echo                    
  9/tcp      open        discard                 
  13/tcp     open        daytime                 
  19/tcp     open        chargen                 
  21/tcp     open        ftp                     
  22/tcp     open        ssh                     
  23/tcp     open        telnet                  
  37/tcp     open        time                    
  79/tcp     open        finger                  
  111/tcp    open        sunrpc                   
  512/tcp    open        exec                    
  513/tcp    open        login                   
  514/tcp    open        shell                   
  515/tcp    open        printer                 
  540/tcp    open        uucp                    
  587/tcp    open        submission
  898/tcp    open        unknown                 
  4045/tcp   open        lockd                   
  6112/tcp   open        dtspc                   
  7100/tcp   open        font-service            
  32771/tcp  open        sometimes-rpc5          
  32772/tcp  open        sometimes-rpc7          
  32773/tcp  open        sometimes-rpc9          
  32774/tcp  open        sometimes-rpc11         
  32775/tcp  open        sometimes-rpc13         
  32776/tcp  open        sometimes-rpc15         
  32777/tcp  open        sometimes-rpc17         
  32778/tcp  open        sometimes-rpc19         
  32779/tcp  open        sometimes-rpc21         
  32780/tcp  open        sometimes-rpc23     

inetd

Start simple: SSH does not run out of the super-server, inetd, so we comment out almost everything from /etc/inetd.conf and

    kill -HUP <inetd pid>

Network-Related Packages (r-commands; finger)

Next, look for network-related packages.

    pkginfo | grep -i network  
yields three SUNW packages to uninstall --- shown also are packages which depend on those we want to remove (indentation indicates a package dependency --- an indented package depends on the above, less indented package):
  SUNWrcmdc        Remote Network Client Commands
      SUNWppm        Solaris Print Manager
          SUNWmp        MP Print Filter
      SUNWscpu        Source Compatibility, (Usr)
          SUNWbcp        SunOS 4.x Binary Compatibility
              SUNWscbcp        SPARCompilers Binary Compatibility Libraries

  SUNWrcmdr        Remote Network Server Commands (Root)
  SUNWrcmds        Remote Network Server Commands (Usr)
Removing all the above, and bringing the machine into single-user mode and backup, the following are gone (good!):
  79/tcp     open        finger                  
  512/tcp    open        exec                    # rexec
  513/tcp    open        login                   # rlogin
  514/tcp    open        shell                   # rsh

Printer Daemon

Next, we target the printer daemon:

    pkginfo | grep -i printer
yields candidates: SUNWpsu Solaris Print - LP Server, (usr) SUNWpsr Solaris Print - LP Server, (root) SUNWpcu Solaris Print - Client, (usr) SUNWscplp Solaris Print - Source Compatibility SUNWpcr Solaris Print - Client, (root) Removal, moving to single-user mode and bringing the system back up we find
    515/tcp    open        printer                 
has gone.

UUCP, FTP, Telnet and NTP

And now, UUCP, FTP, Telnet and NTP:

    pkginfo | grep -i uucp
    pkginfo | grep -i ftp
    pkginfo | grep -i telnet
    pkginfo | grep -i ntp    


yielded

     SUNWbnur       Networking UUCP Utilities, (Root)
     SUNWbnuu       Networking UUCP Utilities, (Usr)

     SUNWftpr       FTP Server, (Root)
     SUNWftpu       FTP Server, (Usr)

     SUNWtnetr      Telnet Server Daemon (Root)
     SUNWtnetc      Telnet Command (client)
     SUNWtnetd      Telnet Server Daemon (Usr)

     SUNWntpr       NTP, (Root)
     SUNWntpu       NTP, (Usr) 

eliminating

    540/tcp    open        uucp                    
    21/tcp     open        ftp                     
    23/tcp     open        ftp                     
                                  # The ntp daemon was not actually listening.

X Font Server

The X font server:

    SUNWxwfs        X Window System Font server

    7100/tcp   open        font-service            

YP, NIS+, NFS, Samba, PPP, HTTP and DHCP

More Services: YP/NIS, NIS+, NFS, Samba, PPP, Web, DHCP

  SUNWypr        NIS Server for Solaris (root)
  SUNWypu        NIS Server for Solaris (usr)


  SUNWnisr       Network Information System, (Root)
  SUNWnisu       Network Information System, (Usr)


  SUNWnfscr      Network File System (NFS) client support (Root)
      SUNWvolu       Volume Management, (Usr)
          SUNWvolg        Volume Management Graphical User Interface
  SUNWnfscu      Network File System (NFS) client support (Usr)
  SUNWnfscx      Network File System (NFS) client support (Root) (64-bit)
  SUNWnfssr      Network File System (NFS) server support (Root)
  SUNWnfssu      Network File System (NFS) server support (Usr)
  SUNWnfssx      Network File System (NFS) server support (Root) (64-bit)

   
  SUNWsmbac      samba - A Windows SMB/CIFS fileserver for UNIX (client)
  SUNWsmbar      samba - A Windows SMB/CIFS fileserver for UNIX (Root)
  SUNWsmbau      samba - A Windows SMB/CIFS fileserver for UNIX (Usr)


  SUNWpppd       Solaris PPP Device Drivers
  SUNWpppdr      Solaris PPP configuration files
  SUNWpppdt      Solaris PPP Tunneling
  SUNWpppdu      Solaris PPP daemon and utilities
  SUNWpppdx      Solaris PPP Device Drivers (64-bit)
  SUNWpppg       GNU utilities for PPP


  SUNWapchr      Apache Web Server (root)
  SUNWapchu      Apache Web Server (usr)
  SUNWapchd      Apache Web Server (usr)


  SUNWtcatr      Tomcat Servlet/JSP Container (root)
  SUNWtcatu      Tomcat Servlet/JSP Container


  SUNWdhcm       DHCP Manager
  SUNWdhcsb      Binary File Format Data Module for BOOTP/DHCP Services
  SUNWdhcsr      BOOTP/DHCP Server Services, (Root)
  SUNWdhcsu      BOOTP/DHCP Server Services, (Usr)

What's Left?

So what's left?

  22/tcp     open        ssh                     
  25/tcp     open        smtp                    
  111/tcp    open        sunrpc                  
  587/tcp    open        submission              
  6112/tcp   open        dtspc                   
  7100/tcp   open        font-service            
  32771/tcp  open        sometimes-rpc5          
  32772/tcp  open        sometimes-rpc7          
  32773/tcp  open        sometimes-rpc9          
  32774/tcp  open        sometimes-rpc11         
  32775/tcp  open        sometimes-rpc13         
  32776/tcp  open        sometimes-rpc15         
  32777/tcp  open        sometimes-rpc17         
  32778/tcp  open        sometimes-rpc19    
We have removed the X-font-server package and no XFS-type daemon is running, but the machine is still listening on 7100!?!? Aha! The font-server entry in inetd.conf is still there... Comment out.

Sendmail

Next up, Sendmail: we want to be able to send email but not receive it so rename and chmod 400 the sendmail init script in /etc/init.d and remove S88sendmail from rc2.d:

    mv sendmail __sendmail.orig_install.no_start
and eliminated
    25/tcp open smtp
Hmmm, port 587 also closed, I wonder what did that? Google [port 587 solaris]:
If you are using sendmail to receive messages (on port 25), you should turn off the Message Submission port (587/tcp). In /etc/mail/sendmail.cf, comment out
        O DaemonPortOptions=Port=587, Name=MSA, M=E 
    
with a hashmark
So we got one for free!

CDE (/usr/dt)

There is a load of RPC-related stuff to get rid of. CDE uses RPC and its crap anyway... There's also dtspc on 6112:

    fgrep dtspc /var/sadm/install/contents
yields
    /usr/dt/bin/dtspcd f none 0555 root bin 27376 27505 1016069365 SUNWdtdmn
    /usr/dt/config/dtspcdenv f none 0444 root bin 1183 21978 1016069365 SUNWdtdmn
    /usr/dt/share/man/man1m/dtspcd.1m f none 0444 root bin 5230 44603 1016073808 SUNWdtma
    /usr/dt/share/man/man4/dtspcdenv.4 f none 0444 root bin 5316 53514 1016073844 SUNWdtma
so remove
  SUNWdtma     CDE man pages
  SUNWdtdmn    CDE daemons
      SUNWscgui    Solaris Smart Card Administration GUI
      SUNWjmfp     Java Media Framework Player
      SUNWpdas     PDA Synchronization for Solaris
      SUNWdtjxt    Java Extensions
          SUNWdtdst    CDE Desktop Applications
              SUNWpmowu  Power Management OW Utilities, (Usr)
              SUNWdtnsc     Netscape Componentization Support for CDE
              SUNWpmowm  Power Management OW Utilities Man Pages
      SUNWdthe     CDE HELP RUNTIME
      SUNWdtezt      Solaris Desktop Extensions Applications
          SUNWdtmaz       Desktop Power Pack man pages
      SUNWdtim   Solaris CDE Image Viewer
      SUNWdtwm  CDE DESKTOP WINDOW MANAGER
      SUNWdtab  CDE DTBUILDER 
      SUNWdthev    CDE HELP VOLUMES
      SUNWdthez   Desktop Power Pack Help Volumes
      SUNWdtdem       CDE DEMOS

Solaris Management Tools

Noticed this on a restart:

    Shutting down Solaris Management Console server on port 898.
so
    pkginfo | grep -i management
so
    SUNWmcex       Solaris Management Console 2.1 (Examples)
    SUNWmcdev      Solaris Management Console 2.1 (Development Kit)
    SUNWmc         Solaris Management Console 2.1 (Server Components)
        SUNWwbmc       Solaris Management Console 2.1 (WBEM Components)
            SUNWmga   Solaris Management Applications
                SUNWdclnt    Solaris Diskless Client Management Application
                SUNWlvmg     Solaris Volume Management Application
                SUNWrmui     Resource Management User Interface Components
                SUNWpmgr     Solaris Patch Management Applications
        SUNWlvma    Solaris Volume Management APIs
        SUNWmga     Solaris Management Applications
    SUNWmcc        Solaris Management Console 2.1 (Client Components)
    SUNWmccom      Solaris Management Console 2.1 (Common Components)
then init s, init 3 had no effect! Try a reboot --- eliminated:
   898/tcp    open        unknown                 

Solaris Web Management Tools

A netstat -a | grep LIST shows up

    *.5987               *.*                0      0 49152      0 LISTEN
Google [port 5987 solaris]
The CIM Object Manager listens for remote method invocation (RMI) connections on RMI port 5987 and now listens for XML/HTTP connections on HTTP port 5988. (In the Solaris 8 software release and updates of the Solaris 8 release, the CIM Object Manager listened for XML/HTTP connections on default HTTP port 80.)
Solaris documentation indicates that CIM is part of WBEM.
    fgrep -i WBEM /var/sadm/install/contents
yields up
    SUNWmgapp  WBEM Management Applications
        SUNWrmwbu     Resource Management WBEM Instrumentation (usr)
        SUNWrmwbx Resource Management WBEM Instrumentation (64-bit

    SUNWwbcou       WBEM Services (usr)
Restart; eliminated!

Nearly There!

Aside from SSH, only RPC-related stuff left:

  22/tcp     open        ssh          
  111/tcp    open        sunrpc       
  32771/tcp  open        sometimes-rpc5          
  32772/tcp  open        sometimes-rpc7          
  32773/tcp  open        sometimes-rpc9          
  32774/tcp  open        sometimes-rpc11 

The Last Few RPC-Related Daemons

What processes are running?

    ps -ef
reveals
  rpc.ttdbserverd
  snmpXdmid
  dmispd
Of ToolTalk Google says:
CDE ToolTalk database server (ttdbserver) allows remote attackers to overwrite arbitrary memory locations with a zero, and possibly gain
and we know about SNMP...
    fgrep -i tooltalk /var/sadm/install/contents
gives candidates:
   SUNWtltk  ToolTalk runtime
       SUNWolrte    OPEN LOOK toolkits runtime environment
       SUNWtltkd    ToolTalk developer support
       SUNWtltkm    ToolTalk manual pages
       SUNWdtct     UTF-8 Code Conversion Tool
       SUNWxwdem    X Window System demo programs
       SUNWlpmsg    LP Alerts

    # ...and for SNMP :

    SUNWsacom Solstice Enterprise Agents 1.0.3 files for root file system
        SUNWmipr   Mobile-IP (Root)
            SUNWmipu    Mobile-IP (Usr)

Inetd and RPC: Finally

A final consideration of inetd and RPC --- we don't need the former since SSH runs independently and we don't want the latter, so:

    /etc/init.d/inetsvc stop    (to stop inetd)
    /etc/init.d/rpc stop  

    cd /etc/init.d
    mv inetsvc __inetsvc.orig_install.no_start
    mv rpc __rpc.orig_install.no_start
    chmod 400 __inetsvc.orig_install.no_start
    chmod 400 __rpc.orig_install.no_start

syslogd

That leaves no TCP listeners and one UDP listener:

      *.syslog                              Idle
The man page for syslogd indicates that the default behaviour is to listen.
    /etc/init.d/syslog:             # ...and /etc/rc?.d/S??syslog

        ## /usr/sbin/syslogd >/dev/msglog 2>&1 &
        /usr/sbin/syslogd -t >/dev/msglog 2>&1 &


    /etc/default/syslogd:

        LOG_FROM_REMOTE=NO          # ...from "YES"
and restart.


...cont'snext...