국내 DVR 관리 소프트웨어를 통해 유포된 Wpcdoor 공격 사례 분석
2026년 10월 27일 Huntress사에서는 DVR 관리 소프트웨어를 악용한 악성코드 유포 사례를 공개하였다. [1] 해당 사례에서 악용된 업체는 CCTV, DVR 등의 제품을 개발하는 국내 업체였으며 자사 ASD 로그에 따르면 국내에서도 감염 로그들이 확인되었다. 동일한 유형의 악성코드들이 이후 해당 사례 외에도 지속적으로 확인되는 것을 보면 공격자는 다양한 방식을 이용해 악성코드를 유포하고 있는 것으로 보인다. 여기에서는 국내에서 확인된 공격 사례들과 사용된 악성코드들을 분석하고 추가적으로 수집된 동일 유형들을 정리한다.
1. 공격 흐름
1.1. DVR 관리 소프트웨어
Huntress사의 보고서에서는 국내 업체의 DVR 관리 소프트웨어인 CMS(Central Management Software)의 “CMS.exe”에 의해 악성코드가 설치된 점을 확인하였지만 해당 공격과 공급 업체와의 관계는 알 수 없다는 내용이 존재한다. 자사 로그에서도 동일하게 “CMS.exe” 프로세스가 악성코드 “iphlpapi.dll”을 생성한 로그가 확인되었다. 해당 공격이 취약점 공격인지 또는 부적절한 설정이나 기본적으로 지원하는 기능을 악용한 것인지는 확인되지 않는다.

Figure 1. CMS.exe 프로세스에 의해 생성된 악성코드
1.2. 악성코드 설치
A. CMS 소프트웨어가 “rs.win32.exe” 설치하는 과정에서 악성코드 “IPHLPAPI.DLL”을 다운로드
B. “IPHLPAPI.DLL”은 DLL Side-Loading 방식으로 “rs.win32.exe” 프로세스에 로드되어 동작
C. “IPHLPAPI.DLL”은 다운로더로서 정상 프로그램 “WpcMon.exe”와 악성코드 “samcli.dll” 설치 및 실행
D. “samcli.dll” 또한 다운로더로서 백도어 악성코드 Wpcdoor를 다운로드해 메모리에서 실행
E. Wpcdoor는 감염 시스템의 정보를 탈취해 C&C 서버에 전송하며 이후 공격자의 명령 수행 가능
“rs.win32.exe”는 DVR 관리 소프트웨어로서 해당 경로가 과거부터 사용되어 왔다. 구체적인 방식은 알 수 없지만 일반적으로 CMS의 업데이트 과정이나 특정 기능 활성화 시 “%APPDATA%\CMS\RemoteSetup\” 경로에 “rs.win32.exe” 및 관련 모듈이 설치되는 것으로 추정된다.
참고로 VirusTotal에 업로드된 압축 파일에는 “rs.win32.exe”와 해당 프로그램 구동에 필요한 Qt 라이브러리 파일들 그리고 “IPHLPAPI.DLL”, “IPHLPAPI_.DLL”이 존재한다. 이 중에서 악성코드는 “IPHLPAPI.DLL”이다. 즉 CMS에 의해 아래와 같은 파일들이 “%APPDATA%\CMS\RemoteSetup\” 경로에 설치되었을 것으로 추정된다.

Figure 2. 압축 파일에 존재하는 유틸리티 및 악성코드
이후 “rs.win32.exe”가 실행되면 동일 경로에 위치한 악성코드 “IPHLPAPI.DLL”이 DLL Side-Loading 방식으로 로드되는데 해당 악성코드는 “%LOCALAPPDATA%\Microsoft\WpcMon\” 경로에 정상 시스템 파일인 “WpcMon.exe”와 악성코드 “samcli.dll”을 설치하고 “WpcMon.exe”를 실행한다. “WpcMon.exe”는 DLL Side-Loading 방식으로 “samcli.dll”을 로드하는데 해당 악성코드 또한 다운로더로서 최종 백도어 악성코드 Wpcdoor를 다운로드해 메모리에서 실행한다.

