'실행파일'에 해당되는 글 3건

  1. 2010.01.06 IceSword을 이용한 루트킷 탐지 및 삭제
  2. 2009.12.28 MS IIS 파일 확장자 처리오류 취약점 주의 (1)
  3. 2009.07.04 Valgrind 디버깅과 프로파일링
2010. 1. 6. 10:54

IceSword을 이용한 루트킷 탐지 및 삭제

IceSword (루트킷 탐지∙삭제 프로그램)

 

숨겨진 프로세스나 서비스, 포트 등을 붉은색으로 표시해 루트킷의 존재를 알려주는 윈도우용 보안 툴 입니다. 일반 툴로는 볼 수 없는 루트킷 기법을 사용하는 파일이나 그 레지스트리를 볼 수 있게 해 사용자가 직접 이를 삭제할 수 있습니다. 루트킷 기법은 계속 발전하고 있기에 IceSword로는 모두 탐지할 수는 없으며 백신등과 다른 루트킷 탐지도구의 검사내용, Google검색 등을 통해 삭제내용을 신중히 결정하시기 바랍니다.

 

파일이나 레지스트리를 삭제할 때는 상당한 주의를 요합니다. 특히 SSDT(System Service Descriptor Table)항목의 경우에는 특히 주의를 해야 합니다. 보안프로그램도 kernel hook기법을 이용하기에 붉게 표시되었다고 모두 루트킷이 아닙니다.

(실제로 kav의 klif.sys, outpost의 filtnt.sys, daemon의 d347bus.sys도 붉게 표시됩니다.)

 

IceSword는 위에서 언급한 기능 외에도 Startup, BHO 등의 기능이 있어 일반적인 분석도구로도 사용이 가능합니다.

 

IceSword 보안툴의 경우 IceSword.exe, lsHelp.exe로 구성되며 IceSword.exe의 경우 영문판이 있지만 lsHelp.exe의 중문입니다.

 

IceSword.exe : 실행되고 있는 루트킷 및 백도어(바이러스)를 붉게 표시해주며 프로세스 및 실행파일 레지스트리 삭제가 가능합니다.

(실행되지 않는 루트킷 및 백도어(바이러스)는 붉은색으로 표시되지 않습니다.)

 

IsHelp.exe : IceSword.exe에서 검출된 루트킷 및 백도어(바이러스)의 위치를 검색할 수 있으며 삭제 기능은 제공되지 않습니다. 

(실행되지 않는 루트킷 및 백도어(바이러스)는 검색되지 않습니다.)

 

IceSword (제작자 홈페이지)

http://www.blogcn.com/user17/pjf/index.html

 

 

1) IceSword 실행방법

 

IceSword120_en.zip 파일 압축해제

IceSword 프로그램은 별도의 설치과정 없이 다운로드 받은 IceSword120_en.zip 파일 압축해제 후 IceSword.exe을 실행하시면 됩니다.

 

IceSword.exe 실행

  

Cooperator.zip 압축해제

IsHelp.exe는 압축 해제한 IceSword 폴더 내에 Cooperator.zip 파일의 압축을 풀면 Cooperator 디렉토리 내에 존재합니다.

 

IsHelp.exe 실행

lsHelp.exe는 IceSword.exe가 실행된 상태에서 실행됩니다.

  

2) IceSword 사용방법

 

해킹 서버를 이용한 루트킷 및 백도어 검출

용도 : DB서버

OS : 윈도우 2000서버

프로그램 : MSSQL 2000

해킹유형 : SQL Injection 취약성을 이용한 공격으로 administrator 권한을 획득 후 원격 접속을 이용한 루트킷 및 백도어 설치

 

IceSword.exe 실행

IceSword.exe를 실행시키고 process, services, port, startup, kernel module 등의 항목에 붉게 표시된 것이 있는지 확인합니다.

 

