네트워크 패킷 분석[Network Packet Analysis] - 2
Network

네트워크 패킷 분석[Network Packet Analysis] - 2

연구소 인턴 2023. 7. 18.
300x250
반응형

 

<기본개념>

LAN에서 노드들이 통신할 때에는 IP주소가 아니라 MAC 주소로 통신한다.

따라서 각 노드는 상대방 IP<->MAC으로 매핑되는 데이터를 자신의 Cache Memory에 저장해서 빠르게 연결한다.

=>외부의 노드와 연결할 때에는 IP주소를 사용한다. IP주소 중에서 Network주소로 경로를 선택한다.

 

<실습>

Man in the Middle 공격을 수행할 때에는 해커 중간자는 양 노드에 패킷이 정상적으로 오가도록 IP forward를 해주어야하는데 echo 1> /proc/sys/net/ipv4/ip_forward 해서 ip_forward의 설정 값을 1로 해준다. <= 가상 파일 시스템

windows7 <-> BT <-> Gateway 구조이다

이를 실행하기 위해서 Gateway의 MAC주소와 Windows 7의 MAC주소를 서로 동일하게 해주어야 한다.

이런 공격을 ARP SPOOFING이라고 한다.

*Metaspolit

# ifconfig

*back track

# fragrouter -B1(위 내용과 동일한 명령어)

# [new terminal] arpspoof -i eth0 -t 192.168.100.2 192.168.100.133

# [new terminal] arpspoof -i eth0 -t 192.168.100.133 192.168.100.2

 

*Windows 7

# arp -a

*back track

#[new terminal] ettercap -G(그래픽 옵션)

sniff - Unified sniffing - OK

hosts - scan for hosts

hosts - hosts list

Mitm - Arp poisoning - sniff remote connections

 

*Windows 7

Internet Explorer - http://192.168.100.107

 

*back track

 

----------------------------------------------------------------------------------------------------------------------------------

 

<기본개념>

Wireshark는 Windows, Mac OS-X, Linux 등 모든 운영체제에서 작동되며 IP, Apple Talk, BitTorrent, DHCP, HTTP, DNS 등 약 850여개의 프로토콜을 지원한다.

 

<실습>

*back track

# wireshark

(USB는 무선을 의미함)

etho0 - start

분석할 패킷 받기

*back track

 

 

# wireshark

#[New Terminal] firefox ftp://192.168.100.107

캡처를 중지하고 기록들을 저장하기

wireshark를 실행한 뒤 작업을 해서 패킷을 하나의 파일로 저장한 뒤 다른 wireshark를 실행해서 다른 작업을 한 뒤 이 두 파일을 시간순, 앞, 뒤에 넣어서 묶을 수 있다.

 

<기본개념>

패킷 검색

패킷을 검색할 때 특정 기준이나 문자열 비교 등을 통해서 원하는 패킷만 찾을 수 있다.

=>메인메뉴에서 Edit 탭>두 번째 Find Packet...으로 가거나 Ctrl+F를 눌러서>Find Packet 창이 뜨면 다음 중에서 하나를 선택하는데, 첫줄 By: 뒤에서

∎ 첫 번째 Display Filter는 특정 조건(표현식)을 입력해서 해당 조건이 일치하는 패킷을 찾아주는데 어구 앞부분만 입력하면 자동완성 되므로 찾아서 클릭하면 편리하다.

=>not ip, ip.addr==192.168.100.2, arp식으로 해주는데 올바른 필터식이면 옅은 초록색 바탕이 된다. 올바르지 않으면 옅은 붉은색 바탕이 되므로 다시 입력해야 한다. 이제 우측하단의 Find를 클릭하면 찾는다. 해당 패킷 찾으면 해당 줄로 이동되고, 없으면 이동하지 않는다.

∎ 두 번째 Hex value는 사용자가 명시한 16진수를 가진 패킷을 찾아주며

=>00:ff, ff:ff, 00:AB:B1:10 등으로 해준다.

