개요
분석 파일
- MD5 - 5bd3e31b75686582925a42028a137ac9
- SHA-1 - 8d5b54634296341e3be68c6b241456e1e2a1c6cf
- SHA-256 - ef2c5839ce475f1761e5a8a0113cd5c1c6a91b27b3176bcefeaacb086cda4a70
VirusTotal
VirusTotal에서 주요하게 봐야 할 점은 64to32.dll과 svchost.exe이다. 이는 이후 분석 과정에서 자세하게 알아보겠다.
분석
패킹 여부
exeinfope로 해당 파일을 확인한 결과, upx로 패킹되어 있음을 확인하였다.
이를 언패킹한 후 정적 분석을 진행하겠다.
./upx.exe -d malware.exe -o malware_upx_unpack.exe
정적 분석
BinText를 통해 해당 파일에 어떤 문자열이 있는지 확인해 보자.
이전에 VirusTotal을 통해 얻을 수 있었던 '64to32'와 'svchost'와 관련된 문자열을 찾아보겠다.
두 문자열 모두 BinText를 통해 확인할 수 있다.
여기서 '%SystemRoot%\System32\svchost.exe -k netsvcs'를 통해 어떤 명령어를 실행하는 것으로 보인다.
`%SystemRoot%\System32\svchost.exe -k netsvcs`는 Windows에서 여러 핵심 네트워크 및 시스템 관련 서비스들을 묶어서 실행하는 명령어이다.
동적 분석
SysAnalyzer로 해당 파일을 실행시켜 어떤 동작을 하는지 살펴보겠다.
우선 정적 분석에서 확인한 것과 같이, svchost.exe가 실행되는 것을 볼 수 있다.
또한, 64to32.dll이 System32 디렉터리에 생성되었다.
System32 디렉터리는 Windows의 핵심 시스템 파일들이 위치한 보호된 디렉터리이기 때문에, 일반적인 상황에서는 사용자가 임의로 파일을 생성하기 어렵다. 따라서 해당 파일을 중심으로 확인해봐야 한다.
Process Hacker를 통해 svchost 프로세스가 생성되었는지 확인해 보자.
실제로 정적 분석에서 보았던 명령어를 통해 실행된 svchost가 확인되었고, 서비스로 64to32가 등록되어있는 것을 확인하였다.
리버싱 분석
이제 64to32가 정확히 어떤 과정을 통해 서비스로 등록되었는지 확인해야 한다.
리버싱을 위해 IDA를 사용하겠다.
먼저, WinMain의 흐름을 따라가면 나오는 세 함수에 대해 분석해 보자.
sub_4037A0을 분석해 보니, ‘V3LTray.exe’, ‘AVAgent.aye’, ‘nsavsvc.npc’ 등의 문자열이 존재한다.
따라서 이 함수는 백신을 우회하는 역할을 하는 것으로 판단된다.
sub_4032F0 함수도 분석하겠다.
먼저 OpenSCManagerA API가 호출되는 것이 보인다.
이 API는 서비스들을 제어하는 기능을 제공한다.
이전 분석에서 보았던 64to32.dll을 서비스로 등록하는 과정이 이 함수 안에 존재하는 것으로 판단한다.
다음으로 GetSystemDirectoryA API를 호출하여 64to32.dll을 저장할 System32 폴더 경로를 얻는다.
그리고 wsprintfA API를 이용해 해당 경로와 ‘64to32.dll’이라는 문자열을 합쳐 DLL의 전체 경로를 구성한다.
이후 코드에는 두 가지 분기가 존재한다.
어떤 조건으로 분기하는지 확인해 보자.
분기 조건은 [esp+0A…+Needed]에 저장된 값이 0인지 1 인지에 따라 결정된다.
이때 해당 변수는 sub_403100 함수의 반환값이다.
따라서 sub_403100은 어떤 값을 반환하는지 확인해야 한다.
sub_403100 함수 내부에서는 RegOpenKeyExA API가 호출된다.
MSDN에 따르면 이 API는 정상 동작 시 0을, 에러 발생 시 0이 아닌 값을 반환한다.
또한 해당 API를 통해 열고자 하는 레지스트리 키는 '~~\Svchost'이다.
따라서 Svchost 키가 존재하면 0, 존재하지 않으면 1을 반환하는 것으로 보인다.
다시 돌아가서 1인 경우(키 존재 X)의 분기문을 분석해 보자.
역시 해당 서비스가 존재하지 않기 때문에, CreateServiceA API로 서비스를 생성하는 과정을 볼 수 있다.
반면 0인 경우(키 존재) _access API를 통해 해당 파일을 제대로 읽을 수 있는지 확인한다.
만약 읽을 수 있다면 바로 64to32 서비스를 연다.
읽을 수 없다면 MoveFileExA API로 DLL을 옮긴 후, 서비스를 열게 된다.
요약
이 멀웨어는 먼저 주요 백신 프로세스를 탐지하고 우회하는 기능을 수행한다. 이후 서비스 제어 관리자와 연결하여 시스템 디렉터리 경로를 얻고, 해당 경로에 위치한 64to32.dll 파일을 서비스로 등록할 준비를 한다. 레지스트리에서 svchost 관련 키가 존재하는지 확인한 후, 키가 없으면 CreateServiceA를 호출해 64to32라는 이름의 서비스를 새로 생성한다. 키가 이미 존재한다면 DLL 파일의 접근 가능 여부를 검사하고, 접근이 가능하면 바로 서비스를 실행하며, 접근 불가능한 경우에는 MoveFileExA를 이용해 DLL을 이동시키고 서비스를 실행한다. 이 과정을 통해 멀웨어는 64to32.dll을 svchost를 통해 서비스 형태로 실행시켜 시스템에 은폐한다.
'Malware > Analysis' 카테고리의 다른 글
WannaCry 분석 (6) | 2025.08.07 |
---|