COPS(Computer Oracle and Password System) COPS COPS significa Computer Oracle and password system, que pretende descubrir posibles riesgos de seguridad dentro de un sistema Unix. ¿Quien desarrolló COPS? Esta herramienta fue desarrollada por Daniel Farmer y Eugene H. Spafford,en los laboratorios COAST de la Universidad de Purdue. ¿Qué problemas resuelve? El principal objetivo de cops es la detección de una gran variedad de posibles problemas de seguridad particulares de Unix como pueden ser: • Permisos de archivos, directorios y dispositivos del sistema. • Cuentas sin password. • Contenido, formato y seguridad de los archivos de grupos y password • Los programas y archivos que corren en /etc/rc* y en la tabla de cron. • La existencia de archivos SUID propiedad de root, y sus características • Verificación CRC de binarios. • ftp anónimo habilitado. • Posibles vulnerabilidad en los binarios. ¿Qué es COPS? COPS significa Computer Oracle and password system, y como ya se mensionó pretende descubrir posibles riesgos de seguridad dentro de un sistema Unix. Ultima versión de COPS La última versión liberada fue la 1.04 junto con la noticia que sería la última versión disponible. ¿Donde obtener COPS? Existen varios lugares de donde es seguro obtener via ftp la herramienta COPS: ftp://ftp.asc.unam.mx/pub/tools/cops.tar.gz ftp://ftp.cert.org/pub/tools/cops/cops.1.04.tar.gz ftp://coast.cs.purdue.edu/pub/tools/unix/cops/cops.1.04.tar.gz IMPORTANTE!! Asegurarse de obtener la herramienta de un lugar seguro, ya que de obtenerlo 1 COPS(Computer Oracle and Password System) de un servidor no seguro exponemos nuestro sistema innecesariamente. Configuración Cops está integrado por una serie de programas especializados en la búsqueda de algún tipo de vulnerabilidad dentro del sistema. Esta herramienta está integrada básicamente en los siguientes módulos: • Un conjunto de programas que intentan de forma automática detectar potenciales riesgos de seguridad. • Documentación. • El Script COPS de ejecución en shell y perl. Para construir los binarios de cops se requiere realizar los siguientes pasos: a)Obtener las rutas de dependencia entre archivos, y compiladores. (gcc, nroff, troff, etc.) $ ./reconfig b) Editar el shell script de cops y realizar las siguientes modificaciones según se requieran. $vi ./cops b.1) Cops requiere obtener la ruta completa donde se encuentran los módulos de cops, para esto debemos modificar la directiva SECURE de cops, esta directiva se localiza sobre la línea 93 y tiene la siguiente ruta por default. SECURE = /usr/foo/bar debe quedar: SECURE=/herramientas/cops_104 b.2) Cops requiere obtener información sobre el usuario que está ejecutando la herramienta y esta la obtiene de la variable SECURE_USERS, con la dirección electrónica por default: SECURE_USERS="[email protected]" modificar esta línea por el correo electrónico del usuario que ejecutará cops. Ejemplo: SECURE_USERS="usuario@maquina" 2 COPS(Computer Oracle and Password System) c) Si nuestro sistema tiene habilitado /etc/shadow, deshabilitar esta opción del cops se requiere comentar (usando el simbolo #) el módulo pass.chk, sobre la línea 198 dentro de cops. Se ve de la forma siguiente el código que se necesita comentar. if $TEST −n "$verbose" ; then $ECHO "**** pass.chk ****" >> $VERBUCKET ; fi $SECURE/pass.chk "−w ./pass.words d) Una cuenta valida en la mayoria de los sistemas es la cuenta ftp anonymous, para verificar su correcto funcionamiento si existe, podemos indicarlo dentro de cops. Sobre la línea 192 se encuentra el código que llama a la rutina de verificación de ftp.chk, se debe habilitar una bandera para lograr que esta verifique las opciones de ftp anonymous. if $TEST −n $verbose ; then $ECHO **** ftp.chk **** >> $VERBUCKET ; fi $SECURE/ftp.chk −a >>$RESULT 2>> $BIT_BUCKET e) Verificación del estado de los binarios del sistema mediante el módulo crc.chk. Ya que por default cops lo trae deshabilitado. La ejecución de este módulo se encuentra sobre la línea 218, para esto descomentamos (eliminando #) lo siguiente: #if $TEST −n $verbose ; then # $ECHO **** crc.chk **** >> $VERBUCKET ; fi #$SECURE/crc.chk 2>> $BIT_BUCKET # crc.chk puts it´s results in a file called crc.results ... #if $TEST −s $SECURE/crc_results ; then # $CAT $SECURE/crc_results >> $RESULT #fi f) La verificación de los binarios con SUID activados por default (passwd, su, lpr, etc.) En la línea 70 se activa el módulo suid.chk, por default no se realiza esta verificación. RUN_SUID=NO debe quedar: RUN_SUID=YES. Tambien descomentar 230−232 modificar el direcccionamiento. 3 COPS(Computer Oracle and Password System) # if $TEST "$RUN_SUID" = "YES" ;then # $SECURE/suid.chk > /dev/null 2>&1 # fi g) Por ultimo salvar los cambios realizados en el script cops. Compilación de los fuentes de COPS Como ya mencionamos cops está integrado por una serie de módulos programados en C, los cuales realizan la verificación fuerte del sistema, estos archivos se localizan en: /ruta/a/cops_104/src/ Para obtener el código ejecutable se requiere solamente de ejecutar: $ make all TIP!! En el caso de linux es necesario activar la bandera BRAINDEADFLAGS descomentando la linea siguiente: #BRAINDEADFLAGS= −lcrypt dentro del archivo makefile. Operación Después de haber compilado los fuentes de cops, solo se necesitará ejecutar el scripts cops el cual tiene la siguiente sintaxis: cops [−a architecture] [−b bit_bucket] [−s secure_dir] [−m user] [−f filter_file] [−dxvV] donde: −a : Especifica el subdirectorio arquitectura que deseamos ejecutar, Al ejecutar make install se generarán los binarios adecuados. −b : Especifica el bit bucket, donde se almacenarán todos los mensajes de error. −d : Enviará un reporte por correo electrónico si existen cambios desde la ultima vez que se ejecuto cops. −f : Especifica el archivo de filtro que cops usará para filtrar los mensajes de advertencia extraños. −m : Cops envía la salida por correo electrónico al usuario especificado. −x : Muestra la versión de cops. 4 COPS(Computer Oracle and Password System) −vV : Activa el modo de verbose. Ejemplo: Como ejecutar cops y obtener un reporte de la forma año_mes_dia. $ ./cops −v& Nota: Al terminar la ejecución de cops este generará un reporte con los resultados encontrados este resultado se encontrará sobre un directorio en la ruta que definimos dentro del script de cops el directorio tendrá el nombre de la máquina y dentro de este directorio se encontrará un archivo con la fecha de la auditoria con la característica siguiente: año_mes_dia. Tips Ejemplo: Ejecución de cops sobre una línea de crontab para verificar el estado en que se encuentra el sistema: 0 0 * * * /herramientas/cops_104/cops −v Otros sitios relacionados • Center for Education and Research in Information Assurance and Security (CERIAS) • Computer Emergency Response Team (CERT) 5