본문 바로가기

파이썬 해킹 입문/해킹기술

2. 어플리케이션 해킹 기술

어플리케이션 해킹이란

PC 서버에서 운영되고 있는 많은 어플리케이션들은 C언어를 기반으로 만들어진다. C 언어는 Kernel에서 제공하는 강력한 API 직접 호출할 있다. 이러한 기능은 사용자에게 다양한 편의성을 제공하지만, 해커에게는 공격의 기술을 제공하기도 한다.

PC에서 많이 운영되는 있는 보안 솔루션을 살펴보자. 키보드 입력과 화면 출력 사이에 전송되는 데이터를 암호화하는 키보드 보안 솔루션의 경우 Kernel에서 제공하는 메시지 후킹 기능을 사용한다. Kernel에서 키보드 입력이 감지되면 보안 솔루션은 메시지를 중간에 가로채서 암호화해 준다. 해킹에 사용되는 키로거도 동일한 원리를 이용한다. 키보드 보안 솔루션이 설치되지 않는 PC 키로거가 설치되면 사용자가 입력한 아이디와 비밀번호를 중간에 가로채서 해커에게 그대로 전송한다.

디버거는 어플리케이션을 개발할 반드시 필요한 도구다. 프로그래머는 디버거를 이용해서 단계별로 어플리케이션을 실행하고, 오류의 원인을 찾아낸다. 디버거는 특정 이벤트 발생하거나, API 호출되면 하던 일을 잠깐 멈추고 다른 기능을 실행하거나, 메모리 상태를 기록할 있다. 이때 개발자는 이런 디버거의 기능을 이용해서 오류에 대한 원인 분석하지만, 해커는 악성 코드가 실행되도록 유도한다.

 

메시지 후킹

메시지 후킹은 user32.dll SetWindowsHookExA 메소드를 이용한다. 윈도우는 키보드, 마우스 등에서부터 들어오는 메시지를 Hook Chain을 통해 처리한다. Hook Chain은 메시지를 처리하는 일련의 함수 포인터를 모아놓은 리스트다. Hook Chain 상에 강제적으로 프로그래머가 원하는 처리프로세스에 대한 포인터를 등록하면 메시지가 들어올 때 원하는 작업을 할 수 있다. 대표적인 해킹 기법인 Key Logger가 이 방식을 이용한다. 키보드 입력 메시지를 중간에 가로채 해커에게 전송하는 것이다.

 

API 후킹

API 후킹은 운영체제에서 제공하는 디버깅 프로세스를 이용한다. 먼저 디버거를 이용해서 어플리케이션 특정 명령어에 breakpoint를 설정하고 특정 메소드를 수행하도록 등록한다. 어플리케이션은 작업을 수행하다가 breakpoint를 만나면 등록된 메소드를 실행한다. 이 메소드를 콜백 메소드라고 하는데, 여기에 해킹 코드를 심어 놓으면 해커가 원하는 동작을 수행할 수 있다. 예를 들어 메모장(notepad) 프로세스의 WriteFile 메소드에 breakpoint를 설정했다면, 저장 메뉴를 클릭하는 시점에 콜백 메소드가 호출된다. 여기에 특정 문자를 해커가 원하는 문자로 바꾸는 코드를 삽입하면, 사용자가 의도하지 않는 문자가 파일에 저장 된다.

 

DLL Injection

DLL Injection 동적으로 사용할 있는 라이브러리인 DLL 어플리케이션에 삽입하는 기술이다. 모두 3가지 방법이 있는데, 첫째는 레지스트리를 사용하는 것이다. 먼저, 레지스트리의 특정 위치에 원하는 DLL 이름을 입력해 놓는다. user32.dll 호출하는 어플리케이션의 경우 해당 위치에 입력된 DLL 메모리에 로딩한다. 둘째는 앞에서도 언급한 후킹 함수를 사용하는 것이다. 특정 이벤트가 발생했을 DLL 로딩하는 후킹 함수로 등록하는 것이다. 마지막으로 실행 중인 어플리케이션에 원격 스레드를 생성해서 DLL 삽입하는 것이다. 윈도우에서는 CreateRemoteThread() 함수를 제공해서 원격 스레드 생성을 지원하고 있다.

 

Code Injection

 

Code Injection 기법은 Thread를 활용한 DLL Injection 기법과 유사하다. 차이점은 여기서는 DLL 대신 직접 실행 가능한 Shell Code를 삽입한다는 것이다. Code Injection의 장점은 DLL을 미리 시스템 특정 위치에 저장할 필요가 없고, 속도가 빠르며, 노출이 쉽지 않다는 점이다. 하지만 Shell Code의 특성상 복잡한 해킹 코드를 삽입할 수 없다는 단점 또한 존재한다.

 

파이썬 해킹 입문 저자의 동의하에 컨텐츠를 게시합니다.

반응형

'파이썬 해킹 입문 > 해킹기술' 카테고리의 다른 글

6. 기타 해킹 기술  (0) 2019.12.14
5. 시스템 해킹 기술  (0) 2019.12.14
4. 네트워크 해킹 기술  (0) 2019.12.14
3. 웹 해킹 기술  (0) 2019.12.14
1. 해킹이란  (0) 2019.12.14