∎ 세 번째 String은 사용자가 명시한 텍스트 문자열을 가진 패킷을 찾아준다.

=>Workstation1, UserB, login, domain, request, GET 등으로 해준다.

원하는 옵션을 지정했으면 우측하단의 Find 버튼을 누르면 가장 먼저 찾은 패킷(문자열, ..등)을 보인다>다음 패킷을 찾으려면 Ctrl+n을 누르면 되고, 이전 패킷을 찾으려면 Ctrl+b를 누르면 된다.

 

시간 표시 포맷 변경

와이어샤크에서 캡처된 각 패킷은 운영체제에 의해 패킷이 캡처된 시간을 나타내는 타임 스탬프를 가지고 있는데 패킷이 캡처되었을 때의 정확한 시간을 표시하는 절대적인 타입 스탬프 뿐만 아니라 마지막으로 캡처한 패킷과 관련된 시간, 캡처의 시작_시간과 끝_시간도 보인다.

=>시간 표시 포맷을 변경하려면 메인메뉴의 View 탭>Time Display Format으로 가면 매우 많은 하위 옵션을 볼 수 있지만, 디폴트인 Automatic (File Format Precision)으로 놔두면 된다. Time of Day를 선택하면 실제 캡처된 시간을 보인다.

 

캡처 필터에는 WinPcap이 인식하는 BPF(Berkeley Packet Filter) 구문을 사용하는데 대부분 패킷 스니핑 어플이 libpcap이나 winpcap 라이브러리에 의존적이기 때문에 이 구문은 대부분 패킷 스니핑 어플에 잘 적용된다. BPF 구문으로 만들어진 필터를 표현식(Expression)으로 부르고 각 표현식은 하나 또는 그 이상의 프리미티브(Primitive)로 이뤄져 있다. 프리미티브는 ID 이름이나 숫자 앞에 하나 또는 그 이상의 한정자(qualifier)로 이뤄진다.

a. Type에 host, net, port, ...

b. Direction에 src, dst

c. Protocol에 ether, ip, tcp, udp, http, ftp, icmp, arp, ...,

d. 논리 연산자에 AND(&&), OR(||), NOT(!), equal(==)을 사용한다.

e. 형식은

dst host 192.168.100.100 && tcp port 80

한정자 한정자 ID 연산자 한정자 한정자 ID 이다.

ip.addr==192.168.100.100

frame.len<=128

ip.addr=192.168.100.100 or ip.addr==192.168.100.200

ip.dst_host==192.168.100.2 && tcp.port==80

.....

tcp.srcport==80, udp, not udp, tcp.dstport==8080, ip.src_host==10.10.10.10, ip. host==192.168.100.10, tcp.port>=0 && tcp.port<1000, ip.src==10.10.10.10, ip.addr== 192.168.100.100, tcp.port==80, tcp.srcport=23, tcp.dstport==80, ip.src_host==10.10. 10.10, not icmp, ip.src_host==10.10.10.10 and not dst.net==192.168.100.0/24

=>eq, ne, gt, lt, ge, le 등 비교 연산자와 and(&&), or(||), xor(^^), not(!) 등 논리 연산자를 을 사용할 수 있다.

icmp || dns || tcp, ip.addr==10.1.1.1, ip.src != 10.1.2.3 or ip.dst != 10.4.5.6, tcp. port==25, tcp.dstport==25, tcp.flags, tcp.flags.syn==0x02, tcp.dstport 80, ip. src_host 10.1.1.1, !icmp, !tcp.port=3389(RDP 트래픽 제거), tcp.flags.syn==1(SYN 플래그가 있는 패킷), tcp.flags.rst==1(RST 플래그가 있는 패킷), http(모든 HTTP 패킷), !arp(ARP 트래픽 제거), tcp.port==23 || tcp.port==21(Telnet or FTP 패킷), smtp || pop || imap (SMTP or POP or IMAP 패킷) ... 등도 가능하다. 프로토콜도 필터링할 수 있는데 icmp 프로토콜만 보고자 한다면 icmp만 입력하면 된다. IPv6만 제외한 모든 트래픽을 확인한다면 !ipv6 하면 된다.

