esta é a parte quatro da série “Hunting with Splunk: the Basics”.
Usando metadados e tstats para estabelecer rapidamente a consciência situacional
Então você quer caçar, hein??? Bem, meu jovem padwa, espere. Como um Jedi Splunk me disse uma vez, você tem que primeiro ir devagar para ir rápido. O que quero dizer com isso? Bem, se você se apressar em caçar ameaças e começar a lançar SPL indiscriminadamente, corre o risco de criar lacunas em sua investigação. Que lacunas podem ser essas? Como um homem sábio disse uma vez, conheça sua rede. Na verdade—neste caso—conheça sua rede e hosts. Para caçar efetivamente, entender os dados que você tem e não tem para seus hosts é fundamental. Sem esse conhecimento, você corre o risco de fazer suposições que levam a decisões ruins enquanto caça ameaças.
hoje, vou compartilhar com vocês minha metodologia em torno da coleta inicial de informações e como uso os comandos metadados e tstats para entender os dados disponíveis para mim quando começo a caçar ameaças.
vamos começar olhando os metadados. O comando metadados é um comando gerador, o que significa que é o primeiro comando em uma pesquisa. Para aqueles que não estão totalmente atualizados no Splunk, existem certos campos que são escritos no momento do Índice. Esses campos são _time, source (onde o evento se originou; pode ser UM filepath ou um valor de Protocolo/porta), sourcetype (tipo de dados da máquina) e host (nome do host ou IP que gerou um evento). Esses campos de metadados (veja o que eu fiz lá?) pode ser pesquisado e retornado com valores que incluem primeira vez, última vez e contar para um determinado valor.
Aqui estão alguns exemplos.
Meu gerente me encarregou de começar a caçar com base em alguns indicadores reunidos recentemente. Meu primeiro pensamento é ver que tenho conjuntos de dados disponíveis para mim que dizem respeito ao tempo em que estou caçando. Esta é uma pesquisa rápida que eu poderia executar para enumerar sourcetypes no Splunk nos últimos sete dias.
como você pode ver, nos últimos sete dias eu tenho 5.162 eventos FireEye. Fazendo uma pequena conversão de tempo De época, determino que os dados atingiram meu indexador pela primeira vez em 12 de Maio de 2017 às 2:31:00 GMT e a última vez que foi vista no meu indexador foi 20 de Maio de 2017 22:01:12 GMT. Com base no intervalo de tempo da minha pesquisa—era de 13 de Maio às 22:00 GMT a 20 de Maio às 22:38:15 GMT—tenho um alto nível de confiança de que meus dados do FireEye são bastante atuais, mas se minha investigação voltar antes de 12 de Maio, Não tenho dados do FireEye para trabalhar, o que poderia afetar a forma como abordo essa atividade ou diminuir minha confiança na determinação de quando algo foi visto pela primeira vez na minha rede.
agora que sei quais tipos de dados tenho no Splunk, vamos ver por quais hosts estão enviando dados-tenho dados atuais para todos os meus hosts? Talvez eu queira isolar em hosts que estão escrevendo para um índice específico. Nesse caso, quero ver todos os hosts que têm dados no índice ‘os’ porque sei que os dados nesse índice serão importantes para mim na minha busca.
o comando metadata não tem muitas opções, mas você pode restringir a pesquisa a índices específicos, pares de pesquisa ou grupos de servidores e até tipos de fontes (como fiz acima). Depois de ter um conjunto de resultados, você pode flexionar seus músculos SPL nos resultados para obter informações adicionais. Talvez você queira melhorar a consciência situacional antes da caça e verificar se existem hosts específicos que não enviaram dados para Splunk nas últimas 24 horas.
nesta pesquisa, usei o comando metadata para obter uma lista de hosts. Usando a função eval, pesquisa e fieldformat comandos, eu era capaz de filtro para baixo para hosts que não tinha registrado por mais de 24 horas, alterar os valores de tempo para algo mais amigável do usuário para exibir do que o que eu mostrei no primeiro exemplo, e, em seguida, classificar e de saída em uma exibição de tabela que pode ser rapidamente consumida.
algumas considerações finais sobre metadados. Ele requer que o recurso get_metadata seja associado a uma função que o usuário tenha antes de poder ser usado. (Fato divertido: você sabia que, sob o capô, você realmente executa o comando metadados quando clica no botão Resumo de dados na página inicial de pesquisa?)
e agora para algo completamente diferente… (Não, Não realmente).
outro comando poderoso, mas menos conhecido no Splunk, é o Tstats. O comando tstats – além de poder pular edifícios altos em um único limite (ok, talvez não)—pode produzir resultados de pesquisa em velocidade ofuscante. Muito parecido com metadados, tstats é um comando gerador e funciona em campos indexados (host, source, sourcetype e _time), bem como modelos de dados. Eu amo modelos de dados tanto quanto o próximo cara, mas não há espaço suficiente para falar sobre eles neste post, então vamos salvá-los para outro momento.Enquanto isso, quero melhorar minha consciência situacional já estabelecida e responder a uma pergunta fundamental ao iniciar uma caçada – a que informações tenho acesso e tenho pontos cegos? Talvez eu queira visualizar rapidamente meus eventos DNS.
posso gerar rapidamente uma contagem total de eventos nos últimos sete dias em que o tipo de fonte é stream:dns e os dados residem no índice principal. Nesta pesquisa, os dados são divididos por _tempo e host em intervalos de 1 hora. Como metadados – depois de executar minha pesquisa inicial—posso usar SPL para formatar os dados como achar melhor, neste caso usando o comando xyseries e, em seguida, aplicar um gráfico de área a ele para gerar um gráfico de eventos vindos do host onde estou coletando DNS. É importante notar que usar tstats dessa maneira não é ideal para mais do que um punhado de hosts. Se você está procurando uma saída tabular e conta, não se preocupe—isso pode ser altamente eficaz. Tentar representar graficamente muitos hosts pode ficar muito ocupado, dificultando o consumo rápido de um analista.
com esse aviso suave, vamos criar uma pesquisa para identificar rapidamente hosts que estão registrando mais ou menos dados do que normalmente seria esperado. Colocar limites nos dados—mesmo quando vem de um grande número de hosts—pode ser feito facilmente.
para esta pesquisa, estou olhando para hosts fazendo logon no índice ‘ os ‘ e quero olhar para trás nos últimos sete dias, registrando o tempo em intervalos de 3 horas para encontrar a contagem mediana de eventos por host. Mediana é apenas uma opção estatística que posso usar; percentil e média também estão disponíveis, então use o que você acha apropriado. Em seguida, olhei para trás nas últimas 3 horas para obter as mesmas informações. Para determinar a diferença percentual entre a mediana e a contagem atual, dividimos para obter um valor percentual e filtramos para resultados +/-5%. Classificar e renomear campos facilita o consumo, pois agora tenho meus outliers, além de produzir um gráfico que mostra a mediana e os volumes de eventos atuais mapeados junto com a diferença percentual.