목차
1. Transport Layer
1-1 UDP
2. 해킹 실습 - 스니핑
2-1 스니핑
2-2 TCPDUMP
2-3 Dsniff
2-4 ARP 리다이렉트
2-5 ICMP 리다이렉트
1. Transport Layer
1-1 UDP
UDP는 TCP와는 달리 비연결 프로토콜로서 상대방이 보낸 응답을 확인하지 않으며, 송신 시스템이 전송하는 데이터에 대한 목적지 시스템의 확인 절차가 생략되므로 데이터 자체의 신뢰성이 없어 수신된 데이터의 무결성을 보장받지 못하는 대신 처리 속도가 빠르다.
텍스트 데이터와 같이 데이터 손상을 허용하지 않는 데이터를 전송할 때도 UDP를 사용할 수는 있다. 그러나 이 경우 애플리케이션이 데이터의 무결성을 보장하기 위해 대신 일하므로 애플리케이션의 덩치가 커진다.
● UDP의 특징
- 비연결 지향형
- 네트워크 부하 감소
- 비신뢰성
- 전송된 데이터의 일부 손실 가능
- 빠른 처리 속도
● UDP 패킷
● UDP 헤더
- UDP Datagram Length : 헤더와 데이터를 합한 사용자 데이터그램의 전체 길이로 0~65535의 범위를 갖는다.
2. 해킹 실습 - 스니핑
2-1 스니핑
스니핑은 네트워크 상에서 자신을 목적으로 하지 않는 패킷을 탐지하는 행위로 다음과 같은 특징을 갖는다.
- 프로미스큐어스 모드(Promiscuous mode)를 이용하여 랜카드가 자신이 목적지가 아닌 패킷을 상위 레이어로 전송한다.
- 유닉스는 OS 레벨에서 프로미스큐어스 모드를 지원한다.
- windows는 OS레벨에서 프로미스큐어스 모드를 지원하지 않는다.
- 고가용성 패킷 스니핑 장비는 네트워크 감시와 분석을 위해서 사용된다.
● 프로미스큐어스 모드 활성화/비활성화
# ip link set dev [NIC] promisc on/off
ex) # ip link set dev eth0 promisc on
or
# ifconfig [장치명] [+/‐] promisc
ex) # ifconfig eth0 promisc
: 장치의 프로미스큐어스 모드를 활성화하거나 비활성화한다.
● 패킷 스니핑 도구
- 와이어샤크
- TCPDUMP : 일반적인 유닉스에서 가장 많이 쓰는 패킷 캡처 도구이다.
패킷 스니핑 도구를 이용해 GUI 인터페이스의 손쉬운 운영이 가능하다.
캡처를 위한 필수 라이브러리로는 pcap 혹은 winpcap 이 있으며 이는 프로미스큐어스 모드에서 패킷에 대한 캡처를 진행한다.
필터링 기능으로 다양한 조건의 패킷을 스니핑 할 수 있다.
2-2 TCPDUMP
관리를 위한 툴로 Snort의 기반이 된다.
● 기능
이더넷의 모든 패킷을 다음과 같이 다양한 형식으로 캡처한다.
- 시스템들 사이에 송수신되는 패킷 헤더 혹은 패킷 전체를 캡처한다.
- 특정 포트번호(혹은 특정서비스)로 송수신되는 패킷 헤더 혹은 패킷 전체를 캡처한다.
- 캡처된 내용을 특정 파일에 저장할 수 있다.
● 설치 확인
# dnf list tcpdump
# dnf install ‐y tcpdump
데비안 계열이 칼리리눅스에서는 apt를 이용해 설치한다.
● 명령어
# tcpdump -[옵션 값]
ex)
basic | tcpdump -i eth0 -X |
IP | tcpdump -i eth0 -X host 192.168.0.10 |
src IP | tcpdump -i eth0 -X src 192.168.0.10 |
dst IP | tcpdump -i eth0 -X dst 192.168.0.10 |
port 번호 | tcpdump -i eth0 -X port 80 |
TCP | tcpdump -i eth0 -X tcp |
UDP | tcpdump -i eth0 -X udp |
ICMP | tcpdump -i eth0 -X icmp |
다중 필터 | tcpdump -i eth0 -X src 192.168.0.10 and port 22 |
패킷 개수 지정 | tcpdump -i eth0 -X -c 100 |
파일로 저장 | tcpdump -i eth0 -w capture.pcap |
파일 읽기 | tcpdump -r capture.pcap |
실제 네트워크에서는 스위치 허브로 인해 감시자의 네트워크로 패킷이 오지 않아 볼 수가 없다. 때문에 실제로는 맥주소 스푸핑이 선행되어야 한다.
-w 옵션으로 파일 저장 시 와이어샤크와 랜 라이브러리가 같아 와이어샤크에서 열어볼 수 있어 -w 옵션은 와이어샤크에게 줄 때만 사용한다.
에디터로 열고 싶은 경우 화면에 뜬 결과를 복사해 파일로 저장하거나, 다음과 같이 리다이렉션 기호를 이용할 수 있다.
tcpdump -i eth0 -X icmp and dst 192.168.11.17 > aa.pkt
※ 옵션
-v,vv,vvv | 좀 더 많은 정보들을 출력한다. |
-w | 캡처한 패킷들을 파일에 저장한다. |
-X | 패킷의 내용을 16진수와 ASCII 코드로 보여준다. |
-x | 패킷의내용을16진수로 보여준다. |
-q | 프로토콜 정보를 간략하게 보여준다. |
-r file | 패킷들을 '-w' 옵션으로 만들어진 파일로부터 읽어들인다. |
-A | 패킷의 내용을 ASCII 코드로 표시한다. |
-a | Network & Broadcast 주소들을 이름들로 바꾼다. |
-c number | 제시된 number 만큼의 패킷을 받은 후 종료한다. |
-D | 캡처에 사용할 인터페이스를 보여준다. |
-e | 출력되는 각각의 행에 대해서 link-level 헤더를 출력한다. |
※ 필터
src/dst [IP] host [IP] |
패킷의 출발지/목적지 ip 패킷의 출발지나 목적지 ip |
ether src/dst [ MAC] ether host [MAC] |
패킷의 출발지/목적지 ip 패킷의 출발지나 목적지 ip |
srcnet 192.168.10.0/24 dstnet 192.168.10.0/24 net 192.168.10.0/24 |
패킷의 출발지 주소가 192.168.10.0/24 네트워크 패킷의 목적지 주소가 192.168.10.0/24 네크워크 패킷의 출발지 주소나 목적지 주소가 192.168.10.0/24 네크워크 |
src port 22 dst port 22 port 22 portrange 1-1024 |
소스 포트가 22번인 패킷 목적지 포트가 22번인 패킷 소스 포트나 목적지 포트가 22번인 패킷 소스 포트나 목적지 포트가 1-1024번인 패킷 |
arp, icmp, tcp, udp, ip, broadcast 지정이 가능하다.
and, or, not 등의 연산자 사용이 가능하다.
● TCPDUMP를 이용한 스니핑
다음 명령어를 통해 192.168.11.36(공격자 시스템)에서 tcpdump를 실행한다.
tcpdump -X -i eth0 tcp port 23 and dst 192.168.11.17 > 11.17
192.168.11.7(클라이언트)에서 192.168.11.17(Telnet) 서버로 접속 후 캡처를 종료하여 다음과 같이 패킷을 확인할 수 있다.
접속 ID: st01, PASSWD: asdf
다음과 같이 아스키코드 속에서 telnet 접속 id(st01)와 passwd(asdf)를 찾아볼 수 있다.
2-3 Dsniff
DSniff는 스니핑을 위한 자동화 도구이다. 많이 알려진 툴이며, 단순한 스니핑 도구가 아니라 스니핑을 위한 다양한 툴이 패키지처럼 만들어져 있다.
CentOS [ 5 | 6 | 7 ], rochylinux8, kali에서 설치 가능하다.
● Dsniff tool
툴 | 기능 |
filesnarf | NFS 트래픽에서 스니핑한 파일을 현재 디렉토리에 저장한다. |
macof | 스위치를 허브와 같이 작동하게 하기 위하여 임의의 MAC주소로 스위치의 MAC테이블을 오버플로우(Overflow)시킨다. |
mailsnarf | SNMP와 POP을 스니핑하여 이메일을 볼 수 있게 해준다. |
msgsnarf | 채팅 메시지를 스니핑한다. |
tcpkill | 탐지할 수 있는 TCP세션을 모두 끊는다. |
tcpnice | ICMP source quench 메시지를 보내 특정 TCP 연결을 느리게 만든다. 속도가 빠른 네트워크에서 스니핑할 때 사용한다. |
arpspoof | ARP 스푸핑 공격을 실행한다. |
dnsspoof | DNS 스푸핑 공격을 실행한다. |
urlsnarf | CLF(Common Log Format)에서 HTTP 트래픽을 스니핑하여 선택된 URL을 알려준다. |
● Dsniff 설치
Kali Linux에는 기본 설치되어 있으나 이외 리눅스에는 직접 설치해야 한다.
# dnf install -y epel-release
# dnf install -y dsniff
● dsniff를 이용한 telnet 스니핑
192.168.11.7(클라이언트)에서 192.168.11.17(Telnet)서버로 접속 후 빠져나오면 위와 같이 접속했던 계정의 id와 passwd를 공격자 측 화면에 출력한다.
2-4 ARP 리다이렉트
실제 네트워크와 같이 스위치 허브를 이용해 통신하는 스위칭 환경의 경우 패킷을 목적지 MAC 주소로 정확히 보내므로 제 3자는 패킷을 훔쳐볼 수 없다.
이를 공략하기 위해 송수신자 사이에서 MAC 주소를 속여 패킷을 중간에서 탈취하는 ARP 리다이렉트를 이용할 수 있다.
● ARP 리다이렉트
ARP 리다이렉트 공격은 기본적으로 2계층에서 실시되며 자신의 MAC 주소가 라우터라며 주기적으로 ARP reply 패킷을 보내는 것이다.
ARP 스푸핑은 이와 같이 MAC 주소를 교란하는 공격 방식을 말하며, 그중에 공격받는 한쪽이 라우터라면 ARP 리다이렉트이다. 즉, ARP 리다이렉트는 ARP 스푸핑의 범주 안에 존재하는 개념이다.
위와 같이 MAC 주소를 교란하는 경우 호스트에서 라우터로, 혹은 라우터에서 호스트로 패킷을 보낼 경우 MAC 주소 C로 보내게 되므로 공격자가 패킷을 가로챌 수 있다.
● 패킷 릴레이를 위한 Fragrouter
위 상황에서 멈춘다면 호스트와 라우터는 통신을 할 수 없어 둘 사이의 대화를 훔쳐볼 수 없다. 호스트와 라우터는 통신을 할 수 있어야 흐르는 정보를 훔쳐볼 수 있으므로 공격자는 중간에 가로챈 패킷을 본래 목적지로 다시 보내주어야 한다.
Fragrouter를 이용하여 발신자가 보낸 패킷을 가로챈 후 다시 본래 목적지로 보내줄 수 있다.
※ Fragrouter 설치
- 칼리 리눅스 환경 설치
# apt install fragrouter
- centos7, rockylinux8 환경 설치
// Fragrouter 설치를 위한 관련 패키지 설치
# dnf install -y gcc make libpcap‐devel byacc flex bison audit
// fragrouter-1.6.tar.gz 소스설치
# tar xvfz fragrouter-1.6.tar.gz
# cd fragrouter-1.6
# ./configure
# make
# make install
설치 이후 다음과 같은 명령어를 통해 패킷 릴레이를 실행한다.
# fragrouter -B1
이후 arpspoof를 이용하여 arp 리다이렉트 공격을 실행한다.
# arpspoof -i eth0 -t 192.168.11.7 192.168.11.1
: 192.168.11.7에게 192.168.11.1의 MAC 주소를 공격자의 MAC 주소로 알려준다.
공격 시 192.168.11.7의 arp 테이블에는 192.168.11.1의 MAC 주소가 공격자의 MAC 주소로 저장되며, arpspoof 프로그램 종료 시 잠시 후 원래 주소로 돌아온다.
2-5 ICMP 리다이렉트
호스트의 기본 게이트웨이가 라우터 A에 연결되어 있을 때, 특정 주소로 패킷을 보내는 경우 라우터 B로 패킷을 보내는 것이 더 비용이 적게 드는 경우 라우터 A는 호스트에게 이 특정 주소로 패킷을 보낼 때에는 라우터 B를 이용하라는 패킷을 전달한다. 이때 전달하는 패킷이 ICMP 리다이렉트 패킷이다.
이를 위해 라우터 A, B는 서로 같은 라우팅 프로토콜을 사용하며, 서로 라우팅 정보를 공유하고 있는 상태여야 한다.
● ICMP 리다이렉트 패킷 구조
Ethernet Header | ||
IP Header | ||
Type (1 byte) | Code (1 byte) | Checksum |
새로운 게이트웨이 주소(4 byte) | ||
IP header (12 byte) | ||
SI (sender IP: 4 byte) | ||
DI (Destination IP : 4 byte) | ||
Data (8 byte) |
● ICMP 리다이렉트를 이용한 스니핑
현재는 운영체제들이 ICMP 리다이렉트 패킷을 받아도 해석을 하지 못하게 만들어져 실제로 공격은 통하지 않는다. 그러나 ICMP 리다이렉트 패킷 자체는 탐지할 수 있으므로 이를 위한 실습을 진행한다.
※ icmp_redir 설치
- icmpush가 제공되지 않는 경우에 사용한다.
- icmp_redir.c 파일을 다운 받은 후 gcc를 이용해 컴파일한다.
# gcc -o icmp_redir icmp_redir.c
※ icmp_redir 사용
icmp_redir [게이트웨이] [공격대상] [외부] [공격자주소]
# icmp_redir 192.168.11.1 192.168.11.7 203.248.252.2 192.168.11.36
: 192.168.11.7에서 203.248.252.2로 패킷을 보낼 때는 192.168.11.1이 아닌 192.168.11.36으로 패킷을 보내도록 한다.
이때 이 ICMP 리다이렉트 패킷은 다음과 같이 192.168.11.1이 보내는 것으로 인식한다.
'일일 정리' 카테고리의 다른 글
Transport Layer, 해킹 실습 - SCAN (0) | 2025.04.10 |
---|---|
Network Layer 구조, 해킹 실습 John the Ripper (0) | 2025.04.09 |
패킷 분석 실습 서버 구축, Wireshark, 패킷의 이해 (0) | 2025.04.09 |
게시판 웹브라우저 프로그래밍 (2) | 2025.04.04 |
게시판 웹브라우저 프로그래밍, PHP 보안 - 스크립트 공격 방지 (0) | 2025.04.03 |