Compartilhar via


Migrar regras de detecção do ArcSight para o Microsoft Sentinel

Este artigo descreve como identificar, comparar e migrar suas regras de detecção do ArcSight para as regras de análise do Microsoft Sentinel.

Identificar e migrar regras

O Microsoft Sentinel usa a análise de machine learning para criar incidentes acionáveis e de alta fidelidade, e algumas das detecções existentes podem ser redundantes no Microsoft Sentinel. Portanto, não migre todas as regras de detecção e análise indiscriminadamente. Examine essas considerações à medida que identifica as regras de detecção existentes.

  • Selecione casos de uso que justifiquem a migração da regra, considerando a prioridade e a eficiência dos negócios.
  • Verifique se você entende os tipos de regras do Microsoft Sentinel.
  • Verifique se você entende a terminologia de regras.
  • Examine todas as regras que não dispararam nenhum alerta nos últimos 6 a 12 meses e determine se elas ainda são relevantes.
  • Elimine ameaças de baixo nível ou alertas que você costuma ignorar.
  • Use a funcionalidade existente e verifique se as regras de análise internas do Microsoft Sentinel podem abordar seus casos de uso atuais. Como o Microsoft Sentinel usa a análise de machine learning para produzir incidentes acionáveis e de alta fidelidade, é provável que algumas das suas detecções existentes não sejam mais necessárias.
  • Confirme as fontes de dados conectadas e examine os métodos de conexão de dados. Reveja as conversas de coleta de dados a fim de garantir a profundidade e a amplitude dos dados nos casos de uso que você planeja detectar.
  • Explore os recursos da comunidade, como o Marketplace de Detecção de Ameaças do SOC Prime, para verificar se as suas regras estão disponíveis.
  • Considere se um conversor de consultas online, como o Uncoder.io, pode funcionar para suas regras.
  • Se as regras não estiverem disponíveis ou não puderem ser convertidas, elas precisarão ser criadas manualmente, usando uma consulta KQL. Examine o mapeamento de regras para criar consultas.

Saiba mais sobre as melhores práticas para migrar regras de detecção.

Para migrar suas regras de análise para o Microsoft Sentinel:

  1. Verifique se há um sistema de teste em vigor para cada regra que você deseja migrar.

    1. Prepare um processo de validação para suas regras migradas, incluindo scripts e cenários de teste completos.

    2. Verifique se a equipe tem recursos úteis para testar suas regras migradas.

    3. Confirme se você tem todas as fontes de dados necessárias conectadas e examine os métodos de conexão de dados.

  2. Verifique se as detecções estão disponíveis como modelos internos no Microsoft Sentinel:

    • Se as regras internas forem suficientes, use modelos de regra internos para criar regras para seu próprio workspace.

      No Microsoft Sentinel, vá para a guia Configuração > Análise > Modelos de regra e crie e atualize cada regra de análise relevante.

      Para obter mais informações, confira Criar regras de análise agendadas de modelos.

    • Se você tiver detecções que não são cobertas pelas regras internas do Microsoft Sentinel, tente um conversor de consulta online, como Uncoder.io, para converter suas consultas em KQL.

      Identifique a condição de gatilho e a ação de regra e, em seguida, construa e revise sua consulta KQL.

    • Se nem as regras internas nem um conversor de regra online forem suficientes, você precisará criar a regra manualmente. Nesses casos, use as seguintes etapas para começar a criar sua regra:

      1. Identifique as fontes de dados que você deseja usar em sua regra. Você desejará criar uma tabela de mapeamento entre fontes de dados e tabelas de dados no Microsoft Sentinel para identificar as tabelas que deseja consultar.

      2. Identifique quaisquer atributos, campos ou entidades em seus dados que você deseja usar em suas regras.

      3. Identifique os critérios de regra e a lógica. Neste estágio, talvez você queira usar modelos de regra como exemplos de como construir suas consultas KQL.

        Considere filtros, regras de correlação, listas ativas, conjuntos de referência, watchlists, anomalias de detecção, agregações e assim por diante. Você pode usar referências fornecidas pelo SIEM herdado a fim de entender como mapear melhor a sintaxe da sua consulta.

      4. Identifique a condição de gatilho e a ação de regra e, em seguida, construa e revise sua consulta KQL. Ao revisar sua consulta, considere os recursos de diretrizes de otimização do KQL.

  3. Teste a regra com cada um de seus casos de uso relevantes. Se isso não fornecer os resultados esperados, examine o KQL e teste-o novamente.

  4. Quando estiver satisfeito, você poderá considerar a regra migrada. Crie um guia estratégico para sua ação de regra, conforme necessário. Para saber mais, confira Automatizar a resposta a ameaças com guias estratégicos no Microsoft Sentinel.

