본문 바로가기

SWLUG/악성코드

[악성코드] 예제로 배우는 악성코드 분석 - 동적분석(1)

동적 분석

: 분석대상 파일(악성코드)을 직접 시스템에서 실행시킨 후, 일어나는 변화를 모니터링하여 행동 패턴을 분석하는 방법

 

 

1. 분석 환경

 

(1) Virtual Box

- 동적 분석은 실제로 악성코드를 실행시키는 분석 방법이기 때문에 가상환경에서 동적 분석을 수행하여야 함.

- 가상환경을 구축하기 위해서는 가상 이미지 파일(.iso)이 필요

 

아래 글을 참고하여 iso 이미지 파일을 만들어준다.

 

윈도우10 순정 ISO 파일 다운로드 방법

윈도우10 최신 버전 ISO 파일을 다운로드 받기 위해서는 설치 도구 프로그램을 이용하는 것이 일반적입...

blog.naver.com

 

 

 

 

(2) 두 가지 기능 활성화

- 공유폴더 설정

( 버추얼박스에서 호스트와 게스트 간 파일을 주고 받는 방법으로 분석 대상 파일이나 동적 분석 프로그램 등을 옮길 때 사용)

 

* 설정에서 '공유폴더’ 클릭 후, 오른쪽에 폴더 추가 버튼을 눌러 공유대상 폴더 경로를 지정해준 후 '자동 마운트', '항상 사용하기' 체크 후 저장

 

 

- 스냅샷 기능

( 일종의 백업 기능으로, 운영체제의 과거 상태를 마치 사진을 찍듯이 저장한 후 돌아가고 싶을 때 그 상태 그대로 복원하는 기능)

 

- 스냅샷을 이용한 복원 방법

버추얼박스 메인화면에서 가상환경 옆 목록 아이콘 선택 후 원하는 스냅샷을 지정하여 '복원(R)'버튼을 클릭하면 복원을 진행

 

* 가상환경에 접속하여 '머신 -> 스냅샷 찍기'를 선택하면 현재 상태 그대로의 환경을 백업

* 악성코드 동적 분석을 진행하다 보면 PC의 설정이나 환경 등이 많이 변화하고 초기 상태로 되돌리기 어렵기 때문에 꼭 초기 상태를 스냅샷으로 저장해놓고 분석을 진행

 

 

 

2. 윈도우 환경 분석

 

 휘발성 비휘발성 데이터 - 시작 프로그램, 성능 확인, 프로 세스, 작업 스케줄러, 통신 상태, 윈도우 로그 등

 

* 휘발성 데이터(Volatile Data)

: 전원의 공급이 끊기거나 시간이 흐름에 따라 자연히 저장 공간에서 사라지는 데이터를 의미

 

* 비 휘발성 데이터(Non Volatile Data)

: 컴퓨터 시스템의 보조 기억 장치(HDD, SSD 등) 저장되어 전원이 공급되지 않아도 유실되지 않는 데이터를 의미

 

 

(1) 프로세스 확인

 

프로세스현재 컴퓨터에서 실행중인 프로그램을 의미한다.

윈도우 OS에서 실행중인 프로세스는 '작업관리자 一> 프로세스'에서 확인

 

- 포그라운드 프로세스(Foreground Process) : 화면 상에서 실행되는 프로세스

- 백그라운드 프로세스(Background Process) : 화면에 뜨지 않고 눈에 안보이는 형태로 실행되고 있는 프로세스

 

 

 

 

(2) 서비스 및 시작 프로그램 확인

 

- 서비스 : 일종의 프로그램으로 컴퓨터 부팅 시 실행되어, 운영체계를 기능적으로 돕기 위하여 지속적으로 실행되는 프로그램, 프로세스의 집합을 의미

- 윈도우에 등록되어 있는 서비스를 확인하는 방법 : 윈도우 하단 검색 창에 '시스템 구성' 또는 msconfig 입력 시 접속 가능

- 시스템 구성 -> 서비스 접속 시, 등록되어 있는 서비스 및 제조업체, 상태 등의 목록을 확인할 수 있음.

 

-> 악성코드의 경우 제조업체 등록이 되어있지 않은 경우가 많음 -> 서비스명이 의심스럽거나 제조업체가 없거나 사용하는 서비스가 아닐 경우 분석해볼 필요 있음

창 하단에 '모든 Microsoft 서비스 숨기기(H)' 라는 기능 -> Microsoft에 의하여 실행되는 서비스를 안보이게 필터링해주기 때문에 악성코드를 찾기에 더 수월함

 

 

- 시작 프로그램 : 윈도우가 시작될 때 자동으로 실행되는 프로그램을 집합을 일컫음

악성코드의 경우 윈도우 재부팅시, 지속적으로 실행하기 위하여 시작 프로그램 레지스트리에 등록하는 행위를 수행하는 경우가 많기 때문에 시작 프로그램을 점검하여 의심스러운 프로그램이 등록되어 있는지 확인이 필요

