BLOG ARTICLE Analysis/Reverse Engineering | 2 ARTICLE FOUND

  1. 2013.04.10 SSH 터널 프록시를 이용한 행동 익명화
  2. 2012.09.08 자식 프로세스 디버깅하기

문서 기록

2013.04.10 00:41 AM 1 문서 작성 시작

2013.04.10 03:52 AM 1 문서 작성 완료

 

문서 개요

행동 익명화와 익명화에 이용되는 프록시 서버에 대한 개념을 배운 윈도우에서 SSH 터널을 이용하여 프록시를 연결하는 방법을 다룬다.

 

문서 내용

 

행동 익명화

나는 악성 코드를 배포한 공격자라고 하자. 내가 배포한 악성 코드는 금융 기관의 PC들을 공격했고 악성 코드를 배포한 사이트를 수사관들이 살펴보기 시작했다. 그리고 지금 나의 눈에는 특정 기관으로 생각되는 IP들이 사이트에 접속하는 것을 보게 되었다. 나는 지금 수사를 방해하기 위해 어떤 행동을 해야 하는가? 나는 이들을 가지고 놀고 싶다.

 

여러분이 위의 상황이면 어떻게 것인가? 공격자는 특정 IP들에 대해 공격 전략을 바꿔 수사망을 흔들어 놓을 수도 있으며, 웹사이트 자체를 은폐하여 조사를 방해할 수도 있다. 더욱이 IP들에 대해 DDOS 공격을 가해 보복할 수도 있다.

 



 

행동 익명화는 이처럼 신분을 노출시키지 않고 어떠한 작업을 수행하는 것이다. 공격자 또한 행동 익명화를 있으며, 악성코드 연구자 또는 수사관 또한 악성코드를 분석하기 위해 행동 익명화가 필요하다.

 

행동 익명화의 종류는 토르를 이용한 익명 브라우징, 프록시 서버를 이용한 익명 브라우징으로 나눌 있으며 문서에서는 프록시 서버를 이용한 익명 브라우징을 주된 내용으로 다룬다.

 

*그림 출처 : http://blog.daum.net/fidesmd2/171

 

프록시 서버

프록시 서버는 일반적으로 클라이언트와 서버 사이에 중간자 시스템으로 설계되었고, 대역폭 절감, 콘덴츠 필터링 등을 위해 흔히 사용된다. 하지만 인터넷에서 익명성을 보장하기 위한 목적으로도 사용된다.

  흔히 프록시 서버는 토르와 비교되는데, 이들의 가장 차이는 프록시 서버는 서버 자체에서 요청한 클라이언트를 있다는 것이고 토르의 최종 노드에서는 요청한 클라이언트를 모른다는 것이다.

 

 


 

  이러한 요청한 클라이언트를 아는 프록시 서버의 특성 때문에 프록시의 유형은 투명한 프록시, 익명성을 보장하는 프록시, 매우 높은 익명성을 보장하는 프록시로 나뉜다.

 

  • 투명한 프록시 : 요청 클라이언트의 정보를 HTTP 추가 헤더를 설정하여 서버에 전송한다.
  • 익명성을 보장한 프록시 : 요청 클라이언트의 정보를 서버에 보여주지는 않지만, 프록시를 통해 전송되었다는 정보를 포함한다.
  • 높은 익명성을 보장하는 프록시 : 대상 서버에 어떠한 정보도 제공하지 않는다. 서버는 프록시를 통해 전송되었다는 정보를 없다.

 

 

윈도우에서 SSH 터널 프록시 사용

프록시로 연결하는 방법 가장 좋은 방법은 SSH 터널을 통해 포트를 포워딩하는 방식이며, SSH 터널은 사용자 PC 포트를 오픈하여 SSH 통해 서버로 연결한 서버를 SOCKS4/5 프록시로 사용할 있게 한다.

 