Saiba mais sobre as regras de análise:

Comparar a terminologia de regra

Esta tabela ajuda você a esclarecer o conceito de uma regra no Microsoft Sentinel em comparação com o ArcSight.

ArcSight Microsoft Sentinel
Tipo de regra • Regra do filtro
• Regra de junção
• Regra de lista ativa
• E muito mais
• Consulta agendada
• Fusão
• Segurança da Microsoft
• Análise Comportamental de ML (Machine Learning)
Critérios Definir nas condições de regra Definir no KQL
Condição do gatilho • Definir em ação
• Definir na agregação (para agregação de eventos)
Limite: número de resultados da consulta
Ação • Definir campo de evento
• Enviar notificação
• Criar novo caso
• Adicionar à lista ativa
• E muito mais
• Criar alerta ou incidente
• Integra-se aos Aplicativos Lógicos

Mapear e comparar exemplos de regra

Use esses exemplos para comparar e mapear regras do ArcSight para o Microsoft Sentinel em vários cenários.

Regra Descrição Regra de detecção de exemplo (ArcSight) Consulta KQL de exemplo Recursos
Filtro (AND) Uma regra de exemplo com condições AND. O evento deve corresponder a todas as condições. Exemplo de filtro (AND) Exemplo de filtro (AND) Filtro da cadeia de caracteres:
Operadores da cadeia de caracteres

Filtro numérico:
Operadores numéricos

Filtro de datetime:
ago
Datetime
between
now

Análise:
parse
extract
parse_json
parse_csv
parse_path
parse_url
Filtro (OR) Uma regra de exemplo com condições OR. O evento pode corresponder a qualquer uma das condições. Exemplo de filtro (OR) Exemplo de filtro (OR) Operadores da cadeia de caracteres
in
Filtro aninhado Uma regra de exemplo com condições de filtragem aninhada. A regra inclui a instrução MatchesFilter, que também inclui condições de filtragem. Exemplo de filtro aninhado Exemplo de filtro aninhado Função KQL de exemplo
Função de parâmetro de exemplo
join
where
Lista ativa (pesquisa) Uma regra de pesquisa de exemplo que usa a instrução InActiveList. Exemplo de lista ativa (pesquisa) Exemplo de lista ativa (pesquisa) • Uma watchlist é o equivalente ao recurso de lista ativa. Saiba mais sobre watchlists.
Outras maneiras de implementar pesquisas
Correlação (correspondência) Uma regra de exemplo que define uma condição em relação a um conjunto de eventos base, usando a instrução Matching Event. Exemplo de correlação (correspondência) Exemplo de correlação (correspondência) operador de junção:
join
join com janela de tempo
shuffle
Broadcast
Union

instrução de definição:
let

Agregação:
make_set
make_list
make_bag
bag_pack
Correlação (janela de tempo) Uma regra de exemplo que define uma condição em relação a um conjunto de eventos base, usando a instrução Matching Event e usa a condição de filtro Wait time. Exemplo de correlação (janela de tempo) Exemplo de correlação (janela de tempo) join
Instrução de junção e regras do Microsoft Sentinel

Exemplo de filtro (AND): ArcSight

Aqui está uma regra de filtro de exemplo com condições AND no ArcSight.

Diagrama ilustrando uma regra de filtro de exemplo.

Exemplo de filtro (AND): KQL

Aqui está a regra de filtro com condições AND no KQL.

