<<< Date Index >>>     <<< Thread Index >>>

Solaris Runtime Linker - Exploit Detection



This is a demonstration of exploit detection using the Solaris implementation 
of C2 Auditing (BSM) to detect the system has been compromised.  Of course , it 
helps to be logging locally as well to a secure central log server or protected 
media.

This was tested on an unpatched Solaris 10 Sparc system.

References:
http://www.securityfocus.com/bid/14074
http://sunsolve.sun.com/search/document.do"assetkey=1-26-101794-1
  Sun Document ID: 101794

C2 (BSM) Detection of Exploit
 
  Start of BSM Trace
 
  Comment: I am an unprivileged user here. Audit userid/groupid is pete:pete.  
  Effective userid/groupid is pete:pete.
 
header,81,2,setpgrp(2),,megadeth.metalrock.ripnet,2005-07-02 18:44:46.576 -05:00
  subject,pete,pete,pete,pete,pete,1400,4075230069,8199 196630 
whitesnake-2.metalrock.ripnet
  return,success,1400
 
  Comment: I run "ping" (which is setuid root) Note the value of the "LD_AUDIT" 
environment variable.  This is the "Red Flag".  LD_AUDIT should not be set at 
all on a normal system.
 LD_AUDIT redirects program execution to the vulnerable library, created by an 
unprivileged user.
 
header,976,2,execve(2),,megadeth.metalrock.ripnet,2005-07-02 18:44:46.598 -05:00
  path,/usr/sbin/ping
  attribute,104555,root,bin,136,3003,0
  exec_args,1,ping
  
exec_env,20,MANPATH=/usr/dt/man:/usr/man:/usr/openwin/share/man:/usr/sfw/man:/opt/sfw/man:
  /usr/local/man:/opt/SUNWppro/man:/opt/ipf/man,TERM=xterm,
  SHELL=/bin/bash,SSH_CLIENT=192.168.150.254 32799 
22,OLDPWD=/users/pete/ShellCode,
  
SSH_TTY=/dev/pts/5,USER=pete,MAIL=/var/mail//pete,PATH=/bin:/usr/bin:/usr/sbin:/sbin:/usr/ucb:
  
/etc:/usr/dt/bin:/usr/openwin/bin:/usr/ccs/bin:/usr/sadm/bin:/usr/sadm/admin/bin:
  
/usr/sfw/bin:/usr/sfw/sbin:/opt/sfw/bin:/opt/sfw/sbin:/usr/proc/bin:/opt/SUNWppro/bin:
  
/usr/local/bin:/usr/local/sbin:/opt/PGPcmdln:.,PWD=/users/pete/ShellCode/danger,
  JAVA_HOME=/usr/java,EDITOR=vi,TZ=US/Central,SHLVL=1,HOME=/users/pete,
  
LD_AUDIT=/users/pete/danger/break-sec.so,LOGNAME=pete,SSH_CONNECTION=192.168.150.254
 32799
  192.168.1.10 22,DISPLAY=localhost:10.0,_=/usr/sbin/ping
  path,/lib/ld.so.1
  attribute,100755,root,bin,136,3162,0
 
  Comment: The effective userID is now root; this is to be expected as ping is 
a setuid root program. However, the program should exit immediately.
 
subject,pete,root,pete,pete,pete,1433,4075230069,8199 196630 
whitesnake-2.metalrock.ripnet
  return,success,0
  header,108,2,old setuid(2),,megadeth.metalrock.ripnet,2005-07-02 18:44:46.606 
-05:00
  argument,1,0x0,uid
  subject,pete,root,pete,root,pete,1433,4075230069,8199 196630 
whitesnake-2.metalrock.ripnet
  use of privilege,successful use of priv,proc_setid
  return,success,0
 
  Comment: This is where the program execution is redirected to the exploit 
library via the
  LD_AUDIT environment variable. A shell is executed (/bin/ksh).
  The effective userID and groupID is still root and the user pete has a root 
shell.
 
header,198,2,execve(2),,megadeth.metalrock.ripnet,2005-07-02 18:44:46.608 -05:00
  path,/usr/bin/ksh
  attribute,100555,root,bin,136,330,0
  exec_args,1,/bin/ksh
  exec_env,0,path,/lib/ld.so.1
  attribute,100755,root,bin,136,3162,0
  subject,pete,root,pete,root,pete,1433,4075230069,8199 196630 
whitesnake-2.metalrock.ripnet
  return,success,0
  header,99,2,fork1(2),,megadeth.metalrock.ripnet,2005-07-02 18:44:46.616 -05:00
  argument,0,0x59a,child PID
  subject,pete,root,pete,root,pete,1433,4075230069,8199 196630 
whitesnake-2.metalrock.ripnet
  return,success,0
 
  End of BSM Trace
 
  An unprivileged user has now circumvented the security of the system.  
  The user has root shell and has full control of the system!
 
  BSM enabled the detection of this compromise by logging the following 
combination of events:
  1. Detecting the "LD_AUDIT" environment variable being set by an unprivileged 
user.
  2. Detecting the execution of a setuid root program (ping) by an unprivileged 
user (normally ok).
  3. Detecting the string "use of privilege,successful use of priv,proc_setid"
  4. Detecting the immediate execution of a shell as the effective user id 
"root" by the unprivileged user.
 
  The non-default BSM policies that must be enabled are "argv", and "arge".  
The "ex" BSM flag must also be set.
  This configuration logs program arguments and the environment in which the 
program is
  executing respectively.  The "arge" policy enabled the discovery that 
"LD_AUDIT" environment
  variable was set inappropriately, which simplifies the analysis.

Conclusion

If a Solaris administrator configures BSM appropriately, there ARE "reliable 
symptoms that would indicate the described issue has been exploited to gain 
elevated privileges", which is contrary to what Sun Document ID: 101794
states in the "Symptoms" section.  I have informed  SUN Sun of this information.