Usando LLMs e ESRE para encontrar sessões de usuários semelhantes
Em nosso artigo anterior, exploramos o uso do GPT-4 Large Language Model (LLM) para condensar sessões complexas de usuários Linux em resumos concisos. Destacamos as principais conclusões dos nossos experimentos, esclarecendo as nuances do pré-processamento de dados, ajuste de prompts e ajustes de parâmetros do modelo. No contexto do mesmo experimento, dedicamos algum tempo para examinar sessões que compartilhavam semelhanças. Essas sessões semelhantes podem posteriormente ajudar os analistas a identificar atividades suspeitas relacionadas. Exploramos os seguintes métodos para encontrar semelhanças nas sessões do usuário:
- Em um esforço para descobrir perfis de usuários e sessões semelhantes, uma abordagem que empreendemos foi categorizar as sessões de acordo com as ações executadas pelos usuários; conseguimos isso instruindo o Modelo de Linguagem (LLM) a categorizar as sessões do usuário em categorias predefinidas
- Além disso, aproveitamos as capacidades do ELSER (modelo de recuperação do Elastic para pesquisa semântica) para executar uma pesquisa semântica nos resumos do modelo derivados do experimento de sumarização da sessão
Esta pesquisa se concentra em nossos experimentos usando GPT-4 para categorização de sessão e ESRE para pesquisa semântica.
Aproveitando o GPT para categorização de sessão
Consultamos um colega de pesquisa de segurança com experiência no domínio para definir nove categorias para nosso conjunto de dados de 75 sessões. Essas categorias generalizam os principais comportamentos e características significativas observadas nas sessões. Elas incluem as seguintes atividades:
- Execução do Docker
- Operações de rede
- Pesquisas de arquivo
- Uso da linha de comando do Linux
- Uso do aplicativo Linux Sandbox
- Instalações Pip
- Instalações de Pacotes
- Execuções de script
- Execuções de Processos
Lições aprendidas
Para nossos experimentos, usamos uma implantação GPT-4 no Azure AI Studio com um limite de token de 32k. Para explorar o potencial do modelo GPT para categorização de sessões, conduzimos uma série de experimentos, direcionando o modelo para categorizar sessões inserindo o mesmo documento de resumo JSON que usamos para o processo de sumarização de sessões.
Esse esforço incluiu diversas iterações, durante as quais nos concentramos em aprimorar os prompts e o Few-Shot Learning. Quanto aos parâmetros do modelo, mantivemos uma Temperatura de 0 em um esforço para tornar as saídas menos diversas.
Engenharia rápida
Conclusão: incluir explicações para categorias nos prompts não afeta o desempenho do modelo.
O componente de categorização de sessão foi introduzido como uma extensão do prompt de resumo de sessão. Exploramos o efeito de incorporar explicações contextuais para cada categoria juntamente com os prompts. Curiosamente, nossas descobertas revelaram que acrescentar contexto ilustrativo não influenciou significativamente o desempenho do modelo, em comparação com prompts desprovidos de tais informações suplementares.
Abaixo está um modelo que usamos para orientar o processo de categorização do modelo:
You are a cybersecurity assistant, who helps Security analysts in summarizing activities that transpired in a Linux session. A summary of events that occurred in the session will be provided in JSON format. No need to explicitly list out process names and file paths. Summarize the session in ~3 paragraphs, focusing on the following:
- Entities involved in the session: host name and user names.
- Overview of any network activity. What major source and destination ips are involved? Any malicious port activity?
- Overview of any file activity. Were any sensitive files or directories accessed?
- Highlight any other important process activity
- Looking at the process, network, and file activity, what is the user trying to do in the session? Does the activity indicate malicious behavior?
Also, categorize the below Linux session in one of the following 9 categories: Network, Script Execution, Linux Command Line Utility, File search, Docker Execution, Package Installations, Pip Installations, Process Execution and Linux Sandbox Application.
A brief description for each Linux session category is provided below. Refer to these explanations while categorizing the sessions.
- Docker Execution: The session involves command with docker operations, such as docker-run and others
- Network: The session involves commands with network operations
- File Search: The session involves file operations, pertaining to search
- Linux Command Line Utility: The session involves linux command executions
- Linux Sandbox Application: The session involves a sandbox application activity.
- Pip Installations: The session involves python pip installations
- Package Installations: The session involves package installations or removal activities. This is more of apt-get, yum, dpkg and general command line installers as opposed to any software wrapper
- Script Execution: The session involves bash script invocations. All of these have pointed custom infrastructure script invocations
- Process Execution: The session focuses on other process executions and is not limited to linux commands.
###
Text: {your input here}
Ajuste de poucos disparos
Conclusão: Adicionar exemplos para cada categoria melhora a precisão.
Simultaneamente, investigamos a eficácia de melhorar o desempenho do modelo incluindo um exemplo para cada categoria no prompt acima. Essa estratégia resultou em uma melhoria significativa, aumentando notavelmente a precisão do modelo em 20%.
Avaliando categorias GPT
A avaliação das categorias do GPT é crucial para medir a qualidade e a confiabilidade dos resultados. Na avaliação dos resultados da categorização, foi feita uma comparação entre a categorização do modelo e a categorização humana atribuída pelo especialista em segurança (chamado de "Ground_Truth" na imagem abaixo). Calculamos a precisão total com base no número de correspondências bem-sucedidas para avaliação de categorização.
Observamos que o GPT-4 enfrentou desafios ao lidar com amostras com múltiplas categorias. No entanto, ao atribuir uma única categoria, ela se alinhou à categorização humana em 56% dos casos. A categoria "Utilitário de linha de comando do Linux" representou um desafio específico, com 47% dos falsos negativos, muitas vezes classificados erroneamente como "Execução de processo" ou "Execução de script". Essa discrepância surgiu devido às definições intimamente relacionadas das categorias "Utilitário de linha de comando do Linux" e "Execução de processo", e também pode ter havido informações insuficientes nos prompts, como argumentos de linha de comando do processo, o que poderia ter servido como um fator de distinção valioso para essas categorias.
Considerando os resultados da nossa avaliação, concluímos que precisamos ajustar as descrições de cada categoria no prompt ou fornecer mais exemplos ao modelo por meio de treinamento de poucas tentativas. Além disso, vale a pena considerar se o GPT é a escolha mais adequada para classificação, principalmente dentro do contexto do paradigma de solicitação.
Pesquisa semântica com ELSER
Também queríamos testar o ELSER, o Elastic Learned Sparse EncodeR para pesquisa semântica. A pesquisa semântica se concentra no significado contextual, em vez de entradas de palavras-chave estritamente exatas, e o ELSER é um modelo de recuperação treinado pela Elastic que permite realizar pesquisas semânticas e recuperar resultados mais relevantes.
Tentamos alguns exemplos de perguntas de pesquisa semântica nos resumos das sessões. Os resumos das sessões foram armazenados em um índice do Elasticsearch, e foi simples baixar o modelo ELSER seguindo um tutorial oficial. Os tokens gerados pelo ELSER são armazenados no índice, conforme mostrado na imagem abaixo:
Posteriormente, a busca semântica no índice foi capaz de recuperar os eventos mais relevantes. Consultas de pesquisa semântica sobre os eventos incluíram:
- Senha relacionada – produzindo logs relacionados ao 1Password
- Java – produzindo logs que usaram Java
- Python – produzindo logs que usaram Python
- Sessão não interativa
- Sessão interativa
Um exemplo de pesquisa semântica pode ser visto no console do Dev Tools por meio de uma consulta text_expansion.
Algumas conclusões são:
- Para pesquisa semântica, o modelo de prompt pode fazer com que o resumo tenha muitas palavras-chave não relacionadas. Por exemplo, queríamos que cada resumo incluísse uma avaliação sobre se a sessão deveria ou não ser considerada "maliciosa". Essa palavra específica sempre era incluída no resumo resultante. Portanto, os resumos de sessões benignas e maliciosas continham a palavra "malicioso" em frases como "Esta sessão é maliciosa" ou "Esta sessão não é maliciosa". Isso pode ter afetado a precisão.
- A busca semântica parecia incapaz de diferenciar efetivamente entre certos conceitos relacionados, como interativo e não interativo. Um pequeno número de termos específicos pode não ter sido considerado importante o suficiente para o significado central do resumo da sessão para pesquisa semântica.
- A pesquisa semântica funciona melhor que o BM25 para casos em que o usuário não especifica as palavras-chave exatas. Por exemplo, pesquisar por logs e resumos relacionados a "Python" ou "Java" é igualmente eficaz tanto com o ELSER quanto com o BM25. No entanto, o ELSER poderia recuperar dados mais relevantes ao pesquisar por logs relacionados a “linguagem orientada a objetos”. Em contraste, usar uma pesquisa por palavra-chave para “linguagem orientada a objetos” não produz resultados relevantes, como mostrado na imagem abaixo.
O que vem a seguir?
Atualmente, estamos buscando melhorar ainda mais a sumarização por meio da geração aumentada de recuperação (RAG), usando ferramentas no Elastic Search and Relevance Engine (ESRE). Enquanto isso, gostaríamos de saber sobre seus experimentos com LLMs, ESRE, etc. Se você quiser compartilhar o que está fazendo ou tiver algum problema durante o processo, entre em contato conosco no canal da comunidade no Slack e nos fóruns de discussão.