보안정보

전문화된 보안 관련 자료, 보안 트렌드를 엿볼 수 있는
차세대 통합보안관리 기업 이글루코퍼레이션 보안정보입니다.

솔라윈즈(Solarwinds)와 악성코드

2021.03.03

68,462


 

 

 

 

01. 개요

 

2020년 12월 13일 CISA를 통해 네트워크 관리 솔루션 SolarWinds Orion 제품의 공급망이 신원 미상의 해커들에게 공격당해 일부 버전의 제품이 백도어로 사용된 사실이 세상에 공개되었다. SolarWinds Orion은 Fortune 500대 기업 중 400곳 이상의 기업에서 사용되고 있고, SolarWinds의 전체 고객사 30만 곳 중 3만 3천 곳에서 사용 중인 제품이다. 공격자들은 악성코드가 감염된 기업 중에서도 공격 가치가 높은 정보를 탈취할 수 있는 곳을 표적으로 삼아 공격하였다. Microsoft가 공개한 피해 비중은 △IT관련 분야(44%), △정부기관(18%), △싱크탱크 및 NGO(18%), △정부 계약업체(9%), △기타(11%) 이며 공격을 당한 미 정부기관은 미국 국방부, 미국 국토안보부, 미국 국립 보건 연구원, 미국 재무부, 미국 상무부 등이 있다. 

 

현재까지의 조사 결과에 따르면 솔라윈즈 공급망 공격에서는 SUNSPOT과 SUNBURST(Solorigate) 악성코드가 사용되었다. FireEye社는 해당 공격의 배후 그룹을  UNC2452, Volexity社는 Dark Halo로 명명하고 있으며, 美 보안기관 4곳은 배후 국가로 러시아를 지목했다. Kaspersky社는 SUNBURST 악성코드가 러시아 APT 그룹 Turla가 사용하는 백도어 KAZUAR 와 유사하다고 밝혔다. 

 

본 보고서에서는 솔라윈즈 공급망 해킹 사건과 공격에서 사용된 SUNBURST 악성코드에 대해  알아보고자 한다.

 

 

 

[그림 1] Solarwinds Orion 공급망 공격 피해 비중(출처 : 마이크로소프트)

 

 

02. 공격

 

1) 솔라윈즈와 공급망 공격(Supply Attack)

 

공급망 공격(Supply Attack)이란 해커가 기업의 개발 환경에 침투하여 문제를 발생시키는 공격을 의미한다. 공급망 공격은 개발/배포 단계에서 변조된 악성코드가 소프트웨어 업체의 정상 업데이트 서버로 배포되기 때문에 사용자의 입장에서는 업데이트된 파일이 공격자에 의해 변조된 파일임을 쉽게 알아차릴 수 없다. 때문에 공격 발생 시 사용자의 입장에서는 속수무책으로 당할 수밖에 없고 기업의 입장해서는 공격이 발생하였음을 인지하기 전까지는 계속해서 악성코드를 유포하게 된다. 이러한 공급망 공격의 특성으로 인해 피해는 클 수 밖에 없으며 몇 년 전부터 공격자들의 공급망 공격 빈도가 증가하고 있다. 솔라윈즈 공급망을 공격한 해커들도 이러한 공급망 공격의 특성을 노렸다. 2019년 9월부터 시작된 공격은 2021년 1월이 되어서야 탄로 났다.

 

 

[그림 2] 솔라윈즈 공급망 공격 타임라인(출처 : 솔라윈즈 orangematter)

 

 

 

2) 영향을 받는 대상

 

악성코드의 영향을 받는 대상은 [표 1]과 같다. 2019.4.HF 4 이전의 모든 버전은 SUNBURST의 영향은 받지 않으나, 취약점(CVE-2020-10148)을 이용하는 SUPERNOVA는 모두 영향을 받는다. 

 

[SUPERNOVA] 

SUPERNOVA는 이번 솔라윈즈 공급망 공격 사고 조사 중 발견된 악성코드로, Microsoft는 공급망을 공격한 그룹이 아닌 다른 공격 그룹의 소행으로 보고 있다. SUPERNOVA는 제로데이 취약점을 이용하여 악성코드를 설치한다. 설치되는 악성코드는 .NET로 개발된 웹 쉘이며, 웹서버를 대상으로 하는 백도어이다.

 

 

순번

영향 받는

Orion 플랫폼 버전

SUNBURST

