2021년 5월 9일 일요일

[후속] 랜섬웨어와 기름값

'다크사이드' 랜섬웨어의 공격 방식을 기술적으로 알아보는 포스팅이다
[1] UAC 우회를 통한 권한상승
먼저 '다크사이드' 랜섬웨어 (이하, 줄여서 ds)는 UAC 우회를 시도한다 ds가 이용하는 UAC 우회 방식은 CMSTPLUA COM interface 취약점으로, Microsoft사의 COM 객체 인터페이스 취약점을 이용한 방식이다 (이 취약점은 최신버전 Windows 10에서는 보완되었다 그러나 os 업데이트를 하지 않은 사용자는 여전히 취약점에 노출되는 문제가 있다) 
CMSTPLUA COM 객체 취약점을 이용하면 결과적으로 UAC 를 우회하여 악성 프로그램이 상승된 권한으로 실행된다 
-----CMSTPLUA COM 객체 취약점을 이용한 권한상승(UAC Bypass)-----
1. ds가 다음의 인자 <Elevation:Administrator!new:{3E5FC7F9-9A51-4367-9063-A120244FBEC7}>를 주어 CoGetObject() 함수를 호출한다
: {} 사이의 clsid가 의미하는 것은 COM 객체 식별자로 여기서 3E5F~ 의 값은 CMSTPLUA 객체를 가리킨다
2. ds는 1에서 clsid 뿐만 아니라 해당 객체 하위 특정 인터페이스 아이디(IID, 여기서는 ICMLuaUtil)도 함께 명시하여 호출 한다 그 결과 해당 객체 하위 인터페이스 ICMLuaUtil의 VTable(메소드, 가상 함수의 주소를 담고있는 리스트)에 접근이 가능해진다
3. 마지막으로 ds 는 2에서 얻은 ICMLuaUtil 인터페이스를 통해 shellexcute 메소드를 호출하여 임의의 명령어를 수행할 수 있다 이 명령을 수행하는 주체는 앞서 1의 함수 호출로 인해 관리자 권한으로 실행된 dllhost.exe 프로세스이다 만약에 shellexcute 메소드의 인자로 cmd.exe를 넘기면 프롬프트 창이 관리자 권한으로 실행된다 새롭게 실행되는 프로세스는 부모 프로세스(dllhost.exe)의 권한을 그대로 물려받아 (관리자 권한) 실행되기 때문이다 ds 는 당연히 shellexecute 메소드로 악성 프로그램을 실행시키겠지..
----------
악성 프로그램이 상승된 권한, 즉 높은 권한을 갖는다는 것은 악성 행위를 수행하는 데 제한이 없다는 것을 의미한다
[2] 특정 국가 제외
ds는 다음의 함수들을 사용하여 사용자 pc가 실행되는 국가를 확인한다
GetSystemDefaultUILanguage(), GetUserDefaultLangID()
화이트 리스트에 해당하는 국가의 pc인 경우 암호화 대상에서 제외된다
[3] 로깅
ds는 암호화가 진행되는 일련의 과정과 암호화가 완료된 파일에 대한 정보를 로그파일에 기록한다
[4] 원본파일 삭제
ds 는 SHEmptyRecycleBinA() 함수를 사용하여 휴지통을 비우는 대신 휴지통에 들어간 파일과 폴더 하나 하나를 일일이 지우는 방식으로 원본을 영구 삭제한다
[5] 복구가 불가하도록 복구 프로그램 삭제
vss sql svc memtas mepocs sophos veeam backup
볼륨 쉐도우 카피 서비스를 삭제할 뿐만 아니라 vss 가 만들어둔 복사본도 일일이 제거한다 이 작업은 난독화된 파워쉘 스크립트로 수행한다
[6] 암호화를 수행하기 전 마지막 단계, 프로세스 종료
sql
oracle
ocssd
dbsnmp
synctime
agntsvc
isqlplussvc
xfssvccon
mydesktopservice
ocautoupds
encsvc
firefox
tbirdconfig
mydesktopqos
ocomm
dbeng50
sqbcoreservice 
excel
infopath
msaccess
mspub
onenote
outlook
powerpnt
steam
thebat
thunderbird
visio
winword
wordpad
notepad
위 프로세스를 종료시킨다 암호화 시킬 파일이 위 프로세스에 의해 락이 걸려 암호화에 실패하는 것을 방지하기 위함이다
[7] 암호화
CreateIoCompletionPort()와 PostQueuedCompletionPort(), GetQueuedCompletionPort()를 사용해 IOCP 통신 구조를 구현, 총 8개의 스레드에서 동시다발적으로 파일 암호화를 수행한다
다음에 해당하는 파일은 암호화에서 제외된다

[8] 랜섬노트
사용자 pc가 랜섬웨어에 감염되었음을 알리고 금전적 요구를 하는 메시지를 pc에 남긴다

댓글 없음:

댓글 쓰기