양정규 amy@securesoft.com Securesoft / Pen-Test team
목차 공격방법의변천시기불일치현상기술관점에따른공격기법 Scanning software 구현상의오류를이용한공격 Buffer Overflow 악의적인공격행위
공격방법의변천 제 1 시기 Password 수작업추측 Password 자동추측 제 2 시기제 3 시기제 4 시기제 5 시기 Command 조합에의한해킹 File Permission (setuid) Configuaration Error Environment Variable error Programming 에의한해킹 Race Condition Sniffing Spoofing DoS Scanning Appl Backdoor Buffer overflow Format String Kernel Backdoor worm D DoS Web Attack PC virus Window Trojan
공격방법의변천 P2P messenger Attack Wireless Attack DB Attack 제 6 시기 Advanced BO Attack Advanced Kernel Backdoor 지금시기는제 5 시기에서제 6 시기로변화중 Blackhat 영역의시기와 Whitehat 영역의시기의불일치현상존재
Blackhat & Whitehat 간의시기불일치현상 underground 에서연구하고있는해킹기법과 (black 영역 ) 실제 internet 현장 (white 영역 ) 에서대규모발생하고있는해킹기법간에는약 1 시기의차이가있다. 현재 blackhat 의집중연구분야 wireless attack DB SQL injection attack Advanced Buffer Overflow Attack (Free malloc overflow) whitehat 영역의실제피해기법 internet worm (CodeRed, nimda, Window Trojan) Distributed Denial Of Service Attack Web Application Attack ( 홈페이지공격 )
Blackhat & Whitehat 간의시기불일치현상 이러한시기불일치현상의결과 whitehat 영역의관심사와 blackhat 영역의관심사가다름 whitehat 영역의경우 이전시기의공격기법에대한대책에관심 blackhat 영역의경우 새로운시기의공격기법자체에대해관심 컴퓨터보안영역의이원화 보안제품개발자, 시스템네트웍관리자의경우 whitehat 영역의기술을다룬다 취약점점검, 보안진단, 버그분석자의경우 blackhat 영역의기술을다룬다 programming 에의한 hacking 이나오기시작한제 3 시기이후두영역은더욱더이원화됨
기술관점에따른공격기법 정보획득기법 (Scanning) Network 통신취약점을이용한공격 (TCP/IP 오류 ) System 관리잘못을이용한공격 software 구현상의오류를이용한공격 ( bug ) 은닉기법 (backdoor ) 서비스제공방해공격 (DoS) 자동공격 & 침투기법 (worm, trojan)
Scanning Reachable IP address Ping sweep Running TCP/UDP services Port scan System architecture & Oeration System type OS indentification DoS와더불어서 IDS 로그발생원인의대다수를차지
ICMP echo request ICMP is defined by RFC 792. ICMP ECHO request (ICMP type 8) Packet 을목적시스템에전송 그에대한응답으로 ICMP ECHO reply (ICMP type 0) Packet 이도달하였는지를체크 목적 IP 가살아있는지의여부를결정
ICMP echo request # nmap sp n 192.168.192.255/24 Starting nmap V. 2.53 by fyodor@insecure.org ( www.insecure.org/nmap/ ) Host (192.168.192.0) seems to be a subnet broadcast address (returned 1 extra pings). Still scanning it due to positive ping response from its own IP. Host (192.168.192.1) appears to be up. Host (192.168.192.3) appears to be up..... nmap run completed -- 256 IP addresses (108 hosts up) scanned in 5 seconds
Port Scan Ping Sweep 이후, 목적시스템의 TCP 나 UDP 포트에연결을통해서어떤서비스가실행중이거나 listening 상태에있는지를탐지 tcp connect() scan tcp syn scan (half-open scan) stealth scan udp scan
TCP port scan TCP 3-way handshaking
TCP connect() scan 목적시스켐의포트는 listening 상태임 SYN 패킷을목적시스템의포트에전송 목적시스템으로부터반환된패킷이 SYN/ACK 패킷인가? YES NO 반환된패킷이 RST/ACK 패킷으로예상되며목적시스켐의포트는 listening 상태가아님 ACK 를전송함으로써 three-way handshake 을종료 연결이 RESET 됨
TCP connect() scan Most basic form of tcp scan. need NOT root permission. scan by using many sockets in parallel. -> speedy scan. Using non-blocking I/O allows you to set a low time-out period and watch all the sockets at once. -> speedy scan. 단점은목적시스템의로그에남기때문에쉽게탐지될수있고필터링이가능
TCP syn scan 목적시스켐의포트는 listening 상태임 SYN 패킷을목적시스템의포트에전송 목적시스템으로부터반환된패킷이 SYN/ACK 패킷인가? YES NO 반환된패킷이 RST/ACK 패킷으로예상되며목적시스켐의포트는 listening 상태가아님 RST 패킷을목적시스템에보내어연결을해제한다. 연결이 RESET 됨
TCP syn scan often referred to as "half-open" scanning you don't open a full TCP connection Return SYN ACK indicates the port is listening. Return RST is indicative of a non- listener. You need root privileges to build these custom SYN packets. 로그에잡힐확률이적음.
TCP Stealth scan 비정상적인 tcp 패킷을던져주고그에따른반응을수집하여 port scan. SYN/ACK, FIN, XMAS, NULL flag 패킷을보냈을때 Closed port 는 RESET 패킷으로반응 Open port 는무반응 ( 무시 )
SYN/ACK scan 의도적으로 TCP three-way handshake 를무시 TCP three-way handshake 의첫번째단계를생략하고두번째단계인 SYN/ACK 패킷을먼저보내서그반응을통해정보를획득 Closed port Target 시스템은 SYN 패킷이전송되지않았음을알고보내어진패킷을오류로판단하여 RESET 대답 시스템의존재와해당포트가 closed 임을알수있음 Open port 보내어진 SYN/ACK 패킷무시 ( 무반응 )
FIN scan FIN 패킷을보낸후, 시스템의반응을통해정보를획득 Closed port Target 시스템은 SYN 패킷이전송되지않았음을알고보내어진패킷을오류로판단하여 RESET 대답 시스템의존재와해당포트가 closed 임을알수있음 Open port 보내어진 SYN/ACK 패킷무시 ( 무반응 ) # nmap sf 203.239.110.1
XMAS scan, NULL scan XMAS scan URG, ACK, PST, RST, SYN, FIN 플래그를모두세팅한패킷을보내는스캐닝기법 # nmap sx 203.239.110.1 NULL scan 모든플래그를 Off 한패킷을보내는스캐닝기법 # nmap sn 203.239.110.1
UDP Port Scan UDP port (RFC 768) 이용 send 0 byte udp packets to each port on the target machine. ICMP port unreachable 메시지가 return closed port 라고판단 무반응일경우 open port 라고판단 신뢰성이적음
Port scan 의보조기법 Random port scan 순차적인포트연결시도탈피 Slow scan 룰셋시간내시도패킷수를최소화 Decoy scan Source address spoof
OS Identification Banner Grabbing ALZZA Linux release 6.0 (May the Force be with you) Kernel 2.2.5-22 on an i586 login: # echo 'GET / HTTP/1.0\n' nc hotbot.com 80 egrep '^Server:' Server: Microsoft-IIS/4.0 TCP/IP Stack Fingerprinting TCP 스택을구현할때, 각 OS vendor 별로조금씩수치가다르게구현된것을이용하여특정 TCP 패킷을보내고반환되는응답을관찰하여원격시스템의운영체제를알아내는기법 # nmap O 203.239.110.1 TCP Sequence Prediction: Class=random positive increments Difficulty=5721956 (Good luck!) Remote operating system guess: Linux 2.1.122-2.2.14
TCP/IP Stack Fingerprinting FIN probe Bogus flag probe TCP Initial sequence number sampling Don't Fragment Bit TCP Initial Window ACK Value ICMP Error Message Quenching ICMP Message Quoting ICMP Error Message Echoing Integrity Type of Service (TOS) Fragmentation Handling TCP options
TCP initial number sampling 연결요청에응답할때 TCP 구현에따라선택되어지는 Initial sequence number 의패턴이틀림. 오래된버전의유닉스 : 64K 씩증가 FreeBSD, DG-UX, IRIX, Solaris : 시간에비례하여증가 Linux : 완전 random
Network 통신취약점공격 TCP/IP 의개방성과효율을위한단순함에기인한문제들 ICMP echo reply amplifier Block broadcast ping TCP SYN flooding TCP/IP stack tunning Sniffing Switch 사용으로 sniffing 확률을줄임 데이터암호화이외에완전한 defense 해법없음 Spoofing IP Spoofing, DNS Spoofing, Domain Spoofing, ARP Spoofing 특수경우를제외하고는완전한해법 / 점검방법없음 Session Hijacking
System 관리잘못을이용한공격 Account 도용 Password Cracking File / Directory Permission Error ( 예 :.rhosts) 최근에는거의피해사례없음
Software 구현상의오류를이용한공격 운영체제또는 Application 을개발한개발사의프로그래머잘못에의한문제점 bug 혹은 Vulnerability 를이용한공격 Bug ( 좁은의미의 vulnerability) 1990 년이래약 6000 건이상의보안관련 bug 가존재 ( Securityfocus Vulnerability database) 발표되는 bug 의 95% 는 trivial 실제 whitehat 영역에서피해사례로체감할수있는 bug 는 전체발표 bug 의 5% 미만
Software 구현상의오류를이용한공격 whitehat 영역에서피해사례로체감 의의미 Exploit 가용이 많은시스템이이 bug 에적용 Bug 가많이알려져있음 대책을강구하기가어려움 웜형태, remote 공격, rootshell 획득공격
Software 구현상의오류를이용한공격 경계영역문제 (boundary condtion error) Buffer Overflow Stack Overflow Stack buffer Overflow, Frame Pointer Overflow Heap Overflow Heap buffer Overflow, Free/Malloc Overflow 접근권한인증실패 (access validation error) 입력데이터확인오류 (input validation error) Format String Attack 웹페이지파일업로드공격 웹페이지중요정보공개공격 Cross Site Script 공격 Race Condition
Software 구현상의오류를이용한공격 예외상황처리오류 웹페이지중요정보공개오류 실행환경오류 패키지설치당시의 configuration의오류 Object 자동실행
Boundary Condition 문제 프로그램을실행중에입력가능한변수에, 그변수를위해할당된메모리영역보다더큰사이즈의데이터를입력했을때, 그변수영역이넘치게되고가까이있는 return address 가변조되게되어보안상문제가있는 instruction 을실행 소위, 버퍼오버플로우라고알려져있는수많은취약점들 OS vendor 의패치발표이후점검툴로점검가능 Access validation 문제 Ex) 웹서버에접속할경우사용자인증에관련된정보를유지하기위해, 특정파일에인증정보를저장하는데, 이파일을유출하거나위조할경우, 타사용자가이를이용하여원래사용자처럼웹서버에접속할수있음 점검툴로점검불가능
Input Validation 문제 EX) format string bug 의경우프로그래머가프로그램을개발할때 "printf" 계열함수를사용시포맷 argument 를지정을제대로하지않은경우에, 만약사용자가포맷문자를포함하고있는문자를만들어안전하지않은 printf 함수에사용하게되면메모리참조범위를벗어나보안상문제가있는 instruction 을실행 Format string bug 으경우 OS vendor 의패치발표이후점검툴로점검가능 웹페이지에대한 input validation error 는점검툴로점검불가능 Race Condition 문제 보안상문제가있는 System Program 과 Cracker 의 Exploit Program 이 Race( 경쟁 ) Condition( 상태 ) 에이르게하여 System Program 이갖는권한으로 (Set-User ID 가붙은경우 Root, Bin 등 ) File 에대한 Access 를가능 OS vendor 의패치발표이후점검툴로점검가능
Exceptional Handling 관련문제 대부분의프로그램이구현될때에는어떤기능을사용하기위해서는사용자가어떤행위를해야되는식으로구현이되어있으나, 만약개발자가예측하지않았고, 예외처리를제대로구현하지않은행위를사용자가할경우프로그램은보안상문제가있는 instruction 을실행 OS 에딸린실행프로그램의경우 vendor 의패치발표이후점검툴로점검가능 Web 홈페이지의경우점검툴로점검불가능 Package Initial Configuration 문제 패키지설치시초기설정환경이보안상문제가있는경우, 설정환경을바꿔주기전에해커의공격이있을수있음 OS vendor 의패치발표이후점검툴로점검가능
Buffer Overflow Buffer overflow? 컴파일러가배열의경계검사 (Boundary Check) 를하지않아선언된크기보다더큰데이터를기록함으로써발생되는현상 운영체제가스택이나힙영역에임의의데이터기록및실행을허용함으로써발생되는현상 Lower Memory Address Local variables (buffer area) Stack Frame Pointer Return Address Arguments Execution Stack Stack Frame Activation Record
함수의리턴주소변경ret Buffer Overflow 공격의대상 취약점이있는서버데몬및시스템관리프로그램 주로 root 소유의 suid 프로그램 공격의절차 취약점탐지및정보수집 OS, Program, Version, etc Exploit code from the well-known security portal sites 혹은직접 Exploit 프로그램작성 로컬및리모트공격용쉘코드작성 Let s exploit! text data buffer (our code) sfp parameters...
Intel Architecture32 CPU Stack? 연속된메모리공간으로서 Last In First Out (LIFO) 구조 함수의인자및결과값전달및지역변수용으로사용 메모리영역중에서최상위부분에위치 메모리하단방향으로증가 IA-32 에서는 4 바이트씩정렬 따라서 1 바이트변수도스택 4 바이트사용 Registers ESP - 스택의 Top 을가리킴 EBP - 호출된 procedure 를위한스택프레임내의고정 reference point 를나타냄. 저장된이전의 EBP 값을 sfp 라고함 EIP - 다음에수행할명령어의위치를가리킴
Stack Structure 0x08048000 code data bss bss.. stack arguments environment program name null null 0xbfffffff Lower Memory Address Local variables (buffer area) Stack Frame Pointer Return Address Arguments Execution Stack Stack Frame Activation Record
Overflow 전 Stack Structure Overflow 후 32 bit 32 bit buffer buffer 16 bytes buffer buffer 16 bytes sfp sfp ret ret 4 bytes 4 bytes sfp sfp ret ret 4 bytes 4 bytes To main????
Spanwing Shell Code shellcode 란? /bin/sh 를실행시키는기계어코드 shellcode 특징 메모리상의 shellcode 의위치를모르므로상대번지만사용 NULL 문자는버퍼에복사되지않으므로 0x00 코드는다른해당기계어코드로대체 CPU 마다다르게제작 buffer jump our code call /bin/sh sfp ret parameters
Spawning Shell Code Shell code의원형 완성된 shell code #include #include <stdio.h> jmp <stdio.h> jmp 0x1f 0x1f # 2 bytes bytes popl popl %esi %esi # 1 byte byte void void main() movl main() movl %esi,0x8(%esi) # 3 bytes bytes { xorl xorl %eax,%eax %eax,%eax # 2 bytes bytes char char *name[2]; movb *name[2]; movb %eax,0x7(%esi) # 3 bytes bytes movl movl %eax,0xc(%esi) # 3 bytes bytes name[0] name[0] = /bin/sh ; movb /bin/sh ; movb $0xb,%al $0xb,%al # 2 bytes bytes name[1] name[1] = NULL; movl NULL; movl %esi,%ebx %esi,%ebx # 2 bytes bytes execve(name[0],name,null); leal leal 0x8(%esi),%ecx # 3 bytes bytes leal leal 0xc(%esi),%edx # 3 bytes bytes int int $0x80 $0x80 # 2 bytes bytes xorl xorl %ebx,%ebx %ebx,%ebx # 2 bytes bytes movl movl %ebx,%eax %ebx,%eax # 2 bytes bytes inc inc %eax %eax # 1 bytes bytes int int $0x80 $0x80 # 2 bytes bytes call call -0x24-0x24 # 5 bytes bytes.string.string\"/bin/sh\ # 8 bytes bytes
실전에서의 Buffer Overflow 정확한 ret addr 을구하기힘들기때문에 NOP 코드를이용 buffer NOP NOP NOP... our code call /bin/sh sfp ret Q: Where is our code? A: Maybe parameters
Buffer Overflow 대책 운영체제설정차원에서의대책 사용자스택영역에데이터기록금지 함수로부터복귀할때스택의무결성 (integrity) 검사 코드수행금지 Linux Kernel patch from the Openwall Project http://www.openwall.com/linux/ Solaris 2.6 이상버젼 : prevent and log stack-smashing attack /etc/system 수정 set noexec_user_stack = 1 set noexec_user_stack_log = 1
Buffer Overflow 대책 보안성있는컴파일러및링크사용 GNU GCC 2.7.2.3 버전을패치한 StackGuard http://www.cse.ogi.edu/disc/projects/immunix/stackguard 복귀주소다음에 canary word 를위치시킴 canary word 가변경되면스택오버플로우공격의시도감지및보고 (syslog), 시스템종료. Random canary» 실행할때마다 canary value 를변경시켜, 공격자가예측하지못하도록함 Null canary(0x00000000),» 공격자가버퍼에널문자 (0x00) 를넣을수없다는점을이용 Terminator canary(combination of Null, CR, LF, -l)» NULL 문자로끝나지않는몇몇문자열함수의문자열끝문자이용
Buffer Overflow 대책 즉각적인보안패치 RedHat Linux http://www.redhat.com/apps/support/updates.html MS http://support.microsoft.com BSD 관련 http://www.freebsd.org/security/index.html Sun Solaris http://sunsolve.sun.com Digital ftp://ftp.compaq.com/pub HP/UX http://us-support3.external.hp.com IBM AIX ftp://software.watson.ibm.com/pub SGI IRIX ftp://ftp.sgi.com/security
Buffer Overflow 원천방지 프로그래머의관점에서의보안대책 Boundary 를검사하는컴파일러및링커사용 Boundary 를검사하는함수사용 사용자제함수들 strcat(), strcpy(), gets(), scanf(), sscanf(), vscanf(), vsscanf(), sprintf(), vsprintf(), gethostbyname() 사용권장함수들 strncat(), strncpy(), fgets(), fscanf(), vfscanf(), snprintf(), vsnprintf()
Buffer Overflow 원천방지 Example of Vulnerable Program Example of Secure Program (patch) insecure.c #include <stdio.h> #include <string.h> #include <ctype.h> int main(int argc, char **argv) { char buffer[1024]; if(argc > 1) { strcpy(buffer, argv[1]); } printf( buffer: %s\n,buffer); } secure1.c #include <stdio.h> #include <string.h> #include <ctype.h> #include <stdlib.h> int main(int argc, char **argv) { char buffer[1024]; int i; if(argc > 1) { if(strlen(argv[1]) >=1023) { fprintf(stderr, too long\n ); exit(0); } strcpy(buffer, argv[1]); } printf( buffer: %s\n, buffer); }
Q & A 운영체제, 공유, SNMP, finger, SMTP, Telnet, rusers, rpcinfo, NetBIOS 등의서비스정보노출 Log 및 monitoring 부족 Internet border router Community string 의취약성으로해커의라우터접근가능 F/W VPN Dial-up 불필요한서비스운영 (RPC, FTP 등 ) Web/DMZ servers remote access servers 파일노출가능성존재 취약한 CGI, ASP 및익명의 FTP 존재 Firewall / router ACL 설정오류 internal router Dedicated circuits Branch office Backbone switch 불필요한계정존재.rhosts 를통한접근제공 추측가능패스워드존재 Internal LAN 취약한 X windows 서비스운영 workstation Internal LAN workstation NT 공유존재및 UNIX NFS exports 보안정책 / 절차 / 표준 / 가이드라인부족 패치의미적용 mobile/home user