보안

스캔 보안 기술

202401to07 2024. 4. 24. 22:52

service firewall start : 방화벽 올리기 

service firewall stop : 방화벽 내리기 

syn  요청
ack  응답
fin  종료
rst  재시도 /종
urg  긴급
psh  밀어넣기

 

nmap  [scan type] [option] 목적지

nmap : 시스템, 네트워크 보안 스캐너 

[scan type]

-sT tcp connect ***
-sS     syn ***
-sF Fin ***
-sX X-mas (URG,PSH,FIN) ***
-sN     null
-sU udp ***
-sQ protocol

[option]
-O os scan
-v 자세히보기
-p 포트지정 ***
-f 포트분할

 

출발지와 도착지를 ip.src ip.dst

icmp[0] == 0 reply
icmp[0] == 8 request

echo 1 >  /proc/sys/net/ipv4/icmp_echo_ignore_all : 진행중이던 ping멈춤

echo 0 >  /proc/sys/net/ipv4/icmp_echo_ignore_all  : 다시 시작

 

icmp스캔

원리 =  칼리   ==(request[8]) ===> 서버
            칼리   <==(reply[0] ) ==== 서버

보안대책 => icmp(reply를 차단)   + 허용된 ARP만 접근 허가 (NAC)  + ip와 mac주소를 매칭

 

UDP scan

service  named restart :   DNS 서버인 named를 다시 시작
service  snmpd restart  :  SNMP(Simple Network Management Protocol) 데몬인 snmpd를 다시 시작
netstat -lntup  : 실 행 중인 네트워크 포트 및 관련된 프로세스를 보여줌

vi /etc/named.conf
option {
# listen-on port 53 { 127.0.0.1; };
listen-on port 53 { any; );
listen-on-v6 port 53 { ::1; };
directory "/var/named";
dump-file "/var/named/data/cache_dump.db";
statistice-file "/var/named/data/named_stats.txt";
memstatistice-file "/var/named/data/named_mem_stats.txt";
recursing-file "/var/named/data/named.rescursing";
secroots-file "var/named/data/named.secroots";
# allow-query     { localhost; };
allow-query     { any; }

 

service firewalld stop
service named restart

firewall-cmd --permanent --add-port=53/udp  영구설정 )

firewall-cmd --reload  (영구설정적용)

firewall-cmd --list-all (53/udp 포트확인)

 

칼리 ) nmap -sU -p 53-55 10.10.10.10  (53번포트 open된거 보기 ) 

지정된ip주소에서 (10.10.10.10) 주어진 UDP포트 번호(52-55)를 스캔(nmap)하는것 

 

firewall-cmd --permanent --remove-port=53/udp (53번포트 삭제)
firewall-cmd --reload (영구설정적용)

장점 : 단방향이기 때문에 로그가 남기 어려움 , 방화벽 활성화 여부 확인가능

단점 : icmp에 확실한 증거 ( 주기적인 unrechable) 이 뜨기때문에 걸리기 쉬움
      방화벽에 의해 패킷이 차단될 경우 open/closed의 여부확인이 어려움 (filtered)

대책: 필요한 UDP만 오픈을 해주고 주기적인 모니터링을 통해서
 ICMP unreachable을 확인하여 UDP스캔인   패킷을 차단시킨다.


TCP scanning

ACK = 응답
FIN = 연결종료요청
SYN = 연결요청
================================
URG = 긴급 (우선순위)
PSH = 실시간 전송(밀어넣기)
RST = 재연결 종료

dnf install -y vsftpd-*
dnf install net-snmp-*
dnf install -y httpd-*
dnf install -y bind-*
dnf install -y telnet-server*
rpm -qa |grep -P "vsftp|net-snmp|httpd|bind|telnet" 으로 잘 다운받았는지 확인하기 

service vsftpd restart
service httpd restart
service telnet.socket restart

 

80/tcp: httpd   80 http 
21/tcp: vsftpd    20 21 ftp
23/tcp: telnetd  23 telnet
22/tcp: sshd      22 ssh 

 

TCP 스캔

nmap -sT  -p 20-24 10.10.10.10

원리 : 3way handshack 는 syn -> syn+ack -> ack 로 패킷을 주고 받는다 즉
      syn 을 요청하면서 syn+ack 를 받아오는 녀석을 찾게 되고  
      ack 까지 받은뒤 서비스를 이용하지 않기때문에 칼리에서 rst+ack를 통해 종료 (칼리에서 끊음)

방화벽 start  : closed시 서버에서 rst+ack 안보냄

방화벽 stop시 : closed 서버에서 rst+ack 보냄 

