태그 보관물: 프로세스분석

악성코드 프로세스 분석 사례

프로세스 분석을 통해 악성코드를 식별한 사례를 살펴 보자.

백도어 통신이 확인되었고, 통신 연결에 사용된 백도어 프로그램을 찾기 위해 프로세스 점검을 수행 하였다.

악성코드에 감염된 프로세스를 찾기 위해 프로세스 점검을 진행 하였다. 프로세스 중 시스템 부팅 시간과 차이가 발생하는 프로세스를 확인했다. 프로세스 이름은 ‘svchost’ 이고 프로세스 번호는 836번으로 확인됐다.

C:\WINDOWS\System32\svchost.exe [836]
C:\WINDOWS\System32\svchost.exe -k netsvcs

윈도우에서 svchost 프로세스는 시스템 프로세스다. 윈도우의 여러 서비스를 관리하는 프로세스다. 대부분 윈도우 부팅 시 프로세스가가 올라오기 때문에 부팅 시간과 차이가 나지 않는다. 하지만 중간에 실행된 경우 시간 차이가 발생한다.

프로세스 점검을 통해 의심스러운 프로세스를 확인 하였다. 프로세스 번호가 836번인 프로세스가 악성코드에 감염된 것으로 의심 되었고, 이를 확인하게 상세한 분석작업을 진행 했다.

836 프로세스에서 사용중인 파일을 점검 했다. 다음은 836번 프로세스에서 사용하던 파일 목록 이다.

svchost.exe pid: 836 NT AUTHORITY\SYSTEM
18: File (RW-) C:\WINDOWS\system32
1C4: Section \RPC Control\DSEC344
224: File (RW-) C:\WINDOWS\WinSxS\x86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_5.82.3790.3959_x-ww_78FCF8D0
23C: File (RW-) C:\WINDOWS\WinSxS\x86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_6.0.3790.3959_x-ww_D8713E55
244: File (RW-) C:\WINDOWS\WinSxS\x86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_6.0.3790.3959_x-ww_D8713E55
250: File (RW-) C:\WINDOWS\WinSxS\x86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_6.0.3790.3959_x-ww_D8713E55
280: File (RW-) C:\WINDOWS\WinSxS\x86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_6.0.3790.3959_x-ww_D8713E55
2F0: File (R–) C:\WINDOWS\Registration\R00000000000a.clb
360: File (R–) C:\WINDOWS\Tasks\SchedLgU.Txt
3A0: File (R–) C:\WINDOWS\system32\kbd101a.dll
3A8: File (R–) C:\WINDOWS\system32\kbd103.dll
418: File (RWD) C:\WINDOWS\Tasks
464: Section \BaseNamedObjects\mmGlobalPnpInfo
56C: File (RWD) C:\WINDOWS\PCHealth\HelpCtr\BATCH
5D0: File (RW-) C:\WINDOWS\WinSxS\x86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_6.0.3790.3959_x-ww_D8713E55
830: File (RW-) C:\WINDOWS\WinSxS\x86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_6.0.3790.3959_x-ww_D8713E55
874: File (RWD) E:\$Extend\$ObjId
87C: Section \BaseNamedObjects\SENS Information Cache
8C8: File (—) E:
928: File (RWD) C:\WINDOWS\system32\wbem\mof
988: File (R–) C:\WINDOWS\system32\tcpipt.dll
A6C: File (R–) E:\System Volume Information\tracking.log
AF4: File (R–) C:\WINDOWS\system32\wbem\Repository\FS\MAPPING1.MAP
AF8: File (R–) C:\WINDOWS\system32\wbem\Repository\FS\MAPPING2.MAP
AFC: File (R–) C:\WINDOWS\system32\wbem\Repository\FS\MAPPING.VER
B00: File (R–) C:\WINDOWS\system32\wbem\Repository\FS\OBJECTS.DATA
B04: File (R–) C:\WINDOWS\system32\wbem\Repository\FS\INDEX.BTR
B20: Section \BaseNamedObjects\Wmi Provider Sub System Counters
C6C: Section \BaseNamedObjects\Debug.Memory.344

동적 링크 라이브러리(DLL) 파일 중 의심스러운 파일이 확인 되었다. 파일명은 ‘tcpipt.dll’ 이다.