(보다 효율적으로 루트킷을 탐지하기 위해서는 IceSword.exe와 IsHelp.exe 등을 CD에 옮긴 후 CD상의 IceSword.exe를 실행합니다. 그 후 시작,실행, msconfig 치고 확인,시작프로그램, 아무 항목이나 체크,적용,닫기, 재부팅 여부를 물을 때 다시 시작 클릭 재부팅 후 CD에 있는 IceSword.exe를 실행시켜 검사하는 방법이 있습니다. 체크된 항목은 저절로 체크 해제됩니다.)

 

Process

hxdef.exe, wmimpmt.exe 프로세스가 붉게 표시되고 있는 화면입니다.

프로세스 종료 : [해당프로세스]-[마우스우측버튼]-[Terminate Process]

 

Win32 Services

Win32 Services에 존재하지 않는 WmiMpmt, Hender 서비스가 재부팅 시 자동시작 되도록 Services 목록에 설정되어있습니다.

서비스 중지 : [해당프로세스]-[마우스우측버튼]-[Disabled]

  

Port

wmimpmt.exe 프로세스의 포트를 검색 시 중국, 오스트레일리아 쪽 IP가 연결되어있음을 확인할 수 있습니다.

포트 리플레쉬 : [해당프로세스]-[마우스우측버튼]-[Refresh]

 

System Check 화면

히든프로세스로 wmimpmt.exe, hxdef.exe이 검출된 화면입니다.

  

⑥ 실행파일 경로검색

IceHelp.exe으로 붉게 표시된 프로세스 및 히든파일이 경로를 검색할 수 있지만 IceSword.exe에서도 경로가 검색됩니다.

 

[wmimpmt.exe]

경로 : C:\WINNT\system32\wmimpmt.exe

 

[wmimpmt.exe] – [등록정보]

ccproxy 의해 구동되는 프로세스임을 확인할 수 있습니다.

 

[hxdef.exe]

경로 : C:\WINNT\system32\hxdef.exe

  

Registry

루트킷이나 백도어가 설치된 경우는 유관상으로 확인 및 삭제할 수 없도록 레지스트리를 수정했을 가능성이 크므로 Registry 항목을 체크합니다.

 

내컴퓨터\HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services

 

[Hender]

레지스트리삭제 : [Hender]-[마우스우측버튼]-[Delete]

 

[WmiMpmt]

레지스트리삭제 : [WmiMpmt]-[마우스우측버튼]-[Delete]

 

3) IsHelp 사용방법

IceSword.exe을 이용하여 루트킷 및 백도어(바이러스)가 검출되었을 경우 IsHelp.exe을 이용하여 루트킷 및 백도어(바이러스) 재검출 및 경로탐색을 합니다.

 

IsHelp.exe의 Advancement module 부분에서 hxdef.exe, wmimpmt.exe가 검출되는 화면입니다.

[hxdef.exe]

 

[wmimpmt.exe]

  

② 루트킷 및 백도어(바이러스) 검색

로컬디스크상에 존재하는 루트킷 및 백도어(바이러스)로 의심되는 hwdef.exe,

wmimpmt.exe가 검출되는 화면입니다.

 

Registry 검색

IceSword.exe에서는 해당 경로를 직접 검색해야 하지만 IsHelp.exe 레지스트리 항목에서는 해당 경로가 자동 탐색되며, 삭제는 IceSword.exe의 Registry항목에서만 가능합니다.

 

내컴퓨터\HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services

 

[Hender]

 

[WmiMpmt]

 

④ 루트킷 및 백도어(바이러스) 경로검색

검출된 루트킷 및 백도어(바이러스)의 파일명을 이용하여 파일의 위치를 검색할 수 있습니다.

 

