윈도우 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 내부 레지스터 값 변경
'Study > Reversing' 카테고리의 다른 글
Lena 5번 풀이/Rena's Reversing Tutorial 05 (0) | 2021.11.10 |
---|---|
Lena 4번 풀이/Rena's Reversing Tutorial 04 (0) | 2021.11.10 |
고급 정적 분석 by IDA (0) | 2021.11.10 |
Lena 3번 풀이/Rena's Reversing Tutorial 03 (0) | 2021.11.03 |
악성코드 분석 (0) | 2021.11.03 |