O analisador de movimento lateral (LATMA) coleta logs de autenticação do domínio e procura possíveis ataques de movimento lateral e atividades suspeitas. A ferramenta visualiza as descobertas com diagramas que descrevem os padrões de movimento lateral. Esta ferramenta contém dois módulos, um que coleta os logs e outro que os analisa. Você pode executar cada um dos módulos separadamente, o coletor de log de eventos deve ser executado em uma máquina Windows em um ambiente de domínio de diretório ativo com python 3.8 ou superior. O analisador pode ser executado em uma máquina linux e em uma máquina Windows.
O coletor
O módulo Event Log Collector verifica os controladores de domínio em busca de logs de autenticação NTLM bem-sucedidos e os pontos de extremidade em busca de logs de autenticação Kerberos bem-sucedidos. Requer acesso às portas LDAP/S 389 e 636 e RPC à porta 135 para o controlador de domínio e clientes. Além disso, requer privilégios de administrador de domínio ou um usuário no grupo Leitor de log de eventos ou um com permissões equivalentes. Isso é necessário para extrair logs de eventos de todos os pontos de extremidade e controladores de domínio.
O coletor reúne logs NTLM do evento 8004 nos controladores de domínio e logs Kerberos do evento 4648 nos clientes. Ele gera como saída um arquivo de formato delimitado por vírgula csv com todo o tráfego de autenticação disponível. A saída contém os campos host de origem, destino, nome de usuário, tipo de autenticação, SPN e timestamps no formato %Y/%m/%d %H:%M. O coletor requer a credencial de um usuário válido com privilégios de visualizador de eventos em todo o ambiente e consulta os logs específicos de cada protocolo.
Verifique se os protocolos Kerberos e NTLM são auditados em todo o ambiente usando a política de grupo:
Kerberos - Configuração do computador -> políticas -> Configurações do Windows -> Configurações de segurança -> Políticas locais -> Políticas de auditoria -> Eventos de logon da conta de auditoria
NTLM - Configuração do computador -> Políticas -> Configurações do Windows -> Configurações de segurança -> Políticas locais -> Opções de segurança -> Segurança de rede: Restringir NTLM: auditar autenticação NTLM neste domínio
O Analisador
O Analisador recebe como entrada uma planilha com os dados de autenticação formatados conforme especificado na estrutura de saída do Coletor. Ele procura atividades suspeitas com o algoritmo do analisador de movimento lateral e também detecta IoCs adicionais de movimento lateral. A fonte e o destino da autenticação devem ser formalizados com o nome netbios e não com endereços IP.
Preliminares e conceitos-chave do algoritmo LATMA
O LATMA recebe um lote de solicitações de autenticação e envia um alerta quando encontra ataques suspeitos de movimentação lateral. Definimos o seguinte:
Gráfico de Autenticação: Um gráfico direcionado que contém informações sobre o tráfego de autenticação no ambiente. Os nós dos grafos são computadores e as arestas são autenticações entre os computadores. As arestas do grafo possuem os atributos: tipo de protocolo, data de autenticação e a conta que enviou a requisição. Os nós do gráfico contêm informações sobre o computador que representam, detalhadas a seguir.
Gráfico de movimento lateral: Um subgráfico do gráfico de autenticação que representa o movimento do atacante. O grafo de movimento lateral nem sempre é um caminho no subgrafo, em alguns ataques o atacante vai em várias direções diferentes.
Alerta: um subgráfico que o algoritmo suspeita fazer parte do gráfico de movimento lateral.
LATMA realiza várias ações durante sua execução:
Coleta de informações: LATMA monitora o comportamento normal dos usuários e máquinas e os caracteriza. O aprendizado é usado posteriormente para decidir quais solicitações de autenticação se desviam de um comportamento normal e podem estar envolvidas em um ataque de movimento lateral. Por um período de aprendizado de três semanas, o LATMA não emite nenhum alerta e apenas aprende o ambiente. O aprendizado continua depois dessas três semanas.
Construção do grafo de autenticação: Após o período de aprendizado, todas as autenticações relevantes são adicionadas ao grafo de autenticação. É fundamental filtrar apenas para autenticação relevante, caso contrário, o número de arestas que o grafo contém pode ser muito grande. Filtramos os seguintes tipos de protocolo: NTLM e Kerberos com os serviços rpc, rpcss e termsrv.
Tratamento de alertas:
Adicionar uma autenticação ao gráfico pode acionar um processo de alerta. Em geral, uma nova aresta pode criar um novo alerta, juntar-se a um alerta existente ou mesclar dois alertas.
Obtendo informações
Cada solicitação de autenticação monitorada pelo LATMA é utilizada para aprendizado e armazenada em uma estrutura de dados dedicada. Primeiro, identificamos coletores e hubs. Definimos coletores como máquinas acessadas por muitas (pelo menos 50) contas diferentes, como um portal de empresa ou servidor de troca. Definimos hubs como máquinas de muitas contas diferentes (pelo menos 20) autenticadas, como proxies e VPNs. Autenticações para coletores ou de hubs são consideradas benignas e, portanto, removidas do gráfico de autenticação.
Além da classificação básica, o LATMA faz correspondências entre contas e máquinas das quais eles frequentemente se autenticam. Se uma conta for autenticada de uma máquina pelo menos três dias diferentes em um período de três semanas, isso significa que essa conta corresponde à máquina e qualquer autenticação dessa conta da máquina é considerada benigna e removida do gráfico de autenticação.
Os IoCs de movimento lateral são:
Bengala branca - Autenticação de contas de usuário de uma única máquina para várias em um tempo relativamente curto.
Bridge - Conta de usuário X autenticando da máquina A para a máquina B e, em seguida, da máquina B para a máquina C. Esse IoC indica potencialmente um invasor realizando um avanço real de seu ponto de apoio inicial (A) para a máquina de destino que atende melhor aos objetivos do ataque.
Ponte Comutada - Conta de usuário X autenticando da máquina A para a máquina B, seguida pela conta de usuário Y autenticando da máquina B para a máquina C. Este IoC indica potencialmente um invasor que descobre e compromete uma conta adicional ao longo de seu caminho e usa a nova conta para avançar encaminhar (um exemplo comum é a conta X sendo um usuário de domínio padrão e a conta Y sendo um usuário administrador)
Deslocamento de peso - Cana branca (ver acima) da máquina A para as máquinas {B1,, Bn}, seguida por outra bengala branca da máquina Bx para as máquinas {C1,,Cn}. Esse IoC indica potencialmente que um invasor que determinou que a máquina B atenderia melhor aos propósitos do ataque a partir de agora usa a máquina B como fonte para pesquisas adicionais.
Blast - Conta de usuário X autenticando da máquina A para várias máquinas em um período de tempo muito curto. Um exemplo comum é um invasor que instala \ executa ransomware em um grande número de máquinas simultaneamente
Saída:
O analisador gera vários arquivos diferentes
Uma planilha com todas as autenticações suspeitas (all_authentications.csv) e sua classificação de função e uma planilha diferente para as autenticações que são suspeitas de fazer parte do movimento lateral (propagation.csv)
Um arquivo GIF representa a progressão, onde cada quadro do GIF especifica exatamente qual foi a ação suspeita
Uma linha do tempo interativa com todos os eventos suspeitos. Eventos relacionados entre si têm a mesma cor
Dependências:
Python 3.8
bibliotecas da seguinte forma em requirements.txt
Execute a instalação do pip. para executar a configuração automaticamente
Audite Kerberos e NTLM em todo o ambiente
Consultas LDAP aos controladores de domínio
Credenciais de administrador de domínio ou quaisquer credenciais com permissões de visualizador de eventos remotos MS-EVEN6.
uso
O coletor
Argumentos necessários:
credenciais [domain.com/]username[:password] formato de credenciais alternativamente [domain.com/]username e, em seguida, senha serão solicitados com segurança. Para o domínio, insira o FQDN (nome de domínio totalmente qualificado). Argumentos opcionais:
-ntlm Recupera logs de autenticação ntlm do controlador de domínio
-kerberos Recupera logs de autenticação kerberos de todos os computadores no domínio
-debug Ativa a saída DEBUG
-help mostra esta mensagem de ajuda e sai
-filter Consulta específica ou contêiner no domínio, também resultará em todas as estações de trabalho na sub-OU. Cada OU estará no formato de DN (Nome Distinto). Oferece suporte a várias OUs com um delimitador de ponto e vírgula. Exemplo: OU=subunidade,OU=unidade;OU=anotherUnit,DC=domain,DC=com Exemplo: CN=container,OU=unit;OU=anotherUnit,DC=domain,DC=com
-date Data de início da qual coletar logs de eventos. formato mês-dia-ano, se não for especificado, pegue todos os dados disponíveis
-threads quantidade de threads de trabalho para usar
-ldap Usar LDAP não seguro em vez de LDAP/S
-ldap_domain Domínio customizado nas credenciais de login ldap. Se vazio, usará o domínio de sessão do usuário atual
O Analisador
Argumentos necessários:
arquivo de autenticação authentication_file deve conter a lista de solicitações NTLM e Kerberos
Argumentos opcionais: 2. -output_file A localização do csv com todos os IOCs será salva em 3. -progression_output_file A localização do csv com os IOCs dos movimentos laterais será salva em 4. -sink_threshold número de contas das quais uma máquina é considerada coletora, o padrão é 50 5. -hub_threshold número de contas das quais uma máquina é considerada hub, o padrão é 20 6. -learning_period período de aprendizado em dias, o padrão é 7 dias 7. -show_all_iocs Mostrar IoC que não estão conectados a nenhum outro IoCs 8. -show_gant Se verdadeiro, gera os eventos em um formato Gant
Uso binário Abra o prompt de comando e navegue até a pasta binária. Execute executáveis com os argumentos especificados acima.
Exemplos
Nos arquivos de exemplo, você tem vários exemplos de ambientes reais (alguns contêm ataques de movimento lateral e outros não) que você pode fornecer como entrada para o analisador.
Exemplo de uso
python eventlogcollector.py domain.com/username:password -ntlm -kerberos
python Analyzer.py logs.csv