SecurityEvent
| where EventID == 4728
| where SubjectUserName =~ "AutoMatedService"
| where isnotempty(SubjectDomainName)

Essa regra pressupõe que o AMA (agente do Azure Monitor) coleta eventos de Segurança do Windows. Portanto, a regra usa a tabela SecurityEvent do Microsoft Sentinel.

Considere estas práticas recomendadas:

  • Para otimizar suas consultas, evite operadores que não diferenciam maiúsculas de minúsculas quando possível: =~.
  • Use == se o valor não diferencia maiúsculas de minúsculas.
  • Solicite os filtros começando com a instrução where, que filtra a maioria dos dados.

Exemplo de filtro (OR): ArcSight

Aqui está uma regra de filtro de exemplo com condições OR no ArcSight.

Diagrama ilustrando uma regra de filtro de exemplo (ou).

Exemplo de filtro (OR): KQL

Aqui estão algumas maneiras de escrever a regra de filtro com condições OR no KQL.

Como primeira opção, use a instrução in:

SecurityEvent
| where SubjectUserName in
 ("Adm1","ServiceAccount1","AutomationServices")

Como segunda opção, use a instrução or:

SecurityEvent
| where SubjectUserName == "Adm1" or 
SubjectUserName == "ServiceAccount1" or 
SubjectUserName == "AutomationServices"

Embora ambas as opções sejam idênticas no desempenho, recomendamos a primeira opção, que é mais fácil de ler.

Exemplo de filtro aninhado: ArcSight

Aqui está uma regra de filtro aninhado de exemplo no ArcSight.

Diagrama ilustrando uma regra de filtro aninhado de exemplo.

Aqui está uma regra para o filtro /All Filters/Soc Filters/Exclude Valid Users.

Diagrama ilustrando um filtro Excluir Usuários Válidos.

Exemplo de filtro aninhado: KQL

Aqui estão algumas maneiras de escrever a regra de filtro com condições OR no KQL.

Como primeira opção, use um filtro direto com uma instrução where:

SecurityEvent
| where EventID == 4728 
| where isnotempty(SubjectDomainName) or 
isnotempty(TargetDomainName) 
| where SubjectUserName !~ "AutoMatedService"

Como segunda opção, use uma função KQL:

  1. Salve a consulta a seguir como uma função KQL com o alias ExcludeValidUsers.

        SecurityEvent
        | where EventID == 4728
        | where isnotempty(SubjectDomainName)
        | where SubjectUserName =~ "AutoMatedService"
        | project SubjectUserName
    
  2. Use a consulta a seguir para filtrar o alias ExcludeValidUsers.

        SecurityEvent    
        | where EventID == 4728
        | where isnotempty(SubjectDomainName) or 
        isnotempty(TargetDomainName)
        | where SubjectUserName !in (ExcludeValidUsers)
    

Como terceira opção, use uma função de parâmetro:

  1. Crie uma função de parâmetro com ExcludeValidUsers como o nome e o alias.

  2. Defina os parâmetros da função. Por exemplo:

        Tbl: (TimeGenerated:datetime, Computer:string, 
        EventID:string, SubjectDomainName:string, 
        TargetDomainName:string, SubjectUserName:string)
    
  3. A função parameter tem a seguinte consulta:

        Tbl
        | where SubjectUserName !~ "AutoMatedService"
    
  4. Execute a seguinte consulta para invocar a função de parâmetro:

        let Events = (
        SecurityEvent 
        | where EventID == 4728
        );
        ExcludeValidUsers(Events)
    

Como quarta opção, use a função join:

let events = (
SecurityEvent
| where EventID == 4728
| where isnotempty(SubjectDomainName) 
or isnotempty(TargetDomainName)
);
let ExcludeValidUsers = (
SecurityEvent
| where EventID == 4728
| where isnotempty(SubjectDomainName)
| where SubjectUserName =~ "AutoMatedService"
);
events
| join kind=leftanti ExcludeValidUsers on 
$left.SubjectUserName == $right.SubjectUserName

