45
공공 공공 / / 공공 공공 Examples Examples

공격/ 대응 Examples

Embed Size (px)

DESCRIPTION

공격/ 대응 Examples. 내 용. Spoofing 공격 및 대응 ARP Spoofing IP Spoofing DNS Spoofing Sniffing 공격 및 대응 DOS/DDOS(Distributed Denial Of Service) 공격 및 대응 Buffer overflow 공격 및 대응. Spoofing 공격. 스푸핑 (Spoofing) 이란 ‘ 속이다 ’ 라는 의미 대상 IP 주소 호스트 이름 MAC 주소 - PowerPoint PPT Presentation

Citation preview

Page 1: 공격/ 대응 Examples

공격공격 // 대응 대응 ExamplesExamples

Page 2: 공격/ 대응 Examples

내 용내 용• Spoofing 공격 및 대응

– ARP Spoofing– IP Spoofing– DNS Spoofing

• Sniffing 공격 및 대응• DOS/DDOS(Distributed Denial Of

Service) 공격 및 대응• Buffer overflow 공격 및 대응

Page 3: 공격/ 대응 Examples

• 스푸핑 (Spoofing) 이란 ‘속이다’라는 의미

• 대상

• IP 주소

• 호스트 이름

• MAC 주소

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

Spoofing Spoofing 공격공격

Page 4: 공격/ 대응 Examples

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

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

ARP SpoofingARP Spoofing

Page 5: 공격/ 대응 Examples

1. 명호는 먼저 10.0.0.2 에 해당된 가짜 MAC 주소를 CC 로 10.0.0.3 에 해당하는 가짜 MAC 주소를 CC 로 알림

2. 명호는 철수와 영희 컴퓨터로부터 패킷을 수신

3. 각자에게 받은 패킷을 읽은 후 철수가 영희에게 보내고자 하던 패킷을 정상적으로 영희에게 송신하고 , 영희가 철수에게 보내고자 했던 패킷을 철수에게 송신

ARP Spoofing ARP Spoofing 공격 예공격 예

Page 6: 공격/ 대응 Examples

ARP Spoofing ARP Spoofing 공격 전후의 공격 전후의 패킷의 흐름패킷의 흐름

Page 7: 공격/ 대응 Examples

IP Spoofing IP Spoofing 공격공격• 공격 대상 호스트가 신뢰하는 특정 호스트로 가장하여

대상 호스트로부터 인증을 받는 것• TCP 프로토콜 자체의 취약점 이용

– TCP Sequence Number 추측 가능• IP 인증 메커니즘을 사용하는 RPC 기반 r 계열

서비스 이용– r 계열 서비스 인증 메커니즘 : 신뢰관계에 있는 호스트들의

IP 주소만을 대상으로 인증– 신뢰관계 설정 파일 (UNIX 또는 LINUX)

• /etc/hosts.equiv• $HOME/.rhost

– 인증 최소화• 해커 “케빈 미트닉”이 이용

Page 8: 공격/ 대응 Examples

IP Spoofing IP Spoofing 공격 방법공격 방법• 구성

S: 대상 호스트 C:S 와 신뢰관계에 있는 호스트

X: 공격자

~

Page 9: 공격/ 대응 Examples

IP Spoofing IP Spoofing 공격 방법공격 방법 C 무력화

– 대상 호스트 S 와 신뢰관계에 있는 C 를 탐색– SYN Flooding 등의 서비스 거부 공격을 통해 C 를

무력화 하거나– 시스템 C 가 동작 불능 상태에 있는 시점 탐색

• 시스템 점검을 위해 down 되거나 reboot 되는 시점 IP Spoof

– C 로 위장 (Impersonation)• X -> S : SYN(ISN X), Src = C• S -> C : SYN(ISN S), ACK(ISN X)• C 는 무력화되어 RST 송신 불가

Page 10: 공격/ 대응 Examples

