Try Attack/Malware Analysis[basic]

미 송유관 공격한 다크사이드 랜섬웨어 분석

D4tai1 2021. 6. 5.

뉴스를 보셔서 아시겠지만

 

최근 랜섬웨어 공격이 활발해지고 있다고 합니다.

 

미국 최대 송유관 마비…어떻게 해킹 가능했나 - BBC News 코리아

국가 핵심 기반시설에 대한 사이버 공격은 갈수록 더 심각한 문제로 부상하고 있다.

www.bbc.com

 

미국 송유관업체인 "콜로니얼 파이프라인(Colonial Pipeline)"을 공격한 랜섬웨어 파일을 구할 방법이 없어

분석하지 못하지만 공격그룹인 다크사이드에서 만든 랜섬웨어 중 하나를 분석해보려고 합니다.

 

하나씩 천천히 분석해보도록 할게요!!

 

※ 참고: 아래쪽에 랜섬웨어에 감염된 모습과 암호화설명 등이 있습니다

1. PE정보 확인

1) IMAGE_FILE_HEADER

[그림1] IMAGE_FILE_HEADER

IMAGE_FILE_HEADER 분석내용을 적어보면

- 해당 파일은 I386환경에서 돌아가는 32비트 파일이죠?
- 이 파일을 생성한 시간도 알 수 있어요
- 섹션은 총 4개네요
- .reloc섹션도 포함되어 있어 메모리 로드 시 재배치된다는 것도 참고할게요
- IMAGE_OPTIONAL_HEADER의 크기는 0xE0만큼이네요

 

2) IMAGE_OPTIONAL_HEADER

[그림2] IMAGE_OPTIONAL_HEADER

IMAGE_OPTIONAL_HEADER 분석내용을 적어보면

- 베이스주소는 0x400000네요
- 코드영역은 0x401000~0x408FFF(Section Alignment가 0x1000)이고,
- 데이터영역은 0x409000~0x412FFF네요
- 그런데 여기서 말하는 데이터영역은 초기화된 데이터만 들어있네요

 

3) IAT(Import Address Table)확인

[그림3] Import Address Table

해당 악성파일이 사용하는 함수는 단, 3개입니다

 

LoadLibraryA

HMODULE LoadLibraryA(
  LPCSTR lpLibFileName
);

 ▶ 정의 : DLL의 이름을 넣으면 모듈의 핸들(DLL의 베이스주소)을 반환하는 함수입니다

 

 

GetProcAddress

FARPROC GetProcAddress(
  HMODULE hModule,
  LPCSTR  lpProcName
);

 ▶ 정의 : DLL의 핸들과 찾을 함수이름을 넣으면 해당 함수의 주소를 반환하는 함수입니다

  ※ hModule(DLL의 핸들)은 주로 LoadLibrary함수를 통해 얻어야 하므로 두 함수가 같이 사용되는 것을 자주 볼 수 있습니다

 

 

ExitProcess

void ExitProcess(
  UINT uExitCode
);

▶ 정의 : 종료코드를 넣으면 프로세스를 종료하는 함수입니다

 

 

궁금증

▶ 이 파일이 사용하는 API가 단 3개밖에 없네요..?
▶ 위 3개의 함수는 악성행위를 하는 모습도 보이지 않습니다
▶ 그렇다면 이 파일은 정상파일일까요?

이와 같이 파일상태로 확인하기는 어렵죠..!

이 정도 궁금증을 안고 분석해보도록 하겠습니다!


2. 동적분석 & 정적분석

▶ 이 파일은 분석할 때 동적분석과 정적분석을 함께하려고 합니다 왜 그렇게 분석할까요?

▶ 파일을 디버거에 올려보면 알 수 있습니다

 

1) 사용자정의 함수

[그림4] 파일 시작부분

▶ [그림4]를 보면 해당 악성파일은 개발자가 함수를 직접 작성한 것으로 확인됩니다

