2025년 3월 PebbleDash 악성코드 유포 사례

2025년 3월 PebbleDash 악성코드 유포 사례

PebbleDash 백도어 악성코드는 지난 2020년에 미국 국토부 산하기관인 CISA에서 명명한 Lazarus(Hidden Corba)의 백도어 악성코드이다. 당시에는 Lazarus 그룹의 악성코드로 알려져있었지만 최근들어 Lazarus 그룹의 공격 사례보다는 개인을 대상으로 악성코드 유포를 일삼는 Kimsuky 그룹의 공격 사례에서 PebbleDash 악성코드가 다수 확인되고 있다. 본 보고서에서는 Kimsuky 그룹의 PebbleDash 악성코드 최신 유포 과정과 PebbleDash와 함께 확인되는 악성코드와 추가 모듈에 대해 다루고자 한다.

 

과거 TI 보고서에서 여러 차례 언급하였던 것처럼 Kimsuky 공격 그룹은 PebbleDash와 함께 원격 제어를 위해 오픈소스인 RDP Wrapper를 사용한다고 알려져있다. 그러나 최근에는 터미널 서비스 역할을 수행하는 termsrv.dll을 공격자가 직접 패치하여 사용하는 사례가 다수 확인되고 있다.

 

아래 [그림 1]은 최근 Kimsuky 그룹의 PebbleDash 악성코드를 활용한 공격 과정이다.

 

[그림 1] Kimsuky 그룹의 최신 PebbleDash 악성코드 공격 과정

 

공격 과정

1. 초기침투, 지속성 유지, 거점 확보

 

PebbleDash를 악용한 사례에서 공격자의 공격 과정은 크게 초기 침투, 지속성 유지, 거점 확보, 추가 악성코드 생성 총 4가지로 분류할 수 있다. 먼저 공격자는 초기 침투를 위해 특정 개인을 대상으로 스피어 피싱 공격을 수행한다. 그리고 사용자가 스피어 피싱에 첨부된 바로가기 파일(LNK) 악성코드를 실행하면 LNK의 내부 Cmdline에 의해 mshta.exe 프로세스를 통한 자바스크립트가 실행된다. 실행된 자바스크립트는 파워쉘을 실행하며 시스템 지속성 유지를 위한 작업 스케줄러 등록, 자동 실행 등록 레지스트리 키 등록, 드롭박스(Dropbox) 및 공격자 C&C 서버와 소켓 통신을 수행하여 PebbleDash와 같은 백도어 악성코드와 RDP 도구들을 생성한다.
 

[그림 2] 초기 침투 과정

 

2. 감염 PC 제어를 위한 추가 악성코드 설치

 

LNK 악성코드로부터 파워쉘이 실행되면 공격자는 드롭박스와 TCP 소켓 통신을 통해 추가 악성코드와 CMD 명령을 감염 PC에 전달한다. 공격자가 감염 PC를 제어하기 위해 사용되는 악성코드는 PebbleDash와 AsyncRAT이 사용되며, RDP 접속 인증 우회을 위해 패치된 termsrv.dll, 권한 상승을 위한 UAC 우회 악성코드, 데이터 유출을 위한 ForceCopy 유틸리티가 확인되었다.

 

2.1. PebbleDash

 

PebbleDash 악성코드는 2021년부터 Kimsuky 그룹에서 꾸준하게 사용되고 있다. 실행 방식에는 과거 버전과 최신 버전 간에 약간의 차이가 있다. 예를 들어 2021년에는 PIF 파일을 통해 미끼 문서 파일과 PebbleDash를 직접 실행하는 방식이였으며 최근에 확인된 사례에서는 아래 그림과 같이 파워쉘을 통해 직접 advconf2.dll을 생성하였다.

 

[그림 3] 파워쉘의 PebbleDash 악성코드 생성 로그

 