⑤ 위와같이 IceSword, IsHelp에서 루트킷 및 백도어(바이러스) 의심 프로세스가 검출되거나 특정 Port로 해외쪽 아이피가 연결되어 있고 System Check 목록에 히든파일이 검출될 때는 루트킷이나 백도어(바이러스) 의심을 해 야합니다. 백신검사 및 cport, RootkitRevealer 등의 프로그램으로  루트킷 존재여부를 다시 확인하여 삭제여부를 결정합니다. 위의경우 백신이나 cport, RootkitRevealer 는 검출되지 않는 부분이 있었으므로 해당 프로세스 및 파일, 레지스트리를 삭제할 때는 신중히 결정하셔야 합니다.

 

⑥ 만약 문제되는 프로세스가 explorer.exe, winlogon.exe, svchost.exe와 같은 윈도우의 정상프로세스라면 dll injection을 의심해 보아야 합니다. IsHelp.exe로 문제를 야기한 dll을 확정한 후 process explorer와 같은 프로그램으로 해당 프로세스를 정지(suspend)시킨 후 IceSword.exe로 해당 dll을 프로세스에서 제거(unload) 합니다. 그 후에 IceSword.exe의 file 항목에서 찾아 직접 삭제합니다. 정지시킨 프로세스는 process explorer로 다시시작 (resume)합니다.

process explorer에는 프로세스를 정지시키는 기능은 있지만 dll을 프로세스에서 제거하는 기능은 없고, IceSword.exe는 그 반대입니다. 문제되는 윈도우의 정상프로세스가 2개 이상이라면 프로세스가 서로 연동되어 있을 수 있으므로 해당 프로세스를 모두 정지시킨 후 위 설명에 따릅니다.

 

4) 루트킷 및 백도어(바이러스) 재검사

 

① 검출된 루트킷 및 백도어(바이러스) 프로세스 및 파일, 레지스트리를 모두 삭제 하셨다면 IceSword.exe, IsHelp.exe을 재 실행하여 루트킷 및 백도어(바이러스)의 검출을 재확인과 백신검사(안전모드), 계정, 로컬디스크보안, 패스워드변경, 윈도우업데이트, 포트차단등의 보안관련 설정을 확인합니다.


출처 : nextline.net


Trackback 0 Comment 0
2009. 12. 28. 16:47

MS IIS 파일 확장자 처리오류 취약점 주의

□ 개요
   o 마이크로소프트사의 IIS(Internet Information Service)에서 파일 확장자 처리오류로 인한
     보안우회 취약점이 발견됨[1,2,3]
   o 현재 해당 취약점에 대한 보안 업데이트가 발표되지 않았으며 IIS는 국내에서 많이 이용되기
     때문에 해당 서버 관리자는 보안 업데이트가 발표되기 전까지 주의를 요함

□ 영향을 받는 시스템
   o Microsoft Internet Information Services 6.x 이하의 모든 버전

□ 영향을 받지 않는 시스템
   o Microsoft Internet Information Services 7.5

□ 취약점 설명
   o 마이크로소프트의 IIS에서 세미콜론을 이용한 파일 확장자 처리오류를 통해 공격자는
     임의의 파일(웹쉘, Exploit 코드 및 각종 실행파일 등)을 실행할 수 있음 [1,2,3] 
     - 예를 들어 IIS는 "malicious.asp;.jpg" 파일을 ASP 파일로 처리하여 실행
     - 특히 대부분의 파일 업로드 보호 시스템은 파일의 마지막 확장자(JPG)만을 확인하여
       업로드하기 때문에 쉽게 업로드가 가능

□ 영향
   o 만약 상기 취약점을 이용하여 공격한 경우 공격자는 취약한 웹서버의 파일 업로드 기능을
     이용하여 웹쉘을 업로드 및 실행한 후 웹서버에 대한 완벽한 권한을 취할 수 있음
   o 또한 악의적인 파일을 업로드한 후 인터넷 사용자의 클릭을 유도하여 사용자 PC에 악성코드를
     감염시킬 수 있음

