반응형
PC와 서버에서 운영되고 있는 많은 애플리케이션은 C언어를 기반으로 만들어 집니다. C언어는 커널에서 제공하는 강력한 API를 직접 호출할 수 있으며 이러한 기능은 사용자에게 다양한 편의성을 제공하지만 해커에게는 공격기술을 제공하기도 합니다.
디버거는 애플리케이션을 개발할 떄 반드시 필요한 도구입니다. 프로그래머는 디버거를 이용해서 단계별로 애플리케이션을 실행하고 오류의 원인을 찾아냅니다. 디버거는 특정 이벤트가 발생하거나 API가 호출되면 하던일을 잠깐 멈추고 다른 기능을 실행하거나 메모리 상태를 기록할 수 있습니다. 이때, 개발자들은 이런 디버거의 기능을 이용해서 오류의 원인을 분석하지만 해커는 악성코드가 실행되도록 유도 합니다.
애플리케이션 해킹 기술
- 메시지 후킹
- 메시지 후킹은 user32.dll의 SetWindowsHookExA() 메서드를 이용합니다.
- 윈도우는 키보드, 마우스 등에서부터 들어오는 메시지를 훅 체인(hook chain)을 통해 처리한다.
- 훅 체인(hook chain)은 메시지를 처리하는 일련의 함수 포인터를 모아 놓은 리스트다.
- 훅 체인 상에 강제적으로 프로그래머가 원하는 처리 프로세스에 대한 포인터를 동록하면 메시지가 들어올 때 원하는 작업을 할 수 있다.
- 대표적인 해킹 기법인 키 로거 (Key Logger)가 이 방식을 이용한다. 키보드 입력 메시지를 중간에 가로채 해커에게 전송하는 것이다.
- API 후킹
- API 후킹은 운영체제에서 제공하는 디버깅 프로세스를 이용한다.
- 디버거를 이용해서 애플리케이션 특정 명령어에 중단점(BreakPoint)을 설정하고 특정 메서드를 수행하도록 등록한다.
- 애플리케이션은 작업을 수행하다가 중단점을 만나면 등록된 메서드를 실행한다.
- 이 메서드를 콜백 메서드라고 하는데 여기에 해킹 코드를 심어 놓으면 해커가 원하는 동작을 수행 할 수 있다.
- 예를 들어 메모장(notepad) 프로세스의 WriteFile() 메서드에 중단점을 설정했다면 저장 메뉴에 클릭하는 콜백 메서드가 호출된다
- DLL 인젝션
- DLL 인젝션은 동적으로 사용할 수 있는 라이브러리인 DLL을 애플리케이션에 삽입하는 기술이다.
- 총 3가지 방법이 있는데, 첫째 레지스트리를 사용한 것이다. 먼저, 레지스트리의 특정 위치에 원하는 DLL 이름을 입력해 놓는다. user32.dll을 호출하는 애플리케이션의 경우 해당 위치에 입력된 DLL을 메모리에 로딩한다.
- 둘째는 후킹 함수를 사용한 것이다. 즉, 특정 이벤트가 발생했을 때 DLL을 로딩하는 후킹 함수로 등록하는 것이다.
- 마지막은 실행 중인 애플리케이션에 원격스레드를 생성해서 DLL을 삽입하는 것이다. 윈도우에서는 CreateRemoteThread()함수를 제공해서 원격 스레드를 생성을 지원
- 코드 인젝션
- 코드 인젝션(Code Injection) 기법은 스레드를 활용한 DLL 인젝션 기법과 유사하다. 차이점은 여기서는 DLL 대신 직접 실행가능한 쉘 코드 (Shell Code)를 삽입한다.
- 코드 인젝션의 장점은 DLL을 미리 시스템 특정 위치에 저장할 필요가 없고 속도가 빠르며 노출이 쉽다.
- 그렇지만, 쉘코드의 특성상 복잡한 해킹 코드를 삽입할 수 없다는 단점
반응형