윈도우 API

- 대부분의 악성코드는 윈도우 플랫폼에서 동작

- 운영체제와 밀접하게 상호작용

 

https://these-dayss.tistory.com/100?category=991231 

 

윈도우즈 프로그래밍

윈도우즈(Windows) :: 미국의 마이크로소프트(Microsoft)사에서 만들었으며 83년 11월에 개발 시작, 85년 11월에 첫 버전 발표 :: 이미 시장을 장악하고 있었던 MS-DOS에 비해 멀티 태스킹이 가능 :: 훨씬 더

these-dayss.tistory.com

 

핸들(Handle)

- 윈도우, 프로세스, 모듈, 메뉴, 파일 등과 같이 운영체제에서 오픈되거나 생성

- 객체나 메모리 위치를 참조한다는 점에서 포인터와 같음

 

 

파일 시스템 함수

- 악성코드가 시스템과 상호작용하는 가장 일반적인 방식은 파일을 생성하거나 수정해 파일명을 구별하거나 기존 파일명을 변경하는 방식

- 식별자(Signature)로 사용 가능하다

- 파일을 생성해 그 파일에 웹 브라우징 내용을 저장한다면? 해당 스파이웨어 형태일 가능성이 높다

 

함수 설명
CreateFile 파일을 생성하고, 열 때 사용
기존 파일, 파이프, 스트림, I/O 장치를 열고 새로운 파일을 생성
+) dwCreateionDisposition 인자 : 이 함수가 새로운 파일을 생성하는지, 기존 파일을 오픈하는지 여부 제어
ReadFile
WriteFile
파일을 읽고 쓰는 데 사용
두 함수  모두 파일을 스트림 형태로 운영
ReadFile : 파일에서 몇 바이트를 읽고 나면, 그 다음 몇 바이트를 읽는 형식을 가짐
CreateFileMapping
MapViewOfFile
파일 매핑은 파일을 메모리로 로드해 쉽게 조작할 수 있게 함
CreateFileMapping : 파일을 디스크에서 메모리로 로드
MapViewOfFile : 매핑된 베이스 주소 포인터를 반환. 메모리 내 파일에 접근. 파일 포맷 파싱시 용이

파일 매핑은 윈도우 Loader 기능을 복제할 때 주로 사용

(파일 맵을 획득한 후 악성코드는 PE 헤더를 파싱해 메모리 내의 파일에 필요한 부분을 변경 -> 마치 OS 로더에 의해 로드된 것처럼 PE 파일을 실행)

 

 

공유 파일

- \\ServerName\share 나 \\.\ServerName\share로 시작하는 이름을 가짐

- 네트워크 상에 저장된 공유 폴더에서 디렉터리나 파일에 접근

 

 

윈도우 레지스트리

- 운영체제 설정이나 옵션 같은 프로그램 구성 정보를 저장

- 네트워킹, 드라이버, 시작, 사용자 계정, 다른 정보 등 거의 모든 윈도우 구성 정보 저장

- 레지스트리를 활용하는 악성코드? 영구 데이터나 설정 데이터 저장 / 컴퓨터 부팅 시 마다 자동으로 동작할 수 있게 수정

 

레지스트리 루트키 종류 설명
HKEY_LOCAL_MACHINE(HKLM) 시스템 전역 설정 저장
HKEY_CURRENT_USER(HKCU) 현재 사용자에 특화된 설정 저장
HKEY_CLASSES_ROOT 정의한 유형 정보를 저장
HKEY_CURRENT_CONFIG 현재 하드웨어 구성 설정, 특히 현재 설정과 표준 설정의 차이를 저장
HKEY_USERS 기본 사용자, 새로운 사용자, 현재 사용자의 설정을 정의

+) 내 컴퓨터\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run : 부팅 시 자동실행되는 값들을 담고 있음. 이곳에 레지스트리가 추가되거나 수정된다면 악성코드 행위를 한다고 의심해볼 수 있음!

 

 

+ <악성코드에서 레지스트리를 수정할 목적으로 사용하는 윈도우 API>

API 설명
RegOpenKeyEx 편집과 질의용으로 레지스트리를 오픈
RegSetValueEx 레지스트리에 새로운 값을 추가하고 데이터를 설정
RegGetValue 레지스트리 내의 값 엔트리용 데이터를 반환

 

 

