ASEC(AhnLab Security Emergency response Center)은 최근 중국 원격 제어 프로그램인 Sunlogin 및 AweSun에 대한 원격 코드 실행 취약점 공격을 통해 PlugX 악성코드가 설치되고 있는 것을 확인하였다.
Sunlogin의 원격 코드 실행 취약점(CNVD-2022-10270 / CNVD-2022-03672)은 익스플로잇 코드가 공개된 이후 최근까지 다양한 공격에 사용되고 있다. 과거 ASEC은 블로그를 통해 Sunlogin RCE 취약점을 통해 Sliver C2와 XMRig 코인 마이너 그리고 Gh0st RAT 악성코드가 유포되고 있다는 사실을 공개한 바 있다. 참고로 Gh0st RAT 또한 중국에서 개발된 악성코드임에 따라 주로 중국을 기반으로 하는 공격자들이 주로 사용하는 RAT 악성코드이다.

AweSun 또한 중국에서 개발된 원격 제어 프로그램으로서 구체적인 취약점은 확인되지 않았지만 Sunlogin과 유사한 RCE 취약점이 공개된 것으로 추정된다. 동일한 공격자들은 Sliver C2를 설치하는데 Sunlogin 뿐만 아니라 AweSun에 대한 RCE 취약점 공격도 함께 사용하였다. 이후에는 동일한 취약점 공격들을 이용해 Paradise 랜섬웨어를 설치하는 사례도 확인되어 블로그에서 공개한 바 있다.

1. PlugX
PlugX는 중국 기반의 APT 공격 그룹들이 사용하는 대표적인 백도어 악성코드들 중 하나이다. 2008년 경부터 유포가 시작된 것으로 알려져 있으며 최근까지도 다양한 기능들이 추가된 변종들이 공격에 사용되고 있다. PlugX를 공격에 사용했던 APT 공격 그룹들로는 대표적으로 Mustang Panda, Winnti, APT3, APT41 등이 존재하며 대부분 중국을 기반으로 하는 것으로 알려져 있다. [1]
PlugX는 모듈 기반의 악성코드로서 각각의 기능을 담당하는 다양한 플러그인들을 지원한다. 즉 PlugX를 사용하는 공격자는 시스템 제어나 정보 탈취 등 특정 기능을 담당하는 플러그인들을 이용해 원하는 악성 행위를 수행할 수 있다.
PlugX의 또 다른 특징이라고 한다면 DLL Side-Loading 방식을 이용한다는 점이 있다. DLL Side-Loading 방식은 정상 프로그램과 동일한 경로에 악성 DLL을 설치하고 정상 프로그램을 실행하여 정상 프로그램에 의해 악성 DLL이 로드되어 악성 루틴을 실행시키는 방식이다. 이는 보안 제품의 탐지를 우회하기 위한 것으로서, 악성 행위를 수행하는 주체가 정상 프로세스가 되어 정상 프로그램의 행위로 인지될 수 있기 때문이다.
이에 따라 PlugX는 주로 압축 파일이나 드로퍼(Dropper) 형태로 유포되는데, 최종적으로 동일 경로에 정상 EXE 실행 파일과 DLL Side-Loading에 사용되는 이름을 갖는 악성 로더(Loader) DLL 그리고 인코딩된 데이터 파일이 생성된다. 실행 파일은 동일 경로에 존재하는 로더 DLL을 로드해 실행하게 되고 로더 DLL은 동일 경로에 위치하는 데이터 파일을 읽어 복호화하여 메모리 상에서 실행한다. 이러한 과정을 거쳐 최종적으로 메모리 상에서 동작하는 악성코드가 PlugX이다.
2. 취약점 공격을 통해 설치되는 PlugX
ASEC에서는 취약점이 패치되지 않은 시스템이나 부적절하게 설정된 시스템들을 대상으로 하는 공격들을 모니터링하고 있으며, 최근 PlugX가 Sunlogin 및 AweSun의 RCE 취약점 공격을 통해 설치되고 있는 것을 확인하였다.
자사 ASD(AhnLab Smart Defense) 로그에 따르면 취약점 공격을 통해 실행된 파워쉘 명령이 esetservice.exe라는 이름의 파일을 생성한 것이 확인되었다.

