Rdp replayer

24
2010 Digital forensic seminar RDP Replayer 최재문@BoB [email protected] http://blog.naver.com/jaemunks

description

2010 Digital Forensic Seminar RDP replayer

Transcript of Rdp replayer

Page 1: Rdp replayer

2010 Digital forensic seminar

RDP Replayer

최재문@[email protected]

http://blog.naver.com/jaemunks

Page 2: Rdp replayer

Challenge시나리오

피해자가 어느 날 컴퓨터에 로그인을 하니 워드패드가 실행 중이었고,

“당신의 D드라이브를 암호화 하였다,다음 계좌 xxx-xxxx-xxxx로 100만원을 입금하고, 010-xxxx-xxx로 문자를 보낸 뒤,아래 지도에 가보면 비밀번호가 있을 것이다.” 라고 기재되어 있었다.

이걸 보고 너무 놀란 피해자는 그만 컴퓨터를 꺼버렸으나, 다시 컴퓨터를 켜보니워드패드에 있던 내용은 하드디스크에 저장되어 있지 않았다.다행히, 당시 네트워크 관리자가 외부에서의 원격접속을 감지하여해당 패킷들을 저장해 두었다.

하드디스크 이미지와 네트워크 패킷을 다운로드 받아 다음 문제를 풀어보자.

1. RC4에 사용되는 대칭 키는 무엇인가?2. 원격에서 입력한 키보드 입력 값 중 전화번호는 무엇인가?3. 클립보드로 전송된 내용 중 계좌번호는 무엇인가?4. 클립보드로 전송된 그림(지도)를 복원하라.5. 암호화된 하드디스크내의 파일을 복원하라.6. RDP replayer 를 만드시오.

Page 3: Rdp replayer

Challenge

문제에서는 시스템의 이미지파일과 사건 당시 네트워크 관리자가 저장해놓은패킷들을 모아놓은 파일이 주어진다.

시스템 이미지 파일 : *.E01패킷 파일 : sample.pcap

이 2가지 증거들을 통해 문제를 해결해 나가면 된다.

먼저 우리는 증거를 보지 않아도, 가해자가 피해자의 PC에 원격으로 접속한 사실을알 수 있다. 이를 확인하기 위해 먼저 네트워크 상황을 파악할 수 있는 PCAP 파일부터열어보았다.

사건의 가해자가 피해자 PC의 원격접속을 통해해당 PC의 D드라이브를 암호화하고 돈을 요구하는 상황.

Page 4: Rdp replayer

Challenge

Wireshark를 통해 PCAP파일을 열어보았다.우리가 자주 볼 수 있는 TCP 패킷이 보인다. PCAP 파일을 쭉 보니 뭔가 의심스러운RDP라고 적힌 패킷들이 보인다.

그리고 문제에서 요구한 RC4 대칭 키에 관련된 내용도 보이고, 아직은 잘 모르지만Encryption이라는 문구가 보이는 것으로 보아 굉장히 의심스럽게 보인다.

다음으로 분석도구를 통해 시스템 이미지파일을 살펴보자.

Page 5: Rdp replayer

Challenge

PC 이미지를 통해 가해자 PC의 운영체제는 Windows XP 라는 사실을 알 수 있다.이미지 파일 내 여러 파일들을 분석한 결과 Truecrypt라는 암, 복호화 프로그램을 이용하여 D드라이브를 암호화 한 것으로 확인된다.

그렇다면 이제 원격접속으로 의심되었던 RDP에 대하여 알아보자.

Page 6: Rdp replayer

RDP(Remote Desktop Protocol) ?

윈도우 원격 데스크탑과터미널 서버를 위한 프로토콜

윈도우에 RDP client로 원격 사용자를허용해 윈도우 UI로 원격접속

Page 7: Rdp replayer

RDP(Remote Desktop Protocol) ?

간단하게 보자면 원격접속을 위한 도구이다.하지만 자세하게 RDP에 대해 파고들면 정말 끝없는 문서와 마주하게 된다.MS에서 제공하는 RDP에 대한 Spec을 볼 수 있는 가이드라인 문서이다.http://msdn.microsoft.com/en-us/library/cc240919.aspx

Page 8: Rdp replayer

