[정보 및 잡담] 프로그램 후킹과 해킹의 차이점


Development note/Etc.  2012. 9. 8. 08:31

안녕하세요. 명월입니다.


많은 사람이 해킹과 후킹에 대해 헷갈리기에 그 차이점에 대해 포스팅하겠습니다.

해킹이란 패킷을 훔치는 행위이고 후킹이란 이벤트를 훔치는 행위라고 하겠습니다.


해킹을 이해하기 위해선 인터넷의 구성을 이해할 필요가 있겠습니다. 이 Tistory에 대해 한번 확인해 보겠습니다.
사용자가 제가 이 쓴 포스팅을 보기 위해선 어떻게 움직일까요?
먼저 사용자는 웹 브라우저를 키고 그에 맞는 도메인을 쓰겠지요. 그럼 도메인을 쓰고 엔터 치는 순간 그 패킷은 게이트웨이를 타고 날아가서 DNS에 먼저 안착합니다. DNS에서 이름 된 URL을 IP주소로 변환하여 그 라우터로 쳐냅니다. 라우터들은 패킷을 해당 IP주소로 날려 보내고 해당 IP주소에 도착 후에는 그에 대한 정보를 다시 반송하여 우리 컴퓨터로 다시 돌아오는 행동을 합니다.

그림으로 보면 이렇게 얽혀 있습니다. 컴퓨터에서 라우터로 라우터에서 DNS서버로 DNS서버에서 다시 Tistory 서버까지 돌아오는 과정은 DNS서버를 거치지 않고 돌아오는 과정입니다. 이렇게 거미줄 같이 엉켜 있다고 인터넷이라고 부르는 것입니다.


해킹은 여러 가지 방법이 있으나 먼저 첫 번째 패킷을 전송할 때 패킷을 가로채는 방법 두 번째 라우터에서 가로채는 방법 세 번째 DNS에서 가로채는 방법 마지막 서버에서 가로채는 방법이 있겠습니다.

일단 여기서 해킹이 가장 쉽고 많이 하는 방법이 패킷을 전송할 때 가로채는 방법이 있겠습니다. Rowsocket 등을 이용해 내가 서버로 일련의 패킷을 보내면 그거에 대한 패킷 형식과 돌아올 때의 회답 패킷을 분석해서 그 프로그램을 뚫는 방법이 있습니다. 예를 들면 네이트온 해킹, 싸이월드 해킹 등 특정 프로그램 해킹이 여기에 해당합니다.


그리고 두 번째로 많은 해킹은 직접 서버를 공격하는 행위입니다. 첫 번째 방법은 흔적이 많이 남지는 않지만, 정보 해킹의 한계가 분명 있습니다. 즉 서버에서 보내주는 패킷만 확인할 수 있다는 것.

하지만 서버를 직접 공격하면 거의 모든 정보를 취득할 수 있지만 흔적이 엄청나게 남는다는 것입니다. 미션 임파서블1를 예를 들면 무식한 방식이지만 분명 두 번째 해킹 행위와 비슷한 것입니다. 전에 있었던 농협 서버 공격도 여기에 해당하는 것입니다. 그리고 KT의 정보 유출사태 등도 여기에 해당하겠습니다.


그다음은 라우터나 DNS 공격을 하는 해킹 행위입니다. 이 방법은 흔적도 안 남고 많은 양의 정보를 취득할 수 있는 방면 가장 어려운 방법입니다. 그러나 이 방식이 아예 없지는 않습니다. 예전 스마트폰의 해킹 사태가 벌어져 그 당시에 스마트폰으로 은행거래를 하면 털린다는 이야기를 들은 적이 있을 것입니다. ( 현재는 보안 되어 문제가 없습니다.) 그 당시에 해커가 하던 방식이 개인의 스마트폰을 직접 공격하는 형식이 아니고 라우터에 숨어있다가 패킷이 오면 그걸 확인하는 방식의 해킹을 했던 것입니다.


해킹에 대해서 여기까지 알아보았습니다.


그럼 후킹에 대해서 알아보겠습니다.


