안녕하세요. 이스트시큐리티입니다.
작년 7월 4일 사용자의 마스터 부트 레코드(MBR)를 암호화 하여 PC 실행을 막는 Satana 랜섬웨어가 처음 등장하였습니다. 이는 MBR을 망가뜨리는 Petya 랜섬웨어와 클래식 랜섬웨어를 결합한 새로운 형태의 랜섬웨어였습니다. 그러나 모든 파일은 동일 특정 키로 암호화 된다거나, 디버그 스트링을 남기는 등 결점을 포함하고 있어 개발 초기 단계의 버전으로 보였습니다. (참고▶http://blog.alyac.co.kr/691)
그러나 올해 등장한 Satana 랜섬웨어는 Ransomware as a Service(RaaS) 형태로 진화했으며 다양한 안티 디버깅 기법과 프로세스 인젝션 등 클래식 랜섬웨어 기능에 분석을 어렵게 하기 위한 다양한 기법들을 포함하고 있습니다. 본 분석 보고서에서는 더욱 강력하게 업데이트된 Satana 랜섬웨어를 상세 분석 하고자 합니다.
악성코드 상세 분석
동작 프로세스
[그림 1] 동작 프로세스
3D1D76720AE326CCC704C182ABE0CA35 분석
분석을 방해하기 위한 여러가지 안티 디버깅 기법을 포함하고 있으며 실제 악성파일을 드롭하는 역할을 합니다.
1) 다양한 안티 디버깅 기법
satana 랜섬웨어는 총 20가지의 안티 분석 기법이 적용되어 있습니다. 안티 분석 기법에는 안티 디버깅과 안티 VM을 확인하는 기능들로 나뉩니다. 각각의 기법들은 이미 오래 전부터 악성 프로그램에서 사용했던 방법이기는 하나 20가지의 기법이 한번에 적용된 랜섬웨어라는 점에서 기존 랜섬웨어와는 다른 차이점을 보입니다.
[그림 2] 안티 디버깅 기법 중 일부 코드
다음은 적용된 기법들입니다.
|
안티 디버깅 기법 |
설명 |
1 |
BlockInput() 함수 호출 |
BlockInput() 함수가 호출되면 키보드와 마우스 입력이 차단되어 분석가의 정상적인 분석을 방해한다. |
2 |
AVG 모듈 확인 |
해외 안티 바이러스 제품인 AVG Internet Security에서 사용하는 avghookx.dll, avghooka.dll 모듈이 사용 중인지 확인한다. |
3 |
각종 디버거 확인 |
FindWindowW 함수를 호출하여 현재 디버거가 실행 중인지 확인한다. 비교 대상은 이미 잘 알려진 디버거들이다. - OLLYDBG, WinDbgFrameClass, Immunity Debugger, Zeta Debugger, Rock Debugger, ObsidianGUI
|
4 |
KdDebuggerEnabled 확인 |
KdDebuggerEnabled 값을 확인하여 현재 시스템이 커널 디버깅 중인지 확인한다. |
5 |
IsDebuggerPresent, CheckRemoteDebuggerPresent 함수 호출 |
IsDebuggerPresent 함수를 호출하여 현재 프로세스가 디버깅 당하는 중인지 확인하고, CheckRemoteDebuggerPresent를 통해 특정 프로세스가 디버깅 당하는지 확인한다. |
6 |
가상화 모듈 및 Antivirus 모듈 체크 |
가상화 프로세스 및 Antivirus에서 사용하는 모듈을 확인하여 디버깅 유무를 확인한다. - SandBoxie, Kaspersky Antivirus, Avast Antivirus, SunBelt SandBox, Virtual PC, WPE Pro |
7 |
분석 툴 사용 확인 |
분석가들이 주로 사용하는 프로세스 목록을 토대로 프로세스 검색을 통해 현재 분석 환경인지 확인한다. - ollydbg.exe, ProcessHacker.exe, tcpview.exe, autoruns.exe,autorunsc.exe, filemon.exe, procmon.exe, procexp.exe, idaq.exe, idaq64.exe, ImmunityDebugger.exe, Wireshark.exe, dumpcap.exe, HookExplorer.exe ImportREC.exe, PETools.exe, LordPE.exe, SysInspector.exe, proc_analyser.exe, sysAnalyzer.exe, sniff_hit.exewindbg.exe, joeboxcontrol.exe, joeboxserver.exe, netmon.exe |
8 |
Wine 샌드박스 환경 확인 |
GetProcAddress 함수를 호출하여 kernel32.dll의 export된 wine_get_unix_file_name의 주소를 검색한다. 리턴값을 통해 Wine 샌드박스 환경인지 확인한다. |
9 |
NTClose와 CloseHandle 사용 |
비정상적인 핸들값 0x99999999을 가진 NtClose와 CloseHandle 함수를 호출하여 디버깅 환경인지 확인한다. 만약 비정상적인 핸들값을 사용했을 경우 STATUS_INVALID_HANDLE (0xC0000008) 예외를 호출한다. |
10 |
VEH (Vectored Exception Handling) |
VEH 핸들을 생성하고 int3을 호출하여 디버깅을 탐지한다. |
11 |
후킹 확인 |
CreateProcessW와 DeleteFileW, LdrLoadDll, NtQueryInformationProcess 함수의 점프 코드를 확인하여 후킹 여부를 확인한다. |
12 |
csrss.exe 핸들을 이용한 디버거 확인 |
프로세스 검색을 통해 csrss.exe 프로세스의 핸들을 요청했을 경우 성공여부에 따라 시스템 프로세스가 디버깅 중인지 확인한다. |
13 |
0으로 나누기 |
컴퓨터에서 정수를 0으로 나눌 수 없다는 점을 이용하여 예외를 발생시켜 디버깅을 방해한다. |
14 |
OS 버전 확인 |
RtlGetVersion 함수를 호출하여 OS 버전 정보를 확인하고 악성코드를 실행할 지 여부를 결정한다. |
15 |
NTQuryInformationProcess 함수 호출 |
NTQuryInformationProcess함수를 호출하여 디버깅 환경인지 확인한다.
- ProcessDebugPort,(0x07) - ProcessDebugObjectHandle(0x1E) - ProcessDebugFlags(0x1F) 또한 devenv.exe 프로세스를 검색하여 개발 소프트웨어인 VisualStudio 프로그램이 동작 중인지 확인한다. |
16 |
Hardware BreakPoint 확인 |
GetThreadContext 함수를 호출하여 디버그 레지스터 값(Dr0 ~ DR3)을 체크하여 디버깅 유무를 확인한다. |
17 |
sample.exe 파일 이름 확인 |
현재 실행되는 파일 이름이 sample.exe를 사용하는지 확인한다. |
18 |
C:\insideTM 폴더 확인 |
현재 실행되는 파일이 Anubis 샌드박스에서 사용하는 경로인 C:\insideTM\ 하위에서 실행되고 있는지 확인한다. |
19 |
사용자 계정 확인 |
샌드박스 환경에서 사용하는 사용자 계정들을 비교하여 현재 해당 계정이 로그온 되어 있는지 확인하여 디버깅 유무를 확인한다. - SANDBOX, MALTEST, MALWARE, VIRUS, TEQUILABOOMBOOM |
20 |
폴더 경로 확인 |
현재 실행되는 파일의 경로를 확인하여 디버깅 환경인지 확인한다. - SAMPLE, VIRUS, SANDBOX |
[표 1] 안티 디버깅 기법
2) 프로세스 인젝션 후 파일 드롭
자기 자신을 자식 프로세스로 실행합니다. 이때 Process Hollowing 기법을 이용해서 자기 자신 프로세스에 인젝션 한 뒤 %appdata% 경로에 랜덤폴더명과 랜덤파일명.exe 파일을 드롭하여 악성 행위를 시작합니다. 분석 당시에는 %appdata%\Gewaaq\heit.exe 이름으로 생성되었습니다.
참고로 Process Hollowing 기법이란 메모리 안의 정상 PE를 걷어내고 그 안에 악성PE를 채우는 기법으로 탐지를 회피하기 위해 악성코드에서 사용하는 기법입니다.
3D1D76720AE326CCC704C182ABE0CA35 파일에서 드롭되어 실행되는 heit.exe는 explorer.exe에 인젝션 하여 암호화 기능을 수행하며 이후 복호화 해주는 대가로 비트코인 결제를 유도합니다.
3) 중복 이벤트 실행 확인
중복되는 이벤트 실행을 방지하기 위해 Mutex를 사용합니다. Mutex의 이름은 사용자 컴퓨터의 GUID를 이용하여 계산된 값이며, 중복실행 중이라면 중복 실행 이벤트를 종료합니다. 이벤트가 완료된 후에는 ReleaseMutex를 호출합니다.
[그림 3] 중복 이벤트 실행 확인
4) 자가 파일 삭제를 위한 배치파일 드롭 및 실행
%tmp%tmp_52ce971c.bat 파일을 드롭합니다. 내용을 보면 자신의 원본 파일과 현재 드롭한 배치파일을 삭제하는 코드입니다.
tmp_52ce971c.bat 내용 |
@echo off :l del "C:\Users\[사용자계정]\Desktop\3D1D76720AE326CCC704C182ABE0CA35" if exist "C:\Users\[사용자계정]\Desktop\3D1D76720AE326CCC704C182ABE0CA35" goto l del /F "C:\Users\[사용자계정]\AppData\Local\Temp\tmp_52ce971c.bat" |
[표2] 드롭된 배치파일 내용
5) 레지스트리 등록
레지스트리 시작프로그램에 %AppData%에 드롭한 파일을 등록합니다. 이는 재부팅 될 경우에도 랜섬웨어를 실행하기 위함입니다.
[그림 4] 레지스트리 등록 화면
6) C&C 접속
암호화 하기 전 아래 URL에 접속을 한 후 암호화를 진행합니다.
URL 정보 |
IP 정보 |
국가 정보 |
dcwqsuh6dxnlsokm.onion.sx |
110.10.176.128 |
한국 |
[표3] C&C 정보
[그림 5] C&C 접속
7) 암호화 대상 파일 검색
암호화 대상에는 모든 논리 드라이브를 포함하며 드라이브 내에서 암호화 조건에 부합하는 파일들을 리스팅합니다. 암호화 대상 파일의 확인 조건은 확장자, 제외 파일 및 폴더 문자열입니다. 다음은 제외 대상 경로와 암호화 대상 확장자 목록입니다.
암호화 제외 대상 경로 문자열 |
windows, $recycle.bin |
암호화 대상 확장자 |
"qbx","csh","bco","ext","dtd","rtf","ly","tiff","moneywell","key","design","en","r3d","nx","ads","blend","xlsx","dxg","otg","3ds","idx","dac","cgm","html","qby","doc", "pl","ld","xml","asm","dds","wmv","sti","cfp","pot","potx","bdf","wb2","ott","cdrw","ds2","rdb","btw","mfw","pas","pdb","sxw","accdr","xltm","gen","odf","sda","sxi", "des","bpw","bkf","acr","nsg","mp4","mdf","sxc","ldf","sd0","oil","fhd","cr2","cer","prf","sldasm","dotx","jsp","myd","db-journal","fp7","bip","rw2","xlw","fdb","ccd", "tif","kdc","p7b","fh","st6","phtml","rwz","ce2","c","rm","hpp","php","ffd","gry","apj","mov","flv","pages","mst","thm","erf","rat","nd","pab","cls","hbk","xla", "bank","vhd","backup","flac","rwl","cs","tib","max","accdb","pptm","dxf","st4","gray","h","sas7bdat","sql","xlm","st8","pef","otp","ef","nop","odt","nk2","crt", "odc","msg","qbm","sldm","indd","awg","qbb","cfs","oth","agdl","svg","cpp","dwg","fpc","crw","csl","pspimage","erbsql","vmdk","nxl","ach","adb","htm","ptx","bay", "xlsm","docm","m","ps","wallet","sxm","pptx","cdr6","aspx","pem","pct","war","al","class","ai","ods","pcd","fxg","swf","mdb","pst","sqlite","ddoc","cdx","asp","st5", "3gp","st7","backupdb","jpe","ibz","nwb","ns2","ots","p7c","srt","avi","plc","qbr","ait","7z","123","odm","wav","dcr","kbx","hp","cfx","java","ppsx","bak","iif", "ppsm","k1","pfx","xlt","qba","psd","mpg","pps","djvu","sdf","nsd","craw","ns3","3fr","fmb","pdf","p12","php5","tlg","x3f","orf","db3","act","exf","sldprt", "tar","mdc","srf","qbw","dxb","jar","back","cib","ost","cdr","asx","xls","dbx","say","der","cdr5","rar","ksp","ddd","dc2","ssn","dbf","arw","db","gif","pbl", "srw","spf","nsf","incpas","step","drf","zip","potm","sldx","ab4","dat","bgt","fpx","amd","m4v","wps","raf","nef","asf","dgc","mmw","stw","sqlite3", "fff","bik","tex","jpeg","odb","py","stx","3dm","txt","ppt","xlsb","sxd","dot","png","xis","eml","jin","ppam","mef","dt","oab","xlr","yuv","ibank","std", "dcs","x11","ce1","bdb","xltx","lua","fla","drw","sr2","csv","ycbcra","odp","cdr3","ndd","tga","mos","nx2","sch","sxg","cdf","pdd","vob","ty","docx", "3g2","jpg","kpdx","cpi","wpd","accdt","accde","xd","bkp","pat","es","iiq","ns4","eps","ddrw","obj","nrw","raw","mp3","nsh","s3db","mrw","kdbx", "grey","psafe3","cmt","3pr","dotm","cdr4","dng","odg","nyf","xlk","sqlitedb","xlam","ibd","kc2","vrb","ac","abk","dbk","bkn","bkc","fbw","tbk"," bke","bb","sik","mbk","bpp","dtb","vbk","rpb","fb","cvt","sbk","tjl","bup","fkc","old","wbk","jou","umb","spi","sav","bk","vib","swp" |
[표4] 암호화 제외 대상 경로 및 대상 확장자
8) 파일 암호화
① 파일 암호화에는 AES 256를 사용하고, AES Key는 RSA2048를 이용하여 암호화를 합니다.
② 암호화가 완료되면 아래와 같이 [랜덤문자열].stn 이 파일명과 확장자명이 생성됩니다.
[그림 6] 파일 암호화 완료 화면
③ 암호화가 완료된 폴더에 생성된 _HELP_DECRYPT_FILES.html라는 이름의 랜섬 노트를 보면 토르 접속 주소가 있습니다. 한국어를 포함한 총 24개의 언어로 되어있습니다.
[그림 7] 랜섬 노트 화면
결론
이 랜섬웨어의 감염 경로가 명확히 알려지지 않았으나 기존 랜섬웨어 감염경로인 익스플로잇 키트나 사용자가 신뢰할만한 기관을 사칭한 이메일로 감염되었을 것으로 추정됩니다.
이번 랜섬웨어는 서비스형 랜섬웨어(Ransomware as a Service)입니다. 일반적으로는 랜섬웨어 제작자가 곧 공격자였습니다. 그러나 RaaS 의 등장은 제작자와 공격자가 따로 존재합니다. 제작자는 별도 비용을 받지 않고 공격자 개개인의 요구에 맞춘 랜섬웨어를 만들 수 있는 웹 페이지와 진행 상황 추적 등 다양한 편의를 제공합니다. 공격자는 기술적 능력, 비용 없이도 랜섬웨어 공격을 개시할 수 있고, 제작자는 피해자가 랜섬웨어 금액을 지불하면 그 금액의 30%를 지급받는 형태입니다.
또한 이번 랜섬웨어 기존 랜섬웨어와 다르게 다양한 안티 디버깅 기법들과 프로세스 인젝션, 코드 인젝션 기법 등을 사용하여 탐지 회피 및 분석가들의 분석을 어렵게 하기위한 방법들을 사용한다는 특징이 있습니다. 랜섬노트는 한국어를 포함한 이탈리아어, 아랍어 등 24개의 다양한 언어를 지원합니다. 현재 제작자들은 지속적으로 코드를 수정하며 업데이트를 하고 있기에 다음 위협의 기반이 될 수도 있습니다.
랜섬웨어를 예방하기 위해서는 기본 보안 수칙을 준수하고, 윈도, 애플리케이션을 최신으로 업데이트해야 합니다. 또한 중요한 자료는 정기적으로 외장 매체나 클라우드 서비스 등에 백업해서 피해를 최소화 할 수 있도록 해야합니다.
문서파일 취약점을 활용한 파일리스(Fileless) 악성코드의 스텔스 위협 (0) | 2018.01.04 |
---|---|
사망한 아이돌 가수 마지막 영상과 유서로 위장한 악성 프로그램 등장 (0) | 2017.12.22 |
3.20 공격 조직의 최신 오퍼레이션 '코인 매니저 (Coin Manager)' (2) | 2017.12.19 |
페이스북 메신저로 전달되는 비디오 위장 악성파일 가상화폐 채굴 기능 주의 (6) | 2017.12.18 |
문서파일 취약점 공격과 한국 가상화폐 거래자 대상 공격간의 연관성 분석 (2) | 2017.12.15 |
댓글 영역