202401to07
  • 2024.06.18.보안 day51
    2024년 06월 18일 09시 26분 12초에 업로드 된 글입니다.
    작성자: 202401to07

    iptables(IPS)와 snort(IDS)

     

    [ 기본 환경 설정 ]

    iptable 192.168.10.10

    web 10.10.10.10

    mini 10.10.10.100

    칼리 20.20.20.20

     

    [ vi /etc/sysconfig/iptables ]

    # Generated by iptables-save v1.4.21 on Thu Jun 13 16:41:18 2024
    *nat
    :PREROUTING ACCEPT [0:0]
    :INPUT ACCEPT [0:0]
    :OUTPUT ACCEPT [0:0]
    :POSTROUTING ACCEPT [0:0]
    -A PREROUTING -d 192.168.10.100/32 -p tcp --dport 80 -j DNAT --to-destination 10.10.10.10:80
    -A PREROUTING -d 192.168.10.100/32 -p tcp -m tcp --dport 443 -j DNAT --to-destination 10.10.10.10:443
    -A PREROUTING -d 192.168.10.200/32 -p udp -m udp --dport 53  -j DNAT --to-destination 10.10.10.10:53
    -A POSTROUTING -o ens33 -j MASQUERADE
    COMMIT
    # Completed on Thu Jun 13 16:41:18 2024
    # Generated by iptables-save v1.4.21 on Thu Jun 13 16:41:18 2024
    *filter
    :INPUT ACCEPT [0:0]
    :FORWARD ACCEPT [0:0]
    :OUTPUT ACCEPT [24:2576]
    -A INPUT -p icmp -j ACCEPT
    -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
    -A INPUT -i lo -j ACCEPT
    -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
    
    -A FORWARD -i ens34 -j ACCEPT
    -A FORWARD -o ens34 -p udp -m udp --sport 53 -j ACCEPT
    -A FORWARD -o ens34 -p tcp -m tcp --sport 80 -j ACCEPT
    -A FORWARD -o ens34 -p tcp -m tcp --sport 443 -j ACCEPT
    
    -A FORWARD -i ens32 -j ACCEPT
    -A FORWARD -o ens32 -p udp -m udp --sport 53 -j ACCEPT
    -A FORWARD -o ens32 -p tcp -m tcp --sport 80 -j ACCEPT
    -A FORWARD -o ens32 -p tcp -m tcp --sport 443 -j ACCEPT
    
    -A FORWARD -o ens32 -p tcp -m tcp --dport 443 -j ACCEPT
    -A FORWARD -o ens32 -p tcp -m tcp --dport 80 -j ACCEPT
    -A FORWARD -o ens32 -p udp -m udp --dport 53 -j ACCEPT
    -A FORWARD -o ens32 -p tcp -m tcp --dport 22 -j ACCEPT
    
    COMMIT
    # Completed on Thu Jun 13 16:41:18 2024

    service iptables restart

    service iptables save

     

    ping 8.8.8.8 안되나 서로 내부 통신은 가능 

     




    [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......

    ============================================
    **msg : 메세지 내용 출력
    **sid  : 규칙 식별자
    rev  : 규칙 수정버전
    classtype : 유형별 정의
    priority : 우선순위
    reference : url 로 정책 정의\
    ==========================================
    글자 및 데이타 탐지 정책
    **content   패킷내에 문자열 바이트를 읽어냄 (아스키 코드 읽어냄)
    **nocase : 대소문자 구별 X 
    offset => 매칭 시작 문자열 위치  0으로 설정시 1부터 검색
    depth =>  문자열 범위를 지정   0으로 설정시 1부터 검색
    distance 옵션 값이후 탐색 위치 지정 
    within  옵션값 이후 탐색 범위 지정  
    pcre      문자열 ( URL검사)

    ============================================
    ** 페이로드 **
    ==========================
    옵션재료 (  <>  양방향    -> 단방향  <-
      content:  글자를 잡아낸다    ex) content:"sevas";
              msg:      로그 코멘트 문자를 남긴다.  ex) msg:"메롱"; 
              nocase :  대소문자를 구분하지 않는다  ex) nocase;
              sid:      정책 순서를 정한다        ex) dis:50005;
           )


    =======================[간격 DOS&NMAP 탐지]=======================
    threshold   (이벤트 탐지 옵션)

    type threshold : 발생하는 이벤트 수마다 탐지 
    type limit     : 시간동안 발생하는 이벤트 수까지 탐지
    type both      : 시간동안 발생하는 이벤트수중 1번만 탐지 ***
    track by_src   : 출발지 기준
    track by_dst   : 목적지 기준
    count          : 횟수
    seconds        : 시간
    itype          : 0 = reply   8 =request


    10.10.10.10)

    yum install nc

    nc -l 8080

     

     

    더보기

    칼리에서 nc 를 통해     10.10.10.20:8080 으로 Test를 보내서 패킷로그가 남도록 해보세요


    정책내용 :  10.10.10.20:8080 으로 보내는 Test문자를 잡아내서 snort 로그를 남기세요.

    옵션재료 (  <>  양방향    -> 단방향  <-
      content:  글자를 잡아낸다    ex) content:"sevas";
              msg:      로그 코멘트 문자를 남긴다.  ex) msg:"메롱"; 
              nocase :  대소문자를 구분하지 않는다  ex) nocase;
              sid:      정책 순서를 정한다        ex) dis:50005;
           )

    클라에서는 nc -l 8080 쳐놓고

    칼리에서 nc 10.10.10.20 8080 
    그다음 아무거나 쓰고 엔터치면 클라에서 보임

    alert tcp any any ->  10.10.10.10 8080 (msg:"NC Contest Test"; content:"Test"; sid:50003;)    
    [대소문자구분]
    alert tcp any any -> 10.10.10.10 8080 (msg:"aaa"; content:"|616161|"; sid:50004;)
    [데이터 HEX로 잡기 (aaa)]
    alert tcp any any ->  10.10.10.10 8080 (msg:"NC Contest Test"; content:"Test";nocase; sid:50005;) 
    [대소문자구분X]

    alert tcp 는 
    nc 10.10.10.10 8080 로 검사 
    alert icmp 는
    ping 10.10.10.10 로 검사 

    304161

    6597

    https://ko.calc-site.com/bases/ascii

     

    ASCII 코드 변환 - 진수 변환 - 계산 사이트

    입력된 ASCII 코드를 쉽게 변환할 수 있습니다. 2진수, 10진수, 16진수에서 문자로 변환하거나 문자를 2진수, 10진수, 16진수로 변환할 수 있습니다. 텍스트에서 ASCII 변환 변환 전은 “텍스트”을 선

    ko.calc-site.com


    실습 

     

    alert tcp !10.10.10.100 any -> 10.10.10.10 8080 (msg:"Script Contest"; content:"|736372697074|"; nocase; sid:50004;)

    -------------------------------------------------------

     

    iptables)                                                                                 
    -A PREROUTING -d 192.168.10.100/32 -p tcp --dport 80 -j DNAT --to-destination 10.10.10.10:80                    : HTTP

    DNAT : 네트워크 주소 변환 / pre 라우팅

    10.10.10.100) 

    [ vi local ]



    alert tcp any any ->  10.10.10.10 80 (msg:"XSS_ATTACK(http)"; content:"|253343736372697074253345|"; nocase; sid:50005;)

     


    offset

    depth

    alert tcp 20.20.20.20 any ->  10.10.10.10 80 (msg:"depth_TEST"; content:"123";offset:4; depth:7; sid:50005;)

    ㄴ 확인 방법 

    10.10.10.100 )  snort -i ens33 -c local      켜놓기 

    10.10.10.10 ) nc -l 8080                           켜놓기 

    20.20.20.20 ) nc 10.10.10.10 8080           켜놓기    

    문자 입력해보기 

    123이 포함 된경우 

    10.10.10.100 )  tail -f alert  에서 탐지 가능   ===> IDS 


    distance 

    alert tcp 20.20.20.20 any ->  10.10.10.10 8080 (msg:"distance_TEST"; content:"abc"; content :"test"; distance:10;  sid:50005;)
     snort -i ens33 -c local
     nc -l 8080
    tail -f alert

    결과 : 

    ┌──(root㉿sevaskali)-[~]
    └─# nc 10.10.10.10 8080
    sevasabc1234567890test  ======> 뜸 
    ^[[A 
    sevasabd123456789test    ==============> 안뜸


    within 

    within 사용하는 이유 : 부화율 / 검색 속도와 정확도 / 오탐 미탐

    오탐 : 잘못 탐지 ==> IPS가 중요 

    미탐 : 못 탐지 ==> IDS가 중요 


    롴키 추가 10.10.10.200 vm1


    alert tcp 10.10.10.0/24 any ->  any 443 (msg:"SNS_ACCESS";pcre:"/facebook.com|instagram.com/"; sid:50005;)

     

     


    telnet

     

    sid 50006 으로 해서   10.10.10.10 에 telnet 으로 접속시
    접속 성공시 Telnet OK  , 접속  실패시  Telnet Fali 출력

     

    10.10.10.10) 

      280  yum install telnet-server
      281  service telnet.socket restart

     

    10.10.10.100) 

    [ vi /etc/snort/local ]

    alert tcp 10.10.10.10 23 -> any any (msg:"Telnet OK";content:"|4c617374206c6f67696e|"; nocase; sid:50005;)
    alert tcp 10.10.10.10 23 -> any any (msg:"Telnet FAIL";content:"|4c6f67696e20696e636f7272656374|"; nocase; sid:50006;)


    threshold  이벤트 탐지 옵션

    : 간격 DOS&NMAP 탐지


    type threshold : 발생하는 이벤트 수마다 탐지 
    type limit     : 시간동안 발생하는 이벤트 수까지 탐지
    type both      : 시간동안 발생하는 이벤트수중 1번만 탐지 ***
    track by_src   : 출발지 기준
    track by_dst   : 목적지 기준
    count          : 횟수
    seconds        : 시간
    itype          : 0 = reply   8 =request


    실습)  칼리20.20.20.20에서 10.10.10.10  icmp 를 보내면서  request와 reply를 구분하세요. (itype)

    0 = reply   8 =request

    alert icmp 20.20.20.20 any -> 10.10.10.10 any (msg:"REQUEST_ICMP"; itype:8; sid:50007;)
    alert icmp 10.10.10.10 any -> 20.20.20.20 any (msg:"REPLY_ICMP"; itype:0; sid:50008;)


    [ DOS&NMAP 탐지 ]

    threshold :  5개마다 탐지 / 10초동안 5번이상의 패킷에 대해서 5개마다 1번 탐지
    alert icmp any any -> 10.10.10.10 any (msg:"THRESHOLD";threshold:type threshold,track by_src,count 5,seconds 10; sid:50009;)

    limit :  5까지 탐지 /0초동안 5번이상의 패킷에 대해서 5개만 탐지
    alert icmp any any -> 10.10.10.10 any (msg:"LIMIT"; threshold:type limit,track by_src,count 5,seconds 10; sid:50010;)

    both  : 1개만 탐지 /10초동안 5번이상의 패킷에 대해서 1개만탐지 
    alert icmp any any -> 10.10.10.10 any (msg:"BOTH"; threshold:type both,track by_src,count 5,seconds 10; sid:50011;) 캌칼리) hping3 --icmp 10.10.10.10 --flood

     


    TCP 플래그 6개

      SYN 연결

      ACK 응답

      PSH 우선순위 

      RST 재시작 (강제종료)

      FIN 종료 

      URG 긴급 * 무조건 첫번째 


    flags : S R A P U F
    flagsbits = More fragments : R D M    ( R:예약 / D:분할X /  M:분할 )

                                                  R (Reserved) /  D (Do not fragment) / M (More fragments)
    sameip  :  출발지와 도착지 IP가 같을 경우 탐지    ====> Land attack


     

    hping3 10.10.10.10  : TCP STN 패킷 보내기

    hping3 -1 10.10.10.10 : ICMP ping 보내기

    -d 4000 : 데이터 크기 4000바이트

    -a : 출발지 

    track by_src   : 출발지 기준
    track by_dst   : 목적지 기준

     

    1.  #ping of death 탐지  [ 단편화가 되면서 파일이 일정시간 이상 들어올때 차단 ] 

    칼리) hping3 -1 -d 4000 10.10.10.10 --flood

    10.10.10.100)

    [vi /etc/snort/local ]

    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;)

    snort -i ens33 -c local

    tail -f alert

    단편화 확인은 M


    2. #Land attack   [출발지와 도착지 IP가 같은 경우 탐지 ]   

    칼리 ) hping3 -1 -a 10.10.10.10  10.10.10.10 --flood
    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;)

    더보기

    cd /proc/sys/net/ipv4/conf/
    echo "0" > all/rp_filter
    echo "0" > ens32/rp_filter
    echo "0" > ens33/rp_filter
    echo "0" > ens34/rp_filter


    3. #smuf_attack   

    hping3 -1 -a 30.30.30.30  10.10.10.255 --flood 

    iptables 끄고 gns 켜서 

    라우터 에서   ip direct broadcast   

    10.10.10.10 ) 

    [root@www html]# cat /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
    1
    [root@www html]# echo "0" >  /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
    [root@www html]# cat /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
    0     => 강제로 보안 내리기 

     

    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;)

                                                                                                                                                                                                  
    R1(config)#int fa1/0
    R1(config-if)#ip di
    R1(config-if)#ip directed-broadcast


    3_nmap(scan).txt
    0.01MB
    dos공격 (1).txt
    0.01MB

    0


    #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 

    #TCP__Connect_FOODING
    alert tcp  any any -> 10.10.10.10 80 (\
    sid:50016; msg:"TCP_Connect_FLOODING"; flags:A; threshold:type both,track by_dst,count 20,seconds 10;)
    nping --tcp-connect -p 80 -rate=90000 -c 90000 -q 10.10.10.10

    #UDP_FOODING
    alert udp  !10.10.10.100 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 

     

     

     

     

     

     

     

     

     

    '보안' 카테고리의 다른 글

    2024.06.20.보안 day53  (0) 2024.06.20
    2024.06.19.보안 day52  (0) 2024.06.19
    2024.06.17.보안 day50  (0) 2024.06.17
    6/17 시험준비  (0) 2024.06.14
    2024.06.14.보안 day49  (0) 2024.06.14
    댓글