- 전체
- 보안뉴스
- 제로데이취약점
- 해킹프로그래밍
- 웹해킹
- 해킹기법
- 정보보호
- 정보보안기사 - 국가기술자격
- 악성코드분석_리버싱
- 시큐어코딩_개발보안진단원
- CISSP
- CISA
- 모의해킹_penetration-test
- deepweb / tor network
- Kali Linux
모의해킹_penetration-test 모의해킹(Penetration Testing) PortScanner 2. 포트 스캐너를 위한 네트워크 기초 다지기
2023.03.20 08:51
모의해킹(Penetration Testing) PortScanner 2. 포트 스캐너를 위한 네트워크 기초 다지기
2. 포트 스캐너를 위한 네트워크 기초 다지기
여기서는 포트 스캐너를 위하여 네트워크 기초를 다지겠다. 네트워크의 분야도 워낙 넓은 분야이기 때문에 이 글을 통해 모든 것을 알아가기는 어렵지만 적어도 우리가 사용하려는 포트 스캐너의 원리에 대하여 파악하여 효과적인 포트 스캐너를 만들어보도록 하자.
소켓이란 전화기에 비유할 수 있다. 집에서 전화를 받으려면 전화기가 필요하다. 컴퓨터 세계의 전화기인 소켓은 컴퓨터의 OS가 마련해준다. OS가 프로그램에 전화기를 대여해준다고 생각하면 된다. 우리가 프로그램에서 구현할 부분은 OS에 전화기를 대여해 달라고 요청하는 부분이다. 그러면 전화기 준비는 끝난다.
그림 2.1 Socket 요청
전화를 받는 사람이 전화기를 준비하면 전화를 거는 사람도 전화기가 필요하다. 그래야 서로 통화를 할 수 있다. 이 통화하길 원하는 두 사람이 각각 자신의 OS로부터 소켓을 부여 받는다. 이 때 Server 측이 되는 사람이 전화를 기다리는 측이 되고, 클라이언트는 전화를 직접 거는 쪽이 된다. 서버에서 기다림을 의미하는 용어로 Listen을 사용하고, 전화를 거는 쪽은 connect라는 용어를 사용한다. 서버의 소켓이 listen할 때 클라이언트 소켓이 connect하는 것이다. 통신을 시작할 때 TCP는 3 way handshake라는 과정을 거치게 되는데, 이는 [2. 4) 3 way handshake]를 참고하자.
그림 2.2 클라이언트에서 서버로 연결 요청
컴퓨터 내에서 소켓을 요청하는 프로그램은 한 두 개가 아니다. 지금 바로 cmd 창을 열어서(열기 창(윈도우 키 + R)에서 “cmd”를 입력한다) netstat –ano를 입력해보자. PID(Process ID)에서 사용하고 있는 소켓들의 정보들이 출력된다. 포트 번호는 이 많은 소켓들을 구분하기 위해 사용된다.
C:\> netstat -ano
활성 연결
프로토콜 로컬 주소 외부 주소 상태 PID
TCP 0.0.0.0:135 0.0.0.0:0 LISTENING 844
TCP 0.0.0.0:443 0.0.0.0:0 LISTENING 2804
TCP 0.0.0.0:445 0.0.0.0:0 LISTENING 4
TCP 0.0.0.0:902 0.0.0.0:0 LISTENING 2300
TCP 0.0.0.0:912 0.0.0.0:0 LISTENING 2300
TCP 0.0.0.0:1025 0.0.0.0:0 LISTENING 628
TCP 0.0.0.0:1026 0.0.0.0:0 LISTENING 92
TCP 0.0.0.0:1027 0.0.0.0:0 LISTENING 416
TCP 0.0.0.0:1028 0.0.0.0:0 LISTENING 1468
TCP 0.0.0.0:1029 0.0.0.0:0 LISTENING 708
... 중략 ...
netstat을 입력한 결과를 보자. 위에 보이는 소켓들은 모두 LISTENING 상태로 서버인 것을 짐작할 수 있다. 이번엔 두 번째 컬럼인 로컬 주소를 보자. 0.0.0.0 의 의미는 허용하는 IP 대역이고, 뒤에 ‘:’ 와 함께 따라 오는 숫자들은 포트 넘버이다. IP는 컴퓨터를 구분하기 위해, Port는 컴퓨터 내부의 소켓을 구분하기 위해 사용된다.
그림 2.3 IP와 소켓을 이용한 통신 방법
위 그림을 보면 컴퓨터 세 대가 존재한다. 각각 IP1, IP2, IP3라는 IP를 가지고 있고 모두 socket을 4개씩 가지고 있다. 우리가 살고 있는 현실 세계의 주소 체계와 비슷하다. 어떤 한 시의 수많은 동읍리를 구분하는 것과 유사한 구조이다.
이제 대략적으로 IP와 소켓의 주소 체계가 대충 어떠한 구조를 가지고 있는지 이해 할 수 있을 것이다. 포트 번호를 스캔한다는 의미는 컴퓨터 내부로 들어갈 수 있는 길을 찾는 것과 같다. 지금부터는 본격적으로 어떤 방법으로 컴퓨터끼리 통신하는 지 알아보자.
TCP는 Transmission Control Protocol의 약자로 전송 제어 방식이라는 뜻을 가지고 있는데 신뢰성 있는 통신 방식을 의미한다. UDP는 User Datagram Protocol의 약자다. Datagram 방식을 사용하여 신뢰성이 없는 통신 방식을 가지고 있다.
그럼 신뢰성 있는 통신 방식은 무엇을 의미할까? 우리는 TV를 보면 가끔 통신 상태가 좋지 않을 때 영상이 부분적으로 끊겨서 나오는 것을 볼 수 있다. 이 끊어진 부분은 전송 중에 잃어버린 부분으로 UDP통신의 단점이기도 하다. TCP는 이러한 단점을 보완하여 상대 측에서 데이터를 완전히 수신했는지 점검한다. 점검 후 데이터가 어떤 이유로든 손실되어 받지 못했다면 재전송한다. 물론 사용자 입장에서는 고려할 필요가 없다. 이것은 소켓들이 알아서 처리해주기 때문이다.
그림 2.4 TCP와 UDP 데이터 전송방식의 차이
TCP의 신뢰성은 믿음이 가지만, 데이터 점검과 재전송 과정에서 통신이 느려진다는 단점을 가지고 있다. 그래서 인터넷 방송이나 아주 작은 패킷들, DNS 질의, 게임상에서는 대전이나 FPS 등에서 빠른 UDP 전송을 사용하고, 신뢰성이 필요한 문서나, 대용량 파일인 영상 파일, mp3 다운로드 등에는 TCP 전송이 주로 사용된다.
TCP와 UDP의 또 하나의 큰 차이는 커넥션 방식이다. 각각 연결형과 비연결형으로 이야기한다. TCP는 서버와의 완전한 연결을 맺은 뒤 데이터를 보내지만, UDP는 그냥 아무 절차 없이 데이터를 전송한다. 연결 방식은 3 way handshake와 코딩 과정에서 더 자세히 알아보자.
3 way handshake는 TCP 통신에서만 발생하는 연결 수락 과정이다. 데이터를 송수신하기 전에 먼저 서로 통신이 가능한지 확인해보는 작업이다.
3 way handshake를 공부하기 앞서 TCP에서 사용되는 flag에 대해서 알아보자. TCP 통신을 위해서는 데이터에 TCP 헤더가 추가된다. 이를 캡슐화(Encapsulation)이라 부르는 데, 이 부분에 대해 자세히 알기 원한다면 OSI 7 Layer를 공부하기를 추천한다. 여기서는 그 중 아주 일부분만 필요하기 때문에 전부를 다루지는 않는다.
TCP 헤더 내부에는 flag라는 다음과 같은 8개의 비트가 존재한다.
그림 2.5 TCP FLAGS
우리가 알아야 하는 비트는 이 중에서 ACK, SYN, FIN, RST 패킷이다. 이 패킷들의 기능은 다음과 같다.
그림 2.6 FLAGS의 기능
위에서 간단히 학습한 FLAG bit를 가지고 3 way handshake를 알아보자.
-
SYN 패킷 발생
클라이언트는 LISTEN 상태에 있는 서버(IP, PORT)에 연결을 요청한다.
-
SYN, ACK 패킷 발생
서버는 클라이언트의 SYN 패킷을 받으면 SYN, ACK FLAG에 같이 표시하여 패킷을 보낸다.
-
ACK 패킷 발생
마지막으로 클라이언트가 SYN에 대한 ACK 메시지를 보내주면 서로의 완전히 연결되어 데이터 통신을 시작한다.
그림 2.7 3 way handshake
[출처] https://m.blog.naver.com/isc0304/220373619290
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.