Post

네트워크 보안 실습 6

Snort 실습

- 환경설정

  1. 우분투에서 Apache 실행

    • Apache 서버를 실행하여 웹 서버 환경을 구축
  2. Snort 설정 파일 열기

    • /etc/snort/snort.conf 파일을 열기
  3. HOME_NET 설정

    • 자신의 IP 주소를 HOME_NET으로 설정
    • 예시:
      1
      
      var HOME_NET 10.10.10.11
      
    • 우분투가 서버이자 IPS 역할을 수행

- 기본 명령어

  1. 커스텀 룰 추가 후 적용

    • Snort 설정 파일이 정상적으로 작동하는지 테스트
      1
      
      snort -T -c /etc/snort/snort.conf
      
  2. 스노트 검사 실행 (패킷 모드)

    • 패킷을 실시간으로 확인
      1
      
      snort -c /etc/snort/snort.conf -v
      
  3. 스노트 검사 실행 (모니터 모드)

    • 콘솔 모드로 경고 메시지를 출력
      1
      
      snort -A console -q -u snort -g snort -c /etc/snort/snort.conf
      

모니터 모드를 주로 사용함

- 커스텀 룰 설정 실습

  1. 룰 파일 수정
    • /etc/snort/rules/local.rules 파일에 커스텀 룰을 추가
  2. ICMP Echo Request 탐지 룰 추가

    • 예시:
      1
      
      alert icmp 10.10.10.10 any -> 10.10.10.11 any (msg:"ICMP echo request detected!"; sid:1000001;)
      

      실습 이미지


Snort 탐지 시나리오 및 규칙

- 문제 1: ICMP Echo Request (Ping) 탐지

  • 목표: 10.10.10.10에서 10.10.10.11으로 전송되는 ICMP Echo Request 패킷을 탐지
  • Snort Rule:
    1
    
    alert icmp 10.10.10.10 any -> 10.10.10.11 any (msg:"ICMP Echo Request detected!"; sid:1000001;)
    
  • 테스트 명령 :
    1
    
    ping 10.10.10.11
    

- 문제 2: TCP SYN 스캔 탐지

  • 목표: 10.10.10.10에서 10.10.10.11의 80번 포트로 SYN 스캔을 시도할 경우 탐지
  • Snort Rule:

    1
    
    alert tcp 10.10.10.10 any -> 10.10.10.11 80 (flags:S; msg:"TCP SYN scan detected!"; sid:1000002;)
    
  • 테스트 명령 :

    1
    
    nmap -sS 10.10.10.11 -p 80
    

- 문제 3: UDP 스캔 탐지

  • 목표: 10.10.10.10에서 10.10.10.11의 53번 포트로 UDP 스캔을 시도할 경우 탐지
  • Snort Rule:

    1
    
    alert udp 10.10.10.10 any -> 10.10.10.11 53 (msg:"UDP scan detected!"; sid:1000003;)
    
  • 테스트 명령 :

    1
    
    nmap -sU 10.10.10.11 -p 53
    

- 문제 4: HTTP GET 요청 탐지

  • 목표: 10.10.10.10에서 10.10.10.11의 웹 서버로 HTTP GET 요청을 보낼 경우 탐지
  • Snort Rule:

    1
    
    alert tcp 10.10.10.10 any -> 10.10.10.11 80 (msg:"HTTP GET request detected!"; content:"GET"; sid:1000004;)
    
  • 테스트 명령 :

    1
    
    curl http://10.10.10.11
    

- 문제 5: 특정 문자열 포함 탐지

  • 목표: 10.10.10.10에서 10.10.10.11으로 전송되는 패킷에 “attack” 문자열이 포함된 경우 탐지
  • Snort Rule:

    1
    
    alert tcp 10.10.10.10 any -> 10.10.10.11 any (msg:"Possible attack detected!"; content:"attack"; sid:1000005;)
    
  • 테스트 명령 :

    1
    
    echo "attack" | nc 10.10.10.11 80
    

- 문제 6: Nmap 스캔 탐지

  • 목표: Nmap을 이용한 스캔 시도를 탐지
  • Snort Rule:

    1
    
    alert tcp 10.10.10.10 any -> 10.10.10.11 any (msg:"Nmap scan detected!"; content:"Nmap"; sid:1000006;)
    
  • 테스트 명령 :

    1
    
    nmap 10.10.10.11
    

- 문제 7: SQL Injection 공격 탐지

  • 목표: 웹 서버에 대한 SQL Injection 공격 시도를 탐지
  • Snort Rule:

    1
    
    alert tcp 10.10.10.10 any -> 10.10.10.11 80 (msg:"Possible SQL Injection attack!"; content:"UNION SELECT"; sid:1000007;)
    
  • 테스트 명령 :

    1
    
    curl "http://10.10.10.11/index.php?id=1 UNION SELECT 1,2,3--"
    

- 문제 8: Cross-site Scripting (XSS) 공격 탐지

  • 목표: 웹 서버에 대한 XSS 공격 시도를 탐지
  • Snort Rule:

    1
    
    alert tcp 10.10.10.10 any -> 10.10.10.11 80 (msg:"Possible XSS attack!"; content:"<script>"; sid:1000008;)
    
  • 테스트 명령 :

    1
    
    curl "http://10.10.10.11/index.php?name=<script>alert('XSS')</script>"
    

- 문제 9: DoS 공격 탐지 (Ping Flood)

  • 목표: ICMP Echo Request (Ping) 패킷을 이용한 DoS 공격을 탐지
  • Snort Rule:

    1
    
    alert icmp 10.10.10.10 any -> 10.10.10.11 any (msg:"Possible ping flood attack!"; threshold: type threshold, track by_src, count 100, seconds 1; sid:1000009;)
    
  • 테스트 명령 :

    1
    
    ping -f 10.10.10.11
    

- 문제 10: 특정 포트 접근 시도 탐지 (SSH)

  • 목표: 10.10.10.10에서 10.10.10.11의 22번 포트로 접근 시도를 탐지
  • Snort Rule:

    1
    
    alert tcp 10.10.10.10 any -> 10.10.10.11 22 (msg:"SSH access attempt detected!"; sid:1000010;)
    
  • 테스트 명령 :

    1
    
    ssh root@10.10.10.11
    

- 문제 11: DDoS 공격 탐지

  • 목표: 다수의 출발지에서 10.10.10.11으로 향하는 Ping Flood 공격을 탐지
  • Snort Rule:

    1
    
    alert icmp any any -> 10.10.10.11 any (msg:"Possible ping flood attack from changing source!"; threshold: type threshold, track by_dst, count 100, seconds 1; sid:1000011;)
    
  • 테스트 명령 :

    1
    
    nmap -f -sP 10.10.10.11