IDS

justugi·2025년 6월 9일

네트워크 보안

목록 보기
11/13

IDS

  • 침입 탐지 시스템
  • 고도화된 침해 공격이나 특정 침해 사고가 발생한 경우 해당 발생 여부나 그 종류를 빠르고 정확하게 탐지하기 위한 목적으로 개발된 보안 솔루션
  • 정책을 기반으로 탐지하는 경우가 기본이고 추가적으로 정량적으로 패킷이나 데이터를 계산하거나 특정 시그니쳐를 기반으로 탐지하는 경우가 많음

snort

  • 실시간 트래픽 분석 및 네트워크 패킷 로깅 및 공격 탐지를 모두 수행하는 IDS

  • 대중화되어있는 오픈소스

  • 구성 요소

      1. 스니퍼 (sniffer)
      • NIC 장비를 promoscuous 모드로 동작
      • 네트워크 패킷 수집
      1. 전처리기 (preprocessor)
      • 수집한 패킷을 특정 탐지 프로그램으로 검사
      • 의심되는 데이터를 탐지 엔진으로 전송
      1. 탐지 엔진 (detection engine)
      • 정책을 기반으로 공격인지 아닌지 판단
      • 판단 결과에 따라 관리자에게 경고, 로그 기록, 무시 결정
      1. 경고 및 로그 시스템 (alert & log system)
      • 관리자에게 경고, 특정 경로의 파일에 로그를 남기는 시스템
  • 패키지나 프로그램 설치

      1. 패키지 관리자 (dnf 등)
      • 자동 다운로드 및 설치
      1. 패키지 파일 직접 설치 (rpm 등)
      • 설치 파일을 사용자가 직접 구해서 설치하는 방식
      1. source code compile
      • 프로그램의 소스코드를 사용자가 직접 구해서 컴파일을 통해 설치 파일로 변환 후 직접 설치
  • snort 설치 (소스코드 컴파일), 설정

    • 소스 파일 이동
      • daq-2.0.7.tar.gz
      • snort-2.9.16.tar.gz
      • snortrules-snapshot-2983.tar.gz
      • 세 파일 CentOS 6 로 이동
    • 확장 저장소 설치
      • yum -y install epel-release
    • yum 저장소 설정 수정
      • vim /etc/yum.repos.d/epel.repo
        • :%s /mirrorlist/#mirrorlist/g
        • :%s /#baseurl=http:\/\/download.fedoraproject.org\/pub/baseurl=http:\/\/archives.fedoraproject.org\/pub\/archive/g
    • yum repolist 시 저장소 확인 가능
    • 의존성 파일 설치
      • yum -y install gcc flex bison
      • yum -y install zlib zlib-devel libpcap libpcap-devel
      • yum -y install pcre pcre-devel libdnet libdnet-devel tcpdump
    • 파일 이동
      • cd /usr/local/src/
        • mv /root/바탕화면/daq-2.0.7.tar.gz . - 한영키 + R.Alt
        • tar -zxf daq-2.0.7.tar.gz
      • cd daq-2.0.7
    • 소스코드 컴파일
      • ./configure
      • (make 실행 시 에러 발생 해결)
      • cd automake-1.15
        • ./configure
      • yum -y install tex-cm-lgc
      • yum -y install byacc*
      • cd autoconf-2.69
        • ./configure
        • make
        • make install
      • cd ..
        • ./configure
        • make
        • make install
      • cd ..
        • ./configure
        • make
        • make install
      • cd ..
      • mv /root/바탕화면/snort-2.9.16.tar.gz .
        • tar -zxf snort-2.9.16.tar.gz
      • cd snort-2.9.16
        • ./configure --disable-open-appid
        • make
        • make install
    • snort 설치 확인
      • [root@localhost snort-2.9.16]# snort -V

    -> Snort! <-
    Version 2.9.16 GRE (Build 118)
    By Martin Roesch & The Snort Team: http://www.snort.org/contact#team
    Copyright (C) 2014-2020 Cisco and/or its affiliates. All rights reserved.
    Copyright (C) 1998-2013 Sourcefire, Inc., et al.
    Using libpcap version 1.4.0
    Using PCRE version: 7.8 2008-09-05
    Using ZLIB version: 1.2.3

    • [root@localhost snort-2.9.16]# snort --daq-list

