Tips de “Hardering” de seguridad para Servidores Linux (Parte II)

Linux-SecureEsta es la segunda parte de los “Tips de Hardering de seguridad para Servidores Linux” que había iniciado ya hace un tiempo largo.

En este segundo post vamos a explicar mas consejos y trucos para asegurar un sistema Linux. Espero que los consejos y trucos debajo descritos ayuden a asegurar su sistema Linux.

11. Deshabilitar IPv6

Si no estamos usando el protocolo IPv6, entonces debemos deshabilitarlo, porque la mayoría de las aplicaciones o políticas no requieren IPv6, y actualmente no se utiliza en servidores. Para desactivarlo, debemos ir al archivo de configuración de red y agregar las siguientes lineas:

12. Restringir a los usuarios de utilizar contraseñas anteriores

Esto es muy útil si desea restringir que los usuarios utilicen las mismas contraseñas antiguas. El archivo de contraseñas antiguas se encuentra en /etc/security/opasswd. Esto se puede lograr utilizando el modulo PAM.

Abrir el archivo ‘/etc/pam.d/system-auth‘ en RHEL/CentOS/Fedora.

Abrir el archivo ‘/etc/pam.d/common-password‘ en Ubuntu/Debian/Linux Mint.

Agregar la siguiente linea a la sección ‘auth

Agregar la siguiente linea a la sección ‘password‘ para restringir a los usuarios reutilizar las ultimas 5 contraseñas.

El servidor recordara solos los últimos 5 passwords. Si un usuario trata de utilizar cualquiera de las ultimas 5 contraseñas antiguas, saldrá el siguiente error:

13. Comprobar la caducidad de las contraseñas de usuarios

En Linux, las contraseñas de usuario se almacenan en el archivo ‘etc/shadow‘ en formato encriptado. Para comprobar la caducidad de las mismas, es necesario utilizar el comando ‘chage‘. Este comando muestra los detalles de la caducidad de las contraseñas junto con la fecha del ultimo cambio. Estos datos son utilizados por el sistema para decidir cuando un usuario debe cambiarla.

Para ver la información sobre la vigencia de la contraseña de cualquier usuario del sistema, como la fecha y hora de vencimiento, utilice el siguiente comando:

Para cambiar el tiempo de caducidad de cualquier usuario, utilice el siguiente comando:

14. Bloqueo y Desbloqueo de cuentas de usuario manual.

El bloqueo y desbloqueo de cuentas son características muy útiles, en lugar de eliminar una cuenta del sistema podemos bloquearla por una semana o un mes (por ejemplo, un usuario que se toma vacaciones). Para bloquear a un usuario especifico, se utiliza el siguiente comando:

Nota: El usuario bloqueo continuara disponible solo para el usuario root. El bloqueo se realiza mediante la sustitución de la contraseña cifrada por el string (!). Si alguien intenta acceder al sistema utilizando esta cuenta, recibirá un error similar al siguiente:

Para desbloquear o permitir acceso a una cuenta que fue bloqueada, utilice el siguiente comando (Esto eliminara el string (!) por la contraseña cifrada):

15. Forzar el uso de contraseñas mas seguras

Muchos usuarios utilizan contraseñas débiles, y estas pueden ser hackeadas por medio de ataques basados en diccionario o fuerza bruta. El modulo ‘pam_clicklib‘ esta disponible dentro de la pila de módulos PAM (Pluggable Authentication Modules) y obligara a los usuarios a establecer contraseñas mas seguras. Debemos abrir el siguiente archivo con algún editor:

Y agregue la siguiente linea usando los siguientes parámetros (credit, ucredit, dcredit y/o ocredit que son minúsculas, mayúsculas, números y otros caracteres especiales respectivamente.)

16. Habilitar IPTables (Firewall)

Es casi obligatorio activar el firewall de Linux para evitar el acceso no autorizado a los servidores. Aplicar reglas en IPTables para filtros entrantes, salientes y reenvío de paquetes. Podemos especificar la dirección de origen y de destino para permitir o denegar el numero de puerto udp/tcp especifico

