yon11b

[SK 쉴더스 루키즈] 기초정적분석으로 악성행위 예측하기 (Practical Malware Analysis LAB 01) 본문

보안/SK 쉴더스 루키즈

[SK 쉴더스 루키즈] 기초정적분석으로 악성행위 예측하기 (Practical Malware Analysis LAB 01)

yon11b 2026. 5. 28. 03:23
반응형

이 실습은 Practical Malware Analysis 책에 있는 예제를 정리한 블로그입니다.

Lab01-01 문제: Lab01-01.exe, Lab01-01.dll

1. VirusTotal에 파일을 업로드한 보고서에서 기존 안티바이러스 시그니처와 일치하는 결과가 있는가?

  • 40/71
  • 56/71

 

2. 이 파일은 언제 컴파일되었는가?

  • 2010/12/19 Sun 16:16:19 UTC
  • 2010/12/19 Sun 16:16:38 UTC

 

3. 이 파일에 패킹이나 난독화 징후가 있는가? 있다면 무엇으로 판단했는가?

  1. 이름이 이상? x
  2. rwx 권한? x
  3. virtual size랑 raw size가 다르냐? x

 

4. 임포트로부터 악성코드의 행위를 추정할 수 있는가? 가능하다면 어떤 임포트에서 단서를 얻었는가?

 

1번째 EXE 파일 IAT

함수 역할
CloseHandle 열린 핸들(파일, 프로세스 등) 닫기
UnmapViewOfFile 메모리에 매핑한 파일 해제
IsBadReadPtr 읽기 가능한 메모리 주소인지 검사
MapViewOfFile 파일을 메모리에 매핑
CreateFileMappingA 파일 매핑 객체 생성
CreateFileA 파일 생성/열기
FindClose 파일 탐색 핸들 종료
FindNextFileA 다음 파일 탐색
FindFirstFileA 파일 탐색 시작
CopyFileA 파일 복사

 

 

2번째 DLL 파일 IAT

DLL 함수 역할
KERNEL32.dll Sleep 일정 시간 대기
KERNEL32.dll CreateProcessA 새 프로세스 실행
KERNEL32.dll CreateMutexA Mutex 생성
KERNEL32.dll OpenMutexA 기존 Mutex 열기
KERNEL32.dll CloseHandle 핸들 종료

 

5. 감염 시스템에서 식별 가능한 호스트 기반 증거(파일·레지스트리 등)는 무엇인가?

 

6. 감염 시스템에서 이 악성코드를 식별하는 데 사용할 수 있는 네트워크 기반 증거는 무엇인가?

문자열: strings 도구 결과

 

strings.exe Lab01-01.exe > Lab01-01.exe.txt
strings.exe Lab01-01.dll > Lab01-01.dll.txt

 

strings로 .exe 파일에 있는 문자열들을 .txt로 추출한다.

 

.exe.txt

 

.dll.txt

 

7. 이 파일의 목적은 무엇으로 판단되는가?

원격 제어가 가능한 전형적인 백도어, 드로퍼이다.

 

Lab01-01.exe가 실행되면 시스템 내부 감시를 우회하기 위해 정상 kernel32.dll과 유사한 이름의 kerne132.dll을 생성 및 매핑하여 시스템에 정착한다.

이후 함께 드롭된 Lab01-01.dll을 통해 하드코딩된 C2 서버(127.26.152.13)로 연결을 시도하며, 공격자의 원격 명령(exec)을 받아 감염된 시스템에서 추가적인 악성 프로세스를 실행하고 제어권을 탈취하는 구조이다.

 

Lab01-02 문제

1. VirusTotal에 업로드했을 때 기존 안티바이러스 시그니처와 일치하는 결과가 있는가?

 

virustotal에 업로드할 때는 winmd5를 사용해서 exe파일을 넣으면 주는 MD5를 복붙하면 된다.

 

58/71개의 취약점이 있다고 나온다.

 

2. 이 파일에 패킹이나 난독화 징후가 있는가? 있다면 무엇으로 판단했는가? 패킹되어 있다면 언패킹해보시오.

  1. 이름이 이상? => 이름이 UPX → 패킹되어 있다. -> 언패킹했다.
  2. rwx 권한?=> 정상
  3. virtual size랑 raw size가 다르냐?

 

언패킹

upx -d Lab01-02.exe

 

다시 peview로 보면 잘 보인다.

 

 

3. 임포트로부터 악성코드의 기능을 추정할 수 있는가? 가능하다면 어떤 임포트에서 단서를 얻었는가?

*임포트 어드레스 테이블

언패킹 하기 전

더보기
더보기
더보기

 