인터넷 어플리케이션을 SSH 터널을 통해 프록시하는 데는 다음과 같이 4가지 이유가 있다.

 

  • 보안 : 사용자와 서버 사이의 로컬 트래픽이 암호화된다.
  • 프라이버시 : 사용자의 실제 IP 주소를 감춘다.
  • 기술적 이유 : 다른 장소에서 IP 기반 인증 메커니즘을 사용하는 어플리케이션에 접근해야할
  • 그리고 그냥.. 가능하니까 :)

 

그렇다면 어떻게 서버를 통해 프록시 연결을 하는 것인가?

 

SSH 프록시 서버 사용을 위한 준비물은 다음과 같다.

  • 사용할 있는 SSH 프록시 서버
  • Putty
  • 브라우저(IE, FireFox )

 

*직접 SSH 프록시 서버를 구축해서 실습을 해야한다면 SSH 프록시 서버 구축을 위해 "How to setup an SSH Proxy Server using Putty and Spoon Proxy" 참조하기 바란다. 필자는 직접 SSH 프록시 서버를 구축하였으며, 아래 내용은 해당 서버를 이용한 정보이다.

 

Putty 실행하면 다음과 같은 설정창을 보게 된다.

 



 

  • Host Name : SSH 프록시 서버의 주소를 적는다.
  • Port : 서버에서 지원하는 SSH 포트 번호(일반적으로 22) 적는다.
  • Connection type : SSH 설정한다.

 

* 이후 계속 사용하기 위해서 세션에 대한 정보를 저장해 둔다. 여기서는 SSH TEST 저장한다.

 

Connection -> SSH 누르면 SSH 세팅 정보가 나오며 다음과 같이 설정해 준다.

 


 

  • Enable Compression 체크
  • Preferred SSH protocol version : SSH 서버에서 지원하는 버전으로 설정(일반적으로 2 설정)

 

Connection - SSH - Tunnels 누르면 SSH 터널에 대한 설정을 해줄  있다.



  • Source port : 사용자의 PC에서 사용되지 않는 포트 번호를 적는다. 여기서는 4567 적었다.
    포트는 사용자 PC에서 프록시 서버 포트로 사용될 , SSH 터널로 포워딩될 포트이다.
  • Dynamic, Auto 설정해준다.

 

Add 누르면 입력한 포트번호가 다음과 같이 포워딩된 포트 목록에 추가된다.

 

 

이제 설정이 모두 완료되었다.

다시 Session 눌러 설정한 세션 정보를 저장한다.

 

 

저장된 세션에 접속하고 서버에서 제공한(또는 설정한) 계정명과 비밀번호를 입력하면 다음과 같이 접속하게 된다. Putty 통해 SSH 프록시 서버를 사용하기 위해서는 반드시 서버에 로그인 상태여야 한다.

 

 

서버에 로그인된 상태에서

파이어폭스 - 설정 - 고급 - 네트워크 - 연결란의 설정을 누르고 다음과 같이 설정해준다.

 

 

*필자는 IE에서 먼저 시도해보았으나 SOCKS 프로토콜 사용이 원활히 진행되지 않아 파이어폭스에서 진행하였다.

 

접속 IP 확인해보면 외부에서 확인한 필자의 IP 실제 PC에서의 IP 다르단 것을 확인 있다.

 

 

마치며

일단 문서에서는 '높은 익명성을 보장하는 프록시' 대한 증명을 전혀 하지 않았다. 점에 대해서는 추후 문서에 추가할 예정이다.

  필자는 행동 익명화에 대해 공부하기 전에는 단순히 공격자만이 행동 익명화를 요구하는지 알았으나 수사관 또한 공격자의 감시를 피하기 위해 행동 익명화가 요구된다는 사실을 알게 되었다. 이를 포함한 많이 부족한 지식을 조금이라도 채워준 저자들에 대해 감사를 표한다.

 

참조

Malware Analyst's Cookbook and DVD, p10-17

Proxy Connections With SSH or PUTTY