En el futuro realizare un post explicando detalladamente como utilizar IPTables, por ahora les dejo esta guía (en Ingles) de uso de IPTables

17. Deshabilitar Ctrl+Alt+Delete en Inittab

En la mayoría de las distribuciones de Linux, al pulsar “ALT+CTRL+DEL” se activa el proceso de reinicio del sistema. Por lo tanto, no es buena idea tener esta opción activada, al menos en los servidores de producción, si alguien por error hace esto.

Esto se define en el archivo ‘etc/inittab‘, si nos fijamos bien en este archivo, se vera una linea similar a la siguiente. De forma predefinida, la linea no esta comentada. Tenemos que comentarla para desactivar la opción. En este ejemplo en particular, la secuencia de letras apagara el sistema:

18. Comprobar cuentas de usuario con contraseñas vacías

Cualquier cuenta sin contraseña significa una puerta abierta para un acceso no autorizado para cualquier persona en la red (LAN o WAN) y es un problema de seguridad dentro de un servidor Linux. Por lo tanto, debemos asegurarnos de que todas las cuentas tienen contraseñas seguras y nadie tenga acceso autorizado. Las cuentas sin contraseñas son un gran riesgo de seguridad y pueden ser fácilmente hackeables. Para comprobar si hay cuentas sin contraseña, utilizamos el siguiente comando:

19. Mostrar un Banner antes del login en SSH

Siempre es buena idea poner un banner legal o de seguridad con algunas advertencias antes de la autenticación en SSH. Para configurar este tipo de banners debemos hacer lo siguiente:

Podemos reformar cualquiera de los siguientes archivos, según nuestro interés

issue.net — Mostrara el banner antes de ingresar el password
motd — Mostrara el banner después de ingresar el password

Si queremos que el banner se muestre antes de ingresar el password

Aquí configuramos para que muestre el banner

agregamos la siguiente linea al archivo ‘sshd_config

Reiniciamos el servicio sshd para reflejar los cambios

Si queremos que el banner se muestre después de ingresar el password creamos el banner en el archivo

20. Revisar Logs regularmente

Una idea interesante es mover los logs a un servidor dedicado, esto evitara que un intruso pueda modificar fácilmente los logs. A continuación se muestran los logs comunes en Linux y su uso:

  • /var/log/message – Donde están disponibles los logs del sistema entero y de la actividad actual.
  • /var/log/auth.log – Logs de Autenticación
  • /var/log/kern.log – Logs del Kernel
  • /var/log/cron.log – Logs del demonio cron (cron jobs)
  • /var/log/maillog – Logs del servidor de Mail
  • /var/log/boot.log – Logs del booteo del sistema
  • /var/log/mysqld.log – Logs del servidor de DB MySQL
  • /var/log/secure – Logs de Autenticación
  • /var/log/utmp or /var/log/wtmp – Logs de registro de acceso
  • /var/log/yum.log – Log de YUM

21. Realizar Backup de los archivos importantes

En un sistema de producción, es necesario tener copias de seguridad de archivos importantes, y guardarlos en un lugar seguro, en un sitio remoto o fuera de las instalaciones en caso de recuperación de desastres.

22. Mantener la partición /boot como solo-lectura

El Kernel de Linux y los archivos relacionados se encuentran en el directorio/partición /boot, que esta configurada por defecto como lectura/escritura. Si lo cambiamos a solo-lectura reducimos el riesgo de modificación no autorizada de archivos de arranque críticos. Para ellos, abra el archivo ‘/etc/fstab’

Agregamos la siguiente linea en la parte inferior, guardamos y cerramos

Nota: Hay que tener en cuenta que necesitamos restablecer los cambios y volver a lectura-escritura si en el futuro necesitamos actualizar el kernel.

23. Ignorar ICMP (ping) o Solicitudes de Broadcast

Agregamos la siguiente linea en el archivo ‘/etc/sysctl.conf‘ para ignorar las solicitudes de ping o broadcast

Para levantar los nuevos ajustes/cambios ejecutamos el siguiente comando

Si creen que me olvide de algún consejo de seguridad o hardering de linux siéntanse libre de colaborar y lo incluiré en el futuro en alguna publicación.