보안 : 같은호스트에서 다수의 포트들을 검색하는 내용 모니터링하고
      세션완료후 (칼리)RST+ACK 를 보낼경우 차단 (세션확인)

TCP스캔 (Full connect scan)
연결될경우 :RST+ACK  ( 칼리에서 RST+ACK ) 
연결안될경우 : RST+ACK (서버에서 RST+ACK) 방화벽설정시 안나옴

칼리 syn
서버 syn ack 
칼리 ack 
서버 rst ack ( close)
칼리 rst ack (open )

보안: 세션완료후 (칼리)RST+ACK 를 보낼경우 차단

 


syn stealth  halt open 

nmap -sS -p 20-80  10.10.10.10

syn을 보낸후 syn+ack만 확인한뒤 rst를 보내서 세션을 끊어버림 

3way handshack를 완성하지 않음)

syn+ack를 받은후 (칼리)RST 를 보낼경우 차단

[세션을 맺지 않고 열린포트를 확인하는 스캔]
Syn스캔 (half open scan, syn stealth scan)
연결될경우 : RST     ( 칼리에서 RST )
연결안될우 : RST+ACK (서버에서 RST+ACK) 방화벽설정시 안나옴

칼리 syn
서버 syn ack 
칼리 ack 
서버 rst ack ( close)
방화벽설정시 안나옴
칼리 rst  (open )
=> 쓰리웨이 끝나지도 않았는데
칼리가 rst


ACK scan

nmap -sA -p 20-23 10.10.10.10

원리: ACK를 보내서 서버에서 RST가 나오면 서비스가 있다고 판단 (단 방화벽이 올라가있어야함) unfiltered 

ACK스캔]
연결될경우 : RST     ( 서버에서 RST )
연결안될우 : ㅡ_ㅡ 조용

 ack 로만 요청하는 녀석을 차단 


Fin scan

fin  종료

 

IDS(침입탐지) 를 회피하기위해서 사용

IDS(침입탐지) 를 회피하기위해서 사용

보안 : 방화벽을 쓰면 결과 알기 어려움

방화벽이 없고(stop) 남기지 않을때 사용
      호스트에서 FiN으로 여러 포트를 스캐닝할경우 차단


x-mas scan

Fin, Psh, Urg 플레그를 동시에 다보냄

nmap -sX -p 20-90 10.10.10.10

원리 : fin 과 psh urg를 같이 보내서fin만 필터링 될 경우 통과시킴

FIN스캔, X-mas 스캔 , null 스캔
연결될경우 : X
연결안될경우 : RST+ACK ( 서버에서 보냄 )


null scan

nmap -sN -p 20-30  10.10.10.10

 

플래그 없이 t

보안 : null 플레그 검사

 


총정리 

TCP포트가 열려있을때 응답이 오는 스캔 

tcp  syn /stealth / halt open  ack
칼리 syn
서버 syn ack 
칼리 ack 
서버 rst ack ( close)
방화벽설정시 안나옴
칼리 rst ack (open )
=> 끝나고 칼리가 rsk+ack 
칼리 syn
서버 syn ack 
칼리 ack 
서버 rst ack ( close)
방화벽설정시 안나옴
칼리 rst  (open )
=> 쓰리웨이 끝나지도 않았는데
칼리가 rst

칼리 syn
서버 syn ack 
칼리 ack 
서버 RST (opne)
=> 서버가 ack도 안했는데
칼리가 ack 을 보내니까 서버가 RST!!!! 하는것

 

TCP포트가 닫혀있을때 확인하는 스캔 3가지

Fin  x-mas scan null scan
칼리 FIN
서버 RST+ACK (close)
==> 무반응 = (open )
칼리 FIN PSH UGH
서버 RST+ACK (close)
==> 무반응 = (open )
칼리  NONE (아무것도 안보내)
서버 RST+ACK (close)
==> 무반응 = (open )

 

 


모든 포트들은 활성화 되지 않을때 RST+ACK를 보내

방화벽을 올렸을때 (start)

close 일때 RST+ACK가 리턴되지 않습니다

그래서  

close 일때 RST+ACK가 리턴 되는걸로 확인하는 FIN , X-MAS, NUll 스캔 방법은 방화벽 올라가있을때 확인이 어려움


Decoy 스캔  

 nmap -sS -p 20-25  10.10.10.10  -D RND

여러 IP로 바꿔서 포트스캐닝 )

여러 IP가 나오지만 MAC주소는 같다. 

 

유일하게 MAC주소와 HOST를 매칭해서 막는 보안장비는 NAC 이다.