Window Backdoor - 4

안상준·2026년 2월 24일

Reversing

목록 보기
16/16

Ghidra-Study

지난 시간에 이어서 악성 명령어를 실행하는 디스패처 부분을 분석하였다.

프로세스 조작

프로세스 나열 (0x201)

명령어 0x201을 수신받으면 실행되는 함수다.

실행되는 동작은 다음과 같다.
1. 프로세스 스냅샷 생성
2. 데이터 버퍼 할당 및 초기화
3. 프로세스 순회 및 상세 정보 추출
4. 데이터 직렬화 및 동적 메모리 재할당
5. C2 서버로 데이터 전송 및 정리

정리하면 현재 실행되는 프로세스들의 정보를 수집하는 함수다.

프로세스 종료 (0x202)

명령어 0x202를 수신 받으면 실행되는 함수다.

함수 내에서 FUN_00401420 함수를 호출하는 것을 볼 수 있다.

해당 함수인데, 윈도우에서 SeDebugPrivilege는 다른 사용자가 실행한 프로세스의 메모리까지 접근할 수 있는 아주 강력한 권한이다. 이 함수는 현재 실행 중인 프로세스의 토큰 권한을 활성화하거나 비호라성화하는 권한 조정 유틸리티 함수다.

다시 이전 함수를 분석하면 권한을 획득하고, 타겟 프로세스 핸들을 연 다음 프로세스를 강제 종료하는 동작을 수행한다.

프로세스 실행 (0x203)

명령어 0x203을 수신 받으면 실행되는 함수다.

내부에서 실행하는 함수는 다음과 같다.

결과적으로는 ShellExecuteExW를 실행하기 위한 함수들이다.
함수의 인자로 구조체가 들어가며 해당 구조체에 들어가는 값을 토대로 동작에 대해 분석을 하면,
local_40.fmask = 0x440
0x400: 실행 중 에러가 나도 사용자에게 에러 팝업창을 띄우지 않음.
0x40: 프로그램이 실행될 때 창을 어떻게 띄울지(숨길지, 최대화 할지) 결정

ShellExecuteExW함수는 윈도우 운영체제에서 프로그램을 실행하거나 특정 팡ㄹ을 열 때 사용하는 아주 대표적이고 강력한 API다.
사용자가 윈도우 탐색기에서 더블클릭 하는 핻동을 코드로 똑같이 구현해 주는 함수이며, 위의 인자와 합쳐 정리하면, 파일 실행 중 에러가 발생해도 화면에 "파일을 찾을 수 없습니다" 같은 에러 팝업창을 띄우지 않게 만든다.

프로세스 실행 숨김 (0x204)

명령어 0x204를 수신 받으면 실행되는 함수다.

이전에 분석한 함수 00401a20과 같은 것을 볼 수 있는데, 두 번째 인자가 0으로 변경되었다.
(함수 명은 변경함)
0: SW_HIDE로 숨김 모드를 의미한다.
정리하면, 피해자의 모니터 화면에는 어떤 창도, 깜빡임도 나타나지 않고 백그라운드에서 특정 파일이나 스크립트가 조용히 실행된다.

파일 조작

파일 나열 (0x301)

명령어 0x301를 수신 받으면 실행되는 함수다.

특정 폴더의 파일 목록 및 정보 조회의 기능을 수행한다.
특정 경로를 지정하면, 그 폴더 안에 있는 파일들을 싹 긁어서 서버로 보낸다.

파일 삭제 (0x302)

명령어 0x302를 수신 받으면 실행되는 함수다.

내부에서 DelteFileW를 호출하는 것을 볼 수 있다.

파일 이동 (0x303)

명령어 0x303를 수신 받으면 실행되는 함수다.

MoveFileW를 호출하는 것을 볼 수 있다. 첫번째 인자는 대상 파일 경로, 두번째 인자는 대상 파일 경로를 지정한다.

파일 다운로드 (0x304)

명령어 0x304를 수신 받으면 실행되는 함수다.

C2 서버로부터 파일 다운로드 및 복호화하는 기능을 수행한다. 암호화하여 파일을 전송하는 이유는 네트워크 탐지를 피하기 위함이다. 수신받은 파일은 RC4 암호화가 적용돼 있기 때문에 이를 복호화하는 로직이 존재한다.

파일 업로드 (0x305)

명령어 0x304를 수신 받으면 실행되는 함수다.

이전와 반대로 C2 서버로 파일을 업로드 하는 함수다. 내부에 있는 데이터를 탈취할 때 사용된다.

임의 명령 실행

임의 명령 실행 명령어는 MOTHRA RAT의 명령어 0x401~0x043을 호출하면 실행된다.

원격 셸 시작 (0x401)

명령어 0x401을 수신 받으면 실행되는 함수다.

백그라운드 스레드를 실행하는 런처 함수다.
내부에서 호출하는 함수다.

이 함수는 원격 쉘의 잔재를 청소하는 역할을 수행한다. 특정 프로세스와 스레드를 찾아서 강제로 죽이고, 프로세스 간에 데이터를 주고받는 통로인 파이프 연결을 해제한다. 마지막으로 모든 핸들을 닥고 전역 변수 초기화를 한다.

그 다음 CreateThread인자로 사용되는 함수인 lpStartAddress_00401040(함수 포인터)를 분석해 보았다.

이 함수는 아주 핵심적인 부분으로 리버스 셸 실행을 위한 환경을 세팅하는 함수다.
리버스 셸은 피해자 PC에서 공격자 PC로 접속하는 셸을 생성하여 공격자가 모든 권한을 갖도록 하는 행위다.
내부의 lpStartAddress_00402700 함수 포인터를 사용하는 것을 볼 수 있다.

앞서 생성된 리버스 쉘이 뱉어내는 모든 결과물을 실시간으로 C2 서버로 전달하는 역할을 수행한다.

원격 셸 명령 실행 (0x402)

명령어 0x402를 수신 받으면 실행되는 함수다.

이 함수는 해커가 보낸 명령어를 리버스 셸에게 전달하는 역할을 한다.

원격 셸 종료 (0x403)

명령어 0x403을 수신 받으면 실행되는 함수다.

이전에 0x401 수신 시 실행하는 함수에서 실행한 명령어와 동일하다. 리버스 셸을 종료하는 명령어다.

정리

MOTHRA RAT에서 실행 가능한 다양한 명령어들을 알아 보았다.
정말 많은 취약한 동작들을 수행하는 것을 볼 수 있었다.
RC4 알고리즘과 config 암호화는 멀웨어에서 자주 사용한다고 한다.
처음으로 멀웨어를 분석해 본 것이라 뜻 깊은 시간이었던 것 같다.

0개의 댓글