Ethical Hacking: Informe de Resultados

aa_informeHoy día, tenemos disponible gran cantidad de material sobre temas relacionados con Ethical Hacking: cursos, libros, webs especializadas, etc. Todos explican que las fases de un pentest comienzan con information gathering, y terminan con la post-explotación y el borrado de evidencias, básicamente. Sin embargo, la mayoría de publicaciones que enseñan a hacer pentest, fallan en una parte muy importante: la elaboración del informe de resultados.

Está claro: es la parte que mas nos aburre. Es mucho más entretenido trabajar con Metasploit, una Shell, Scritps que con un procesador de textos, ¿verdad? 😉 Es vital tener bien claro que el informe es, en última instancia, es el producto que se le entrega al cliente. Si no somos capaces de plasmar y reflejar en texto el trabajo realizado, por muy bueno que sea el proceso seguido y el resultado obtenido, con un informe mediocre el esfuerzo habrá sido en vano. Esto lo aprendí cuando leí el libro “Ethical Hacking: Un enfoque metodológico para Profesionales“, escrito entre otros por Ezequiel Sallis y Claudio Caracciolo. Por eso me voy a tomar el atrevimiento de darles algunos consejos muy útiles para confeccionar un informe de calidad.

Para explicar el informe de resultados, antes hay que tener en cuenta un documento previo: el plan de pruebas. Este documento, que debe estar aprobado por el cliente, es la autorización para poder auditar lícitamente un recurso que no es tuyo. En él se describe básicamente qué se va a hacer, y hasta donde se va a llegar. Sin este documento firmado por el cliente, podríamos meternos en un gran problema, recuerden que ingresar sin permiso a un sistema es ilegal y esta penado por la ley. Incluye:

  • Ámbito de las pruebas. Qué se audita y qué se queda fuera.
  • Rangos de IP, tanto del cliente como de los auditores.
  • Planificación temporal, días y horas en las que tendrá lugar.
  • Personas de contacto. A quién llamar en caso de que algo caiga.
  • Tipos de pruebas, si se está autorizado a lanzar ataques DoS o de ingeniería social.
  • Propósito del analisis: para qué se va a hacer, qué se quiere conseguir.

Una vez aprobado el plan de pruebas, ya tenemos luz verde para empezar con el pentest. ¡Happy Hack & Have Fun!

Ok!. Ya está todo probado. Tenemos las notas que tomamos, capturas de pantalla, logs, y demás evidencias de las vulnerabilidades encontradas. Ahora, como ya hemos comentado, toca la parte de transformar toda esta información en un documento y que el cliente conozca todo lo que has descubierto.

En primer lugar, hay que preguntarse: ¿A quién va dirigido este informe? ¿Personal técnico? ¿Directivo? ¿Ambos? Por regla general, los informes de resultados van a ser leídos por varios departamentos, con perfiles muy diferentes. Por ello será necesario redactar una parte, con un resumen ejecutivo, sin entrar en detalles y otra parte con un análisis de las vulnerabilidades.

En el resumen ejecutivo, se enumerarán las vulnerabilidades encontradas. Según su criticidad, se pueden usar colores, puntuaciones, gráficos, etc, cuanto más visual, más claro quedará. Recuerden que el resumen ejecutivo debe redactarse en un lenguaje lo menos técnico posible. Se deben incluir también las recomendaciones generales para mitigar las vulnerabilidades, sin extenderse en detalles, y finalmente las conclusiones. Esta parte está relacionada con el plan de pruebas y el propósito del pentest. Respondería a preguntas como ¿puede salir la aplicación web a producción? ¿Es la red de mi empresa razonablemente segura?.

La otra parte del informe es el análisis de las vulnerabilidades. Aquí es donde se debe describir con todo lujo de detalles cuales han sido las pruebas realizadas, qué ha conseguido explotarse, adjuntar capturas de pantalla que lo demuestren, y una valoración del impacto, probabilidad de ocurrencia, y riesgo asociado a cada vulnerabilidad. Por último, unas recomendaciones sobre cómo mitigar la vulnerabilidad, sin escatimar en referencias.

