미 송유관 공격한 다크사이드 랜섬웨어 분석
뉴스를 보셔서 아시겠지만
최근 랜섬웨어 공격이 활발해지고 있다고 합니다.
미국 송유관업체인 "콜로니얼 파이프라인(Colonial Pipeline)"을 공격한 랜섬웨어 파일을 구할 방법이 없어
분석하지 못하지만 공격그룹인 다크사이드에서 만든 랜섬웨어 중 하나를 분석해보려고 합니다.
하나씩 천천히 분석해보도록 할게요!!
※ 참고: 아래쪽에 랜섬웨어에 감염된 모습과 암호화설명 등이 있습니다
1. PE정보 확인
1) IMAGE_FILE_HEADER
IMAGE_FILE_HEADER 분석내용을 적어보면
- 해당 파일은 I386환경에서 돌아가는 32비트 파일이죠?
- 이 파일을 생성한 시간도 알 수 있어요
- 섹션은 총 4개네요
- .reloc섹션도 포함되어 있어 메모리 로드 시 재배치된다는 것도 참고할게요
- IMAGE_OPTIONAL_HEADER의 크기는 0xE0만큼이네요
2) IMAGE_OPTIONAL_HEADER
IMAGE_OPTIONAL_HEADER 분석내용을 적어보면
- 베이스주소는 0x400000네요
- 코드영역은 0x401000~0x408FFF(Section Alignment가 0x1000)이고,
- 데이터영역은 0x409000~0x412FFF네요
- 그런데 여기서 말하는 데이터영역은 초기화된 데이터만 들어있네요
3) IAT(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]를 보면 해당 악성파일은 개발자가 함수를 직접 작성한 것으로 확인됩니다
▶ 함수 이름도 알 수 없고 그렇게 되면 무엇을 하는 함수인지도 모르게 되겠죠..?
- 이런 함수가 100개 넘게 있다는 거죠..!(삽질의 학문)
▶ [그림4]를 분석해서 rename을 한 모습이에요
▶ FS레지스터를 통해 PEB를 얻고 Heap_BaseAddress를 얻어온 후
▶ 현재 파일의 ImageBase도 얻고 0x410AA2에 저장하네요
▶ 데이터영역에 있는 파일을 풀고 해당파일의 IAT도 얻어오네요
▶ OS정보와 버전도 얻어오는 모습이 보이네요
PEB에 관한 내용은 아래URL에서 자세히 확인이 가능해요
이런식으로 분석하면서 각각의 함수에서 어떤행위를 하는지 확인할 수가 있죠
실제로 함수 내부에 들어가보면?!
▶ 보면 특정한 영역에서 xor 연산 후 데이터를 꺼내고 있는 모습이 보이네요
▶ OS버전을 얻어온 후 현재 버전이 어떤건지 분석하고 있네요
▶ 버전을 확인하는 이유는 버전에 따라 취약점이 적용될 수도 아니면 패치될 수도 있기 때문에
확인 후 동작하려는 의도로 확인되네요
2) LoadLibrary&GetProcAddress 함수
▶ 얻어온 힙 영역에 동적할당 후 LoadLibrary와 GetProcAddress함수를 이용해서 사용할 함수를 직접 얻어온 후
▶ 증거인멸을 하는 모습이 포착되었네요
▶ 즉, 겉으로 볼 때는 함수를 3개만 사용하는 것으로 보였지만 공격자가 사용할 함수를 직접 얻어오고 있네요
- 사용할 함수가 있는 DLL의 ImageBase를 얻고
- 함수의 이름을 검색 후 주소를 얻어오고 있어요
※ 함수 이름을 붙이고보니 함수 이름을 약간 잘못붙인느낌도 있네요..(참고만 해주세요!)
- 초보의 실수.. 이해해주세요.. 하하
위에서 말한 궁금증은 해결됐을거라 생각합니다
3) 그 외 함수
▶ 함수 안에 또 함수가 있고 양파같이 만들어놓아서 위에처럼 하나씩 하다가는 너무 오래걸려서
분석한 내용을 토대로 큰 틀에서 하나하나씩 행위를 적어볼게요
▶ 파일을 실행시킨 사용자가 관리자그룹에 포함되어있는지 확인 후 아니라면 토큰을 얻어 권한상승을 시도합니다
▶ 권한이 상승되지 않았다면 또 다른 권한상승방법을 이용해 상승 후 비교하는 방식으로 여러가지의 권한상승방법을 시도하고 있어요!!
▶ 레지스트리에 접근 후 값을 생성 및 수정하고 있네요
- 너무 많지만 대표적으로 부팅 시 자동실행하는 경로에 접근 후 레지스트리 값을 추가하고 있네요
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
수집한 환경변수 정보
▶ 해당 악성파일은 환경변수정보를 수집하고 있는데 메모리에 남아있는 내용을 덤프뜬 내용이에요
▶ 40개 이상의 PC정보를 수집 후 xml 형태로 변환하고 있네요
▶ 정형화된 xml형태로 변경한다는 것은..?! 어딘가 보낸다는 의미가 될 수도 있겠네요
▶ 여기저기서 추출한 정보를 전송하기위해 메서드, 경로, User-Agent, URL 등을 만들고 있어요
▶ 진짜 나쁜파일이네요..!
▶ [그림12]만 보더라도 보낼거라는 것은 알고 있었지만 정상적으로 통신하는 과정을 확인하기위해 패킷을 캡쳐했어요
▶ DNS조회를 먼저 요청해서 IP주소를 얻어온 후 열심히 만든 패킷을 전송했지만
공격자가 서버를 닫았는지 현재는 접근이 되지 않는 것으로 확인되네요
▶ 사용자PC에 있는 파일을 암호화한 후 확장자를 랜덤한 8글자로 변경하고 있습니다
- 이 랜덤한 8글자는 파일이 직접 생성해는 구조네요
해당 랜섬웨어(다크사이드)에서 사용하고 있는 암호화 순서를 볼까요?
▶ 암호화하기위해 경로를 먼저 얻어온 후
▶ 암호화할 확장자(데이터영역에 암호화된 상태로 존재)를 복호화해서 가져오고
▶ 파일 및 서버에서 사용하는 데이터파일도 싹다 암호화하고 있어요!
- SQL Server백업본인 VSS(볼륨 섀도 복사본 서비스) , sql기록기 서비스 등
▶ 감염사실을 알리기위해 바탕화면을 변경하네요
▶ 랜섬노트를 보니 돈을 요구하네요!!
▶ 다른 랜섬웨어와는 다르게 랜섬노트의 checksum도 확인하고 있어요!
- 다른 공격자가 랜섬노트의 내용(메일부분)을 바꿔서 재배포할 수 있으니 변경되었는지 무결성체크를 한다는 말이에요
- 어우.. 이런생각을 했다는거 자체도 대단하네요(랜섬노트에 기재된 메일이 자기메일이 아니라면 종료하는식으로)
▶ 나쁜짓 다하고 자기자신을 삭제하고 있네요!!
▶ 해당 랜섬웨어는 파일암호화와 네트워크통신을 동시에 실행하는 멀티스레드 악성코드에요
▶ 너무 많은 내용이 있어서 큼직큼직한 내용을 위주로 적었는데 이런부분도 적어놓으면 좋을 듯 싶어서,,
3. 대응방안
▶ 확실하지 않은 사용자가 보낸 메일은 열지말고,
▶ [그림13]에 있는 C2서버인 악성 URL과 IP는 차단하고,
▶ 서버의 경우 항상 백업 잘하는 것!
▶ 만약에 실행했다면 랜선부터 뽑고 강제종료하세요!
랜섬웨어 조심하시고 좋은하루되세요!!
'Try Attack > Malware Analysis[basic]' 카테고리의 다른 글
안티포렌식 기능이 적용된 랜섬웨어 분석보고 (0) | 2022.09.12 |
---|---|
사이트 접속만으로 감염되는 랜섬웨어 분석보고 (0) | 2022.09.07 |
[악성코드분석] dropper (0) | 2021.04.25 |
saturn 랜섬웨어 분석 (0) | 2020.09.03 |
Windows 부트로깅 (0) | 2020.06.13 |
댓글