
Hola a todos! Estoy seguro de que ha escuchado acerca de las deficiencias de la tecnología UAC de Windows, pero relativamente recientemente han aparecido detalles de una vulnerabilidad curiosa, cuya explotación permite que un usuario no privilegiado maximice los privilegios. En Jet CSIRT, no dejamos este caso desatendido, porque para cualquier equipo de monitoreo y respuesta de IS, las vulnerabilidades de la clase de escalada de privilegios son de particular interés. Debajo del corte: una descripción de la vulnerabilidad, métodos de detección y protección.
Detalles de vulnerabilidad
El investigador Eduardo Braun Prado, del equipo de Zero Day Initiative,
descubrió una vulnerabilidad de escalada de privilegios locales en el componente de diálogo del certificado de Windows que se produce debido al procesamiento incorrecto de los privilegios del usuario. La vulnerabilidad permite elevar los privilegios del usuario al máximo SISTEMA posible y evitar todos los mecanismos de protección de Windows. Esto ocurre cuando se utiliza el mecanismo UAC de Windows, cuando el usuario interactúa con el componente de Escritorio seguro al abrir el cuadro de diálogo de inicio de archivo en nombre del Administrador.

¿Cuál es la esencia de la vulnerabilidad? El certificado del archivo ejecutable contiene un campo numérico opcional "Identificador de política" en el formato de identificador de objeto (OID) específico de Microsoft.

El archivo de encabezado Wintrust.h define este campo como SPC_SP_AGENCY_INFO_OBJID. Aunque su propósito está poco documentado, lo más probable es que se analice cuando se abre una ventana con detalles del certificado. Cuando este campo se presenta en el formato correcto, el campo Emitido por se mostrará como un hipervínculo con el valor tomado del atributo SpcSpAgencyInfo.

Cuando hace clic en un enlace con el campo Emitido por, Internet Explorer se abre con los permisos del SISTEMA. El proceso principal para ello será el proceso consent.exe. También se ejecuta con privilegios máximos, y es en su contexto que se inicia el diálogo UAC. En consecuencia, se hace posible ejecutar un archivo arbitrario (cmd.exe, powershell.exe) desde el menú del navegador con los derechos heredados del SISTEMA.

Como PoC para demostrar la explotación de la vulnerabilidad (video a continuación), el investigador sugirió usar la utilidad Control de ActiveX de la Ayuda HTML, cuyo certificado tiene las características descritas anteriormente.
Al mismo tiempo, es posible firmar cualquier archivo ejecutable de esta manera, por ejemplo, usando el cmdlet powershell Set-AuthenticodeSignature. Primero, debe crear un certificado de autoridad de certificado raíz autofirmado y un certificado final utilizando la utilidad makecert del SDK de Windows. La instrucción se da
aquí .
La vulnerabilidad ha recibido el identificador
CVE-2019-1388 y CVSS 7.8. Todas las versiones del sistema operativo desde Windows 7 hasta Windows Server 2019 se vieron afectadas por él. Después de instalar el parche, el campo Emitido por en los detalles del certificado deja de aparecer como un hipervínculo.
La explotación masiva de esta vulnerabilidad es poco probable debido a la dificultad de la automatización. De hecho, para implementar un ataque basado en él, el usuario deberá realizar muchas acciones, desde abrir una ventana con un certificado de archivo ejecutable hasta iniciar una línea de comando a través de la interfaz de Internet Explorer. Por lo tanto, el escenario de ataque más probable puede estar relacionado con las acciones del intruso interno.
Cómo detectar
Para detectar la explotación de una vulnerabilidad en las plataformas Windows x64, utilizamos una regla de correlación en el sistema SIEM en el sistema SIEM que monitorea la cadena de eventos (en el nodo monitoreado, primero debe habilitar la auditoría del inicio del proceso usando la política de grupo apropiada o usar la utilidad Sysmon de Sysinternals):
- Detectando el inicio del proceso constent.exe con privilegios de SYSTEM (código de evento 4688 ).
- Detectando el inicio del proceso C: \ Archivos de programa \ iexplore.exe con derechos de SISTEMA, donde consent.exe actúa como el proceso padre.
- Detectando el inicio del proceso C: \ Archivos de programa (x86) \ iexplore.exe con privilegios de sistema, donde C: \ Archivos de programa \ iexplore.exe actúa como el proceso padre.

- Detectando el lanzamiento del shell (cmd.exe, powershell.exe) con privilegios de SYSTEM, donde C: \ Program Files (x86) \ iexplore.exe actúa como el proceso padre.

