Suricata 를 이용한 이상 징후 탐지

WiresharkBeginner
지금 연습하기

소개

이 랩에서는 강력한 오픈 소스 위협 탐지 엔진인 Suricata 를 사용하여 네트워크 이상 징후를 탐지하는 방법을 배우게 됩니다. 규칙 구성, 트래픽 모니터링, 경고 분석과 같은 주요 기능을 탐구하여 잠재적인 보안 위협을 식별할 것입니다.

실습을 통해 Suricata 설정, 기본 규칙 생성, 실시간 트래픽 검사를 안내합니다. ICMP ping 요청과 같은 의심스러운 활동을 탐지하고 특정 위협 시나리오에 맞게 규칙을 사용자 정의하는 실질적인 경험을 얻게 될 것입니다.

Suricata 설치

이 단계에서는 오픈 소스 네트워크 위협 탐지 엔진인 Suricata 를 설치합니다. Suricata 는 네트워크의 보안 카메라처럼 작동하여 잠재적인 위협을 식별하기 위해 지속적으로 트래픽을 분석합니다. 실시간 침입 탐지 (IDS) 를 통해 공격을 모니터링하고, 인라인 침입 방지 (IPS) 를 통해 악성 트래픽을 차단하며, 네트워크 보안 모니터링을 통해 모든 활동을 기록하는 세 가지 주요 기능을 수행할 수 있습니다.

단계별로 설치 프로세스를 시작해 보겠습니다.

  1. 먼저 패키지 목록을 업데이트해야 합니다. 이렇게 하면 아무것도 설치하기 전에 시스템이 최신 사용 가능한 소프트웨어 버전을 인식하도록 합니다.

    sudo apt update
    

    sudo 명령은 관리자 권한을 부여하고, apt update는 시스템의 사용 가능한 패키지 목록을 새로 고칩니다.

  2. 이제 Suricata 와 필요한 모든 구성 요소 (종속성) 를 설치합니다. -y 플래그는 설치를 자동으로 확인합니다.

    sudo apt install -y suricata
    

    이 명령은 Ubuntu 의 공식 저장소에서 Suricata 소프트웨어 패키지를 다운로드하여 설치합니다.

  3. 설치 후, 설치된 버전을 확인하여 모든 것이 제대로 작동하는지 확인해 보겠습니다.

    suricata -V
    

    다음과 유사한 출력을 볼 수 있습니다.

    This is Suricata version 6.0.3 RELEASE
    

    -V 플래그는 Suricata 에게 버전 정보를 표시하도록 지시합니다. 이 출력을 보면 설치가 성공적으로 완료되었음을 확인할 수 있습니다.

  4. Suricata 의 동작은 구성 파일에 의해 제어됩니다. 이 중요한 파일이 기본 위치에 있는지 확인해 보겠습니다.

    ls /etc/suricata/suricata.yaml
    

    /etc/suricata/ 디렉토리는 Linux 가 일반적으로 시스템 전체 응용 프로그램의 구성 파일을 저장하는 곳입니다.

  5. 마지막으로, Suricata 는 네트워크 트래픽에서 무엇을 찾아야 하는지 알기 위해 규칙이 필요합니다. 이러한 규칙은 Suricata 에게 의심스러운 활동이 무엇인지 알려주는 일련의 지침과 같습니다. 기본 규칙은 다음 위치에 저장됩니다.

    ls /var/lib/suricata/rules
    

    /var/lib/suricata/rules 디렉토리에는 Suricata 설치와 함께 제공되는 규칙 파일이 포함되어 있습니다. 이 랩의 뒷부분에서 이러한 규칙을 사용해 보겠습니다.

기본 규칙 구성

