IDS, snort

:)·2024년 6월 19일
0

보안 

목록 보기
27/28

IDS

  • IDS (Intrusion Detection System) 침입 탐지 시스템
    • 시스템에 대한 원치 않은 조작을 탐지 → 내부 패킷을 주로 감지
    • 설치 위치와 목적에 따라 호스트 기반과 네트워크 기반의 침입 탐지 시스템으로 나뉨
    • 역할
      1. IPS를 우회하는 공격에 대한 탐지
      2. 내부 공격 및 보안 내용 탐지
      3. 제로데이 공격 유형 파악
      4. 오용 탐지
    • 장점
      • 해킹에 대한 좀 더 적극적인 보안대책
      • 내부 사용자의 오남용 탐지 및 방어 가능
      • 사고 발생시 근원지 및 사고 분석 가능
    • 단점
      • 대규모 네트워크에서는 사용이 어려움
      • 관리 및 운영이 어려움
      • 새로운 침입 기법에 즉각적인 차단 어려움
      • 보안 사고에 대한 근본적인 해결책은 되지 못함

1. 호스트 기반 ( HIDS : Host-based IDS )

  • 컴퓨터 시스템의 내부를 감시하고 분석하는 데 중점을 둠
  • 개인의 work station, server에 설치될 수 있으며, 컴퓨터 자체를 제한
  • 운영체제에 설치된 사용자 계정에 따라 어떤 사용자가 어떠한 접근을 시도하고 작업을 했는지에 대한 기록을 남기고 추적
  • 네트워크에 대한 침입 탐지는 불가능하며, 스스로가 공격 대상이 될 때만 침입을 탐지하는 방식
  • 트로이 목마, 논리 폭탄, 백도어 탐지
  • ex) Tripwire

1-1. Tripwire

  • tripwire 무결성 점검도구 -> 기존 데이터와 비교하여 변조된 내용 확인(모니터링 도구)
  • 설치
    yum install epel*
    yum install tripwire

-키세팅
tripwire-setup-keyfiles <<<<<<<<<엔터엔터엔터
cat /etc/tripwire/twcfg.txt -> 키세팅 파일 생성

cd /etc/tripwire
cp twpol.txt twpol.txt.bak

vi twpol.txt

/bin -> $(ReadOnly);
/etc -> $(IgnoreNone)-SHa;
/var -> +pug;
/dev -> +pug;
/back -> +pug;

p 퍼미션
u uid
g gid

  • 정책적용
    twadmin --create-polfile twpol.txt

  • 구동
    tripwire --init

  • 확인
    tripwire --check
    useradd korea
    passwd [비번설정]
    cp /backup/ping /usr/bin/ping

2. 네트워크 기반 ( NIDS : Network-based IDS )

  • 네트워크를 통해 전송되는 패킷 정보 수집 및 분석하여 침입을 탐지하는 시스템
  • 감지기를 사용하며, 무차별모드(Promiscuos mode)에서 동작하는 네트워크 인터페이스에 설치되어있음
  • IP 주소를 소유하지 않아 직접적인 해커 공격은 거의 완벽하게 방어 가능
  • 설치 위치에 따라 감시 대상 네트워크 범위 조절 가능, 별도 서버를 스위치에 연결
  • 공격 당한 시스템의 공격에 대한 결과는 알 수 없으며, 암호화된 내용 탐지 불가 ex) Snort

