'formbook'에 해당되는 글 1건

  1. 2020.09.11 An in-depth malware analysis of formbook full-payload. 4

Formbook은 2016년 2월에 공개된 해킹 포럼에 판매를 위해 광고한 악성코드이다.

2017년 한국, 미국의 항공, 우주, 방위 산업체, 제조 대상으로 스캠 캠페인에 사용되었다.

악성코드 제작자는 Formbook을 악의적인 목적으로 사용해서는 안된다고 고지했으나 스팸 캠페인이 알려져서 판매를 중단했다.

악성코드 제작자에 따르면 이 Formbook은  “가족이나 직원”을 감시하는 데 사용해야 한다고 했다.

 

스캠 캠페인은 주로 피해자가 악성 첨부 파일을 열도록 유도하는 이메일을 보낸다.

첨부 파일의 종류는 배포하는 공격자에 따라 다르다.

 

 

 

Formbook은 구매자가 스크린샷, 키 로깅된 데이터  및 로그인 크리덴셜 파일 등 을 가져갈 수 있다.

그래서 감염자의 정보를 추적 할 수 있는 대시보드 패널을 제공한다. 각종 웹브라우저가 로깅되는걸 한누에 볼 수 있다. ie, 파폭, 크롬, 엣지, 토르, 오페라, 사파리 등등 기록된 횟수들이 나온다.

 

 

formbook dashboard

 

온라인 상태인지 확인이 가능하고 select taks에서 특정 url을 다운로드 및 실행을 선택해서 명령을 내릴 수 있다.

 

 

installs

 

웹브라우저 프로세스 안에 인젝션 되어 실행되기 때문에 모든 파싱이 가능하다.

피해자가 가상 ​키보드를 사용하거나 자동 채우기를 사용 시 데이터를 복사하여 가져 간다.

 

 

forms

 

대상 컴퓨터의 화면을 스크린샷찍어 불러올 수 있다. 실시간 RAT와는 다르게 이미지 파일을 다운로드하는 식으로 구성했다.

 

 

screenshots

 

오늘 소개할 formbook은 매크로가 있는 엑셀이다.

매크로 코드에서 이름이 다른 일부 함수는 난독화를 위해 내부에서 동일한 코드를 사용하여 분석을 어렵게 만든다.

매크로 기능을 끄면 당연히 감염되지 않는데, 생각보다 많은 사람들이 감염 된다.

이 엑셀 매크로는 VB(Visual Basic) Script 파일로 구성되어 있다.

 

www.virustotal.com/gui/file/e66181155a9cd827def409135334ecf173459e001e79853e1b38f2b8e5d8cc59/detection

 

VirusTotal

 

www.virustotal.com

매크로 추출한 데이터는 다음과 같다.

 

 

 

 

코드를 보시면 strReverse 함수를 사용해서 데이터를 반전하고 14 라인 에서 shell 호출로 해당 문자열들을 실행한다.

여기서부터 첫 번째 스테이지가 시작된다.

 

 

hxxp://www.pastebin.com/raw/aswoesx8sxwxxd

 

 

mshta 명령을 사용하여 외부 콘텐츠를 다운로드하고 실행한다.

Aswoesx8sxwxxd 페이지에 접근하면  304 moved가 나오면서 xaasxasxasx.blogspot.com으로 리다이렉션 시킨다.

 

hxxps://xaasxasxasx.blogspot.com/p/usama.html

 

bitly URL은 pastebin share에 있으며 첫 번째 스테이지이다.

xaasxasxasx.blogspot.com 는 블로그 형태로 있으며 자바스크립트가 추가되어있다.

이 자바스크립트는 한눈에 알아볼 수 없게 구성되어 있다.

 

hxxps://xaasxasxasx.blogspot.com/p/usama.html

 

페이지에는 바이너리나 악성 링크가 포함되어 있지 않지만,  소스 코드를 보면 렌더링 하는 동안 페이지에 동적으로 infect 한 압축된 HTML 코드가 나타난다.

 