advconf2.dll이 생성된 이후에는 cmd.exe와 reg.exe를 이용하여 advconf2.dll을 서비스로 등록하여 실행한다. 최종 실행된 PebbleDash 기능은 과거 ASEC 블로그를 통해 게시한 PebbleDash 의 기능과 동일하다.

 

[그림 4] 서비스 관련 레지스트리 키 등록

 

2.2. UAC 우회 악성코드

 

Kimsuky 그룹은 과거부터 다양한 권한 상승 도구들을 활용해 왔으며 주로 UACMe를 사용하였다. 2024년에도 여러 권한 상승 도구들을 사용하고 있지만 하나의 유형이 다수를 차지하는 것이 특징이다. 공격자는 UACMe가 지원하는 여러 UAC 우회 기법들 중 “AppInfo ALPC” 기법만을 이용해 악성코드를 제작하였다. 해당 기법은 특정 프로세스의 디버그 객체에 대한 핸들을 얻을 수 있을 경우, 해당 프로세스에 대한 전체 접근이 가능한 핸들을 획득할 수 있다는 점을 악용하는 방식이다. 해당 권한 상승 도구 또한 파워쉘에 의해 생성 및 실행된 로그가 자사 ASD 인프라에서 확인되었다.

 

[그림 5] 파워쉘을 이용한 권한 상승 도구 생성 및 실행

 

[그림 6] 권한 상승을 위한 AppInfo ALPC 기법 사용 코드루틴

 

2.3. 변조된 termsrv.dll

 

공격자는 파워쉘을 이용해 변조된 termsrv.dll 파일을 감염 PC에 추가 생성하였다. 정상 termsrv.dll과 비교하였을 때 특정 함수가 패치되어 있었으며 분석 결과 RDP 라이선스 인증 비교를 담당하는 함수(CDefPolicy::Query)가 무력화되었다. 이는 해당 시스템에 접속하는 어떠한 사용자라도 무조건 RDP 접속이 허용됨을 의미한다.

 

[그림 7] 정상과 패치된 악성 파일의 BinDiff 비교 값 (sub_18002F300 함수 불일치)

 

[그림 8] 정상, 패치된 모듈 비교 (CDefPolicy::Query 함수)

 

윈도우 경로의 정상 시스템 DLL을 변조된 DLL로 교체하기 위해 공격자는 RDP 서비스 관련 레지스트리 키 값을 변경하였다.

  • HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\TermService\Parameters

 

즉, RDP 서비스는 기본적으로 %SystemRoot%\System32\termsrv.dll 파일을 로드하기 때문에 변조된 DLL을 로드하기 위해서는 변조된 DLL의 경로로 바꿔줘야 한다. 이외에도 공격자는 DLL 교체를 위해 takeown.exe을 통해 기존 시스템 경로의 termsrv.dll 파일의 소유 권한을 Administrators로 변경하였다.

  • takeown /F C:\Windows\System32\termsrv.dll /A

 

대응 가이드

1. 이중 확장자

 

이처럼 Kimsuky 그룹은 이중 확장자를 메일에 첨부하여 정상 문서처럼 보이도록 위장한 LNK 악성 바로가기 파일을 유포한다. 예를 들어, “pdf.lnk” 파일은 파일명이 PDF 문서처럼 보이지만 실제로는 Windows 바로 가기(.lnk) 파일로, 실행 시 악성 스크립트나 프로그램이 동작할 수 있다. 따라서 일반 사용자들은 실제 확장자 확인을 통해 이러한 의심스러운 파일이 실행되지 않도록 사전에 예방해야 한다.

 

[파일 확장자 표기 활성화 방법]

파일 탐색기를 열고 상단 메뉴의 “보기” 탭에서 “파일 확장명” 체크박스를 선택하거나, Windows 설정에서 Group Policy를 통해 강제로 표시할 수 있다.

 

2. 변조된 termsrv.dll 파일 처리

 

