연결테스트(ping)
ping 명령은 인터넷으로 접속하려는 원격 호스트가 정상적으로 운영되고 있는지를 확인하는 진단 목적으로 사용된다.
ping 명령은 ICMP를 이용하는 유틸리티다. ICMP 타입 중에서 Echo Request 타입을 지정하여 대상 시스템으로 ICMP 패킷을 전송하고, 그 대상 시스템으로부터 Echo Reply(Type 0) 패킷을 수신함으로써 접근성을 확인하게 된다.
ping 명령으로 접속대상 시스템의 접근성을 진단하는 것 외에도 네트워크 속도를 측정할 수도 있다. 그리고 도메인명을 이용해서 접속대상 시스템의 IP주소를 알아낼 때도 효과적이다.
- 분석
1. 첫 줄의 32바이트 데이터 사용은 ICMP 패킷의 길이를 나타낸다. 운영체제마다 보내는 바이트 길이가 다르다. 윈도우 시스템은 32바이트의 ICMP Echo Request 패킷을 생성하여 보낸다. 유닉스와 리눅스 등 다른 운영체제는 대부분 56바이트다. 각 바이트의 내용은 의미 없는 내용으로 채워진다.
2. 응답 값의 32바이트는 ICMP Echo Reply 패킷의 크기다. 보낸 패킷과 크기가 같은 패킷이 돌아온다.
3. 39ms/43ms의 시간은 Echo Request 패킷을 보낸 후 Reply 패킷을 받기까지의 경과시간이다.
4. TTL은 Time To Live로 라우팅 정보가 잘못되어 패킷이 네트워크를 무한대로 돌아다니지 않도록 최초 라우터를 제외한 라우터 하나를 지날 때마다 값이 1씩 줄어든다. TTL 값으로 어떤 운영체제를 사용하는지 유추가 가능해진다. (윈도우 - 128, 유닉스 - 255, 리눅스 - 64)
5. 통계는 Request 패킷의 개수, Reply 패킷의 개수, 손실된 패킷의 개수를 보여준다.
6. 마지막 줄은 Request 패킷을 보낸 후 Reply 패킷이 오기까지의 시간에 관한 정보를 알려준다.
경로추적(traceroute)
종단 노드 사이에 있는 여러 중계 노드(L3장비/라우터) 각 구간에 대한 네트워크 상태를 관리하기 위한 명령어로 네트워크의 라우팅 문제점을 찾아내는 목적으로 많이 사용한다.
traceroute는 패킷의 TTL을 하나씩 증가시켜 보낸다. 우선 1의 TTL을 갖는 패킷은 도착한 라우터에서 TTL이 감소하고 ICMP 메시지가 출발지로 보내진다.
다음 2의 TTL을 갖는 UDP 패킷은 두 번째 라우터에 도달하여 소멸된다. 목적지에 도달할 때까지 계속 패킷을 보내는데 이 패킷은 사용 불가능한 포트번호(33434)를 붙여서 나간다.
Unreachable Port라는 ICMP 메시지를 받으면 trace가 목적지에 도달했음을 알 수 있다. traceroute는 우연히 도달하는 것을 방지하기 위해 정확히 3개의 UDP 패킷을 보낸다.
- traceroute의 활용
traceroute 결과에서 응답시간이 *로 표시되는 경우 침입차단시스템 등의 접근통제리스트에 의해 traceroute의 UDP 패킷이 보안상의 이유로 차단되었거나 실제 해당 구간에 문제가 발생한 경우로 볼 수 있다.
traceroute 명령 결과를 분석하는 경우에는 경로상의 timeout 현상보다는 어느 구간에 delay가 발생하는지를 살펴보는 것이 더 중요하다.
- 입력 문법 및 예문
문법 | traceroute [-option] ip_address | host_name [packet_len] | |
옵션 | -m max_hop -p port -q n_queries -w wait_time packet_len |
최대 TTL을 저장한다. 디폴트는 30이다. UDP 포트를 지정한다. 디폴트는 33434번이다. 각 TTL마다 전달하는 탐색 패킷의 횟수이다. 디폴트 값은 3이다. 탐색 중 응답을 기다리는 시간이다. 디폴트 값은 5초 탐색 패킷의 크기이다. |
예문 | $ traceroute 192.168.1.100 $ traceroute -q 4 192.168.0.100 // 192.168.0.100에 TTL마다 4회 탐색한다. |
|
설명 | 5초 동안 응답 결과가 없으면 * 기호로 표시한다. |
네트워크 인터페이스 진단(netstat)
netstat 명령은 UNIX 시스템의 TCP/IP 프로토콜 진단 시 다양한 용도로 사용한다. 네트워크 인터페이스(LAN 카드)에 대한 성능 정보, 시스템의 라우팅 정보, 소켓 사용 정보 등 지정 옵션에 따라서 네트워크 정보를 제공한다.
문법 | netstat [-option] | |
옵션 | -r -i [interval] -s -a -n |
라우팅 정보를 출력한다. 네트워크 인터페이스에 대한 정보를 출력한다. 각 네트워크 프로토콜(IP, TCP, UDP, ICMP)에 대한 통계 정보를 출력한다. 모든 소켓 정보를 출력한다. 네트워크 주소를 숫자로 나타낸다. |
예문 | $ netstat // UNIX 시스템에 생성된 네트워크의 연결정보를 출력 $ netstat -an // 모든 소켓 정보를 숫자로 나타낸다. |
· 라우팅 옵션(-r) : UNIX 시스템의 라우팅 테이블을 출력한다.
· 프로토콜 통계(-s) : netstat 명령의 -s 옵션은 UNIX 시스템에서 실행 중인 TCP/IP 프로토콜의 세부 프로토콜에 대한 통계정보를 출력해준다.
SunOS 환경에서는 -s 옵션과 함께 -P 옵션을 추가하여 특정 프로토콜을 지정할 수가 있다.
· 연결정보(옵션 미지정)
netstat 명령에서 옵션을 지정하지 않으면 UNIX 시스템에 생성된 네트워크의 연결정보를 출력한다.
여기서 연결정보란 응용 프로그램이 데이터를 송수신하기 위해서 상대 응용 프로그램과 사용한 프로토콜과 소켓에 대한 정보이다.
위는 윈도우에서 netstat 명령어를 사용한 결과이다. 리눅스의 netstat과 비교하면 수신 버퍼에 저장된 데이터의 크기를 나타내는 Recv-Q와 송신 버퍼에 저장한 데이터의 크기를 나타내는 Send-Q가 없다.
- 3-way handshake 연결
· state 값
항목 | 내용 |
LISTEN | 서버 프로그램이 연결요청을 기다리는 상태이다. |
SYN-SENT | 클라이언트 프로그램이 원격 호스트에 연결을 요청한 상태이다. |
SYN-RECV | 서버가 클라이언트 프로그램으로부터 연결요청을 받아 클라이언트에 응답을 하였지만 아직 클라이언트의 확인 메시지를 받지 않은 상태이다. |
ESTABLISHED | 클라이언트와 서버 프로그램이 서로 연결된 상태이다. |
- 4-way handshake 종료
· state 값
항목 | 내용 |
FIN-WAIT1 | 한쪽 응용 프로그램이 연결 종료를 요청한 상태이다. |
CLOSE-WAIT | 연결 종료 메시지를 수신하고 그에 대한 확인 메시지를 보낸 상태이다. |
FIN-WAIT2 | 로컬에서 종결 메시지를 전송하였고 원격 호스트로부터 이에 대한 확인 메시지를 수신하였지만 원격 응용 프로그램이 작업을 종료하지 않아 원격 호스트의 종결 메시지를 기다리는 상태이다. |
LAST-ACK | 원격으로부터 종결 요청을 받고 로컬에서도 회선 종결에 합의한 상태로, 이에 대한 확인 메시지가 수신되면 회선이 종결된다. |
TIME-WAIT | 연결은 종료되었지만 마지막 종료 확인 메시지를 재전송할 경우를 감안하여 당분간 소켓정보를 유지하고 있는 상태이다. |
CLOSED | 완전히 연결이 종료된 상태이다. |
라우팅 테이블 설정(route)
route 명령을 사용하여 라우팅 테이블에 라우팅 경로를 추가하거나 삭제한다.
- 입력 문법 및 예문(Linux)
문법 | route add [-net | -host] destination [gw gateway] [netmask mask] [[dev] interface] route del [-net | -host] destination [gw gateway] [netmask mask] [[dev] interface] |
|
옵션 | add del -net | -host gw netmask dev |
라우팅 경로를 추가한다. 라우팅 경로를 삭제한다. destination의 값이 네트워크면 net, 호스트면 host를 지정한다. 게이트웨이의 IP 주소를 gateway 자리에 지정한다. 추가하는 라우팅 경로의 netmask를 지정한다. 인터페이스 장치명을 interface 자리에 지정한다. |
예문 | $ route add -net 203.249.7.0 netmask 255.255.255.0 gw 192.168.1.100 /* 203.249.7.0의 네트워크에 해당하는 IP 주소가 전달되면 192.168.1.100의 IP 주소를 갖는 게이트웨이로 라우팅되도록 정의한다.*/ $ route add default gw 192.168.0.1 // 디폴트 게이트웨이 정의 $ route del -net 203.249.7.0 netmask 255.255.255.0 gw 192.168.1.100 // 라우팅 경로 삭제 |
네트워크 패킷/로그 분석(tcpdump)
tcpdump는 네트워크 인터페이스를 거치는 패킷의 내용을 출력해 주는 프로그램이다.
스니핑 도구의 일종으로 자신의 컴퓨터로 들어오는 모든 패킷의 내용을 도청할 수 있으며 공격자의 추적 및 공격 유형 분석을 위한 패킷 분석 시에도 활용할 수 있는 도구이다.
tcpdump는 유닉스 계열에서 사용 가능하며 윈도우용으로는 windump가 있으며 사용 방법은 유사하다.
문법 | tcpdump [option] | |
옵션 | -A -c -C -D -i |
패킷의 내용을 화면에 ASCII로 보여준다. 주어진 수의 패킷을 받은 후 종료한다. 방금 받은 패킷을 저장파일로 만들기 전에 파일이 file_size보다 큰지 체크한다. 만약 크다면 현재 저장파일을 닫고 새로 하나를 연다. 패킷을 잡을 수 있는 시스템 상에 가능한 네트워크 인터페이스 목록을 출력한다. 인터페이스를 정한다. 정해지지 않았으면 tcpdump는 시스템 인터페이스 목록에서 가장 낮은 숫자를 고른다. |
예문 | $ tcpdump -i eth0 // 별도의 옵션이 없으면 tcpdump는 기본적으로 eth0 인터페이스의 트래픽 모니터링 $ tcpdump host 211.47.66.50 and port 80 // 소스나 목적지에 IP가 211.47.66.50이고 포트가 80(http)인 트래픽을 모니터링 하고자 할 때 사용한다. |
네트워크 인터페이스 설정(ifconfig)
ifconfig 명령은 네트워크 인터페이스의 설정정보를 알아보거나 IP 주소 및 서브넷마스크 등의 설정을 변경할 때 사용한다. 그리고 네트워크 인터페이스를 활성화시키거나 비활성화시키는 기능도 있다.
문법 | ifconfig [device] [ip_address] [netmask mask] [broadcast broadcast_ip] [up|down] | |
옵션 | device ip_address netmask broadcast up|down |
IP 주소를 부여할 장치이다. 인터페이스의 IP 주소를 지정한다. 해당 장치에 부여할 넷마스크를 지정한다. 로컬 네트워크의 브로드캐스트 주소를 지정한다. 장치를 활성화시키거나 비활성화시킨다. |
예문 | $ ifconfig -a // 시스템에 있는 활성화 또는 비활성화된 모든 인터페이스 출력 $ ifconfig hme0 // 장치 hme0의 인터페이스 정보 출력 |
'정보보안기사' 카테고리의 다른 글
네트워크 기반 공격에 이해 - 2 (2) | 2023.04.23 |
---|---|
네트워크 기반 공격의 이해 - 1 (0) | 2023.04.21 |
네트워크 관리 (0) | 2023.04.17 |
무선통신 보안 - 2 (0) | 2023.04.15 |
무선통신 보안 - 1 (0) | 2023.04.13 |