함수 위험도 가능한 악성 행위
CreateServiceA 매우 높음 악성 서비스를 등록하여 재부팅 후 자동 실행(Persistence)
StartServiceCtrlDispatcherA 높음 서비스 프로세스로 동작. 백그라운드 상주형 악성코드 가능
OpenSCManagerA 높음 서비스 관리자 접근. 서비스 생성/수정/삭제 가능
SystemTimeToFileTime 낮음 시간 변환. 타이머 기반 실행 가능
GetModuleFileNameA 보통 자신의 실행 경로 확인. 자기복사/지속성 설정 가능
CreateWaitableTimerA 보통 특정 시간 후 실행. 지연 실행(Sandbox 우회) 가능
ExitProcess 낮음 프로세스 종료
OpenMutexA 보통 중복 실행 방지. 이미 감염된 시스템 확인 가능
SetWaitableTimer 보통 예약 실행 설정
WaitForSingleObject 보통 특정 이벤트 대기. 스레드 동기화
CreateMutexA 높음 단일 인스턴스 유지. 감염 체크용 Mutex 생성
CreateThread 높음 별도 악성 스레드 실행. 백그라운드 작업 가능
InternetOpenUrlA 매우 높음 특정 URL 접속. 페이로드 다운로드/C2 통신 가능
InternetOpenA 높음 인터넷 세션 생성. HTTP 통신 시작
_XcptFilter 낮음 예외 처리. 크래시 방지/분석 방해 가능
__p__fmode, _controlfp 등 CRT 함수 낮음 일반 런타임 초기화


전형적인 악성코드 패턴

VirtualAlloc
→ 메모리 확보

VirtualProtect
→ 실행 권한 부여

LoadLibrary / GetProcAddress
→ API 숨겨서 호출

InternetOpenA
→ 외부 서버 통신

CreateServiceA
→ 재부팅 후 자동 실행

 

 

언패킹 한 후

함수 위험도 가능한 악성 행위
CreateServiceA 매우 높음 악성 서비스를 등록하여 재부팅 후 자동 실행(Persistence)
StartServiceCtrlDispatcherA 높음 서비스 프로세스로 동작. 백그라운드 상주형 악성코드 가능
OpenSCManagerA 높음 서비스 관리자 접근. 서비스 생성/수정/삭제 가능
SystemTimeToFileTime 낮음 시간 변환. 타이머 기반 실행 가능
GetModuleFileNameA 보통 자신의 실행 경로 확인. 자기복사/지속성 설정 가능
CreateWaitableTimerA 보통 특정 시간 후 실행. 지연 실행(Sandbox 우회) 가능
ExitProcess 낮음 프로세스 종료
OpenMutexA 보통 중복 실행 방지. 이미 감염된 시스템 확인 가능
SetWaitableTimer 보통 예약 실행 설정
WaitForSingleObject 보통 특정 이벤트 대기. 스레드 동기화
CreateMutexA 높음 단일 인스턴스 유지. 감염 체크용 Mutex 생성
CreateThread 높음 별도 악성 스레드 실행. 백그라운드 작업 가능
InternetOpenUrlA 매우 높음 특정 URL 접속. 페이로드 다운로드/C2 통신 가능
InternetOpenA 높음 인터넷 세션 생성. HTTP 통신 시작
_XcptFilter 낮음 예외 처리. 크래시 방지/분석 방해 가능
__p__fmode, _controlfp 등 CRT 함수 낮음 일반 런타임 초기화

 

위험한 조합/함수

 

1. Windows 서비스 기반 악성코드 가능성

OpenSCManagerA
→ 서비스 관리자 접근

CreateServiceA
→ 악성 서비스 등록

StartServiceCtrlDispatcherA
→ 서비스 형태로 실행

 

 

2. CreateMutexA + OpenMutexA 조합: 이미 감염된 PC인지 확인할 때 많이 사용

Mutex 존재 == 이미 실행 중 == 종료

 

3. CreateWaitableTimerA +SetWaitableTimer

  • 몇 분 뒤 실행
  • 재부팅 후 실행
  • 샌드박스 우회

용도로 사용됨.

 

4. InternetOpenA + InternetOpenUrlA 

  • 파일 다운로드
  • C2 서버 접속
  • 정보 유출
  • 명령 수신

정리

서비스 등록
+
중복 실행 방지
+
인터넷 통신
+
백그라운드 스레드 실행

 

 

4. 감염 시스템에서 이 악성코드를 식별하는 데 어떤 호스트 기반·네트워크 기반 증거를 활용했는가?

 

strings 도구 활용 결과

 

전체 흐름

