DLL Injection 은 어떻게 이루어지는가? - AppInit_DLLs 값 조작

2009/07/26 20:57

AppInit_DLLs 값 조작


DLL Injection에는 여러 방법이 있습니다. 그중 루트킷에 이용되는 세 가지 방법을 알아보겠는데요. 첫 번째로 레지스트리를 조작하는 방법입니다.

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Windows\AppInit_DLLs


regedit에서 위 주소의 레지스트리 값을 확인해보면, 보통은 값이 비어있습니다. 그런데 어떠한 값이 들어있다면, 그리고 그것이 자신이 모르는 어떤 파일이라면, 그것은 악성 코드일 가능성이 있습니다. 이 레지스트리 값이 무엇이냐구요? 바로 이 값이 DLL Injection에 참조되는 레지스트리 값입니다.

윈도우즈의 많은 어플리케이션들이 user32.dll을 호출합니다. 이 DLL에는 창관리자를 호출하는 API 함수들이 있습니다. 윈도우즈가 기본적으로 GUI 환경이고 그 때문에 어플리케이션들도 user32.dll을 호출하기 마련이죠.

사용자 삽입 이미지
[그림 1] user32.dll이 AppInit_DLLs를 참조하는 개요

그런데 이 user32.dll은 특별한 기능을 가지고 있습니다. [그림 1]에서처럼 user32.dll은 LoadLibrary() 함수를 이용하여 AppInit_DLLs 안에 지정된 DLL들을 호출합니다. 이 때 LoadLibrary()의 인자값으로 DLL_PROCESS_ATTACH를 지정해주기 때문에 프로세스 중간에 DLL이 들어갈 수 있는 것입니다.

공격자가 이 레지스트리 값을 악의적으로 변경한다면 악성코드를 프로세스에 심을 수 있죠. 대신 이것이 적용될려면 재부팅이 필요합니다. 그러나 레지스트리 값이 변경되기 이전에 메모리에 적재된 프로세스일 경우에 재부팅이 필요한 것이지, 변경 된 이후에 메모리에 적재될 프로세스라면 굳이 재부팅이 안 되더라도 DLL이 삽입됩니다. Email-Worm.Win32.Warezov.nf 이라는 웜이 AppInit_DLLs 값을 변경하여 DLL Injection을 시도하는 한 예입니다. 이것은 이메일의 첨부파일이 실행되면 악성 DLL을 C:\WINDOWS\system32에 생성합니다. 그리고 AppInit_DLLs 값을 변경하여 이후에 user32.dll을 호출하는 프로세스에 악성 DLL을 삽입하죠. 이 웜에 대한 자세한 내용은 아래 참고 문헌을 읽어주세요.

하지만 이 방법은 해당 레지스트리 값만 조사하면 금방 탐지될 수 있는 단점이 있습니다. 보통 정상적인 경우라면 위에서도 언급했듯이 값이 비어있기 때문이죠. 그렇더라도 레지스트리가 무엇인지 모르는 윈도우즈 사용자가 대부분이기 때문에 이것만으로도 꽤 치명적이라 할 수 있습니다.

참고 문헌


루트킷 : 윈도우 커널 조작의 미학, Greg Hoglund, James Butler, 2007, 에이콘
부팅할때 읽는 주요 파일 :: http://fd.igrus.kr/?mid=Study&document_srl=1013
Email-Worm.Win32.Warezov.nf 정보 :: http://blog.daum.net/virusmyths/6041710
크리에이티브 커먼즈 라이센스
Creative Commons License

6l4ck3y3 0x02 Windows RCE , , , , ,

Trackback Address:http://hisjournal.net/blog/trackback/251
  1. 정말이지 너무나 악랄해지는 못된 프로그램들 때문에 너무나 불안한 세상입니다.

    언제부턴가 일주일에 한번씩 루트킷 검사 프로그램으로 프로세스부터 포트,레지스트리 하나하나 체크 해보질 않으면 불안하더라구요..

  2. Blog Icon
    아리새의펜촉

    저도 윈도우즈 쓸 당시에는 매일매일 백신도 돌려보고 혹시 이상 없나 둘러보고... 가끔 내가 이게 뭐하는 짓일까 하는 생각도 들고 그러더라구요. 그만큼 세상이 무서워졌죠. 최근에는 온라인이고 오프라인이고 할것 없이 피싱, 바이러스 등등 무섭습니다.

  3. Blog Icon
    비밀방문자

    관리자만 볼 수 있는 댓글입니다.

  4. Blog Icon
    6l4ck3y3

    예, 조작이 가능합니다. dll도 어차피 txt 같은 파일에 불과할 뿐입니다. exe이던 dll이던 바이너리의 내용만 분석이 된다면 제한된 범위 내에서 조작이 가능합니다. 이런 조작을 fatch 라고 부릅니다.

    물론, 파일에 대해 쓰기 권한을 가지고 있어야 합니다만, 윈도우즈는 대체로 관리자 권한으로 인증이 되어 있기 때문에 별 문제가 되지 않습니다. 반대로 서버나 관리자 권한이 아닌 경우에는 어느 정도 제약이 있구요. 리눅스의 경우에는 바이너리 파일에 대한 조작이 꽤 큰 제약을 받습니다.