RDP를 이용하는 김수키의 공격 기법은?

김수키(Kimsuky) 위협 그룹은 xRAT(Quasar RAT)과 같은 오픈 소스 기반 및 자체 제작한 악성코드 외에도 다양한 툴을 사용해 공격을 수행한다. 특히 시스템을 원격으로 제어하는 데 원격 데스크톱 프로토콜(Remote Desktop Protocol, RDP)를 가장 많이 사용한다. 공격자는 RDP가 설치돼 있지 않은 환경에 RDP 래퍼(RDP Wrapper)를 설치하기도 하며, 이후 RDP 접속을 위해 사용자 계정을 추가하거나, 추가한 계정을 은폐하고 RDP 다중 세션을 설정하는 악성코드를 사용하는 경우도 있다. 최근 안랩은 김수키가 스피어 피싱으로 추정되는 공격을 통해 베이비샤크(BabyShark)를 설치하고, 이후 각종 RDP 관련 악성코드를 설치한 정황을 확인했다. 이번 글에서는 해당 사례를 집중적으로 살펴본다.

 

​이번 공격에 사용된 툴은 기능이 과거 사례와 유사하지만, PDB(Program Database) 정보를 기반으로 제작한 최신 버전인 것으로 추정된다.

 

[그림 1] 인젝터(Injector) 악성코드의 PDB 정보

 

​또한, 새로운 악성코드도 확인됐다. 공격자는 이 악성코드를 제작할 때 ‘RevClient’라는 이름을 사용했다. 해당 악성코드는 C&C 서버로부터 공격자의 명령을 받아 동작하며, 명령에 따라 사용자 계정을 추가하거나 포트 포워딩 기능을 활성화할 수 있다.

초기 침투 단계

최초 유포 방식은 아직 확인되지 않았지만, 스피어 피싱인 것으로 추정된다. 감염 대상 시스템에서는 hwp.bat 파일이 사용된 이력이 확인됐다. BAT 악성코드는 WMIC 명령어를 이용해 안티바이러스를 확인하고, 스크립트 악성코드를 추가로 설치한다.

 

[그림 2] 공격에 사용된 hwp.bat 파일

공격자는 최초로 시스템을 감염시킨 후에도 악성코드와 C&C 서버 주소를 변경해 가면서 지속적으로 시스템의 정보를 탈취했다. 설치된 악성코드로는 대표적으로 키로깅을 담당하는 ‘k.ps1’과 이를 실행하는 ‘OneNote.vbs' 파일이 있다. k.ps1 파일은 로깅한 데이터를 ‘%APPDATA%\k.log’ 파일에 저장한다.

[그림 3] 탈취한 정보를 업로드하는 데 사용된 주소들

[그림 4] 김수키가 설치하는 키로거 악성코드

이 외에, 로더 악성코드인 ‘pow.ps1’과 인코딩된 데이터 파일인 ‘desktop.r7u’도 있다. pow.ps1은 ‘%APPDATA%\Microsoft\desktop.r7u’ 경로의 파일을 복호화해 메모리 상에서 실행한다. 복호화된 desktop.r7u는 인젝터 악성코드이다. 동일한 경로에 ‘desktop.r3u’ 파일이 존재할 경우, 이를 복호화해 정상 프로그램인 ‘MSBuild.exe’에 인젝션한다. 이와 유사한 과거 공격 사례에서 파일은 확보하지 못했지만, 복호화 된 desktop.r3u 파일이 xRAT인 것으로 확인됐다.

 

[그림 5] desktop.r3u 파일을 복호화해 인젝션하는 루틴

추가 페이로드 설치

일정 시간이 지난 후 베이비샤크의 C&C 서버 주소가 변경된 점을 미루어 보아, 공격자는 베이비샤크를 최초로 설치한 이후, 이를 지속적으로 업데이트했다는 사실을 알 수 있다. 베이비샤크 만으로도 감염 대상 시스템의 정보를 수집할 수 있지만, 공격자는 다음과 같은 RDP 관련 악성코드를 추가로 설치했다.

 

(1) Injector

설치된 악성코드 중 ‘process.exe’는 위에서 다룬 인젝터 악성코드인 복호화 된 desktop.r7u와 거의 동일하다. 실제로 두 악성코드의 PDB 정보는 서로 유사하다.

