기본 콘텐츠로 건너뛰기

라벨이 SystemHacking인 게시물 표시

Easy-RM-MP3-Converter_xp

Easy-RM-MP3-Converter_xp Easy RM MP3 Converter Buffer Overflow (XP) 개요 Corelan Team 의 버퍼 오버플로우 튜토리얼 프로그램으로 유명한 Easy RM MP3 Converter의 버퍼 오버플로우를 진행해보자. 목적 윈도우즈 환경 버퍼 오버플로우 취약점 수행 과정 파악 목표 immunity 디버거 기본 사용법 숙지 기초적인 mona 플러그인 활용 방법 숙지 윈도우즈 XP 환경 스택 버퍼 오버플로우 수행 과정 이해 내용 실습은 대상 프로그램에서 크래시가 발생된다는 것을 파악한 상태에서 시작한다. 입력 값 저장 위치에서 EIP까지의 오프셋 값을 파악하기 위해서 mona 플러그인으로 패턴을 생성한다. mona 플러그인을 이용한 패턴 생성 !mona pc 30000 mona 플러그인 최대 패턴 수: 20280 mona 플러그인으로 생성한 패턴을 프로그램에 전달하여 크래시가 발생된 시점에 EIP에 삽입된 패턴을 확인하면 EIP를 덮어쓰기 위해 얼마만큼의 데이터를 입력될지 파악할 수 있다. 파악한 오프셋 값이 정상 동작되지 않을 때는 최대 패턴 수를 더해서 사용한다. (최대 패턴 수를 순회하여 패턴이 생성된다.) 크래시 유발 m3u 파일 생성 패턴 파일을 열어 ASCII 데이터를 제외한 모든 값을 제거한다. 그리고 생성한 패턴을 읽어와 m3u 파일을 생성하는 파이썬 스크립트를 작성하여 실행한다. pattern_reader = open ( "pattern.txt" , 'r' ) crash_creater = open ( "01_crash.m3u" , 'w' ) crash_creater . write ( pattern_reader . read ( ) ) pattern_reader . close ( ) crash_creater . close

DLL Hijacking

DLL Hijacking Windows의 높은 시장 점유율이 완벽한 보안으로 연결되지는 않는다. DLL Hijacking이 그 대표적인 예로 비즈니스 어플리케이션에 많은 영향을 미치고 있다. Windows DLL DLL(Dynamic-Link Libraries)는 데이터와 실행가능한 코드의 모음이다. 소프트웨어 개발 시 DLL을 이용함으로써 쉬운 소프트웨어 업데이트와 어플리케이션 간의 DLL 파일 코드 공유를 통한 메모리 사용률 감소를 기대할 수 있다. Windows DLL Search Order 프로그래머들은 종종 절대경로를 지정하지 않고 DLL 파일을 사용하며, 이는 DLL Hijacking을 야기시키는 결과를 가져온다. 마이크로 소프트에서는 다음과 같은 과정을 거쳐 DLL 파일을 찾는다. Created with Raphaël 2.1.2 Directory of the Application Current Directory 16 bit System Directory Windows Directory Directory in PATH value Principles of DLL Hijacking 우리는 Windows가 DLL 파일을 찾는 방식을 통해서 DLL Hijacking을 이해할 수 있다. 예를 들어 어떤 어플리케이션에서 function.dll 파일이 필요한 데 절대경로가 지정되어 있지 않다면, 악의적인 사용자가 function.dll 파일이 위치한 경로보다 우선 순위가 높은 곳에 자신의 DLL 파일을 위치시켜 악의적인 코드를 실행시키게 할 수 있다. Finding DLL Hijacking Vulnerabilities DLL Hijacking을 찾는 좋은 방법은 Process Monitor 를 활용하는 것이다. 프로그램을 실행 시 Process Monitor 를 이용하여 절대경로를 지정하지 않고 불러오는 DLL 파일이 존재하는 지 확인한다. Process Monitor 적용 필터 Operation is Que

Windows-Kernel-Exploit