SUPERNOVA

최신버전

1

2020.2.4

X

X

최신버전

2

2020.2.1HF2

X

X

2020.2.4

3

2020.2.1 HF 1

X

O

4

2020.2.1

X

O

5

2020.2 HF 1

O

O

6

2020.2

O

O

7

2019.4.2

X

X

최신버전

8

2019.4 HF 6

X

O

2020.2.4 or 2019.4.2

9

2019.4 HF5

O

O

10

2019.4 HF 4

X

O

 

[표 1] 영향을 받는 Orion 플랫폼 버전(출처 : Solarwinds)

 

 

03. 공격에 사용된 악성코드

 

1) SUNSPOT

 

CrowdStrike 社의 분석 내용에 따르면 공격자들은 공급망에 메인 악성코드인 SUNBURST 백도어를 SUNSPOT 이라는 악성코드를 사용하였다. 해당 악성코드는 “taskhostsvc.exe”라는 이름으로  Solarwinds Orion 제품의 소프트웨어 빌드 서버에서 동작하였다. SUNSPOT은 Microsoft Visual Studio 개발도구 중 빌드에 사용되는 MsBuild.exe가 현재 Orion 소프트웨어를 빌드 중인지 확인한다. 빌드 중인 것이 확인되면 SUNSPOT은 빌드 작업을 하이재킹해 Solarwinds Orion 소프트웨어에 SUNBURST 백도어 코드를 추가하고, 백도어 코드를 추가하여 빌드 하는 도중 오류가 발생하는지에 대해 확인하였다. 현재까지 샘플의 IOC는 공개되었으나, 샘플이 공개되지 않아 직접 분석을 할 수 없었다.

 

 

2) SUNBURST

 

SUNSPOT에 의해 변조된 Solarwinds Orion 소프트웨어에 포함되어 있는 백도어 악성코드이다. FireEye社에서는 SUNBURST, Microsoft社에서는 Solorigate로 명명하고 있다. SUNSPOT은 △DGA(Domain Generation Algorithms)를 이용한 도메인 네임 변경, △보안 제품 관련 서비스 확인 및 리버싱 · 포렌식 툴 실행 여부 확인, △C2 통신 등의 행위를 통해 피해 대상의 정보를 탈취하고 일부 공격 대상에는 추가 악성코드(TEARDROP)를 이용하여 공격을 진행하였다. 본 보고서에서는 샘플이 공개된 SUNBURST에 대해서 분석을 진행하였다. 

 

 

3) TEARDROP 

 

SUNBURST에서 특정 조건을 만족 시 드롭 되는 악성코드로 소수의 공격 대상에서만 발견되었다. 감염된 사용자의 PC에서 Cobalt Strike Beacon을 로드하기 위한 로더(Loader) 역할을 한다. 

 

 

04. SUNBURST

 

1) 개요

 

공급망 공격에 의해 유포된 SUNBURST 백도어는 SolarWinds.Orion.Core.BusinessLayer.dll 파일을 이용한다. 설치는 변조된 SolarWinds Installer Patch(*.m네) 파일을 통해 설치되며. 설치 후 정상 SolarWinds.BusinessLayerHost.exe(or x64)에 의해 로드되어 악성 행위가 진행된다. 

 

 


 

 

2) 분석 파일 정보

 

본 보고서에서 분석된 분석에 사용된 샘플은 FireEye에서 공개한 악성코드 IoC에서 채택하였다. 

 

 

순번

파일명

MD5

1

CORE-2019.4.5220.20574-SolarWinds-Core-

v2019.4.5220-Hotfix5.msp 

02af7cec58b9a5da1c542b5a32151ba1 

2

Solarwinds Worldwide, LLC 

08e35543d6110ed11fdf558bb093d401 

3

SolarWinds.Orion.Core.BusinessLayer.dll 

2c4a910a1299cdae2a4e55988a2f102e 

4

SolarWinds.Orion.Core.BusinessLayer.dll 

846e27a652a5e1bfbd0ddd38a16dc865 

5

SolarWinds.Orion.Core.BusinessLayer.dll 

b91ce2fa41029f6955bff20079468448 

6

OrionImprovementBusinessLayer.2.cs 

4f2eb62fa529c0283b28d05ddd311fae 

7

app_web_logoimagehandler.ashx.b6031896.dll 

56ceb6d0011d87b6e4d7023d7ef85676 

 