(http://www.webhostingtalk.com/showthread.php?t=539067)

How to setup an SSH Proxy Server using Putty and Spoon Proxy

(http://www.pccured.com/blog/how-to-setup-ssh-proxy/)

Putty 0.60(r3) (http://www.chiark.greenend.org.uk/~sgtatham/putty/)

'Analysis > Reverse Engineering' 카테고리의 다른 글

자식 프로세스 디버깅하기  (0) 2012.09.08
AND

자식 프로세스 디버깅하기

Analysis/Reverse Engineering 2012. 9. 8. 02:08 Posted by 알 수 없는 사용자


우리는 종종 자식 프로세스를 디버깅해야 하는 경우가 생깁니다. 예를 들어 인터넷 익스플러러를 통해 접속한 웹 페이지에서 자바를 사용한다면 IE의 자식 프로세스로 java.exe가 실행될 것입니다. java.exe 프로세스가 IE의 자식 프로세스로 생성되어 실행되는 순간에 우리는 이것을 attach하고 싶습니다. 이 순간을 디버거로 잡는 방법이 두 가지 있습니다(제가 모르는 방법이 더 있을 수 도 있습니다).


첫 번째 방법은 윈도우 레지스트리에서 attach할 프로세스(java.exe)를 등록하고, 거기에 디버거를 설정해 주는 방법입니다. 즉, 해당 프로세스가 실행될 때 설정한 디버거가 실행되도록 하는 것입니다.


두 번째 방법은 Windbg를 이용한 방법입니다. Windbg에서는 실행파일을 디버깅하기 위해 불러올 때 자식 프로세스까지 디버깅을 할 수 있는 옵션이 존재합니다. 이 옵션을 체크하고 실행하면 IE를 디버깅 하던 도중에 만약 java.exe 프로세스가 실행될 경우, Windbg가 알아서 해당 모듈을 로드하는 순간 브레이크 포인트를 걸어 디버깅 할 수 있도록 도와줍니다. 물론 java.exe 프로세스뿐만 아니라 다른 모든 자식 프로세스가 생성되어도 잡아줄 것입니다.


1. 윈도우 레지스트리에 디버거를 등록하는 방법


먼저 윈도우 실행에서 레지스트리 편집기(regedit.exe)를 실행합니다. 그리고 "Imae File Execution Options"에 attach하고 싶은 프로세스 이름을 키(key)로 생성합니다. 마지막으로 생성한 키에 문자열 값을 생성하여 그 값에  사용할 디버거의 전체 경로를 설정합니다. 저는 ollydbg로 설정해 주었습니다.


레지스트리 경로:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\java.exe



인터넷 익스플러러를 실행시킨 다음 자바를 사용하는 웹 페이지에 접속하면 다음과 같이 java.exe 프로세스는 ollydbg에 attach 된 상태로 실행됩니다.




지금부터 신나게 디버깅을 하면 되겠습니다. :)



2. Windbg에 자식 프로세스 디버그 옵션을 이용한 방법


먼저 Windbg를 실행하고, "File -> Open Executable"을 실행합니다. 인터넷 익스플러러를 불러오는 동시에 맨 아래쪽에 위치한 "Debug child processes also" 옵션에 체크만 해주면 끝입니다.



마찬가지로 해당 웹 페이지에 접속하면 java.exe 프로세스가 실행됩니다.



Windbg에서는 java.exe 프로세스가 로드될 때 브레이크 포인트를 걸어줍니다.



Windbg로 신나게 디버깅을 하시면 되겠습니다. :)


상황에 맞게 두 가지 방법 중 하나를 자유롭게 사용하시면 될 것 같습니다. 혹시 더 좋은 방법이나 다른 방법들이 있다면 공유 좀...ㄳㄳ


참고로 윈도우 7에서도 가능합니다.


'Analysis > Reverse Engineering' 카테고리의 다른 글

SSH 터널 프록시를 이용한 행동 익명화  (0) 2013.04.10
AND