네트워크취약성과대책 #1 : 스니핑(sniffing)공격과 대책 3편(스니핑차단방법)
작성자 정보
- 관리자 작성
- 작성일
컨텐츠 정보
- 3,041 조회
- 0 추천
- 목록
본문
스니핑 차단 방법
이제 스위치 환경도 결코 스니핑에 안전하지 않다는 사실을 알았을 것이다.
그렇다면 스위치 또는 더미 허브 환경에서 스니핑을 차단하기 위해 어떻게 보안 설정을 할 수 있을까? 필자는 아래의 몇 가지 방법을 대안으로 제시하고자 한다.
① 시스템 보안을 강화한다.
스니핑은 root가 아닌 일반 유저 권한으로는 실행할 수 없고, 오직 root 또는 관리자 권한으로만 실행할 수 있으므로 누군가가 스니핑을 실행하였다면 이미 root 권한을 빼앗긴 것이라 할 수 있다.
따라서 너무나 당연한 이야기이지만 시스템 관리자 권한을 빼앗기지 않도록 주의하여야 한다.
물론 IDC와 같이 동일 네트워크에 여러 관리자가 있을 경우에는 자신의 서버만 보안을 신경 쓴다고 해결될 수는 없다는 한계가 있을 것이다.
② VLAN을 이용한다.
앞에서 언급한 것처럼 스니핑은 arp의 취약성을 이용한 것이고, arp는 동일 VLAN내에서만 의미가 있으므로 VLAN을 작게 나누어 관리하는 것이 좋다. 만약 1개의 VLAN으로 전체를 하나의 네트워크로 구성한다면 그만큼 스니핑이 될 수 있는 범위가 넓어질 것이다.
따라서 운영되는 서비스의 특성에 따라 또는 IP 범위에 따라 여러 개의 VLAN으로 작게 나누어 관리하는 것이 보안적인 측면뿐만 아니라 브로드캐스트 도메인을 줄여주기 때문에 성능(performance)의 관점에서도 권장되는 방법이다.
어떤 관리자는 동일한 스위치에 연결되어 있는 시스템에 대해서만 또는 동일한 넷마스크(netmask)에 연결된 시스템에 대해서만 스니핑이 가능하다고 알고 있는데, 이번 기회에 그렇지 않다는 것을 분명히 알기 바란다.
③ IP Flitering을 설정한다.
일부 스위치에서 제공하는 기능 중 IP와 MAC 주소를 고정하여 설정하는 “IP Filtering” 기능을 사용함으로써 각각의 포트에서 오가는 트래픽을 필터링할 수 있다.
따라서 이 기능을 이용하면 IP나 MAC 주소를 위조하는 트래픽은 차단 가능하지만 실제로 모든 스위치에서 이 기능을 제공하는 것은 아니며 실제 제공된다 하더라도 매번 포트나 MAC 정보가 바뀔 때마다 수작업으로 설정해 주어야 하므로 많은 수고가 따르게 된다.
④ Port security를 설정한다.
만약 스위치에서 port security 기능을 지원할 경우 MAC Flood나 MAC 스푸핑을 예방하거나 피해를 최소화 할 수 있는 방법으로서 스위치 내 각각의 포트에 물리적인 MAC 주소를 정적(Static)으로 설정하는 것이다.
각종 ARP 기반의 스니핑 공격에 그나마 대응할 수 있는 방법이라고 할 수 있는데 이러한 port security에 대해 좀 더 자세히 알아보자.
port security는 CatOS 뿐만 아니라 IOS에서도 제공하는 기능으로, 스위치의 각 포트별로 MAC 주소를 static하게 설정하여 설정된 MAC 주소만 해당 포트를 통해 통신을 허용하거나 반대로 필터링하고자 할 때 사용할 수 있다.
이 기능을 이용할 경우 스위치 환경에서 ARP를 위조하여 스니핑 하거나 네트워크를 다운시키는 서비스거부(DoS)와 같은 형태의 공격을 차단하는데 효과적인데, 특히 첫 번째로 살펴본 MAC Flooding에 대한 근본적인 대응방법이라 할 수 있다.
port security를 이용하면 다음과 같은 기능을 구현할 수 있다.
① 스위치의 각 포트별로 허용된 MAC주소를 지정할 수 있다.
② 특정한 MAC주소를 가진 트래픽을 스위치에서 차단할 수 있다.
③ 각 포트별로 허용 가능한 MAC수를 지정하여 이 수치를 초과할 경우 초과된 MAC 주소는 더 이상 통신이 되지 않도록 차단 설정하거나 해당 포트를 아예 일정 시간 동안 또는 영원히 shutdown 하도록 설정할 수 있다.
CatOS와 IOS의 명령어는 비슷한데, 먼저 CatOS 기반의 스위치에서의 설정 방법에 대해 알아보자.
CatOS> (enable) set port security 3/1 enable |
→ 기본적으로 port security는 disable되어 있는데, 위 명령어는 3/1 포트에 port security 설정을 enable하는 것을 보여준다. 여기에서 (enable)은 현재 enable 모드라는 의미의 프롬프트이므로 입력하는 명령어가 아니다. 즉 set부터 입력하면 된다.
CatOS> (enable) set port security 3/1 enable 01-02-03-04-05-06 |
→ 이는 3/1 포트에 특정 MAC을 수작업으로 지정해 주는 명령어이다.
위와 같이 설정하면 3/1 포트에는 위의 MAC 외에 다른 MAC 주소는 통신할 수 없게 된다.
이때 여기에서 지정한 MAC 주소를 secure mac 주소라 한다.
CatOS> (enable) set port security 3/2 enable maximum 5 violation shutdown 60 |
→ 이는 3/2 포트에 대해 최대 5개까지의 MAC 주소만이 사용될 수 있도록 하고, 만약 보안 설정을 위배(violation)하여 MAC 주소가 초과되는 경우 해당 포트 전체는 60분 동안 다운(shutdown)되도록 한다.
만약 포트에 연결되어 있는 하위 스위치에 최대 5대의 서버만 설치된다면 최대 5개의 MAC만 인식하면 될 것이다.
그리고 별도로 시간을 지정하지 않을 경우에는 port security를 해제하기 전까지 영원히 다운되도록 하는 것이며, port security 정책을 위배하면 다음과 같은 로그가 발생한다.
2008 May 03 15:40:32 %SECURITY-1-PORTSHUTDOWN: Port 3/2 shutdown due to no space |
또한 포트 내 모든 통신이 다운되는 shutdown 대신 다음과 같이 restrict를 설정하였을 경우에는 스위치의 해당 포트에서 인식된 5개까지의 MAC은 secure mac으로 통신이 가능하지만 5개를 초과한 이후의 MAC은 통신이 되지 않게 된다.
CatOS> (enable)set port security 3/2 enable maximum 5 violation restrict Port security violation on port 3/2 will cause insecure packets to be dropped. CatOS> (enable) |
MAC 개수가 초과되었을 경우 다음과 같은 에러 메시지가 보이게 된다.
2007 Dec 29 13:06:41 KST +00:00 %SYS-4-P2_WARN: 1/Host 45:00:05:dc:8e:e8 access denied on port 3/2 |
따라서 해당 스위치 포트에 연결된 허브 또는 스위치를 통해 5대의 서버 장비가 연결되어 있다면 maximum을 6(서버5 + 스위치1)로 설정해 두면 6개의 MAC만 인식되고, 이후 스위치에 연결하는 다른 서버나 장비는 통신이 되지 않게 된다.
물론 내부의 한 서버에서 MAC 주소를 위조하여 스위치를 통해 통신하고자 할 경우에도 이미 최대 허용 MAC 개수가 초과하였으므로 차단될 것이다.
다음으로 IOS 기반의 스위치에서 설정하는 방법에 대해서도 간단히 알아보자.
Switch# conf t Switch(config)# interface fastethernet 3/1 Switch(config-if)# switchport port-security maximum 5 |
-> 이는 fastethernet 3/1 인터페이스에 대해 최대 5개까지의 MAC 주소만이 사용될 수 있도록 제한하는 설정이다.
Switch(config-if)# switchport port-security mac-address 0102.0304.0506 |
-> 이는 해당 인터페이스(포트)에 특정 MAC을 수작업으로 지정해 주는 명령어이다.
Switch(config-if)# switchport port-security violation |
-> 만약 보안 설정을 위배(violation)하여 MAC 주소가 초과되는 경우 조처 방법인데, 이는 protect, restrict, shutdown 이렇게 3가지가 올 수 있다.
Switch(config)# mac-address-table static 4444.4444.4444 vlan 1 drop |
-> 특정한 MAC 주소를 포함한 트래픽을 필터링하도록 한다.
뒷부분의 1은 vlan 번호를 뜻한다.
port security 설정 후 CatOS의 경우 다음과 같이 “show port security”를, IOS의 경우 “show port-security”를 실행하면 현재 설정된 상태를 살펴볼 수 있는데, 결과는 비슷하므로 CatOS의 경우를 알아보도록 하자.
아래 결과에서 enabled는 해당 포트에 port security가 설정되었다는 의미이며 Violation 부분이 restrict로 설정되어 있는 것을 알 수 있다.
만약 shutdown으로 설정하였다면 restrict 대신 shutdown으로 보일 것이다.
그리고 Max-Addr는 각 포트별로 인식 가능한 MAC 주소의 최대값으로, 앞에서 maximum으로 설정한 값을 의미한다.
CatOS> show port security Port Security Violation Shutdown-Time Age-Time Max-Addr Trap IfIndex ----- -------- --------- ------------- -------- --------------- --- 2/1 enabled restrict 0 0 5 disabled 115 2/2 enabled restrict 0 0 10 disabled 116 2/3 enabled restrict 0 0 10 disabled 117 2/4 enabled restrict 0 0 20 disabled 118 2/5 enabled restrict 0 0 40 disabled 119 |
port security 설정 후 다음과 같이 config를 보면 secure mac 주소가 아예 룰에 직접 설정한 것처럼 보이는 것을 알 수 있다.
CatOS> (enable) show config
set port security 3/1 00-50-8b-9a-2c-af set port security 3/1 00-04-75-96-e3-1f set port security 3/1 00-d0-b7-9a-2c-d8 set port security 3/1 00-50-8b-9a-33-d9 set port security 3/1 00-50-da-8e-6d-9d set port security 3/1 00-07-e9-05-5a-e7 set port security 3/1 00-50-8b-9a-36-e6 ...... |
이 상태에서 포트에 설정되어 있는 secure mac을 삭제하려면 clear 명령어로 삭제할 수 있는데, 아래는 3/1 포트에 있는 00-07-e9-05-5a-e7 MAC을 삭제하는 예를 보여주고 있다.
CatOS> (enable) clear port security 3/1 00-07-e9-05-5a-e7 |
만약 3/1부터 3/3까지 모든 MAC 주소를 삭제하려면 다음과 같이 실행하면 된다.
CatOS> (enable) clear port security 3/1-3 all |
이후 port security 기능을 해제하려면 다음과 같이 특정 포트에 대해 disable하면 된다.
CatOS> (enable) set port security 3/1 disable |
이후 상태를 확인하기 위해 “show port security”를 실행하면 다음과 같이 Security 부분이 disabled되어 있는 것을 알 수 있다.
CatOS> (enable) show port security 3/1 Port Security Violation Shutdown-Time Age-Time Max-Addr Trap IfIndex ----- -------- --------- ------------- -------- -------- -------- 3/1 disabled restrict 0 0 30 disabled 57
Port Num-Addr Secure-Src-Addr Age-Left Last-Src-Addr Shutdown/Time-Left ----- -------- ----------------- -------- ----------------- --- 3/1 0 - - - - - |
아래 명령어를 통해 특정 모듈(아래의 경우 3번 모듈)의 port security 상태를 확인할 수 있다.
CatOS> (enable) show port security statistics 3 Port Total-Addrs Maximum-Addrs ----- ----------- ------------- 3/1 10 30 3/2 15 30 3/3 17 30 3/4 1 1 3/5 25 30
Module 3: Total ports: 5 Total secure ports: 68 Total MAC addresses: 121 Total global address space used (out of 1024): 121 Status: installed |
지금까지 살펴본 특정 MAC 주소만을 허용하는 port security와는 반대로 "set cam" 명령어를 이용하여 특정 MAC 주소에 대해 필터링 할 수 있다.
모니터링 과정에서 수상한 MAC 주소가 확인될 경우에는 이 방법으로 필터링하면 유용할 것이다.
CatOS> (enable) set cam static filter 00-02-03-04-05-06 1 |
→ 소스에 특정한 MAC 주소를 포함한 트래픽을 필터링하도록 한다.
마지막의 1은 vlan 번호를 뜻한다.
CatOS> (enable) clear cam 00-02-03-04-05-06 1 |
→ 필터링을 해제하려면 clear 명령어를 이용하면 된다.
역시 마지막의 1은 vlan 번호이다.
스니핑과는 직접적인 관계는 없지만 추가적으로 아래의 명령어를 이용하면 특정 포트의 브로드캐스트 트래픽을 %로 제한하도록 하여 broadcast storm을 방지할 수도 있다.
CatOS> (enable) set port broadcast <mod/port> 0.01% |
➄ arp redirect(spoofing) 공격 시 대응방법
앞에서 살펴본 port security는 실질적으로 switch jamming 공격에 대한 대응방법이라고 할 수 있다.
그렇다면 자주 발생하면서 큰 피해를 유발할 수 있는 arp redirect(spoofing)에 대해서는 어떻게 대응하여야 하는지 살펴보도록 하자.
먼저 arp spoofing이 발생하면 vlan내 모든 서버의 mac 주소가 변조되므로 아래와 같은 현상이 발생하게 된다.
만약 192.168.1.x 대역에서 arp spoofing이 발생하였다면 아래와 같이 보이게 된다.
Cisco> sh arp | inc 192.168.1.
또는
Cisco> sh arp | inc 4444.4444.4444
Protocol Address Age (min) Hardware Addr Type Interface
Internet 192.168.1.82 80 4444.4444.4444 ARPA Vlan35
Internet 192.168.1.90 32 4444.4444.4444 ARPA Vlan35
Internet 192.168.1.75 32 4444.4444.4444 ARPA Vlan35
Internet 192.168.1.74 32 4444.4444.4444 ARPA Vlan35
Internet 192.168.1.106 32 4444.4444.4444 ARPA Vlan35
Internet 192.168.1.21 32 4444.4444.4444 ARPA Vlan35
Internet 192.168.1.20 32 4444.4444.4444 ARPA Vlan35
.....
여기에서 Age(min)은 이 장비(L3스위치)에서 해당 ip에 대한 mac 주소를 캐싱한 후 소요된 시각을 의미하며 벤더에 따라 다르지만 통상적으로 최대 4시간(480분)까지 저장한 후 업데이트하게 된다.
또한 해당 ip들은 Vlan35에 해당하는 것을 알 수 있다.
위의 결과를 보면, 해당 대역내의 모든 mac 주소가 4444.4444.4444라는 동일한 정보로 변경이 되는 것을 확인할 수 있다.
그렇다면 이 정보를 가지고 어떻게 공격자를 찾을 수 있을까? 두 가지 방법으로 유추할 수 있다.
첫 번째는, 현재 모든 mac 정보가 4444.4444.4444로 변경되었으므로 원래 4444.4444.4444라는 mac 주소를 가지고 있던 서버가 공격자일 가능성이 높을 것이다.
그러나 사전에 ip/mac 주소 쌍을 저장해 두지 않았다면 찾기 어렵게 된다.
만약 아래와 같은 방법으로 정기적으로 ip/mac 정보를 저장하고 있었다면 arp spoofing이 발생하기 전 파일을 검색하여 의심이 되고 있는 4444.4444.4444인 mac을 사용하고 있었던 서버의 ip를 찾으면 된다.
필자의 경우 아래 스크립트를 정기적으로(매 5분마다) 실행하여 한 mac 에 복수개의 ip 주소가 할당될 경우 메일로 알람 하도록 관리하고 있다.
참고로 필자는 프로그래머가 아니므로 프로그램이 조잡할 수 있음을 양해 바란다. 아래 프로그램의 원리는 간단한데, snmpwalk로 L3스위치의 mac 정보를 받아 파일에 저장하고 한 mac 주소에 여러 ip가 할당되었을 경우 알람 하는 것이다.
------------------------------------------------------------------ #!/usr/bin/perl
$DAT = `date +%Y%m%d%H%M`; $TO_MAIL = 'antihong@server.com'; $SUBJECT = "[경고] MAC 이상 확인"; $MAIL_PROGRAM = "/usr/sbin/sendmail"; $DIR = "/root/mac_save2/";
`snmpwalk 192.168.1.254 public .1.3.6.1.2.1.3.1.1.2 > $DIR/6509_$DAT`; `find . -name \"6509_*\" -mtime +3 -exec rm -fv {} \\;`;
chop($DAT);
`cat 6509_$DAT | cut -d '\.' -f7\,8\,9\,10 | sed -e 's\/OCTET STRING: Hex:\/\/g' | awk -F \"\=\" '\{print \$2}' | uniq -d > $DIR/tmp/uniq.txt`;
`diff $DIR/tmp/origin.txt $DIR/tmp/uniq.txt | grep \">\" | cut -c 5-21 > $DIR/tmp/dif.txt`; $dif = `cat $DIR/tmp/dif.txt`; chop($dif);
$list_num = `cat $DIR/tmp/dif.txt | wc -l| cut -c 7`; chop($list_num);
if ($list_num == 1 ){ $mac_list = `cat 6509_$DAT | grep "$dif"`; open(MAIL, "|$MAIL_PROGRAM -t"); print MAIL "To: $TO_MAIL \n"; print MAIL "Subject: $SUBJECT \n\n"; print MAIL "다음 mac은 2개 이상 IP로 설정된 mac입니다..\n"; print MAIL "MAC 변조시도 여부를 점검하시기 바랍니다..\n\n\n"; print MAIL "정상이면 /root/mac_save2/tmp 디렉토리에서 \n"; print MAIL "cp uniq.txt origin.txt를 실행해 주세요.\n\n"; print MAIL "$dif 으로 설정된 서버목록 \n\n"; print MAIL "$mac_list \n\n"; close(MAIL); } if (($list_num) && ($list_num != 1 )){ open(MAIL, "|$MAIL_PROGRAM -t"); print MAIL "To: $TO_MAIL \n"; print MAIL "Subject: $SUBJECT \n\n"; print MAIL "다음 mac은 2개 이상 IP로 설정된 mac입니다..\n"; print MAIL "MAC 변조시도 여부를 점검하시기 바랍니다..\n\n\n"; print MAIL "정상이면 /root/mac_save2/tmp 디렉토리에서 \n"; print MAIL "cp uniq.txt origin.txt를 실행해 주세요.\n\n"; print MAIL "점검해야할 mac 주소 :\n\n $dif \n\n"; close(MAIL); } ------------------------------------------------------------------ 참고로, snmpwalk를 실행하면 다음과 같이 보이게 된다.
# snmpwalk 192.168.1.254 public .1.3.6.1.2.1.3.1.1.2 at.atTable.atEntry.atPhysAddress.215.1.192.168.1.103 = OCTET STRING: Hex: 00 20 ED 20 4E F6 at.atTable.atEntry.atPhysAddress.215.1.192.168.1.104 = OCTET STRING: Hex: 00 00 0C 92 58 3C at.atTable.atEntry.atPhysAddress.215.1.192.168.1.106 = OCTET STRING: Hex: 00 0C 76 81 20 62 at.atTable.atEntry.atPhysAddress.215.1.192.168.1.109 = OCTET STRING: Hex: 00 02 B3 E9 45 F0 at.atTable.atEntry.atPhysAddress.215.1.192.168.1.110 = OCTET STRING: Hex: 00 0E 0C EA AC 8E at.atTable.atEntry.atPhysAddress.215.1.192.168.1.111 = OCTET STRING: Hex: 00 D0 68 13 88 07 at.atTable.atEntry.atPhysAddress.215.1.192.168.1.113 = OCTET STRING: Hex: 00 07 E9 23 F5 41 at.atTable.atEntry.atPhysAddress.215.1.192.168.1.114 = OCTET STRING: Hex: 00 E0 81 5C F2 B8 at.atTable.atEntry.atPhysAddress.215.1.192.168.1.115 = OCTET STRING: Hex: 00 07 E9 25 01 C7
그렇다면 위와 같이 .1.3.6.1.2.1.3.1.1.2와 같은 OID 정보는 어떻게 확인할 수 있을까? 다음과 같이 http://tools.cisco.com/Support/SNMP/do/BrowseOID.do?local=en 에 접속하여 내가 원하는 정보를 질의하면 바로 OID 값을 알 수 있다.
[그림] OID값 질의 화면
위의 사이트에서 질의해 보면 OID값은 1.3.6.1.2.1.3.1.1.2 임을 알 수 있다.
따라서 같은 방법으로 특정 OID값만 알면 장비의 온도등도 측정이 가능하며 mrtg를 이용하면 실시간으로 변동 상황도 파악이 가능하게 된다.
그리고 origin.txt 파일에는 lvs와 같이 정상적으로 한 인터페이스에 여러 ip를 할당하는 서버가 있으면 그 서버의 mac 정보를 저장해 두면 된다.
00 10 DB 8D A5 07 00 15 40 FD CE 0E 00 14 22 16 30 43 00 0C 76 82 7E EA 00 0C 76 82 81 AE |
두 번째는 Age (min) 부분을 보는 것이다.
위 결과에서는 첫 번째 보이는 192.168.1.82만이 Age가 80분이며 다른 ip들은 모두 32분인 것을 알 수 있는데, 이 정보를 기초로 원래 4444.4444.4444 mac을 가진 서버는 192.168.1.82이며 이 서버에서 32분전에 arp spoofing을 실행하여 모두 동일한 mac aging 타임을 보여주고 있는 것을 알 수 있다.
이는 여러 여건에 따라 달라질 수 있으므로 참고만 하기 바란다.
이제 위의 정보를 기초로 192.168.1.82가 의심된다는 것을 알았다. 그 다음에는 어떤 단계로 처리하여야 할까?
다음과 같이 공격자가 장악한 192.168.1.82 서버에서 즉시 랜케이블을 뽑아 네트워크를 차단하도록 한다.
동시에 arp spoofing을 통해 arp-cache 및 mac-address-table 정보가 모두 변조되었으므로 게이트웨이(L3스위치)에서 이 정보를 모두 clear하여야 한다.
여기에서 arp-cache와 mac-address-table의 차이는 아래와 같으며 clear한다고 해서 네트워크가 끊기거나 하는 등의 문제는 없다.
분류 | arp-cache | mac-address-table |
실행 결과 | # show arp Address Age (min) Hardware Interface 192.168.1.89 179 0013.d3bc.14fa Vlan35 |
# show mac-address-table vlan macaddress learnage ports 35 001a.8fe8.6001 5 Gi3/30
|
저장하는 정보 | ip / againg time / mac / vlan | vlan / mac / aging time / port |
저장 기간 | 4시간 | 300분 |
Cisco# clear arp-cache interface vlan 35
Cisco# clear mac-address-table dynamic vlan 35
위와 같이 실행 후
Cisco# show arp | inc 192.168.1.을 실행해 보면 비로써 정상적으로 각 ip별 mac 주소가 모두 다르게 보이는 것을 알 수 있다.
만약 위의 명령어를 enable모드가 아닌 일반 virtual 모드에서도 사용 가능하도록 허용하려면 아래와 같이 지정해 주면 된다.
privilege exec level 1 clear mac-address-table dynamic vlan privilege exec level 1 clear arp-cache interface vlan
|
이제, arp spoofing에 대해 처리가 어렵지 않다는 것을 알 수 있을 것이다.
그러나 안타깝게도 예외상황이 있다.
바로 공격자가 장악한 서버의 실제 mac이 아닌 0011.2233.4455 와 같이 존재하지 않는 mac으로 공격하는 경우가 바로 그것이다.
실제로 cain & abel이라는 프로그램을 보면 아래와 같이 위조된 mac을 설정할 수 있는 옵션이 있음을 알 수 있다.
[그림] cain & abel 프로그램 설정예
이러한 경우 “show arp”를 실행하면 아래와 같이 보이게 되고 관리자 입장에서는 어떻게 하여야 할지 막막하게 된다.
Internet 172.16.0.231 0 0011.2233.4455 ARPA Vlan37
Internet 172.16.0.238 0 0011.2233.4455 ARPA Vlan37
Internet 172.16.0.239 0 0011.2233.4455 ARPA Vlan37
Internet 172.16.0.236 0 0011.2233.4455 ARPA Vlan37
Internet 172.16.0.237 0 0011.2233.4455 ARPA Vlan37
Internet 172.16.0.234 0 0011.2233.4455 ARPA Vlan37
Internet 172.16.0.235 0 0011.2233.4455 ARPA Vlan37
이러한 경우 명확한 해답을 줄 수 있는 명령어가 바로 mac-address-table 이다.
cisco # show mac-address-table | inc 0011.2233.4455
* 37 0011.2233.4455 Gi3/31
위의 명령어를 통해 변조된 mac인 0011.2233.4455은 3/31 포트에서 올라온 것을 알 수 있다.
따라서 3/31에 연결된 서버가 mac을 위조하여 공격한 것임을 알 수 있으며 만약 3/31이 서버가 아니라 스위치가 연결되어 있고 하단에 서버가 있다면 3/31에 연결된 스위치에서 다시 이 mac주소를 찾아야 한다.
또한, 의심이 가는 mac 주소에 대해서는 아예 아래와 같이 필터링할 수도 있다.
# mac-address-table static 0011.2233.4455 vlan 35 drop
arp spoofing을 통해 보일 수 있는 또 하나의 현상은 웹사이트 등에 접속 시 iframe이 교묘하게 삽입되는 경우이다.
만약 어떤 사이트에 접속하든 같은 사무실내 모든 유저들이 동일한 현상이 보인다면 접속자(클라이언트)의 네트워크가 arp spoofing을 당한 것이고, 반대로 특정 서버에 접속시 iframe이 삽입된다면 서버가 속한 네트워크가 arp spoofing을 당한 것이라 할 수 있다.
이를테면 공격자가 장악한 192.168.1.81에서 아래와 같이 실행하게 되면 동일 vlan 네트워크에 웹 접속을 하게 되면 모든 html에 아래의 iframe이 강제로 삽입되게 된다.
* 공격자가 실행한 명령 예 : spoof.exe 192.168.1.1 192.168.1.81 80 0 1 /r iframe.txt
* iframe.txt의 내용 : <iframe src=http://example.com/iframe.htm height=0></iframe>
이러한 경우 arp spoofing을 이용한 것이므로 처리 방법은 앞에서 살펴본 바와 동일하다.
지금까지는 arp spoofing을 당했을 때 처리방법에 대해 살펴보았는데, 공격에 당하지 않도록 사전에 대처할 수 있는 방법은 없을까 고민할 수 있다.
먼저, 첫 번째로 스위치 및 각 서버에서 arp 정보를 static하게 save하는 방법을 고민할 수 있다.
원래 arp 정보는 dynamic하게 정보를 얻어오고 aging time이 종료되면 다시 갱신하는 것이 정상인데, 공격에 의해 쉽게 변조가 되므로 아래와 같이 게이트웨이에서는 내부의 모든 서버에 대한 arp 정보를 save하고, 반대로 각 서버에서는 게이트웨이의 arp 정보를 save하도록 하는 것이다.
save된 정보는 가장 우선순위가 높아 spoofing등에 의해 변경되지 않기 때문이다.
# cisco 스위치에서의 저장 예
cisco# arp 192.168.1.53 0000.f073.20f2 ARPA
# 각 서버에서의 저장 예
linux# arp –s 192.168.1.254 00:0B:6A:46:25:D0
windows> arp –s 192.168.1.254 00-0B-6A-46-25-D0
그러나 이 방법은 소규모의 경우라면 관계없지만 관리서버가 많은 경우 관리에 어려움이 있고 만약 서버나 장비 변경 시 일일이 변경하여야 한다는 단점이 있다.
두 번째로는 Vlan내에 가상의 Vlan인 Private Vlan을 이용하는 방법이 있다.
그러나 이 방법은 PVlan을 지원하는 스위치에서만 가능하고, 동일 스위치에 연결되어 있는 서버간에는 arp 통신이 되지 않으므로 상호 통신할 수 없다는 한계가 있어 실제로 도입이 쉽지 않다는 단점이 있다.
기타, Vlan을 작게 나누거나 동일 서비스군 또는 OS별로 동일한 Vlan을 구성하는 것도 피해를 줄일 수 있는 방법이라 할 수 있다.
관련자료
-
이전
-
다음