반응형

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




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


애플리케이션 해킹 기술

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

  • API 후킹
    1. API 후킹은 운영체제에서 제공하는 디버깅 프로세스를 이용한다.
    2. 디버거를 이용해서 애플리케이션 특정 명령어에 중단점(BreakPoint)을 설정하고 특정 메서드를 수행하도록 등록한다.
    3. 애플리케이션은 작업을 수행하다가 중단점을 만나면 등록된 메서드를 실행한다.
    4. 이 메서드를 콜백 메서드라고 하는데 여기에 해킹 코드를 심어 놓으면 해커가 원하는 동작을 수행 할 수 있다.
    5. 예를 들어 메모장(notepad) 프로세스의 WriteFile() 메서드에 중단점을 설정했다면 저장 메뉴에 클릭하는 콜백 메서드가 호출된다





  •  DLL 인젝션
    1. DLL 인젝션은 동적으로 사용할 수 있는 라이브러리인 DLL을 애플리케이션에 삽입하는 기술이다.
    2. 총 3가지 방법이 있는데, 첫째 레지스트리를 사용한 것이다. 먼저, 레지스트리의 특정 위치에 원하는 DLL 이름을 입력해 놓는다. user32.dll을 호출하는 애플리케이션의 경우 해당 위치에 입력된 DLL을 메모리에 로딩한다.
    3. 둘째는 후킹 함수를 사용한 것이다. 즉, 특정 이벤트가 발생했을 때 DLL을 로딩하는 후킹 함수로 등록하는 것이다.
    4. 마지막은 실행 중인 애플리케이션에 원격스레드를 생성해서 DLL을 삽입하는 것이다. 윈도우에서는 CreateRemoteThread()함수를 제공해서 원격 스레드를 생성을 지원
  • 코드 인젝션
    1. 코드 인젝션(Code Injection) 기법은 스레드를 활용한 DLL 인젝션 기법과 유사하다. 차이점은 여기서는 DLL 대신 직접 실행가능한 쉘 코드 (Shell Code)를 삽입한다.
    2. 코드 인젝션의 장점은 DLL을 미리 시스템 특정 위치에 저장할 필요가 없고 속도가 빠르며 노출이 쉽다.
    3. 그렇지만, 쉘코드의 특성상 복잡한 해킹 코드를 삽입할 수 없다는 단점


반응형

'해킹의 기술' 카테고리의 다른 글

네트워크 해킹  (0) 2018.07.20
웹 해킹  (0) 2018.07.17

+ Recent posts