미 송유관 공격한 다크사이드 랜섬웨어 분석
뉴스를 보셔서 아시겠지만
최근 랜섬웨어 공격이 활발해지고 있다고 합니다.
미국 최대 송유관 마비…어떻게 해킹 가능했나 - BBC News 코리아
국가 핵심 기반시설에 대한 사이버 공격은 갈수록 더 심각한 문제로 부상하고 있다.
www.bbc.com
미국 송유관업체인 "콜로니얼 파이프라인(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에서 자세히 확인이 가능해요
[악성코드 분석]드롭퍼/다운로더(2)
[악성코드 분석] 드롭퍼/다운로더(1) 요즘 영화나 드라마 볼 시간은 없지만.. 가끔.. 아주 가아끔.. 영화나 드라마를 볼 때 자신은 뒤에 숨고 다른사람을 이용해서 지저분한 짓(비리, 불법행위 등)
ccurity.tistory.com
이런식으로 분석하면서 각각의 함수에서 어떤행위를 하는지 확인할 수가 있죠
실제로 함수 내부에 들어가보면?!
▶ 보면 특정한 영역에서 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는 차단하고,
▶ 서버의 경우 항상 백업 잘하는 것!
▶ 만약에 실행했다면 랜선부터 뽑고 강제종료하세요!
랜섬웨어 조심하시고 좋은하루되세요!!