Finalmente, también puede ser recomendable incluir un apéndice, con información ampliada que no sea esencial para describir las vulnerabilidades descubiertas, como resultados de herramientas, logs, etc y un glosario de términos, para aquellos acrónimos o términos técnicos relevantes.

Una vez terminado el informe, hay que recordar que la información contenida en dicho documento es muy sensible. El documento debe advertir claramente que su contenido tiene carácter confidencial. Por una parte, debe enviarse al cliente por una vía segura y cifrada, y por otra parte, es nuestra responsabilidad almacenar el informe con los permisos únicamente de los implicados en el proyecto.

Espero que hayan sido de utilidad estos consejos. Información ampliada e informes de ejemplo pueden encontrarse en los siguientes enlaces (en inglés):

Ejemplo informe de pentest Offensive Security [PDF]
SANS Reading Room, Writing a Penetration Testing Report [PDF]
Writing penetration testing resports
The penetration testing report

Tips de “Hardering” de seguridad para Servidores Linux (Parte I)

Linux-SecureTodo el mundo dice que Linux es seguro por default y estamos de acuerdo en cierta medida (hay temas discutibles). Sin embargo, Linux tiene incorporado un modelo de seguridad por default. Necesitamos ajustarlo y personalizarlo según la necesidad que tengamos de manera que pueda ayudar a hacer el sistema mas seguro. Linux es mas difícil de administrar, pero ofrece mas flexibilidad y opciones de configuración.

Asegurar un sistema en producción de ataques de hackers y crackers es una tarea difícil para un SysAdmin. Este no es el primer post relacionado a “Como proteger un sistema Linux” o “Hardering de Linux“. En este post vamos a explicar algunos consejos y trucos para asegurar un sistema Linux. Espero que los consejos y trucos debajo descritos ayuden a asegurar un sistema.

1. Seguridad Física del Sistema

Configure la BIOS des-habilitando la opción de arranque desde CD/DVD, dispositivos externos y unidades de Diskettes. A continuación, habilite la contraseña de la BIOS y también proteja con contraseña el gestor de arranque (GRUB, LiLo, etc) para restringir el acceso físico de su sistema.

2. Particiones de Disco

Es importante tener diferentes particiones para obtener mayor seguridad de los datos en caso de que ocurra cualquier desastre. Mediante la creación de diferentes particiones los datos se pueden separar y agrupar. Cuando ocurre un accidente inesperado, se dañaran solo los datos de esa partición, mientras que los datos de las demás particiones sobrevivirán. Asegúrese de que dispone de las particiones separadas abajo listadas y también de que las aplicaciones de terceros se deben instalar en sistemas de archivos separados en /opt.

3. Minimizar los Paquetes instalados para minimizar las vulnerabilidades

¿De verdad necesitas todo tipo de servicios instalados?. Se recomienda evitar la instalación de paquetes inútiles para evitar vulnerabilidades que dichas instalaciones puedan tener. Esto puede minimizar el riesgo de que al comprometerse un servicio pueda llevar a que otros servicios sean comprometidos. Buscar y des-instalar o des-habilitar los servicios que no usemos del servidor para minimizar el riesgo de vulnerabilidades. Utiliza el comando “chkconfig” para averiguar que servicios se están ejecutando en runlevel 3.

Nota: Si el servidor esta instalado en idioma español la cadena es ‘3:activo’

Una vez que hayas averiguado que servicios innecesarios se están ejecutando, hay que desactivarlos con el siguiente comando:

Utiliza la herramienta del gestor de paquetes como “yum” o “apt-get” para listar todos los paquetes instalados en el sistema y puedes eliminar los que no sean necesarios con el siguiente comando:

4. Comprobar los puertos abiertos (listening)

Con la ayuda del comando de red “netstat” se pueden ver todos los puertos abiertos y programas asociados a dicho puerto. Como dije antes se puede usar el comando “chkconfig” para des-habilitar los servicios de red que no usemos en el sistema.

5. Utilizar SSH

