1. 와이어샤크
컴퓨터 네트워크상에 흘러 다니는 트래픽은 수집하고 분석할 때(패킷 분석) 가장 많이 사용되는 프로그램은 Wire Shark이다. IP 필터링 , MAC 주소 필터링 수행 없이 랜 카드에 도달하는 모든 전기신호를 읽어 들임으로써 얻은 패킷의 정보를 읽는 것이며, 침해대응, 모의해킹, 포렌식 분석 등에도 사용된다.
1.스니핑하기 원하는 인터페이스를 지정해준 후 프로그램을 시작한다.
2.filter 영역에 수집한 패킷 정보에 해당하는 것(프로토콜의 종류, IP주소/다른 것을 검색해도 무방함)을 검색한다.(TCP프로토콜을 인터페이스로 지정했다면 TCP검색)
3.패킷 리스트 영역에서 지정한 인터페이스가 전송한 목록 중 가장 위에 있는 것 위에 커서를 두고 마우스 오른쪽을 클릭한 후 Follow TCP Stream을 선택하면 전체 정보를 한 번에 볼 수 있다.
※HTTP를 프로토콜로 지정한 경우 누군가 열람한 이미지 파일(JPEG, PNG, GIF 파일 등)을 확인하고 싶다면 패킷리스트 영역의 정보부분(➁영역)에서 이미지파일을 얻은 부분을 클릭 한다. ➂영역에서 이미지파일에 해당하는 부분에 커서를 두고 마우스 오른쪽을 클릭 한 후 Export Selected Packed Bytes..에 해당하는 부분을 클릭해 저장 한다. ->누군가 열람한 이미지 파일을 확인할 수 있다.
➀filter툴바(원하는 필터 기능을 적용해서 원하는 것을 볼수 있도록)
➁패킷 리 스트 영역
➂리 스트에 대한 상세영역(데이터 영역의 값들이 의미하는 바를 정의)
➃패킷 데이터 영역(실질적인 패킷의 정보들)
➄패킷 status바(데이터 영역 값들에 커서 갖다 댔을 때 의미하는 바를 나타냄)
No. : 패킷을 수집한 순서
Source : 발신지 포트필드
Destination : 목적지 포트필드
Protocol : 프로토콜 정보
Length : 패킷의 길이
Info : 패킷 정보
네트워크 기본이론
통신 프로토콜을 통해 정보를 주고받는 것이 네트워크이다. 연결과 데이터 전송이 핵심이라 볼 수 있으며, 클라이언트와 서버사이에서 연결된다. 네트워크로 연결된 모든 장치는 노드(Node), IP주소(네트워크 주소)를 가진 노드들은 호스트로 불린다. 결국 호스트의 프로세스들 사이에서 데이터가 오가는 것이 네트워크에서의 정보 송수신이기 때문에, 호스트가 실행중인 수많은 프로세스들 중 데이터가 도착해야하는 프로세스를 찾기 위해 포트가 필요한 것이다. (포트는 데이터를 보내는 호스트가 송신자에게 보내주어야 한다)
[소켓]
호스트들의 프로세스들이 소켓을 열여야만 프로세스들끼리 데이터를 주고 받을 수 있다. 소켓을 열 때는 기본적으로 호스트의 IP주소, 포트넘버, 프로토콜 타입에맞는 소켓이 필요하다. 하나의 포트로 소켓을 거의 개수 제한없이 많이 생성할 수 있고, 그렇기 때문에 게임이나 메신저 이용 시 하나의 프로세스가 여러 곳들과 정보를 주고받을 수 있는 것이다.
[3way-handshaking] : tcp연결 설정 방식
tcp프로토콜로 통신 시 데이터를 손실없이 송수신하기 위해 필요한 과정이다.
정상적인 접속의 상태인 동기화는 서버와 클라이언트가 서로의 시퀀스 번호를 올바르게 알고 있을때 성립된다.
1. 클라이언트가 서버에 접속을 요청하는 패킷 전송 :
클라이언트는 32비트 숫자 중 임의의 숫자를 생성하여 서버에 syn 패킷을 전송한다.
2. 서버가 요청수락 패킷과 클라이언트로부터 받은 패킷 전송:
sock.listen()상태로 클라이언트를 기다리던 서버는 syn패킷을 받은 뒤 요청수락을 의미하는 ack와 클라이언트로부터 받은 syn을 함께 보낸다.
3. 클라이언트가 서버에게 ack 전송 후 연결 성립됨-->데이터 전송가능(서버와 클라이언트 동기화 상태_정상적인 접속 상태)
프로토콜 기초(tcp, udp, http etc)
인터넷은 모든 기종의 컴퓨터들을 연결한 통신망인데, 컴퓨터의 운영체제와 상관없이 연결하여 정보를 송수신 하기 위해선 통신 규약(통신 프로토콜)이 필요했다. 신호 체계, 인증 등의 기능을 포함하기도 하기 때문에 구현 방법은 독립적이라고 한다. 인터넷 서비스의 종류에 따라 프로토콜을 다르게 구분할 수 있다.
tcp : 데이터의 전송속도보다 손실여부가 중요할 때
컴퓨터가 전송하는 패킷의 양을 결정짓는 IP(Internet Protocol)와 함께 사용되어, TCP/IP는 인터넷을 정의하는 기본 규칙이다. (ip가 데이터 전송을, tcp가 패킷 관리를 한다.) 서버와 클라이언트는 일대일로 연결되며, tcp는 한번 연결되면 메세지의 송수신이 끝나기 전까지 연결이 계속 유지된다. 데이터가 도착하면 목적지에서 재조립하고, 그 과정에서 데이터가 손실이 확인될 경우 재전송 요청을 할 정도로 데이터를 엄격히 관리하기 때문에, 속도면에서는 큰 단점을 갖는다. 3way-handshaking과정으로 연결하고, 4way-handshaking으로 연결을 해제한다. 규격이 공개되어 있는 범용프로토콜이기 때문에 네트워크 크래킹에 취약하고 한다.
예시를 통해 보는 tcp의 특징
▷웹서버가 하이퍼텍스트 문서(HTML문서)를 클라이언트에게 보낼 때 http를 사용하게 되므로, tcp 계층에 연결과 전송의 허락을 받는다. 그러면 tcp스택이 파일을 데이터 패킷들로 나누고, 각각을 전송을 위한 ip로 보낸다. 패킷들의 출발지와 목적지(IP주소)가 동일하지만 각각의 패킷들의 경로는 다양하다. 그러면 클라이언트의 tcp 프로그램 단계에서는 모든 패킷이 도착할 때까지 기다린다. 이 예시에서 추측할 수 있듯이 tcp/ip통신은 계속 연결을 유지하기 때문에 여러대를 연결하면 속도가 현저하게 느려지게 된다. ◁
udp (User Datagram Protocol) : 데이터의 손실보다 전송속도가 중요할 때
전송 속도가 중요한 비디오나 게임의 경우는 UDP를 이용한다(실시간 서비스streaming에 주로 사용된다). 데이터가 손실되는 경우는 TCP보다 많지만, 속도면에서 훨씬 빠르다. 각각의 패킷이 서로 독립적인 관계를 갖기 때문에, 데이터를 받은 클라이언트나 서버가 데이터끼리 비교하여 데이터 손실을 확인하는 과정이 없이 처리된다. ('패킷의 손실없이 전송'의 성공여부를 알 수 없다.) 따라서 연결형 서비스라 불리우는 tcp와 달리 udp는 비연결형 서비스라 한다.
http(hypertext transfer protocol) : 웹에서만 사용
인터넷 상에서 웹 브라우저와 웹 서버 간에 문서를 교환해주는 프로토콜이다.(인터넷의 기본은 클라이언트의 요청과 서버의 답변이며, 웹브라우저가 클라이언트에 웹서버가 서버에 해당된다.) 명칭에 맞게 하이퍼텍스트 문서를 교환할 때 사용되는 프로토콜이 맞지만, JSON, XML등의 형태의 정보도 전달가능하다. 웹에서만 사용한다고 한다.
[그외 인터넷 서비스의 종류에 따른 프로토콜]
이메일(Email) - SMTP/POP3/IMAP
파일 전송(FTP) - FTP
원격로그인서비스(Telnet) - Telnet
도메인 이름 변환 서비스(DNS) - DNS
인터넷 뉴스 서비스(News) - NNTP
'스터디 > N0Named 스터디' 카테고리의 다른 글
[리버싱] 정적분석, 동적분석과 이를 위한 툴 (0) | 2020.10.12 |
---|---|
board (0) | 2020.09.27 |
[3주차 스터디 과제 2] 리눅스 서버 구축(도커를 이용한 apm 구축) (0) | 2020.09.22 |
[3주차 스터디 과제1] 리눅스 메모리구조(스택, 힙, BSS etc.) (0) | 2020.09.21 |
[2주차 스터디 과제2] pwntools을 이용한 간단한 문제풀이 (0) | 2020.09.13 |