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

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

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

  • PADOCON 2010 hand-ray 리버싱 풀이 2nd

    이번에는 두 번째 문제입니다. 이전 문제와 달리 약간의 프로그래밍 경험과 리버싱 경험이 필요했었구요. 핸드레이 리버싱인 만큼 컴퓨터를 비롯한 전자식 도구를 사용하지 않고 손(필기)으로 풀이하는 게 이 문제를 즐기는 포인트입니다. 한 마디로 요약하면, “삽질”을 해야 한다는 얘기죠? 문제 다음 프로그램에서 입력값이 j3m4I7w:_oYu?yjue 일때 출력값은 무엇인가? 일부로 주석을 지웠는지 모르겠지만, 같이 풀던 후배가 살짝 당황했던 문제입니다. 이…

  • InvokeClearTracks () at INETCPL.cpl in IE7

    Internet Explorer의 “검색 기록 삭제” 기능에 대해 조사할 일이 있어서 리버싱을 해보았습니다. 이 분석은 Windows XP SP3에서 IE7에 대하여 행하였습니다. INETCPL.cpl IE7에서 “검색 기록 삭제” 기능은 “도구 -> 인터넷 옵션 -> 일반” 탭에 있거나 “인터넷 등록 정보”에 있습니다. 다들 아시다시피 여기에서는 IE로 접속했던 웹사이트에서 내려받은 임시 파일, 쿠키나 히스토리(기록), 저장된 암호 등을 삭제할 수 있습니다….

  • Windows Kernelmode, Keyboard Independent Keylogger

    Articles에 문서를 업데이트 했습니다. 곧 입대할 CERT-IS의 에잇(?)스, REDBIT(@RED_BIT) 군의 번역문서입니다. “후킹을 통한 키로거 제작방법. 기존의 필터드라이버나 혹은 그와 유사한 버스드라이버 등을 이용했을 경우에 발생하는 키보드 레이아웃 차이에 따른 호환성 문제를 해결한 키로거 제작방법이다. 하지만 이러한 방식은 안티키로거와 같은 프로그램의 특이성 때문에 실생활에서 인터넷뱅킹의 키 입력을 가로챌 수는 없겠지만, 추가적인 방법으로 충분히 데이터를 훔쳐낼 수…

  • Brute Forcing with DLL Injection

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

  • 러시아에서 발생한 전광판 해킹, 그리고 SCADA 해킹

    [그림 1]  “헉! 모스크바 도심 전광판에 ‘포르노’” 에서 발췌 며칠 전에 러시아에서 전광판이 해킹당한 사건이 발생했다고 합니다. 새 해 첫 날부터 시끌법적하더니 또 한 번 헤프닝이네요. 기사를 보고 그냥 웃고 넘어갈 수 있는 일이지만, 몇 달 전에 들었던 “국가보안기술연구소”의 세미나가 생각이 나서 조금 우려가 됩니다. 세미나 주제는 SCADA 보안이었습니다. SCADA는 정보, 전력, 교통, 가스 등을…

0 Comments

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

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

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

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

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

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

답글 남기기

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