2025.08.23 - [보안/시스템해킹] - 멀웨어 분석과 리버스 엔지니어링 4장 - 가상 메모리 및 PE 파일
2025.08.24 - [보안/시스템해킹] - 멀웨어 분석과 리버스 엔지니어링 5장 - 윈도우 내부
2025.08.24 - [보안/시스템해킹] - 멀웨어 분석과 리버스 엔지니어링 6장, 7장 - 멀웨어 이해 & 패커
2025.08.26 - [보안/시스템해킹] - 멀웨어 분석과 리버스 엔지니어링 8장 - 지속성 메커니즘
2025.08.26 - [보안/시스템해킹] - 멀웨어 분석과 리버스 엔지니어링 9장 - 네트워크 통신
2025.08.28 - [보안/시스템해킹] - 멀웨어 분석과 리버스 엔지니어링 10장 - 코드 인젝션, 프로세스 할로잉, API 후킹
2025.09.01 - [보안/시스템해킹] - 멀웨어 분석과 리버스 엔지니어링 11장 - 은폐와 루트킷
2025.09.01 - [분류 전체보기] - 멀웨어 분석과 리버스 엔지니어링 12장, 13장 - 정적 분석과 동적 분석
Volatility
RAM에 저장된 휘발성 데이터인 메모리 덤프(memory dump)를 포렌식할 수 있는 터미널 기반 도구이다.
플러그인을 적절하게 사용하면 다양한 정보를 얻을 수 있다.

`imageinfo` 명령으로 시스템 정보를 획득할 수 있다. 여기서 얻은 Profile을 이용해 다음 분석을 진행한다.

`pslist` 명령은 EPROCESS 객체에 연결된 프로세스 리스트를 보여준다.
이 메모리 덤프에서 Sample-14-1.ex를 실행했다는 사실을 알 수 있다.

`pstree` 명령은 프로세스 트리 구조를 보여준다.
Sample 프로그램이 svchost.exe를 실행했다.
`vadinfo`: VAD는 가상 주소 설명자(Virtual Address Descriptor)로 가상 메모리 블록 정보를 담은 트리 구조다. 프로세스 메모리 블록에 대한 자세한 정보를 제공한다. 덤프 파일에서 메모리 구조를 파악하는 방법으로, Private이면서 RWX 권한이 있는 페이지를 발견한다면 코드 인젝션에 사용되었을 가능성이 높다.

`dlllist`: 현재 로드된 dll 리스트를 확인할 수 있다.

`ldrmodules`: 프로세스가 로드한 모든 모듈을 표시한다. 현재 로드된 모듈만 나열하는 dlllist와 다르다.
InLoad, InInit, InMem은 메모리에 모듈이 있는지를, MappedPath는 디스크에 파일 경로가 있는지 나타낸다.
InInit이 False이고 MappedPath가 비어 있는 모듈은 정상적이지 않다. 아마도 프로세스가 정지 상태로 실행되었고, svchost.exe의 섹션/모듈은 매핑 해제되어 악성코드가 매핑되는 프로세스 할로잉이 있었을 것이다.

`handle`을 파악하면 멀웨어가 어떤 리소스를 사용하고 있는지 알 수 있다.

`Mutant` 핸들을 나열할 수도 있다. 2GVWNQJz1은 kuluoz 계열의 멀웨어임을 나타낸다.

`printkey`로 레지스트리 정보를 확인해볼 수 있다.
NTUSER.dat은 로그인한 사용자와 관련된 레지스트리 정보를 저장한다.
CurrentVersion\Run의 정보를 확인해보면 멀웨어가 시작프로그램에 등록했음을 알 수 있다.

`malfind`는 VAD 트리를 분석해 다른 포르세스 삽입된 코드 인젝션을 찾아낸다.

찾아낸 내용을 -D 옵션으로 덤프 파일로 저장한 후 Bintext로 확인하면, 레지스트리 경로나 For base!!와 같은 의심스러운 문자열을 확인할 수 있다.

`modules`로 커널 모듈을 스캔할 수 있다. hidden 디렉토리에 rootkit.sys가 존재한다는 것을 보여준다.
이외에도 ssdt를 스캔하거나, 네트워크 통신 정보를 알아내는 등 메모리에 저장된 다양한 정보를 파악할 수 있다.
멀웨어 페이로드 분석 및 분류
mutant의 이름을 통해 kuluoz 계열의 멀웨어임을 파악할 수 있다고 했다. 이름만 보고 어떤 게열인지 어떻게 알 수 있을까? 멀웨어 분석가들이 분류 체계에 따라 잘 분류해놓았기 때문이다. (참고: 마이크로소프트 멀웨어 네이밍)
멀웨어를 분류해두면 멀웨어를 사전 감지할 수 있고, 감염되더라도 적절한 치료 방법을 선택할 수 있다. 분류 기준으로는 API 호출 정보, 멀웨어 제작자, API 후크, 디버그 정보, 라이브러리 종속성, 문자열 형식, 뮤텍스 이름, 파일 이름 등을 사용한다.
키로거
`SetWindowsHookEx` API를 이용해 키보드 메시지를 후킹할 수 있다.
또는 `GetAsyncKeyState` API를 루프문에서 계속 호출해 키 상태를 확인한다.
인포스틸러
인포스틸러(Infomation Stealer)나 PWS(Password Stealer)는 저장된 인증 정보를 훔쳐 전달한다.
파이어폭스 브라우저에서는 %Appdata%\Roaming\Mozilla\Firefox\Prifiles<랜덤 이름>.default의 프로필 폴더에 데이터를 저장한다. 이 경로에 접근하려 한다면 멀웨어로 의심할 수 있다.

위 프로그램에서는 FileZila FTP 클라이언트의 정보를 훔치기 위해 접근하고 있다. 정적 문자열 분석으로 확인할 수 있다.
또는 `CreateFile`, `GetFileAttributes` 등의 API를 이용한다.
뱅킹 멀웨어
은행 거래 시에는 비밀번호를 로컬에 저장하지 않으므로 멀웨어는 세션을 가로채야 한다.
브라우저는 `InternetOpen`, `InternetConnect` 등 API를 사용해 서버와 TCP 연결을 설정하고, `HttpOpenRequest`, `HttpSendRequest` 등으로 요청을 송수신한다.
이러한 API를 후킹하기 위해 `OpenProcess`, `VirtalAlloc` 등 코드 인젝션 관련 API가 사용된다.

위에서 언급한 API를 문자열 정보에서 볼 수 있다.
RAT
원격 접속 도구, 혹은 원격 접속 트로이 목마는 피해자의 컴퓨터에 원격으로 접속해 시스템을 제어한다.

XtremeRat 패밀리와 관련된 문자열이 보인다.
랜섬웨어
동작이 명확하기 때문에 실행해보면 알 수 있다.

정적 문자열 분석을 해본다면, 백업 파일을 삭제하고 부팅 시 자동 복구를 비활성화하기 위해 vssadmin.exe delete shadows /all /quiet와 같은 명령이 포함되어 있는 것을 볼 수 있다.

GandCrab 패밀리라면 이름을 문자열에 포함하고 있다.
바이러스
윈도우 XP 시절 인기 있었고, 현재는 사용 빈도가 줄었다. 파일의 원본을 수정하는 멀웨어다.
바이러스는 PE 파일에 악성 코드를 추가하거나, 악성 코드를 추가하고 진입점을 악성 코드로 변경한다. 정상 코드와 악성 코드가 모두 실행되므로 프로그램이 정상 실행되었다고 안심할 수 없다.