- '작업 관리자 一 시작프로그램' 항목에서 확인 가능

 

 

(3) 네트워크 통신 상태 확인

 

악성코드는 종류에 따라 외부와 지속적으로 통신하여 추가 악성코드 감염을 유도하거나 정보유출 행위를 수행하는 경우가 많다. 그렇기 때문에 악성코드의 C&C서버나 경유지로의 접근 시도를 확인하기 위하여 네트워크 통신 상태를 확인해보는 것이 좋다.

 

윈도우 네트워크 통신 상태를 확인하는 방법

명령 프롬프트(cmd)창에 접속 하여 netstat명령어를 이용하면 됨.

* 명령 프롬프트(cmd) 접속 시, 관리자 권한으로 접속할 것

 

 

* netstat(network statistics) : 전송 제어 프로토콜, 라우팅 테이블, 수많은 네트워크 인터페이스 네트워크 프로토콜 통계를 위한 네트워크 연결을 보여주는 명령줄 도구

 

netstat 옵션

 

*-anob 옵션으로 검색하게 되면 네트워크 통신별 프로그램을 확인할 수 있어, 악성코드 행위분석에 용이하게 사용

 

 

 

(4) 작업 스케줄러 확인

 

 미리 정의된 시간 또는 지정된 시간 간격 후에 컴퓨터 프로그램이나 스크립트를 실행하는 기능

 

- 일부 악성코드의 경우 작업 스케줄러에 프로그램이나 스크립트 등을 등록하여 지속적으로 실행하는 경우가 빈번하기 때문에 작업 스케줄러에 악의적인 프로그램이나 스크립트가 등록되어 있는지 확인해보는 것이 좋음

 

- 윈도우 하단 검색창에 '작업 스케줄러'를 검색하여 접근

- 작업이 등록된 프로그램의 경로나 이름, 마지막 실행시간, 실행 결과, 동작 및 조건 등을 확인

 

 

 

(5) 윈도우 로그 확인

 

윈도우 운용과정 중에서 특정 동작이나 이벤트를 체계적으로 기록한 바이너리 로깅 시스템을 의미

 

- 윈도우 하단 검색창에 '이벤트 뷰어'를 검색하여 접근

- 응용 프로그램, 보안, Setup, 시스템, Forwaded Events 5가지의 로그로 구분되어 있는 것을 볼 수 있음.

 

- 윈도우 로그 종류

 

이벤트 뷰어 -  로그 컬럼 -  '수준'이라는 항목\

>> 수준은 오류, 경고, 정보, 감사 성공, 감사 실패 5가지로 구분됨

오류 : 데이터 손실이나 기능 상실 같은 문제

경고 : 시스템에 문제가 발생할 수 있는 문제를 미리 알려주는 이벤트

정보 : 응용 프로그램, 드라이버. 서비스 등이 성공적으로 수행되었음을 설명하는 이벤트 로그

감사 성공과 실패 : 시스템 로그온 성공/실패 여부와 같은 감사된 보안 이벤트

 

 

3. 프로세스 분석

 

악성코드가 실행되면 프로세스가 생성되어 악의적인 행위를 수행하기 때문에

-> 악성코드 분석에 있어서 프로세스 분석은 매우 중요한 부분

-> 대표적 프로그램 : Process Explorer, Process Monitor, Process Hacker

 

 

 

(1) Process Explorer

 

마이크로소프트에 인수된

Winternals Software에 의해 개발된 마이크로소프트 윈도우용 프리웨어 작업 관리자, 시스템 모니터

- 사용자의 시스템에서 실행 중인 프로세스들에 관한 정보를 수집하기 위한 다양한 기능들과 함께 위에서 언급했던 윈도우 작업 관리자와 같은 기능을 제공

- 실행중인 프로세스를 트리구조로 확인 가능

 

아래 링크에서 다운받을 수 있다.

 

Process Explorer - Sysinternals

Find out what files, registry keys and other objects processes have open, which DLLs they have loaded, and more.

learn.microsoft.com

 

- 부모 프로세스(Parent Process) : 다른 프로세스를 생성하는 프로세스 

- 자식 프로세스(Child Process) : 부모 프로세스에 의해 생성된 프로세스를 의미

 

 

프로세스 목록 컬럼 -> 프로세스 명, CPU 사용량, 프로그램에 할당된 메모리 양, 프로세스 설명, 프로세스 ID(PID), 회사 명 등을 확인 가능

컬럼 변경 및 추가는 컬럼 마우스 우클릭 후, 'Select Columns..'에서 컬럼 수정이 가능

 

 

프로세스 별로 색깔이 구분되어 있음