svchost.exe pid: 836 NT AUTHORITY\SYSTEM
18: File (RW-) C:\WINDOWS\system32
…..중략…..
988: File (R–) C:\WINDOWS\system32\tcpipt.dll
C6C: Section \BaseNamedObjects\Debug.Memory.344

‘system32’ 폴더에는 ‘tcpipt.dll’ 파일이 존재 하지 않는다. DLL 파일에 대해 좀더 확인하기 위해 추가 분석을 수행 하였다.

어떤 목적으로 프로세스에 로드되었는지 확인해야 한다. 그러기 위해서는 해당 코드가 어떤 기능을 하는지 확인해야 하는데 이는 코드상의 API 사용내역을 통해 대략적으로 확인할 수 있다. PEiD 프로그램을 이용해 API를 확인 할 수 있다.

그림 PEiD 실행

사용중인 API는 사용자 계정을 컨트롤 하거나 FTP통신에 필요한 API, 레지스트리 수정에 필요한 API 등이 확인 되었다.

API 이름용도
NetUserDel사용자 삭제
SHFileOperationA파일 시스템 오브젝트 복사 파일 시스템 오브젝트 이동 파일 시스템 오브젝트 이름변경 파일 시스템 오브젝트 삭제
SHDeleteKeyA레지스트리 값 삭제
FtpOpenFileAFTP를 통해 파일 open
표 API 용도

사용된 API를 통해 기능을 유추해 보면 사용자 컨트롤이 가능하고, 레지스트리와 파일에 대한 제어 그리고 FTP 통신으로 데이터 전송이 가능하다.

여기까지만 봐도 전형적인 백도어 프로그램들이 제공하는 기능이다. 백도어 파일이 확실시 되고 좀더 정확한 시그니처를 찾기 위해 문자열을 확인 해보자.

많은 수의 악성코드가 파일명만 바꿔 사용하기 때문에 파일에서 악성코드를 확인할 수 있는 특징을 찾아낼 경우 해당 파일의 기능에 대해 좀더 정확히 파악할 수 있다. 주로 확인되는 정보는 프로그램 정보, 제작자 정보, 공격대상, C&C 서버 IP 등을 확인 할 수 있다.

문자열 추출은 ‘Bin Text’ 라는 프로그램을 이용해 확인할 수 있다. 문자열 추출 과정은 악성코드에 하드코딩 형태로 입력된 값을 확인한다.

tcpipt.dll 파일에 포함된 문자열 검색에서 ZXSHELL 구문이 확인 되었다. ZXSHELL은 중국에서 제작된 백도어 프로그램으로 C&C및 원격터미널 등 다양한 기능을 제공하는 툴이다.

그림 문자열 검색

분석 결과 공격자는 ZXSHELL 파일을 시스템에 실행 시켰다. 감염된 프로세스를 이용해 중국 IP를 사용하는 공격자와 통신을 연결 하고 감염 시스템 정보를 전송 하였다. 다음은 백도어 파일이 전송한 피해 시스템의 운영체제 정보다. 윈도우 버전 정보와 시스템 IP 정보, CPU 및 메모리 용량 정보를 전송했다.

0000 52 54 00 12 35 02 08 00 27 7c d0 b5 08 00 45 00 RT..5…’|….E.
0010 00 78 b5 ba 40 00 80 06 bb 98 0a 00 02 0f 3d bf .x..@………=.
0020 3f 5f 05 20 1e 61 51 b6 95 cf 2b 8d 6a 22 50 18 ?_. .aQ…+.j”P.
0030 fa d0 48 0e 00 00 77 69 6e 78 70 2d 76 62 6f 78 ..H…winxp-vbox
0040 40 4e 4f 4e 45 2d 57 69 6e 58 50 40 31 30 2e 30 @NONE-WinXP@10.0
0050 2e 32 2e 31 35 20 4f 53 3a 20 57 69 6e 58 50 20 .2.15 OS: WinXP
0060 50 72 6f 20 53 50 32 2e 30 28 32 36 30 30 29 20 Pro SP2.0(2600)
0070 43 50 55 3a 31 38 32 38 20 4d 48 7a 2c 52 41 4d CPU:1828 MHz,RAM
0080 3a 35 31 31 4d 42 :511MB