이 추가 스크립트는 "mshta" 유틸리티에 의해 실행하도록 설계되었다. "WScript.Shell"은 오브젝트를 만드는 VBScript 코드이다. mshta.exe는 Microsoft HTML 응용 프로그램 (HTA) 파일을 실행하는 유틸리티고 HTA는 Internet Explorer와 동일한 모델과 기술을 사용하지만 브라우저 외부에서 실행되는 독립 실행 응용 프로그램이다.

실행되는 첫 번째 단계에서 unescape를 3번 실행해서 푼다.

VBScript 코드의 StrReverse 함수를 사용하여 난독화 되어 있다.

 

hxxps://xaasxasxasx.blogspot.com/p/usama.html

 

4개의 레이어로 구성되어 있고 StrRverse과 splitedsplited 된 변수, 멀티 Wscript 오브젝트 등을 사용하는 vb스크립트가 나온다. mshta hxxp://www.pastebin.com/raw/c3V923PW

 

hxxp://www.pastebin.com/raw/c3V923PW


Word, Excel, Publisher 및 PowerPoint와 같은 일부 Microsoft Office 프로세스를 종료하는 역할을 한다.

이후 재감염을 위해 persistence를 추가한다. 2단계에서 두 개의 schedule task를 만들고 숨겨진 창을 닫는다.

TTP를 변경하거나 작업에서 킬 스위치를 실행하는 update vector처럼 사용하였다.

 

hxxp://www.pastebin.com/raw/c3V923PW

 

첫 번째 pastebin은 4 개의 unescape레이어와 이전의 난독화 방법으로 사용한다.

최종 코드는 숫자로 인코딩 된 Powershell이다.

 

hxxp://www.pastebin.com/raw/VFUXDF7C

 

이 디코딩된 텍스트는 IEX 명령어를 통해 Powershell에서 command let으로 실행된다.

 

hxxp://www.pastebin.com/raw/VFUXDF7C

 

복호화하면 아래 그림과 같다. 이 코드가 악성코드의 implant 핵심이다. 둘 다 Pastebin에서 서로 다른 HTA 애플리케이션을 호출한다.

 

hxxp://www.pastebin.com/raw/VFUXDF7C

 

첫 번째는 NET 프레임 워크의 Reflection Assembly에서 LoadWithPartialName 함수를 사용하여 메모리에서 데이터를 다운로드하고 실행한다.  이 Loader는 dll의 명령과 데이터를 얻기 위해 getstring 메서드를 사용하는 난독화레이어가 있다.

"0rhAppFq”은 Powershell 코드는 payload를 숫자 형식으로 인코딩한다.

난독화된 다른 powershell scrip인 payload를 디코딩하면서 실행 중인 프로세스 메모리에 직접 shell code가 로드된다.

 

hxxp://www.pastebin.com/raw/0rhAppFq

 

% _를 0x로 replace하여 16진수 배열을 가져와 메모리에서 실행한다. playload를 풀어보면 PE파일의 헤더인 4D 5A(MZ)가 보인다.

 

hxxp://www.pastebin.com/raw/0rhAppFq

 

dll은 ConfuserEx (1.0.0.0) 프로텍터로 보호되며 escaped 된 문자열과 레퍼런스 모듈을 볼 수 있다. 이 코드는 Process Hollowing 기술을 통해 대상 프로세스에 payload를 삽입하는 목적을 가진 dynamic linking library이다.

 

www.virustotal.com/gui/file/84833991f1705a01a11149c9d037c8379a9c2d463dc30a2fec27bfa52d218fa6/detection

 

VirusTotal

 

www.virustotal.com

 

ConfuserEx v1.0.0

 

아래 보이는 난독화 기법은 bogus control-flow ( 허위 분기 삽입)이다.

 

bogus control-flow

 

예를들어 첫번째 loop로 진입하면 계산식은 (1265418265^1024690340) % 10 = 1가 나와

case 1로 가고 case1 loop로 진입하면  (1501113832 ^ 1024690340) % 10 = 2 이런식이다.

 

 

난독화 및 보호 기능을 제거하여 분석을 해야 한다.

 

clear

 

한눈에 보이니 분석 속도가 올라 갈 수 밖에 없다.

 

 