Ÿ 복호화된 desktop.r7u의 PDB 정보: H:\Hollow\csharp process hollowing_complete_offset\csharp process hollowing_complete_offset\process\process\obj\x86\Release\process.pdb
Ÿ process.exe의 PDB 정보: G:\0726_Rev_hollowing\csharp process hollowing_complete_offset\process\process\obj\x86\Release\process.pdb

 

차이점이 있다면, process.exe는 복호화 대상이 %APPDATA% 경로에 존재하는 ‘CustomVerification.DIC’ 파일이라는 점, 그리고 인젝션 대상 프로세스가 ‘powershell_ise.exe’라는 점이다. 비록 CustomVerification.DIC 파일은 확인되지 않지만, 유사한 시점에 xRAT이 공격에 사용된 사례가 존재하기 때문에 김수키가 주로 사용하는 악성코드 중 하나일 것으로 추정된다.

RDP 서비스 변경

공격자는 ‘multiple.exe’라는 악성코드도 설치했다. 해당 악성코드는 사용자 계정을 추가하고 RDP를 활성화하며, 다중 세션 기능을 지원한다. 악성코드는 먼저 RDP 서비스를 종료한 후 RDP 서비스를 담당하는 ‘termsrv.dll’을 수정할 수 있도록 권한을 부여한다. 이후 termsrv.dll 파일을 ‘termsrv.pdb’라는 이름으로 변경하고, %APPDATA% 경로에 이미 존재하는 termsrv.dll을 ‘%SystemDirectory%’ 경로에 복사한다.

 


[그림 6] 다중 세션을 지원하기 위해 패치된 termsrv.dll로 변경하는 루틴

일반적으로 윈도우 데스크톱 환경은 서버와 다르게 RDP 연결 시 하나의 세션만 지원한다. 즉, 시스템 한 대당 하나의 세션만 지원하기 때문에 공격자가 원격으로 시스템에 접속할 경우, 기존 사용자는 연결이 끊긴다. 미미카츠(Mimikatz)나 김수키의 다른 악성코드는 현재 실행 중인 RDP 서비스 프로세스의 메모리를 패치해 이를 우회한다.

 

하지만 현재 악성코드는 기존 정상 termsrv.dll을 직접 패치한 termsrv.dll 파일로 변경하는 방식을 이용한다. 공격자가 사전에 %APPDATA% 경로에서 생성한 termsrv.dll은 정상 termsrv.dll 파일과 비교하면 CDefPolicy::Query() 함수가 패치된 것을 알 수 있다.

 

Ÿ 정상 termsrv.dll의 CDefPolicy::Query() 함수 루틴 : 39 81 3C 06 00 00 0F 84 E7 43 01 00

Ÿ 패치된 termsrv.dll의 CDefPolicy::Query() 함수 루틴 : B8 00 01 00 00 89 81 38 06 00 00 90

 

여기까지의 과정이 끝나면, 감염 대상 시스템을 제어하기 위한 ‘IIS_USER’라는 이름의 계정을 생성하고, 이를 관리자 그룹에 등록한다. 참고로, 계정이 추가되면 로그온 시 추가된 계정이 함께 보이기 때문에 시스템의 사용자는 이를 인지할 수 있다. 공격자는 사용자가 로그온 한 상태에서 계정이 추가된 사실을 알지 못하도록 ‘SpecialAccounts’에 IIS_USER 계정을 등록한다.

[그림 7] 사용자 계정을 등록하고 은폐하는 명령들

Ÿ multiple.exe의 PDB 정보 – 1 : Z:\5-program\multiple\multisession_complete\multisession_complete\Release\x64\Multisession.pdb

Ÿ multiple.exe의 PDB 정보 – 2 : G:\0711_uac_multiple_work\multisession_complete\multisession_complete\x64\Release\Multisession.pdb

 

RevClient
RevClient는 RDP 관련 악성코드로, C&C 서버로부터 명령을 전달받아 동작하며, 명령에 따라 사용자 계정 작업 및 포트 포워딩을 수행한다. [그림 8]은 공격에 사용된 RevClient의 설정 데이터이다. [그림 8]에서 해당 악성코드의 버전은 1.0이며, ‘ZhengReversePC’라는 문자열이 뮤텍스(Mutex) 이름으로 사용된 점을 알 수 있다. 실질적인 설정 데이터는 Base64로, 암호화된 ‘AllSettings’ 문자열에 포함돼 있다.

 