후킹은 패킷을 훔쳐오는 게 아니라 이벤트를 훔쳐오는 행위입니다. 즉 이런 인터넷의 구조를 알아야 하는 부분이 아니고 OS의 구조를 알아야 하는 부분입니다. 저도 리눅스 후킹을 해본 적이 없으니 Window 후킹에 대해서만 알아보겠습니다.


우리가 모니터로 보는 이 윈도우는 현재 보시는 이 화면은 동적으로 움직이는 게 아니고 이미지를 송출하는데 이게 1초에 여러 프레임을 묘화하여 마치 움직이는 행위처럼 보이는 것입니다. 작업 표시줄에 여러 개의 프로그램이 떠 있다고 가정한다면 우리는 아 프로그램이 여러 개 돌고 있다고 생각하지만 우리가 눈으로 보는 것은 2D로 날라오는 하나의 이미지일 뿐입니다. 그냥 우리의 머리속으로 표시줄에 있으니깐 그게 실행 중이다라는 논리적으로 생각하는 것입니다. 말이 어렵습니다.


이미지로 설명하는 게 좋으나 어떻게 표현해야 할지 모르겠습니다. 우리 어렸을 때 하는 놀이 중에 책 모서리에 하나의 그림을 그리고 다음 장에 또 그림을 그리고나서 빨리 넘기면 마치 움직이는 형태를 하던 놀이를 기억하실 겁니다.

컴퓨터도 그런 형식으로 움직이는 것입니다.


여기서 우리는 하나의 이미지를 만지는 것이라고 하는 데 그럼 컴퓨터는 이게 창이고 익스플로러 오른쪽 위에 있는 x 표시를 왜 누르면 닫히는 일련의 행동을 하는 것인데 그게 이벤트라고 하겠습니다.

즉, 우리는 하나의 이미지를 보지만 그 이미지 위에 이벤트를 걸어놓는 것입니다. 즉 익스플로러의 전체화면을 시킬 때 이걸 스크릿샷을 띄운 후에 생각해봅시다. 그 이미지 파일 위에 뒤로 가기 버튼을 누른다고 그 이미지는 변하지 않습니다.

물론 그 이미지의 x 표시를 누른다고 그 이미지가 없어지지 않습니다. 근데 거기에 이벤트를 붙이면 이 구역을 누르면 무슨 행동을 취해라, 또 무슨 구역에 마우스 왼쪽을 누르면 닫히라고 등의 이벤트들이 달려있습니다. 이걸 훔치는 행위를 후킹이라고 합니다.


후킹도 악의적으로 쓰면 해킹과 비슷한 형태가 됩니다. 예를 들면, 과거 PC방에서 후킹 툴을 설치하고 옆 컴퓨터에 서버를 설치해 놓고 있어서 누가 그 자리에 앉아 게임 ID 를 누르고 비밀번호를 알면 알아내는 방식의 후킹 툴이 유행한 적이 있습니다.

그건 키보드의 이벤트를 훔쳐서 다른 곳에 그 정보를 보내는 행위입니다. 해킹과 비슷하지만, 엄연히 방식이 다른 것입니다.


해킹은 악의적인 목적밖에 없지만, 후킹은 좋은 목적도 있습니다. 즉, 트리거의 역할을 하는 예도 있는데 내가 특정키를 누르면 컴퓨터가 자동으로 마우스가 움직이면서 무언가의 행동을 하게끔 하는 봇의 역할이라던가 네이트의 예를 들면, 원격접속 프로그램도 그에 해당하는 것입니다. 상대방이 마우스를 움직이면 내 컴퓨터의 마우스 이벤트가 스스로 움직여 움직이는 형태를 가르치는 것이지요.


설명은 여기까지이고 해킹과 후킹의 차이를 정확히 알고 좋은 목적으로 프로그램을 생산해야겠습니다.


※ 해킹에 관한 프로그램(Rawsocket)의 프로그램은 없지만 본 블로그래 Browser를 이용한 후킹 프로그램을 작성해 놓은 것이 있으니 확인해보시면 좋겠습니다.( 솔직히 정확히 이벤트를 훔친 것이 아니라 후킹이라고는 말하기 어렵지만 방식은 마찬가지이니 확인해보시면 좋겠습니다.)