이 단계에서는 Suricata 에 대한 기본 탐지 규칙을 구성합니다. 규칙은 Suricata 에게 네트워크 트래픽에서 무엇을 찾아야 하는지 알려주는 핵심 구성 요소입니다. 의심스러운 패턴이나 알려진 위협을 정의하는 일련의 지침이라고 생각하십시오.

  1. 먼저 모든 규칙 파일이 저장된 Suricata 규칙 디렉토리로 이동합니다.

    cd /var/lib/suricata/rules
    

    이것은 Suricata 가 기본 및 사용자 지정 규칙 파일을 보관하는 곳입니다. 디렉토리 위치는 Suricata 의 구성에 지정되어 있습니다.

  2. 기존 규칙 파일을 나열하여 이미 사용 가능한 항목을 확인합니다.

    ls
    

    suricata.rules와 같은 여러 .rules 파일을 볼 수 있습니다. 이러한 파일에는 Suricata 가 탐지에 사용하는 다양한 범주의 규칙이 포함되어 있습니다.

  3. 기본 규칙 구조를 살펴보겠습니다. nano 편집기를 사용하여 기본 규칙 파일을 엽니다.

    sudo nano suricata.rules
    

    nano 편집기는 규칙을 수정하는 데 사용할 간단한 텍스트 편집기입니다. 유사한 구조의 많은 기존 규칙을 볼 수 있습니다.

  4. ICMP ping 요청을 탐지하는 간단한 규칙을 추가합니다 (파일 끝에 추가).

    alert icmp any any -> any any (msg:"ICMP Ping Detected"; itype:8; sid:1000001; rev:1;)
    

    이 규칙이 수행하는 작업을 자세히 살펴보겠습니다.

    • alert: 일치할 때 Suricata 에게 경고를 생성하도록 지시합니다.
    • icmp: ICMP 프로토콜 트래픽에 적용됩니다.
    • any any -> any any: 모든 소스 IP/포트에서 모든 대상 IP/포트로 일치합니다.
    • msg: 로그에 표시될 경고 메시지입니다.
    • itype:8: 특히 ICMP 유형 8(ping 요청) 과 일치합니다.
    • sid: 고유한 규칙 식별자 (사용자 지정 규칙의 경우 1000001+)
    • rev: 규칙 개정 번호
  5. 파일을 저장합니다 (nano 에서 Ctrl+O, Enter, Ctrl+X). 이렇게 하면 새 규칙이 영구적으로 저장됩니다.

  6. 규칙을 적용하기 전에 규칙 구문이 올바른지 확인합니다.

    sudo suricata -T -c /etc/suricata/suricata.yaml -v
    

    -T 플래그는 구성을 테스트합니다. 다음으로 끝나는 출력을 볼 수 있습니다.

    Configuration provided was successfully loaded. Exiting.
    

    이렇게 하면 규칙의 형식이 올바르게 지정되었는지 확인됩니다.

  7. 새 규칙을 로드하고 모니터링을 시작하려면 Suricata 를 다시 시작합니다.

    sudo pkill suricata
    sudo suricata -c /etc/suricata/suricata.yaml -i eth0
    

    첫 번째 명령은 실행 중인 Suricata 인스턴스를 중지하고, 두 번째 명령은 새 규칙으로 eth0 인터페이스를 모니터링하면서 새로 시작합니다.

실시간 트래픽 모니터링

이 단계에서는 Suricata 가 실시간 네트워크 트래픽을 모니터링하고 이전에 구성한 규칙을 기반으로 경고를 생성하는 방법을 관찰합니다. 이것은 모든 IDS(Intrusion Detection System, 침입 탐지 시스템) 의 핵심 기능입니다. 즉, 네트워크 패킷을 감시하고 의심스러운 활동에 플래그를 지정하는 것입니다.

  1. 먼저 실시간 캡처 모드에서 Suricata 를 시작해야 합니다. 다음 명령은 먼저 실행 중인 Suricata 인스턴스 (있는 경우) 를 중지한 다음 eth0 인터페이스를 모니터링하는 새 인스턴스를 시작합니다.

    sudo pkill suricata
    sudo suricata -c /etc/suricata/suricata.yaml -i eth0
    

    -c 플래그는 구성 파일을 지정하고, -i는 Suricata 에게 모니터링할 네트워크 인터페이스를 알려줍니다.

  2. 이제 이전 단계에서 ICMP 규칙을 트리거해야 하는 테스트 트래픽을 생성해 보겠습니다. 새 터미널을 열고 다음을 실행합니다.

    ping -c 3 8.8.8.8
    

    이것은 Google 의 DNS 서버 (8.8.8.8) 로 3 개의 ICMP ping 패킷을 보냅니다. ICMP 트래픽을 탐지하는 규칙을 만들었으므로 Suricata 는 이 활동을 기록해야 합니다.

  3. Suricata 는 경고를 /var/log/suricata/fast.log에 기록합니다. 이러한 경고를 실시간으로 보려면 다음을 사용합니다.

    sudo tail -f /var/log/suricata/fast.log
    

    tail -f 명령은 파일에 추가된 새 줄을 지속적으로 표시합니다. 다음과 유사한 출력을 볼 수 있습니다.

    01/01/2023-12:34:56.123456  [**] [1:1000001:1] ICMP Ping Detected [**] [Classification: (null)] [Priority: 3] {ICMP} 192.168.1.1 -> 8.8.8.8
    

    이것은 타임스탬프, 규칙 ID(1:1000001:1), 경고 메시지 및 소스/대상 IP 주소를 보여줍니다.

  4. JSON 형식의 보다 자세한 로깅을 위해 eve.json 파일을 검사할 수 있습니다. 다음 명령은 경고 이벤트만 필터링하고 보기 좋게 인쇄합니다.

    sudo tail -f /var/log/suricata/eve.json | jq '. | select(.event_type == "alert")'
    

    jq 도구는 JSON 출력을 구문 분석하고 형식을 지정하여 읽기 쉽게 만듭니다.

  5. Suricata 가 처리하는 트래픽에 대한 통계를 보려면, 생성된 경고 수를 포함하여 다음을 실행합니다.

    sudo suricatasc -c stats
    

    출력에서 detect.alert와 같은 카운터를 찾습니다. 이는 규칙이 경고를 트리거한 횟수를 보여줍니다.

  6. 트래픽 관찰을 마치면 로그를 모니터링하는 모든 터미널 창에서 Ctrl+C 를 눌러 지속적인 출력을 중지합니다.