=>디스플레이 표현식은 http://www.wireshark.org/docs/dfref/를 참조하면 많은 예를 볼 수 있다.

 

이 패킷을 기준으로 시간을 재지정할 수 있다.

기준이 될 패킷을 누른뒤

Edit - Ignore Packet(toggle)

캡쳐를 할 수 있는 캡쳐수를 지정하기

TCP Flag에는 6가지 종류가 있는데 PSH와 같은 문자로 보이지 않고 8이라는 숫자로 보일 때가 있으므로 구별할 수 있어야 한다.

SYN(synchronization) 연결 요청 플래그 : 통신 시작 시 세션을 시작

=>tcp[13]==2

ACK(Acknowledgment) 응답 플래그 : 송신측으로부터 패킷을 잘 받았다고 알림

=>tcp[13]==16

FIN(Finish) 연결 종료 플래그 : 더 이상 전송할 데이터가 없어서 세션을 종료

=>tcp[13]==1

RST(Reset) 연결 재설정 플래그 : 비정상적인 세션을 끊기 위해 연결을 재설정

=>tcp[13]==4

PSH(Push) 넣기 플래그 : 버퍼가 채워지기를 기다리지 않고 받는 즉시 버퍼링 없이 응용층 API에게 바로 전달

=>tcp[13]==8

URG(Urgent) 긴급 데이터 플래그 : 긴급한 데이터의 우선순위를 다른 데이터의 우선순위보다 높여서 긴급하게 전달

=>tcp[13]==32

패킷에 특히 SYN, FIN, RST와 같은 플래그들이 들어 있으면 주의해서 살펴보아야 한다. Flag에는 6가지 종류가 있는데 PSH와 같은 문자로 보이지 않고

 

Windows 서버에서는 입력되는 TCP 패킷을 검증해서 위와 같이 플래그들이 있으면 주의해야 하고 added file에서 .com, .exe, .bat의 확장자가 들어오면 무조건 막아야한다.

http, ftp 서버에서 이런 파일들의 입력을 막는 것을 sanitation 한다고 한다.

database에서는 broken query 구문을 막아야한다.

select username, password form ABC_tbl

where 1' and '1' / where '1' or '1'='1'식으로 하면 문제가 있다. <= 해결방법 : 미리 구문 컴파일한 함수형태의 설정을 넣어둔다.

각 노드들이 어떻게 통신하는지 볼 수 있다.

네트워크 사용중 각각 어느 부분에서 사용하는지 알수 있다.

Statistics - Protocol Hierarchy

 

프로토콜 정밀 분석기

프로토콜 정밀 분석기(Protocol Dissector)는 와이어샤크가 프로토콜을 좀 더 정밀하게 분석할 수 있게 하는데 예를 들어 ICMP 프로토콜 정밀 분석기는 네트워크 회선을 따라 이동하는 RAW 데이터 패킷을 ICMP 패킷의 형태로 변경시킨다. 와이어샤크의 분석이 항상 정확하고 제대로 된 결과를 보인다는 것은 아니다. 예를 들어 네트워크상에서 디폴트 포트가 아닌 포트나 표준화 되지 않은 포트로 통신하는 경우도 많기 때문이다. 이런 것을 염두에 두고 와이어샤크는 정밀분석기를 사용하게 하는 것이다. 정밀 분석기는 와이어샤크 프로그램이 네트워크 회선을 통해서 흐르는 패킷을 사용자가 이해하기 쉽게 변환시켜주는 도구라고 이해하면 된다. 와이어샤크는 여러 패킷을 분석하기 위해서 많은 정밀 분석기를 가지고 있는데 어떤 정밀 분석기가 더 목적에 빠르게 정확히 분석할지를 생각한 뒤 선택해야 한다.

 

300x250
반응형

댓글