IP Spoofing IP Spoofing 공격 방법공격 방법 ISN 예측 및 악성 코드 실행

– 공격자 X 는 ISN S 를 예측• 공격자 X 는 C 로 전송된 S 의 SYN 패킷의 ISN S 를

알지 못함• 단 , C 가 X 와 동일 LAN Segment 상에 존재한다면 Pack

et Dump Tool 이용 가능 • X -> S : ACK(ISN S), Src=C• S 는 C 와 정상적인 TCP 접속 완료한 것으로 여김• X 는 S 와 Data 송수신 가능

– 악성코드 실행• “echo + + >> .rhost” // any host, any named user can ac

cess• 암호 없이 로그인 가능

Page 11: 공격/ 대응 Examples

신뢰 시스템 탐색신뢰 시스템 탐색• 정보수집 단계에서 수행• Blind Spoofing

– 원격 대상 호스트 공격– ISN 의 예측– r- 계열 서비스 , NFS(Network File System)

• Non-Blind Spoofing– 대상 호스트의 Packet 내용 파악이 가능한 경우 (

연결요청 감시 -> 강제 RST-> 공격자가 새로운 연결 시도 :IP hijacking)

Page 12: 공격/ 대응 Examples

ISNISN• ISN(Initial Sequence Number)

– 최초 요청 호스트가 대상 호스트로 보내는 SYN 번호– OS 마다 다른 변화 규칙ISN 변화 규칙 설명 적용시스템

시간에 비례 최초 ISN = 1초당 128,000 씩 증가TCP 연결 후는 64,000 식 증가

IRIX 6.2 와 이후Linux 1.x 와 이후SunOS 5.5 와 이후MS WindowFree BSD

패킷 수신시 증가 패킷 수신 시 64,000 씩 증가추측이 가장 용이

HP-UXAIX 3 과 이전SunOS 5.4 와 이전

랜덤 ISN 을 무작위로 변화 AIX 4 와 이후Linux 2.x 와 이후

Page 13: 공격/ 대응 Examples

ISN ISN 예측 방법예측 방법• 합법적인 사용자의 경우 다음 접속의 ISN S 를

쉽게 계산 가능– SYN Packet 전송 및 응답 수신 (1)

• X -> S : SYN(ISN X)• S -> X : SYN(ISN S), ACK(ISN X)

– 다음 ISN 을 생성하도록 Spoofing 된 Packet 을 즉시 송신 (2)

• X -> S : SYN(ISN X), Src = C• S -> C : SYN(ISN S), ACK(ISN X)

– 시간에 비례하여 ISN 이 변하는 경우 (2) 의 ISN S는 (1) 의 RTT(Round Trip Time) 에 의존

• Tcpdump 를 사용하여 packet 모니터링– Packet 수신 시 ISN 증가 되는 경우 유용

Page 14: 공격/ 대응 Examples

IP Spoofing IP Spoofing 대응 방법대응 방법• r-command 사용 금지• Sequence Number 를 랜덤하게 생성

– SN 32bit 중 일부를 randomize– 적은 bit 를 randomize할 경우 brute-force 공격

가능 (랜덤 발생기의 seed 추측 )– ISN S 생성위해 암호 알고리즘 (DES-ecb mode)

사용– 재전송 , 순서제어 등 신뢰 전송 서비스 제공을

위한 SN 고유 기능 유지 필요• 암호화된 인증 방법 채택 (IPSec)

Page 15: 공격/ 대응 Examples

필수 라이브러리필수 라이브러리• IP Spoofing 등 네트워크 해킹 공격 도구 및

방어에 필요한 필수 라이브러리– Libnet : Packet Injection

• http://libnet.sourceforge.net/– Libpcap : Packet Capture

• 윈도우즈용 : WinPcap• http://winpcap.polito.it/

– Libnids : Network Analisys• http://www.packetfactory.net/Projects/libnids/

