악성코드 주요 행위 분석 본문
윈도우 API
- 대부분의 악성코드는 윈도우 플랫폼에서 동작
- 운영체제와 밀접하게 상호작용
- 최신정보 확인 http://soen.kr
핸들
- 윈도우, 프로세스, 모듈, 메뉴, 파일 등과 같이 운영체제에서 오픈되거나 생성
- 객체나 메모리 위치를 참조한다는 점에서 포인터와 같음
파일 시스템 함수
- 악성코드가 시스템과 상호작용하는 가장 일반적인 방식은 파일을 생성하거나 수정해 파일명을 구별하거나 기존 파일명을 변경
- 식별자로 사용 가능
- 파일을 생성해 그 파일에 웹 브라우징 내용을 저장한다면 해당 스파이웨어 형태일 가능성이 높음
- 함수
- CreateFile : 파일을 생성하고 열 때 사용
- ReadFile, WriteFile : 파일을 읽고 쓰는 데 사용
- CreateFileMapping, MapViewOfFile : 파일 매핑은 파일을 메모리로 로드해 쉽게 조작할 수 있게 함
파일 매핑은 윈도루 오더 기능을 복제할 때 주로 사용
파일 맵을 획득한 후 악성코드는 PE 헤더를 파싱해 메모리 내의 파일에 필요한 부분을 변경
마치 OS 로더에 의해 로드된 것처럼 PE파일을 실행
특수파일
- 드라이브 문자와 폴더명으로 접근할 수 없는 파일도 존재
공유파일
- \\ServerName\sharre나 \\?\ServerName\share로 시작하는 이름을 가짐
- 네트워크 상에 저장된 공유 폴더에 디렉터리나 파일에 접근
네임스페이스를 통해 접근 가능한 파일
- 운영체제 내에서 네임스페이스를 통해 접근
- 네임스페이스 : 고정된 숫자의 폴더와 각각 저장하는 다른 유형의 객체
- Win32 장치 네임스페이스는 접두사 \\.\를 이용-> 물리적 장치 접근하여 파일처럼 읽음
윈도우 레지스트리
- 운영체제와 설정이나 옵션 같은 프로그램 구성 정보를 저장
- 수직 구조의 정보 데이터베이스
- 네트워킹, 드라이버, 시작, 사영자 계정, 다른 정보 등 거의 모든 윈도우 구성 정보 저장
- 레지스트리를 활용하는 악성코드
- 영구 데이터나 설정 데이터 저장
- 컴퓨터 부팅 시마다 자동으로 동작할 수 있게 수정
레지스트리 구성 값
- root key : 루트키라 부르는 다섯 가지 최상위 부분으로 나눠짐 때로는 Hkey와 하이브란 용어를 사용
- subkey : 서브키는 폴더 내의 서브폴더 역할
- key : 키는 또 다른 폴더나 값을 저장할 수 있는 레지스트리 내 폴더(루트키와 서브키는 모두 키다)
- value entry : 값 엔트리는 순차적인 이름과 값 쌍임
- value or data : 레지스트리 엔트리 내에 저장된 데이터
루트키 종류
- HKEY_LOCAL__MACHIN(HKLM) : 시스템 전역 설정 저장 - 중요
- HKEY_CURRRENT_USER(HKCU) : 현재 사용자에 특화된 설정 저장 - 중요
- HKEY_CLASSES_ROOT : 정의한 유형 정보를 저장
- HKEY_CURRENT_CONFIG : 현재 하드웨어 구성 설정, 특히 현재 설정과 표준 설정의 차이를 저장
- HKEY_USERS : 기본 사용자, 새로운 사용자, 현재 사용자의 설정을 정의
서비스
- 악성코드가 새로운 코드를 실행하는 또 다른 방식은 서비스로 설치하는 방법
- 백그라운드 애플리케이션으로 실행하는 서비스를 사용, 프로세스나 스레드 없이 실행
- 서비스 이용의 이점
- SYSTEM 권한으로 실행
- 운영체제 시작 시 자동으로 실행
- 작업관리자에 프로세스가 보이지 않을 수 있음
서비스 API
- OpenSCManager : 서비스 제어 관리자에 핸들 반환
- CreateService : 신규 서비스로 등록, 부팅 시 서비스의 자동/수동 시작 여부를 호출자가 지정
- StartService : 서비스를 시작하고 서비스각 수동으로 시작하게 설정되어 있을 때만 사용
자동으로 시작하는 프로그램
- Autoruns는 운영체제가 시작 시 자동으로 실행하는 코드를 목록화
- IE, 다른 프로그램으로 로드되는 DLL, 커널로 로드되는 드라이버 목록화
- 자동으로 코드가 실행하게 되는 25~30 군데 위치를 조사
- 전체 리스트가 아닐 수 있음
일반 레지스트리 함
- 악성코드에서 레지스트리를 수정할 목적으로 사용하는 윈도우 API
- RegOpenKeyEx : 편집과 질의용으로 레지스트리를 오픈
- RegSetValueEx : 레지스트리에 새로운 값을 추가하고 데이터를 설정
- RegGetValue : 레지스트리 내의 값 엔트리용 데이터를 반환
.reg 파일을 이용한 레지스트리 스크립트
- reg 확장자를 가진 파일은 가독성이 있는 레지스트리 데이터를 포함
- 더블 클릭하여 실행하면 담고 있는 정보를 자동으로 레지스트리로 병합해 수정
WinlNet API
- Winsock API보다 상위 수준의 API
- Wininet.dll에 저장
- HTTP, FTP와 같은 프로토콜을 구현
- InternetOpen : 인터넷 연결 초기화
- InternetOpenUrl : URL에 연결할 때 사용한다(HTTP 페이지냐 FTP 리소스에 사용할 수 있음)
- InternetReadFile : ReadFile 함수 같이 프로그램이 인터넷에서 다운로드 한 파일에서 데이터를 읽음
DLL
- 현재 윈도우에서 다양한 애플리케이션끼리 코드를 공유하는 라이브러리를 사용하는 방식
- 다른 애플리케이션에 의해 실행할 수 있는 익스포트 함수를 포함
- 정적 라이브러리는 DLL이전에 사용하던 표준 -> 프로세스 별로 메모리에 로드
악성코드 제작자가 DLL을 이용하는 법
- 악성코드 저장용 : EXE 파일 프로세스당 하나만 가지기 때문에 DLL을 사용하여 다른 프로세스에서 실행 가능
- 윈도우 DLL 사용 : 거의 모든 악성코드는 윈도우와 상호작용할 수 있는 윈도우 OS DLL을 사용하여 악성코드 분석가에게 정보 제공
- 외부 DLL 사용 : 다른 프로그램과의 상호동작을 위해 외부 DLL을 사용
- 윈도우 API를 활용해 직접 다운로드하지 않고 파이어폭스의 DLL을 이용
프로세스
- 새로운 프로세스를 생성하거나 기존 프로세스를 변형해 현재 프로그램 외부에서 코드를 실행
스레드
- 프로세스는 실행 컨테이너, 스레드는 윈도우 운영체제가 실행
- 프로세스 내의 코드 일부를 실행
스레드 문맥
- 운영체제가 스레드를 교체하기 전에 CPU의 정보를 스레드 문맥에 저장
- 스레드가 CPU내부 레지스터 값 변경
뮤텍스를 이용한 내부 프로세스 조정
- 뮤텍스 : 여러 프로세스와 스레드를 조정하는 전역 개체, 커널에서는 뮤턴트라고 부르기도 함
- 뮤텍스 메커니즘의 특징
- Atomicity : 하나의 쓰레드가 mutex를 이용해서 잠금을 "시도하는 도중"에 다른 쓰레드가 mutex 잠금 불가
- Singularity : 만약 스레드가 mutex "잠금을 했다면" 해당 스레드가 mutex 잠금을 해제 하기 전까지 다른 어떠한 쓰레드도 mutex 잠금 불가
- Non-Busy Wait : 스레드는 다른 스레드가 락을 해제하기전까지 "해당 지점에 머물러 어떠한 CPU자원도 소비하지 않음"
뮤텍스 API
- 생성 : CreateMutex
- 열기 : OpenMutex
- 삭제 : ReleaseMutex
COM 서버 악성코드(컴포넌트 객체 모델)
- BHO라는 IE의 외부 플러그인을 사용하여 구현
- 특정 프로세스 실행 없이, 인터넷 트래픽 모니터링, 브라우저 사용 추적, 인터넷 통신
- DllCanUnloadNow, DllGetClassObject, DllInstall, DllRegisterServer, DllUnregisterServer
네이티브API
- 악성코드 제작사 사이에 흔히 사용하는 하위 수준의 윈도우 상호 작용 인터페이스
- 악의적이지 않은 프로그램은 거의 사용하지 않음
- Ntdll.dll에 정의되어 있음
시스템, 프로세스, 스레드, 핸들, 기타 항목에 관한 정보 수집에 이용
- NtQuerySystemInformation
- NtQueryInformationProcess
- NtQueryInformationThread
- NtQueryInformationFile
- NtQueryInformationKey
'보안 > 악성코드' 카테고리의 다른 글
연습 샘플 분석 - 2 (0) | 2022.09.13 |
---|---|
연습 샘플 분석 - 1 (2) | 2022.09.09 |
IDA 실습-2 (0) | 2022.09.06 |
IDA 실습-1 (0) | 2022.09.05 |
기초동적분석 (0) | 2022.08.22 |