보안 국비 용/보안 10월

보안 과정 형 평가 68일차 (2024.11.07)

눅스 2024. 11. 7. 17:49

=========================================================

 

[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 로 정책 정의\

 

=========================================================

 

검증방법 : 

alert icmp 10.10.10.10 any -> any any (msg:"ICMP_REQUEST"; itype:8; sid:50001;)
alert icmp 10.10.10.10 any -> any any (msg:"REPLY_ICMP"; itype:0; sid:50002;)

 

snort -i ens33 -c /etc/snort/rules/local.rules

tail -f /etc/snort/rules/alert

 

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

 

10.10.10.10 서버

nc -l 8080

 

20.20.20.20 서버

nc 10.10.10.10 8080

==> 문장 이나 단어 쓰고 확인하기 

 

cd /etc/snort/rules

vi local.rules

==> 에 룰 작성 해서 확인

 

1) 20.20.20.20에서 nc 10.10.10.10 8080 으로 접속

2) 10.10.10.10에서 nc -l 8080 으로 Listen

3) 20.20.20.20에서 10.10.10.10으로 보내는 메세지 Test를 잡아내기

    ( 대소문자구분 ) sid:50003;

==>

alert tcp 20.20.20.20 any -> 10.10.10.10 8080 ( msg:"Test message"; content:"Test"; sid:50003; )

 

4) Test 를 Hex로 잡아주세요  ( content:"|  숫자  |" sid:50004; )

==>

alert tcp 20.20.20.20 any -> 10.10.10.10 8080 ( msg:"Test message(Hex)"; content:"|54 65 73 74|"; sid:50004; )

 

5) test를 대소문자 상관없이 잡아줄것 ( msg:"NC contest nocase"; sid:50005; )

==>

alert tcp 20.20.20.20 any -> 10.10.10.10 8080 ( msg:"Test message(nocase)"; content:"|54 65 73 74|"; nocase; sid:50005; )

 

6) 웹에서 서버 게시판에 xss 공격하는 내용을 와이어샤크에서 찾아내고 탐지 후 로그를 남기세요

     (sid:50006;)  http

<script> alert("쿠키:"+document.cookie)</script>

==>

alert tcp any any -> 10.10.10.10 [80,443] ( msg:"XSS attack(http)"; content:"|25 33 43 73 63 72 69 70 74|"; sid:50006; )

 

7) 웹에서 서버 게시판에 xss 공격하는 내용을 와이어샤크에서 찾아네고 탐지 후 로그를 남기세요

     (sid:50007;)

<script> alert("쿠키:"+document.cookie)</script>

==> 

alert tcp 10.10.10.10 any -> 20.20.20.20 3306 (msg:"XSS attack!!"; content:"<script>"; nocase; sid:50007;)

 

=========================================================

 

** 페이로드 **

 

*content   패킷내에 문자열 바이트를 읽어냄 (아스키 코드 읽어냄)

**nocase : 대소문자 구별 X

offset => 매칭 시작 문자열 위치  0으로 설정시 1부터 검색
depth =>  문자열 범위를 지정   0으로 설정시 1부터 검색
distance 옵션 값이후 탐색 위치 지정 
within  옵션값 이후 탐색 범위 지정  
pcre      문자열 ( URL검사)

 

 

offeset    매칭 시작 문자열    0으로 설정시 1부터 검색

 

depth               문자열 범위를 지정

ex) content  "123";  offset :4;  depth:7        sid:50010

123 문자가 들어간 내용을 5바이트부터  7바이트만큼 확인

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

 

123456789 (X)

000012345677 (O)

777771237777 (O)

777777123777 (O)

11111 2222212 33333 (x)

 

 

distance   옵션 값 이후 탐색 위치 지정

ex) content:"abc" ; content"test"; distance:10;

abc이후 10바이트 뒤에 test를 찾아라

==>

alert tcp 20.20.20.20 any -> 10.10.10.10 8080 ( msg:"Contents Distance"; content:"abc"; content:"test"; distance:10; sid:50011; )

 

within  옶션값 이후 탐색 범위 지정

ex) content:"abc" ; content"test"; within:10;

abc 탐색 이후 부터 10바이트 이내에 test를 찾아라

==>

alert tcp 20.20.20.20 any -> 10.10.10.10 8080 ( msg:"Contents within"; content:"abc"; content:"test"; within:10; sid:50012; )

 

=========================================================

 

실습문제  sid 50013 으로 해서 

10.10.10.10에 telnet 으로 접속시

접속 성공시 Telnet OK

실패시 Telnet Fail 출력

 

10.10.10.10

20.20.20.20

==> 둘다 telnet.socket 설치하기

 

alert tcp 10.10.10.10 23 -> any any ( msg:"telnet OK"; content:"last login"; nocase; sid:50013; )
alert tcp 10.10.10.10 23 -> any any ( msg:"telnet FAIL"; content:"Login incorrect"; nocase; sid:50014; )

==> 확인하는 방법

==> 20.20.20.20 에서 telnet 10.10.10.10 으로 접속하기

==> 성공, 실패 확인하기