[Security] 악성코드 샘플 분석 2차

UPX와 SVK Protector로 패킹된 악성코드를 언패킹하여 정적 분석을 수행했습니다. wiseman.exe와 DXMSFT.DLL 파일에서 C2 서버 통신, 프로세스 인젝션, 금융사 도메인 탈취 등 금융 해킹을 목표로 하는 악성 행위를 확인했습니다.

[Security] 악성코드 샘플 분석 2차
Photo by Markus Spiske / Unsplash

개요

2차 악성코드 분석을 수행했습니다.

코드를 언패킹하는 과정과 언패킹 파일을 기반으로 한 정적 분석 내용을 정리했습니다.

VirusTotal

PEStudio를 켜서 엔트로피로 패킹 여부를 확인했습니다. 다만 패킹되어있더라도 VirusTotal에서 파일 해시가 패킹 된 기준을 따라가며 패킹 여부도 확인할 수 있기에 VIrusTotal을 먼저 정리했습니다.

Notion Image
  • Trojan, Backdoor, Downloader…
    • peexe, persistence, executes-dropped-file, checks-network-adapters, spreader, service-scan, checks-cpu-name, checks-user-input, calls-wmi, long-sleeps, direct-cpu-clock-access, self-delete, runtime-modules, upx, detect-debug-environment
Notion Image
  • Packing 탐지 툴을 통해 패킹 여부를 쉽게 확인 가능

Unpacking

해당 악성 코드가 패킹되어있다는 것은 PEStudio를 통해 확인 가능합니다.

Notion Image

1. 엔트로피 7.880 (매우 높음)

  • 최대값 8.0에 근접하여 데이터가 압축 또는 암호화되어 있음을 의미
  • 정상 실행파일은 보통 5.0~6.5 범위

2. Entry Point 바이트 패턴 이상

  • F0 F0 00 F0 F0 00 F0 F0 00... 반복 패턴
  • 정상 컴파일러가 생성하는 프롤로그 코드(push ebp, mov esp 등)와 전혀 다름
  • 패커가 삽입한 언패킹 스텁 또는 난독화된 코드로 추정
Notion Image

언패킹 도구들

Notion Image

아래 깃허브에서 언패커들의 정보와 사용할 수 있는 것들을 확인할 수 있습니다.

Notion Image
Notion Image

ARM64를 지원하지 않는다. 현재는 테스트를 위해 어떻게 동작하는지만 참고했습니다.

Notion Image
Notion Image
Notion Image
Notion Image
  • 언패킹을 차단하는 동작 과정을 확인
    • 언패커 중 Mac Silicon ARM으로 인한 실패
    • 언패킹을 감지하고 레지스터가 초기화 된 것을 확인
Notion Image
Notion Image
Notion Image
Notion Image
  • 엔트로피가 낮아진 것을 확인
    • 정상 실행파일은 보통 5.0~6.5 범위
    • 원본 파일 이름 확인
    • Strings 정상 확인

정적 분석

원본 패킹 파일에서 덤프된 두 가지 파일을 확인했습니다.

  • wiseman.exe
  • DXMSFT.DLL
    • Microsoft DirectX Transform → IE에서 이미지 필터/트랜지션 효과 등 사용

Wiseman.exe 분석

Indicators

Notion Image

언패킹/복호화한 실제 페이로드는 Parent를 메모리에서 덤프해준 것이기에 파일 해시를 VirusTotal에 검색하더라도 유의미한 데이터를 찾기 어려울 수 있습니다.

따라서 파일의 정보만 확인합니다.

  • Indicators
    • 파일 크기: 380,928 bytes
    • 엔트로피: 6.510 (패킹 가능성 중간)
    • 파일 타입: executable, 32-bit, GUI
    • 컴파일러: Microsoft Linker 6.0 / Visual C++ / Visual Studio 6.0
      • 컴파일 시각: 2015-04-27 06:59:34
    • 파일 이름: Wiseman.exe / wiseman
    • 언어: Korean
    • 설명: wiseman MFC
    • Entry Point: 0x00024D34 (.text 섹션)
    • Manifest 권한: asInvoker (관리자 권한 미요구)
    • 인증서: 없음 (서명되지 않음)
  • C2/통신 URL 패턴 (의심 지표)
    • wisemansupport.com
      • api.wisemansupport.com
    • click.dotmap.co.kr 광고 트래킹 URL

Libraries

Notion Image