Los protocolos Telnet y rlogin utilizan texto plano, sin encriptación lo cual es muy inseguro. SSH es un protocolo seguro que utiliza tecnología de encriptación durante la comunicación con el servidor.

Nunca iniciar sesión directamente como root a menos que sea necesario. Utilizar “sudo” para ejecutar comandos como administrador. Los usuarios que pueden ejecutar sudo se especifican en el archivo /etc/sudoers. También se puede editar con la utilidad “visudo” que se abre con el editor VI.

También es recomendable cambiar el puerto predeterminado (22) por algún otro mas alto. Abrimos el archivo principal de configuración de SSH y realizamos algunos cambios de parámetros para restringir el acceso de usuarios:

Des-habilitar el inicio de sesión “root”

Permitir solo usuarios especificados

Utilizar Protocolo SSH v2

6. Mantener el sistema actualizado

Siempre mantenga el sistema actualizado con los últimos parches lanzados, parches de seguridad y kernel cuando estén disponibles.

7. Bloqueo de CronJobs

cron tiene su propia función incorporada, en la que permite especificar quien puede y quien no puede ejecutar trabajos. Esto es controlado por dos archivos llamados /etc/cron.allow y /etc/cron.deny. Para bloquear un usuario y que no pueda usar cron, simplemente el/los nombres de usuarios en cron.deny y para permitir a un usuario ejecutar cron agregarlo al archivo cron.allow. Si desea que ningún usuario pueda utilizar cron, debe añadir la linea ‘ALL’ al archivo cron.deny.

8. Des-habilitar la detección de Memorias USB

Muchas veces queremos restringir a otros usuarios el uso de memorias USB en el sistema para proteger y asegurar los datos de posibles robos. Creamos el archivo /etc/modprobe.d/no-usb y añadimos la linea que figura abajo y no detectara mas memorias USB.

9. Activar SELinux

Security-Enhanced Linux (SELinux) es un mecanismo de seguridad de control de acceso obligatorio dispuesto en el kernel. Des-habilitar SELinux significa la eliminación del mecanismo de seguridad del sistema. Piense cuidadosamente dos veces antes de desactivarlo, si su sistema esta conectado a Internet y tiene acceso publico, piense un poco mas sobre esto.

SELinux proporciona tres modos básicos de operación y son:

Enforcing: Este es el modo por default que permite hacer cumplir la política de seguridad de SELinux en la maquina

Permisive: En este modo, SELinux no hace cumplir la política de seguridad en el sistema, solo muestra advertencias y registra las acciones. Este modo es muy útil en termino de cuestiones relacionadas con la solución de problemas de SELinux.

Disabled: SELinux esta desactivado.

Puedes ver el estado actual de SELinux desde la linea de comandos, utilizando los comandos “sestatus“, “getenforce” o “system-config-selinux“.

Si esta desactivado, activa SELinux con el siguiente comando:

También se puede gestionar desde el archivo /etc/selinux/config, donde se puede habilitar o des-habilitar.

10. Eliminar Escritorio GNOME/KDE

No hay necesidad de correr escritorios “X Window” como GNOME o KDE en un servidor dedicado. Puede quitarlo o des-habilitarlo para aumentar la seguridad del servidor y el rendimiento. Para des-habilitarlo simplemente abrir el archivo /etc/inittab y establezca el runlevel a 3. Si desea eliminar el sistema de escritorio por completa utilizar el siguiente comando:

Continuara…

Lynis: Herramienta de Seguridad y Auditoria para Sistemas *nix

lynisLynis es una herramienta de auditoria para sistemas *nix (Unix/Linux). La misma ejecuta un análisis de seguridad y determina el estado de “hardering” del host. Cualquier problema de seguridad que sea detectado proporcionara una sugerencia o una advertencia. Junto con la información relacionada con la seguridad también buscara información general del sistema, paquetes instalados y posibles errores de configuración. En general, es una herramienta de auditoria y seguridad para “hardering” de sistemas *nix (Unix/Linux).

Este software tiene como objetivo asistir de manera automatica en la auditoria, “hardering”, gestion de parches, y el analisis de vulnerabilidades y malware de sistemas *nix (Unix/Linux). Se puede ejecutar sin necesidad de instalación, por lo que se puede utilizar en medios extraibles como ser CD/DVD, pendrives, etc.

