네트워크취약성과대책 #1 : 스니핑(sniffing)공격과 대책 2편
작성자 정보
- 관리자 작성
- 작성일
컨텐츠 정보
- 2,326 조회
- 0 추천
- 목록
본문
스위치 환경에서도 가능한 스니핑 기법
① MAC Flooding(Switch Jamming)
스위치에서는 각각의 포트에 해당하는 IP:MAC 주소 쌍 정보를 기억하고 있는데, 이 메모리에는 어느 정도의 한계치가 있다.
이를테면 Catalyst 2950의 경우 8,000개, 4500 계열의 경우 32,000여개 정도를 기억할 수 있다.
이러한 스위치의 특성을 이용하여 스위치 내부의 한 포트에서 위조된 IP:MAC 정보를 지속적으로 발생시켜 스위치의 ARP 테이블을 가득 차도록(flood)하는 방법인데 실제로 dsniff라는 프로그램에 포함된 macof라는 프로그램을 이용하면 짧은 시간에 수십만 개의 위조된 IP:MAC 주소 쌍 정보(분당 155,000개)를 생성한다.
이렇게 MAC 정보가 flood되면 스위치에 저장된 메모리는 의미가 없으므로 더미 허브처럼 모든 포트에 패킷을 포워딩하게 된다.
보안적인 용어로 이러한 것을 “fail open“이라고 한다.
[root@hacker-lnx dsniff-2.3]# ./macof (분당 155,000개 생성 가능) 101.59.29.36 -> 60.171.137.91 TCP D=55934 S=322 Syn Seq=1210303300 Len=0 Win=512 145.123.46.9 -> 57.11.96.103 TCP D=44686 S=42409 Syn Seq=1106243396 Len=0 Win=52 109.40.136.24 -> 51.158.227.98 TCP D=59038 S=21289 Syn Seq=2039821840 Len=0 Win2 126.121.183.80 -> 151.241.231.59 TCP D=7519 S=34044 Syn Seq=310542747 Len=0 Win2 211.28.168.72 -> 91.247.223.23 TCP D=62807 S=53618 Syn Seq=2084851907 Len=0 Win2 183.159.196.56 -> 133.10.138.87 TCP D=23929 S=51034 Syn Seq=1263121444 Len=0 Wi2 19.113.88.77 -> 16.189.146.61 TCP D=1478 S=56820 Syn Seq=609596358 Len=0 Win=512 237.162.172.114 -> 51.32.8.36 TCP D=38433 S=31784 Syn Seq=410116516 Len=0 Win2 |
[그림] macof 실행 예
아래는 C6509에서 실행한 예인데, 최대 65536개의 mac을 인식할 수 있으며 현재는 1211개의 mac이 지정되어 있다는 것을 알 수 있다.
C6509>sh mac-address-table count
MAC Entries for all vlans :
Dynamic Address Count: 1082
Static Address (User-defined) Count: 129
Total MAC Addresses In Use: 1211
Total MAC Addresses Available: 65536
다시 언급하지만 더미 허브에서는 이러한 MAC 정보를 기억하는 메모리가 없기 때문에 패킷이 들어오면 어떤 포트로 패킷을 포워딩해야 되는지 모르기 때문에 따라서 모든 포트로 포워딩(즉, broadcasting)하는 것이다.
반면 스위치에서는 각 포트별 MAC 정보를 기억하고 있기 때문에 해당하는 패킷에 대해 다른 포트로 패킷을 보내지 않고 지정된 포트로만 패킷을 전송하는 것인데, 이 때문에 콜리전(collision)이 없고 속도도 빠른 것이다.
② ARP Spoofing
ARP 스푸핑(Spoofing)은 같은 VLAN 공간에 있는 두 서버 간 통신을 스니핑 하고자 할 때 사용될 수 있는데, 공격자의 서버가 스니핑 하고자 하는 서버인 것처럼 MAC을 위조한 패킷을 발송함으로써 원하는 패킷을 공격자의 시스템을 거쳐서 전송되도록 하는 것을 말한다.
이를테면 공격자가 A와 B 서버 간 통신을 스니핑 하고자 한다면 A에게는 B의 MAC 주소가 공격자의 MAC이라는 패킷을, B에게는 A의 MAC 주소가 공격자의 MAC인 것처럼 패킷을 전송하면 A와 B간 전송되는 패킷은 모두 공격자에게 전송될 것이다.
이때 A와 B로 향하는 패킷을 받은 공격자는 다시 원래의 목적지로 패킷을 포워딩 한다면 A와 B 서버는 정상적인 데이터 전송이 되므로 패킷이 공격자를 거쳐 간다는 사실을 알 수는 없을 것이다.
공격자의 시스템에서는 패킷을 받아 원래의 시스템으로 포워딩 해 주어야 하므로 커널 파라미터인 net.ipv4.ip_forward이 1로 설정되어 있어야 한다.
이것이 가능한 이유는 IP와 MAC 주소를 변환해 주는 역할을 하는 ARP라는 프로토콜의 인증이 매우 취약하기 때문이다.
③ ARP Redirect
ARP Redirect 역시 ARP 스푸핑과 비슷한 방법인데, 공격자가 마치 게이트웨이인 것처럼 위조된 MAC을 브로드캐스트하여 같은 VLAN에 있는 모든 시스템으로 향하는 트래픽이 자신(공격자)을 통과하게 하는 방법이다.
즉, 각 서버에 설정되어 있는 게이트웨이 주소의 MAC 주소가, 원래 게이트웨이 MAC 주소가 아니라 공격자의 MAC 주소를 브로드캐스트하는 것이다.
그렇게 되면 동일한 VLAN 공간에 있는 서버들은 이 정보를 아무런 의심 없이 받아들여 ARP 캐시 정보를 갱신한 후 게이트웨이로 보내는 모든 패킷을 공격자의 서버로 보내게 되며, 공격자는 모든 패킷을 받아 스니핑한 후 원래의 게이트웨이로 포워딩만 해 주면 되는 것이다.
물론 반대의 경우도 가능하다. 즉, 게이트웨이에게 VLAN 내부에 있는 모든 시스템의 MAC 주소가 공격자의 MAC 주소라고 업데이트를 시도하면 게이트웨이에서는 이 정보를 아무런 의심 없이 받아들여 캐시 정보를 갱신한 후 각 서버로 향하는 모든 패킷은 공격자의 서버로 보내게 되며, 공격자는 모든 패킷을 받은 후 원래의 해당 서버로 포워딩만 해주면 되는 것이다.
[그림] arp redirect 의 구성도
위 그림을 예로 설명해 보자. 만약 mac 주소가 4444.4444.4444인 192.168.1.81 서버가 해킹을 당하였다가 가정해 보자. 이 서버는 동일 네트워크 대역인 192.168.1.x 서버에게 게이트웨이인 192.168.1.1의 mac 주소는 원래의 mac인 0000.rrrr.rrrr이 아닌
4444.4444.4444라는 패킷을 발송하면 내부의 모든 서버는 아무 의심 없이 arp 정보를 업데이트하게 되고 이때 서버에서 arp 정보를 확인하면 다음과 같이 보이게 된다.
# arp -a ? (192.168.1.1) at 44:44:44:44:44:44 [ether] on eth0 |
여기에서 앞의 ?는 192.168.1.1에 대해 reverse lookup을 하였지만 reverse 정보를 찾을 수 없다는 의미이며 eth0 인터페이스를 통해 mac 정보를 받았다는 의미가 된다.
또한 동시에 게이트웨이인 192.168.1.1에게 192.168.1.x 대역의 모든 mac 주소가 4444.4444.4444.4444 라는 패킷을 발송하면 게이트웨이 역시 아무 의심 없이 mac 정보를 업데이트하게 된다.
왜냐하면 arp 에는 인증이라는 자체가 아예 없기 때문이다.
이때 게이트웨이에서 arp 정보를 확인하기 위해 아래와 같이 실행해 보면 모든 대역의 mac이 변경된 것을 알 수 있다.
c6509> show arp | inc 192.168.1. 192.168.1.82 4444.4444.4444 192.168.1.81 4444.4444.4444 192.168.1.83 4444.4444.4444 ...... |
만약 공격자가 게이트웨이인 192.168.1.254에 대해서도 192.168.1.254의 mac 주소를 변조하려고 시도하였다면 장비에는 아래와 같은 메시지가 보이게 된다.
물론 스위치 입장에서 192.168.1.254는 자기 자신이므로 변경될 수는 없다.
c6509> show logging Jan 19 21:24:43.284 KST: %IP-4-DUPADDR: Duplicate address 192.168.1.254 on GigabitEthernet5/0, sourced by 4444.4444.4444 |
이제 내부에서 외부로 나가는 트래픽은 모두 MAC주소가 4444.4444.4444인 192.168.1.81을 거쳐 원래의 게이트웨이로 가게 되고, 외부에서 내부로 들어오는 트래픽도 192.168.1.81을 거쳐서 원래의 서버로 가게 된다.
이제 공격자는 자신에게 오는 패킷에 대해 dsniff와 같은 스니핑 프로그램을 이용하여 스니핑을 하고 fragrouter와 같은 프로그램을 이용, 원래의 목적지 서버로 포워딩만 해 주면 된다.
이때 중간에서 스니핑을 하는 서버의 트래픽을 모니터링하면 동일 Vlan의 트래픽이 이 서버를 거쳐 가게 되므로 아래와 같이 트래픽이 급증한 것을 알 수 있다.
그런데 만약 공격자가 mac만 변조하였을 뿐 패킷을 제대로 포워딩하지 않으면 모든 접근이 차단되어 네트워크 장애가 발생하게 된다.
[그림] 스니핑 발생시 트래픽 그래프
앞에서 설명한 스니핑 공격 방식은 여러 프로그램을 이용하면 리눅스에서도 어렵지 않게 구현 가능하지만, 윈도우 서버를 해킹한 후 윈도우 기반의 스니핑 프로그램을 이용하는 경우도 자주 보여 지고 있다.
왜냐하면 굳이 복잡한 절차 없이 단지 마우스 클릭 몇 번만으로 모든 과정을 자동 실행해주기 때문이다.
대표적인 예는 바로 cain & abel(카인과 아벨)이라는 프로그램으로 아래는 실제 실행화면을 보여주고 있는데, 프로그램의 홈페이지인 http://www.oxid.it/ 에는 계속적인 기능보강으로 새로운 버전이 계속 공개되고 있으며 프로그램을 100% 활용하는 방안에 대해 UCC 등으로 제작되어 공개되어지고 있어 스크립트키드들에 의해 광범위하게 사용되고 있다.
[그림] 카인&아벨 실행 시 화면
arp spoofing 및 arp redirect에 대한 대책에 대해서는 뒤에서 살펴보기로 하자.
일부 문서에서는 arp spoofing 과 arp redirect를 별도로 구분하지 않고 둘 다 arp spoofing 이라고 표현하고 있다.
|
④ MAC Duplicating
만약 B 서버에서 A 서버의 트래픽을 스니핑 하고자 할 때 B 서버에서 A 서버의 MAC 주소와 같은 MAC 정보로 설정하는 방법이 바로 “MAC Duplicating”이다.
이러할 경우 스위치를 혼란시켜 두 포트 모두 같은 MAC 주소를 가진 것처럼 인식하게 되며 스위치는 A 서버로 보낼 트래픽을 A와 B 모두에게 발송하게 되는 것이다.
데이터는 두 포트 모두에게 보내어지므로 B 서버에서는 굳이 IP 포워딩을 설정할 필요가 없다.
➄ icmp redirect를 이용
공격자 시스템에서 icmp redirect를 이용하여 스니핑 하고자 하는 원격지 시스템의 라우팅 테이블, 좀 더 정확하게 이야기하면 route -C를 실행 시 보이는 라우팅캐시를 위조하여 특정 IP로 가려고 할 경우 공격자의 시스템을 강제로 거쳐가도록 하고자 할 때 사용된다.
단, arp spoofing이나 redirect의 경우 모든 트래픽에 대한 제어가 가능하지만 icmp redirect의 경우 특정한 목적지 주소에 대해서만 redirect한다는 차이점이 있다.
icmp redirect의 악용을 막기 위해 리눅스의 경우
“net.ipv4.conf.eth0.accept_redirects=0”으로 설정하거나 라우터에서는 "no ip redirects"를 실행하면 되는데 공격코드는 icmp_redir.c 로 검색하면 바로 다운로드 가능하다.
????[유용한 팁]
궁극적으로 icmp redirect를 제외하고 이러한 문제가 발생하는 것은 LAN 구간에서의 기본적인 프로토콜인 arp가 쉽게 위조 가능하고 또 이러한 위조된 패킷을 별도의 인증절차 없이 받아들인다는 점에 기인하고 있다.
|
[MAC 주소 변경방법]
원래 MAC 주소는 공장에서 랜 카드가 생산될 때 하드웨어적으로 유일하게 지정되어 있지만 이를 소프트웨어적으로 변경할 수 있다.
리눅스 및 윈도우에서의 방법이 서로 다른데, 각각에 대해 간단히 살펴보자.
벤더별 MAC 주소 : http://www.iana.org/assignments/ethernet-numbers
벤더별 MAC 주소 조회 : http://www.coffer.com/mac_find/
[그림] 벤더별 MAC 조회 사이트
[리눅스에서의 MAC 주소 변환]
리눅스에서 MAC 주소는 ifconfig를 실행하면 확인 가능한데, ifconfig -a와 같이 -a 옵션을 주면 down된 interface를 포함한 모든 인터페이스 정보를 보여준다. 만약 MAC 주소를 소프트웨어적으로 수정하려면 ifconfig만으로 할 수 있지만 별도의 프로그램을 이용할 경우 편하게 이용할 수 있다.
① macchanger를 이용하는 방법
macchanger는 이름에서도 알 수 있듯이 MAC 정보를 변경할 수 있는 프로그램으로 아래 URL에서 다운로드할 수 있다.
http://www.alobbs.com/macchanger
그리고 관련 파일을 다운로드하여 압축 해제 후 해제한 디렉토리에서 다음과 같이 설치하면 된다.
[root@server macchanger-1.x.0]#./configure; make; make install |
이후 macchanger --help를 실행하면 다음과 같이 사용할 수 있는 옵션을 확인할 수 있다.
[root@server macchanger-1.x.0]# macchanger --help MAC Changer Usage: macchanger [options] device
-h, --help help 화면을 보여준다. -V, --version 버전정보를 보여준다. -s, --show MAC address 정보를 보여준다. -e, --endding 벤더의 bytes를 변경하지 않는다. -a, --another 같은 종류의 랜덤한 벤더의 맥을 지정한다.
-A 어떠한 경우에도 랜덤한 벤더의 MAC 정보를 지정한다.
-r, --random 완전히 랜덤한 MAC 정보를 설정한다.
-l, --list[=keyword] 알려진 벤더 정보를 보여준다. -m, --mac=XX:XX:XX:XX:XX:XX MAC주소를 XX:XX:XX:XX:XX:XX으로 설정한다.
|
만약 eth1을 변경하고자 할 경우 먼저 "ifconfig eth1"을 실행하거나 다음과 같이 -s 옵션을 주어 실행하면 현재의 MAC 정보를 확인할 수 있다.
[root@server macchanger-1.x.0]# macchanger -s eth1 Current MAC: fb:c8:19:d5:34:17 (unknown) |
만약 random의 의미인 -r을 주면 다음과 같이 임의의 MAC 주소로 변환된다.
[root@server macchanger-1.x.0]# macchanger -r eth1 Current MAC: fb:c8:19:d5:34:17 (unknown) Faked MAC: 44:16:71:c1:05:68 (unknown) |
다음과 같이 -m 옵션 후 임의의 MAC 주소를 지정하면 해당하는 MAC 주소로 변경된다.
[root@server macchanger-1.x.0]# macchanger -m 11:11:11:11:11:11 eth1 Current MAC: 44:16:71:c1:05:68 (unknown) Faked MAC: 11:11:11:11:11:11 (unknown) |
[윈도우 2000 / 2003에서의 MAC 주소 변환]
윈도우 계열에서는 레지스트리(registry)에서 수정하는 방법도 있지만 주로 다음과 같은 방법이 사용된다.
① 네트워크 설정에서 변경하는 방법
바탕화면에 있는 “네트워크 환경”에서 우측 마우스를 클릭 후 -> “로컬영역연결”을 클릭 -> “등록정보” 선택 -> “구성” 선택 -> “고급” 선택 -> “Network Address”를 선택한다.
이때 화면을 보면 우측에 현재의 MAC 주소 값이 나오는데, 이 값을 적절히 변경 후 PC를 재 부팅하거나 네트워크를 ‘사용안함’을 하여 연결을 끊은 후 ‘사용함’으로 재가동하면 된다.
[그림] 윈도우에서 MAC 주소 변경
② SMAC를 이용하는 방법
전용 프로그램인 SMAC을 이용하는 방법도 있다.
이 프로그램은 http://www.klcconsulting.net/smac 사이트에서 다운로드 가능하며, 설치 후 실행하면 다음과 같은 화면이 보이게 된다.
[그림] SMAC를 이용하는 방법
여기에서 현재의 MAC 주소가 기본적으로 입력되어 있는데, 이 값을 원하는 MAC주소로 변경 한 후 Update MAC을 클릭하고 PC를 재부팅하거나 네트워크를 ‘사용 안함’을 하여 연결을 끊은 후 ‘사용함’으로 재가동 하면 된다.
이후 변경 설정한 내용대로 실제 MAC 주소가 변경되었는지 확인하기 위해서는 아래와 같이 command 창에서 ipconfig /all을 실행하면 된다.
노파심에 언급하지만 인터페이스 상태를 보는 명령어는 리눅스의 경우 ifconfig, 윈도우는 ipconfig이다.
[그림] ipconfig /all 실행 화면
관련자료
-
이전
-
다음