□ 임시 조치방법
   o 파일의 이름 및 확장자를 랜덤한 문자열로 치환하여 업로드 되도록 함 [3]
     ※ 사용자가 입력한 파일이름으로 업로드 되지 않도록 함
   o 업로드 파일 디렉토리에 대한 실행 권한을 해제 [3]
     ※ 설정방법 (Windows 2003 사용자 환경의 예)
      - “제어판 > 관리 도구 > 인터넷 정보 서비스(IIS) 관리”에서 업로드 폴더의 속성 클릭
      


      - “디렉터리 탭”의 “실행 권한”을 “없음”으로 설정
     

□ 용어 정리
   o IIS(Internet Information Service): 인터넷정보서비스라 불리며 마이크로소프트 윈도우즈를
     사용하는 서버들을 위한 인터넷 기반 서비스
   o ASP(Active Server Script): 마이크로소프트사에서 개발한 서버 측의 스크립팅 환경

□ 기타 문의사항
   o 보안업데이트는 언제 발표되나요?
     - MS의 공식 보안업데이트 일정은 발표되지 않음, 발표될 경우 KrCERT 홈페이지를 통해
       신속히 공지할 예정입니다
   o 한국인터넷진흥원 인터넷침해대응센터: 국번없이 118

□ 참고사이트
   [1] http://secunia.com/advisories/37831/ (Secunia)
   [2] http://www.vupen.com/english/advisories/2009/3634
   [3] http://soroush.secproject.com/downloadable/iis-semicolon-report.pdf

출처 : 인터넷침해대응센터


Trackback 1 Comment 1
  1. ice1435 2010.10.11 17:34 address edit & del reply

    좋은정보감사합니다.

2009. 7. 4. 20:00

Valgrind 디버깅과 프로파일링

1 개요

1.1 Valgrind란?

Valgrind는 Linux-x86 용 실행 파일의 디버깅과 프로파일링을 위한 오픈 소스 툴이다. Valgrind는 Memcheck이나 Addrcheck 툴을 사용하여 실행중인 프로그램에서 메모리 누출(leak)/오염(corruption)을 찾아낼 수 있다. 그 외의 Cachegrind, Helgrind 툴을 사용하여 캐쉬 프로파일링을 하거나, 멀티 쓰레드에서의 데이타 경쟁을 발견을 할 수 있다. 이 프로그램은 Julian Seward가 개발했다.

1.2 목적

이 문서는 간단한 Valgrind의 사용법을 설명한다. - 현재(1 Feb 2005)는 Memcheck 툴의 사용법에 관해서만 설명한다. - 더 자세한 내용을 알고 싶다면 [http]http://valgrind.kde.org/docs.html에서 Valgrind 관련 문서들을 볼 수 있다.

1.3 주의

현재(1 Feb 2005) Valgrind의 안정 버전은 2.2.0 이고, 버전 2.0.X와 2.2.X은 사용법이 다르다. 이 문서는 2.2.X 버전의 Valgrind의 사용법을 다룬다.

2 Valginrd 설치

2.1 Valgrind 소스 얻기

Valgrind의 소스는 Valgrind 홈페이지의 다운로드 페이지에서 받을 수 있다.
Valgrind 다운로드 페이지

2.2 설치

위의 페이지에서 bzip2 형식으로 압축된 압축 파일을 풀고, 설치한다.

    # tar xvjf valgrind-2.2.0.tar.bz2
    # cd valgrind-2.2.0
    # ./configure
    # make
    # make install

3 Valgrind 사용

3.1 Valginrd의 각 툴에 대해서

3.1.1 Memcheck

Valgrind의 Memcheck는 다음과 같은 경우를 발견하고 보고한다.
  • 초기화되지 않은 메모리의 사용
  • free된 메모리에 읽기/쓰기를 시도하는 경우
  • malloc된 메모리 블럭 외에 읽기/쓰기를 시도하는 경우
  • stack의 부적절한 지역에 읽기/쓰기가 시도되는 경우
  • 메모리 누출 - malloc되고 free되지 않은 메모리
  • 초기화되지 않거나 주소를 알 수 없는 메모리가 시스템 호출로 넘겨지는 경우
  • memcpy()와 관련된 함수에서 src와 dst 포인터가 겹치는 경우
  • 몇 가지의 POSIX pthreads API의 잘못된 사용

