lunes, 19 de agosto de 2013

Mitigar ataques Pass-the-Hash by Microsoft

El otro día me topé con un documento de Microsoft que desconocía sobre cómo mitigar los riesgos de sufrir un ataque de tipo "Pass the Hash". El documento se puede descargar haciendo click aquí.

En primer lugar, recordemos qué es un ataque de tipo Pass-the-Hash. Este tipo de ataque consiste en capturar las credenciales de acceso a un equipo y usar dichas credenciales para autenticarse en otros equipos de la red. El concepto es muy similar al de un robo de contraseña, pero en este caso lo que se roba en lugar de ser la contraseña es el hash de una contraseña o bien un ticket de sesión válido.

Para llevar a cabo este tipo de ataque se necesita tener acceso con permisos de administración local en el equipo en el que se haya logado el usuario del que queremos obtener las credenciales. El caso más típico es el de obtener acceso con privilegios de administrador local en un equipo con pocas medidas de seguridad, por ejemplo una estación de usuario o un servidor de desarrollo y utilizar este acceso para hacerse con las credenciales de otro usuario con mayores privilegios que se haya logado recientemente en ese equipo, por ejemplo, un controlador de dominio que haya accedido para llevar a cabo taréas administrativas.

El documento de Microsoft propone considerar las siguientes medidas de seguridad para mitigar el riesgo de sufrir un ataque de este tipo:


  • Restringir y proteger las cuentas de dominio que cuenten con privilegios elevados:
    • Evitar usar los usuarios administradores de dominio para logarse en equipos con un nivel bajo de seguridad que puedan ser comprometidos, como por ejemplo, equipos de usuarios, servidores no productivos, etc..
    • Proveer a los administradores de sistemas de usuarios con privilegios de administración separados de sus cuentas de usuario normales.
    • Utilizar sólo determinadas estaciones de trabajo para realizar las tareas administrativas.
    • En el Directorio Activo, asegurarnos que las cuentas privilegiadas estén marcadas con la opción "Sensitive and cannot be delegated".
    • No configurar servicios o tareas programadas que utilicen usuarios con privilegios en el dominio en equipos con un bajo nivel de seguridad, como las estaciones de trabajo o entornos no productivos.
  • Restringir y proteger las cuentas locales con privilegios de administrador:
    • Evitar que las cuentas locales con privilegios administrativos puedan ser utilizadas para la administración remota de los equipos.
    • Denegar explícitamente el logon de red y el uso de Escritorio Remoto para todas las cuentas locales con privilegios administrativos.
    • Usar passwords únicos en cada máquina para las cuentas locales con privilegios administrativos.
  • Usar firewalls de sistema para restringir el tráfico entrante a los sistemas:
    • Usar el firewall de windows u otro firewall de Host para restringir al mínimo indispensable el tráfico entrante (y saliente) de todos los servidores y estaciones de trabajo.
  • Quitar los privilegios de administrador local a los usuarios normales:
    • Para evitar que el compromiso de una cuenta de usuario permita realizar un ataque de este tipo, es necesario que los usuarios no cuenten con privilegios de administrador local de sus estaciones de trabajo.
  • Configurar un proxy de salida para denegar el acceso a Internet a cuentas privilegiadas. En el propio documento de Microsoft viene el detalle de cómo realizar esta configuración.
  • Garantizar que las cuentas privilegiadas no tengan asignados buzones de Exchange o de otros servicios de correo electrónico.
  • Usar herramientas de administración remota que no dejen hashes o tickets guardados en las estaciones remotas a las que se accede. (Si alguien sabe qué herramientas de administración remota cumplen esta premisa se agradecerán los comentarios ya que es algo que aún no me he puesto a analizar.. ;) )
  • Evitar acceder con cuentas privilegiadas a entornos de menor seguridad como estaciones de trabajo o equipos no productivos para evitar que el compromiso de estos equipos comprometa a su vez los equipos más críticos. Para evitar esto sería recomendable que los administradores contaran incluso con diversas cuentas de usuarios en función de la sensibilidad de los equipos a administrar. Por ejemplo, Administrador_Desarrollo, Administrador_Workstations, Administrador_DMZ y Administrador_Servidores.
  • Mantener actualizados sistemas operativos y aplicaciones de forma que el usuario no pueda conseguir comprometer una cuenta con privilegios locales de administración y por lo tanto no pueda comprometer a su vez cuentas con privilegios en el dominio.
  • Bastionar y gestionar adecuadamente la seguridad de los controladores de dominio. Si el atacante directamente compromete un controlador de dominio, ya no necesitará llevar a cabo un ataque PassTheHash...
  • Eliminar los hashes LM. Para ello es necesario que todos los controladores de dominio sean al menos Windows Server 2008.

Y por último, aunque no se menciona en el documento de Microsoft, yo añadiría la necesidad de contar con una adecuada segmentación de red que permita garantizar que, aunque se comprometa una credencial de administrador de dominio en un determinado servidor o estación de trabajo, el atacante no pueda logarse directamente en el resto de servidores de la estación. Con una segmentación adecuada limitaríamos el impacto del compromiso a la VLAN de la máquina comprometida.