Download presentation
Presentation is loading. Please wait.
1
공격/대응 Examples
2
내 용 Spoofing 공격 및 대응 Sniffing 공격 및 대응
ARP Spoofing IP Spoofing DNS Spoofing Sniffing 공격 및 대응 DOS/DDOS(Distributed Denial Of Service) 공격 및 대응 Buffer overflow 공격 및 대응
3
Spoofing 공격 스푸핑(Spoofing)이란 ‘속이다’라는 의미 대상 IP 주소 호스트 이름 MAC 주소
인터넷이나 로컬에서 존재하는 모든 연결에 스푸핑이 가능하며, 정보를 얻어내는 것 외에도 시스템을 마비시키는 것도 가능
4
ARP Spoofing ARP 스푸핑은 로컬에서 통신하고 있는 서버와 클라이언트의 IP 주소에 대한 2계층 MAC 주소를 공격자의 MAC 주소로 속여 클라이언트에서 서버로 가는 패킷이나 서버에서 클라이언트로 가는 패킷을 중간에서 가로채는 공격 공격자는 이 패킷을 읽고 확인한 후 정상적인 목적지로 향하도록 다시 돌려보내 연결이 끊어지지 않고 연결되도록 유지
5
ARP Spoofing 공격 예 1. 명호는 먼저 에 해당된 가짜 MAC 주소를 CC로 에 해당하는 가짜 MAC 주소를 CC로 알림 2. 명호는 철수와 영희 컴퓨터로부터 패킷을 수신 3. 각자에게 받은 패킷을 읽은 후 철수가 영희에게 보내고자 하던 패킷을 정상적으로 영희에게 송신하고, 영희가 철수에게 보내고자 했던 패킷을 철수에게 송신
6
ARP Spoofing 공격 전후의 패킷의 흐름
7
IP Spoofing 공격 공격 대상 호스트가 신뢰하는 특정 호스트로 가장하여 대상 호스트로부터 인증을 받는 것
TCP 프로토콜 자체의 취약점 이용 TCP Sequence Number 추측 가능 IP 인증 메커니즘을 사용하는 RPC 기반 r계열 서비스 이용 r 계열 서비스 인증 메커니즘 : 신뢰관계에 있는 호스트들의 IP주소만을 대상으로 인증 신뢰관계 설정 파일(UNIX 또는 LINUX) /etc/hosts.equiv $HOME/.rhost 인증 최소화 해커 “케빈 미트닉”이 이용 Up till now, have been concerned with protecting message content (ie secrecy) by encrypting the message. Will now consider how to protect message integrity (ie protection from modification), as well as confirming the identity of the sender. Generically this is the problem of message authentication, and in eCommerce applications is arguably more important than secrecy.
8
IP Spoofing 공격 방법 구성 ~ S:대상 호스트 C:S와 신뢰관계에 있는 호스트 X:공격자
9
IP Spoofing 공격 방법 C 무력화 IP Spoof 대상 호스트 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 송신 불가
10
IP Spoofing 공격 방법 ISN 예측 및 악성 코드 실행 공격자 X는 ISN S를 예측 악성코드 실행
공격자 X는 C로 전송된 S의 SYN패킷의 ISN S를 알지 못함 단, C가 X와 동일 LAN Segment 상에 존재한다면 Packet Dump Tool 이용 가능 X -> S : ACK(ISN S), Src=C S는 C와 정상적인 TCP 접속 완료한 것으로 여김 X는 S와 Data 송수신 가능 악성코드 실행 “echo + + >> .rhost” // any host, any named user can access 암호 없이 로그인 가능
11
신뢰 시스템 탐색 정보수집 단계에서 수행 Blind Spoofing Non-Blind Spoofing 원격 대상 호스트 공격
ISN의 예측 r-계열 서비스, NFS(Network File System) Non-Blind Spoofing 대상 호스트의 Packet 내용 파악이 가능한 경우(연결요청 감시->강제RST->공격자가 새로운 연결 시도:IP hijacking)
12
ISN ISN(Initial Sequence Number) 최초 요청 호스트가 대상 호스트로 보내는 SYN 번호
OS 마다 다른 변화 규칙 ISN 변화 규칙 설명 적용시스템 시간에 비례 최초 ISN = 1 초당 128,000씩 증가 TCP 연결 후는 64,000식 증가 IRIX 6.2와 이후 Linux 1.x와 이후 SunOS 5.5와 이후 MS Window Free BSD 패킷 수신시 증가 패킷 수신 시 64,000씩 증가 추측이 가장 용이 HP-UX AIX 3과 이전 SunOS 5.4와 이전 랜덤 ISN을 무작위로 변화 AIX 4와 이후 Linux 2.x와 이후
13
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 증가 되는 경우 유용
14
IP Spoofing 대응 방법 r-command 사용 금지 Sequence Number를 랜덤하게 생성
SN 32bit 중 일부를 randomize 적은 bit를 randomize할 경우 brute-force 공격 가능(랜덤 발생기의 seed 추측) ISN S 생성위해 암호 알고리즘(DES-ecb mode) 사용 재전송, 순서제어 등 신뢰 전송 서비스 제공을 위한 SN 고유 기능 유지 필요 암호화된 인증 방법 채택(IPSec)
15
필수 라이브러리 IP Spoofing 등 네트워크 해킹 공격 도구 및 방어에 필요한 필수 라이브러리
Libnet : Packet Injection Libpcap : Packet Capture 윈도우즈용 : WinPcap Libnids : Network Analisys OpenSSL : Cryptography
16
DNS 스푸핑 DNS(Domain Name System) 스푸핑은 웹 스푸핑과 유사한의미로 이해되기도 함
인터넷을 이용하는 도중 주소 창에 가고자하는 사이트 이름을 적어놓고는 엔터 키를 눌렀더니 엉뚱한 사이트로 연결되는 경우를 경험해본 적이 있을 것이다. 예를 들면 ‘ 대통령이 사시는 곳이다)’란 주소를 주소 창에 넣었더니만 무슨 쇼핑몰이나 포르노 사이트가 뜨는 경우다. 이런 경우가 DNS 서버의 오류로 인해 생길 수도 있지만, DNS 스푸핑과 같은 공격으로도 이루어짐
17
정상적인 DNS 서비스 1. 클라이언트는 접속하고자 하는 사이트의 도메인 이름에 해당하는 IP 주소를 이미 설정된 DNS 서버에게 질의. 이때 보내는 패킷이 DNS query 패킷임 2. DNS 서버는 해당하는 도메인 이름에 대한 IP 주소를 클라이언트에게 전송 3. 클라이언트는 받은 IP 주소를 바탕으로 웹 서버에 접속
18
DNS 스푸핑 클라이언트가 DNS 서버로 DNS query 패킷을 보내는 것을 확인.
스위칭 환경일 경우에는 클라이언트가 DNS query 패킷을 보내면 이를 받아야 하므로 arp 스푸핑과 같은 선행 작업이 필요 만약 허브를 쓰고 있다면 모든 패킷이 자신에게도 전달되므로 자연스럽게 클라이언트가 DNS query 패킷을 보낼 경우 이를 확인할 수 있음
19
DNS 스푸핑 2. 공격자는 로컬에 존재하므로 DNS 서버보다 지리적으로 가까운 위치에 있음. 따라서 DNS 서버가 올바른 DNS response 패킷을 보내주기 전에 클라이언트에게 위조된 DNS response 패킷을 보낼 수 있음
20
DNS 스푸핑 3. 클라이언트는 공격자가 보낸 DNS response 패킷을 올바른 패킷으로 인식하고, 웹에 접속한다. 지리적으로 멀리 떨어져 있는 DNS 서버가 보낸 DNS response 패킷은 폐기
21
Sniffing Sniff의 사전적 의미 : 코를 킁킁거리다
Sniffing 공격은 막는 것도 어려우며, 탐지 역시 쉽지 않음. Sniffing 공격을 수동적(Passive) 공격이라고도 말하는데, 그 이유는 공격 시 툴을 설치해놓은 상태로 충분하기 때문임 LAN에서의 Sniffing은 프러미스큐어스(Promiscuous) 모드에서 작동 LAN 카드는 설정된 IP 주소 값과 고유한 MAC(Media Access Control) 주소 값을 가지고 있으며 자신의 랜 카드에 들어오는 프로토콜 형식에 따른 전기적 신호의 헤더 부분, 즉 주소 값을 인식하고 자신의 버퍼에 저장할지를 결정 Sniffing은 자신이 가지지 말아야 할 정보까지 모두 받아들이는 것으로, 자신의 주소 값을 무시하고 모든 패킷을 받아들이는 상태를 프러미스큐어스 모드라고 함
22
Sniffing공격도구-TCPDump
가장 일반적으로 쓰이는 스니핑 도구 관리자적인 느낌이 강한 스니퍼 네트워크 관리를 위해 개발된 툴 Snort라는 IDS의 기반 프로그램 TCP Dump는 법적 효력이 있다. 법적 효력을 발휘하려면 법원에서 인정하는 규약에 따라야 한다. 하지만 대부분의 컴퓨터로 취득한 자료는 재판 과정에서 직접적인 증거로 인정 받지 못한다는 사실을 알아둬야 한다. 그 이유는 위조나 변조는 매우 쉽고, 그 위조와 변조 여부를 알아내는 것이 너무 어렵기 때문이다.
23
Telnet Login 시 TCPDump 결과
계정 : wishfree의 경우
24
Telnet Login 시 TCPDump 결과
패스워드 : qwer1234의 경우
25
서비스 거부 공격(DoS) 자원 고갈을 통한 서비스 무력화 TCP SYN flooding을 이용한 DOS 공격
동시 접속 요청 처리 한계인 Backlog(N) 큐가 가득찬 경우 새로운 연결 요청은 무시하도록 하는 TCP 프로토콜의 취약점 이용
26
서비스 거부 공격(DoS) 공격자 해결책 대상 호스트에 N개의 매우 느리고 오래 동안 접속되는 연결을 N개 요청
Half open : Random IP 주소로 연결 요청 -> ACK를 보내지 않음 IP Address spoofing 필요 대상 호스트는 새로운 SYN Packet에 대해 처리 불가 -> 네트워크 서비스 중지 해결책 TCP 커널 코드 수정(Half open connection 폐기) Firewall에서 공격 감지 시 서버로 RST Packet 송신
27
분산 서비스거부 공격 서비스 거부 공격을 수행하기 위해 여러대의 호스트 사용 DDoS공격 가능한 도구 : Smurf
Trinoo Trible Flood Network (TFN, TFN2K) Stacherldraht Shaft Mstream …
28
Smurf 위장된 송신 IP를 갖는 ICMP 패킷을 보냄 라우터나 방화벽이 그러한 패킷을 막도록 구성되어질 수 있음
패킷을 수신한 모든 기기들은 대상 기기에 응답을 보냄 라우터나 방화벽이 그러한 패킷을 막도록 구성되어질 수 있음
29
Tribal Flood Network (TFN2K)
계층적으로 조직화된 분산 공격 검출 및 방어가 훨씬 어려움
30
방어 확실한 예방법 부재 로컬 시스템이 DDoS 에이전트로 작동 중인 지를 지속적으로 검사하여 예방 (예. TFN 에이전트-> 실행 프로그램의 무결성 검사) 공격의 근원지를 알아내는 것은 더 많은 작업이 필요함 : Savage 등 : 패킷 내에 라우터에서 포함된 정보 이용. 희생자가 공격근원지를 짜맞출 수 있음 Bellovin: 라우터들이 패킷의 임의 특정 부분에 대해 서명
31
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 발생 가능 여부 탐색 루트권한으로 실행 중인 응용프로그램 선정 적용방법 고안 공격코드 수행 Up till now, have been concerned with protecting message content (ie secrecy) by encrypting the message. Will now consider how to protect message integrity (ie protection from modification), as well as confirming the identity of the sender. Generically this is the problem of message authentication, and in eCommerce applications is arguably more important than secrecy.
32
Buffer overflow 란? Stack Overflow Heap Overflow
LIPO(Last In First Out) PUSH/POP 연산 Stack Pointer : esp 레지스터 프로세스 영역 중 함수의 인자, 지역변수, 리턴 주소를 저장 리턴 주소를 쉘 코드 주소로 Overriding Heap Overflow 동적 메모리 할당 영역 Malloc 함수에 의해 할당->Overriding 가능
33
Buffer overflow 란? 웹 서버가 다음 함수를 포함한다고 가정 : 함수가 호출될 경우 스택 상황 :
void func(char *str) { char buf[128]; strcpy(buf, str); } 함수가 호출될 경우 스택 상황 : 만약 *str가 136바이트 보다 길다면? strcpy 후 스택 상황 :
34
스택 활용 문제점 : strcpy()에 범위 체크 없음 strcpy 후 *str이 다음과 같다고 가정한 경우 스택 상황 :
func()가 종료된 경우, 사용자는 shell 획득!! 주의 : 공격코드가 스택 내에서 수행됨 ret를 결정하기 위해 func()가 호출된 후의 스택의 위치를 추측
35
Buffer overflows 이용 웹 서버가 주어진 URL을 가지고 func()을 호출한다고 가정
이 경우 고려사항 : 프로그램 P는 ‘\0’ 문자를 포함할 수 없음 Overflow가 func()이 종료되기 전에 프로그램을 붕괴해서는 안됨 이런 유형의 buffer overflows : 메일 프로그램의 MIME name field 처리 시 MS Outlook Express 4.0x
36
일반적인 overflow 이용 방법 기본 스택 이용은 스택 세그먼트를 non-executable로 표시하여 방지할 수 있음
Linux 또는 Solaris용 패치 존재 그러나, 일반적인 overflow 이용을 막을 수는 없음 일반적 buffer overflow 이용의 2 단계 : 공격 코드를 프로그램 영역에 위치시킴 프로그램 P로 하여금 공격코드를 실행 하도록 함
37
공격코드 실행 Stack smashing 공격 : 함수 pointers : (Linux superprobe 공격)
지역 buffer 변수에 overflow를 발생시켜 리턴 주소를 Overriding 함수 pointers : (Linux superprobe 공격) 일반적으로 buffer overflow가 함수pointer를 overriding longjmp buffers : longjmp(pos) (Perl 공격) pos 다음에 나오는 buffer에 Overflow를 발생시켜 pos를 overriding
38
공격코드의 위치 공격코드의 주입 : 기존 코드 이용 : libc exec 함수 스택 변수에 위치 (local vars)
힙 변수에 위치 (malloc’ ed vars) 정적자료영역(data segment)에 위치 (static vars) 기존 코드 이용 : libc exec 함수 FP나 ret-addr를 libc의 exec 함수를 가리키도록 하고 동시에 첫번째 인수를 \bin\sh이 되도록 함
39
Buffer overflows 발견 해커의 buffer overflows 발견 방법 예:
로컬 시스템에 웹 서버 기동 긴 특정 태그를 갖는 요청을 발생시킴 모든 긴 태그들은 “$$$$$”로 종료 웹 서버 붕괴 시, overflow위치를 발견하기 위해 core dump에서 “$$$$$”를 탐색 자동화된 도구 존재 (eEye Retina, ISIC) 검증 안된 Open Source 이용 시 소스 레벨 탐색 가능
40
Buffer overflow 공격 방지 문제점 : 방어 :
strcpy(), strcat(), sprintf() 함수들은 범위 체크 기능 없음 다소 안전하다고 할 수 있는 strncpy(), strncat()는 종종 오용 가능 strncpy()의 경우 버퍼를 종료되지 않은 상태로 남겨 둘 수 있음 strncpy( dest, src, strlen(src)+1 ) 방어 : 정적 소스코드 분석법 실행시간 검사법
41
정적 소스코드 분석법 buffer overflows를 검사하기 위해 소스코드를 점검 소스코드 리뷰를 자동화 할 수 있는 방법?
컨설팅회사 존재 소스코드 리뷰를 자동화 할 수 있는 방법? 도구들 : @stake.com (l0pht.com) : SLINT (UNIX용) rstcorp: its4. (함수호출 검사) Berkeley: Wagner, et al. (제약 위반 검사)
42
실행시간 검사 : StackGuard 방법 1: 실행 시 buffer 범위 검사 방법 2: StackGuard (OGI)
수행 성능 저하 심각 C 나 C++의 경우 적용 어려움 방법 2: StackGuard (OGI) 스택의 무결성을 실행 시 검사 스택 프레임에 “canary”를 심어 두고 함수 리턴 전에 그들의 무결성을 검사
43
Canary 유형 Random canary: Terminator canary:
프로그램 수행 시작 시 임의의 스트링 선택 canary 스트링을 모든 스택 프레임에 삽입 함수 리턴 전에 canary 검사 random canary를 붕괴하기 위해서 공격자는 현재의 임의의 스트링을 알아야 함 Terminator canary: Canary = 0, newline, linefeed, EOF C 표준입출력 함수 중 스트링 함수들이 종료 구분자를 넘어서는 복사하지 않는 특성 이용 결국 공격자는 스택 붕괴를 위해 스트링 함수를 사용할 수 없음
44
StackGuard (계속) StackGuard는 GCC의 패치로 구현 성능 저하 최소화 새 버전 : PointGuard.
Canary를 이용 function pointers와 setjmp buffers를 보호 성능 개선 주의 : Canary들이 완전한 해결책은 아님 일부 stack smashing 공격들은 canaries를 건드리지 않고 공격 가능
45
참고문헌 Buffer overflows: attacks and defenses for the vulnerability of the decade. A first step towards automated detection of buffer overrun vulnerabilities. Smashing the stack for fun and profit. Article p By Aleph1 Bypassing StackGuard and StackShield. Article p56-6. By Bulba and Kil3r Distributed denial of service attacks/tools.
Similar presentations