WireShark and Packet Analysis.
우선 패킷 스니터에 대해 알아야 이해하기 편한데 패킷 스니퍼란 프로토콜을 실행한느 실체 간에 교환하는 메시지를 관찰하는 도구.
컴퓨터에서 송수신되는 메시지를 캡쳐하고 저장하며 해당 메시지의 프로토콜 필드들의 내용을 화면에 보여준다.
WireShark는 패킷 스니퍼 프로그램 중의 하나이고 전세계적으로 보편적으로 가장 많이 쓰이는 네트워크 분석 프로그램.
많이 쓴다는 것은 무료라는 뜻이고, 오픈 소스 소프트웨어다.
공식 홈페이지 ==> https://www.wireshark.org/ 운영체제에 맞게 설치하면 된다.
#IP Address & ping test.
==> 명령프롬포트[cmd]를 치고 ipconfig를 입력한다.
이더넷 어댑터 로컬 영역 연결 부분이 핵심이기에 IPv4 주소 부분 == PC의 IP address.
IPv4 address ==> 현재 해당 작업을 하고 있는 컴퓨터 내부 IP 주소.
기본 게이트웨이 ==> 공유기 기본 주소 == 공유기 관리자 페이지 접속 주소.
ping 원하는 IP address를 입력한다.
cf) PING == Packet Internet Grooper.
위 화면을 보면 TTL == Time To Live 가 있는데 패킷이 살아있는 시간이라는 것을 뜻한다.
TTL에 대해서도 많은 말을 할 수 있지만 나중에 언급하겠다.
Cf) 인터넷은 접속이 잘 되는데 어떤 사이트의 ping을 테스트했을 때 에러가 뜨는 경우도 종종 존재한다.
시스템 상의 문제가 아니라 ping을 받는 쪽에서 방화벽 설정 등 이유로 인해서 응답을 거부하게 되었을 때는
ping 테스트에서는 에러가 발생한다. [ping test를 하고 싶으면 컴퓨터의 ICMP 포트가 열려야 한다.]
사용하고 있는 인터넷 서버 이름과 Address를 알려면 nslookup이라는 명령어를 사용하면 된다.
참고로 자신의 아이피에 해당하는 http 프로토콜의 패킷들을 확인하려면 필터 조건에 ip addr == 자신의 아이피 && http
코드를 입력하면 위의 화면이 출력된다.
자주 사용하는 필터 식들..................
eth.addr == 00:30:f9:00:00:01 출발지나 목적지 MAC 주소로 검색.
eth.src == 00:30:f9:00:00:01 출발지 MAC 주소 검색.
eth.dst == 00:30:f9:00:00:01 목적지 MAC 주소 검색.
ip.addr == 10.1.0.1 출발지나 목적지 IP 주소로 검색.
ip.src == 10.1.0.1 출발지 IP 주소로 검색.
tcp.port == 1470 TCP 출발지나 목적지 포트 번호로 검색.
tcp.dstport == 1470 TCP 포트 목적지 포트 번호로 검색.
tcp.srcport == 1470 TCP 포트 출발지 포트 번호로 검색.
udp.port == 2000 UDP 출발지나 포트 목적지 포트 번호로 검색.
udp.dstport == 2000 UDP 포트 목적지 포트 번호로 검색.
udp.srcport == 2000 UDP 포트 출발지 포트 번호로 검색.
wlan.addr == 00:30:f9:00:00:01 무선 랜 사용 시 출발지나 목적지 MAC 주소로 검색.
wlan.sa == 00:30:f9:00:00:01 무선 랜 사용 시 출발지 MAC 주소로 검색.
wlan.da == 00:30:f9:00:00:01 무선 랜 사용 시 목적지 MAC 주소로 검색.
arp 트래픽 필터 ==> 필터에 arp 입력.
http 트래필 내 jpg 파일 포함 필터 => 필터에 http contains jpg
#TCP Protocol.
WireShark에서 패킷 캡쳐링을 한 후 화면에서 프로토콜 영역 중에 TCP를 찾아서 클릭하면 TCP에 관한 정보가 나온다.
1.Source port(발신자 포트 필드)==> 발신지에서 오픈된 포트.
위의 화면에서는 https 포트는 [443]이라는 것을 확인.
2.Destination port(목적지 포트 필드)==> 수신지에서 오픈된 포트.
위의 화면에서는 53509 포트.
3.Sequence number(순차 번호 필드)==> 고유한 번호를 가지며, 이 값으로 TCP 세그먼트에 대한 식별값을 제공.
통신 스트림 일부가 분실되면, 확인을 위해 수신자를 사용가능하게 한다.
순차 번호는 패킷에 포함되어 있는 데이터만큼 증가하게 된다.
위의 화면에서는 2921.
4.Acknowledgment number(확인 응답 번호 필드)==> 다음 번에 기대되는 순차 번호를 표시.
위의 화면에서는 197.
5.Header length(데이터 오프셋 필드)==> TCP 헤더의 길이를 정의. 길이는 4byte씩 증가되고, 필드의 값이 20이면
80바이트 길이를 갖는다는 것. TCP헤더의 길이가 다양하게 변화시킬 필요가
있으므로 이 필드가 중요.
#Flag.
1.URG(Urgent) ==> 긴급 포인터.
2.ACK(Acknowledgment)==> 확인 응답 패킷.
3.PSH(Push)==> 네트워크에서 버퍼링 우회와 데이터 즉시 통과.
4.RST(Reset)==> 연결 닫기.
5.SYN(Synchronize)==> 동기화 순차번호.
6.FIN(Finish)==> 트랜잭션 종료.
1-1 URG==> 긴급 비트.
잘 사용되지는 않는데 URG가 1로 설정 된 경우 긴급 포인터 필드로 정의되는 특정 위치에서 시작하는 패킷의 데이터를 알기 위해
발신자가 원하는 수신자를 나타낸다.
2-1 ACK==> 확인 응답 비트.
ACK가 설정되어 있으면... 만약에 ACK의 bit가 1로 되어 있는 경우, 이 패킷은 확인 응답.
3-1 PSH==> PUSH.
TCP 세그먼트가 발신자나 수신자의 측면에서 버퍼에 유지되면 안 된다는 것을 표시.
4-1 RST==> RESET.
RST 비트 설정에 대한 TCP 패킷은 TCP 연결을 종료, 접속을 강제로 종료.
이상 종료 시 사용된다.
5-1 SYN==> 동기화 비트.
송신 측과 수신 측의 일련 번호를 확인 할 때 사용되고, SYN가 1이면 이 패킷은 TCP 핸드셰이크 프로세스의 SYN 단계.
6-1 FIN==> Finish.
프로세스가 완료되었고, 데이터 스트림이 전송 되었다는 것을 의미.
#Window size.
Window field ==> TCP 수신 버퍼를 Byte 크기로 표시.
이 바이트가 0이라면 수신자가 사용가능한 버퍼 공간을 갖지 않겠다는 말.
이 필드에 나타낼 수 있는 최대값은 65.535.
#Checksum
Checksum field ==> TCP 헤더와 데이터의 내용 뿐만 아니라 IP 헤더로부터 파생된 의사 헤더에 대한 내용 수행.
#DNS protocol
DNS는 단일 전송 메커니즘을 사용하는 다른 애플리케이션과는 다르게 UDP와 TCP 모두 사용.
일반적인 응답 or 요청은 UDP, 전송 대역이 큰 응답 or 요청은 TCP 사용.
DNS는 4개의 기본 섹션으로 구성.
1.질문[Questions] 2.응답[Answer] 3.권한[Authority] 4.추가[Additional]
Transaction ID ==> DNS 쿼리와 응답에 연관되는데 사용자는 이 필드에서 DNS에 관련된 모든 것을 보기 위한 값을 필터링 가능.
즉....dns.id == 0x195b.
Flag ==> 쿼리 특성을 정의하는 수많은 필드로 구성되어 있다.
1.Response(Query) ==> 쿼리 or 응답 비트는 요청(0)인지 응답(1)인지 표시.
위의 화면의 경우 0이므로 패킷이 요청이라는 것을 알 수 있다.
2.Opcode ==> Opcode는 쿼리의 유형을 지정하고 일반적인 요청에 대해 0000을 포함.
3.Truncation ==> 응답이 길어서 잘렸는지에 대해서 알려주고, 위의 화면인 경우 잘리지 않았다는 것을 알 수 있다.
4.Z(Reserved) ==> 0으로 설정된다.
5.Non-authenticated data ==> 데이터에 권한이 있는지를 보는 필드, 0으로 설정되어 받아들일 수 없다고 나온다.
flag 밑 부분.
1.Questions ==> 질문의 숫자를 표시하고 대개 한 패킷당 1개의 질문을 볼 수 있다.
2.Answer RRs ==> Answer RRs 수를 표시.
3.Authority RRs ==> Authority RRs 응답 수를 표시.
4.Additional RRs ==> Additional RRs 응답 수를 표시.
Queries.
1.Name ==> 이 필드는 결정 중인 이름을 포함. 형식은 이름에서 영문자 바이트의 숫자를 표시하기 위해 숫자 구분 문자를 이용하는 가변 길이.
2.Type ==> 쿼리의 유형을 나타내는 필드로써 현재는 A, 호스트 주소를 나타나게 된다.
3.Class ==> TCP/IP 통신에 대한 인터넷 클래스 주소를 표시하기 위해 '1'(0x0001)로 설정.
2-1 Type 의 종류.
1.A ==> 호스트 주소.
2.NS ==> Authoritative 네임 서버.
3.CNAME ==> 별칭에 대한 표준 이름.
4.SOA ==> 권한 영역의 시작.
5.PTR ==> 포인터 레코드.
6.MINFO ==> 호스트 정보.
7.MX ==> 메일 교환.
8.AAAA ==> IPv6 주소.
#UDP protocol
UDP는 통신 프로토콜이며 비연결형 전송 서비스를 제공.
한쪽에서 일방적으로 다른 쪽으로 보내는 프로토콜.
브로드캐스트와 멀티캐스트 트래픽이 UDP를 통해 전송.
1.Source Port[목적지 포트 필드] ==> 응답 패킷에서 수신 중인 포트를 열기 위해서 주로 사용되며,
프로토콜을 정의하기 위한 목적으로 사용되며 현재 34915 포트 사용.
2.Destination Port[발신지 포트 필드] ==> 목적지 애플리케이션이나 프로세스를 정의하고, 일부의 경우 발신지와 목적지 포트 번호들은
클라이언트나 서버 프로세스와 동일. 현재 64477 포트 사용.
3.Length[길이 필드]==> UDP 헤더에서 유효한 데이터의 끝까지 패킷의 길이를 정의하면 화면에서는 533byte 표시.
4.Checksum [체크섬 필드]==> checksum에 대한 정보를 나타내며 사용자는 checksum 필드가 0x9b59로 설정된 것을 볼 수 있는데
화면에서도 보이듯이 인증되지 않았다는 의미.
#ICMP [ Internet Control Message Protocol, 인터넷 제어 메시지 프로토콜]
네트워크에서 오류,경고,알림에 대한 메시지를 전달하는 목적으로 사용.
ICMP 패킷은 UDP or TCP 헤더를 포함하지 않는다. ICMP 패킷은 IP 헤더 다음에 type, code, checksum으로 구성.
아래는 ICMPv6로 하겠다.
1.Type[유형]-----> ICMP 기준.
0. 에코 응답.
1. 할당 X.
2. 할당 X.
3. 목적지에 도달할 수 있다.
4. 발신지 억제.
5. 재지정.
6. 호스트 주소 선택.
7. 할당 X.
8. 에코.
9. 라우터 광고.
10. 라우터 간청.
11. 시간 초과.
2.Code[코드] ==> ICMP 기준.
ICMP 패킷 유형의 코드 필드 값을 나타내며 4가지 유형 존재.
1.유형 3 ==> 목적지에 도달할 수 없는 코드.
2.유형 5 ==> 재지정 코드.
3.유형 11 ==> 시간 초과 코드.
4. 유형 12 ==> 파라미터 문제 코드.
3.Checksum ==> ICMP 헤더만 다루게 된다.
1-1 유형 3의 분류.
0. 네트워크 도달 X.
1. 호스트에 도달 X.
2. 프로토콜 도달 X.
3. 포트에 도달 X.
4. 분열 필요, 분열 금지 설정.
5. 발신지 경로 실패.
6. 목적지 네트워크 알 수 X.
7. 목적지 호스트 알 수 X.
8. 발신지 호스트가 단절됨.
9. 목적지 네트워크에 대한 통신이 관리상 금지.
10. 목적지 호스트에 대한 통신이 관리상 금지.
11. 서비스 유형에 대해 목적지 네트워크에 연결 X.
12. 서비스 유형에 대해 목적지 호스트에 연결 X.
13. 통신 관리상 금지.
14. 호스트 우선순위 위반.
15. 우선 순위 자르기.
2-1 유형 5의 분류.
0. 네트워크에 전송하기 위한 최선의 방법 X.
1. 호스트에 전송하기 위한 최선의 방법 X.
2. 목적지 네트워크에 대한 경로 제공 X.
3. 목적지 호스트에 대한 경로 제공 X.
3-1 유형 11의 분류.
0. TTL 전송 시간의 초과.
1. 단편화 재조립 시간 초과.
4-1 유형 12의 분류.
0. 포인터는 오류를 표시.
1. 옵션 분실.
2. 패킷 길이가 좋지 않다.
'#Tip' 카테고리의 다른 글
Installing jdk and Setting environment variables. (0) | 2018.05.07 |
---|---|
Burp Suite. (0) | 2018.05.07 |
Checksec.sh. (0) | 2018.04.09 |
Write shellcode comfortably. (0) | 2018.04.09 |
The default format for remote attacks in Python. (0) | 2018.04.09 |