- El ID del proceso C: \ Archivos de programa (x86) \ iexplore.exe del paso 3 y el ID C: \ Archivos de programa (x86) \ iexplore.exe como el proceso padre del párrafo anterior son los mismos.
Demos un ejemplo de la regla de correlación descrita en el lado FortiSIEM.
Términos utilizados
Detallar las condiciones de consentimiento de launch.exe
Detalle IEx64 Condición de lanzamiento
Detalle las condiciones de lanzamiento de IEx86
Detalle de las condiciones de lanzamiento cmd.exe, powershell.exe
Código fuente de la regla de correlación de FortiSIEM<rules><DataRequest advanced="true" custId="1" type="Rule"> <Name>UAC Privilege Escalation through Secure Desktop</Name> <Description> UAC Secure Desktop CVE-2019-1388</Description> <Remediation/> <CustomerScope groupByEachCustomer="true"> <Include>1</Include> <Exclude/> </CustomerScope> <PatternClause window="300"> <SubPattern id="148021654" name="Consent_Execution"> <SingleEvtConstr>eventType = "Win-Security-4688" AND procName CONTAIN "consent.exe" AND user IN ("","SYSTEM")</SingleEvtConstr> <GroupEvtConstr>COUNT(*) >= 1</GroupEvtConstr> <GroupByAttr>user,procName</GroupByAttr> </SubPattern> <Operator rank="0" type="FOLLOWED_BY"/> <SubPattern id="148021655" name="IE_x64_Execution"> <SingleEvtConstr>eventType = "Win-Security-4688" AND procName REGEXP (".*Files\\\\Internet.*\\\\iexplore\\.exe$") AND parentProcName CONTAIN "consent.exe" OR user IN ("","SYSTEM")</SingleEvtConstr> <GroupEvtConstr>COUNT(*) >= 1</GroupEvtConstr> <GroupByAttr>procId,user,parentProcName,procName</GroupByAttr> </SubPattern> <Operator rank="0" type="FOLLOWED_BY"/> <SubPattern id="148021664" name="IE_x86_Execution"> <SingleEvtConstr>eventId = 4688 AND procName REGEXP (".*\\(x86\\)\\\\.*\\\\iexplore\\.exe$") AND parentProcName REGEXP (".*Files\\\\Internet.*\\\\iexplore\\.exe$") AND user IN ("","SYSTEM")</SingleEvtConstr> <GroupEvtConstr>COUNT(*) >= 1</GroupEvtConstr> <GroupByAttr>procName,parentProcName,procId,user</GroupByAttr> </SubPattern> <Operator rank="0" type="FOLLOWED_BY"/> <SubPattern id="148021656" name="Cmd_Execution"> <SingleEvtConstr>eventType = "Win-Security-4688" AND ( procName CONTAIN "cmd.exe" OR procName CONTAIN "powershell.exe" ) AND parentProcName REGEXP (".*\\(x86\\)\\\\.*\\\\iexplore\\.exe$") AND user IN ("","SYSTEM")</SingleEvtConstr> <GroupEvtConstr>COUNT(*) >= 1</GroupEvtConstr> <GroupByAttr>user,parentProcName,procName,parentProcId</GroupByAttr> </SubPattern> <GlobalConstr>IE_x86_Execution.procId = Cmd_Execution.parentProcId</GlobalConstr> </PatternClause> <IncidentDef eventType="UAC_Privilege_Escalation_through_Secure_Desktop" eventTypeGroup="PH_SYS_EVENT_PH_RULE_SEC" fireFreq="900" severity="7"> <ArgList>procName=Cmd_Execution.procName,parentProcName=Cmd_Execution.parentProcName,user=Cmd_Execution.user</ArgList> </IncidentDef> <DynWatchListDef/> <userRoles> <roles custId="0"></roles> </userRoles> <TriggerEventDisplay> <AttrList>phRecvTime,eventType,reptDevName,reptDevIpAddr,destIpAddr,destName,user,parentProcId,parentProcName,procId,procName,rawEventMsg</AttrList> </TriggerEventDisplay> </DataRequest> </rules>
El investigador Florian Roth
publicó una regla Sigma para detectar intentos de explotar esta vulnerabilidad. Sin embargo, debido a restricciones de idioma, al usar la regla, es posible detectar solo el evento de inicio de Internet Explorer con privilegios de SYSTEM y el proceso padre consent.exe sin la detección posterior de lanzamientos de shell. No es posible rastrear la cadena de eventos necesarios en las condiciones descritas anteriormente (1-5) utilizando las herramientas Sigma, por lo que nos vimos obligados a desarrollar nuestra propia regla.
Cómo protegerte
1. Instale el parche de Microsoft con fecha del 12 de noviembre para la versión del sistema operativo correspondiente.
2. Si no se puede instalar un parche para eliminar esta vulnerabilidad, debe usar:
- Reglas de AppLocker que prohíben el lanzamiento de shells cmd.exe y powershell.exe para las cuentas incluidas en el grupo Usuarios (debe tener en cuenta las utilidades y técnicas que eluden AppLocker que figuran en LOLBINS );
- IPS basado en host que utiliza sistemas de la clase EPP, EDR (debe configurar las reglas de acceso que prohíben que el proceso iexplore.exe acceda a cmd.exe, powershell.exe).