본문 바로가기
정보보안

정보보안6 8차시

by IT매니절 2024. 9. 29.

tcpdump
네트워크 패킷을 캡처하고 분석하는 패킷 덤프 프로그램

sudo dnf -y install tcpdump
설치

예시

tcpdump -i ens160 icmp
해당 인터페이스의 icmp 패킷만 캡처한다는 뜻

tcpdump -i ens160 port 80
해당 인터페이스의 출발지, 목적지 포트가 모두 80 인 패킷 캡처

tcpdump -i ens160 src port 80
해당 인터페이스의 출발지 포트가 80 인 패킷 캡처

 

tcpdump -i ens160 dst port 80
해당 인터페이스의 목적지 포트가 80 인 패킷 캡처


tcpdump -i ens160 src port 80 and dst port 443
해당 인터페이스의 출발지 포트가 80이고 목적지 포트가 443 인 패킷 캡처

 

tcpdump -i ens160 src host 192.168.100.1
해당 인터페이스의 출발지 호스트가 192.168.100.1인 패킷 캡처

ping 기록

 

패킷덤프 종료하려면 ctrl + c

 

dns 관련 패키지 설치

dnf -y install bind bind-chroot bind-utils

( /var/named : 존파일위치 )

 

vi /etc/named.conf
listen-on port 53 { 192.168.100.6; };
allow-query     { any; };
recursion yes;
dnssec-enable no; 
dnssec-validation no;

네임서버 전체 설정

 

systemctl restart named

네임서버 재시작

 

질의

 

캡처된 패킷 일부 (하략)

 

greater 100
길이가 100바이트 이상

less 50
길이가 50바이트 이하

len 100-200
길이가 100-200바이트 범위

ether host 1:1:1:1:1:1
특정 주소를 가진 호스트

src net 192.168.100.1/24
특정 ip 대역

icmp[0] == 8
-nn icmp[0] == 8
-v -nn icmp[0] == 8
-vv -nn icmp[0] == 8
icmp 타입이 8

portrange 1000-2000
특정 포트범위

'tcp[tcpflags] & (tcp-syn|tcp-ack) == (tcp-syn|tcp-ack) '
tcp 패킷의 tcpflags가 tcp-syn 그리고 tcp-ack 일 때

 

-A -s 0 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0) and tcp[((tcp[12] & 0xf0) >> 2):4] = 0x47455420'
=> ip[2:2]
=> ip[0]
=> tcp[12]
=> tcp[((tcp[12] & 0xf0) >> 2):4]
=> 0x47455420 아스키코드로 GET 을 의미

==> 80번포트로 들어오는 패킷 줄 GET 문자열을 포함한 http 요청 패킷

복잡한 필터링
아래 POST처럼 간단하게 필터링

궁금증이 생겨서 두 가지 방식으로 GET 패킷캡처를 비교해보는데 큰 차이점은 없어보인다...

오히려 간단하게 한 버전은 Cache-Control까지 있어서 더 좋아보임 



-s 0 -A 'tcp[((tcp[12]&0xf0)>>2):4] = 0x504f5354'
0x504f5354는 아스키코드로 POST를 의미함
즉, POST 요청 패킷을 캡처한다는 뜻

HTTP:POST는 넘어가는 정보이고

... POST 부터 캐치된 헤더를 의미한다

ip[8] == 128
TTL 값이 128

-v udp port 53
dns 쿼리

tcpdump -w HTTP_LOGIN.pcap tcp port 80 -i ens160

패킷덤프를 HTTP_LOGIN.pcap 라는 이름을 저장한다

tcpdump -r HTTP_LOGIN.pcap ( -nnn -vv 는 상세히 볼 때 ) 명령어로 확인 가능

 

옵션들

-A 아스키코드 형태
-s 캡처할 패킷의 최대 길이를 바이트 단위로 지정
-v, -vv, -vvv 상세정보
-n 숫자형식으로 표기

 

원격복사로 vm웨어 안의 파일을 로컬 데스크탑 호스트에 복사해오기 (ssh에서 지원하는 scp 사용)

scp linuxadmin@vm웨어호스트아이디:경로/HTTP_LOGIN.pcap .

 

좀 더 편하게 보려면 데스크탑에서 와이어샤크 프로그램으로 열어서 보면 된다

( 따라가기 > http 스트림 등 )

 

포트스캔
포트 : 내부에서 실행되는 데몬(서비스) 프로세스를 실행해 외부와 연결시키는 통로 역할을 하는 값

리눅스의 경우 /etc/serfvices 파일에 포트번호가 저장됨

웰론포트 : 1~1023 서비스 프로그램용으로 예약된 주소
등록된포트 : 1024~49151 프로그램의 네트워크 통신을 위해 할당하는 주소
동적포트 : 49152~65535 임의로 사용가능한 주소

내부에서 동작중인 서비스 확인 : netstat, ss
외부에서 동작중인 서비스 확인 : 포트 스캐닝

 

포트 스캐닝은 보통 nmap을 이용한다

 

-sT: TCP 연결스캔
-sS: tcp 하프 스캔 (닫힌경우, 방화벽이 있으면 무응답, 없으면 RST)
-sA: ack 스캔 (우회기법)
-sF: fin 스캔 (우회기법)
-sX: xmax 스캔 (우회기법)
-sN: null 스캔 (우회기법)
-sU: UDP 스캔
-sP: 핑 스캔 (호스트 생존 여부)

 