Figure 3. WpcMon.exe 프로세스에 의해 로드된 악성코드
2. 악성코드 분석
2.1. 1단계 다운로더 (IPHLPAPI.DLL, QtCore4.dll)
“IPHLPAPI.DLL”은 “rs.win32.exe”에 의해 로드되어 실행되는데 GetAdaptersInfo() API를 Export하고 있으며 해당 API가 호출될 경우 동일 경로에 위치한 실제 정상 파일인 “IPHLPAPI.DLL”의 GetAdaptersInfo()를 호출해 준다.
실행 시 C&C 서버에 접속해 다운로드할 파일을 요청하는데 “WpcMon.exe”와 “samcli.dll” 2개의 요청이 이루어진다. 패킷은 시그니처 “WPCF”를 시작으로 마지막에 요청 파일의 이름이 포함된다.

Figure 4. 파일 다운로드 요청 시 패킷
| Offset | Size | Request | Response |
|---|---|---|---|
| 0x00 | 0x04 | “WPCF” | “WPCF” |
| 0x04 | 0x02 | 00 01 | 00 01 |
| 0x06 | 0x02 | 00 10 | 00 20 |
| 0x08 | 0x04 | 랜덤 데이터의 크기 | 암호화된 데이터의 크기 |
| 0x0C | 0x04 | Checksum | Checksum |
| 0x10 | – | 랜덤 데이터 (0x14) | 암호화된 데이터 |
| 0x24 | – | 다운로드할 파일의 이름 | N/A |
Table 1. 다운로드 요청 시 패킷 구조
다운로드한 페이로드는 0x82615458 키로 XOR 복호화하며 “%LOCALAPPDATA%\Microsoft\WpcMon\” 경로에 생성하고 “WpcMon.exe”를 실행한다. 현재 기준 접속은 불가하지만 Huntress사의 보고서 및 ASD의 로그를 보면 2단계 다운로더를 설치했을 것으로 추정된다.
- 다운로드 경로 – 1 : %LOCALAPPDATA%\Microsoft\WpcMon\WpcMon.exe
- 다운로드 경로 – 2 : %LOCALAPPDATA%\Microsoft\WpcMon\samcli.dll

Figure 5. 다운로드 루틴
참고로 해당 공격 사례 외에도 “QtCore4.dll”라는 이름의 1단계 다운로더가 추가적으로 확인되었다. “QtCore4.dll”는 위의 유형과 실질적으로 동일한 형태이지만 다운로더 경로 등에 차이가 있다. 다음 경로에 2단계 다운로더를 “rsaenh.dll”라는 이름으로 다운로드한 후 환경 변수 “WINDIR”, “SYSTEMROOT”를 “%LOCALAPPDATA5\Microsoft\Windows\” 경로로 변경한 후 “C:\Windows\Sysnative\FileHistory.exe” 파일을 실행하는 방식이 사용된다.
- 다운로드 경로 : %LOCALAPPDATA%\Microsoft\Windows\System32\rsaenh.dll
2.2. 2단계 다운로더 (samcli.dll, rsaenh.dll)
2단계 다운로더인 “samcli.dll”은 다운로더로서 파일 형태가 아닌 메모리에서 다운로드된 페이로드를 실행한다. 처음 실행되면 Mutex를 검사하며 이후 C&C 서버와 통신하는데 통신 패킷 구조 및 복호화에 사용되는 XOR 키도 1단계 다운로더와 동일하다.
- Mutex : Global\81669d8b1539333e96b84c2e5c4dba5d
“QtCore4.dll” 사례에서는 “samcli.dll” 대신 “rsaenh.dll”가 다운로드된다. “rsaenh.dll” 또한 2단계 다운로더와 동일한 형태이다.