▶ 함수 이름도 알 수 없고 그렇게 되면 무엇을 하는 함수인지도 모르게 되겠죠..?

 - 이런 함수가 100개 넘게 있다는 거죠..!(삽질의 학문)

 

[그림5] 파일 시작부분(분석)

▶ [그림4]를 분석해서 rename을 한 모습이에요

▶ FS레지스터를 통해 PEB를 얻고 Heap_BaseAddress를 얻어온 후 

▶ 현재 파일의 ImageBase도 얻고 0x410AA2에 저장하네요

▶ 데이터영역에 있는 파일을 풀고 해당파일의 IAT도 얻어오네요

▶ OS정보와 버전도 얻어오는 모습이 보이네요

 

PEB에 관한 내용은 아래URL에서 자세히 확인이 가능해요

 

[악성코드 분석]드롭퍼/다운로더(2)

[악성코드 분석] 드롭퍼/다운로더(1) 요즘 영화나 드라마 볼 시간은 없지만.. 가끔.. 아주 가아끔.. 영화나 드라마를 볼 때 자신은 뒤에 숨고 다른사람을 이용해서 지저분한 짓(비리, 불법행위 등)

ccurity.tistory.com

 

이런식으로 분석하면서 각각의 함수에서 어떤행위를 하는지 확인할 수가 있죠
실제로 함수 내부에 들어가보면?!

[그림6] dataUnpacking

▶ 보면 특정한 영역에서 xor 연산 후 데이터를 꺼내고 있는 모습이 보이네요

 

[그림7] Get_OS_Version

▶ OS버전을 얻어온 후 현재 버전이 어떤건지 분석하고 있네요

버전을 확인하는 이유는 버전에 따라 취약점이 적용될 수도 아니면 패치될 수도 있기 때문에

확인 후 동작하려는 의도로 확인되네요

 

2) LoadLibrary&GetProcAddress 함수

[그림8] call Get_IAT

▶ 얻어온 힙 영역에 동적할당 후 LoadLibrary와 GetProcAddress함수를 이용해서 사용할 함수를 직접 얻어온 후

▶ 증거인멸을 하는 모습이 포착되었네요

▶ 즉, 겉으로 볼 때는 함수를 3개만 사용하는 것으로 보였지만 공격자가 사용할 함수를 직접 얻어오고 있네요

 - 사용할 함수가 있는 DLL의 ImageBase를 얻고

 - 함수의 이름을 검색 후 주소를 얻어오고 있어요

 

※ 함수 이름을 붙이고보니 함수 이름을 약간 잘못붙인느낌도 있네요..(참고만 해주세요!)

 - 초보의 실수.. 이해해주세요.. 하하

 

위에서 말한 궁금증은 해결됐을거라 생각합니다

 

3) 그 외 함수

▶ 함수 안에 또 함수가 있고 양파같이 만들어놓아서 위에처럼 하나씩 하다가는 너무 오래걸려서

분석한 내용을 토대로 큰 틀에서 하나하나씩 행위를 적어볼게요

 

[그림9] IsUserAnAdmin

 ▶ 파일을 실행시킨 사용자가 관리자그룹에 포함되어있는지 확인 후 아니라면 토큰을 얻어 권한상승을 시도합니다

 ▶ 권한이 상승되지 않았다면 또 다른 권한상승방법을 이용해 상승 후 비교하는 방식으로 여러가지의 권한상승방법을 시도하고 있어요!!

 

[그림10] 레지스트리 접근

 ▶ 레지스트리에 접근 후 값을 생성 및 수정하고 있네요

 - 너무 많지만 대표적으로 부팅 시 자동실행하는 경로에 접근 후 레지스트리 값을 추가하고 있네요

 

