본문 바로가기

악성코드 주요 행위 분석 본문

보안/악성코드

악성코드 주요 행위 분석

Seongjun_You 2022. 9. 8. 01:48

윈도우 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
Comments