생성된 알림 검토

이 단계에서는 이전 모니터링 세션에서 Suricata 가 생성한 경고를 분석합니다. 이를 통해 규칙을 트리거한 트래픽 패턴을 이해할 수 있습니다. 침입 탐지 시스템으로 작업할 때 잠재적인 보안 위협을 식별하고 탐지 규칙을 미세 조정하려면 경고 검토가 중요합니다.

  1. 먼저 기본 경고 로그를 확인합니다.

    sudo cat /var/log/suricata/fast.log
    

    이 명령은 타임스탬프가 있는 경고를 간단하고 사람이 읽을 수 있는 형식으로 표시합니다. fast.log는 Suricata 의 기본 경고 출력 파일입니다. "ICMP Ping Detected"가 포함된 항목을 찾습니다. 이는 탐지 규칙과 일치하는 ping 요청을 나타냅니다.

  2. 보다 자세한 분석을 위해 구조화된 JSON 로그를 검사합니다.

    sudo cat /var/log/suricata/eve.json | jq '. | select(.event_type == "alert")'
    

    eve.json 파일에는 JSON 형식의 포괄적인 기계 판독 가능 로그가 포함되어 있습니다. jq를 사용하여 경고 이벤트만 필터링합니다. 이는 다음을 포함한 자세한 정보를 제공합니다.

    • 소스 및 대상 IP 주소
    • 정확한 타임스탬프
    • 전체 규칙 세부 정보
    • 패킷 페이로드 정보 (구성된 경우)
  3. 각 경고가 트리거된 횟수를 계산하려면 다음을 수행합니다.

    sudo grep -o "ICMP Ping Detected" /var/log/suricata/fast.log | wc -l
    

    이 파이프라인은 먼저 grep -o를 사용하여 "ICMP Ping Detected"의 모든 발생을 추출한 다음 wc -l로 계산합니다. 이는 이 이벤트가 얼마나 자주 발생하는지 정량화하는 데 도움이 됩니다.

  4. 경고 유형 요약을 보려면 다음을 수행합니다.

    sudo jq -r '.alert.signature' /var/log/suricata/eve.json | sort | uniq -c
    

    이 명령은 모든 경고 시그니처 (규칙 이름) 를 추출하고, 알파벳순으로 정렬한 다음 고유한 발생 횟수를 계산합니다. 어떤 규칙이 가장 자주 트리거되는지 개략적으로 보여줍니다.

  5. 소스 IP 정보를 사용하여 경고를 보려면 다음을 수행합니다.

    sudo jq -r 'select(.event_type == "alert") | [.timestamp, .src_ip, .alert.signature] | @tsv' /var/log/suricata/eve.json
    

    이 고급 jq 쿼리는 각 이벤트에 대한 타임스탬프, 소스 IP 및 경고 시그니처를 표시하는 탭으로 구분된 출력을 생성합니다. @tsv 형식은 스프레드시트로 쉽게 가져올 수 있도록 합니다.

  6. 가장 최근 5 개의 경고를 확인하려면 다음을 수행합니다.

    sudo tail -n 5 /var/log/suricata/fast.log
    

    tail 명령은 파일의 마지막 몇 줄을 표시합니다. 전체 로그를 스크롤하지 않고 최근 활동을 빠르게 확인하는 데 유용합니다.

사용자 지정 규칙 추가