– OpenSSL : Cryptography• http://www.openssl.or.kr/news/news.html

Page 16: 공격/ 대응 Examples

DNS(Domain Name System) 스푸핑은 웹 스푸핑과 유사한의미로 이해되기도 함

인터넷을 이용하는 도중 주소 창에 가고자하는 사이트 이름을 적어놓고는 엔터 키를 눌렀더니 엉뚱한 사이트로 연결되는 경우를 경험해본 적이 있을 것이다 . 예를 들면 ‘ www.cwd.go.kr( 우리나라 대통령이 사시는 곳이다 )’ 란 주소를 주소 창에 넣었더니만 무슨 쇼핑몰이나 포르노 사이트가 뜨는 경우다 . 이런 경우가 DNS 서버의 오류로 인해 생길 수도 있지만 , DNS 스푸핑과 같은 공격으로도 이루어짐

DNS DNS 스푸핑스푸핑

Page 17: 공격/ 대응 Examples

1. 클라이언트는 접속하고자 하는 사이트의 도메인 이름에 해 당 하 는 IP 주 소 를 이 미 설정된 DNS 서버에게 질의 . 이때 보내는 패킷이 DNS query 패킷임

2. DNS 서 버 는 해 당 하 는 도메인 이름에 대한 IP 주소를 클라이언트에게 전송

3. 클 라 이 언 트 는 받 은 IP 주소를 바탕으로 웹 서버에 접속

정상적인 DNS 서비스

Page 18: 공격/ 대응 Examples

1. 클라이언트가 DNS 서버로 DNS query 패킷을 보내는 것을 확인 .

스위칭 환경일 경우에는 클라이언트가 DNS query 패킷을 보내면 이를 받아야 하므로 arp 스푸핑과 같은 선행 작업이 필요

만약 허브를 쓰고 있다면 모든 패킷이 자신에게도 전달되므로 자연스럽게 클라이언트가 DNS query 패킷을 보낼 경우 이를 확인할 수 있음

DNS DNS 스푸핑스푸핑

Page 19: 공격/ 대응 Examples

2. 공격자는 로컬에 존재하므로 DNS 서버보다 지리적으로 가까운 위치에 있음 . 따라서 DNS 서버가 올바른 DNS response 패킷을 보내주기 전에 클라이언트에게 위조된 DNS response 패킷을 보낼 수 있음

DNS DNS 스푸핑스푸핑

Page 20: 공격/ 대응 Examples

3. 클라이언트는 공격자가 보낸 DNS response 패킷을 올바른 패킷으로 인식하고 , 웹에 접속한다 . 지리적으로 멀리 떨어져 있는 DNS 서버가 보낸 DNS response 패킷은 폐기

DNS DNS 스푸핑스푸핑

Page 21: 공격/ 대응 Examples

SniffingSniffing• Sniff 의 사전적 의미 : 코를 킁킁거리다

• Sniffing 공격은 막는 것도 어려우며 , 탐지 역시 쉽지 않음 . Sniffing 공격을 수동적 (Passive) 공격이라고도 말하는데 , 그 이유는 공격 시 툴을 설치해놓은 상태로 충분하기 때문임

• LAN 에서의 Sniffing 은 프러미스큐어스 (Promiscuous) 모드에서 작동

– LAN 카드는 설정된 IP 주소 값과 고유한 MAC(Media Access Control) 주소 값을 가지고 있으며 자신의 랜 카드에 들어오는 프로토콜 형식에 따른 전기적 신호의 헤더 부분 , 즉 주소 값을 인식하고 자신의 버퍼에 저장할지를 결정

– Sniffing 은 자신이 가지지 말아야 할 정보까지 모두 받아들이는 것으로 , 자신의 주소 값을 무시하고 모든 패킷을 받아들이는 상태를 프러미스큐어스 모드라고 함

Page 22: 공격/ 대응 Examples