서비스

- 악성코드가 새로운 코드를 실행하는 또 다른 방식은 서비스로 설치하는 방법!!

- 백그라운드 애플리케이션으로 실행하는 서비스를 사용, 프로세스나 스레드 없이 실행 (코드가 스케줄링돼 사용자 입력 없이 윈도우 서비스 관리자가 실행)

 

- 서비스 이용의 이점

    - SYSTEM 권한으로 실행(administrator나 사용자 계정보다 상위 권한)

    - 운영체제 시작 시 자동으로 실행

    - 작업관리자(Task Manager)에 프로세스가 보이지 않을 수 있음

 

- 서비스 API

    - OpenSCManager : 서비스 제어 관리자(Service control manager)에 핸들 반환

    - CreateService : 신규 서비스로 등록, 부팅 시 서비스의 자동/수동 시작 여부를 호출자가 지정

    - StartService : 서비스를 시작하고 서비스가 수동으로 시작하게 설정되어 있을 때만 사용

 

--> 이 API 사용 여부가 판단되면 악성코드 행위를 의심해볼 수 있음!

 

 

+) Autoruns 프로그램 = 운영체제가 시작 시 자동으로 실행하는 코드를 목록화. IE, 다른 프로그램으로 로드되는 DLL, 커널로 로드되는 드라이버 목록화. 전체 리스트가 아닐 수 있으니 너무 의존하지 않을 것

 

 

 

버클리 호환 소켓

- 이 소켓의 네트워크 기능은 Winsock 라이브러리에서 주로 ws2_32.dll에 구현

API 설명
socket 소켓 생성
bind 호출 전에 소켓을 특정 포트로 할당
listen 소켓이 인바운드 연결을 위해 리스닝하고 있음을 나타냄
accept 외부 소켓 연결을 오픈하고 연결을 받아들임
connect 연결을 외부 소켓으로 오픈하고 외부 소켓은 연결을 기다림
recv 외부 소켓에서 데이터를 수신
send 외부 소켓으로 데이터를 발송

--> 악성코드가 해당 API 함수를 사용하고 있다면 socket 을 이용한 네트워크 작업을 하고 있음을 예측할 수 있다!!

 

 

WinINet API

- Winsock API 보다 상위 수준의 API

- Wininet.dll에 저장

- HTTP, FTP와 같은 프로토콜을 구현

API 설명
InternetOpen 인터넷 연결 초기화
InternetOpenUrl URL에 연결할 때 사용(HTTP 페이지나 FTP 리소스에 사용할 수 있음)
InternetReadFile ReadFile 함수같이 프로그램이 인터넷에서 다운로드 한 파일에서 데이터를 읽음

 

 

DLL(Dynamic Link Libraries, 동적 링크 라이브러리)

- 현재 윈도우에서 다양한 애플리케이션끼리 코드를 공유하는 라이브러리를 사용하는 방식

- 다른 애플리케이션에 의해 실행할 수 있는 Export 함수를 포함

- 정적 라이브러리는 DLL 이전에 사용하던 표준 라이브러리로 프로세스를 별도로 메모리에 로드했었음

 

++ 악성코드 제작자가 DLL을 어떻게 이용할까?++

ⓐ 악성코드 저장용 

    exe 파일 프로세스당 하나만 가지기 때문에 dll을 사용하여 다른 프로세스에서 실행 가능

 

ⓑ 윈도우 DLL 사용

    거의 모든 악성코드는 윈도우와 상호작용할 수 있는 윈도우 OS DLL을 사용하여 악성코드 분석가에게 힌트 제공

 

ⓒ 외부 DLL 사용

    다른 프로그램과의 상호동작을 위해 외부 DLL 사용

 

ⓓ 윈도우 API 활용해 직접 다운로드하지 않고 파이어폭스의 DLL을 이용

 

 

 

프로세스

- 새로운 프로세스를 생성하거나 기존 프로세스를 변형해 현재 프로그램 외부에서 코드를 실행

- CreateProcess () 

 

스레드 : 윈도우 운영체제가 실행. 프로세스 내의 코드 일부를 실행

          : 운영체제가 스레드를 교체하기 전, CPU의 정보를 스레드 문맥에 저장 -> 스레드가 CPU 내부 레지스터 값 변경

 

 

+ Recent posts