3.1.2 Addrcheck

Addrcheck는 Memcheck의 가벼운 버전이다.

3.1.3 Cachegrind

Cachegrind는 프로그램의 캐시 프로파일링을 한다.

3.1.4 Helgrind

Helgrind는 멀티스레드 프로그램에서 데이터의 경쟁 상태를 발견한다.

3.1.5 그 밖의 툴

위에서 설명된 툴의 보다 자세한 설명이나 그 외의 툴들에 관한 설명은 [http]Valgrind 2.2.0 매뉴얼(http://developer.kde.org/~sewardj/docs-2.2.0/manual.html)을 참조한다.

3.2 Valgind 사용

3.2.1 Valgrind 실행

Valgrind는 아래의 usage와 같이 valgrind 이후에 쓰고 싶은 tool의 이름을 쓰고 마지막에 디버깅이나 프로파일링을 할 프로그램과 인자를 쓰면 된다. 자세한 것은 'valgrind --help'로 볼 수 있다.

    usage: valgrind --tool=<toolname> [options] prog-and-args
예) 다음과 같이 'ps'의 메모리 사용을 체크할 수 있다.

    # valgrind --tool=memcheck ps -ax

3.2.2 Valgrind의 Memcheck 사용 예

예제 1

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int p, t;
    char * pc;

    if (p == 5) {       /* 초기화되지 않은 메모리의 사용 */
        t = p + 1;
    }

    printf("%d is not initialized\n", p); /* 초기화되지 않은 메모리의 사용 */

    pc = (char *)malloc(sizeof(char) * 10);

    /* pc가 free되지 않음 */

    return 0;
}
위와 같은 예제를 Valgrind를 사용하여 실행하면 다음과 같은 결과가 나온다. 에러 리포트 설명은 주석(';'으로 시작하는 문장)으로 달았다.
# valgrind --tool=memcheck ./a.out
==27949== Memcheck, a memory error detector for x86-linux.
==27949== Copyright (C) 2002-2004, and GNU GPL'd, by Julian Seward et al.
==27949== Using valgrind-2.2.0, a program supervision framework for x86-linux.
==27949== Copyright (C) 2000-2004, and GNU GPL'd, by Julian Seward et al.
==27949== For more details, rerun with: -v

; 앞의 '==26306=='은 프로세스 ID를 뜻한다.

==27949==
==27949== Conditional jump or move depends on uninitialised value(s)
==27949==    at 0x804844A: main (in /home/deicide/play/a.out)
==27949==

; 위의 에러는 main 함수에서 if (p == 5) {...} 에서
; p가 초기화 되지 않았음을 나타낸다.