RDP 는 암호화된 통신을 한다.아직 암호에 대한 이론지식이 없다면 이해하기 힘들 수도 있다.하지만 차근차근 하나씩 찾아보고 이해한다면, 어렵지 않은 내용임을 알 수 있다.

혹시 여기서 왜 갑자기 암호화된 통신을 하는가라고 생각한다면, 큰일이다.네트워크 통신에서 이제 보안은 뗄래야 뗄 수 없는 상황에 와있다.

만약 당신과 친구가 대화하는 카카오톡 내용이 어느 누군가에 의해 쉽게 읽혀지고,변조 당한다고 상상해봐라. 암호화된 통신로가 왜 필요한지 알 수 있을 것이다.

RDP에서 어떻게 암호화된 통신로를 구성하는지 알아보자.

RDP client RDP server

Encrypted data

RDP(Remote Desktop Protocol) ?

Page 9: Rdp replayer

RDP client RDP server

RDP(Remote Desktop Protocol) ?

서버 공개키 e, n서버 개인키 d서버 랜덤 값 S

서버 공개키 e, n서버 랜덤 값 S

client = 원격 접속을 하는 PCServer = 원격 접속 대상 PC

서버 공개키 e, n서버 랜덤 값 S

클라이언트랜덤 값 생성 C

서버의 공개키로암호화 된 클라이언트 랜덤 값 C

클라이언트랜덤 값 C

서버의 공개키로 암호화 되었기때문에 서버의 비밀키로 복호화 가능

1.

2.

서버의 공개키, 랜덤 값 S 전달

Page 10: Rdp replayer

RDP client RDP server

RDP(Remote Desktop Protocol) ?

서버 공개키 e, n서버 개인키 d서버 랜덤 값 S

클라이언트랜덤 값 C

client = 원격 접속을 하는 PCServer = 원격 접속 대상 PC

서버 공개키 e, n서버 랜덤 값 S

클라이언트랜덤 값 C

결과적으로 Client와 Server는서버 랜덤 값 S클라이언트 랜덤 값 C를 공통으로 가지게 된다.

Page 11: Rdp replayer

RDP client RDP server

RDP(Remote Desktop Protocol) ?

서버 랜덤 값 S클라이언트랜덤 값 C

client = 원격 접속을 하는 PCServer = 원격 접속 대상 PC

서버 랜덤 값 S클라이언트랜덤 값 C

RC4 KeygenSource

RC4 대칭키

RC4 KeygenSource

RC4 대칭키=

Page 12: Rdp replayer

RDP(Remote Desktop Protocol) ?

내용 자체를 보면 어렵고, 이해가 안될 수도 있다. 그림으로 무엇을 주고 받는지잘 이해하며 보자.우선 공개키와 대칭키에 대해 찾아보고 개념을 이해하고 보면 훨씬 도움이 될 것이다.

결론적으로 보자면 RC4 대칭키를 생성하는 것이 최종 목적이었다.

1. 공통으로 가지고 있는 랜덤 값 C와 S를 통해 키를 생성했으며,2. 그 랜덤 값들을 적절하게 나누어 가지기 위해 RSA 공개키 암호를 사용했다.

이제 서버와 클라이언트는 각자의 랜덤 값으로 생성한 RC4대칭키를 이용해 암호화, 복호화하여 통신을 할 수 있다.

Page 13: Rdp replayer

RDP(Remote Desktop Protocol) ?

여기서 몇 가지 궁금증이 생길 수 있다. (본인만 생길 수 도…)

첫째, 공개키로 암호화하고 주고 받으면 되지 왜 저렇게 키 생성을 하나?- 공개키 암호의 연산은 굉장히 부하가 크다. 그래서 보통 보안 프로토콜은 키 교환을 위하여 공개키 암호를 사용하고 그 뒤 대칭키를 생성하여 실제 암, 복호화 시대칭키를 사용하는 Hybrid 형태의 암호 시스템을 많이 사용한다.또한 RDP는 실시간으로 원격 Server PC의 상황을 스트리밍 형태로 Client PC에 보여 지기 때문에, 적합하지 않다.