[표 2] FireEye에서 공개한 악성코드 IoC 정보

 

 

순번

구분

내용

1

파일명 

SolarWinds.Orion.Core.BusinessLayer.dll

2

MD5

b91ce2fa41029f6955bff20079468448 

3

파일크기

987.34 KB

4

파일 타입

Win32 DLL(.NET)

5

AV 탐지여부

53/63 (AV 탐지여부 : Virustotal 2021/01/11 기준(UTC))

6

Version

2019.4.5200.9083

7

Compile Time

2020-03-24 08:52:34 (UTC)

8

Signing Time

2020-03-24 08:53:43 (UTC)

 

[표 3] 분석 파일 정보

 

 

3) 상세분석

 

SolarWinds.Orion.Core.BusinessLayer.dll 파일은 [표 4]와 같은 일련번호를 가진 디지털 서명으로 인증 되어있어 사용자의 입장에서는 악성코드임 의심하기가 어렵다. 

 

 

순번

구분

내용

1

일련번호

0f:e9:73:75:20:22:a6:06:ad:f2:a3:6e:34:5d:c0:ed

 

[표 4] 인증서 일련번호

 

 

 


[그림 4] 인증서 상세정보

 

 

 

메인 악성행위는 변조된 SolarWinds.Orion.Core. BusinessLayer.dll 파일의 RefreshInternal 메소드 내부 스레드를 통해 동작한다. 정상 SolarWinds.Orion.Core.BusinessLayer.dll 파일에는 다음의 try/catch 구문이 존재하지 않는다.

 

 

 

[그림 5] 변조된 RefreshInternal 메소드 내부

 

 

현재 실행중인 상위 프로세스 이름이 solarwinds.businesslayerhost 인지 해시 값을 이용하여 확인한다. 

 

 

 

[그림 6] 해시 값으로 프로세스 명 확인

 

 

SUNBURST 악성코드 내부에서 사용되는 파일/프로세스/서비스명은 64bit FNV-1A로 연산한 해시 값에 6605813339339102567 을 XOR 연산 한 값을 사용한다.

 

 

 

[그림 7] 좌-해시값을 만드는 함수  /  우-해시값을 사용하는 함수 내부

 

 

현재 실행중인 DLL파일의 마지막 수정된 날짜를 확인한다. 최종 수정된 날짜가 12~14일 이전인지 확인한다. 

 

 

 

[그림 8] 수정된 날짜를 확인하는 루틴

 

 

실행중인 악성코드의 현재 상태 값을 설정한다. 최초 실행 시 해당 악성코드는 new(4) 값이 설정된다. 이 후 행위의 조건에 따라 Truncate, Append의 값이 설정된다. 

 


 [그림 9] 실행중인 악성코드의 현재 상태 값을 설정

 

 

악성코드가 동작중인 PC에서 도메인 네임을 확인한다. 도메인 네임이 존재하는 경우 해당 도메인 네임이 다음의 [표 5]에 포함된 이름에 해당되는지 확인한다. 감염된 대상에서 도메인 네임을 가지고 올 수 없거나 [표 5]에 포함된 도메인 네임을 가지고 있으면 악성코드는 종료된다. 

 

 

 

[그림 10] 도메인 네임을 확인하는 루틴

 

 

도메인 네임(13)

swdev.local

swdev.dmz

lab.local

lab.na

emea.sales

cork.lab

dev.local

dmz.local

pci.local

saas.swi

lab.rio

lab.brno

apac.lab

-

-

 

[표 5] 악성코드에서 확인하는 도메인 네임

 

 

악성코드에서는 사용자의 PC에 설치된 보안 프로그램 확인을 위해 드라이브 파일과 서비스, 현재 실행중인 프로세스를 확인한다. 8개의 보안 제품을 확인하며 [표 6]의 서비스들이 동작중인 경우 레지스트리를 수정하여 [사용 안함] 상태로 변경한다.

 

 

확인하는 보안제품(8)

Windows Defender

Windows Defender Advanced Threat Protection

Microsoft Defender for Identity

carbonblack

CrowdStrike

FireEye

ESET

f-secure

 

[표 6] 악성코드에서 확인하는 보안 제품 종류

 

 

 

프로세스/서비스명(59)

carbonblack

csfalconservice

epfw

fe_avk

fsdevcon

fsni

carbonblackk

eamonm

epfwwfp

feelam

fsdfw

fsorsp

