정말 대단히 감사합니다.
제가 공부좀 해보고 혹시 모르면 다시 질문 드리겠습니다.
그럼 수고 하세요...
차상철 님이 쓰신 글 :
: 황당한 질문은 아니구요. 이 바닥에 있다보면 한번쯤 관심을 가지는 부분이지요.
:
: TCP/IP의 데이터를 가로 채는 방법은 크게 2가지 범주가 있습니다.
: 첫번째는 해당 컴에 모듈을 설치하여 소켓 통신하는 모든 데이터를 가로 채는 방법입니다. 두번째는 내 네트워크에 속해 있는 모든 패킷을 가로채는 방법입니다.
:
: 첫번째를 구현하는 가장 기본적이고 간단한 방법은 Winsock API Hooking 입니다. Winsock API Hooking 를 키워드로 Google 에서 검색하면 많은 자료가 나오니 참고하시면 될 것 입니다. 아래는 제가 금방 검색한 사이트 군요.
:
:
http://www.win-tech.com/html/toolkit.htm
:
: 프로그램 소스를 살펴보시면 되겠지만, 간단하게 설명 드리면 이렇습니다. 일반적으로 API hooking 이 대게 이런 방법을 사용합니다.
:
: 우선, Winsock.dll 에 있는 모든 API를 구현합니다. 겁먹지 마시구요. Winsock API 와 동일하게 함수 선언하고 아무것도 하지 않고 적절하게 값을 리턴해 주는 놈을 만듭니다.
: 이렇게 작성된 winsock.dll 과 동일한 이름을 가지도록 구현된 함수에서 실제 winsock.dll API를 불러 줍니다.
: 그러면 동작하는 데는 전혀 이상이 없겠지요. 그럼 제가 가로채고자 하는 API 함수가 호출 될 때 값을 얻어 오기만 하면 됩니다. 그럼 이제 하나만 남았는데요, 현재 메모리에 로딩 되어 있는 winsock.dll 의 위치에 작성한 dll 을 올려 주는 겁니다. 그럼 응용프로그램이 winsock API를 호출하면 제가 작성함 모듈이 호출 되구요, 저는 모든 데이터를 들여다 볼 수 있게 됩니다.
:
: 사실.. 간단한 건데... 말로 설명하려니 간단하지는 않군요.
:
: 구현되어 돌아다니는 소스도 있고, 상용화된 라이브러리도 있으니 적절하게 사용하시면 됩니다.
:
: 그리고.. 음.. 혹시 들어 보셨을지 모르겠지만, MS Winsock Degug dll 이라는 것이 제공됩니다. 전에 관련된 부분 개발 하다가 읽어 본 자료에서 본 건데, MS에서 제공되는 Debug용 winsock.dll 을 사용하면 데이터를 들여다 볼 수 있는 방법을 제공합니다. 이놈을 해당 컴에 설치만 하면 간단하게 끝이 나지요.
:
: 이 방법의 쥐약은 패킷이 암호화 되어 있을 때 입니다. HTTPS 나 SSL 을 사용하면 볼 수가 없지요.
:
: 옛날에 인터넷 순위 사이트에서 로컬에 프로그램 설치 하면 시간 당 몇십원 주고.. 개인의 네트워크 이용 성향을 파악해 순위를 매기는 것이 있는데.. 이게 이러한 방법에 근거하는 것 입니다.
:
: 이 방법을 이용하면 Winsock API 호출 후에 내가 필요한 작업을 하기 위해 뭔가를 하면 (화일에 쓴다 던가..) 네트워크가 느려짐을 감지하게 되지요. 만일 은밀한(?) 목적으로 개발하고자 한다면, 속도 저하가 없도록 쓰레드를 사용하시게 될 것 같구요. 별도의 Log 프로그램과의 통신을 위해 Mapped IO, WM_COPY 등을 공부하시게 될 거시네요. -
:
: 음.. 이정도면.. 첫번째 방법에 대해 간단하게 소개가 된 것 같구요.
:
: 두번째 방법은 TCP/IP의 동작 방식에 대해 이해 하시면 되는데요. 이더넷 TCP/IP는 브로드케스팅을 방법을 이용해서 통신을 합니다. 다시 말씀 드리면 제가 패킷을 내 보내면 제 컴과 허브에 물린 모든 컴 및 라우터에 패킷이 도작하게 되구요. 이더넷 NIC는 이 패킷의 받는 놈 MAC Address가 '나' 인지 검사하고 받는 놈이 나 이면 패킷을 받아 들이고 아니면 무시하게 됩니다.
:
: 그럼.. 내 네트워크에 돌아 다니는 패킷이 내 컴에는 온다는 이야기가 되지요. 이제. 이 패킷을 버리지 말고 받아 들이기만 하면 내가 속해 있는 네트워크를 통해 돌아 다니는 모든 데이터를 들여다 볼 수 있게 됩니다.
: 이 방식을 이용하여 초보적인 해킹을 합니다. snoofing 이라고 부르는 (맞나 모르겠네요.) 방법이지요.
: 이것은 TCP Dump 라이브러리를 사용하면 구현 가능합니다. 이 놈은 아마 공개 되어 있는 놈입니다. 네트워크 모니터링 프로그램들이 이 라이브러리를 많이들 사용합니다. 소스도 공개되어 있으니 많이들 사용 하겠지요.
:
: 사이트는
http://www.tcpdump.org/ 입니다.
:
: 이 방법을 쓰면 암호화 되지 않은 비밀번호 알아 채는 것은 일도 아니지요. 요즘은 많이들 패킷을 암호화 하기 때문에 큰 효과는 없는 방법이지만 사오년 전에는 많이 사용하는 초보 해킹 방법이지요. 그래도 관리가 좀 허술한 중소 기업에서는 헛점이 많이 노출 될 수 있어요.
:
: 그러나 주로는 해킹 보다는 네트워크 분석 (보안 이나 트래픽 분석 등) 용도록 훨씬 많이 사용 됩니다.
:
: 사실.. 비번 알아 낼때 보다는 DOS로 서버 다운 시킬 때가 더 즐겁기는 한데..
:
: 그럼 도움이 되셨기 바랍니다.
:
: 나도초짜 님이 쓰신 글 :
: : 안녕 하세요..
: : 제가 참 질문이 많네요.. ;;
: :
: : 제컴퓨터의 이더넷 포트를 통하여 다른 응용프로그램에서
: : 내 보내거나 받는 데이터를 가로챌수 있는 방법이
: : 있을까요?
: :
: : 너무 황당한 질문인가?
: :
: : 하여튼 죄송합니다.
: :
: : 궁금해서...