run 메서드는 두 번째 PE에서 payload 문자열 푸시를 가져와서 디코딩하고 실행한다.

 

 

 

fanal payload는 이전 pastebin “rjfk3j9m”에서 다운로드한 것이고 이 코드는 문자열만 봐도 MZ다.

 

hxxp://www.pastebin.com/raw/rjfk3j9m

 

 

Loader(dll)가 이 final payload를 다운로드 받아서 실행한다. 

 

www.virustotal.com/gui/file/de314d038d9b0f8ff32cfe3391c4eec53a3e453297978e46c9b90df2542ed592/detection

 

VirusTotal

 

www.virustotal.com

 

formbook malware

 

FormBook 코드를 보면 string도 없고 imports table도 없고 아무것도 안보인다. 사용한 기술을 살펴보면 대부분의 FormBook 데이터는 다양한 위치에 암호화되어 저장하고 있다. 

www.netscout.com/blog/asert/formidable-formbook-form-grabber

The Formidable FormBook Form Grabber | NETSCOUT

More and more we’ve been seeing references to a malware family known as FormBook.

www.netscout.com

Encbuf는 크기가 다양하며 다음과 유사한 함수로 참조된다. 코드 조각이 실행되는 주소를 결정하는 쉘 코딩 기술이다.

예를 들어 아래 그림과 같이 0x41AFC2에서 call +5를 호출하면 0x41AFC7이 호출된다. encbuf는 반환된 주소 뒤에서 2 바이트를 시작하여 pop 및 retn 명령어를 건너뛴다. 모든 encbuf는 일반적인 x86 함수의 프롤로그처럼 보이는 것으로 시작한다. 결국 이 코드는 실행해서 분석해야 하지 정적 디스어셈블 하면 의미가 없다.

 

Fake fucntion prologue

 

 

일부 문자열들은 스택에서 한 번에 DWORD로 넣어 빌드한다.

 

Stack-strings obfuscation

 

C2에 데이터를 보내는 사용자 에이전트 설정을 볼 수 있습니다.

 

Stack-strings obfuscation urlmon.dll, user-agent

 

Opera chrome user32 pass32 auth32 login Chome_child_dll

 

Stack-strings obfuscation

 

각각 decrypt_func1 및 decrypt_func2와 같은 복호화 기능이다.

Decrypt_func1은 암호화된 데이터를 반복하고 바이트 값에 따라 암호화 된 데이터의 특정 오프셋에서 일반 텍스트 데이터로 일정량의 데이터를 복사한다. decrypt_func2는 덧 샘, 뺄샘뺄샘, RC4으로 총 세 가지 라운드로 나눠진다.

 

일반적으로 문자열을 체크할 때 strcmp 등의 함수를 사용하는데 이때 문자열이 메모리에 남을 수 있다. 이 formbook은 문자열이 메모리에 흔적을 남기는 것을 최소화하도록 문자열의 CRC32 해쉬 값을 사용하여 특정 문자열 검색과 비교를 한다.

 

예를 들어 어떠한 API를 Export table 등에서 검색할 때에 문자열 단위의 검색이 아닌 CRC32 해쉬값을 통한 검색을 사용한다. 이러한 방법은 기존 쉘 코드등에서 쉘코드 크기를 줄이고 쉘 코드를 쉽게 리버싱 하지 못하게 하려는 의도로 자주 사용되는 기법이다.

 

 

먼저 해시를 포함하는 encbuf가 복호화한다. 여기서는 두 개의 다른 encbuf, 위의 암복호화 기능 및 일부 SHA1 해싱이 필요하다.

 

Strings hashing

 

decrypt 된 encbuf에 인덱스를 지정하고 해시를 decrypt 한다.

 

 

Anti-debugging은 다음과 같이 구현하였다.

 

 

Anti-debugging tricks

 

감시되는 프로세스 목록, 경로, 사용자 이름 등은 다음과 같다.

 

 
formbook의 몇가지 특징적인 기능들을 소개하였다. 처음부터 마지막 페이로드까지 보면 공격자는 많은 준비를 했다는 것을 알 수 있다.

Posted by kkoha :