ALLUSERSPROFILE=C:\ProgramData.APPDATA=C:\Users\O_0\AppData\Roaming
ChocolateyInstall=C:\ProgramData\chocolatey.ChocolateyLastPathUpdate=132315557365735189
ChocolateyToolsLocation=C:\Tools.CommonProgramFiles=C:\Program Files (x86)\Common Files.CommonProgramFiles(x86)=C:\Program Files (x86)\Common Files
CommonProgramW6432=C:\Program Files\Common Files.COMPUTERNAME=DESKTOP-H63LFIG
ComSpec=C:\Windows\system32\cmd.exe
DriverData=C:\Windows\System32\Drivers\DriverData.HOMEDRIVE=C:
HOMEPATH=\Users\O_0
JAVA_HOME=C:\Program Files\OpenJDK\openjdk-11.0.7_10
JDK_HOME=C:\Program Files\OpenJDK\openjdk-11.0.7_10.LANG=KO
LOCALAPPDATA=C:\Users\O_0\AppData\Local
LOGONSERVER=\\DESKTOP-H63LFIG.NUMBER_OF_PROCESSORS=1
OneDrive=C:\Users\O_0\OneDrive
OS=Windows_NT
Path=C:\ProgramFiles (x86)\Common Files\Oracle\Java\javapath;
C:\Python37\Scripts\;
C:\Python37\;
C:\Python27\;
C:\Python27\Scripts;
C:\ProgramData\Boxstarter;
C:\Windows\system32;C:\Windows;
C:\Windows\System32\Wbem;
C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Windows\System32\OpenSSH\;
C:\ProgramData\chocolatey\bin;
C:\Program Files (x86)\Windows Kits\8.1\Windows Performance Toolkit\;
C:\Program Files\OpenJDK\openjdk-11.0.7_10\bin;
C:\Program Files\010 Editor;
C:\Program Files\nodejs\;
C:\Users\O_0\AppData\Local\Microsoft\WindowsApps;
C:\Tools\Cmder;;C:\ProgramData\chocolatey\lib\radare2.flare\tools\radare2\bin;
C:\Tools\java-deobfuscator-gui;
C:\Program Files (x86)\Nmap;
C:\ProgramData\chocolatey\lib\rawcap\tools\rawcap;C:\Tools\oledump;
C:\Program Files (x86)\rtfdump;
C:\Tools\msoffcrypto-crack;
C:\Program Files (x86)\pdfid;
C:\Program Files(x86)\pdfparser;
C:\pdfstreamdumper;
C:\Program Files\retdec\bin;
C:\iDefense\SysAnalyzer;;
C:\Users\O_0\AppData\Local\Programs\Fiddler;
C:\Users\O_0\AppData\Roaming\npm.
PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.PY;.PYW
PROCESSOR_ARCHITECTURE=x86
PROCESSOR_ARCHITEW6432=AMD64
PROCESSOR_IDENTIFIER=Intel64 Family6 Model158 Stepping 9GenuineIntel
PROCESSOR_LEVEL=6
PROCESSOR_REVISION=9e09
ProgramData=C:\ProgramData
ProgramFiles=C:\Program Files(x86)
ProgramFiles(x86)=C:\Program Files (x86).ProgramW6432=C:\Program Files.PSModulePath=C:\Users\O_0\Documents\WindowsPowerShell\Modules
PUBLIC=C:\Users\Public
RAW_TOOLS_DIR=C:\Tools.SESSIONNAME=Console
SystemDrive=C:
SystemRoot=C:\Windows
TEMP=C:\Users\O_0\AppData\Local\Temp
TMP=C:\Users\O_0\AppData\Local\Temp
TOOL_LIST_DIR=C:\ProgramData\Microsoft\Windows\StartMenu\Programs\FLARE
TOOL_LIST_SHORTCUT=C:\Users\O_0\Desktop\FLARE.lnk
USERDOMAIN=DESKTOP-H63LFIG
USERDOMAIN_ROAMINGPROFILE=DESKTOP-H63LFIG
USERNAME=O_0
USERPROFILE=C:\Users\O_0
VM_COMMON_DIR=C:\ProgramData\FEVM
VS140COMNTOOLS=C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\Tools\
windir=C:\Windows
_NT_SYMBOL_PATH=symsrv*symsrv.dll*C:\Windows\Symbols