Available DAQ modules:
pcap(v3): readback live multi unpriv
ipfw(v3): live inline multi unpriv
dump(v3): readback live inline multi unpriv
afpacket(v5): live inline multi unpriv

  • snortrules-snapshot 설치

    • mkdir /etc/snort
    • cd /etc/snort
    • cp /usr/local/src/snort-2.9.16/etc/* .
      • tar zxf /root/바탕화면/snortrules-snapshot-2983.tar.gz -C /etc/snort
    • cp ./etc/* .
      • touch /etc/snort/rules/white_list.rules
      • touch /etc/snort/rules/black_list.rules
    • vim /etc/snort/snort.conf
      • 104, 105, 106, 109, 110 의 경로 .. 를 /etc/snort 로 수정
  • snort 계정 생성
    useradd snort -u 40000 -d /var/log/snort -s /sbin/nologin -c SNORT_ID

  • 권한 설정

    • cd /etc/
      • chown -R snort:snort snort
      • chmod -R 700 snort
    • cd /usr/local/src
      • chown -R snort:snort daq-2.0.7 snort-2.9.16 snort_dynamicsrc
      • chmod -R 700 daq-2.0.7 snort-2.9.16 snort_dynamicsrc
    • cd /usr/local/lib
    • mkdir snort_dynamicrules
      • chown -R snort:snort snort* pkgconfig
      • chmod -R 700 snort* pkgconfig
    • cd /usr/local/bin/
      • chown -R snort:snort daq-modules-config u2*
      • chmod -R 700 daq-modules-config u2*
  • snort 실행 확인

    • snort -T -i eth1 -u snort -g snort -c /etc/snort/snort.conf
      • /etc/snort/snort.conf 파일 325 줄 lzma 삭제
  • snort 실행

    • snort -v -c /etc/snort/snort.conf
      • 포트미러링으로 전해받은 패킷 모니터링 가능
      • v : 3 ~ 4 계층 데이터
      • d : 7 계층 데이터
      • e : 2 계층 데이터. MAC 주소
  • 탐지 정책 설정

    • cd /etc/snort/rules
    • vim local.rules
      • 마지막 줄에 추가 alert icmp 10.10.10.1 any -> 10.10.10.254 any (msg:"ICMP DETECT"; sid:1000001;)
  • 로그 확인

    • cd /var/log/snort/
    • alert : 탐지 기록 파일
      • tail -f alert 로 확인 가능
    • snort.log.숫자 : tcpdump 패킷 캡쳐 파일
  • snort rule (정책) 구성

    • 정책 주의사항
        1. 하나의 정책 (룰) 은 한줄로 입력
        1. 문법이나 오타 발생 시 snort 실행 에러
    • /etc/snort/rules/local.rules
      • action protocol ip주소 port주소 OP방향연산자 ip주소 port주소 (옵션)
        • action : 해당 정책의 조건에 만족하는 데이터, 패킷을 탐지하는 경우 처리 방식 지정
          • alert : 경고 발생 및 로그 기록 (탐지)
          • log : 패킷 로그 기록
          • pass : 무시
          • drop : 패킷 차단 및 기록
          • reject : 패킷 차단 및 기록 + 송신자 (출발지) 에게 오류 메세지나 차단 메세지를 전송
          • sdrop : 패킷 차단
          • activate : 기본 alert 로 동작, 이후 연동된 dynamic 룰을 실행
          • dynamic : 평상시엔 적용 안되는 정책. activate 정책이 동작해서 활성화시켜주면 log 로 실행됨
        • protocol : 탐지할 프로토콜 지정
          • tcmp, udp, icmp, ip 등
        • IP 주소 : 탐지할 IP 주소 지정
          • 10.10.10.1, !10.10.10.0/24, [10.10.10.1,10.10.10.2,20.20.20.0/24], any 등
        • port 주소 : 탐지할 port 주소 지정
          • 80, 20:25, :100 (1 부터 100 까지), 10000: (10000 부터 끝까지), [80,443], any 등
        • OP (방향연산자) : 주소 사이에 방향 연산자를 구성하여 출발지와 목적지 표시
          • 출발지 -> 목적지
          • <> : 양방향 통신 지정
        • rule option (옵션)
          • (옵션) 이전에 지정하는 인자들을 합쳐서 rule header 라고 함 (필수 정보)
          • (옵션) 은 더욱 디테일한 정책 구성을 위한 입력값. 생략 가능한 경우도 있고, 필수 옵션도 존재
          • general rule option
            • msg : 경고를 남기는 경우 어떤 메세지로 남길지 지정하는 옵션
              • msg:"hello";
            • sid : 정책의 식별값 지정
              • 관리자가 직접 정책 구성하여 번호 부여 시 sid 를 백만부터 시작해야 함 (중복 방지)
              • sid:1000001;
            • rev : 해당 정책의 버전을 명시하는 값
              • rev:2;
            • priority : 해당 정책의 위험도 지정하는 값 (1 ~ 3 정도로 임의로 지정)
              • priority:1;
          • payload detection rule option : 패킷 안의 원본 데이터에서 검색하는 옵션
            • content : 특정 문자열 검색
              • content:"root";
            • nocase : 대소문자 상관없이 검색. 주로 content 와 같이 사용
              • content:"root";nocase;
            • rawbytes : 전처리기에서 가공하기 전 데이터 (주로 16 진수) 검색. 주로 content 와 같이 사용
              • content:"|162030|";rawbytes;
              • content:"root";rawbytes;
            • depth : 검색할 데이터 크기범위 (앞에서부터 n byte 만큼) 지정. 주로 content 와 같이 사용
              • 검색하고자 하는 데이터가 특정 패킷의 특정 위치에 있다는 것을 안다면 일부만 검색해서 결과를 얻을 수 있음
              • content:"root";depth:10;
            • offset : 검색 시작 위치 () 지정. 주로 content 와 같이 사용
              • 12345678
              • content:"67";offset:2;depth:5; : 2 번째의 다음 글자부터 5 글자 -> 34567 중 검색
            • HTTL 통신에서 사용하는 detection rule option : HTTP 의 특정 데이터나 설정 값을 검색하고 싶을 경우 사용. 주로 content 와 같이 사용
              • snort 의 설정파일에 전처리기 설정에서 http 데이터를 정확하게 해석할 수 있는 설정이 되어있어야 사용 가능 (전처리기 설정이 있어야 함)
              • http_cookie : http cookie 값을 검색하는 옵션
              • http_header : http header 안에서 검색하는 옵션
              • http_method : http request 안에서 method 를 검색하는 옵션
              • http_uri : url 에서 검색하는 옵션
              • http_stat_code : http response 안에서 응답 코드를 검색하는 옵션
              • http_stat_ms : http response 안에서 응답 메세지를 검색하는 옵션
                • 200 OK 의 OK
            • non-payload detection rule option : 원본 데이터가 아닌 통신 데이터 안에서 원하는 설정값이나 데이터를 찾아 탐지하가 위한 옵션
              • id : IP 의 identification 데이터 검색 옵션
                • 특정 공격 프로그램이나 툴에서는 공격 진행 시 id 값을 고정하는 경우 존재
                • id:10000;, id>10000;, id!10000;
              • ttl : IP 의 TTL 값 검색 옵션
                • ttk:100;, ttl>100;, ttl!100;
              • flags : TCP flag 에서 원하는 flag 값 검색 옵션
                • flags:S;, flags:A,F;, flags:0; (flags 설정 안되어있는 데이터)
              • seq, ack, window : TCP 의 sequence, acknowledge, window size 값 검색 옵션
              • itype, icode : icmp 의 type, code 값 검색 옵션
                • itype:8; - icmp echo request
              • sameip : 출발지 IP 주소와 목적지 IP 주소가 같은 데이터 검색
                • Land attack 탐지. 출발지 주소와 목적지 주소를 any 로 설정 후 적용
                • sameip;
              • ip_proto : ip header 에서 protocol header 검색 옵션
                • 상위 계층의 protocol 값 (TCP, UDP, ICMP 등) 검색
              • fragbits : ip header 에서 ip flag 값 (단편화 여부) 확인
                • M : More. 마지막 값 아님, D : Don't Fragment
                • fragbits:M;
              • fragoffset : ip header 에서 fragment offset 검색 옵션
                • fragment offset : 단편화된 데이터 순서번호
            • rule thresholds : 정량적인 시간이나 정량적인 패킷의 데이터 (시간당 발생하는 패킷의 양이나 이벤트 수) 를 가지고 탐지 여부를 결정하는 옵션
              • 비슷하거나 같은 데이터를 반복적으로 일정 시간동안 전송하는 공격 (DoS 등) 탐지
              • threshold
                • type : 탐지되는 패킷에 따라 어떤 동작을 수행할지 결정하는 방식
                  • both : 설정한 시간 동안 발생하는 패킷 중 한번만 탐지
                    • limit + threshold
                  • limit : 설정한 시간동안 카운트 횟수까지 발생한 패킷 모두 탐지
                  • threshold : 설정한 시간동안 카운트 이상으로 발생한 패킷 모두 탐지
                • track : 패킷을 탐지 기준 지정
                  • by_src : 출발지 주소를 기준으로 카운트 (같은 출발지 주소별로 카운트)
                  • by_dst : 목적지 주소를 기준으로 카운트 (같은 목적지 주소별로 카운트)
                • count : 설정한 시간당 발생하는 패킷 수 지정
                • seconds : 시간 설정
                • threshold: type both, track by_src, count 100, seconds 1; -> 이게 하나의 옵션
                • : 출발지 주소를 기준으로 1 초 동안 패킷이 100 개 (이상) 발생하면 설정한 시간동안 발생한 패킷 중 한번만 탐지

실습

GNS

  • vpc 10.10.10.1 255.255.255.0 10.10.10.254
  • R2 (switch) - 포트 미러링
    conf t
    monitor session 1 source in fastEthernet 3/2 both
    monitor session 1 destination in f 3/1
  • R1 10.10.10.254
  • CentOS 6 64-bit (vmnet2) - IDS (snort)

[CentOS 6]

  • IP 주소 변경
    10.10.10.100

  • 네트워크 재시작 (IP 주소 변경 적용)
    service network restart

  • 시간 동기화
    rdate -s time.bora.net

  • vpc 에서 ping 10.10.10.254 명령 시 snort 에서 패킷 탐지 가능

profile
IT 보안, 관심 있는 것을 공부합니다.

0개의 댓글