360 likes | 652 Views
스푸핑. 스푸핑 공격 필수 라이브러리 ARP 스푸핑 IP 스푸핑 DNS 스푸핑. 스푸핑 공격이란 스푸핑 (Spoofing) 이란 ‘속이다’라는 의미 IP 주소 , 호스트 이름 , MAC 주소 등 여러 가지를 속일 수 있으며 , 스푸핑은 이런 속임을 이용한 공격을 총칭한다 . 인터넷이나 로컬에서 존재하는 모든 연결에 스푸핑이 가능하며 , 정보를 얻어내는 것 외에도 시스템을 마비시키는 것도 가능하다 . IP 충돌 문제 역시 고의가 아닌 IP 스푸핑이라고 생각할 수 있다.
E N D
스푸핑 • 스푸핑 공격 • 필수 라이브러리 • ARP 스푸핑 • IP 스푸핑 • DNS 스푸핑 한빛미디어(주)
스푸핑 공격이란 • 스푸핑(Spoofing)이란 ‘속이다’라는 의미 • IP 주소, 호스트 이름, MAC 주소 등 여러 가지를 속일 수 있으며, 스푸핑은 이런 속임을 이용한 공격을 총칭한다. • 인터넷이나 로컬에서 존재하는 모든 연결에 스푸핑이 가능하며, 정보를 얻어내는 것 외에도 시스템을 마비시키는 것도 가능하다. • IP 충돌 문제 역시 고의가 아닌 IP 스푸핑이라고 생각할 수 있다.
IP로 인한 충돌 및 스푸핑 공격에 대비하여 관리하는 네트워크의 MAC 주소 테이블을 만들어두면 유용하게 쓸 수 있다 • Root# ping –b 192.168.1.255 • Root# arp -a
필수 라이브러리 • 여러 가지 해킹 툴을 리눅스와 윈도우에 사용하기 위해서는 몇 가지 라이브러리의 설치가 필요하다. • 리눅스에서 필요한 라이브러리 중 Libnet/Libpcap/DB Library/Libnids/OpenSSL 이렇게 다섯 개의 라이브러리는 거의 필수라도 생각해도 무방할 정도로 자주 쓰인다. 그리고 배포판에 따라 일부는 이미 설치되어 있기도 하다. • 윈도우에서는 WinPCAP 라이브러리와 스니핑을 위한 라이브러리가 툴에 따라 별도로 설치되기도 한다. • 네트워크 카드에 유입된 패킷은 수신 버퍼에 일시적으로 저장되었다가, 이에 대한 시스템 인터럽트(interrupt)가 발생하여 I/O(input/ouput) 버스 라인을 통해 데이터가 시스템으로 전송된다. 각종 라이브러리 드라이버는 이렇게 전송된 데이터를 수집하고 축약한다.
Libnet (Library Network) • 패킷은 생성 시에 다음과 같은 과정을 거친다. • 네트워크의 초기화 • 메모리의 초기화 • 패킷의 생성 • 패킷의 체크섬(Check Sum) 생성 • 패킷의 투입 • Libnet은 응용 프로그램이 패킷을 생성하여 보낼 수 있게 해주는 라이브러리로, 직접 패킷을 생성하는 것보다 훨씬 간단하게 패킷을 생성하여 보낼 수 있으며, 보통 다음에 다룰 Libpcap과 함께 쓰인다. 이 두 라이브러리를 이용하면 ping과 traceroute 같은 프로그램을 손쉽게 작성할 수 있다.
Libnet이 지원하는 함수 • 메모리의 패킷 관리 함수 • 주소 확인 함수 • 패킷 구조 생성 함수 • 패킷 생성 함수 • 기타 지원 함수 • Libnet이 지원하는 프로토콜 • 2계층 : ARP와 이더넷 • 3계층 : ICMP, IGMP, IPv4 • 4계층 : TCP, UDP • 7계층 : RIP, OSPF, DNS
Root# ./configure • Root# make • Root# make test • Root# make install
Libpcap(Library Packet Capture) • 보통 Libnet과 같이 쓰인다. 라이브러리의 명칭에서 알 수 있듯이, 스니핑 프로그램에 필요한 라이브러리다. • Libpcap 라이브러리는 네트워크 카드에 유입된 정보를 응용 프로그램이 읽을 수 있는 형태로 전환해준다.
Root# ./configure • Root# make • Root# make install
DB(Berkeley Database) • 버클리 DB는 오픈 소스 DB로서, 리눅스에 웹 서버 등을 정상적으로 설치했다면, 기본적으로 설치되는 라이브러리다. 아파치 웹 서버, Sendmail 등이 기본적으로 버클리 DB를 사용하고 있기 때문이다. • 버클리 DB는 C, C++, 자바(Java), 펄(Perl), Tcl, 파이썬(Python)과 PHP를 모두 지원하며, 멀티스레드(thread)와 locking, transaction logging, 공유 버퍼 관리, 메모리 관리 등을 수행한다. • 버클리 DB는 무척 가볍게 설계된 라이브러리이지만, 역시나 다른 라이브러리에 비해 무척이나 방대하다. • Dsniff 와 같은 툴 설치 시 필요하다.
Root# cd build_unix • Root# ../dist/confiugure --enable-compat185 • Root# make • Root# make install
Libnids(Library Network IDS) • BSD packet filter(BPF)에 기반하고 있으며, 스니퍼나 네트워크 분석 프로그램을 작성할 때 유용한 라이브러리다. • 현재 Libnids는 다음의 세 가지 기능이 있으며, 각각의 함수는 다음과 같다. • IP 패킷의 재조합(Defragmentation) • TCP 흐름 재조합 • 기타 (UDP 콜백 함수, TCP 세션 강제 종료 함수)
Root# ./configure • Root# make • Root# make install
OpenSSL(Secure Socket Layer) • OpenSSL은 telnet이나 rlogin이 암호화되지 않은 채 데이터를 전송하기 때문에 보안상 문제가 있어 운영체제는 SSH(Secure Shell) 프로토콜을 지원한다. • SSH는 SSH 1과 SSH 2가 있으며, SSH 1은 다시 크게 1.3과 1.5로 나뉘어지며, 두 버전 모두 OpenSSH가 지원한다. 두 프로토콜은 모두 RSA에 의해서 키 교환을 하며, 데이터는 3DES와 Blowfish, IDEA로 암호화한다. • SSH 2 프로토콜은 DSA와 DH 알고리즘을 쓰며, SSH 1의 CRC 문제를 HMAC 알고리즘으로 해결하고 있다. 하지만 OpenSSL을 설치하는 이유는 보안을 위해서만은 아니다. OpenSSL로 통신하는 계정과 패스워드 등을 스니핑하기 위해서이기도 하다
Root# ./config • Root# make • Root# make test • Root# make install
ARP • IP 주소 값으로 MAC 주소 값을 알아내는 프로토콜 • RARP • MAC 주소 값으로 IP 주소 값을 알아내는 프로토콜 • ARP 스푸핑은 로컬에서 통신하고 있는 서버와 클라이언트의 IP 주소 에 대한 2계층 MAC 주소를 공격자의 MAC 주소로 속여 클라이언트 가 서버로 가는 패킷이나 서버에서 클라이언트로 가는 패킷을 중간에 서 가로채는 공격이다. • 공격자는 이 패킷을 읽고 확인한 후 정상적인 목적지로 향하도록 다시 돌려보내 연결이 끊어지지 않고 연결되도록 유지한다.
ARP 스푸핑 공격 예 • 명호는 먼저 10.0.0.2에 해당된 가짜 MAC 주소를 CC로 10.0.0.3에 해당하는 가짜 MAC 주소를 CC로 알렸다. • 명호는 철수와 영희 컴퓨터로부터 패킷을 받는다. • 각자에게 받은 패킷을 읽은 후 철수가 영희에게 보내고자 하던 패킷을 정상적으로 영희에게 보내주고, 영희가 철수에게 보내고자 했던 패킷을 철수에게 보내준다. [그림 12-20] ARP 스푸핑 예제 그림
ARP 스푸핑 공격 전과 후의 패킷의 흐름 [그림 12-21] ARP 스푸핑 공격
공격 전 툴 설치 ARP 스푸핑 툴(fake 버전 1.1.2, rpm) Root# rpm -Uvh fake-1.1.2-1.i386.rpm 패킷 Relay 툴(fragrouter 버전 1.6) Root# ./configure Root# make • 공격 전 ARP 테이블 Root# arp -a
공격전 패킷 릴레이 기능 설정 Root# fragrouter –B1 • ARP 스푸핑 공격 실시 Root# send_arp 172.16.0.3 00:06:5B:89:D0:CC 172.16.0.4 00:C0:26:5D:25:AA [그림 12-30] fragrouter 실행 [그림 12-31] send_arp를 이용한 ARP 스푸핑
공격 후 ARP 테이블 Root# arp -a • 공격 중 Fragrouter [그림 12-32] ARP 스푸핑 공격 후 클라이언트의 MAC 테이블 [그림 12-33] 클라이언트가 텔넷 터미널에서 ls 명령을 내린 후 공격자의 fragrouter 화면
공격 중 TCPDump : 클라이언트가 ls 입력 시 [그림 12-34] 클라이언트가 텔넷 터미널에서‘ls’명령을 내린 후 공격자의 TCP Dump 화면
ARP 스푸핑의 보안 대책 : MAC 주소의 static한 설정컴파일 • arp -a를 입력하고 엔터 키를 입력하기 바란다. 현재 MAC 테이블을 볼 수 있다. • static으로 설정하고자 하는 IP 주소와 MAC 주소를 확인한 뒤 arp -s <IP 주소> <MAC 주소>로 명령을 내린다. • 명령 예 ) arp -s 192.168.1.142 00:06:5B:89:D0:CC • 다시 arp -a로 MAC 테이블을 확인해보면 뒷부분에PERM(Permanent) 옵션이 붙어있는 것을 확인할 수 있다. 이렇게 설정된 IP와 MAC 주소 값은 ARP 스푸핑 공격이 들어와도 값이 변하지 않는다.
IP 스푸핑 • IP 스푸핑은 시스템간의 트러스트 관계를 이용한 것이다. • 트러스트 관계가 설정된 상태에서 클라이언트 시스템은 서버에 접속할 때 자신의 IP 주소로 인증을 하고 별도의 패스워드 없이 로그인이 가능하도록 만든 것이다. • 원격지 접속 서비스 중 r로 시작하는 rsh, rcp 등의 명령이 주로 IP 주소를 기반으로 인증하는 서비스다. • 리눅스 / 유닉스에서 트러스트관계를 형성하는데 사용되는 파일 • /etc/hosts.equiv • $HOME/.rhost
DNS 스푸핑 • DNS(Domain Name System) 스푸핑은 웹 스푸핑과 비슷한 의미로 이해되기도 한다. • 인터넷을 이용하는 도중 주소 창에 가고자하는 사이트 이름을 적어놓고는 엔터 키를 눌렀더니 엉뚱한 사이트로 연결되는 경우를 경험해본 적이 있을 것이다. • 예를 들면 ‘www.cwd.go.kr’란 주소를 주소 창에 넣었더니만 무슨 쇼핑몰이나 포르노 사이트가 뜨는 경우다. 이런 경우가 DNS 서버의 오류로 인해 생길 수도 있지만, DNS 스푸핑과 같은 공격으로도 이루어진다.
정상적인 DNS 서비스 • 클라이언트는 접속하고자 하는 www.wishfree.com과 같은 도메인 이름에 해당하는 IP 주소를 이미 설정된 DNS 서버에게 물어본다. 이때 보내는 패킷이 DNS query 패킷이다. • DNS 서버는 해당하는 도메인 이름에 대한 IP 주소를 클라이언트에게 보내준다. • 클라이언트는 받은 IP 주소를 바탕으로 웹 서버를 찾아간다. [그림 12-46] 정상적인 DNS 서비스
DNS 스푸핑 • 클라이언트가 DNS 서버로 DNS query 패킷을 보내는 것을 확인한다. 스위칭 환경일 경우에는 클라이언트가 DNS query 패킷을 보내면 이를 받아야 하므로 arp 스푸핑과 같은 선행 작업이 필요하다. • 만약 허브를 쓰고 있다면 모든 패킷이 자신에게도 전달되므로 자연스럽게 클라이언트가 DNS query 패킷을 보낼 경우 이를 확인할 수 있다. [그림 12-47] DNS 질의
DNS 스푸핑 • 공격자는 로컬에 존재하므로 DNS 서버보다 지리적으로 가까운 위치에 있다. 따라서 DNS 서버가 올바른 DNS response 패킷을 보내주기 전에 클라이언트에게 위조된 DNS response 패킷을 보낼 수 있다. [그림 12-48] 공격자와 DNS 서버의 DNS 응답
DNS 스푸핑 • 클라이언트는 공격자가 보낸 DNS response 패킷을 올바른 패킷으로 인식하고, 웹에 접속한다. 지리적으로 멀리 떨어져 있는 DNS 서버가 보낸 DNS response 패킷은 버린다. [그림 12-49] DNS 스푸핑 공격의 성공
윈도우용 arp 스푸핑 툴인 winarp_sk를 이용하여 클라이언트(192.168.1.144)로 하여금 게이트웨이인 192.168.1.1로 향하는 패킷이 공격자로 오게 설정한다. • C:\> winarp_sk -m 2 -d 192.168.1.144 -s 192.168.1.1
② win_dnsspoof 툴로 www.google.co.kr에 대한 DNS query 패킷에 대해 위조된 웹 서버인 192.168.1.143으로 이름이 해석되도록 설정한다. • C:\> win_dnsspoof -n www.google.co.kr -i 192.168.1.143 -g 00:04:76:6E:FB:E4
③ 공격당한 클라이언트에서 www.google.co.kr에 ping을 날리자 192.168.1.143에 대해 ping을 날리는 것을 확인할 수 있다. • C:\> ping www.google.co.kr
④ 공격 후 클라이언트에서 www.google.co.kr에 접속하자. 처음 위조를 위해 만들었던 웹 서버에 접속됨을 확인할 수 있다.