Kirti SodhiSusan ChangApoorva Joshi

LLM 및 ESRE를 사용하여 유사한 사용자 세션 찾기

이전 글에서 GPT-4 대형 언어 모델(LLM)을 활용하여 Linux 사용자 세션을 요약하는 방법을 살펴보았습니다. 같은 실험의 맥락에서, 우리는 유사한 특성을 가진 세션들을 분석하는 데 시간을 할애했습니다. 이러한 유사한 세션은 이후 분석가들이 관련된 의심 활동을 식별하는 데 도움이 될 수 있습니다.

LLM과 ESRE로 유사 사용자 세션 탐색

LLM과 ESRE로 유사 사용자 세션 탐색

이전 글에서는 복잡한 Linux 사용자 세션을 간결한 요약으로 압축하기 위해 GPT-4 LLM(대규모 언어 모델)을 사용하는 방법을 살펴봤습니다. 데이터 전처리, 프롬프트 튜닝, 모델 매개변수 조정의 미묘한 차이를 조명하면서 실험에서 얻은 주요 시사점을 강조했습니다. 동일한 실험의 맥락에서 유사점을 공유하는 세션을 조사하는 데 시간을 할애했습니다. 이러한 유사한 세션은 이후 분석가가 관련 의심스러운 활동을 식별하는 데 도움이 될 수 있습니다. 사용자 세션에서 유사점을 찾기 위해 다음과 같은 방법을 살펴봤습니다:

  • 유사한 사용자 프로필과 세션을 발견하기 위해 취한 한 가지 접근 방식은 사용자가 실행한 작업에 따라 세션을 분류하는 것이었는데, 언어 모델 모델(LLM)에 사용자 세션을 미리 정의된 카테고리로 분류하도록 지시하여 이를 달성했습니다.
  • 또한, 세션 요약 실험에서 도출된 모델 요약에 대한 시맨틱 검색을 실행하기 위해 ELSER (Elastic의 시맨틱 검색을 위한 검색 모델)의 기능을 활용했습니다.

이 연구는 세션 분류를 위해 GPT-4를 사용하고 의미 검색을 위해 ESRE를 사용한 실험에 중점을 둡니다.

세션 분류에 GPT 활용하기

도메인 전문 지식을 갖춘 보안 연구원의 자문을 받아 75 세션의 데이터 세트에 대한 9가지 범주를 정의했습니다. 이러한 카테고리는 세션에서 관찰된 주요 행동과 중요한 특징을 일반화합니다. 여기에는 다음과 같은 활동이 포함됩니다:

  • 도커 실행
  • 네트워크 운영
  • 파일 검색
  • Linux 명령줄 사용법
  • Linux 샌드박스 애플리케이션 사용
  • Pip 설치
  • 패키지 설치
  • 스크립트 실행
  • 프로세스 실행

배운 교훈

실험을 위해 토큰 제한을 32,000개로 설정한 Azure AI Studio의 GPT-4 배포를 사용했습니다. 세션 분류를 위한 GPT 모델의 잠재력을 탐색하기 위해, 세션 요약 프로세스에 사용한 것과 동일한 JSON 요약 문서를 입력하여 세션을 분류하도록 모델에 지시하는 일련의 실험을 수행했습니다.

이러한 노력에는 여러 번의 반복이 포함되었으며, 그 과정에서 프롬프트와 Few-Shot 학습을 개선하는 데 집중했습니다. 모델 파라미터의 경우, 출력의 다양성을 줄이기 위해 온도를 0으로 유지했습니다.

신속한 엔지니어링

테이크아웃: 프롬프트에 카테고리에 대한 설명을 포함해도 모델의 성능에는 영향을 미치지 않습니다.

세션 분류 구성 요소는 세션 요약 프롬프트의 확장으로 도입되었습니다. 각 카테고리에 대한 문맥 설명을 프롬프트와 함께 통합했을 때의 효과를 살펴봤습니다. 흥미로운 사실은 이러한 추가 정보가 없는 프롬프트에 비해 예시 문맥을 추가하는 것이 모델의 성능에 큰 영향을 미치지 않는다는 점입니다.

아래는 모델의 분류 프로세스를 안내하는 데 사용한 템플릿입니다:

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}

소수 샷 튜닝

테이크아웃: 각 카테고리에 대한 예시를 추가하면 정확도가 향상됩니다.

동시에 위의 프롬프트에 각 카테고리별로 하나의 예시를 포함시켜 모델 성능 개선의 효과를 조사했습니다. 이 전략을 통해 모델의 정확도가 20% 향상되는 등 상당한 개선이 이루어졌습니다.

GPT 카테고리 평가

GPT 카테고리의 평가는 결과의 품질과 신뢰성을 측정하는 데 매우 중요합니다. 분류 결과의 평가에서는 모델의 분류와 보안 전문가가 지정한 사람의 분류를 비교했습니다(아래 이미지에서 "Ground_Truth" 참조). 분류 평가를 위해 성공적으로 일치한 횟수를 기준으로 총 정확도를 계산했습니다.

