안녕하세요~ Message 입니다. 오늘은~

<실전 악성코드와 멀웨어 분석> 책의 실습 문제 3-2 을 분석해보고자 합니다.

분석환경은 동일하게  Windows XP / Vmware 9.0.3 build 입니다.

 

1. 악성코드가 설치된 방법

분석할 파일은 Lab03-02.dll 입니다. 실행파일이 아닌 DLL이 어떻게 설치되었을까요?

일단 주어진 유일한 파일이 DLL파일이니, 분석해보면 답이 나올 것 같습니다.

DWalker로 어떤 Export 함수가 있는지 확인해볼까요.

우리가 알아내야 하는 [어떻게 설치가 되었는가]에 대한 실마리가 보입니다.

바로 Install과 installA 두개의 함수인데요(대소문자주의),

installA 함수를 살펴보니 별다른 기능은 없이 Install 함수를 호출하는군요.(아래 스샷 참고)

따라서 CMD창에서 아래와같이 입력해주면 설치가 되는데요(Rundll32.exe를 이용하여 설치하는 방법은 교재에 나와있습니다.)

대소문자 주의해주세요.(installA 맨앞에 i가 소문자임)

아, 그리고 실행하기 전에 RegShot, ProcMon, SystemExplorer, WinAlysis와 같은 스냅샷 기능의 툴을 실행시켜줍니다.

이렇게해서 악성코드가 설치가 되었습니다. 다음으로 슝슝~

 

2 . 설치후 실행방법과 동작 프로세스

어떻게 실행이 되는지 알아봅시다. 설치전에 시켜놓은 스냅샷을 비교해볼까요?

아래 스샷은 SystemExplorer를 이용하여 스냅샷을 비교한 내용인데요,

스냅샷을 비교해보니 HKLM 하이브(루트키) 내부의 Service 레지스트리 키값 아래로 

폴더모양의 IPRIP 레지스트리 키(Key)가 새로 생성되었고

IPRIP 키 안에 10개의 값들이 추가된것을 확인할 수 있었습니다.

아마도 실행시키면 레지스트리 서비스(IPRIP) 내부에 본인을 설치하는 악성코드인 모양입니다.

그런데 왜 악성코드는 레지스트리 서비스에 본인을 설치했을까요?

그것에 대한 힌트는 ImagePath 값에 있는 "svchost.exe -k netsvcs" 부분입니다.(아래 svchost.exe 세부내용 참조)

 

[svchost.exe에 대하여...]

우리가 흔히 보았던 svchost.exe 프로그램은 윈도우즈 서비스를 백그라운드로 구동하는 프로세스입니다.

원래 윈도우즈 서비스는  WinLogon.exe가 호출하는 Services.exe(SCM:서비스제어관리자)에 의해 관리되지만

예외적으로 DLL 기반의 서비스는 svchost.exe에 의해 관리됩니다.

(우리가 실습중인 악성코드는 DLL 기반이기 때문에 svchost에 의해 실행되겠네요 ^^) 

svchost.exe는 윈도우 부팅시 윈도우 레지스트리의 Service항목을 검색하여 목록을 만듭니다.

HKLM\System\CurrentControlSet\Services 내부에 등록된 서비스에서 Parameters 키 내부에 ServiceDLL값이

들어 있는 서비스들을 묶어 실행시킬 목록을 형성합니다. 이해가 안간다면 우리가 분석중인 악성코드를 통해 이해해봅시다.

아니나 다를까, IPRIP 서비스이름 아래 Parameters 키가 뙇!! 그 안에 ServiceDll이 뙇!!

따라서 이 악성코드는 이제 svchost.exe가 자동으로 실행시켜주는 서비스 기반의 악성코드로 판별이 되었습니다.

재부팅후 ProcessExplorer 메뉴탭에서 [Find] - [Find Handle or DLL] 기능을 이용하여 Lab03-02.dll을 검색하면

svchost.exe가 로드하여 사용하고 있음을 볼 수 있습니다.

(교재에서는 재부팅을 하지 않기 위해 CMD 에서 서비스를 구동할 수 있는 net 명령어로 실행시킵니다 : net start IPRIP)

 

[조금더..분석 - 정적분석]

우리가 분석중인 악성코드의 경우 서비스에 등록이 되어 시스템으로부터 호출이 되는 형식으로 분석이 되었는데요,

그렇다면 우리가 설치하기 위해 사용했던 InstallA 함수 이외에, 운영체제가 접근하는 콜백함수가 있어야합니다.

( *콜백함수 : 호출되는 함수를 알려주어 특정 이벤트 발생시 모듈이나 OS 등에서 함수를 호출할 수 있도록 하는 방법)

DLL을 이용하여 서비스에 등록을 하기 위해서는 main()에서 서비스 관리를 위한 ServiceMain()을 콜백으로 등록해야합니다.

우리 악성코드는 어떻게 등록되어 있을까요? 아래 스샷을 참조해봅시다.

 

 

 

3. 호스트기반 표시자 및 정보를 수집하는 ProcMon을 사용하기 위해 사용한 필터

악성코드를 실행하기 전 ProcMon을 실행시켜 놓았다면 ProcessExplorer에서 수집한 PID를 이용하여

필터를 적용할 수 있습니다.  위에서는 재부팅을 통하여 svchost가 악성코드를 실행시키는것을 관찰했지만

ProcMon을 통한 관찰을 위해 교재에서 사용한 CMD - net 명령어를 이용하겠습니다.

실행이 되면 아래와 같이 우리가 레지스트리 편집기에서 발견하였던 익숙한 텍스트가 우리를 반겨줍니다 (ㅋㅋ)

이후에 ProcessExplorer를 이용하여 알아낸 PID를 ProcMon 필터에 적용해줍니다.(PID는 시스템 or 재부팅시 다를 수 있음.)

 

5. 악성코드에서 유용한 네트워크 기반 시그니처

ApateDNS를 이용하면 아래와 같이 악성코드의 DNS 요청을 확인할 수 있습니다.

또한 NetCat을 이용하여 아래와 같은 네트워크 시그니처를 관찰할 수 있습니다.

 

posted by Red_Message