Es una herramienta que ayuda a los auditores en la realizacion de auditorias basadas en los estandares Basel II, GLBA, HIPAA, PCI DSS and SOx (Sarbanes-Oxley).

Lynis esta desarrollada para ser utilizada por especialistas de seguridad, pentesters, auditores de sistemas, administradores de sistemas.

Algunos ejemplos de testeos:

  • Métodos disponibles de autenticación
  • Certificados SSL expirados
  • Software desactualizado
  • Cuentas de usuario sin password
  • Permisos de archivos incorrectos
  • Errores de configuración
  • Auditoria de Firewall

lynis-screenshot

Lynis es un script de auditoria escrito en lenguaje de scripting shell (sh). Por lo tanto, se ejecuta en la mayoría de los sistemas sin ningún tipo de configuración. Los paquetes están creados para facilitar su instalación. Aun así, si nos interesa bajar la versión mas reciente, basta con descargar el “tarball”, extraerlo en un directorio temporal y ejecutar la herramienta.

Testeado en los siguientes SO:

  • ArchLinux
  • CentOS
  • Debian
  • FedoraCore
  • FreeBSD
  • Gentoo
  • Knoppix
  • LinuxMint
  • MacOSX
  • Mandriva
  • OpenBSD
  • OpenSolaris
  • OpenSuSE
  • OracleLinux
  • PcBSD
  • PCLinuxOS
  • RedHatEnterpriseLinux(RHEL)
  • RedHatderivatives
  • Slackware
  • Solaris10
  • Ubuntu

Descarga

Pengowin: El Kali de Windows para Seguridad Informática

Pengowin es un repositorio con más de 200 programas relacionados con diferentes áreas de la seguridad informática. Todos los programas son para sistemas operativos Windows y están actualizados con la última versión oficial hasta el 27 de Noviembre de 2013, algunas herramientas que han sido discontinuadas también se incluyen en este repositorio ya que son plenamente funcionales.

Entre los más de 200 programas se encuentran herramientas de análisis forense, auditorías inalámbricas Wi-Fi, criptografía, cracking de contraseñas, análisis de metadatos, virtualización, análisis de vulnerabilidades y muchísimas mas.

Algunas de las herramientas que puedes encontrar en el DVD son:

  • Wget
  • ProxyStrike
  • ZAP
  • RDG Packet Detector
  • SSLCom
  • Herramientas para protegernos de malware como MalwareBytes, SpyBot, Hitman Pro y TrojanRemover.
  • Herramientas de control remoto como UltraVNC, Radmin y Putty.
  • VNC Password Recovery
  • Asterisk Password Spy
  • Extreme GPU BruteForce
  • Keepass
  • Network Password Decryptor
  • Rainbowcrack y Rainbowcrack GPU
  • Cain&Abel
  • Ophcrack
  • Exifcleaner
  • FOCA
  • Truecrypt

Esta es una captura de las diferentes categorías de herramientas que podes encontrar en PengoWin:

pengowin2

Aquí puedes ver un vídeo donde se habla de Pengowin y también se ven todas las herramientas disponibles de la imagen ISO:

También debemos decir que este DVD no es un LiveDVD con Windows, únicamente se encuentran las herramientas para Windows ordenadas por tipo. El método de descarga es a través de TorrentMEGA, Mediafire y HiDrive la imagen ISO ocupa más de 4GB ya que incorpora un gran número de herramientas. Pueden visitar el sitio oficial del proyecto donde encontraran toda la información sobre Pengowin. Si tenéis problemas al acceder a la web, los enlaces de descarga los podes encontrar también en PasteBin para bajarlo de MEGA o Mediafire.

Pengowin es una buena alternativa (aunque no sea Live DVD) a sistemas operativos basados en Linux, un buen ejemplo de estos es Kali Linux o Bugtraq2, es perfecto para aquellos usuarios que siempre han usado Windows y no saben manejarse bajo un sistema Linux.

Sitio Oficial: PengoWin

Pastebin: Links Descarga