GPT-4는 여러 범주의 샘플을 처리할 때 어려움을 겪는 것으로 나타났습니다. 그러나 단일 카테고리를 지정할 때는 56%의 경우에서 인간 분류와 일치했습니다. "Linux 명령줄 유틸리티" 카테고리는 오탐의 47%가 "프로세스 실행" 또는 "스크립트 실행으로 잘못 분류되는 경우가 많아 특히 문제가 되었습니다." 이러한 불일치는 "Linux 명령줄 유틸리티" 및 "프로세스 실행" 카테고리의 밀접하게 관련된 정의로 인해 발생했으며, 이러한 카테고리를 구분하는 데 중요한 역할을 할 수 있는 프로세스 명령줄 인수와 같은 프롬프트에 정보가 충분하지 않았을 수도 있습니다.

평가 결과를 고려할 때, 프롬프트의 각 카테고리에 대한 설명을 조정하거나 몇 번의 훈련을 통해 모델에 더 많은 예시를 제공해야 한다는 결론을 내렸습니다. 또한, 특히 프롬프트 패러다임의 맥락에서 GPT가 분류에 가장 적합한 선택인지 고려해 볼 가치가 있습니다.

ELSER를 사용한 시맨틱 검색

또한 시맨틱 검색을 위한 Elastic 학습형 스파스 엔코더인 ELSER도 사용해보고 싶었습니다. 시맨틱 검색은 엄격하게 정확한 키워드 입력이 아닌 문맥적 의미에 초점을 맞추며, ELSER는 Elastic에서 학습된 검색 모델로 시맨틱 검색을 수행하고 보다 관련성 높은 결과를 검색할 수 있게 해줍니다.

세션 요약에서 시맨틱 검색 질문의 몇 가지 예를 시도해 보았습니다. 세션 요약은 Elasticsearch 인덱스에 저장되었으며, 공식 튜토리얼을 따라 ELSER 모델을 다운로드하는 것은 간단했습니다. ELSER에서 생성된 토큰은 아래 이미지와 같이 인덱스에 저장됩니다:

그 후 인덱스의 시맨틱 검색은 전반적으로 가장 관련성이 높은 이벤트를 검색할 수 있었습니다. 이벤트에 대한 시맨틱 검색 쿼리가 포함됩니다:

  • 비밀번호 관련 - 1Password 관련 로그 생성
  • Java - Java를 사용한 로그 산출
  • Python - Python을 사용한 로그 산출
  • 비대화형 세션
  • 대화형 세션

시맨틱 검색의 예는 개발 도구 콘솔에서 text_expansion 쿼리를 통해 확인할 수 있습니다.

몇 가지 요점은 다음과 같습니다:

  • 시맨틱 검색의 경우, 프롬프트 템플릿으로 인해 요약에 관련 없는 키워드가 너무 많이 포함될 수 있습니다. 예를 들어, 모든 요약에 해당 세션이 "악성" 으로 간주되어야 하는지 여부에 대한 평가가 포함되도록 하여 특정 단어가 항상 결과 요약에 포함되도록 했습니다. 따라서 양성 세션과 악성 세션의 요약에는 모두 "이 세션은 악성입니다" 또는 "이 세션은 악성이 아닙니다" 와 같은 문장을 통해 "악성" 이라는 단어가 포함되어 있습니다. 이는 정확도에 영향을 미쳤을 수 있습니다.
  • 시맨틱 검색은 대화형과 비대화형과 같은 특정 관련 개념을 효과적으로 구분하지 못하는 것으로 보였습니다. 소수의 특정 용어가 시맨틱 검색을 위한 세션 요약의 핵심 의미에 충분히 중요하지 않은 것으로 간주되었을 수 있습니다.
  • 시맨틱 검색은 사용자가 정확한 키워드를 지정하지 않은 경우 BM25보다 더 잘 작동합니다. 예를 들어, "파이썬" 또는 "자바" 관련 로그 및 요약을 검색하는 것은 ELSER와 BM25 모두에서 동일하게 효과적입니다. 그러나 ELSER는 '객체 지향 언어' 관련 로그를 검색할 때 더 많은 관련 데이터를 검색할 수 있습니다. 반대로 '객체 지향 언어'라는 키워드 검색을 사용하면 아래 이미지와 같이 관련 검색 결과가 나오지 않습니다.

그 다음은 무엇일까요?

현재 Elastic 검색 및 연관성 엔진 (ESRE)의 도구를 사용해 검색 증강 생성(RAG)을 통한 요약 기능을 더욱 개선하는 방안을 검토하고 있습니다. 그동안 LLM, ESRE 등을 사용한 실험에 대한 여러분의 이야기를 듣고 싶습니다. 진행 중인 작업을 공유하거나 프로세스 중에 문제가 발생하면 커뮤니티 Slack 채널토론 포럼에 문의해 주세요.