악성코드 라이브러리 패턴을 확인

  • WININET.dll → C2(Command & Control) 서버와 HTTP 기반 통신
  • WS2_32.dll → 소켓 레벨의 직접 통신 (WININET을 우회하거나 보완)
  • NETAPI32.dll → 내부 네트워크 정찰 또는 측면 이동(lateral movement)

Imports

Notion Image

네트워크 통신

  • InternetOpenA, InternetOpenUrlA, InternetReadFile, InternetGetConnectedState, InternetSetOptionA, InternetQueryOptionA, InternetCloseHandle
    • C2 서버 접속 및 데이터 다운로드
  • inet_ntoa, gethostbyvalue, gethostvalue
    • IP/호스트 정보 변환
  • Netbios
    • NetBIOS 네트워크 호출

레지스트리 조작

  • RegCreateKeyA, RegCreateKeyExA, RegSetValueExA, RegDeleteKeyA, RegDeleteValueA
    • 자동 실행 등록 및 흔적 삭제

파일 시스템

  • WriteFile, CreateDirectoryA, DeleteFileA, FindFirstFileA
    • 파일 드롭/삭제/탐색

프로세스/윈도우

  • AttachThreadInput, GetWindowThreadProcessId, GetDesktopWindow, SystemParametersInfoA, PostThreadMessageA
    • 윈도우 조작 및 키 입력 가로채기 가능

실행/기타

  • ShellExecuteA → 외부 프로그램 실행
  • srand, rand → 난수 생성
  • OleRun → OLE 객체 실행
  • CWinThread::Process → MFC 스레드 처리

일부 DLL은 번호로 ordinal Import 되어 Strings 상에서 검색이 안될 수 있음

Resource

Notion Image
  • HTML, CSS, JPEG 이미지 리소스 존재 확인
    • 실행 시 웹페이지를 띄울 수 있음

Strings

Notion Image
  • Imports된 DLl 외에도 C2 서버 확인 가능
    • wisemansupport.com
  • HTML, CSS 관련 코드까지 확인 됨

Version

Notion Image
  • MFC(Microsoft Foundation Class)
    • MS Windows API를 C++ 클래스로 감싼 응용 프로그램 프레임워크
    • 윈도우 데스크톱 GUI 애플리케이션 개발 목적

DXMSFT.DLL 분석

Indicators

Notion Image
  • Microsoft DirectX Transform → IE에서 이미지 필터/트랜지션 효과 등 사용
    • description → 시각적 효과 툴인데 URL 패턴이 존재함
  • C2 통신/URL 패턴
    • C2 서버 의심: http://blog.sina.com.cn/u/%s
    • Local: 127.0.0.1
    • DNS: 8.8.8.8
  • 의심 URL 패턴 중 금융사 도메인을 확인
www.shinhan.com|search.daum.net|search.naver.com|www.kbstar.com.ki|www.knbank.co.kr.ki|openbank.cu.co.kr.ki|www.busanbank.co.kr.ki|www.nonghyup.com.ki|www.shinhan.com.ki|www.wooribank.com.ki|www.hanabank.com.ki|www.epostbank.go.kr.ki|www.ibk.co.kr.ki|www.idk.co.ki|www.keb.co.kr.ki|www.kfcc.co.kr.ki|www.lottirich.co.ki|www.nlotto.co.ki|www.gmarket.net|nate.com|www.nate.com|daum.com|www.daum.net|daum.net|www.zum.com|zum.com|naver.com|www.nonghyup.com|www.naver.com||www.nate.net|hanmail.net|www.hanmail.net|www.hanacbs.com|kfcc.co.ki|www.kfcc.co.ki|www.daum.net|daum.net|www.kbstir.com|www.nonghuyp.com|www.wooribank.com|www.ibek.co.ki|www.epostbenk.go.ki|www.hanabenk.com|www.keb.co.ki|www.citibank.co.ki|www.citibank.co.kr.ki|www.standardchartered.co.kr.ki|www.standardchartered.co.ki|www.suhyup-bank.com.ki|www.suhyup-bank.com|www.kjbank.com.ki|www.kjbank.com|openbank.cu.co.kr.ki|openbank.cu.co.ki|www.knbank.co.ki|www.knbank.co.kr.ki|www.busanbank.co.kr.ki|www.busanbank.co.ki|www.suhyup-bank.com|www.suhyup-bank.com.ki|www.standardchartered.co.kr.ki|www.nonghuyp.com.ki|

Section