==27949== Use of uninitialised value of size 4
==27949==    at 0x1B967329: _IO_vfprintf (in /lib/libc-2.2.4.so)
==27949==    by 0x1B96FC11: _IO_printf (printf.c:33)
==27949==    by 0x8048463: main (in /home/deicide/play/a.out)
==27949==
==27949== Conditional jump or move depends on uninitialised value(s)
==27949==    at 0x1B966C2C: _IO_vfprintf (in /lib/libc-2.2.4.so)
==27949==    by 0x1B96FC11: _IO_printf (printf.c:33)
==27949==    by 0x8048463: main (in /home/deicide/play/a.out)
==27949==
==27949== Conditional jump or move depends on uninitialised value(s)
==27949==    at 0x1B966E93: _IO_vfprintf (in /lib/libc-2.2.4.so)
==27949==    by 0x1B96FC11: _IO_printf (printf.c:33)
==27949==    by 0x8048463: main (in /home/deicide/play/a.out)
==27949==
==27949== Conditional jump or move depends on uninitialised value(s)
==27949==    at 0x1B966EB4: _IO_vfprintf (in /lib/libc-2.2.4.so)
==27949==    by 0x1B96FC11: _IO_printf (printf.c:33)
==27949==    by 0x8048463: main (in /home/deicide/play/a.out)
==27949==
==27949== Conditional jump or move depends on uninitialised value(s)
==27949==    at 0x1B966ED5: _IO_vfprintf (in /lib/libc-2.2.4.so)
==27949==    by 0x1B96FC11: _IO_printf (printf.c:33)
==27949==    by 0x8048463: main (in /home/deicide/play/a.out)
==27949==
==27949== Conditional jump or move depends on uninitialised value(s)
==27949==    at 0x1B966F12: _IO_vfprintf (in /lib/libc-2.2.4.so)
==27949==    by 0x1B96FC11: _IO_printf (printf.c:33)
==27949==    by 0x8048463: main (in /home/deicide/play/a.out)
134518296 is not initialized

; 위의 에러들은 printf("%d is not initialized\n", p); 에서 
; p가 초기화 되지 않았음으로 나타나는 에러들이다.

==27949==
==27949== ERROR SUMMARY: 15 errors from 7 contexts (suppressed: 19 from 2)
==27949== malloc/free: in use at exit: 10 bytes in 1 blocks.
==27949== malloc/free: 1 allocs, 0 frees, 10 bytes allocated.

; malloc/free 된 block의 상태를 보고한다.
; 10bytes가 malloc되고 free가 없었음을 알 수 있다.

==27949== For a detailed leak analysis,  rerun with: --leak-check=yes
==27949== For counts of detected errors, rerun with: -v

; 메모리 누출의 자세한 보고를 위해서 --leak-chcek=yes 옵션을 줄 수 있다
옵션으로 '--leak-check=yes'를 줄 경우 아래와 같이 메모리 누출에 대한 자세한 보고를 볼 수 있다. 아래는 동일한 Sample을 '--leak-check=yes' 옵션을 줘서 실행한 결과의 메모리 누출 결과 부분이다. 각각의 definitely leak, possibly lost, still reachable, suppressed가 뜻하는 것은 [http]Valgrind FAQ(http://valgrind.kde.org/faq.html)의 6.2 항목에 자세히 나와있다.
# valgrind --tool=memcheck --leak-check=yes ./a.out

...

==24404== ERROR SUMMARY: 15 errors from 7 contexts (suppressed: 19 from 2)
==24404== malloc/free: in use at exit: 10 bytes in 1 blocks.
==24404== malloc/free: 1 allocs, 0 frees, 10 bytes allocated.
==24404== For counts of detected errors, rerun with: -v
==24404== searching for pointers to 1 not-freed blocks.
==24404== checked 1411896 bytes.
==24404==
==24404==
==24404== 10 bytes in 1 blocks are definitely lost in loss record 1 of 1
==24404==    at 0x1B903E85: malloc (vg_replace_malloc.c:131)
==24404==    by 0x8048470: main (in /home/deicide/play/a.out)
==24404==
==24404== LEAK SUMMARY:
==24404==    definitely lost: 10 bytes in 1 blocks.
==24404==    possibly lost:   0 bytes in 0 blocks.
==24404==    still reachable: 0 bytes in 0 blocks.
==24404==         suppressed: 0 bytes in 0 blocks.
==24404== Reachable blocks (those to which a pointer was found) are not shown.
==24404== To see them, rerun with: --show-reachable=yes
다른 툴이나 옵션에 대해서는 [http]Valgrind full documentation(http://developer.kde.org/~sewardj/docs-2.2.0/manual.html)을 참조한다.

4 참조


출처 : http://bibreen.cafe24.com/


Trackback 0 Comment 0