수집한 환경변수 정보

▶ 해당 악성파일은 환경변수정보를 수집하고 있는데 메모리에 남아있는 내용을 덤프뜬 내용이에요

 

[그림11] OS, 사용자정보, PC정보, 환경정보 등 추출

 ▶ 40개 이상의 PC정보를 수집 후 xml 형태로 변환하고 있네요

 ▶ 정형화된 xml형태로 변경한다는 것은..?! 어딘가 보낸다는 의미가 될 수도 있겠네요

 

[그림12] 전송하기위한 패킷구성

 ▶ 여기저기서 추출한 정보를 전송하기위해 메서드, 경로, User-Agent, URL 등을 만들고 있어요

 ▶ 진짜 나쁜파일이네요..!

 

[그림13] 패킷전송

 ▶ [그림12]만 보더라도 보낼거라는 것은 알고 있었지만 정상적으로 통신하는 과정을 확인하기위해 패킷을 캡쳐했어요

 ▶ DNS조회를 먼저 요청해서 IP주소를 얻어온 후 열심히 만든 패킷을 전송했지만

공격자가 서버를 닫았는지 현재는 접근이 되지 않는 것으로 확인되네요

 

[그림14] 암호화

 ▶ 사용자PC에 있는 파일을 암호화한 후 확장자를 랜덤한 8글자로 변경하고 있습니다

 - 이 랜덤한 8글자는 파일이 직접 생성해는 구조네요

 

해당 랜섬웨어(다크사이드)에서 사용하고 있는 암호화 순서를 볼까요?

 ▶ 암호화하기위해 경로를 먼저 얻어온 후
 ▶ 암호화할 확장자(데이터영역에 암호화된 상태로 존재)를 복호화해서 가져오고
 ▶ 파일 및 서버에서 사용하는 데이터파일도 싹다 암호화하고 있어요!
 - SQL Server백업본인 VSS(볼륨 섀도 복사본 서비스) , sql기록기 서비스 등

 

[그림14] 바탕화면 변경

 ▶ 감염사실을 알리기위해 바탕화면을 변경하네요

 

[그림15] 랜섬노트

 ▶ 랜섬노트를 보니 돈을 요구하네요!!

 ▶ 다른 랜섬웨어와는 다르게 랜섬노트의 checksum도 확인하고 있어요!

 - 다른 공격자가 랜섬노트의 내용(메일부분)을 바꿔서 재배포할 수 있으니 변경되었는지 무결성체크를 한다는 말이에요

 - 어우.. 이런생각을 했다는거 자체도 대단하네요(랜섬노트에 기재된 메일이 자기메일이 아니라면 종료하는식으로)

 

[그림16] 자기자신 삭제

 ▶ 나쁜짓 다하고 자기자신을 삭제하고 있네요!!

 

[그림17] 멀티스레드

 

 ▶ 해당 랜섬웨어는 파일암호화와 네트워크통신을 동시에 실행하는 멀티스레드 악성코드에요

 ▶ 너무 많은 내용이 있어서 큼직큼직한 내용을 위주로 적었는데 이런부분도 적어놓으면 좋을 듯 싶어서,,

 


3. 대응방안

 ▶ 확실하지 않은 사용자가 보낸 메일은 열지말고, 

 ▶ [그림13]에 있는 C2서버인 악성 URL과 IP는 차단하고, 

 ▶ 서버의 경우 항상 백업 잘하는 것!

 ▶ 만약에 실행했다면 랜선부터 뽑고 강제종료하세요!

 

 

랜섬웨어 조심하시고 좋은하루되세요!!

 

댓글