공격자가 시스템 리소스 정보까지 수집하는 이유는 대규모 서비스 거부 공격(DDoS)을 수행할 때 시스템 사양이 높은 좀비 PC를 활용하기 위해서다.

프로세스와 포트

Cport[1] 프로그램을 이용해 프로세스별 포트 정보를 점검 한다. GUI기반 프로그램으로 포트와 프로세스 정보를 매핑하여 사용자에게 보여주는 툴이다.

IP정보, 포트정보, 프로세스 정보, 파일 정보, 사용자 정보를 한 화면에서 보여 주기 때문에 종합적으로 분석 할 때 유용하게 사용 할 수 있다.

GUI기반이지만 옵션을 이용해 텍스트로 정보를 추출할 수 있기 때문에 스크립트를 이용해 점검도 가능하다. 사용은 다음과 같이 사용 가능하다.

cports /stext > port_process_result.txt

다음이 툴을 실행시킨 결과 일부다. 점검한 프로세스 이름(mstsc.exe)과 해당 프로세스가 사용하고 있는 실행 파일과 IP, Port 정보 등을 추출한다.

Process Name : mstsc.exe
Process ID : 5704
Protocol : TCP
Local Port : 2009
Local Port Name :
Local Address : XXX.XXX.XXX.XXX
Remote Port : 3389
Remote Port Name :
Remote Address : XXX.XXX.XXX.XXX
Remote Host Name :
State : Established
Process Path : C:\WINDOWS\system32\mstsc.exe
Product Name : Microsoft® Windows® Operating System
File Description : Remote Desktop Connection
File Version : 6.0.6001.18000 (longhorn_rtm.080118-1840)
Company : Microsoft Corporation
Process Created On: 2023-10-05 오전 10:41:25
User Name : SONG\BigRoot
Process Services :
Process Attributes: A

추출한 정보는 악성코드로 의심되는 프로세스가 외부 공격자와 통신을 시도하는지 혹은 의도하지 않은 트래픽을 발생시키는지 확인하기 위해서 사용 된다.

리눅스에서는 ‘netstat’ 명령에 p옵션을 이용해 확인 할 수 있다.

그림 프로세스 실행 명령 확인

실행 파일에 대한 자세한 정보는 ‘ps’ 명령을 실행해 확인 할 수 있다.

$ ps -f -p 1761
UID PID PPID C STIME TTY TIME CMD
root 1761 1 0 May10 ? 00:00:00 /usr/sbin/apache2 -k start
$ pstree -p 1761
apache2(1761)€р”€apache2(2322)
œ€apache2(2323)
œ€apache2(2324)
œ€apache2(2325)
”€apache2(2326)
$ ps -f -p 2326
UID PID PPID C STIME TTY TIME CMD
www-data 2326 1761 0 May10 ? 00:00:00 /usr/sbin/apache2 -k start

로그온 세션 정보

윈도우 시스템의 경우 ‘logonsessions.exe’ 명령을 이용해 로그인한 사용자의 프로세스 정보를 확인할 수 있다. 역시 sysitnernals 패키지에 포함된다. SID 정보, 로그온 대상 시스템 정보, 현재 사용중인 프로세스 정보 등을 확인 할 수 있다.

실행은 logonsessions.exe 실행 시 p옵션을 이용해 확인 가능하고 출력되는 형태는 다음과 같다.

[root@C:\]#logonsessions.exe /p …. [6] Logon session 00000000:00037cf2:     User name:    [root@C:]#logonsessions.exe /p
….
[6] Logon session 00000000:00037cf2:
User name: SONG\BigRoot
Auth package: NTLM
Logon type: Interactive
Session: 0
Sid: S-1-5-21-1343024091-1035525444-839522115-1003
Logon time: 2010-02-15 Logon server: SONG
DNS Domain:
UPN:
3932: C:\WINDOWS\Explorer.EXE
2852: C:\WINDOWS\system32\ctfmon.exe
2840: C:\Program Files\Analog Devices\Core\smax4pnp.exe
2848: C:\Program Files\AhnLab\Smart Update Utility\AhnSD.exe
1516: C:\PROGRA~1\COMMON~1\AhnLab\ACA\ACASP.exe

