- 2024.06.18.보안 day512024년 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
실습
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 : HTTPDNAT : 네트워크 주소 변환 / 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 restart10.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
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 다음글이 없습니다.이전글이 없습니다.댓글