2015년 4월 8일 수요일

ICMP Redirect를 통한 스니핑

ㅇ ㅂㅇ

 * ICMP redirect란 ?
- 보통의 네트워크는 라우터나 게이트웨이가 하나다. 하지만 하나의 라우터로 이를 감당할 수 없을 때는 어떻게 해야 할까? 라우터나 게이트웨이를 두 개 이상 운영해서 로드밸런싱(Load balancing)을 해야 할 것이다. 로드밸런싱을 하는 방법은 다양하다. 시스템의 라우팅 테이블에 라우팅 엔트리를 하나 더 넣어 주는 방법도 있으나, ICMP 리다이렉트를 사용하기도 한다.
- ICMP 공격은 이러한 경우를 강제적으로 만들어주게 된다. 공격자가 네트워크에 존재하는 또다른 라우터임을 각 호스트에게 알리게 된다. ARP 스푸핑과 다른 점은 ARP 스푸핑은 모든 트래픽에 대한 리다이렉트를 가능하게 하지만, ICMP 리다이렉트는 특정한 목적지 주소를 가진 패킷만을 리다이렉트하게 된다.

< ICMP redirect 패킷을 전송하여 기존 경로에서 해킹 경로로 변경한다. >

 * ICMP 리다이렉트 작동 원리
> 호스트가 인터넷으로 패킷을 보낼 때 디폴트 라우터로 라우터 A가 정해져 있다면 호스트는 일단 패킷을 라우터 A로 보낸다.
> 라우터 A는 라우팅 테이블을 검색해서 직접 데이터를 처리하는 것 보다 라우터 B가 처리하는 것이 효과적이라면 패킷을 라우터 B로 전송한다.
> 라우터 A는 동일 목적지로 보내는 패킷이 라우터 B로 전송되도록 호스트에게 ICMP 리다이렉트 패킷을 보낸다.
> 호스트는 라우팅 테이블에 현재 전송중인 패킷에 대한 정보를 저장하고 동일 목적지로 전송하는 패킷은 라우터 B로 보낸다.

 * ICMP redirect를 이용한 실습
-기존 경로에서 해킹경로로 google(173.194.126.240) 접속 경로를 바꿔라

Attacker
Target
Router
IP
192.168.10.104
192.168.10.178
192.168.10.1
MAC addr
00-0C-29-AB-BC-5F
00-0C-29-77-10-16
00-26-66-D5-E1-08
< 사용 PC 및 Router 정보 >

실습 과정
 1). 준비사항
  > tcpdump를 통한 패킷 기록
  > fragrouter를 이용한 패킷 릴레이
  > icmp_redir.c 파일을 컴파일하여 설치
 2). ICMP 리다이렉트 공격
  1. 대상 시스템의 라우팅 테이블 확인


  2. fragrouter를 이용 패킷 릴레이 실행


 3. ICMP 리다이렉트 공격


  # icmp_redir gw_host targ_host dst_host dummy_host
1. gw_host : 게이트웨이 주소
2. targ_host : 공격 대상 주소
3. dst_host : 공격 대상이 접속하는 주소
4. dummy_host : 공격 시스템 주소

 
Google의 주소(178.194.126.240)를 178 사용자(Target)가 접속 할 때는 공격자를 거치는 ICMP redirect 패킷을 전송함 
Google의 주소(178.194.126.240)를 원래 라우터의 경로로 돌려 놓음

 4. 공격당한 시스템의 라우팅 테이블을 확인한다.

해당 도작치의 gateway가 104(공격자)로 바뀐 것이 확인 가능하다

 5. ICMP 패킷 분석



Ethernet 패킷분석
Destination MAC Add ( 6 byte )
00 0c 29 77 10 16
Source MAC Add ( 6 byte)
00 0c 29 ab bc 5f
Type ( 2 byte )
08 00 ( IP )
IP 패킷 분석
Version
(4 bit)
헤더길이
(4 bit)
TOS (1byte)
전체 길이(2 byte)
0100
(4 : IPv4)
0101
(5word = 20byte)
00000000
(사용하지 않음)
00000000 00111000
( 56 byte )
Identification (2byte)
Flag(3bit)
Fragment Offset(13bit)
01101001 01001011
000
00000 00000000
TTL ( 1 byte )
Protocol ( 1 byte )
Header Checksum ( 2 byte )
01000000
00000001 ( 1 : ICMP)
01111011 01110110
Source IP
11000000 10101000 00001010 00000001
192.168.10.1
Destination IP
11000000 10101000 00001010 10110010
192.168.10.178
ICMP 헤더 분석
Type
( 8 bit )
Code
( 8 bit )
Checksum ( 2 byte )
00000101
( 5 : 재지정 )
00000001
00101111 11101110
Identifier ( 2 byte )
Sequence # ( 2 byte )
11000000 10101000
( 5421 )
00001010 01101000
Option & Data


 * ICMP redirect의 변조 패킷 차단(accpet packet 차단)
 - Linux OS에서 ICMP redirect Packet을 차단하는 설정으로 ICMP redirect의 변조된 패킷 차단
 - /proc/sys/net/ipv4/conf/default/accept_redirects 에서 기본 설정 값인 1을 0으로 설정
















댓글 3개:

  1. 궁금한게있습니다!
    최초에 /proc/sys/net/ipv4/conf/default/accept_redirects 값을 0으로 변경해서
    ICMP Redirect 공격을 방어하는가 싶더니 계속해서 공격을 시도하니
    결국 경로가 바뀌면서 공격자가 Sniffing이 가능하더군요...
    이건 무슨 이유일까요??

    답글삭제
  2. 공격자는 Ubuntu Backtrack이고 icmpush 툴로 공격했습니다

    답글삭제
  3. 안녕하세요. 댓글을 늦게 확인하여 지금 이렇게 답변을 드립니다. 저 방법 외에도 아래와 같이 설정하여 한 번 더 공격 시도를 해보시는 걸 추천 드립니다. 상기 결과에 대한 원인 분석은 저도 어렵지만 추가적인 설정으로 공격을 막을 수 있는 지 한 번 확인해보세요 !
    net.ipv4.conf.all.accept_redirects = 0
    net.ipv6.conf.all.accept_redirects = 0

    OR

    net.ipv4.conf.default.accept_redirects = 0
    net.ipv6.conf.default.accept_redirects = 0

    동작 But, 기본 값은 1 이니 두 옵션 모두 0으로 셋팅 후 테스트

    답글삭제