ICMP Redirect
1 실습 목적 및 원리
ICMP 리다이렉트는 원래 라우터를 두 개 이용하는 네트워크에서 사용하던 것입니다. 하나를 기본 라우터 다른 하나를 보조 라우터라고 한다면 두 라우터는 서로의 정보를 알고 있습니다. 이때 네트워크 내에서 외부로 나가는 모든 패킷은 기본 라우터로 향하고 만약 외부의 특정 네트워크나 호스트에 대한 접속이 보조 라우터를 통하는 것이 빠르다면 기본 라우터는 특정 네트워크를 이용하고 싶으면 보조 라우터를 이용하라는 ICMP 리다이렉트 패킷을 보내 사용자의 라우팅 테이블을 변경하도록 합니다. 지금은 거의 사용하지 않는 구조의 네트워크이고 대부분의 ICMP 패킷을 차단하는 추세이지만 간혹 ICMP 리다이렉트를 이용한 해킹이 있습니다.
정상적인 ICMP 리다이렉트
1 : 사용자가 특정 네트워크(호스트)로 접속하기 위해 기본 라우터로 패킷 전송
2 : 라우터 B를 통하는 것이 더 빠른 경우 라우터 A가 사용자에게 ICMP 리다이렉트 패킷 전송
3 : 사용자의 라우팅 테이블이 변경되고 특정 네트워크(호스트)에 접속할 때 라우터 B로 패킷 전송
ICMP 리다이렉트를 이용한 공격
1 : ICMP 리다이렉트 패킷 전송
2 : 라우터가 아닌 공격자에게 패킷 전송
3 : 패킷 릴레이
2 실습 환경
공격자 - IP : 192.168.10.150(fedora), MAC : 00:0c:29:9b:94:96
공격 대상 - IP : 192.168.10.151(winXP), MAC : 00:0c:29:ed:fe:16
라우터 - IP : 192.168.10.1, MAC : 00:26:66:d5:e1:08
접속할 특정 호스트 - IP : 125.209.210.79(map.naver.com)
3 실습 준비
3.1 공격자 - icmp_redir.c 파일 컴파일
첨부파일의 icmp_redir.c 파일을 gcc를 이용하여 컴파일하여 icmp_redir 파일을 만듭니다.
- # gcc -o icmp_redir icmp_redir.c
3.2 공격 대상 - 라우팅 테이블
공격 대상의 라우팅 테이블을 미리 확인해봤습니다.
- > route print 명령어로 라우팅 테이블을 확인할 수 있습니다.
4 실습
(1) fragrouter를 이용해 패킷 릴레이를 해주고 tcpdump를 이용해 패킷을 캡처합니다.
- fragrouter를 이용한 패킷 릴레이
- tcpdump를 이용해 패킷 캡처
(2) 공격 대상에게 icmp 리다이렉트 공격을 실시합니다.
- # ./icmp_redir (게이트웨이) (공격 대상 IP) (공격 대상이 접속하려는 IP) (공격자 IP)
(2) 공격 대상의 라우팅 테이블을 확인합니다.
- 라우팅 테이블에 125.209.210.79에 대한 라우팅 테이블이 생긴 것을 확인할 수 있습니다.
(3) 라우팅 테이블 삭제
- > route delete (목적지 네트워크) mask (서브넷 마스크) 명령어를 이용해 라우팅 테이블을 삭제합니다.
5 패킷 분석 및 결과
5.1 ICMP 패킷 분석
icmp 패킷 캡쳐
00 0C 29 ED FE 16 00 0C 29 9B 94 96 08 00 45 00 00 38 14 7B 00 00 40 01 D0 61 C0 A8 0A 01 C0 A8 0A 97 05 01 2F C0 C0 A8 0A 96 45 00 00 38 14 7B 00 00 40 00 4A EB C0 A8 0A 97 7D D1 D2 4F 00 00 00 00 00 00 00 00 |
Ethernet header 분석
Destination MAC address |
00:0c:29:ed:fe:16 |
Source MAC address |
00:0c:29:9b:94:96 |
Type |
08 00 (IP) |
IP header 분석
Version |
Header len | TOS |
Total length |
0100 (IPv4) |
0101 (5words) | 00000000(사용안함) |
00000000 00110100 (52bytes) |
Identification |
Flag |
Fragment offset |
|
00010100 01111011 |
000(분할되지 않음) |
00000 00000000 |
|
TTL |
Protocol type |
header checksum |
|
01000000 (64) |
00000001(1:ICMP) |
11010000 01100001 |
|
Source IP address |
|||
11000000 10101000 00001010 00000001 (192.168.10.1) |
|||
Destination IP address |
|||
11000000 10101000 00001010 10010111 (192.168.10.151) |
ICMP 패킷 분석
Type |
Code | Checksum | |
00000101 (5:redirect) |
00000001(호스트 리다이렉트) | 00101111 11000000 | |
새로운 게이트웨이 IP |
|||
11000000 10101000 00001010 10010110 (192.168.10.150) |
Version |
Header len | TOS |
Total length |
0100 (IPv4) |
0101 (5words) | 00000000(사용안함) |
00000000 00110100 (52bytes) |
Identification |
Flag |
Fragment offset |
|
00010100 01111011 |
000(분할되지 않음) |
00000 00000000 |
|
TTL |
Protocol type |
header checksum |
|
01000000 (64) |
00000000(0:hop-by-hop option) |
01001010 11101011 |
|
Source IP address |
|||
11000000 10101000 00001010 10010111 (192.168.10.151) |
|||
Destination IP address |
|||
01111101 11010001 11010010 01001111 (125.209.210.79) |
분석 결과
ICMP 리다이렉트 패킷으로 라우터(192.168.10.1)에서 공격 대상(192.168.10.151)에게 125.209.210.79로 접속하려면 새로운 게이트웨이 192.168.10.150을 이용하라고 알리는 패킷입니다.
5.2 TCP 통신 패킷 분석
5.2.1 첫 번째 패킷 분석
패킷 캡처
00 0C 29 9B 94 96 00 0C 29 ED FE 16 08 00 45 00 00 30 06 1F 40 00 80 06 D9 48 C0 A8 0A 97 7D D1 D2 4F 04 4E 00 50 B8 79 6D D9 00 00 00 00 70 02 FF FF 3C CE 00 00 02 04 05 B4 01 01 04 02 |
Ethernet header 분석
Destination MAC address |
00:0c:29:9b:94:96 |
Source MAC address |
00:0c:29:ed:fe:16 |
Type |
08 00 (IP) |
IP header 분석
Version |
Header len | TOS |
Total length |
0100 (IPv4) |
0101 (5words) | 00000000(사용안함) |
00000000 00110000 (48 bytes) |
Identification |
Flag |
Fragment offset |
|
00000110 00011111 |
010(분할되지 않음) |
00000 00000000 |
|
TTL |
Protocol type |
header checksum |
|
10000000 (128) |
00000006(6:TCP) |
11011001 01001000 |
|
Source IP address |
|||
11000000 10101000 00001010 10010111 (192.168.10.151) |
|||
Destination IP address |
|||
01111101 11010001 11010010 01001111 (125.209.210.79) |
TCP header 분석
Source port # |
Destination port # |
|||||||
00000100 01001110 (1102) |
00000000 01010000 (80) |
|||||||
Sequence # |
ACK # |
|||||||
10111000 01111001 01101101 11011001 |
00000000 00000000 00000000 00000000 |
|||||||
Header len |
예약 | U | A | P | R | S | F |
Window size |
0111(7words) |
000000 | 0 | 0 | 0 | 0 | 1 | 0 |
11111111 11111111 (65535) |
Checksum |
Urgent point |
|||||||
00111100 11001110 |
00000000 00000000 |
분석 결과
공격 대상(192.168.10.151)이 map.naver.com(125.209.210.79)과 연결하기 위해 SYN 패킷을 보내지만 이 패킷은 게이트웨이가 아닌 공격자(00:0c:29:9b:94:96)에게 전달됩니다.
5.2.2 두 번째 패킷 분석
패킷 캡처
00 26 66 D5 E1 08 00 0C 29 9B 94 96 08 00 45 00 00 30 06 1F 40 00 80 06 D9 48 C0 A8 0A 97 7D D1 D2 4F 04 4E 00 50 B8 79 6D D9 00 00 00 00 70 02 FF FF 3C CE 00 00 02 04 05 B4 01 01 04 02 |
Ethernet header 분석
Destination MAC address |
00:0c:29:d5:e1:08 |
Source MAC address |
00:0c:29:9b:94:96 |
Type |
08 00 (IP) |
IP header 분석
Version |
Header len | TOS |
Total length |
0100 (IPv4) |
0101 (5words) | 00000000(사용안함) |
00000000 00110000 (48 bytes) |
Identification |
Flag |
Fragment offset |
|
00000110 00011111 |
010(분할되지 않음) |
00000 00000000 |
|
TTL |
Protocol type |
header checksum |
|
10000000 (128) |
00000006(6:TCP) |
11011001 01001000 |
|
Source IP address |
|||
11000000 10101000 00001010 10010111 (192.168.10.151) |
|||
Destination IP address |
|||
01111101 11010001 11010010 01001111 (125.209.210.79) |
TCP header 분석
Source port # |
Destination port # |
|||||||
00000100 01001110 (1102) |
00000000 01010000 (80) |
|||||||
Sequence # |
ACK # |
|||||||
10111000 01111001 01101101 11011001 |
00000000 00000000 00000000 00000000 |
|||||||
Header len |
예약 | U | A | P | R | S | F |
Window size |
0111(7words) |
000000 | 0 | 0 | 0 | 0 | 1 | 0 |
11111111 11111111 (65535) |
Checksum |
Urgent point |
|||||||
00111100 11001110 |
00000000 00000000 |
분석 결과
첫 번째 패킷을 받은 공격자(00:0c:29:9b:94:96)가 공격 대상(192.168.10.151)이 정상적으로 map.naver.com(125.209.210.79)에 접속하도록 라우터(00:0c:29:d5:e1:08)로 패킷을 전달해줍니다.
6 공격 대응 방안
6.1 windows XP에서 ICMP 차단
(1) 제어판 - 보안센터 - windows 방화벽 선택
(2) 고급 탭에서 ICMP 설정 선택
(3) 차단할 ICMP 선택 해제
6.2 리눅스에서 ICMP 차단
# echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all (or icmp_ignore_all)
/proc/sys/net/ipv4/ 경로에 있는 icmp ignore 파일의 내용을 1로 바꿔주면 icmp를 차단합니다.
'CERTIFICATE' 카테고리의 다른 글
[모의해킹] EP.06 : 터널링(Tunneling) (0) | 2019.10.01 |
---|---|
[모의해킹] EP.05 : DNS Spoofing (0) | 2019.09.24 |
[모의해킹] EP.03 : ARP Spoofing (0) | 2019.09.19 |
[모의해킹] EP.02 : ARP Redirect (0) | 2019.09.18 |
[모의해킹] EP.01 : 스니핑- telnet (0) | 2019.09.17 |