Considerações:

  • Recomendamos que você use um filtro direto com uma instrução where (primeira opção) devido à sua simplicidade. Para um desempenho otimizado, evite usar join (quarta opção).
  • Para otimizar suas consultas, evite os operadores =~ e !~ que não diferenciam maiúsculas de minúsculas quando possível. Use os operadores == e != se o valor não diferencia maiúsculas de minúsculas.

Exemplo de lista ativa (pesquisa): ArcSight

Aqui está uma regra de lista ativa (pesquisa) no ArcSight.

Diagrama ilustrando uma regra de lista ativa de exemplo (pesquisa).

Exemplo de lista ativa (pesquisa): KQL

Essa regra pressupõe que a watchlist de Contas de Exceção do Cyber-Ark exista no Microsoft Sentinel com um campo Conta.

let Activelist=(
_GetWatchlist('Cyber-Ark Exception Accounts')
| project Account );
CommonSecurityLog
| where DestinationUserName in (Activelist)
| where DeviceVendor == "Cyber-Ark"
| where DeviceAction == "Get File Request"
| where DeviceCustomNumber1 != ""
| project DeviceAction, DestinationUserName, 
TimeGenerated,SourceHostName, 
SourceUserName, DeviceEventClassID

Solicite os filtros começando com a instrução where, que filtra a maioria dos dados.

Exemplo de correlação (correspondência): ArcSight

Aqui está uma regra de exemplo do ArcSight que define uma condição em relação a um conjunto de eventos base, usando a instrução Matching Event.

Diagrama ilustrando uma regra de correlação de exemplo (correspondência).

Exemplo de correlação (correspondência): KQL

let event1 =(
SecurityEvent
| where EventID == 4728
);
let event2 =(
SecurityEvent
| where EventID == 4729
);
event1
| join kind=inner event2 
on $left.TargetUserName==$right.TargetUserName

Melhores práticas:

  • Para otimizar sua consulta, verifique se a tabela menor está no lado esquerdo da função join.
  • Se o lado esquerdo da tabela for relativamente pequeno (até 100 mil registros), adicione hint.strategy=broadcast para obter melhor desempenho.

Exemplo de correlação (janela de tempo): ArcSight

Aqui está uma regra de exemplo do ArcSight que define uma condição em relação a um conjunto de eventos base, usando a instrução, Matching Event e usa a condição de filtro Wait time.

Diagrama ilustrando uma regra de correlação de exemplo (janela de tempo).

Exemplo de correlação (janela de tempo): KQL

let waittime = 10m;
let lookback = 1d;
let event1 = (
SecurityEvent
| where TimeGenerated > ago(waittime+lookback)
| where EventID == 4728
| project event1_time = TimeGenerated, 
event1_ID = EventID, event1_Activity= Activity, 
event1_Host = Computer, TargetUserName, 
event1_UPN=UserPrincipalName, 
AccountUsedToAdd = SubjectUserName 
);
let event2 = (
SecurityEvent
| where TimeGenerated > ago(waittime)
| where EventID == 4729
| project event2_time = TimeGenerated, 
event2_ID = EventID, event2_Activity= Activity, 
event2_Host= Computer, TargetUserName, 
event2_UPN=UserPrincipalName,
 AccountUsedToRemove = SubjectUserName 
);
 event1
| join kind=inner event2 on TargetUserName
| where event2_time - event1_time < lookback
| where tolong(event2_time - event1_time ) >=0
| project delta_time = event2_time - event1_time,
 event1_time, event2_time,
 event1_ID,event2_ID,event1_Activity,
 event2_Activity, TargetUserName, AccountUsedToAdd,
 AccountUsedToRemove,event1_Host,event2_Host, 
 event1_UPN,event2_UPN

Exemplo de agregação: ArcSight

Aqui está uma regra de exemplo do ArcSight com configurações de agregação: três correspondências dentro de 10 minutos.

Diagrama ilustrando uma regra de agregação de exemplo.

Exemplo de agregação: KQL

SecurityEvent
| summarize Count = count() by SubjectUserName, 
SubjectDomainName
| where Count >3

Próximas etapas

Neste artigo, você aprendeu a mapear suas regras de migração do ArcSight para o Microsoft Sentinel.