무전기로 통신을 해본 경험이 있으신 분들은 알 것이다.
전화기로 통화할때는 상대방이 전화를 받기 때문에 상대방이 듣고 있다는 것을 확실 히 알수 있지만
무전기를 통해서 특정인에게 어떤 내용을 전달할때 특정인이 듣고 있는지 확인을 해야한다.
왜냐하면 무전기는 전화를 받는 행위가 따로 없고 바로 내용이 전달이 되기 때문이다.
무전기로 무전 하는 스타일은 다양하겠지만 본인이 경험했던 스타일로 예를 들어 작성합니다
a: b 송신! ( b 들리면 대답해라)
b: b 송신! 수신 양호 한지? ( 나 b 인데 듣고 있어요! 내 목소리 잘 들리시나요)
a: 수신양호하다고 알림 ( ㅇㅇ 니 목소리 잘 들리는 구먼)
이 처럼 서로 잘 들리고 의사소통이 가능한지 먼저 확인을 하고
내용을 전달 한다.
이는 컴퓨터에서도 똑같다.
일단 먼저, TCP (Transmission Control Protocol) 또는 전송 제어 프로토콜은 인터넷을 통해 데이터 패킷을 전송을 해서 네트워크 장치를 상호 연결 하는데 설계된 네트워크 통신 프로토콜이다.
이런 연결 지향적인 TCP 프로토콜은 상대방이 내 신호를 받을수 있는지 확인을 하는 과정을 거치는데
이때가 3 way handshake 이다!
클라이언트와 서버로 나눠지는데 총 3단계 이니 나눠서 알아보자
1단계 SYN
클라이언트가 SYN이라는 연결요청 메세지를 서버에게 전송을 하고 기다린다.
SYN은 Synchronize Sequence Number 라는 임의의 랜덤값 숫자들의 나열이다.
2단계 SYN+ACK
서버가 요청을 받아드린다
클라이언트로 부터 SYN을 받고 SYN내용에 +1을 해서 ACK (Acknowlegenment Number)를 보내서
잘 받았음을 보낸다
3단계 SYN+ACK
클라이언트는 메세지를 받고 ACK에 받은 내용을 +1을 해서 전송을 한다.
nmap으로 실습
칼리리눅스에서 와이어샤크를 실행을 시켜서 eth0 로 실행을 시키고
칼리에서 실습 컴퓨터 ip에 nmap을 보낸다
-sT 옵션으로 tcp 포트 스캔을 한다
실습 ip에는 80포트는 열려있지만 81포트는 닫혀있다
그리고
좌측 상단에 빨간색 네모 버튼을 눌러서 wireshark를 중단을 시키고
와이어샤크에 Statistics -> Flow Graph 를 선택을 한다.
Flow type을 TCP Flows로 선택을 한다.
그러면 이런식으로 뜨는것을 확인 할수 있다.
좌측 과 우측의 창을 동시에 보면서
분석을 해보자.
80번 포트
우선 80 포트에관해 3 way handshake 부분을 확인 할수 있다.
맨위에 syn 부분을 누르면 좌측에 해당부분의 패킷 내용을 자동으로 확인 할수 있다.
패킷 내용을 보니 랜덤으로 생성된 2380982170 이라는 시퀀스 넘버를 확인 할수 있다.
그리고 우측창에 SYN,ACK 부분을 누른다
ack 패킷 내용을 보면 아까 syn에서 본 시퀀스 넘버에 +1 이 된 2380982171로 확인할수 있다. (노란색 하이라이트)
syn 패킷에는 시퀀스 넘버 2780351101 를 넘기는 것을 확인 할수 있다.
마지막 ack 부분을 누르면
아까 syn값에서 보낸 시퀀스값 2780351101의 +1이 된것을 확인 할수 있다.
이로써 3 way handshake는 끝났다.
마지막 rst,ack 는 3 way handshake 를 마무리를 짓는 부분이다.
81 번 포트
실습 ip 에는 81번 포트는 열려 있지 않기 때문에 syn 보내고 rst,ack로 끝났다.
348739535 라는 시퀀스 넘버를 보내며 syn 을 보냈다 .
348739536 이라는 아까 syn 패킷의 +1 이 되어 ack를 하긴 했지만 syn,ack 가 아닌 rst,ack로 티키타카가 되지 않는 모습을 볼수 있다.
'보안 > 기초' 카테고리의 다른 글
TCP vs UDP (0) | 2023.11.14 |
---|---|
Bind shell 과 Reverse shell (0) | 2023.10.24 |
bruteforce란 무엇이고 파이썬으로 구현 해보자! (0) | 2023.06.13 |
TTPs (0) | 2023.03.04 |
The Pyramid of Pain (0) | 2023.03.04 |