• 가장 일반적으로 쓰이는 스니핑 도구

• 관리자적인 느낌이 강한 스니퍼

• 네트워크 관리를 위해 개발된 툴

• Snort 라는 IDS 의 기반 프로그램

• TCP Dump 는 법적 효력이 있다 . 법적 효력을 발휘하려면 법원에서 인정하는 규약에 따라야 한다 . 하지만 대부분의 컴퓨터로 취득한 자료는 재판 과정에서 직접적인 증거로 인정 받지 못한다는 사실을 알아둬야 한다 . 그 이유는 위조나 변조는 매우 쉽고 , 그 위조와 변조 여부를 알아내는 것이 너무 어렵기 때문이다 .

SniffingSniffing 공격도구 -TCPDump

Page 23: 공격/ 대응 Examples

Telnet Login Telnet Login 시 시 TCPDump TCPDump 결과결과계정 : wishfree 의 경우

Page 24: 공격/ 대응 Examples

Telnet Login Telnet Login 시 시 TCPDump TCPDump 결과결과패스워드 : qwer1234 의 경우

Page 25: 공격/ 대응 Examples

서비스 거부 공격서비스 거부 공격 (DoS)(DoS)• 자원 고갈을 통한 서비스 무력화• TCP SYN flooding 을 이용한 DOS 공격

– 동시 접속 요청 처리 한계인 Backlog(N) 큐가 가득찬 경우 새로운 연결 요청은 무시하도록 하는 TCP 프로토콜의 취약점 이용

Page 26: 공격/ 대응 Examples

서비스 거부 공격서비스 거부 공격 (DoS)(DoS)– 공격자

• 대상 호스트에 N개의 매우 느리고 오래 동안 접속되는 연결을 N개 요청

– Half open : Random IP 주소로 연결 요청 -> ACK 를 보내지 않음

– IP Address spoofing 필요• 대상 호스트는 새로운 SYN Packet 에 대해 처리 불가 -> 네트워크 서비스 중지

– 해결책• TCP 커널 코드 수정 (Half open connection 폐기 )• Firewall 에서 공격 감지 시 서버로 RST Packet 송신

Page 27: 공격/ 대응 Examples

분산 서비스거부 공격분산 서비스거부 공격• 서비스 거부 공격을 수행하기 위해 여러대의

호스트 사용• DDoS 공격 가능한 도구 :

– Smurf– Trinoo– Trible Flood Network (TFN, TFN2K)– Stacherldraht– Shaft– Mstream– …

Page 28: 공격/ 대응 Examples

SmurfSmurf• 위장된 송신 IP 를 갖는 ICMP 패킷을 보냄

– 패킷을 수신한 모든 기기들은 대상 기기에 응답을 보냄

• 라우터나 방화벽이 그러한 패킷을 막도록 구성되어질 수 있음

Page 29: 공격/ 대응 Examples

Tribal Flood Network Tribal Flood Network (TFN2K)(TFN2K)

• 계층적으로 조직화된 분산 공격– 검출 및 방어가 훨씬 어려움

Page 30: 공격/ 대응 Examples

방어방어• 확실한 예방법 부재• 로컬 시스템이 DDoS 에이전트로 작동 중인

지를 지속적으로 검사하여 예방 ( 예 . TFN 에이전트 -> 실행 프로그램의 무결성 검사 )

• 공격의 근원지를 알아내는 것은 더 많은 작업이 필요함 :– Savage 등 : 패킷 내에 라우터에서 포함된 정보

이용 . 희생자가 공격근원지를 짜맞출 수 있음– Bellovin: 라우터들이 패킷의 임의 특정 부분에

대해 서명

Page 31: 공격/ 대응 Examples

Buffer overflow Buffer overflow 공격공격• 가장 일반적인 bug• CERT 보안 권고문의 50% 이상 차지 :

– 1997: 16 out of 28 CERT advisories.– 1998: 9 out of 13– 1999: 6 out of 12

