호스트 A와 호스트 B의 정상적인 TCP 연결
1. 프로토콜 : TCP
2. IP 주소 : Local IP, Foreign IP
3. Port 주소 : Local IP, Foreign Port
4. Seq.Num & Ack.Num 한 쌍
연결 요청 거부
1. SYN
=> Client: SYN_SENT
2. RST+ACK
=> Server : 닫힌 포트
3. Client: ClOSED
WAIT되지 않고 즉시종료된다
연결 중단
Client가 RST+ACK (또는 RST)패킷을 보낸다
=> Client와 Server 둘 다 즉시 CLOSED된다
TCP Reset의 동작구조
- RFC793(TCP 표준) 기준 닫힌 포트로 패킷을 수신하면 RST를 상대방에게 전송한다
(ex 비정상 종료(ex 서버 다운)시 패킷을 수신하는 상황)
- RST : Ack.Num가 있는 송신에 대한 응답 (Seq.Num+=1, Ack.Num= -)
- RST+ACK : Ack.Num가 없는 송신에 대한 응답 (Seq.Num=0, Ack.Num=Seq.Num + Segment 데이터부의 길이)
(SYN 패킷의 경우 Ack.Num가 없다. 데이터부 길이는 1
포트 스캐닝에 대해서 공부할 때 알아두면 좋음, 기사 시험에는 딱히 나올 범위는 아닐 것 같다고 함
실습
hping3 --syn --setseq 1000 --setack 0 -p 23 192.168.0.0 -c 1
=> syn패킷, ackNum를 설정하지 않는다 응답으로 RST+ACK 패킷 확인
+m-map은 조작된 패킷을 만들때 ACK Num없이 설정함
+RST 패킷을 보내도 다 받아주는게 아니기 때문에,
기존 패킷의 Seq.Num을 맞춰서 보내야 한다 (정상 패킷이 아닐 경우 폐기해버리기 때문))
TCP 세션 하이재킹 Session Hijacking
- 케빈 미트닉이 사용했던 공격 방법 중 하나
- 연결 설정 과정을 통해 상호간에 세션을 생성하고 식별자로 인식(출발지 ip와 port, 목적지 ip와 port, Sequence Number, Acknowledment Number)
- 세션 식별정보를 공격자가 위조해 세션을 탈취하는 공격
(실습 : Hunt 툴을 이용해서 할 수 있음)
(TCP 세션 하이재킹을 하려면 세션정보를 알고 있어야 하기 때문에
공격 시도 시점에서 패킷을 스니핑 하고 있는 시점)
- Client와 Server간 통신에 공격자가 TCP Session Hijacking이 발생하면,
둘 사이의 패킷 Seq.Num와 Ack.Num가 맞지 않기 때문에 (= ex 공격자가 보낸 패킷때문에 서버의 Seq.Num는 증가하여 100인데, Client가 기억하는 Seq.Num는 95임)
서로 계속 ACK응답을 보내 Seq.Num와 Ack.Num를 교정하려는 ACK Storm(스톰)이 발생한다
14 END--
UDP 프로토콜
개요
가) Connectionless Protocol 비연결형 프로토콜
- datagram 전송시마다 주소 정보를 설정해서 전송
- 순차적 전송을 보장하지 않는다
- 정해진 크기로 데이터를 전송한다
나) Unreliable Protocol 신뢰할 수 없는 프로토콜
- 실질적으로 IP 기반에 포트 정보를 이용하여 상위 송수신 어플리케이션을 식별해주는 역할 정도만 수행
다) 장점
- 단순하고 가벼운 프로토콜로 TCP보다 전송속도가 빠르다
- 대량 데이터 송수신보다는, 주로 한 번의 패킷 송수신으로 완료되는 서비스에 많이 이용함
(ex DNS 서비스(53/udp), NTP(123/udp), DHCP(67,68/udp))
(*짤막복습 TCP는 Stream 기반 신뢰할 수 있는 프로토콜로 흐름제어, 오류제어, 혼잡제어를 수행)
UDP 프로토콜 구조
1) Source Port (16bit)
2) Destination Port (16bit)
3) Total Length
4) Checksum
*** 네트워크 관리 명령어
1) ping 명령어
- 종단 노드간에 네트워크 상태를 관리하기 위한 명령어
- 접근성, 해당 구간 네트워크 속도 및 품질을 검사
- ICMP Echo Request(type 8)과 ICMP Echo Reply(Type 0) 메시지 이용
2) traceroute/tracert 명령어 (트레이스 라우트, 트레이스 알티)
- 종단 노드 사이에 있는 여러 중계 노드(L3장비/라우터) 각 구간에 대한 네트워크 상태를 관리하기 위한 명령어
- 동작원리(TTL값 상승)는 동일하나, traceroute는 유닉스/리눅스에서 UDP 프로토콜을 이용하고, tracert는 윈도우에서 ICMP 프로토콜을 이용한다
- 경유하는 중계노드의 개수, IP 주소, 응답시간 등을 파악
- 각 구간에 대한 접근성과 네트워크 속도 검사
(유닉스/리눅스) traceroute의 동작방식
1. IP의 TTL(hop count) 필드를 1로 설정한 UDP 패킷을 보낸다
2. ICMP Time Exceeded (Type11, Code 0) 메시지를 최초 송신지에 전달해준다
3. TTL(hop count) 필드를 +1 하여 UDP 패킷을 보낸다
4. ICMP Time Exceeded 메시지를 전달. 3~4번을 반복한다.
5. 목적지에 도달하면, 닫힌 포트(33434 이상)로 시도하기 때문에 ICMP Destination Unreachable(Type3 Code3) 패킷이 반환된다
+ 응답시간이 *로 표시되는 경우는 응답이 없는 경우(default 4초)로 보안상의 이유 또는 해당 구간에 문제가 발생한 경우로 볼 수 있음
(윈도우) tracert의 동작방식
1. IP의 TTL 필드를 1로 설정한 ICMP Echo Request(Type 8) 패킷을 전송
2. TTL이 0으로 폐기되면서 ICMP Time Exceeded (type 11 code0) 응답
3. TTL을 1씩 증가시켜가며 반복
4. 목적지에 도착하면 ICMP Echo Reply(Type 0) 패킷을 응답받는다
비교
동작방식 | 환경 | 전송 | 중간 응답 | 최종 응답 | |
tracereout | TTL +1 | Unix/Linux | UDP 패킷 | ICMP Time Exceeded (type 11 code0) |
ICMP Destination Unreachable(Type3 Code3) |
tracert | TTL +1 | Window | ICMP Echo Request(Type 8) | ICMP Time Exceeded (type 11 code0) |
ICMP Echo Reply(Type 0) |
15 END --
3) netstat 명령
(가) 시스템의 네트워크 관련 다양한 상태정보를 관리
(나) 옵션 (암기 필요)
옵션없음 : 모든 연결된ESTABLISHED 소켓 상태 정보
-a : 모든 소켓 상태 정보
-i : 네트워크 인터페이스 정보
(RX-OK~ : 수신한 패킷 수, TX-OK~ : 전송한 패킷 수)
-r : 시스템 라우팅 테이블 정보
-s : 프로토콜별 통계 정보 (부팅 이후부터 현재까지 누적)
(다) 필드
Ptoto : 프로토콜 종류
Recv-Q : 수신 버퍼에 저장한 데이터 크기 (Receive Buffer)
Send-Q : 송신 버퍼에 저장한 데이터 크기
Local Address : 로컬 호스트 소켓 주소
Foreign Address : 원격 호스트 소켓주소
Static : 소켓 상태 (LISTEN / ESTABLISHED 등)
실습 (리눅스 기준)
netstat -t (연결된 TCP 소켓만 보여줌)
netstat -at (모든 TCP 소켓만 보여줌)
netstat -ant (모든 TCP 소켓만 보여줌 + 네트워크 주소 정보를 숫자로 보여준다)
=> ex 20.198.111.1:https → 20.198.111.1:443
netstat -antp (프로세스명/pid 추가 출력)
(짤막 복습 port의 서비스명 : /etc/services)
4) ifconfig 명령 (유닉스/리눅스) (윈도우는 ipconfig)
- 네트워크 인터페이스 설정 정보 조회 또는 IP주소나 서브넷 마스크 등의 설정을 변경 가능
실습
(교재 기준 항목과 리눅스에서 쳐본 결과값이 조금 다른데 시간의 흐름때문일듯)
1) eth1 Link encap:Ethernet HWaddr 00:0a:12:bc:34:d5
=> eth1 이더넷 인터페이스 MAC주소
2) inet addr: 192.168.10.0 Bcast 192.168.10.255 Mask 255.255.255.0
=> IP주소, 브로드캐스트 주소, 넷마스크
3) UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
=> 활성화 브로드캐스트지원 실행중 멀티캐스트지원 MTU1500 라우팅경로효율성1(높을수록고비용)
* 인터페이스에 promiscuous 모드 설정하기
=> ifconfig ens3(인터페이스명) promisc
모드 설정/해제 기록이 남는 로그 파일 : /var/log/messages
모드 해제
: ifconfig ens3(인터페이스명) -promisc
16 END --
** 포트 스캐닝 Port Scanning
개요
- 호스트에 어떤 포트(서비스)가 활성화되어 있는지 확인하는 기법
- 공격 전 취약점을 분석하기 위한 사전 작업 중 하나
- 일반적으로 nmap을 많이 사용
** nmap 포트 스캐너 사용법
옵션
1) Scan 타입
-sS : TCP SYN Scan SYN 패킷으로 포트 오픈 여부 확인
-sT : TCP Connect(Open) TCP Scan 포트 오픈 여부 확인
-sU : UDP Scan UDP 포트 오픈 여부 확인
-sF : TCP FIN Scan FIN 제어비트 패킷을 이용한 스캔
-sX : TCP Xmas Scan FIN, PSH, URG 제어비트를 조합한 스캔
-sN : TCP NULL Scan 제어비트 설정이 없는 NULL 패킷을 이용
-sA : TCP ACK Scan 방화벽 룰셋(필터링정책) 확인용
-sP : Ping Scan Ping을 이용해 호스트 활성화 여부 확인
-D : Decoy Scan 다른 주소로 위조하여 스캔
-b : FTP Bounce Scan
2) Port Option
-p 22 : 22번 포트 스캔
-p 192.168.0.0:10 : 192.168.0.0번 ip의 10번 port 스캔
-p 1-1023 : 1~1023번 포트 스캔 (범위로)
-pT:21,23,110,U:53 : TCP는 21, 23, 110번 포트를, UDP는 53번 포트를 스캔
3) Output Option
-v : 상세내역
-d : Debugging
-oN <file> : 일반 파일 형식으로 출력
-oX <file> : XML 파일 형식으로 출력
-oG <file> : Grepable 파일 형식으로 출력
-oA <Directory> : 일반, XML, Grepable 파일로 출력
4) 4) 기타 옵션
-O : 영문 대문자 O, 대상 호스트의 운영체제 정보 출력
-F : 빠른 네트워크 스캐닝
5) Target
- hostname 지정 ex http://www.navver.com
- IP address, Network 지정 ex 192.168.0.1 또는 192.168.0.1/24 또는 192.168.0.100-150
(ip, ip대역, ip 포트범위)
(리눅스 nmap 설치
yum -y install epel-release
yum -y install nmap )
TCP Connect(Open) 스캔
개요
1) 일반 사용자 권한으로 connect 시스템 호출(system call)을 이용하는 방식
2) Target 호스트의 포트에 직접 연결되기 때문에 Open 스캔이라고 하고, 시스템 로그에 스캔흔적이 남는다
3) TCP SYN 스캔 등은 패킷 자체(raw packet)를 조작하는 방식으로 관리자 권한이 필요
동작방식
가) OPEN/CLOSED 상태
1. Open Port
Client: SYN 패킷
=> Server: SYN+ACK 패킷 응답
=> Client: ACK 패킷
=> Client: RST + ACK 패킷 (Port Open 확인했으니 즉시 중단)
2. Closed Port
Client: SYN 패킷
=> Server: RST+ACK 패킷 응답
(짤막복습
3-way handshake 과정 = TCP 연결 설정
열린포트(연결 상태)
RST+ACK패킷 전송
닫힌포트
RST+ACK패킷 응답 : Acknowledgment Number가 없는(ex SYN) 수신 패킷에 대한 응답
RST패킷 응답 : Acknowledgment Number가 있는 수신 패킷에 대한 응답)
나) Filtered 상태
1. 방화벽 필터링 DROP 정책 (권장)
SYN 패킷 전송
=> 응답없음 (패킷 폐기됨)
2. 방화벽 필터링 REJECT 정책
SYN 패킷 전송
=> ICMP Destination Unreachable 응답
(iptables 에서 DROP 설정하면 테스트 가능
ex iptables -P INPUT DROP(INPUY 체인에 대한 기본 정책을 DROP으로 수정)
또는 /etc/sysconfig 파일에서 포트별로 수정하기
ex iptables -A INPUT -d 192.168.0.10 -p tcp –dport 22 -j DROP
=> 192.168.0.10에 대한 tcp 22 포트에 대한 접근 차단 (DROP을 ACCEPT로 바꾸면 허용이 됨)
* centos 6.x 버전은 iptables 를 사용하고 7.x 버전은 firewall을 사용한다.
실기강의 시점이 2016이므로 iptables를 사용한 것 같다
centos7의 경우 yum install -y firewalld 로 설치
systemctl unmask firewalld
systemctl enable firewalld
systemctl start firewalld
등록
firewall-cmd --state 로 방화벽 실행 여부를 확인할 수 있다
firewall-cmd --permanent --zone=public --add-port=80/tcp
tcp 80포트 오픈
firewall-cmd --reload
리로드)
17 END --
TCP SYN(Half-Open) 스캔 (nmap -sS)
개요
- 관리자 권한으로 패킷을 조작하여 TCP 포트 오픈 여부를 판단하는 스캔 방식
- 제어비트(control bit)를 조작하여 TCP 연결 설정 과정을 완전하게 수행하지 않기 때문에 반만 오픈하는 스캔이라고 한다
- 스텔스 스캔(Stealth Scan) : TCP 세션이 완전히 성립되지 않은 상태에서 포트 오픈 여부를 알아내는 방식으로, 시스템에 로그가 남지 않아 IP를 노출시키지 않으면서 스캔할 수 있어 스텔스 스캔이라고 함 (ex TCP SYN/FIN/NULL/Xmas Scan 등)
동작방식
가) OPEN/CLOSE 상태
1. Open 포트
Client: SYN
=> Server: SYN+ACK
=> Client: RST
2. Closed 포트
Client: SYN
=> Server: RST+ACK
SYN 패킷 송신
- 포트가 열린 상태 : SYN+ACK 응답을 수신한다
- 포트가 닫힌 상태 : RST+ACK 응답을 수신한다
* 포트가 열린 상태이면, SYN+ACK 응답이 오고, 해당 응답만으로 포트가 열려있음을 알 수 있기 때문에 연결을 완료하지 않고 패킷 조작을 통해 즉시 중단하기 위한 RST 패킷을 전송한다
TCP FIN/NULL/Xmas 스캔
개요
- TCP 패킷 자체를 직접 조작하여 오픈 여부를 판단하는 스캔 방식
- 스텔스 스캔Stealth Scan 방식으로, 제어비트를 비정상적으로 설정해서 스캔한다
- TCP FIN : FIN 제어비트만 설정. (정상 설정은 FIN+ACK)
- TCP NULL : 제어비트를 설정하지 않는다
- TCP Xmas : URG, PSH, FIN 제어비트를 설정 (표준에서 사용하지 않는 설정)
- 닫힌 포트 : RST이외 패킷을 수신하면 RST 패킷으로 응답한다
- 열린 포트 : SYN, ACK 또는 RST 이외의 패킷을 수신하면 폐기하고 응답하지 않음 (즉, TCP FIN/NULL/Xmas 스캔은 패킷이 폐기된다)
nmap STATE : open | filtered
=> nmap은 응답이 없을때 포트가 open인지 방화벽에 의해 차단된 것인지 판단할 수 없기 때문에 둘 다 표기해준다
동작방식
가) TCP FIN (nmap -sF)
열린포트 : FIN => 응답없음
닫힌 포트 : FIN => RST+ACK 응답 수신
나) TCP NULL (nmap -sN)
열린포트 : NULL => 응답없음
닫힌 포트 : FIN => RST+ACK 응답 수신
다) TCP Xmas (nmap -sX)
열린포트 : URG, PSH, FIN => 응답없음
닫힌 포트 : FIN => RST+ACK 응답 수신
라) FILTERED 상태 (방화벽에 의한 차단)
DROP 정책 : 응답없음
REJECT 정책 : ICMP Destination Unreachable 응답
TCP ACK 스캔 (nmap -sA)
개요
- 포트 오픈 여부가 아니라, 방화벽 룰셋(필터링 정책)을 알아내기 위한 스캔방식
- ACK 제어비트만 설정한 패킷 전송
- 차단(FILTERED)된 상태 : 응답이 없거나, ICMP Unreachable 응답 수신
- 허용(Unfiltered)된 상태 : 포트 오픈 여부와 상관없이 RST 응답 수신
동작방식
가) 차단된 상태
ACK => 응답없음 또는 ICMP Destination Unreachable 응답
나) 허용된 상태
ACK => RST 응답
UDP 스캔
- 닫힌 IDP 포트로 수신시 ICMP Destination Unreachable 응답이 온다 (Type3 Code3)
동작방식
가) Open port
UDP 패킷 => UDP 응답 또는 응답 없음
나) Closed port
UDP 패킷 => ICMP Destination Unreachable 응답
다) 차단(Filtered) 상태
Drop 정책: 응답없음
Reject 정책 : ICMP Destination Unreachable 응답
Decoy 스캔
- 포트스캔을 수행할 때, Target 호스트에서 스캐너 주소를 식별하기 어렵도록 위조된 주소로 스캔하는 방식
동작방식
nmap -T4 -sF -p 23,80 192.168.0.1 -D RND
=> nmap으로 TCP FIN 스캔을 하는데 RND 랜덤으로 위조된 IP를 만들어 스캔 수행 (T4는 가장 빠르게의 의미)
출력옵션 Output
-oN : 일반 파일
namp -sS -oN "temp/normal.out" -p 23,80 192.168.0.1
-oX : Xml 파일
namp -sS -oX "temp/normal.xml.out" -p 23,80 192.168.0.1
-oG : Grepable 파일
namp -sS -oG "temp/Grepable.out" -p 23,80 192.168.0.1
(출력결과를 보면 일반파일에 비해 구분자 (:)가 많이 들어가 있는 것을 볼 수 있다)
기타 옵션
-O : 운영체제 정보 출력 (추측)
(finger print: OS를 식별할 수 있는 지문)
-- 18 END --
'(실기) 정보보안기사&산업기사' 카테고리의 다른 글
네트워크 기본학습 25~28, 네트워크 보안 프로토콜1 (0) | 2024.03.23 |
---|---|
네트워크 기본학습 19~24 (0) | 2024.03.21 |
네트워크 기본학습 9~13 (0) | 2024.03.19 |
네트워크 기본학습 6~8 (0) | 2024.03.18 |
네트워크 기본학습 4,5 (0) | 2024.03.17 |