esetservice.exe는 실제 ESET 사의 HTTP Server Service 프로그램으로서 정상 파일이다

관련 로그를 더 확인한 결과 공격자는 esetservice.exe 외에도 http_dll.dll이라고 하는 이름의 파일을 추가적으로 다운로드하였다. 참고로 다음은 공격자가 Sunlogin 외에 AweSun 취약점 공격도 함께 사용하는 것을 보여주기 위해 다른 시스템에서 확인한 로그이다.

두 파일의 연관 관계를 조사하던 중 “esetservice.exe” 프로그램이 추가적인 인자 없이 실행될 경우 동일 경로에 위치하는 “http_dll.dll” 파일을 로드하는 기능이 존재한다는 사실이 확인되었다. 이는 전형적인 DLL Side-Loading 방식으로서, PlugX는 이러한 DLL Side-Loading 방식을 사용하는 대표적인 악성코드이다.

PlugX는 정상 exe 프로그램과 로더 역할을 담당하는 DLL 그리고 실제 악성코드가 인코딩되어 있는 데이터 파일이 한 묶음으로 유포된다. 실제 코드 분석 상 “http_dll.dll”이 동일 경로에 존재하는 “lang.dat” 파일을 읽어와 복호화 한 후 실행하는 루틴이 확인되었다.
3. PlugX 드로퍼 및 로더 분석
PlugX 악성코드를 분석하던 중 VirusTotal에서 동일한 “esetservice.exe” 및 “http_dll.dll” 파일을 공격에 사용하는 악성코드가 확인되었다. 해당 악성코드는 WinRar Sfx 포맷의 드로퍼 악성코드로서 실행 시 “esetservice.exe”, “http_dll.dll” 그리고 “lang.dat” 파일을 생성한 후 “esetservice.exe”를 실행하여 최종적으로 PlugX가 실행될 수 있도록 설치한다. 해당 드로퍼는 위에서 다룬 취약점 공격에서 확인된 것은 아니지만 PlugX의 C&C 주소와 취약점 공격에 사용된 다운로드 주소가 동일한 것으로 보아 동일 공격자의 소행으로 추정된다.
PlugX 드로퍼는 정상 프로그램들의 경로로 위장하여 악성코드들을 “C:\ProgramData\Windows NT\Windows eset service” 경로에 생성한다. 그리고 사용자들의 눈에 띄지 않게 하기 위해 숨김 속성을 부여한다.

“esetservice.exe”가 실행되면 동일 경로에 위치한 “http_dll.dll”을 로드하게 되고, 이에 따라 “http_dll.dll”의 DllMain() 함수가 실행된다. DllMain()은 “lang.dat” 파일을 로드하는 기능을 담당하는 함수를 직접 실행하는 대신 다음과 같이 “esetservice.exe”의 코드를 수정하여 “esetservice.exe”가 “http_dll.dll”을 로드한 직후 직접 “http_dll.dll”의 로더 루틴으로 분기하도록 패치한다.

해당 루틴은 동일 경로에 위치한 “lang.dat” 파일을 로드하여 메모리 상에서 실행하는 기능을 담당한다. “lang.dat” 파일의 시작은 쉘코드이며 해당 코드가 실행되면서 함께 저장되어 있는 PlugX를 복호화 하여 메모리 상에서 실행한다.

4. PlugX 분석
위에서도 다루었듯이 PlugX는 10여 년 이상 꾸준히 업데이트가 이루어진 악성코드이다 보니 최근까지도 다양한 변종들이 확인되고 있다. 2020년 Dr. Web에서는 다양한 PlugX 변종들을 분류하고 분석한 보고서를 공개한 바 있다. [2] 최근 2022년에는 Security Joes 사에서 가장 최근 확인된 PlugX 변종을 다루었다. 현재 분석 대상이 되는 PlugX는 Dr. Web 보고서의 BackDoor.PlugX.38 변종과 거의 유사하며, 설정 데이터를 제외한다면 가장 최근 공개된 Security Joes의 보고서에서 다룬 PlugX와 동일할 것으로 추정된다. [3]
공격에 사용된 PlugX는 인자에 따라 다양한 모드를 제공한다. 다음은 현재 분석 대상인 PlugX를 실행했을 때 확인되는 프로세스 트리이며, “100”, “200”, “201”, “209” 4개의 모드가 차례대로 실행된 것을 알 수 있다.

