Tag Archives: hardering

Securizando WordPress con WPHardering

Wordpress-securityWPHardening es una herramienta para securizar los paquetes de WordPress, ya sea antes de su instalación o en un servidor de producción. La misma fue desarrollada por Daniel Maldonado.

WPHardening es una herramienta programada en Python y basada en la consola de comandos. Por defecto WordPress contiene muchos archivos innecesarios para su correcto funcionamiento y requiere de revisiones constantes.

WPHardening esta basado en las mejores practicas de seguridad y consejos que siempre leemos en diferentes papers y blogs pero que sin embargo nunca se implementa.

En esta primera version WPHardening incorpora la activación de flags para realizar diferentes tareas:

  • Cambio de permisos en directorios y archivos .
  • Eliminar archivos innecesarios como readme y licencias.
  • Creación del archivo robots.txt
  • Evadir el fingerprinting de varias herramientas como w3af y wpscan
  • Eliminar las funciones de enumeración de versiones de WordPress independientemente del Theme que se instale.
  • Recomendación y Descarga de diferentes plugins para mejorar la seguridad.
  • Finalmente permite evitar el listado de directorios incorporando archivos index.php y .htaccess

Para comenzar a trabajar con WPHardening es necesario descargar el código directamente desde el repositorio de GitHub de la siguiente manera:

Dentro del directorio wphardening que acabamos de descargar vamos a ver una serie de archivos, donde se encuentra el código fuente de toda la herramientas y algo de información sobre el desarrollo y licencias.

Todas las opciones que les comenté anteriormente se encuentran disponibles para implementarlas.

Para lograr utilizar la herramienta correctamente, es necesario especificar siempre con los flags -d o –dir el Path donde se encuentra nuestro proyecto de WordPress, en lo personal recomiendo realizar este tipo de hardening antes de la instalación de WordPress, pero también es posible realizarlo en un entorno de producción.

De esta forma podemos utilizar todos los flags disponibles como este ejemplo:

Link Descarga: WPHardering

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.

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…