SYSENTER/INT 2E

SYSENTER / INT 2E 윈도우에서 사용하는 winapi들은 대부분 커널레벨에서 구현이 되어있다. 그렇기 때문에 그냥 디렉터리에 들어 갈때도 웹서핑을 할때도 인지하지는 못하지만 컴퓨터는 수많은 시스템콜을 호출하게된다.  어플리케이션 레벨(Ring 3)에서 커널레벨(Ring0)로 진입하기 위한 방법은 소프트웨어 인터럽트, 콜게이트(INT 2E)를 사용하거나 Fast System Call(SYSENTER)를 사용하는 2가지의 방법으로...
Read more

DLL Dynamic Loading

dll injection이나 메모리 관리상의 문제로 인해 프로세스 로딩시에 모든 dll을 로딩 하지 못할 수 있다. 이런 경우 dynamic loading 으로 dll을 메모리에 로딩 시킬 수 있다. This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more...
Read more

code injection

code injection은 다른 프로세스에 내 코드를 심어 다른 프로세스가 내 코드를 수행하게 한다. 코드 인젝션의 코드를 간략히 설명해보면 1. 인젝션 할 코드(기계어)도 내 프로세스 메모리에 올라간다. 2. 인젝션 대상 프로세스를 suspend로 생성하고 3. 내 프로세스 메모리를 모두 읽어서 인젝션 대상 프로세스에 쓴다. 4. context 구조체로 eip를 injectedCode() 함수시작로 맞춰주고 5. 인젝션 당한 프로세스를 실행 시킨다. *injectedCode() 는 내 프로세스에 맞게 컴파일된 기계어이므로 함수의 주소를 못찾아갈수도 있기 때문에 dll을 동적으로 로드해 주어야한다. ...
Read more

stack, prologue, leave, ret

임시 자원들을 관리하기 위하여 프로세스는 stack(쓰레드마다 stack이 생성된다.)이라는 메모리 영역을 할당받아 관리한다. stack 자료구조는 후입선출법(LIFO)으로 나중에 들어온 데이터를 먼저 뽑아쓰는 구조로 stack 메모리는 stack자료구조를 push, pop과 esp, ebp로 구현한다. esp는 스택의 최상단을 포인팅, ebp는 스택의 베이스를 포인팅하는 레지스터이고 push data는 stack 상단에 data를 넣고 esp를...
Read more

mutex를 이용한 중복실행 방지

운영체제는 컴퓨터 자원을 안전하게 관리하여야 한다. critical resource 에 대해 경쟁 관계가 있는 프로세스들이 존재하는 경우에 Mutual exclusion, deadlock, starvation의 제어 문제가 발생 할 수 있다. deadlock은 세마포어를 사용하여 해결 할 수 있다. 세마포어는 카운트 값을 주고 critical section에 접근 할 수 있는 프로세스의 수의 제한을 두어 프로세스가 자원을 점유할 때 카운트를 -1 해주고 자원을 반납할 때 +1 해주는 식으로 deadlock을 해결한다. Mutex는 2진 세마포어와 비슷하다.(카운트 = 1, 쓰레드) 자원에 오로지 하나의 쓰레드만 접근 할 수 있게 한다. Mutex를 사용하여 중복 실행 방지코드를 작성해보자. ...
Read more

CVE-2013-3897 취약점 분석 보고서

 이 자료는 우리가 KITRI (한국정보기술연구원) 침해대응 과정 중 수료 프로젝트로 진행했던 자료이다.   취약점을 분석해논 우리나라 자료가 거의 존재하지 않았기 때문에 어떻게 분석해야 하는지 매우 막막했다. 특히 3897 취약점은 인터넷 익스플로러(IE Explorer)의 취약점이었기 때문에 디버깅 하기가 매우 까다로웠다. 처음 분석을 시도하는 우리가 POC 를 처음부터 작성한다는 것은 무리로 보였으므로, 먼저 POC가 존재하는지 파악했고 다행히 POC가 ExploitDB에 존재했기 때문에 해당 취약점에 대한 이해도를 높일 수 있었다. 존재하는 POC를 우리의 환경과 필요에 맞게 재작성하여 사용했다.  처음 분석한 IE...
Read more

SEH overwriting

SEH overwriting (stackoverflow) victim : windows XP SP3 32bit, globalSCAPE secure FTP server (192.168.50.152) attacker : backtrack5 R2 32bit FTP 커맨드 입력 받을 때 입력받는 문자열에 대한 길이 체크를 안하기 때문에 stack...
Read more

UPX packing

UPX packing 개발자는 파일의 크기를 줄이거나 분석하기 어렵게 하기 위해서 packer를 사용하여 응용프로그램을 packing한다. packer에는 여러 종류가 있는데 가장 기본적인 UPX 패커의 동작원리를 보면서 packer에 대해 이해해보자 패킹작업을 수행하면 위의 그림대로 code와 파일 복구를 위한 IAT등을 UPX1영역에 복사하고 복구를 위한 recovery code가 그 위에 작성되고 ep가 recovery...
Read more

process 생성시 debugger로 물기

디버깅을 하다보면 프로세스가 createprocess나 resumethread로 새로운 프로세스를 실행 시키는 경우가 있다. 새롭게 로딩된 프로세스를 디버깅하기 위해서는 레지스트리 키값을 생성 해주면 된다. 위 그림과 같이  HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows NT/CurrentVersion/Image File Execution Options/  밑에 새롭게...
Read more

walking process & DLL loading

현재 메모리에 올라가 있는 process 목록을 구하는 api  CreateToolHelp32Snapshot()  Process32First()  Process32Next() walking process API를 이용해 explorer.exe 프로세스를 찾아서 explorer.exe의 자식 프로세스들을 모두 종료 시키는 코드 악성코드의 DLL injection api  GetProcAddress()  LoadLibrary()  CreateRemoteThread() walkingprocess & DLL loading.p...
Read more