(프로세스 색깔의 정의는 ’Options' ~ 'Color Selection'에서 확인)

초록색 (New 〇bjects) : 새로 생성된 프로세스를 의미

빨간색(Deleted 〇bjects) : 작업을 마치고 종료되는 프로세스

연보라색(〇wn Processes) : 현재 시스템을 사용하는 계정에 속한 프로세스를 의미

 

- Services 프로세스 : 위에서 언급한 '서비스'에 의해서 실행된 프로세스

- 그 외에도 패킹된 프로세스(Packed Images), 그룹화된 프로세스 집합(Jobs) 등 프로세스를 구분하여 색깔별로 표현

동적 분석 시, 악성코드를 실행하고 초록색(New 〇bjects)으로 올라오는 프로세스를 한 번 확인해보면 악성코드에 의해서 실행된 프로세스를 확인할 수 있음

 

프로세스 목록에서 프로세스 우클릭 시, 프로세스 종료(Kill Process), 재시작, 등 프로세스 조작 기능이 포함

 

Properties.. ->  해당 프로세스에 대한 프로그램 경로 및 커맨드 라인(Command line), 네트워크 통신 상태, 리소스 사용량, 문자열 등 상세 정보를 확인 가능

* 악성코드의 경우 커맨드 라인(Command line)에 파워쉘 실행 명령어나 악의적인 스크립트가 포함되어 있는 경우 있음

 

해당 위치로 가서 notepad.exe 실행 -> process explorer에서 properties 확인

- notepad.exe의 경로와 커맨드 라인 확인

- 부모 프로세스와 프로세스가 실행된 시간을 확인

 

- notepad.exe는 네트워크를 통하여 통신 할 일이 없기 때문에 상세 정보 -> TCP/IP'에 아무것도 뜨지 않는 걸 확인

 

- 상세정보의 Strings 값을 보면 프로세스에 들어있는 문자열을 확인 가능 

- notepad. exe가 사용하는 API 함수, dll 파일 등이 문자열에 포함되어 있음

 

- 그 외 notepad.exe 프로세스의 리소스 사용량, 스레드(Threads) 등을 확인 가능

 

* 스레드(Threads) : 어떠한 프로그램 내에서. 특히 프로세스 내에서 실행되는 흐름의 단위

일반적으로 한 프로그램은 한 스레드를 가지고 있지만 프로그램 환경에 따라 둘 이상의 스레드를 동시에 실행할 수 있음

 

가상 머신 환경에서 악성코드를 실행 후, 프로세스 익스플로러 (Process Explorer)를 통하여 악성코드 실행 전/후 프로세스 환경 변화를 관찰

 

 

(2) Process monitor

 

프로세스 모니터(Process Monitor)

: Windows Sysinternals에서 만든 무료 도구로 마이크로소프트 윈도우 운영체제에서 모든 파일 시스템 활동을 실시간으로 모니터하고 보여줌

- 주요 기능 : 프로세스의 레지스트리 활동, 파일 시스템 활동, 네트워크 활동, 프로세스와 스레드 활동, 이벤트 프로파일링 등 활동에 대한 모니터링 기능을 지원

 

아래 링크에서 다운로드 가능하다.

 

Process Monitor - Sysinternals

Monitor file system, Registry, process, thread and DLL activity in real-time.

learn.microsoft.com

 

- 실행중인 프로세스들의 행위를 확인 가능

 

 

- 프로세스 모니터 상단바 'Capture(Ctrl + E)' 클릭 후 메모장을 실행시키면 프로세스가 올라오는 것을 확인할 수 있음

 

- 'Find(Ctrl + F)' 로 검색 가능

 

- 다른 프로세스 로그를 제거하고 원하는(notepad.exe) 프로세스의 행위만 보기위하여 상단바 'Filter'(Ctrl+L)를 통해 process name에 notepad.exe를 넣어 필터링을 수행

- 프로세스가 수행하는 행위와 참조하는 레지스트리, 파일 등의 경로를 확인

 

 

-  notepad에 내용을 작성하여 test라는 파일명으로 저장한 후 Process Monitor 로그를 모니터링 하였더니 'CreateFile'이라는 옵션으로 test파일의 절대경로가 나와있는 것을 확인

- 로그를 더블클릭하면 이벤트에 대한 정보와. 프로세스의 상세 정보, 스택 (Stack) 정보를 확인

-> 나는 Thread Creat이라고 뜨는데 같은 건지 모르겠다...

 

 

프로세스 모니터(Process Monitor)를 사용하여 동적 분석 진행 시, 악성코드 프로세스에 대한 행위 및 참조 경로 등을 파악할 수 있음. 또한, 악성코드가 추가 악성코드를 생성하거나 실행 또는 삭제 등의 파일 변조 여부도 확인이 가능하다. 프로세스 모니터의 필터(Filter) 기능으로 분석 대상 프로세스 행위를 집중적으로 분석할 수 있음