2-1. Snort

  • 무료 오픈 소스 네트워크 침입 탐지 시스템이자, 침입 방지 시스템으로 실시간으로 트래픽 분석 및 패킷을 기록 ( IDS & IPS )
  • 와이어샤크+ 필터
    • 패킷 스니퍼 모드

      • Tcpdump와 같은 네트워크의 TCP/IP 패킷을 읽어 보여주는 기능
    • 패킷 로거 모드

      • 모니터링한 패킷을 저장하고 로그를 기록하는 기능
      • 트래픽 디버깅에 매우 유용하게 사용
    • 네트워크 IDS 모드

      • 네트워크 트래픽(패킷) 분석 및 공격 탐지 기능을 제공
    • Snort Inline

      • 침입방지시스템으로, 패킷 분석, 공격 차단 기능을 제공
    • nc → 메세지 주고 받는 창 (간단한 실습)

      nc -l 8080

      nc 10.10.10.10 8080

    • 시작 snort -i ens33 -c local 혹은 데몬 실행


    • snort 정책

      alert icmp  any any <> 10.10.10.10 any (msg:"ICMP PING";sid:50001;)
      alert tcp any any -> 10.10.10.10 80 (msg:"SEVAS_HTTP";sid:50002;)

      [action][protocol] [src_ip][src_port] -> [Dst_ip][Dst_port] [option]

      액션 action : alert , pass ,drop , reject ,log
      프로토콜 protocol : TCP,UDP , IP , ICMP
      출발지 IP Src_ip : any , 10.10.10.10 , 10.10.10.0/24 !
      출발지 port src_port : any , 22, 80 ,...... ! , : (1:1000)
      패킷 흐름 방향 : -> , <>
      도착지 IP Dst_ip : any , 10.10.10.10 , 10.10.10.0/24
      도착지 port Dst_port : any , 22, 80 ,......
      침입 탐지 옵션 option : msg ,content ,flow , rev......

      • src → 공격자의 출발지를 ip 추적하고 싶을때 유용
      • dst → (여러 ip로 부터)공격 받고 있는 대상 서버나 네트워크를 보호하고자 할 때 유용

      rev : 규칙 수정버전
      classtype : 유형별 정의
      priority : 우선순위
      reference : url로 정책 정의

      • 옵션 ( <> 양방향 | -> 단방향 <- ) → 오탐 (IPS에서 중요), 미탐 방지 (IDS에서 중요)
        • content 글자를 잡아낸다 ex) content:"sevas"; → 16진수의 경우 “| |” 로 감싸야함
        • msg 메세지 내용 출력 ex) msg:"메롱";
        • nocase 대소문자를 구분하지 않는다 ex) nocase;
        • sid 규칙 식별자(정책 순서 지정) ex) dis:50005;
        • offset 매칭 시작 문자열 위치 0으로 설정 시 1부터 검색
        • depth 문자열 범위를 지정 0으로 설정 시 1부터 검색
        • distance 옵션 값 이후 탐색 위치 지정 (이후) ex) content:”abc”; content:”test”; distance: 10;
        • within 옵션 값 이후 탐색 범위 지정 (이내) (distance, offset, depth)
          • abc | within (이내) 10 (이후) distance |
        • pcre 문자열 (URL 검사)
          • 정책 예시
            • depth , offset → 123문자가 들어간 내용이 4바이트 이후부터 7바이트안에 존재하는지 알림
              alert tcp 20.20.20.20 any -> 10.10.10.10 8080 (msg:"depth_TEST"; content:"123";offset:4; depth:7; sid:50008;)
            • distance
              alert tcp 20.20.20.20 any -> 10.10.10.10 8080 (msg:"distance_TEST"; content:"abc"; content:"test"; distance:10; sid:50009;)
            • within
              alert tcp 20.20.20.20 any -> 10.10.10.10 8080 (msg:"within_TEST"; content:"abc"; content:"test"; within:10; sid:50009;)
            • pcre
              alert tcp 10.10.10.0/24 any -> any 443 (msg:"SNS_ACCESS"; pcre:"/facebook.com|instargram.com/"; sid:50010;)
            • telnet → 문구가 다르게 나오는 것을 와이어샤크로 확인 후 content로 작성
              alert tcp 10.10.10.10 23 -> any any (msg:"Telnet OK"; content:"|6c617374206c6f67696e|"; nocase; sid:50007;)
              alert tcp 10.10.10.10 23 -> any any (msg:"Telnet Fail"; content:"|4c 6f 67 69 6e 20 69 6e 63 6f 72 72 65 63 74|"; nocase; sid:50006;)
            • ICMP 20 →10 으로 ping
              alert icmp 20.20.20.20 any -> 10.10.10.10 any (msg:"REQUEST_ICMP"; itype:8; sid:50011;)
              alert icmp 10.10.10.10 any -> 20.20.20.20 any (msg:"REPLY_ICMP"; itype:0; sid:50012;)
            • threshold (5개마다 탐지)
              alert icmp any any -> 10.10.10.10 any (msg:”THRESHOLD”; threshold: type threshold, track by_src, count 5, seconds 10; sid: 50013;)
            • limit (5개까지 탐지)
              alert icmp any any -> 10.10.10.10 any (msg:”limit”; threshold: type limit , track by_src, count 5, seconds 10; sid: 50013;)
            • both (1개만 탐지)
              alert icmp any any -> 10.10.10.10 any (msg:”limit”; threshold: type limit , track by_src, count 5, seconds 10; sid: 50013;)
                    
  • http에서 <script> 잡아내기
    alert tcp any any -> 10.10.10.10 80 (msg:"XSS_ATTACK(http)"; content:"|253343736372697074253345|"; nocase; sid:50005;)
  • 간격 DOS&NMAP 탐지
    - threshold (이벤트 탐지 옵션) ex) threshold: type threshold, track by_src…
    - type threshold : 발생하는 이벤트 수마다 탐지
    - type limit : 시간 동안 발생하는 이벤트 수까지 탐지
    - type both : 시간 동안 발생하는 이벤트 수 중 1번만 탐지
    - track by_src : 출발지 기준
    - track by_dst : 목적지 기준
    - count : 횟수
    - seconds : 시간
    - itype : 0 = reply 8 =request
  • TCP Flags → 4 계층

    SYN 연결
    ACK 응답
    RST 재시작 (강제 종료)
    FIN 종료
    URG 긴급 → 순위 상승
    PSH 우선순위 → 순위 상승
    NULL flag X

    flags : S R A P U F
    fragsbits: R D M ( R:예약 D:분할X M:분할 )
    sameip : 출발지와 도착지 IP가 같을 경우 탐지

                
  • 공격 탐지
    1. ping of death 탐지 [ 단편화가 되고 파일이 일정시간 이상 들어올때 차단 ] ( hping3 --icmp -d 40000 10.10.10.10 --flood) (프로토콜이 IPv4이기에 IP O, ICMP X)
    alert ip any any -> 10.10.10.10 any (msg:"PING_OF_DEATH";threshold:type both,track by_src,count 50, seconds 10; fragbits:M;sid:50012;)
  1. Land attack [출발지와 도착지 IP가 같은 경우 탐지 ] ( hping3 --icmp -a 10.10.10.10 10.10.10.10 --flood )
    1. 사전 설정(보안해제) : cd /proc/sys/net/ipv4/conf
    2. echo “0” > all/rp_filter
    3. alert icmp any any -> 10.10.10.10 any (sid:50013; msg:"LAND attack";sameip;threshold:type both,track by_src,count 20,seconds 10;)
  2. smuf_attack [hping3 -1 -a 30.30.30.30 10.10.10.255 --flood ) = 라우터에서 ip direct broadcast / 리눅스에서 /proc/sys/net/ipv4/icmp_echo_ignore_boradcast]
    alert icmp any any -> 255.255.255.255 any (msg:"Smuf attack";itype:8; threshold type both,track by_dst,count 20,seconds 10; sid 50014;)
  3. TCP_SYN_FLOODING
    alert tcp any any -> 10.10.10.10 80 (sid:50015; msg:"TCP_SYN_FLOODING"; flags:S; threshold:type both,track by_dst,count 20,seconds 10;)
    hping3 --rand-source 10.10.10.10 -p 80 -S --flood
  4. TCP_Connect_FLOODING
    alert tcp any any -> 10.10.10.10 80 (sid:50016; msg:"TCP_Connect_FLOODING"; flags:A; threshold:type both,track by_src,count 20,seconds 10;)
    nping --tcp-connect -p 80 -rate=90000 -c 90000 -q 10.10.10.10
  5. UDP_FOODING
    alert udp !10.10.10.10 any -> 10.10.10.10 any (sid:50017; msg:"UDP_FLOODING"; threshold:type both,track by_src,count 20,seconds 10;)
    hping3 -2 10.10.10.10 --flood
  • 웹 공격
    - 웹공격 IDS: 웹은 대부분 시그니처 공격으로 되기때문에 pcre , content 를 사용해서 필터링을 함
    - 웹사이트 SNS 접속 확인
    alert tcp 10.10.10.10 any -> any 443 (msg:"SNS_ACCESS";pcre:"/facebook.com|[instagram.com/](http://instagram.com/)"; sid:50040;)
    - SQL_injection 확인 - 게시판 board_view.php 기준
    alert tcp any any -> 10.10.10.10 80 (msg:"sql_injection";pcre:"/UNION|SELECT|OR|%27|%23/i";content:"board_view.php"; sid:50041;)
    - xxs 확인
    alert tcp any any -> 10.10.10.10 80 (msg:"xss_attack";content:"script";nocase; sid:50042;)
            
  • 스캔 관련 룰
    1. X-MAS → nmap -sX 10.10.10.10
    alert tcp !10.10.10.10 any -> 10.10.10.10 any (msg:"X-MAS SCAN -sX";flags:UPF; threshold:type both,track by_src,count 20,seconds 10; sid:50020;)
    2. FIN SCAN → nmap -sF 10.10.10.10
    alert tcp !10.10.10.10 any -> 10.10.10.10 any (msg:"FIN SCAN -sF";flags:F; threshold:type both,track by_src,count 20,seconds 10; sid:50021;)
    3. SYN SCAN → nmap -sS 10.10.10.10
    alert tcp !10.10.10.10 any -> 10.10.10.10 any (msg:"SYN SCAN -sS"; flags:S; threshold:type both,track by_src,count 20,seconds 10; sid:50022;)
    4. NULL SCAN → nmap -sN 10.10.10.10
    alert tcp !10.10.10.10 any -> 10.10.10.10 any (msg:"NULL SCAN -sN"; flags:0; threshold:type both,track by_src,count 20,seconds 10; sid:50023;)
    - ssh 에 hydra 로 brute force 공격을 차단하는 정책
    alert tcp any any -> 10.10.10.10 22(sid:50050; msg:"SSH_Brute Force"; threshold:type both,track by_src,count 10,seconds 10; flags:S;)
    hydra -l sevas -x 1:1:1a! ftp://192.168.1.10 -V

16진수 변환 사이트: https://www.hextotext.com/kr/convert-hex-to-text 0

profile
:) GITHUB: https://github.com/YJ2123412

0개의 댓글