이 단계에서는 네트워크 트래픽에서 특정 패턴을 감지하기 위해 자체 Suricata 규칙을 생성하고 테스트하는 방법을 배웁니다. 실용적인 예로 테스트 도메인 (example.com) 에 대한 HTTP 요청을 감지하는 데 중점을 둡니다. 사용자 지정 규칙을 사용하면 기본 규칙 집합을 넘어 Suricata 의 탐지 기능을 확장할 수 있습니다.

  1. 먼저 Suricata 가 탐지 규칙을 저장하는 규칙 디렉토리로 이동합니다.

    cd /var/lib/suricata/rules
    

    이것은 모든 Suricata 규칙 파일이 일반적으로 저장되는 곳입니다. 기존 규칙과 함께 정리하기 위해 여기에 사용자 지정 규칙을 추가합니다.

  2. 사용자 지정 규칙을 위해 특별히 새 규칙 파일을 만듭니다.

    sudo nano custom.rules
    

    규칙 디렉토리를 수정하려면 관리자 권한이 필요하므로 sudo를 사용하는 것이 필요합니다. 파일을 custom.rules로 지정하여 Suricata 의 기본 규칙 파일과 명확하게 구분합니다.

  3. example.com 에 대한 HTTP 요청을 감지하는 다음 규칙을 추가합니다.

    alert http any any -> any any (msg:"HTTP Request to example.com"; flow:to_server; http.host; content:"example.com"; nocase; sid:1000002; rev:1;)
    

    이 규칙이 수행하는 작업을 자세히 살펴보겠습니다.

    • alert http: HTTP 트래픽에 대한 경고를 트리거합니다.
    • any any -> any any: 모든 소스 포트에서 모든 대상 포트로의 트래픽에 적용됩니다.
    • msg: 사람이 읽을 수 있는 경고 메시지를 제공합니다.
    • flow:to_server: 서버로 가는 트래픽만 일치시킵니다.
    • http.host: HTTP Host 헤더를 검사합니다.
    • content:"example.com": 이 특정 도메인을 찾습니다.
    • nocase: 일치를 대소문자를 구분하지 않도록 합니다.
    • sid:1000002: 규칙에 고유 ID 를 부여합니다 (사용자 지정 규칙의 경우 1,000,000 이상).
    • rev:1: 이 규칙의 첫 번째 버전임을 나타냅니다.
  4. Ctrl+O(쓰기) 를 누른 다음 Enter 를 눌러 확인하고 Ctrl+X 를 눌러 종료하여 nano 편집기에서 파일을 저장합니다.

  5. 이제 Suricata 에게 새 규칙 파일을 로드하도록 알려야 합니다. 기본 구성을 편집합니다.

    sudo nano /etc/suricata/suricata.yaml
    

    rule-files: 섹션 (일반적으로 50-60 행 근처) 을 찾아 다음을 추가합니다.

    - custom.rules
    

    이 추가는 Suricata 가 시작될 때 사용자 지정 규칙을 로드하도록 합니다.

  6. 변경 사항을 적용하기 전에 규칙 구문이 올바른지 확인합니다.

    sudo suricata -T -c /etc/suricata/suricata.yaml -v
    

    -T 플래그는 실제로 실행하지 않고 구성을 테스트하도록 Suricata 에 지시합니다. 이렇게 하면 규칙을 사용하기 전에 구문 오류를 포착하는 데 도움이 됩니다.

  7. 새 규칙을 로드하려면 Suricata 를 다시 시작합니다.

    sudo pkill suricata
    sudo suricata -c /etc/suricata/suricata.yaml -i eth0
    

    첫 번째 명령은 실행 중인 Suricata 인스턴스를 중지하고, 두 번째 명령은 업데이트된 구성으로 새롭게 시작합니다.

  8. 규칙이 작동하는지 테스트하려면 example.com 에 대한 HTTP 트래픽을 생성합니다.

    curl http://example.com
    

    이 명령은 새 규칙을 트리거해야 하는 간단한 HTTP 요청을 만듭니다.

  9. 마지막으로 Suricata 가 트래픽을 감지했는지 확인하려면 최신 경고를 봅니다.

    sudo tail -n 5 /var/log/suricata/fast.log
    

    example.com 에 대한 HTTP 요청에 대한 사용자 지정 규칙의 메시지와 일치하는 경고가 표시되어야 합니다. 그렇지 않은 경우 각 단계를 다시 확인하고 규칙 구문을 확인합니다.

요약

이 Lab 에서는 오픈 소스 네트워크 위협 탐지 엔진인 Suricata 를 설치하고 구성하는 방법을 배웠습니다. 이 프로세스에는 패키지 업데이트, 종속성 설치, 구성 파일 및 규칙 디렉토리를 확인하여 설치를 확인하는 작업이 포함되었습니다.

또한 ICMP ping 요청 규칙을 추가하여 사용자 지정 탐지 규칙을 생성하고, 해당 구조와 구성 요소를 이해하는 방법을 탐구했습니다. 마지막으로, Suricata 가 네트워크 트래픽을 효과적으로 모니터링하고 이상 징후에 대한 경고를 생성할 수 있도록 규칙 구문을 확인했습니다.