둘째, 스트림 암호는 취약하다고 알고 있다. 왜 RC4 알고리즘을 사용하는가?- RDP는 위에서 말한 것 처럼 스트리밍 형태로 실시간 원격 Server의 PC의 상황이Client PC에게 전달된다. 스트림 암호는 취약하나 속도가 굉장히 빠르고 실시간으로 이진데이터 형태의 비트단위로 처리할 수 있다. 만약 블록단위로 처리하는 블록 암호를 사용한다면, 블록단위로 데이터를 모아 전송한다면, 받아보는 입장에서실시간이 아닌 블록단위로 끊겨 보이는 UI를 맞이하게 될 것이다.

이에 대한 자세한 생각은 저만의 생각입니다. 틀린 부분을 지적해주고 고쳐주시면감사하겠습니다.

Page 14: Rdp replayer

Challenge -1

이제 우리는 다시 문제로 돌아와서 앞에 보았던 내용을 적용해 가며,1번 문제를 풀어 보자.

Server PC = 피해자의 PC이다 (즉, 당한 사람의 PC)우리는 서버이기 때문에 서버의 공개키, 개인키, 서버의 랜덤 값을 가지고 있으며이를 확인 할 수 있다. Wireshark를 통해 살펴보자.

Page 15: Rdp replayer

Challenge -1

Sample.PCAP의 내용 중 우리는 ‘RDP’에 관련된 패킷 내용에 집중해야 한다.1번 패킷을 클릭하여 자세한 내용을 보자2번에 패킷에 대한 자세한 정보들이 출력된다. 그 중 ServerSecurityData 부분을자세히 보자.

ServerRandomServerCertificate가 보인다. 그렇다 벌써 찾았다. 서버의 랜덤 값 과 공개키를 찾았다.

1

2

Page 16: Rdp replayer

Challenge -1

1번이 Server의 Random 값이다.2번이 Server의 공개키이다.

1

2

Page 17: Rdp replayer

Challenge -10c d7 35 28 ef dc b5 aa73 e1 ed 3b 01 dc 85 b7d6 f8 46 1e 83 7a 6f 4acc d1 fa f9 92 90 e0 56 ServerRandom 값

1

2

b3 21 fb e4 20 0a 09 7a33 a6 07 62 24 23 a3 5bc1 9f 78 01 f9 86 f9 cb40 9d 92 ec d5 60 73 759f 7f 26 ce 11 14 5b e6f8 b5 f2 bd 19 ca 57 c49a 2b 22 23 ba b0 a4 b223 16 49 54 c5 7e 92 d400 00 00 00 00 00 00 00 ServerCertificate 값

이전 페이지의 ServerCertificate의 값과 다르게 보일 것이다.실수한 것이 아니라, 실제 Wireshark에 보이는 ServerCertificate에서우리가 필요한 공개키 modulus 부분을 빼낸 것이다.

나머지 부분은 공개키 인증서에 필요한 부수적인 값으로 아래 페이지를 참조하여 보길 바란다.http://msdn.microsoft.com/en-us/library/cc240919.aspx

Page 18: Rdp replayer

Challenge -1

위의 패킷을 보자 SecurityExchange 그리고 밑에 부분을 주목하자.encryptedClientRandom -> 서버의 공개키로 암호화된 클라이언트의 랜덤 값이다.

Page 19: Rdp replayer

Challenge -18c 2f 71 93 a2 ab e6 ce93 de 3a d5 1e 9d 4c 9592 cb 62 0e b7 af f3 4699 53 c2 e8 3f 25 2f 7db6 8d 17 d3 aa d0 65 b699 ca 0d 06 55 c8 ae 60c7 11 2a bd b9 85 44 528f be b2 bc 16 73 53 0100 00 00 00 00 00 00 00 EncryptedClientRandom 값

우리가 지금까지 Wireshark에서 구한 값들은

ServerRandom = 서버의 랜덤 값 SServerCertificate = 서버의 공개키 n, eEncryptedClientRandom = 암호화된 클라이언트 랜덤 값

이렇게 3가지이다. 무엇을 찾아야 1번 문제를 풀 수 있을까?아직 잘 모르겠다면, 앞의 RDP 키 교환 및 키 생성 과정을 다시한 번 보도록 하자.

Page 20: Rdp replayer

Challenge -1우리는 결론적으로 보자면 RC4 키 생성을 위한서버의 랜덤 값 S클라이언트의 랜덤 값 C 이 두 가지가 필요하다.