해시 계산을 통해 악성 termsrv.dll 파일로 정상 파일이 교체되었는지 확인이 필요하다. 검증을 위해 명령 프롬프트(관리자 권한)에서 아래와 같이 실행해 변조된 파일의 해시값(MD5)을 계산한다.

  •  certutil -hashfile C:\Windows\System32\termsrv.dll MD5

 

계산된 해시값이 “641593eea5f235e27d7cff27d5b7ca2a“, “70d92e2b00ec6702e17e266b7742bbab” 인지 비교한다. 값이 동일하다면 파일이 변조되었으므로 정상 termsrv.dll로 교체해야 한다. 윈도우에서는 정상 프로그램 복원을 위해 sfc 프로그램을 제공하고 있다. 따라서 사용자는 관리자 권한으로 CMD를 실행한 상태에서 아래 명령어를 입력하여 패치된 termsrv.dll을 정상 프로그램으로 변환할 수 있다.

  •   sfc /scannow

 

3. 숨겨진 관리자 계정(“Root”) 조치

 

관리자가 생성하지 않은 “Root” 라는 이름의 의심스러운 계정이 존재할 경우 해당 계정을 비활성화하거나 제거해야 한다. 명령 프롬프트(관리자 권한)에서 아래와 같이 실행하여 계정 정보를 확인한다.

  • net user

 

표준 관리자 계정 외, “Root”와 같이 이름이 특이하거나, 생성 시각 및 속성이 의심스러운 계정을 찾는다. 이후 의심스러운 계정이 존재할 경우 숨김 속성 제거 및 계정 삭제/비활성화 조치를 수행한다.

 

레지스트리 편집기를 열어 아래 경로에 접근하여 “Root”와 같이 숨김 처리된 계정에 해당하는 항목을 삭제한다.

  • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\SpecialAccounts\UserList

 

계정을 삭제하여 추가적인 공격자로의 활용을 예방한다.

  •  net user Root /delete

 

결론

 

Kimsuky 그룹은 다양한 악성코드를 사용하고 있지만, PebbleDash 유포 사례의 경우 초기 침투 단계에서 스피어 피싱을 통해 LNK 파일 기반의 악성코드를 실행시키며 공격을 시작한다. 이후 파워쉘 스크립트를 활용해 작업 스케줄러와 자동 실행 등록을 수행하고, 드롭박스 및 TCP 소켓 기반 C&C 서버와의 통신을 통해 PebbleDash를 포함한 다수의 악성코드와 도구들을 설치한다.
최근에는 기존에 오픈소스 RDP Wrapper를 사용하던 방식에서 벗어나, 공격자가 시스템 DLL(termsrv.dll)을 직접 변조하여 RDP 인증을 무력화하는 기법이 등장했다. 이는 Kimsuky 그룹이 공격 환경에 맞추어 지속적으로 공격 기법을 발전시키고 있음을 보여준다.

본 블로그에서는 최신 Kimsuky 그룹의 PebbleDash 악성코드 유포 및 실행 과정을 분석하였다. 또한, 주로 개인을 대상으로 활동하는 특성을 고려할 때, 개인 사용자는 스피어 피싱과 같은 초기 침투 기법에 대한 경각심을 높이고 보안 제품의 최신 업데이트를 유지함으로써 유사 공격에 대해 사전 예방할 필요가 있다.

MD5

641593eea5f235e27d7cff27d5b7ca2a
70d92e2b00ec6702e17e266b7742bbab
876dbd9529f00d708a42f470a21a6f79
a5cca2b56124e8e9e0371b6f6293e729
a8976e7dc409525a77b0eef0d0c3c4f2
IP

159[.]100[.]13[.]216
213[.]145[.]86[.]223
216[.]219[.]87[.]41
64[.]20[.]59[.]148

AhnLab TIP를 구독하시면 연관 IOC 및 상세 분석 정보를 추가적으로 확인하실 수 있습니다. 자세한 내용은 아래 배너를 클릭하여 확인해보세요.