[출처] http://viruslab.tistory.com/542
MS08-067로 유명한 Conficker 웜의 어원이라네요..
이 도메인 많이 봤었는데 말이죠..
한동안 상승 곡선을 그리며 올라가다가 요즘은 차단되서 안올라가고 있죠..
그때 도메인이 하나 더 있었는데...www.maxmind.com
요 도메인은 정상 서비스하는 사이트라 차단 못했었죠..
물론 trafficconverter.biz보다 질의량도 훨씬 적기도 했지만요..
프로세스 이름 | 설 명 | 소유자 |
csrss.exe | 이 프로세스는 Win32 하위 시스템의 사용자 모드 부분이다(Win32.sys는 커널 모드 부분임). Csrss는 클라이언트/서버 런타임 하위 시스템(Client/Server Run-time Subsystem)을 나타내며 항상 실행되어야 하는 필수적인 하위 시스템이다. Csrss는 콘솔 창, 스레드 생성과 삭제 및 16비트 가상 MS-DOS 환경의 일부를 담당한다. | NT AUTHORITY\SYSTEM |
explorer.exe | 이 프로세스는 친숙한 작업 표시줄, 바탕 화면 등으로 표시되는 사용자 셸이다. 이 프로세스는 생각하는 것만큼 Windows를 실행하는 데 필수적이지는 않으며 대개 시스템에 부정적인 영향을 미치지 않고 작업 관리자에서 중지하고 다시 시작할 수 있다. | HOSTNAME\Administrator |
internat.exe | Internat.exe는 시동 시에 실행되어 사용자가 지정한 다양한 입력 로캘을 로드한다. 다음 레지스트리 키에서 현재 사용자에 대해 로드할 로캘을 가져온다.
HKEY_CURRENT_USER\Keyboard Layout\Preload
Internat.exe는 시스템 트레이로 "EN" 아이콘을 로드하여 사용자가 로캘을 쉽게 전환할 수 있도록 한다. 이 아이콘은 프로세스가 중지되면 사라지지만 제어판을 통해 로캘을 변경할 수 있다. 참고 "시스템"에 대한 로캘이 다음에서 로드된다.
HKEY_USERS\.DEFAULT\Keyboard Layout\Preload
이러한 로캘은 로그온한 사용자가 없는 경우(예: 로그온 프롬프트에서)나 로컬 시스템 계정에서 실행 중인 시스템 서비스에서 사용된다. |
HOSTNAME\Administrator |
lsass.exe | 로컬 보안 인증 서버인 이 프로세스는 Winlogon 서비스에 대해 사용자를 인증하는 프로세스를 생성한다. 이 프로세스는 기본 Msgina.dll 같은 인증 패키지를 사용하여 수행된다. 인증에 성공하면 Lsass는 초기 셸을 시작하는 데 사용되는 사용자의 액세스 토큰을 생성한다. 사용자가 시작하는 다른 프로세스는 이 토큰을 상속한다. | NT AUTHORITY\SYSTEM |
mstask.exe | 이 프로세스는 사용자가 미리 정한 시간에 작업을 실행하는 일을 담당하는 작업 스케줄러 서비스이다. | NT AUTHORITY\SYSTEM |
smss.exe | 이것은 사용자 세션의 시작을 담당하는 세션 관리자 하위 시스템이다. 이 프로세스는 시스템 스레드에서 시작되며 Winlogon 및 Win32(Csrss.exe) 프로세스의 시작과 시스템 변수 설정을 비롯한 다양한 작업을 수행한다. Smss.exe는 이러한 프로세스를 시작한 후 Winlogon이나 Csrss가 끝나기를 기다린다. 이것이 "정상적으로" 이루어지면 시스템이 종료되지만 예기치 않은 동작이 일어나면 Smss.exe는 시스템이 응답을 중지하도록 한다. | NT AUTHORITY\SYSTEM |
spoolsv.exe | 이 스풀러 서비스는 스풀링된 인쇄/팩스 작업 관리를 담당한다. | NT AUTHORITY\SYSTEM |
svchost.exe | 이것은 DLL에서 실행되는 다른 프로세스의 호스트 역할을 하는 일반 프로세스이므로 이 프로세스 항목은 둘 이상 표시될 수 있다. Svchost.exe를 사용 중인 프로세스를 확인하려면 Windows 2000 CD-ROM에서 Tlist.exe를 사용하면 된다. 명령줄 프롬프트에서의 구문은 tlist -s이다. http://support.microsoft.com/kb/250320/ |
NT AUTHORITY\SYSTEM NT AUTHORITY\NETWORK SERVICE NT AUTHORITY\LOCAL SERVICE |
services.exe | 이 프로세스는 시스템 서비스의 시작, 중지 및 시스템 서비스와의 상호 작용을 담당하는 서비스 제어 관리자이다. | NT AUTHORITY\SYSTEM |
system | 대부분의 시스템 커널 모드 스레드가 System 프로세스로 실행된다. | NT AUTHORITY\SYSTEM |
system idle process |
이 프로세스는 각 프로세서에서 실행되는 단일 스레드로 시스템이 다른 스레드를 처리하지 않을 때의 프로세서 시간을 나타내는 일만 한다. 일반적으로 작업 관리자에서 이 프로세스가 프로세서 시간의 대부분을 차지한다. | NT AUTHORITY\SYSTEM |
winlogon.exe | 이것은 사용자 로그온과 로그오프를 관리하는 프로세스이다. Winlogon은 사용자가 Ctrl+Alt+Del을 누를 때만 활성화되어 보안 대화 상자를 표시한다. | NT AUTHORITY\SYSTEM |
winmgmt.exe | Winmgmt.exe는 Windows 2000에서 클라이언트 관리의 핵심 구성 요소이다. 이 프로세스는 첫 번째 클라이언트 응용 프로그램이 연결되거나 관리 응용 프로그램이 서비스를 요청할 때 지속적으로 초기화한다. | NT AUTHORITY\SYSTEM |
spoolsv (PID 1600) | spoolsv (PID 864) |
<excerpt> spoolsv.exe pid: 1000 NT AUTHORITY\SYSTEM C: File (RW-) C:\WINDOWS\system32 10: Section 14: Directory \Windows 18: Port 1C: Key HKLM 20: Directory \BaseNamedObjects 24: Mutant \Windows\WindowStations\WinSta0 38: Event 3C: Semaphore 40: Semaphore 44: Key HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Drivers32 48: Event \BaseNamedObjects\DINPUTWINMM 4C: File (---) \Device\KsecDD 50: Event 54: Event 58: Event 5C: Semaphore \BaseNamedObjects\shell.{A48F1A32-A340-11D1-BC6B-00A0C90312E1} 60: File (---) \Device\NamedPipe\net\NtControlPipe7 A8: File (---) \Device\NamedPipe\spoolss AC: File (---) \Device\NamedPipe\spoolss |
<excerpt> spoolsv.exe pid: 864 demantos\r00t C: File (RW-) C:\WINDOWS\Temp\spoolsv 614: Port 618: Event 624: File (---) \Device\Afd\Endpoint 628: File (---) \Device\Tcp 630: File (---) \Device\Tcp 634: Event 638: File (---) \Device\Tcp 63C: Event 640: File (---) \Device\Tcp 644: Event 648: Event 64C: Port 650: Event 654: Token NT AUTHORITY\NETWORK SERVICE:3e4 658: Event 65C: Port 660: File (---) \Device\Tcp 664: File (---) \Device\Tcp 668: File (---) \Device\NetBT_Tcpip_{2DC00E6E-AD51-4E04-85A1-101876F63F96} 670: Event 78C: Key HKLM\SYSTEM\ControlSet001\Services\WinSock2\Parameters\NameSpace_Catalog5 790: Event 794: Key HKLM\SYSTEM\ControlSet001\Services\WinSock2\Parameters\Protocol_Catalog9 |
위 예제는 정상적인 spoolsv 프로세스와 악성코드로 동작하는 spoolsv의 핸들을 비교한 것이다. 의심스러운 spoolsv는 네트워크와 관련된 리소스에 접근하고 있는 것을 확인할 수 있다.
그리고 핸들 정보를 수집하는 다른 프로그램으로 Microsoft에서 배포하는 Open Handles(oh.exe)라는 프로그램이 있다.
http://www.microsoft.com/downloads/details.aspx?FamilyID=275D9F7A-83B2-4FB1-9B6A-DE8D28F72329&displaylang=en
3.3 Dependencies Loaded by Running Processes
동적으로 링크된 실행 프로그램들이 제대로 실행되려면 공유 라이브러리들이 필요하다. 윈도우 프로그램에서 이런 공유 라이브러리는 DLL(Dynamic Link Labraries)이라 불리며 프로그램이 실행될 때 운영체제를 통해서 가져온다. DLL들이 불려질 때 정적으로(statically) 링킹되는 것보다 동적으로(dynamically) 링키되는 것이 훨씬 더 작고 시스템 메모리의 소모량도 더 적다.
실행 중인 프로세스에 의해 로드된 DLL을 확인하는 좋은 프로그램은 listdlls이다. listdlls는 Sysinternals 패키지에 포함되어 있다. listdlls 명령을 통해 각각의 모듈의 절대 경로를 확인할 수 있다.
프로세스에 의해 로딩된 DLL을 찾아내는 것은 분석에 아주 유용하다. 많은 악성코드들이 스스로를 실행시키기 보다는 DLL 형태로 제작되어 주요 시스템 프로세스에 Injection 되어 실행된다(DLL Injection). 이 공격 기법이 적용된 대표적인 루트킷이 Vanquish이다(rootkit.com에서 찾을 수 있다).
tlist나 PRCView, tasklist, WinInterrogate와 같은 프로그램에서도 실행 중인 프로세스에 의해 로딩된 DLL들을 확인할 수 있다.
WinInterrogate.exe
http://sourceforge.net/project/shownotes.php?release_id=122552&group_id=15870
Exported DLLs
listdlls에 의해 각각의 프로세스들이 사용하고 있는 DLL들을 확인하였다면(import) 해당 DLL들이 어떤 함수를 특정 프로세스에게 제공하고 있는지(export) DLLExportViewer로 확인해 볼 수 있다.
http://www.nirsoft.net/utils/dll_export_viewer.html
4. Correlate Open Ports with Running Processes and Programs
앞에서 우리는 로그인한 사용자, 활성화된 네트워크 연결 정보, 실행 중인 프로세스에 대한 정보 수집 방법에 대해서 알아보았다. 이번에는 열려진 포트와 실행 중인 포트를 확인하고 연결이 성립되었거나 포트를 열고 LISTEN하고 있는 실행 프로그램이 시스템의 어느 위치에 있는지 확인할 것이다. 다음과 같은 절보들을 수집해야 한다.
- 로컬 IP와 포트
- 원격 IP와 포트
- 원격 호스트네임
- 프로토콜
- 연결 상태
- 프로세스 이름과 PID
- 프로세스와 연관된 실행 가능 프로그램
- 실행 가능 프로그램의 경로
- 프로세스/프로그램과 연관된 사용자 이름
Windows XP SP2 이상의 시스템에서는 netstat -anb라는 옵션을 사용하여 현재 열려있는 포트나 리슨하고 있는 포트와 해당 포트를 열고 있는 프로세스의 PID와 프로세스를 실행하고 있는 프로그램의 이름과 링크된 DLL의 경로를 확인할 수 있다.
힘이 되는 블로그 | : | zizihacker.egloos.com, aehwamong.tistory.com, swbae.egloos.com 등등 (너무 많다) |
재미있는 블로그 | : | |
존경스러운 블로그 | : | |
특이한 블로그 | : | |
멋진 블로그 | : | |
아름다운 블로그 | : | |
절친한 블로그 | : |
얼마전 국내를 강타(?)한 2090 바이러스는 이 글을 읽고 계신분들은 다들 아실겁니다.
무한 재부팅이 된다.. 치료 불가능하다.. 라는 여러가지 루머가 있었습니다.
우연히 커뮤니티를 통해 입수해서 한번 분석을 해보기로 했습니다. 배포는 하지 않습니다.
2090 바이러스는 MS08-067 취약점을 공격한 바이러스입니다. 윈도우 업데이트를 착실하게 잘 하신분들은 전혀 위험하지 않으셨을겁니다.
시스템 날짜가 2090년 1월 1일로 변경되셨던 분들이라면 윈도우 업데이트를 하지 않아셨던겁니다.
0x01 Base Information
입수한 파일은 exe파일과 시스템 파일(sys) 총 두개였습니다. 먼저 간단하게 바이러스토탈을 통해서 검사해 봤습니다.
파일명은 system.exe와 f82abd63e90429ae68cee70e40a51c60.sys였습니다.
system.exe
f82abd63e90429ae68cee70e40a51c60.sys
뭐...대부분의 백신에서 현재는 탐지가 가능합니다.
system.exe 파일의 import되는 함수들만 봐도 악성코드라는 것을 어느 정도 짐작이 가능합니다.
0x02 행동 분석
먼저 SysAnalyzer를 통해서 분석해 보았습니다.
system.exe가 실행되면 드라이버 파일인 C:\DOCUME~1\demantos\LOCALS~1\Temp\07164.sys 와 system.exe 파일과 동일한 파일인 C:\WINDOWS\system32\4026202 파일 두개를 생성합니다. system32 폴더 아래에 생성되는 일곱자리 숫자로 된 파일은 system.exe 파일을 복사해서 새롭게 만들어 내는 파일입니다.
특이한 점은 system.exe가 정상적으로 실행되지 않으면 계속해서 다른 이름의 파일을 생성해냅니다.
그리고 HKLM\SYSTEM\\CurrentControlSet\\Services\\NvCplDaemon 위치에 새로운 레지스트 키값을 생성하는 걸 확인할 수 있었습니다.
1. Building Your Live Response Toolkit
라이브 시스템 분석시에는 잘알려진 신뢰할 수 있는 툴들을 사용해서 데이터를 수집해야 한다.
분석 대상 시스템의 파일들을 공격자가 변경했을 가능성이 있으니 대상 시스템의 원본 프로그램에 의지하지 말고 자신만의 CD를 만들고 그 툴들을 통해서 데이터를 수집하는 것이 좋다. 파일(또는 툴)을 확인하는데 Dependency Walker(depends.com)나 PEView를 사용하는 것이 좋다.
Dependency Walker : http://www.dependencywalker.com/
PEView : http://www.magma.ca/~wjr/
침해 대응에 사용되는 많은 툴들은 공격자들에 의해서도 사용되기 때문에 구분 지을 수 있어야 한다. 예를 들면 파일명을 바꾼다든지 파일명 끝에 자신의(you!!) 이니셜 같은 것을 붙여도 된다. 또는 Hex 에디터로 바이너리를 열어서 특정 문자열을 넣어 두어서 공격자가 사용하는 바이너리와 구분지으면 된다. Hex 에디터로 바이너리를 열어서 PE 헤더 바로 뒤쪽의 오프셋 0x600 만큼 떨어진 위치에 구별할 수 있는 약간의 바이트를 추가한다. 그리고 정확한 식별을 위해서 해쉬값을 생성해 놓는다.
PE 헤더 다음에는 Section Table이 나오는데 cmd.exe는 Section Table의 위치가 0x1d0이다.
0x1d0 + 0x600 = 0x7d0의 내용을 33 31 33 33 37 (31337)로 변경 후 다른 이름으로 저장하고 실행 잘 되는지 확인하면 된다.
<원본>
HELIX와 비슷한 프로그램으로 nigilant32라는 프로그램이 있다.
http://www.agilerm.net/publications_4.html
상용 원격 포렌식 툴은 다음과 같은 제품들이 있다. 모두 전체 메모리를 캡쳐할 수 있다.
ProDiscoverIR - http://www.techpathways.com/prodiscoverir.htm
OnlineDFS - http://www.cyberstc.com/
LiveWire - http://www.wetstonetech.com/
책에서는 숨겨진 프로세스나 파일, 레지스트리, 네트워크 연결 정보들을 분석하기 위해서 메모리 전체를 덤프하는 방법만 언급하고 있지만 메모리 전체를 덤프한다는 것이 그리 쉬운 일은 아니다. 게다가 원격에서 점검하고 악성코드 바이너리 파일을 획득해야 한다면 더더욱 어려울 것이다. 숨겨진 프로세스나 파일, 레지스트리, 네트워크 연결 정보등은 개인적으로 IceSword나 gmer를 이용해서 분석하는 것을 추천한다.
둘다 프리웨어이고 상당히 강력한 기능들을 가지고 있어 필자도 자주 사용하고 있다.
IceSword : http://pjf.blogcn.com/index.shtml
gmer : http://www.gmer.net/index.php
2.2 Collecting Subject System Details
분석 대상 시스템의 세부적인 항목들을 먼저 수집하는데 이런 데이터들은 차후 분석 단계에서 유용하게 사용될 수 있기 때문이다.
System Date and Time
날짜와 시간은 분석에 상당히 중요한 역할을 한다. 날짜와 시간을 확인하는 방법은 여러가지가 있다.
지금까지 윈도우 휘발성 데이터 수집하는 일부 방법에 대해서 살펴보았습니다.
내용이 좀 많은 느낌이 들어 각 Chapter들을 여러개로 분할하여 글을 작성할 생각입니다.
1장은 총 4개로 나눠질 예정입니다.
다음 글에서는 프로세스와 관련된 데이터와 서비스와 드라이버, 스케줄 작업, 클리보드 데이터 수집에 대해서 살펴보도록 하겠습니다.