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

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

Similar Posts

  • 해킹 경험담 1st & 2차 해킹 주의

    제가 고1 일 때 알고 지내던 해커 한 명이 있었습니다. 컴퓨터에 대해 모르는 게 있으면 그 해커에게 물어보곤 했죠. 그러다 어느 날 궁금한 게 생긴 겁니다. 과연 이 사람은 나에 대해서 얼마나 알 수 있을까? 하고 말이죠. IRC에서만 얘기를 나누었기에 서로 간의 이름조차 모르던 사이였거든요. 그래서 그 해커에게 물어봤죠. 나에 대해 해킹할 수 있냐고… 그…

  • 우분투용 해킹 & 분석 도구 모음

    리눅스에서는 해킹 & 분석용으로 많은 도구들이 있습니다. 그리고 다들 강력하죠. 그런데 리눅스는 배포 버전이 다양해서 일일이 소스를 컴파일 해주어야 합니다. 그리고 의존성에 걸리거나 약간의 다른 환경 문제 때문에 컴파일이 안 되거나 실행이 안 되는 경우가 있죠. 도구모음 :: http://archive.offensive-security.com/ 위 링크를 따라 가시면 많은 deb 패키지들이 있습니다. 우분투용 해킹 & 분석 도구들이죠. 컴파일하기 살짝 까다로웠던…

  • OpenSSH 제로데이 익스플로잇, 속지 마세요.

    인터넷에 OpenSSH의 제로데이 익스플로잇이라고 소개하며 떠도는 소스파일이 있습니다 openssh0day.c 인데요. 저는 버그트럭에서 Justin Kim 님이 올리신 글 덕분에 이게 가짜란 것을 알았습니다. 시험삼아 버추어박스로 페도라를 띄운 후 컴파일해서 실행 해봤는데요. /home 폴더 아래의 모든 데이터를 날리더군요. 정말 어처구니가 없는 녀석이었습니다. 아래는 openssh0day.c 안의 쉘코드 내용입니다. 실제로는 아스키 문자로 되어 있는 것을 printf() 함수로 출력하였습니다. 보시다시피…

  • CVE-2010-3970. Windows Thumbnail 취약점 데모영상

    작년 11월 Moti, Xu Hao의 POC 발표 이후로도 꽤 잠잠했던 Windows의 Thumbnail 취약점이 최근 이슈[^1]가 되었습니다. 그런데 발표가 있은 지 두 달이 다 되어가는데도 MS에서는 아직 패치를 안 내놓고 있네요. 아래 영상은 가상의 시나리오를 정한 후, Metasploit을 이용하여 원격제어 해킹을 하는 것을 녹화한 것입니다. HAURI의 분석자료[^2]가 상세하기 때문에 취약점에 대한 설명은 생략하겠습니다. Thumbnail 취약점이 Windows의…

  • Hackarmy 백도어, IRC 봇넷에서 테스트

    백도어 분석하면서 IRC 서버 세팅해서 테스트해봤습니다. 아직 사용법이 익숙하지 않아서 기본적인 명령어 밖에는 할 줄 모르겠네요. [그림 1] IRC 봇넷 채널에서 명령을 내림 블랙햇은 IRC 채널에서 대기하고 있습니다. 혹은 원하는 시간에 접속을 하면 감염된 좀비들이 기다리고 있겠죠. 테스트라서 좀비는 하나 뿐이었습니다. “!morris tounge” 는 “내가 네 주인이다.”라고 알리는 주문입니다. 처음에 접속해서 이 주문을 안 외치면…

  • Brute Forcing with DLL Injection

    Articles에 문서를 업데이트 했습니다. 작년 10월, 2009 하반기 KUCIS 영남권 정보보호 세미나에서 발표했던 주제입니다. DLL Injection 기법을 이용한 무차별 대입 공격으로 패스워드를 찾아 보았습니다. 소스를 포함하여 문서를 정리할까 했는데, 악용될 소지가 있어서 발표했던 자료만 공개합니다. 당시에 발표했던 내용보다 조금 보완된 부분이 있습니다. 3개월째인 오늘까지도 이 방법을 어디에 써 먹을 수 있을지 못 찾고 있습니다. 간혹…

0 Comments

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

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

  2. 검색하다가 들어오게 되었는데요~
    제가 이쪽 분야에 관심이 생겨서 몇일전부터 관련 서적을 보면서
    공부중이거든요..
    이제 걸음마를 떼어서 궁금한게 많은데..
    질문이 하나 있는데요~
    DLL을 그렇다면 조작이 가능한건가요?
    어떤 프로그램의 dll을 개인이 수정이 가능한지요?

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

  4. 정말이지 너무나 악랄해지는 못된 프로그램들 때문에 너무나 불안한 세상입니다.

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

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다