O PowerShell é uma ferramenta de linha de comando da Microsoft que permite que os usuários controlem e automatizem tarefas do sistema operacional Windows. Infelizmente, essa ferramenta também pode ser usada por hackers para executar códigos maliciosos, já que o PowerShell tem acesso a APIs do sistema e é capaz de executar comandos remotamente.
Os códigos maliciosos em PowerShell estão se tornando cada vez mais comuns e perigosos, já que muitas vezes são difíceis de detectar e podem se espalhar rapidamente. Esses códigos maliciosos podem realizar uma variedade de atividades maliciosas, incluindo o download e execução de arquivos maliciosos, a coleta de informações do sistema, a escalada de privilégios e a persistência.
O ID T1059.001 é uma sub técnica de ataque classificada pela matriz de adversários do MITRE ATT&CK, e está relacionada ao uso do PowerShell como um interpretador de comandos e scripts maliciosos.
Várias ferramentas de teste ofensivas baseadas em PowerShell estão disponíveis, incluindo Empire, PowerSploit, PoshC2 e PSAttack .
Na página da técnica é possível notar como os grupos APTs usam o PowerShell em suas campanhas de ataque.
- APT19 usa comandos do PowerShell para executar payloads
- APT28 baixa e executa scripts do PowerShell e executa comandos do PowerShell.
- APT29 usa scripts codificados do PowerShell carregados nas instalações do CozyCar para baixar e instalar o SeaDuke. O APT29 também usou o PowerShell para criar novas tarefas em máquinas remotas, identificar definições de configuração, burlar defesas, exfiltrar dados e executar outros comandos.
- APT3 usa o PowerShell em sistemas de vítimas para baixar e executar cargas úteis após a exploração.
- APT32 usa ferramentas experimentais em PowerShell, one-liners do PowerShell e carregadores de shellcode para execução.
E muitos outros.
Ofuscação com base64
Esses tipos de comandos codificados em Base64 podem ser usados por hackers para executar comandos maliciosos em um sistema sem serem detectados. Por esse motivo, é importante estar ciente desses tipos de comandos e adotar práticas de segurança adequadas, como limitar o uso do PowerShell a usuários autorizados, monitorar o uso de scripts maliciosos e usar soluções de segurança para detectar e bloquear códigos maliciosos.
A codificação em Base64 é usada para representar dados binários em uma forma de texto ASCII, facilitando a transmissão e armazenamento de dados em diferentes sistemas. No caso de comandos em PowerShell, a codificação em Base64 pode ser usada para ocultar comandos maliciosos, tornando-os mais difíceis de detectar por sistemas de segurança.
Base64 Encoded
powershell.exe -NoP -NonI -W Hidden -Exec Bypass -Enc 'VwByAGkAdABlAC0ATwB1AHQAcAB1AHQAIAAiAEMAbwBtAGEAbgBkAG8AIABQAGUAcgBpAGcAbwBzAG8AIgA='
O comando acima incluindo o parâmetro -Enc, que é usado para especificar o comando codificado em Base64. Os outros parâmetros, como -NoP, -NonI e -W Hidden, são usados para ocultar a janela do PowerShell e ignorar políticas de execução, tornando a execução do comando mais discreta e potencialmente evitando a detecção por sistemas de segurança.
Base64 Expressions
Invoke-Expression ([System.Text.Encoding]::Unicode.GetString(([convert]::FromBase64String('VwByAGkAdABlAC0ATwB1AHQAcAB1AHQAIAAiAEMAbwBtAGEAbgBkAG8AIABQAGUAcgBpAGcAbwBzAG8AIgA='))))
Invoke-Expression, é usado para executar a expressão que é fornecida como um argumento. Nesse caso, a expressão é a string codificada em Base64, que é convertida em uma matriz de bytes, decodificada em Unicode e executada como um comando do PowerShell.
O valor base64 “VwByAGkAdABlAC0ATwB1AHQAcAB1AHQAIAAiAEMAbwBtAGEAbgBkAG8AIABQAGUAcgBpAGcAbwBzAG8AIgA=” representa o comando em PowerShell “Write-Output “Comando Perigoso”” codificado em Base64.
Para decodificar o valor Base64 é possível usar ferramentas online de decodificação de Base64 ou utilizar o comando Convert.FromBase64String no PowerShell:
$base64 = 'VwByAGkAdABlAC0ATwB1AHQAcAB1AHQAIAAiAEMAbwBtAGEAbgBkAG8AIABQAGUAcgBpAGcAbwBzAG8AIgA='
d
$bytes = [Convert]::FromBase64String($base64)
$command = [System.Text.Encoding]::Unicode.GetString($bytes)
Write-Host $comman
Codificador de base64
$command = ‘Write-Output “Comando Perigoso”‘
$bytes = [System.Text.Encoding]::Unicode.GetBytes($command)
$base64 = [Convert]::ToBase64String($bytes)
Então, como você pode se proteger contra códigos maliciosos em PowerShell?
- Implemente a política de segurança do PowerShell
Uma das primeiras coisas que você pode fazer para se proteger contra códigos maliciosos em PowerShell é implementar a política de segurança do PowerShell. Isso ajudará a garantir que o PowerShell esteja sendo usado apenas para fins legítimos e que scripts maliciosos sejam impedidos de serem executados.
- Restrinja o uso do PowerShell
Outra maneira de se proteger contra códigos maliciosos em PowerShell é restringir o uso do PowerShell. Isso pode ser feito por meio de políticas de segurança que limitam quem pode usar o PowerShell e como ele pode ser usado.
- Utilize soluções de segurança
Utilizar soluções de segurança pode ajudar a detectar e bloquear códigos maliciosos em PowerShell. Essas soluções incluem antivírus, firewalls e sistemas de detecção e prevenção de intrusões.
- Monitore o uso do PowerShell
Monitorar o uso do PowerShell em seus sistemas é uma maneira importante de identificar possíveis ameaças e atividades maliciosas. Monitore quem está usando o PowerShell e quais scripts estão sendo executados para identificar atividades suspeitas.
- Treine seus usuários
Treinar seus usuários para identificar possíveis ameaças e códigos maliciosos em PowerShell é uma maneira importante de aumentar a segurança de seus sistemas. Inclua treinamentos sobre como identificar códigos maliciosos em PowerShell e o que fazer caso uma ameaça seja identificada.
Em resumo, códigos maliciosos em PowerShell representam uma ameaça séria para sistemas e dados. No entanto, seguindo essas dicas e práticas recomendadas de segurança, você pode reduzir o risco de uma violação de segurança e proteger seus sistemas e dados de possíveis ameaças.
Referencia
Seja o primeiro a comentar