마지막 로그온 정보

윈도우 시스템에서 로그인한 정보를 수집한다. 이는 침해사고가 발생한 경우 시스템에 로그인한 시점을 확인해 침해사고 타임 테이블을 작성 합니다.

그림 ntlast 명령 실행

타임 테이블은 사건의 앞 뒤를 파악하고, 일련의 시간 흐름에 따라 일어난 현상을 정리하는 것으로 침해사고분석시 매우 중요한 자료가 된다. 침해사고분석 시 가장 먼저 할 것도 최초 침해사고가 발생한 시점, 즉 기준 시간을 확인하는 일이다. 기준 시작이 확인되면 해당 시간을 기준으로 시간 순서에 따라 이전에 어떤 행위가 발생했고, 이 후 어떤 일이 있었는지 확인해 타임테이블을 작성한다.


[1] https://www.nirsoft.net/utils/cports.html

프로세스를 실행시킨 명령어

전체 프로세스에 대한 확인 과정이 대략적으로 끝나면 확인된 프로세스 중 의심이 되는 프로세스에 대해 세부적인 조사가 필요할 것이다. 이번에 살펴볼 내용은 의심이 가거나 확인이 필요한 프로세스에 대해 어떤 명령에 의해 프로세스가 실행 되었는지 확인하는 방법이다.

각각의 프로세스를 실행시킨 명령어 확인은 중요 하다. 이는 명령어 확인을 통해 악성코드가 설치된 위치나 시스템 파일의 감염 여부를 확인 할 수 있는 중요한 단서가 되기 때문이다.

리눅스는 ps명령을 이용해 확인 가능하다. 악의적인 프로세스를 확인한 경우 해당 프로세스가 어떤 명령으로 실행 되었는지 볼 수 있다.

–axu 옵션을 이용하면 현재 점유중인 메모리 정보와 CPU정보를 확인할 수 있다.

그림 프로세스를 실행시킨 명령어

–axu 옵션을 이용하면 현재 점유중인 메모리 정보와 CPU정보를 확인할 수 있다.

프로세스에서 사용하는 파일

앞서 프로세스를 실행 시킨 명령어를 확인하는 방법을 살펴 보았다. 이번에는 실행 파일 외에도 프로세스에서 사용하고 있는 파일을 확인해보자. 윈도우 시스템의 경우 주로 프로세스에서 사용하고 있는 DLL파일을 점검하게 된다. 윈도우 악성코드의 경우 DLL파일을 이용해 구동중인 프로세스를 감염시키기도 한다. 점검은 ‘handle.exe’ 명령을 이용한다. Sysinternals 패키지에 포함된다.

그림 handle 실행

프로그램을 실행 시키면 앞의 그림과 같이 프로세스에서 사용중일 파일들을 확인 할 수 있고, 프로세스가 사용하는 개체 정보와 접근(읽기R, 쓰기W, 삭제D) 정보가 나타난다. 관련 옵션은 “handle -?” 명령을 이용해 확인하자.

프로세스 점검 과정을 통해 의심스러운 프로세스 목록을 확보 하고 프로세스가 사용하는 실행파일 경로를 확인한다. 확인된 실행 파일이 악성코드인지 분석한다.

윈도우 프로세스에서 사용하는 객체는 File 외에도 여러 가지가 있다. 윈도우 개체 종류는 다음 표를 참고 하기 바란다. (자료참고: Microsoft Windows Internals)

개체 종류설명
Symbolic linkA mechanism for referring to an object name indirectly
processThe virtual address space and control information necessary for the execution of a set of thread objects.
ThreadAn executable entity within a process.
jobA collection of process manageable as a single entity through the job.
sectionA region of shared memory (known as a file mapping object in Windows).
FileAn instance of an opened file or an I/O device.
Access tokenThe security profile (security ID, user rights, and so on) of a process or a thread.
EventAn object with a persistent state (signaled or not signaled) that can be used for synchronization or notification.
SemaphoreA counter that provides a resource gate by allowing some maximum number of threads to access the resource protected by the semaphore.
Mutex*A synchronization mechanism used to serialize access to a resource.
TimerA mechanism to notify a thread when a fixed period of time elapses.
표 윈도우 개체 타입