[실행]
↓
UPX 언패킹 코드 실행
↓
Mutex 생성
(CreateMutexA)
↓
이미 실행 중인지 확인
(OpenMutexA)
↓
서비스 관리자 접근
(OpenSCManagerA)
↓
자기 자신을 서비스 등록
(CreateServiceA)
↓
서비스 프로세스로 동작
(StartServiceCtrlDispatcherA)
↓
타이머 생성 -> 알람 생성(동시에 공격하기 위해서 like 디도스 공격)
(CreateWaitableTimerA)
↓
백그라운드 스레드 생성
(CreateThread)
↓
인터넷 연결
(InternetOpenA)
↓
URL 접속
(InternetOpenUrlA)
↓
명령 수신 또는 파일 다운로드
↓
지속 실행

 

++ PEStudio를 쓰면

의심이 되는 부분은 빨간색으로 표시해준다.

 

strings도 알아서 정리되어있다.

 

 

Lab01-04 문제

1. VirusTotal에 업로드했을 때 기존 안티바이러스 시그니처와 일치하는 결과가 있는가?

63/70 개의 취약점 발견

 

2. 이 파일에 패킹이나 난독화 징후가 있는가? 있다면 무엇으로 판단했는가? 패킹되어 있다면 가능한 경우 언패킹해보시오.

  1. 이름 이상 → 정상임
  2. raw size vs virtual size→ 정상임
  3. rwx 권한 → 정상임

3. 이 프로그램은 언제 컴파일되었는가?

2019/08/30 금 22:26:58 UTC

 

4. 임포트로부터 악성코드의 기능을 추정할 수 있는가? 가능하다면 어떤 임포트에서 단서를 얻었는가?

프로세스 인젝션

OpenProcess → WriteProcessMemory(없어도 유사행위 가능) → CreateRemoteThread

 

exe 내부 Resource 섹션에 숨겨둔 DLL/악성코드를 꺼내는 패턴

FindResourceA → LoadResource → SizeofResource

 

권한 상승 또는 SeDebugPrivilege 활성화 패턴

LookupPrivilegeValueA → AdjustTokenPrivileges

보안 프로그램 우회나 SYSTEM 프로세스 접근에 자주 사용

 

5. 감염 시스템에서 이 악성코드를 식별하는 데 어떤 호스트 기반·네트워크 기반 증거를 활용했는가?

 

6. 이 파일의 리소스 섹션에는 리소스가 하나 있다. Resource Hacker로 리소스 파일을 점검하고 추출해보시오. 리소스에서 무엇을 알 수 있는가?

원래 rsrc영역에는 아이콘 같은 걸 넣는 영역이다.

resource haceker 로 보면 .exe 내부의 .rsrc 섹션만을 추출해서 보여준다.

 

근데 우리 파일을 넣어보면 ?

 

 

PE 구조가 들어가있다.

 

이 파일을 저장해준다.

이 파일을 또 pestudio로 열어서 xml 형태로 저장을 해준다. 그리고 아까 원본파일도 pestudio로 열어서 xml 형태로 저장을 해준다.

 

"그리고 gpt한테 물어본다."

 

"docx 파일로 줘봐"

 

줄글 보고서 일부

2-3. 원본 EXE 예상 실행 흐름

  1. 사용자가 lab01-04.exe를 실행한다.
  2. 악성코드는 .rsrc 영역 내부 리소스를 탐색한다.
  3. FindResourceA, LoadResource, SizeofResource를 이용해 내부 PE를 메모리에 적재한다.
  4. CreateFileA, WriteFile로 내부 실행파일을 디스크에 저장한다.
  5. 저장 경로는:
\winup.exe
\system32\wupdmgr.exe
 

등이 의심된다.

  1. 이후 WinExec를 이용해 드롭 파일을 실행한다.

3-3. 드롭 파일 실행 흐름

1. 드롭 파일이 실행된다.

2. LoadLibraryA를 이용해:

psapi.dll
urlmon.dll
 

등을 동적으로 로드한다.

 

3. GetProcAddress를 통해 필요한 API 주소를 런타임에 가져온다.

LoadLibraryA("psapi.dll")
↓
GetProcAddress("EnumProcesses")
 

이는 IAT 노출 최소화 목적이다.

 

4. OpenProcessToken, LookupPrivilegeValueA, AdjustTokenPrivileges로 SeDebugPrivilege 권한을 활성화한다.

즉, 다른 시스템 프로세스 접근 가능 상태 확보 목적이다.

 

5. EnumProcesses, EnumProcessModules, GetModuleBaseName으로 실행 중인 프로세스를 탐색한다.

 

6. winlogon.exe 발견 시:

OpenProcess
↓
CreateRemoteThread
 

를 이용해 프로세스 인젝션을 시도할 가능성이 높다.

 

7. 마지막으로:

http://www.practicalmalwareanalysis.com/updater.exe
 

에 접속해 추가 악성 파일을 다운로드할 가능성이 존재한다.

728x90