cavp

eelam

f-secure filter

fekern

fses

fsorspclient

cb

egui

f-secure gatekeeper

fewscservice

fsfw

fssm32

cbcomms

eguiproxy

f-secure gatekeeper handler starter

fnrb32

fsgk32

fsvista

cbstream

ehdrv

f-secure hips

fsaua

fsgk32st

fswebuid

csagent

ekbdflt

f-secure network

request broker

fsaus

fsma

microsoft.tri.sensor

csdevicecontrol

ekrn

f-secure recognizer

fsav32

fsma32

microsoft.tri.sensor.updater

csfalconcontainer

ekrnepfw

f-secure webui

daemon

fsbts

fsms

msmpeng

sense

windefend

mssense

xagt

xagtnotif

 

 

[표 7] 악성코드에서 확인하는 프로세스/서비스 명

 

 

사용자의 PC에 악성코드 분석/포렌식 등에 사용되는 툴이 동작중인 지 확인한다. 이 때 확인하는 툴은 136개 이며 악성코드가 분석/탐지되는 것을 방지하기 위해 많은 노력을 들인 부분으로 보여진다. 확인하는 136개의 툴 중에는 악성코드 분석에 많이 사용되는 IDA, ollydbg, x32/64dbg, dnspy, peid, peview, tcpview, tcpdump, procmon 등 다양한 툴들이 확인되었다. 

 

해당 악성코드에서는 최종 C2에 연결하기 위해 중간단계 서버를 거친다. 이 중간단계 서버는 avsvmcloud[.]com 도메인에 대한 권한이 있는 서버이며 해당 악성코드의 Update 메소드에서는 중간단계 서버와의 통신을 위해 DGA(Domain Generation Algorithms)를 이용하여 하위 도메인을 생성한다. 하위 도메인은 [표 8]의 규칙으로 생성된다. userId, domain2, domain3, domain1은 악성코드에서 사용된 변수명을 의미하며 [domain3]의 경우 4개의 값 중 하나가 랜덤으로 사용된다. 

 

 

userId

domain2

Domain3(랜덤 1)

domain1

감염된 컴퓨터 정보

appsync-api

eu-west-1
eu-west-2
us-east-1
us-east-2

avsvmcloud[.]com

 

[표 8] C2 도메인 생성에 사용되는 값 

 

 

[userId] 는 감염된 PC의 △ 물리주소, △ 도메인 네임, △ Hardware ID를 수집하여 생성된다. 악성코드 내부의 루틴을 이용하여 인코딩 되며 이 정보를 디코딩 하여 악성코드에 감염된 도메인을 특정할 수 있다. 

※ 디코더 : https://github.com/RedDrip7/SunBurst_DGA_Decode/blob/main/decode.py

 


 

[그림 11] [userId] 값을 생성하는 함수 내부

 

중간단계 서버

 FireEye 社에서는 C2 Coordinator Protocol, PREVASIO 社에서는 authoritative DNS server로 표현되며 본 보고서에서는 임의로 중간단계 서버라 명명하였다. 

 

A Record / CNAME Record

 - SUNBURST에서는 인코딩된 DNS 요청을 전송하여 C&C서버와 통신한다. 전송된 요청에 따라 공격자는 A Record, CNAME Record 로 DNS응답을 보낼 수 있다. 

통신 시 중간단계 서버의 응답(A Record, CNAME Record)에 따라 이후의 행위가 달라진다. A Record로 응답 시 해당 IP가 [표9]에 포함되는지 확인한다. 확인 후 각각의 Address Family에 맞는 모드로 전환한다. 공개된 킬 스위치(Kill Switch)는 해당 악성코드의 IP가 Address Family Atm, ImpLink에 속한 경우 종료되는 행위를 이용한다.

 

 

순번

IP/Subnet Mask

Address Family

순번

IP/Subnet Mask

Address Family

1

10.0.0.0/255.0.0.0

Atm

12

20.140.0.0/255.254.0.0

ImpLink

2

172.16.0.0/255.240.0.0

13

96.31.172.0/255.255.255.0

3

192.168.0.0/255.255.0.0

14

131.228.12.0/255.255.252.0

4

224.0.0.0/240.0.0.0

15

144.86.226.0/255.255.255.0

5

fc00::/fe00::

16

8.18.144.0/255.255.254.0

NetBios

6

fec0::/ffc0::

17

18.130.0.0/255.255.0.0