최초 PlugX 드로퍼를 실행하면 “%PUBLIC%\Downloads\” 경로에 “esetservice.exe”, “http_dll.dll”, “lang.dat” 파일을 생성하고 “esetservice.exe”를 실행한다. “esetservice.exe” 프로세스에 의해 로드되어 실행되는 PlugX는 WMi의 Win32_Process 클래스의 create 메서드를 이용해 인자 “100”을 주고 자신을 다시 실행시킨다.
인자 “100”을 받아 실행되는 경우에는 UAC Bypass 과정을 진행하는데, 이에 앞서 먼저 인젝션 과정을 수행한다. 인젝션 대상 프로세스는 “runonce.exe”이며 쉘코드를 인젝션 한다. 인젝션 된 쉘코드는 ICMLuaUtil 인터페이스를 악용해 UAC를 우회하고 관리자 권한으로 실행하는 기능을 담당한다. 이를 통해 “esetservice.exe”는 관리자 권한으로 실행되며, 이후 서비스로 자신을 등록하여 인자를 “200”으로 설정한다. 여기까지의 과정이 끝나면 다시 인젝션 대상 프로세스인 “runonce.exe”를 인자 201을 주고 실행하여 자신을 인젝션 하며, “runonce.exe”는 플러그인을 담당하는 프로세스 “msiexec.exe”을 인자 “209”를 주고 실행 및 인젝션 한다. 위의 과정은 각각의 인자 별로 실행되는 모드가 달라지는 것을 의미하는데, 정리하자면 다음과 같다.
인자 | 모드 |
---|---|
인자 없음 | 최초 실행 단계 |
100 | UAC 우회 단계 |
200 | 인젝션 단계 |
201 | 메인 루프 #1 |
202 | 메인 루프 #2 |
209 | 플러그인 모드 |
300 | 자가 삭제 |
“lang.dat” 파일에는 쉘코드 및 인코딩된 PlugX 외에도 설정 데이터가 포함되어 있다. 설정 데이터 또한 인코딩되어 존재하며, PlugX는 실행 중 해당 데이터를 디코딩하여 C&C 주소와 같은 설정 정보를 획득한다. C&C 서버의 주소는 4개 존재하며 다음과 같다.

