| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 |
- React
- 프리코스
- 레나튜토리얼
- 코리안챔버오케스트라
- 우아한테크코스
- 위상 정렬
- 예술의 전당
- sk쉴더스 루키즈
- 트랜스포트 계층
- 서울청년문화패스
- Dreamhack
- 자바
- 다이나믹 프로그래밍
- 깃
- 백엔드
- SK쉴더스루키즈
- webhacking
- c
- 애플리케이션 계층
- 루키즈31기
- sk 쉴더스 루키즈
- 진입차수
- linux
- 우테코
- 웹개발
- SK쉴더스
- 악성코드 분석
- 알고리즘
- 루키즈 31기
- 프랑스어 #프랑스어배우기 #프랑스어독학 #델프인강 #시원스쿨프랑스어 #delf독학 #델프 #프랑스어기초 #프랑스어공부
- Today
- Total
yon11b
[SK 쉴더스 루키즈] 기초정적분석으로 악성행위 예측하기 (Practical Malware Analysis LAB 01) 본문
[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. 이 파일에 패킹이나 난독화 징후가 있는가? 있다면 무엇으로 판단했는가?
- 이름이 이상? x
- rwx 권한? x
- 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. 이 파일에 패킹이나 난독화 징후가 있는가? 있다면 무엇으로 판단했는가? 패킹되어 있다면 언패킹해보시오.
- 이름이 이상? => 이름이 UPX → 패킹되어 있다. -> 언패킹했다.
- rwx 권한?=> 정상
- 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. 이 파일에 패킹이나 난독화 징후가 있는가? 있다면 무엇으로 판단했는가? 패킹되어 있다면 가능한 경우 언패킹해보시오.
- 이름 이상 → 정상임
- raw size vs virtual size→ 정상임
- 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한테 물어본다."





줄글 보고서 일부
2-3. 원본 EXE 예상 실행 흐름
- 사용자가 lab01-04.exe를 실행한다.
- 악성코드는 .rsrc 영역 내부 리소스를 탐색한다.
- FindResourceA, LoadResource, SizeofResource를 이용해 내부 PE를 메모리에 적재한다.
- CreateFileA, WriteFile로 내부 실행파일을 디스크에 저장한다.
- 저장 경로는:
\winup.exe
\system32\wupdmgr.exe
등이 의심된다.
- 이후 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
에 접속해 추가 악성 파일을 다운로드할 가능성이 존재한다.
'보안 > SK 쉴더스 루키즈' 카테고리의 다른 글
| [SK 쉴더스 루키즈] 윈도우 기초 정적/동적 분석 실습 (Practical Malware Analysis LAB 03-01) (0) | 2026.05.29 |
|---|---|
| [SK 쉴더스 루키즈] 기초 동적 분석 도구 (procmon, procexp, regshot, SysAnalyzer) (0) | 2026.05.29 |
| [SK 쉴더스 루키즈] windows API를 활용한 악성 코드들 (0) | 2026.05.28 |
| [SK 쉴더스 루키즈] PE 구조 실습- 손상된 notepad 파일 복구하기 (0) | 2026.05.27 |
| [SK 쉴더스 루키즈] 윈도우 API 개념 & ADS 실습 (0) | 2026.05.27 |