[그림 8] RevClient의 설정 데이터

 

​Base64 문자열을 복호화 하면, 나머지 설정 데이터도 확인할 수 있다.

 

[표 1] RevClient의 설정 데이터

C&C 주소는 Host IP 주소와 Main Port를 조합해 만들어 접속한다. 이후 감염 대상 시스템에 대한 기본적인 정보를 수집해 전달한 후, 응답으로 설정 및 명령을 전달받는다.

Ÿ C&C 주소: 5.61.59[.]53:2086

 

[표 2] C&C 서버에 전달하는 데이터​

 

 

 

응답은 ‘;’가 구분자로 사용돼 4개로 나눠져 있으며, 명령에 따라 사용하는 항목이 정해져 있다. 처음 응답으로는 4번째 항목인 호스트 포트(Host Port) 번호가 전달되고, 이후 응답에서는 3번째 항목인 명령 번호와 함께 추가적인 데이터가 전달될 것으로 추정된다.

[표 3] 명령 구조

[그림 9] 명령 수행 루틴

[표 4] 명령 목록

‘100’ 명령이 전달되면, 이전에 전달받은 호스트 포트 번호를 조합해 5.61.59[.]53:(HostPort) 주소에 연결한 후, 해당 주소와 127.0.0.2:3389 주소를 연결한다. 일반적으로 RDP 관련 포트 포워딩 툴은 외부에서 공격자가 NAT 환경에 직접 접근할 수 없다는 한계를 극복하는 데 사용된다. 즉, 리버스 커넥션 방식으로 공격자의 주소에 먼저 연결한 다음, 이후 감염 대상 시스템의 RDP 포트에 연결해 2개의 통신을 중개한다.

[그림 10] 포트 포워딩 루틴

 

​참고로 RevClient는 위의 multiple.exe와 유사한 기능이 구현된 ‘NewConcurrentRDPatcher()’ 함수가 구현돼 있다. 다만, multiple.exe는 이미 패치된 termsrv.dll 파일을 변경하지만, NewConcurrentRDPatcher() 함수는 윈도우 버전에 따라 직접 termsrv.dll 파일을 패치하고 변경한다. 비록 NewConcurrentRDPatcher() 함수를 실행하는 루틴은 존재하지 않지만, RevClient의 다른 버전에서는 C&C 서버의 명령을 통해, 또는 초기화 루틴에서 해당 작업을 수행할 것으로 보인다.

[그림 11] RevClient의 RDP 패치 루틴

결론

김수키가 악용하는 RDP는 무차별 대입 공격 및 사전 공격을 이용한 초기 침투 과정이나 측면 이동 과정에서 사용된다. RDP는 윈도우 시스템에 기본적으로 설치된 서비스 중 하나이기 때문에 이를 탐지하거나 예방하려면 적절한 관리와 조치가 필요하다.

 

우선 사용자는 의심스러운 메일을 수신하면 되도록 첨부 파일을 실행하지 않아야 하며, 외부에서 프로그램을 설치할 때 공식 홈페이지에서 구매하거나 다운로드할 것을 권장한다. 또한, 계정의 비밀번호를 복잡한 형태로 사용하거나 주기적으로 변경해야 한다.

 

더 나아가, V3를 최신 버전으로 업데이트해 악성코드의 감염을 사전에 차단할 수 있도록 해야 한다. V3뿐만 아니라 MDS와 같은 샌드박스 기반의 APT 솔루션을 도입하면 사이버 공격으로 인한 피해를 예방하는데 도움이 될 것이다.

 

AhnLab MDS 샌드박스는 RDP를 패치해 다중 세션을 활성화하는 악성코드를 ‘Execution/MDP.Command.M10645’ 진단명으로 탐지한다.

 

[그림 12] AhnLab MDS의 악성코드 탐지 화면

 

[그림 13] 파일 소유권 변경 행위 탐지

 

 

출처 : AhnLab

02-553-2331
견적 요청
카카오톡 문의