- cdn.imango[.]ink:443
- api.imango[.]ink:443
- api.imango[.]ink:53
- cdn.imango[.]ink:53
PlugX가 지원하는 명령들은 Dr. Web에서 공개한 보고서의 BackDoor.PlugX.38 버전과 거의 유사하지만 0x0B, 0x0C 항목 즉 2개의 명령이 추가된 점이 차이점이다.
명령 | 기능 |
---|---|
0x01 | 수집한 정보 전달 |
0x02 | 명령 재요청 |
0x03 | 플러그인 관련 |
0x04 | 연결 재설정 |
0x05 | 자가 삭제 |
0x06 | 설정 데이터 업로드 |
0x07 | 설정 데이터 업데이트 |
0x08 | 실질적인 기능은 담당하지 않음 |
0x09 | 실질적인 기능은 담당하지 않음 |
0x0A | PING (전달받은 주소에 대해 53번 포트로) |
0x0B | 외부에서 파일 다운로드 및 실행 |
0x0C | 서비스 시작 |
PlugX가 지원하는 플러그인도 기존 BackDoor.PlugX.38 버전과 비교해서 클립보드 정보 탈취 및 RDP 전파를 담당하는 2개의 추가적인 플러그인이 포함되어 있다. 관련 내용은 2022년 12월 공개된 Security Joes 사의 보고서에 포함되어 있다.
플러그인 | Date Time Stamp | 기능 |
---|---|---|
Disk | 0x20120325 | 파일 관련 작업. (파일 조회 / 읽기 / 쓰기, 프로세스 실행 등) |
KeyLog | 0x20120324 | 키로깅 |
Nethood | 0x20120215 | 네트워크 공유 리소스 정보 조회 |
Netstat | 0x20120215 | TCP / UDP 연결 테이블 조회 및 TCP 엔트리 설정 |
Option | 0x02120128 | 워크스테이션 작업 |
PortMap | 0x02120325 | 구현되지 않음 |
Process | 0x20120204 | 프로세스 / 모듈 조회, 프로세스 종료 |
RegEdit | 0x20120315 | 레지스트리 관련 작업. (조회, 생성, 삭제 등) |
Screen | 0x20120220 | 스크린샷 캡쳐 및 원격 데스크탑. |
Service | 0x20120117 | 서비스 관련 작업. (조회, 제어, 삭제 등) |
Shell | 0x20120305 | 원격 제어 쉘 (파이프 통신) |
SQL | 0x20120323 | SQL 관련 작업 (정보 조회, 명령 실행 등) |
Telnet | 0x20120225 | TELNET 서버로 동작 |
ClipLog | 0x20190417 | 클립보드 정보 탈취 |
RDP | 0x20190428 | RDP 공유 폴더를 이용한 전파 |
참고로 탈취한 데이터가 저장되는 위치는 악성코드마다 다를 것으로 추정된다. 예를 들어 기존 보고서와 달리 탈취한 클립보드 데이터는 설치 경로 내의 “clang.aif” 파일에, 키로깅 데이터는 “ksys.aif” 파일에 저장된다.

5. 결론
최근 패치되지 않은 취약한 소프트웨어를 대상으로 다양한 악성코드들을 설치하는 사례들이 확인되고 있다. 취약점 공격을 통해 설치되는 악성코드들로는 Sliver, Paradise 랜섬웨어 및 코인 마이너 악성코드들이 있었지만 최근에는 PlugX 백도어를 유포하는 사례도 확인된다.
PlugX는 중국 기반의 APT 공격 그룹들이 사용하는 대표적인 백도어 악성코드들 중 하나이며 최근까지도 다양한 기능들이 추가되고 있는 등 꾸준히 공격에 사용되고 있다. 백도어인 PlugX가 설치되면 공격자는 사용자 몰래 감염 시스템에 대한 제어를 획득할 수 있으며, 이에 따라 사용자의 키 입력 정보 및 스크린샷 캡쳐를 포함한 정보 탈취, 추가 악성코드 설치와 같은 다양한 악성 행위를 수행할 수 있다.
사용자들은 설치된 소프트웨어를 최신 버전으로 패치하여 취약점 공격을 사전에 방지해야 한다. 또한 V3를 최신 버전으로 업데이트하여 악성코드의 감염을 사전에 차단할 수 있도록 신경 써야 한다.
파일 진단
– Malware/Win.Generic.C5387131 (2023.02.24.00)
– Trojan/Win.Loader.C5345891 (2022.12.30.02)
– Data/BIN.Plugx (2023.03.03.03)
행위 진단
– Malware/MDP.Download.M1197
IOC
MD5
– 709303e2cf9511139fbb950538bac769
– d1a06b95c1d7ceaa4dc4c8b85367d673
– d973223b0329118de57055177d78817b
다운로드 주소
– hxxp://api.imango[.]ink:8089/http_dll.dll
– hxxp://api.imango[.]ink:8089/esetservice.exe
C&C 주소
– cdn.imango[.]ink:443
– api.imango[.]ink:443
– api.imango[.]ink:53
– cdn.imango[.]ink:53
연관 IOC 및 관련 상세 분석 정보는 안랩의 차세대 위협 인텔리전스 플랫폼 ‘AhnLab TIP’ 구독 서비스를 통해 확인 가능하다.
Categories:악성코드 정보