황당한 질문은 아니구요. 이 바닥에 있다보면 한번쯤 관심을 가지는 부분이지요.
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로 서버 다운 시킬 때가 더 즐겁기는 한데..
그럼 도움이 되셨기 바랍니다.
나도초짜 님이 쓰신 글 :
: 안녕 하세요..
: 제가 참 질문이 많네요.. ;;
:
: 제컴퓨터의 이더넷 포트를 통하여 다른 응용프로그램에서
: 내 보내거나 받는 데이터를 가로챌수 있는 방법이
: 있을까요?
:
: 너무 황당한 질문인가?
:
: 하여튼 죄송합니다.
:
: 궁금해서...