Figure 6. 백도어 다운로드 요청 시 패킷
2.3. Wpcdoor 백도어
최종적으로 실행되는 것은 백도어로서 감염 시스템의 정보를 탈취하는 기능을 포함한다. 여기에서는 악용되는 프로세스 이름 “WpcMon.exe” 및 다운로더가 사용하는 시그니처 문자열 “WPCF”를 참고하여 Wpcdoor로 분류한다.
Wpcdoor가 실행되면 Mutex를 검사하고 Run 키에 “WpcMon”이라는 이름으로 등록한다. 이후 식별자(UUID), 사용자 이름, 컴퓨터 이름, OS 버전 정보를 조회하고 스크린샷을 캡쳐해 C&C 서버에 전송한다. 특이한 점이 있다면 동일 경로에 “zlib.dll” 파일이 있는지도 검사하여 결과를 전송한다는 점이다. 이후 C&C 서버로부터 명령을 전달받아 다음과 같은 기능을 수행한다.
| 명령 코드 | 기능 |
|---|---|
| 0x01 | 스크린샷 캡쳐 |
| 0x02 | 클립보드 탈취 |
| 0x03 | 클립보드 변경 |
| 0x06 | 파일 다운로드 / 업로드 |
| 0x07 | 명령 실행 |
| 0x08 | 파일 조회 |
| 0x09 | 파일 그래버 |
| 0x0B / 0x0C | 포트 포워딩 |
| 0x0D | 웹 브라우저에 저장된 사용자 정보 탈취 |
| 0x0E | 특정 프로세스의 메모리 덤프 및 탈취 |
| 0x0F | 지갑 관련 프로세스 메모리에서 키워드 조회 및 탈취 |
| 0x11 | 프로세스 종료 |
| 0x12 | 업데이트 |
| 0x13 | HVNC (172.86.127[.]14:8443) |
Table 2. 지원하는 명령
명령들 중 0x0D 명령에서는 자격 증명 정보뿐만 아니라 Cookies, History, 카드번호 등의 정보를 탈취한다. 그리고 0x09 명령은 다음과 같은 사용자 폴더들에서 C&C 서버로부터 전달받은 파일명을 검색해서 탈취하는 방식이다.
- File Grabber 대상 폴더 : Desktop, Downloads, Documents, Pictures, Videos, OneDrive, AppData
0x0F 명령은 지정된 프로세스의 메모리에서 하드코딩된 다음과 같은 지갑 확장 ID들을 검색한 후 매칭될 경우 메모리에서 특정 패턴의 문자열을 검색하는데 지갑 확장인 것을 보면 지갑을 복원할 수 있는 단어 모음인 시드 문구일 것으로 추정된다.
- MetaMask (Chrome) : nkbihfbeogaeaoehlefnkodbefgpgknn
- MetaMask (Edge) : ejbalbakoplchlghecdalmeeeajnimhm
- Coinbase : hnfanknocfeofbddgcijnmhnfnkdnaad
- Phntom : bfnaelmomeimhlpmgjnjophhpkkoljpa
- Trust : egjidjbpglichdcondbcbdnbeeppgdph
- Ronin : fnjhmkhhmkbjkkabndcnnogagogbneec
- Binance : fhbohimaelbohpjbbldcngcnapndodjp
- TronLink : ibnejdfjmmkpcnlpebklmnkoeoihofec
- Solflare : bhhhlbepdkbapadjdnnojkbgioiodbic
- SecondFi : ffnbelfdoeiohenkjibnmadjiehjhajb
참고로 C&C 서버로부터 전달받는 명령 외에도 Wpcdoor가 C&C 서버에 다음과 같은 데이터도 전송한다.
| 응답 코드 | 기능 |
|---|---|
| 0x00 | 최초 연결 시 정보 전송 |
| 0x01 | 일정 간격으로 스크린 캡쳐 전송 |
| 0x04 | 키로깅 전송 |
| 0x05 | 클립보드 |
| 0x0A | Heartbeat |
| 0x10 | 조건에 매칭된 클립보드 텍스트 전송 |
Table 3. 전송 데이터
3. 결론
최근 국내 DVR 관리 소프트웨어를 악용해 악성코드를 유포한 사례가 확인되었다. AhnLab SEcurity intelligence Center(ASEC)은 해당 공격자를 Larva-26013으로 분류하고 있으며 Larva-26013은 국내 외에도 또 다른 공격 사례들에서 Wpcdoor를 설치하고 있다. 공격자는 최종적으로 설치된 Wpcdoor 백도어를 이용해 감염 시스템에 존재하는 사용자 정보들을 탈취할 수 있다. 사용자들은 제작사에서 지원하는 소프트웨어 및 OS의 최신 보안 패치 적용하고 악용된 소프트웨어의 보안 설정을점검 및 해당 소프트웨어 및 연계 시스템에서 사용 중인 ID/PW를 즉시 변경해야 한다.