서버의 랜덤 값 S는 구했다. 클라이언트의 랜덤 값 C만 구하면 끝이 난다.

우리는 방금 전에 구하지 않았나? EncryptedClientRandom 을 구했다.하지만 앞의 Encrypted를 보자 암호화된 클라이언트 랜덤 값이다. 이 부분을 복호화 한다면 우리가 원하는 클라이언트 랜덤 값을 구할 수 있게 된다.

서버의 공개키로 암호화된 클라이언트의 랜덤 값 C감이 오지 않는가? 서버의 비밀키로 저것을 풀 수 있다. 우리는 서버의 비밀키를알고 있다. 왜냐하면 우리는 자신이며, 서버의 이미지 파일을 가지고 있기 때문이다.

Page 21: Rdp replayer

Challenge -1

서버의 비밀키로 복호화만 하면 끝이 난다. 그렇게 되면 우리가 원하는 클라이언트의 랜덤 값 C를 알 수 있다.

그런데 서버의 비밀키가 어디에 있지………………이 서버의 비밀키를 찾기 위해 나는 정말 며칠을 고생했다. 찾았을 때의 허무함은정말…. 먼저 우리의 문제풀이에 도움이 되는 2가지를 준비했다.

http://forensicinsight.org/wp-content/uploads/2013/02/F-INSIGHT-Summary-of-RDP-replayer.pdf

http://www.oxid.it/downloads/rdp-gbu.pdf

이 2가지 URL에 RDP 문제풀이를 위한 좋은 정보들이 담겨있다. 영어지만 충분히이해가 가능한 수준이다.

Page 22: Rdp replayer

Challenge -1서버의 비밀키는 XP의 경우 레지스트리에 저장되어 있다.처음에 HKEY_LOCAL_MACHINE\SECURITY\Policy\Secrets\하위에 L$HYDRAENCKEY_28ada6da-d622-11d1-9cb9-00c04fb16e75에 있다.

레지스트리 분석을 통해서는 알 수 없었고, LSAdumperview 프로그램을 이용하여,볼 수 있었다.

왼쪽의 부분이비밀키이다.

Page 23: Rdp replayer

Challenge -1비밀키의 내용 중 이전의 공개키 부분에서처럼 필요한 부분을 제외하고 보면,다음과 같은 형식의 비밀키를 얻게 된다.

비밀키 값에는 공개키에 포함된 modulus 값과 e 그리고 RSA 키에 관한 정보가들어 있었으며, 그 중 우리가 사용해야 하는 d 부분을 추려내었다.

b1 2d 58 bb e9 5f df b1 79 76 55 c0 3c 74 9e f444 14 32 61 45 4d 99 5c 1f fd 8d 17 c9 7d 0d 5b 26 88 17 69 c7 4a 05 4b 01 32 6b e1 98 7c 67 5ba3 6e 11 89 e7 ef 4a 24 0e 68 5c e2 26 3c fe 9d ServerPrivateKey

이 부분이 encryptedClientRandom 값을 풀 수 있는 서버의 비밀 키 부분이다.

자 암호화된 클라이언트의 랜덤 값을 복호화 해보자.암호화는 RSA 공개키 암호화 방식을 사용했다. RSA 복호화 방식은 다음과 같다.

𝐶𝑑 𝑀𝑜𝑑 𝑁 = 𝑃C = 암호문(EncryptedClientRandom)

d = 비밀키(ServerPrivateKey)N = modulus(ServerCertificate)

P = 평문(DecryptedClientRandom)

Page 24: Rdp replayer

Challenge -1복호화 하게되면 우리는 다음과 같은 DecryptedClientRandom을 얻게 된다.

RSA 복호화는 간단한 검색으로도 알고리즘을 찾을 수 있다.혹시 소스를 원한다면JAVA로 구현한 소스를 보내주겠습니다.

자 이제 우리는 RC4 대칭키를 제작에 필요한, 2가지 값을 모두 찾았다.

서버와 클라이언트의 랜덤 값을 RC4 Keygen Source에 넣어 RC4 대칭키를 구하면 된다.

Keygen Source는 Rdesktop의 generate key.c 소스 파일을 이용해서 제작한다.