포트상태
open 열림
closed 닫힘
filtered 필터됨
unfiltered 필터되지않음
open|filtered 열린, 필터된 (확실하지 않은)
closed|filtered 닫힌, 필터된 (확실하지 않은)

 

nmap 스캔 결과

-p- 옵션을 추가하면 포트 전체 스캔

-F는 가장 일반적인 포트 검사

 

tcpdump

17:01:24.617494 IP localhost.localdomain.ssh > 192.168.100.1.49977: Flags [P.], seq 8319904:8320096, ack 61665, win 3074, length 192

 

tcpdump -n
16:59:12.117540 IP 192.168.100.10.ssh > 192.168.100.1.49977: Flags [P.], seq 10803968:10804160, ack 78881, win 3074, length 192

tcpdump -nn
17:00:01.219516 IP 192.168.100.1.49977 > 192.168.100.10.22: Flags [P.], seq 48321:48385, ack 6523936, win 4101, length 64

tcpdump -nn -i ens160 tcp[13] == 2 (-c 20 하면 20개까지만 출력)

=> tcp[13] == 2 는 tcp syn 패킷을 의미함

출력
17:08:10.685713 IP 192.168.100.3.2024 > 192.168.100.10.80: Flags [S], seq 0, win 8192, length 0

( tcp 헤더는 옵션을 제외한 20바이트이고 13번째 위치는 TCP 플래그를 의미한다

1바이트는 8비트이고,

  C   E   U  A  P R S F
128 64 32 16 8 4 2 1

SYN만 설정되었으므로 2가 된다

ACK는 16 )

 

열린포트 (방화벽x)

PORT   STATE SERVICE
80/tcp open  http
MAC Address: 00:0C:29:F6:71:D0 (VMware)

 

닫힌포트 (방화벽x)
PORT   STATE  SERVICE
81/tcp closed hosts2-ns
MAC Address: 00:0C:29:F6:71:D0 (VMware)

 

( + IP 패킷 헤더 길이가 20 바이트가 아닌 패킷
ip[0] != 69 또는 ip[0] > 69
ip 패킷 헤더의 첫 부분은 version과 HENL(헤더 길이)로 이루어져 있음
각자 4비트이므로 비트로 표현하면 01000101이고 10진수로는 69              <- 사실 이거 이해가 안됨,,,

참고블로그 : http://www.packetinside.com/2010/10/tcpip-%ED%97%A4%EB%8D%94-%EB%82%B4-%EB%A7%98%EB%8C%80%EB%A1%9Ctcp13-2-%EC%9D%98-%EC%9D%98%EB%AF%B8%EB%8A%94-%EB%AC%B4%EC%97%87%EC%9D%BC%EA%B9%8C.html )

 

웹서핑을 하니까 urg 플래그가 18이라는 얘기가 적혀 있어서 테스트해봤다.

nmap -sX

FPU는 F = 1, P = 8, U = 32 전부 더하면 41

tcp[13] == 41 로 필터링하니까 패킷이 캡처되었다

만약 Urg 플래그가 18이라면 27이 맞을텐데... 왜 18이라는 얘기가 나왔을까? ipv6 환경인가...?

syn+ack 는 tcp[13] == 18

 

 

 

nmap -sT ( SYN > SYN+ACK > ACK )
17:31:25.253738 IP 192.168.100.3.33592 > 192.168.100.10.80: Flags [S], seq 3135858273, win 32120, options [mss 1460,sackOK,TS val 2310558768 ecr 0,nop,wscale 7], length 0
17:31:25.253788 IP 192.168.100.10.80 > 192.168.100.3.33592: Flags [S.], seq 258848036, ack 3135858274, win 28960, options [mss 1460,sackOK,TS val 3196734982 ecr 2310558768,nop,wscale 7], length 0
17:31:25.254299 IP 192.168.100.3.33592 > 192.168.100.10.80: Flags [.], ack 1, win 251, options [nop,nop,TS val 2310558768 ecr 3196734982], length 0
17:31:25.254311 IP 192.168.100.3.33592 > 192.168.100.10.80: Flags [R.], seq 1, ack 1, win 251, options [nop,nop,TS val 2310558768 ecr 3196734982], length 0

 

namp -sS ( SYN > SYN > RST ) 하트 오픈 스캔이므로.

17:30:58.631103 IP 192.168.100.3.60631 > 192.168.100.10.80: Flags [S], seq 3167538128, win 1024, options [mss 1460], length 0
17:30:58.631196 IP 192.168.100.10.80 > 192.168.100.3.60631: Flags [S.], seq 3333452145, ack 3167538129, win 29200, options [mss 1460], length 0
17:30:58.631983 IP 192.168.100.3.60631 > 192.168.100.10.80: Flags [R], seq 3167538129, win 0, length 0

 

 

방화벽이 있는 호스트에 포트스캔시 filtered

 

'정보보안' 카테고리의 다른 글

정보보안7 2차시  (0) 2024.10.06
정보보안7 1차시  (0) 2024.10.05
정보보안6 7차시  (0) 2024.09.28
정보보안6 6차시  (0) 2024.09.22
정보보안6 5차시  (0) 2024.09.21