• 종종 HOST 붕괴로 확산됨– 다행스러운 점 : 전문성과 인내 요구– 2 단계 구성 :

• 응용프로그램 중 buffer overflow 발생 가능 여부 탐색– 루트권한으로 실행 중인 응용프로그램 선정

• 적용방법 고안– 공격코드 수행

Page 32: 공격/ 대응 Examples

Buffer overflow Buffer overflow 란란 ??• Stack Overflow

– LIPO(Last In First Out)– PUSH/POP 연산– Stack Pointer : esp 레지스터 – 프로세스 영역 중 함수의 인자 , 지역변수 , 리턴

주소를 저장– 리턴 주소를 쉘 코드 주소로 Overriding

• Heap Overflow– 동적 메모리 할당 영역– Malloc 함수에 의해 할당 ->Overriding 가능

Page 33: 공격/ 대응 Examples

Buffer overflow Buffer overflow 란란 ??• 웹 서버가 다음 함수를 포함한다고 가정 :

void func(char *str) {char buf[128];strcpy(buf, str);}

• 함수가 호출될 경우 스택 상황 :

• 만약 *str 가 136바이트 보다 길다면 ?– strcpy 후 스택 상황 :

Page 34: 공격/ 대응 Examples

스택 활용스택 활용• 문제점 : strcpy() 에 범위 체크 없음• strcpy 후 *str 이 다음과 같다고 가정한 경우

스택 상황 :

• func() 가 종료된 경우 , 사용자는 shell 획득 !!• 주의 : 공격코드가 스택 내에서 수행됨• ret 를 결정하기 위해 func() 가 호출된 후의

스택의 위치를 추측

Page 35: 공격/ 대응 Examples

Buffer overflows Buffer overflows 이용이용• 웹 서버가 주어진 URL 을 가지고 func() 을

호출한다고 가정• 공격자는 웹 서버 상에 쉘을 얻기 위해 200바이트 URL 생성 가능

• 이 경우 고려사항 :– 프로그램 P 는 ‘ \0’ 문자를 포함할 수 없음– Overflow 가 func() 이 종료되기 전에 프로그램을 붕괴해서는 안됨

• 이런 유형의 buffer overflows :– 메일 프로그램의 MIME name field 처리 시

MS Outlook Express 4.0x

Page 36: 공격/ 대응 Examples

일반적인 일반적인 overflow overflow 이용 방법이용 방법• 기본 스택 이용은 스택 세그먼트를 non-

executable 로 표시하여 방지할 수 있음– Linux 또는 Solaris 용 패치 존재– 그러나 , 일반적인 overflow 이용을 막을 수는 없음

• 일반적 buffer overflow 이용의 2 단계 :– 공격 코드를 프로그램 영역에 위치시킴– 프로그램 P 로 하여금 공격코드를 실행 하도록 함

Page 37: 공격/ 대응 Examples

공격코드 실행공격코드 실행• Stack smashing 공격 :

– 지역 buffer 변수에 overflow 를 발생시켜 리턴 주소를 Overriding

• 함수 pointers : (Linux superprobe 공격 )

– 일반적으로 buffer overflow 가 함수 pointer 를 overriding

• longjmp buffers : longjmp(pos) (Perl 5.003 공격 )– pos 다음에 나오는 buffer 에 Overflow 를 발생시켜 p

os 를 overriding

Page 38: 공격/ 대응 Examples

공격코드의 위치공격코드의 위치• 공격코드의 주입 :

– 스택 변수에 위치 (local vars)– 힙 변수에 위치 (malloc’ ed vars)– 정적자료영역 (data segment) 에 위치 (static vars)

• 기존 코드 이용 : libc exec 함수– FP 나 ret-addr 를 libc 의 exec 함수를 가리키도록

하고– 동시에 첫번째 인수를 \bin\sh 이 되도록 함

