
Olá pessoal! Tenho certeza de que você já ouviu falar sobre as deficiências da tecnologia Windows UAC, mas, recentemente, surgiram detalhes de uma vulnerabilidade curiosa, cuja exploração permite que um usuário sem privilégios maximize os privilégios. No Jet CSIRT, não deixamos esse caso sem vigilância, pois para qualquer equipe de monitoramento e resposta de IS, as vulnerabilidades da classe de escalonamento de privilégios são de particular interesse. Sob o corte - uma descrição da vulnerabilidade, métodos de detecção e proteção.
Detalhes da vulnerabilidade
O pesquisador Eduardo Braun Prado, da equipe Zero Day Initiative,
descobriu uma vulnerabilidade de escalação de privilégios locais no componente Caixa de Diálogo de Certificados do Windows que ocorre devido ao processamento incorreto de privilégios de usuário. A vulnerabilidade permite elevar os privilégios do usuário ao máximo possível SYSTEM e ignorar todos os mecanismos de proteção do Windows. Isso acontece quando o mecanismo do Windows UAC é usado, quando o usuário interage com o componente Secure Desktop, abrindo a caixa de diálogo de inicialização do arquivo em nome do administrador.

Qual é a essência da vulnerabilidade? O certificado do arquivo executável contém um campo numérico opcional "Identificador da Política" no formato do OID (Identificador de Objeto Específico da Microsoft).

O arquivo de cabeçalho Wintrust.h define esse campo como SPC_SP_AGENCY_INFO_OBJID. Embora seu objetivo seja pouco documentado, é provavelmente analisado quando uma janela com detalhes do certificado é aberta. Quando esse campo é apresentado no formato correto, o campo Emitido por será exibido como um hiperlink com o valor obtido do atributo SpcSpAgencyInfo.

Quando você clica em um link com o campo Emitido por, o Internet Explorer é aberto com permissões do SISTEMA. O processo pai será o consent.exe. Também é executado com o máximo de privilégios e é nesse contexto que a caixa de diálogo do UAC é iniciada. Assim, torna-se possível executar um arquivo arbitrário (cmd.exe, powershell.exe) no menu do navegador com os direitos herdados do sistema.

Como um PoC para demonstrar a exploração da vulnerabilidade (o vídeo é fornecido abaixo), o pesquisador sugeriu o uso do utilitário ActiveX Control da Ajuda em HTML, cujo certificado possui os recursos descritos acima.
Ao mesmo tempo, é possível assinar qualquer arquivo executável dessa maneira, por exemplo, usando o cmdlet PowerShell Set-AuthenticodeSignature. Primeiro, você precisa criar um certificado de autoridade de certificação raiz autoassinado e um certificado final usando o utilitário makecert do Windows SDK. A instrução é dada
aqui .
A vulnerabilidade recebeu o identificador
CVE-2019-1388 e CVSS 7.8. Todas as versões do sistema operacional do Windows 7 para o Windows Server 2019 foram afetadas por ele. Após a instalação do patch, o campo Emitido por nos detalhes do certificado deixa de ser exibido como um hiperlink.
A exploração em massa dessa vulnerabilidade é improvável devido à dificuldade de automação. De fato, para implementar um ataque baseado nele, o usuário precisará executar várias ações - desde a abertura de uma janela com um certificado de arquivo executável até o lançamento de uma linha de comando através da interface do Internet Explorer. Portanto, o cenário de ataque mais provável pode estar relacionado às ações do intruso interno.
Como detectar
Para detectar a exploração de uma vulnerabilidade nas plataformas Windows x64, usamos uma regra de correlação no sistema SIEM no sistema SIEM que monitora a cadeia de eventos (no nó monitorado, você deve primeiro habilitar a auditoria da inicialização do processo usando a política de grupo apropriada ou usar o utilitário Sysmon da Sysinternals):
- Detectando o início do processo constent.exe com privilégios de SISTEMA (código de evento 4688 ).
- Detectando o início do processo C: \ Arquivos de Programas \ iexplore.exe com direitos de SISTEMA, em que consent.exe atua como o processo pai.
- Detectando o início do processo C: \ Arquivos de Programas (x86) \ iexplore.exe com privilégios de SISTEMA, em que C: \ Arquivos de Programas \ iexplore.exe atua como o processo pai.

- Detectando o início do shell (cmd.exe, powershell.exe) com permissões de SISTEMA, em que C: \ Arquivos de Programas (x86) \ iexplore.exe atua como o processo pai.

- O ID do processo C: \ Arquivos de Programas (x86) \ iexplore.exe da etapa 3 e o ID C: \ Arquivos de Programas (x86) \ iexplore.exe como o processo pai do parágrafo anterior são os mesmos.
Vamos dar um exemplo da regra de correlação descrita no lado do FortiSIEM.
Termos utilizados
Detalhando as condições de consentimento do launch.exe
Detalhe Condição de Lançamento IEx64
Detalhe das condições de lançamento do IEx86
Detalhe as condições de inicialização cmd.exe, powershell.exe
Código Fonte da Regra de Correlação 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>
O pesquisador Florian Roth
postou uma regra Sigma para detectar tentativas de explorar essa vulnerabilidade. No entanto, devido a restrições de idioma, usando a regra, é possível detectar apenas um evento de inicialização do Internet Explorer com direitos de SISTEMA e o processo parent consent.exe sem a detecção subseqüente de ativações de shell. Não é possível rastrear a cadeia de eventos necessários sob as condições descritas acima (1-5) usando as ferramentas Sigma, motivo pelo qual fomos forçados a desenvolver nossa própria regra.
Como se proteger
1. Instale o patch da Microsoft com data de 12 de novembro para a versão correspondente do sistema operacional.
2. Se não for possível instalar um patch para eliminar esta vulnerabilidade, você deve usar:
- Regras do AppLocker que proíbem o lançamento de shells cmd.exe e powershell.exe para contas incluídas no grupo Usuários (você deve levar em conta utilitários e técnicas que contornam o AppLocker listado em LOLBINS );
- IPS baseado em host usando sistemas da classe EPP, EDR (você precisa configurar regras de acesso que proíbem o processo iexplore.exe de acessar cmd.exe, powershell.exe).