본문 바로가기

프로젝트 개인공부/악성코드 분석

[악성코드 분석] API 기초와 API를 이용한 악성코드 분류

API를 가지고 악성코드를 분석하기 위해 API는 무엇이고 어떻게 악성코드를 판별하는지 공부하겠습니다



본 게시글은 '보안공학연구논문지 (Journal of Security Engineering), 제 8권 제 5호 2011년 10월'에 있는

'문자열과 API를 이용한 악성코드 자동 분류 시스템' 논문을 참고하여 제가 이해한 대로 정리했습니다

 http://www.sersc.org/journals/JSE/vol8_no5_2011/8.pdf


API

Application Programming Interface로 응용프로그램 프로그래밍 인터페이스 입니다.

응용프로그램에서 시스템 자원을 사용할 수 있도록 운영체제나 프로그래밍 언어가 제공하는 미리 정해진 메소드 입니다


가독성을 높이기 위하여 잘라서 쓰겠습니다

응용프로그램은

시스템자원을 사용 하거나

다른 응용프로그램과 상호작용을 할 때

반드시 API를 통과해야 하며

프로그램 내부에서 호출되는 함수형태로 구현


즉 API는 시스템자원 사용과 다른 응용프로그램과 상호작용을 할때 반드시 필요합니다


Windows 에서는 Windows API로 제공을 하는데 동적 라이브러리(DLL)에 포함되어 있으며

윈도우 프로그래밍시 DLL을 링크해서 사용 가능합니다


Windows API는 사용자모드와 커널모드에서 동작하고 커널모드에서 동작하는 API를 Native API라고 합니다

커널모드=Native API


DLL 

설명 

API 

Kernel32.dll 

메모리관리, 파일 입출력 등 윈도우 커널이 제공하는 모든 작업 처리 

LoadLibraryA, GetCurrentProcess, ExitProcess, TerminateProcess 등

User32.dll 

모든 윈도우 로직을 조작하기 위한 사용자 인터페이스 제공 

MessageBoxA, CreateWindowExA, SetCaoture, SendMessageA 등 




API 리스트 추출 방법

API리스트를 추출하는 방법은 2가지가 있는데
1. 바이너리 실행파일 자체에서 추출
2. 프로그램 동작 중 호출되는 API를 후킹하는 방법
이 있습니다

1. 바이러니 실행파일 자체에서 추출

윈도우에서 실행가능한 파일은 PE파일 포맷을 따르게 되는데 이는 윈도우 운영체제 로더가 실행코드를 관리하는데 필요한 정보를 캡슐화한 데이터 구조입니다
(윈도우에서 실행가능파일은 PE포맷을 따름. 그래서 PE는 윈도우 운영체제 로더가 실행코드 관리를 하는데 필요한 정보를 캡슐화한 데이터 구조)

PE파일 포맷에는 링크를 위한 DLL과 API의 Import 및 Export테이블 등을 포함하고 있으며 프로그램이 실행되면 운영체제 로더가 이를 분석하여 필요한 DLL을 메모리에 함께 로드하기 때문에 PE파일 포맷을 분석하여 사용될 API의 이름과 실행되면서 할당되는 주소가 저장되는 테이블을 추출할 수 있는데 이러한 테이블을 IAT(Import Address Table)이라고 합니다

요약
(PE파일포맷은 링크를위한 DLL, API의 Import, Export테이블 등을 포함하고 있습니다
1. 프로그램이 실행되면 운영체제 로더가 이를 분석하여
2. 필요한 DLL을 메모리에 함께 로드해서 
3. PE파일 포맷을 분석
4. 사용될 API의 이름과 실행
5. 할당되는 주소가 저장되는 테이블을 추출
6. 이 테이블을 IAT라고 합니다)

따라서!!

바이러니 실행파일 자체에서 추출하는 방법은 PE파일 분석을 통해 IAT를 찾고

IAT로부터 포함된 API리스트를 추출하는 방법입니다



2. 프로그램 동작 중 호출되는 API를 후킹

주로 Native API에 대한 정보를 얻기 위해 사용됩니다

이러한 커널 후킹을 이용한 방법에는 
1) SSDT(System Service Descriptor Table)후킹
2) IDT(Interrupt Descriptor Table)후킹 
두가지가 존재합니다


SSAT후킹

커널에서 서비스를 받기 위해 필요한 테이블내 함수 메모리 주소를 변경 혹은
테이블을 리다이렉트 함으로서 추출

IDT후킹

IDT내 인터럽트 처리경로를 변경하여 특정 인터럽트를 후킹함으로써 API를 추출



변종 악성코으의 경우 사용하지 않는 기능을 프로그램에 추가하여 생성되는 경우가 많은데 이러한 동적 분석 방법은 실제 프로그램이 동작하기 위해 호출하는 API만을 추출할 수 있기 때문에 더욱 정확한 분석이 가능합니다

또한 인터럽트후킹 방식을 사용하여 호출되는 API 항목 및 그 횟수를 측정하여 유사도 계산에 활용합니다