Windows-Kernel-Exploit 1. 개요 1.1. 왜 터널인가. 난이도가 높다. DEP, ASLR, UAC, Heap checks, Protected Mode, Sandboxes 등을 유저 모드에 도입하여 유저 모드와 난이도가 비슷하거나 오히려 더 쉬울 수도 있다. 유저 모드 보안과 병행한 많은 OS 기능이 커널로 이동하여 새로운 사용자 - 커널 인터페이스가 도입된 후 커널의 공격 영역이 크게 증가했다. 1.2. 무엇이 다른 가 잘못하면 블루스크린이나 시스템 재부팅으로 이어질 수 있다. 사용 권한에 대해 걱정할 필요가 없다. 더 많은 지식이 필요하다. 프로세스 경계가 없으므로 더 많은 것을 해볼 수 있다. 1.3. 필요 배경지식 Kernel APIs Memory Layout Interrupts, IRQLs, DPCs, IRPs Synchronization: Events, Spinlocks, Mutexes, Timers, Semaphores, Resources Paging mechanism Intel System Architecture Device Driver structure, MJ functions, IOCTLs 1.4. 취약점 연구 먼저 하이 레벨 접근법부터 시작하자 복잡한 로직을 찾는다. 서로 다른 팀의 협력이 필요한 인터페이스가 취약하다(예를 들어 사용자와 커널 간의 상호 작용이 필요한 부분) Remote 취약점보다 권한 상승이 더 쉽다. 여러 약한 공격이 하나의 강력한 공격으로 구성될 수 있다. 2. 본론 2.1. 취약점 발견을 위한 세 가지 접근법 하이 레벨 접근법 전체 시스템의 동작 과정을 이해하고 취약한 부분을 찾는다. 로우 레벨 접근법 복잡해보이는 함수를 찾고 분해하며 버그를 찾는다. 퍼징 접근법(블랙 박스 / 무차별 대입) 가능한 모든 유형의 값을 삽입하여 충돌을 유발시키고 충돌 정보를 살펴본다. 2.1.

Buffer-Overflows_2

Buffer-Overflows_2 Off-by-one buffer overflow 는 단일 바이트 값이 오버플로우된 경우로 보통 Null 종료 버그 나 libc 함수 사용 시 계산 실수로 인해 발생된다. Adjacent memory overflows 는 Null 종료 버그 를 이용하여 두 문자열을 연결하는 경우로 메모리 상에서 두 버퍼가 나란히 붙어있어 이러한 명칭을 가진다. 예를 들어 Null 종료 버그 로 인해 종료가 제대로 되지 않으면 strlen() 함수와 같이 Null 종료 에 의존적인 함수들이 인접한 메모리를 계속 읽게 된다. Off-by-one buffer overflow 다음은 Off-by-one buffer overflow 의 예시로 메모리 색인 시 Off-by-one buffer overflow 가 발생한다. static int b64_decode( const char * str, unsigned char * space, int size ) { const char * cp; int space_idx, phase; int d, prev_d = 0 ; unsigned char c; space_idx = 0 ; phase = 0 ; for ( cp = str; *cp != '\0' ; ++cp ) { d = b64_decode_table[( int ) *cp]; if ( d != - 1 ) { switch ( phase ) { case 0 : ++phase; break ; case 1 : c = ( ( prev_d << 2 ) |

Buffer-Overflows_1

Buffer-Overflows_1 버퍼 오버플로우 취약점은 힙 기반과 스택 기반 두 가지 종류로 분류한다. 힙 기반 오버플로우 는 동적으로 메모리를 할당할 때 메모리 영역에 과도한 값을 채워 넣어 유발시키며 보통 프로그래머의 계산 실수로 발생된다. 스택 기반 오버플로우 는 정적인 크기의 로컬 버퍼에서 저장하도록 의도된 것에 비해 많은 데이터를 의도적으로 삽입하여 발생시킨다. Stack Based 다음은 스택 기반 오버플로우의 예시로 일반적으로 사용되는 IMAP 서버의 cyrus-imapd에서 발생된 오버플로우이다. IMAP(Ineternet Message Access Protocol) 응용 계층 인터넷 프로토콜 중 하나로, 원격 서버로부터 TCP/IP 연결을 통해 이메일을 가져오는데 사용된다. 출처: 위키피디아 Cyrus IMAP Server Cyrus IMAP Server는 카네기 멜론 대학교에서 개발한 이메일 서버 소프트웨어이다. static int popd_canon_user(sasl_conn_t *conn, void *context, const char *user, unsigned ulen, unsigned flags, const char *user_realm, char *out, unsigned out_max, unsigned *out_ulen) { char userbuf[MAX_MAILBOX_NAME+ 1 ], *p; size_t n; int r; if (!ulen) ulen = strlen (user); if (config_getswitch(IMAPOPT_POPSUBFOLDERS)) { //if popsubfolders //configed /* make a working copy of the auth[z]id *