Notion Image
  • Execute
    • base-of-code → .pla (0x00001000)
    • entry-point → .text (0x000121CC)
  • 실행하는 섹션이 2개 → .pla → 표준이 아닌 확장자 명
  • .text.pla 언패킹(복호화) → 복호화 후 .pla가 실행 됨
  • 주로 정적 분석 방지를 위한 커스텀 패커일 가능성 존재

Imports

Notion Image

프로세스 인젝션

  • OpenProcess, ReadProcessMemory, WriteProcessMemory, VirtualQueryEx, MapViewOfFile, UnmapViewOfFile
    • 정상 프로세스에 악성코드 주입

프로세스 열거

  • CreateToolhelp32Snapshot, Process32First, Process32Next, GetCurrentProcess, GetCurrentProcessId
    • 실행 중인 프로세스 스캔 및 인젝션 타겟 탐색

파일 조작

  • WriteFile, CreateDirectoryA, DeleteFileA, MoveFileExA, FindFirstFileA, FindNextFileA
    • 파일 드롭/이동/삭제/탐색

실행/기타

  • WinExec — 프로그램 실행
  • GlobalMemoryStatusEx — 메모리 상태 확인 (VM/샌드박스 탐지 가능)
  • RaiseException — 예외 발생 (안티디버깅 가능)
  • srand, rand — 난수 생성

Strings

Notion Image

권한 상승 / 토큰 조작

  • AdjustTokenPrivileges, LookupPrivilegeValue, OpenProcessToken
  • GetWindowThreadProcessId, GetDesktopWindow

레지스트리 조작

  • RegCreateKey, RegCreateKeyEx, RegSetValueEx, RegDeleteKey, RegDeleteValue

서비스 조작

  • OpenSCManager, CreateService, StartService, ChangeServiceConfig

네트워크 / URL

  • Netbios, GetUrlCacheEntryInfo, URLDownloadToCacheFile
  • http://107.163.241.197:12354/show.php
  • http://blog.sina.com.cn/u/%s
www.shinhan.com|search.daum.net|search.naver.com|www.kbstar.com.ki|www.knbank.co...

실행 / 기타

  • SELECT * FROM (프로세스 목록, OS 정보, 백신 탐지 등 다양하게 활용 됨)

정리

이를 바탕으로 종합해보면 해당 악성코드는 금융 정보 해킹을 위한 키로거 혹은 HTML이 존재한다는 점 등으로 피싱 등 금융 관련 악성 목적을 수행하는 것으로 의심됩니다.

이후 동적 분석을 통해 관련 동작을 살펴보도록 하겠습니다.


정적분석 발표 관련 정리

  • 기업에서 오픈 소스 관련된 툴을 사용할 때 신뢰할 수 있는 기관이나 회사에서 만든 것인지, 업데이트가 잘 되는지를 판단 → 해당 툴을 우선적으로 사용(PEStudio, BinText)
  • wiseman.exe 파일은 악성 경유지와 연결되어 HTTP Get Method를 활용해 wiseman을 다운로드 받음
    • 현재는 동작되지 않는다는 것을 확인
    • wisemansupport.com → VirusTotal에서 악성으로 등록되어있음
  • imports & exports(DLL)
    • 기본 내장되어있는 경우 imports / 악성코드 개발자가 만든 경우 exports
    • imports는 각각의 기능이 존재하기에 어떤 기능을 수행하는지 예상
      • WS로 시작하는 경우 네트워크를 수행하는 것으로 예상
    • exports는 임의로 수행
      • imports와 이름이 같더라도 다르게 수행될 수 있음
      • 추측은 가능하지만 실제 동작은 반드시 다를 수 있음
  • 동적분석을 수행하고 어떠한 내용을 수행하는지 예상해서 정리하는게 필요
  • 이후에 네트워크쪽 행위를 직접 파악하면서 탐지 패턴을 어떻게 만들 것인지 확인할 예정
  • 파일과 레지스트리, 프로세스, 네트워크 → 동적 분석시 확인이 필요
    • 하나의 툴을 사용하더라도 반복적으로 수행해야 정확한 분석 가능
  • 금융이나 공공기관에서는 분석 환경이 구체적으로 분리가 되어있음
    • 악성코드 분석 룸이 존재 → 농협(네트워크가 전부 단절되어있음)
    • 공공기관의 경우 망분리를 필수로 하지 않음 → 금융 대비 투자가 부족함 (별도의 인터넷 PC가 존재해야 잘 되어있는 경우임)