Page 39: 공격/ 대응 Examples

Buffer overflows Buffer overflows 발견발견• 해커의 buffer overflows 발견 방법 예 :

– 로컬 시스템에 웹 서버 기동– 긴 특정 태그를 갖는 요청을 발생시킴

• 모든 긴 태그들은 “ $$$$$” 로 종료– 웹 서버 붕괴 시 , overflow 위치를 발견하기 위해 core dump 에서

“ $$$$$” 를 탐색• 자동화된 도구 존재 (eEye Retina, ISIC)• 검증 안된 Open Source 이용 시 소스 레벨

탐색 가능

Page 40: 공격/ 대응 Examples

Buffer overflow Buffer overflow 공격 방지공격 방지• 문제점 :

– strcpy(), strcat(), sprintf() 함수들은 범위 체크 기능 없음

– 다소 안전하다고 할 수 있는 strncpy(), strncat() 는 종종 오용 가능

• strncpy() 의 경우 버퍼를 종료되지 않은 상태로 남겨 둘 수 있음

• strncpy( dest, src, strlen(src)+1 )

• 방어 :– 정적 소스코드 분석법– 실행시간 검사법

Page 41: 공격/ 대응 Examples

정적 소스코드 분석법정적 소스코드 분석법• buffer overflows 를 검사하기 위해 소스코드를

점검– 컨설팅회사 존재

• 소스코드 리뷰를 자동화 할 수 있는 방법 ?• 도구들 :

– @stake.com (l0pht.com) : SLINT (UNIX 용 )– rstcorp: its4. ( 함수호출 검사 )– Berkeley: Wagner, et al. (제약 위반 검사 )

Page 42: 공격/ 대응 Examples

실행시간 검사 실행시간 검사 : StackGuard: StackGuard• 방법 1: 실행 시 buffer 범위 검사

– 수행 성능 저하 심각– C 나 C++ 의 경우 적용 어려움

• 방법 2: StackGuard (OGI)– 스택의 무결성을 실행 시 검사 – 스택 프레임에 “ canary” 를 심어 두고 함수 리턴 전에 그들의 무결성을 검사

Page 43: 공격/ 대응 Examples

Canary Canary 유형유형• Random canary:

– 프로그램 수행 시작 시 임의의 스트링 선택 – canary 스트링을 모든 스택 프레임에 삽입 – 함수 리턴 전에 canary 검사– random canary 를 붕괴하기 위해서 공격자는 현재의 임의의

스트링을 알아야 함• Terminator canary: Canary = 0, newline, linefeed, EOF

– C 표준입출력 함수 중 스트링 함수들이 종료 구분자를 넘어서는 복사하지 않는 특성 이용

– 결국 공격자는 스택 붕괴를 위해 스트링 함수를 사용할 수 없음

Page 44: 공격/ 대응 Examples

StackGuard (StackGuard ( 계속계속 ))• StackGuard 는 GCC 의 패치로 구현• 성능 저하 최소화• 새 버전 : PointGuard.

– Canary 를 이용 function pointers 와 setjmp buffers 를 보호

– 성능 개선

• 주의 : Canary 들이 완전한 해결책은 아님– 일부 stack smashing 공격들은 canaries 를 건드리지 않고 공격 가능

Page 45: 공격/ 대응 Examples

참고문헌참고문헌• Buffer overflows: attacks and defenses for the vulnerability of the

decade.http://www.immunix.org/StackGuard/discex00.pdf

• A first step towards automated detection of buffer overrun vulnerabilities.

http://www.cs.berkeley.edu/~daw/papers/overruns-ndss00.ps

• Smashing the stack for fun and profit. http://www.phrack.com Article p49-14. By Aleph1

• Bypassing StackGuard and StackShield. http://ww.phrack.com Article p56-6. By Bulba and Kil3r

• Distributed denial of service attacks/tools. http://staff.washington.edu/dittrich/misc/ddos