7

ff00::/ff00::

18

71.152.53.0/255.255.255.0

8

41.84.159.0/255.255.255.0

Ipx

 

19

99.79.0.0/255.255.0.0

9

74.114.24.0/255.255.248.0

20

87.238.80.0/255.255.248.0

10

154.118.140.0/255.255.255.0

21

199.201.117.0/255.255.255.0

11

217.163.7.0/255.255.255.0

22

184.72.0.0/255.254.0.0

 

 

중간단계 서버가 CNAME Record 로 응답 시 HTTP(S) 기반의 C2와 추가로 통신을 진행한다. HTTP(S) C2통신을 통해 받아온 명령코드 값을 이용하여 JobEngine 메소드 내부의 다양한 기능 사용한다. 

 

 

Command

Idle

Exit

SetTime

CollectSystem

Description

UploadSystem

Description

RunTask

GetProcessBy

Description

KillTask

GetFileSystem Entries

WriteFile

FileExists

DeleteFile

GetFileHash

ReadRegistryValue

SetRegistryValue

DeleteRegistryValue

GetRegistrySubKeyAndValueNames

Reboot

-

-

 

[표 10] JobEngine 메소드 내 명령어

 

 

05. MITRE ATT&CK 

 

▶ MITRE ATT&CK for Enterprise(v8.1)

 

다양한 매체를 통해 솔라윈즈 공급망 공격사건과 SUNBURST에 대한 MITRE ATT&CK Techniques을 공개했다.  그 중 본 보고서에서 분석 된 부분만 따로 정리해보았다. 

 

 

Enterprise tactics

NAME

(ID)

Description

Persistence

Create or Modify System Process: 

Windows Service

(T1543.003)

8개의 보안제품에 대한 서비스/프로세스를 검색 후 서비스 동작중이면 [동작 안함] 상태로 플래그 변경

Privilege Escalation

Create or Modify System Process: 

Windows Service

(T1543.003)

8개의 보안제품에 대한 서비스/프로세스를 검색 후 서비스 동작중이면 [동작 안함] 상태로 플래그 변경

Defense Evasion

Obfuscated Files or Information

(T1027)

악성코드 내부 문자열은 Deflate + base64로 압축/인코딩
내부에서 사용되는 파일, 프로세스, 서비스등의 이름은  64bit FNV-1A 해시값에 XOR 연산값 사용

Subvert Trust Controls: 

Code Signing

(T1553.002)

디지털 서명 존재

Discovery

Software Discovery

(T1518)

현재 실행중인 분석툴이 있는지 검색(136)

Software Discovery :Security Software Discovery

(T1518.001)

8개의 보안 제품에 대한 서비스/프로세스를 검색(59)

Command and Control

Application Layer Protocol: Web Protocols

(T1071.001)

C2 통신을 통해 받아온 명령코드 값을 이용하여 추가행위

Application Layer Protocol: DNS

(T1071.004)

A RecordCNAME 으로 받아온 값을 이용하여 각기 다른 행위

Dynamic Resolution: Domain Generation Algorithms

(T1568.002)

DGA알고리즘을 이용하여 도메인을 생성

 

[표 11] MITER ATT&CK

 

 

06. 참고자료

 

[1]https://www.fireeye.com/blog/threat-research/2020/12/evasive-attacker-leverages-solarwinds-supply-chain-compromises-with-sunburst-backdoor.html

[2]https://www.mcafee.com/blogs/other-blogs/mcafee-labs/additional-analysis-into-the-sunburst-backdoor/

[3]https://www.microsoft.com/security/blog/2020/12/18/analyzing-solorigate-the-compromised-dll-file-that-started-a-sophisticated-cyberattack-and-how-microsoft-defender-helps-protect/

[4]https://www.fireeye.com/blog/threat-research/2020/12/evasive-attacker-leverages-solarwinds-supply-chain-compromises-with-sunburst-backdoor.html

[5]https://www.picussecurity.com/resource/blog/ttps-used-in-the-solarwinds-breach

[6]https://blog.prevasio.com/2020/12/dns-tunneling-in-solarwinds-supply.html

[7]https://www.microsoft.com/security/blog/2021/01/20/deep-dive-into-the-solorigate-second-stage-activation-from-sunburst-to-teardrop-and-raindrop/

[8] https://securelist.com/sunburst-connecting-the-dots-in-the-dns-requests/99862/