layout: post title: Virtual Machine Files date: 2018-09-23 mathjax: true tag: [Virtual_Machine_Files] categories: 0x00_Info-Forensic 

가상머신 메모리 덤프를 뜨려면 어느정도 알아둬야 하는 가상머신 파일들이다.

.vmss : 게스트 운영체제를 일시 중지(Suspend)상태로 변경할 때, 게스트 운영체제 상태를 저장한 파일

.vmem : 가상머신의 메모리 정보를 저장한 파일이다. 게스트 운영체제에 대한 실질적인 가상 페이징 파일

.log : 가상머신에 대한 일반적인 활동 기록 파일

.vmdk : 게스트 운영체제에 대한 실질적인 가상 하드 드라이브

.vmsn : 스냅샷 파일로, 게스트 운영체제에 대한 상태 저장

.vmsd : 스냅샷 파일에 대한 메타데이터 기록 파일

.nvram : 게스트 운영체제에 대한 바이오스 정보 기록 파일

.vmx : 게스트 운영체제에 대한 설정 기록 파일


'Hacking' 카테고리의 다른 글

메모리 보호기법 해제  (0) 2018.12.19
Volatility Commands  (0) 2018.12.02
메모리 포렌식 분석 과정  (0) 2018.10.09
메모리포렌식 Volatility  (0) 2018.10.09
PNG 구조  (0) 2018.10.09
layout: post title: Memory Forensic Process date: 2018-09-22 mathjax: true tag: [MemoryForensicProcess] categories: 0x01_MemoryForensic 

1) 운영체제 분석

메모리 덤프 파일을 생성한 운영체제가 어떠한 버전의 운영체제인지 확인하는 과정을 거치게 된다. 이 단계에서 확인한 운영체제 버전에 따라 향후 이루어지는 메모리 분석의 방향과 분석에 적용될 볼라틸리티의 명령어가 다르게 사용될 수 있다.

imageinfo - 생성한 메모리 덤프 파일의 운영체제, 서비스 팩(Service Pack)과 하드웨어 정보 나열

2) 프로세스 분석

윈도우 시스템에서 동작하는 악성코드는 다른 일반적인 윈도우 프로그램과 유사한 구조를 가지고 있으므로, 악성코드 역시 자신의 코드를 메모리에 적재한 후에 자신의 프로세스와 쓰레드를 생성하여야만 실행이 가능하다. 그러므로 확보한 메모리 덤프 파일에서 실행 중이거나 은폐된 프로세스 및 그와 관련된 정보를 분석한다.

pslist - 실행 중인 프로세스 정보 나열

psscan - 실행 중인 프로세스 정보와 함께 이미 종료된 프로세스 정보 나열

psxview – pslist 및 psscan에서 확인한 프로세스 정보를 비교하여 나열함으로써, 은폐된 프로세스 정보 획득

pstree - pslist와 유사한 정보를 보여주나 부모(Parent) 프로세스와 자식(Child Process) 프로세스 간의 상관 관계 나열

procexedump – 프로세스의 메모리 영역에서 빈 공간(Slack space)를 포함하지 않고 바이너리(Binary) 형태로 추출

volshell – 메모리 덤프 파일 분석 시에 Windbg와 유사한 명령 형식으로 분석

3) 네트워크 정보

최근 발견되는 대부분의 악성코드는 감염된 윈도 시스템에서 외부 네트워크와 접속을 시도한다. 특히 침해 사고에서 많이 발견되는 원격 제어 형태의 악성코드는 메모리 덤프 파일 내부에서 공격자가 접속한 원격 시스템을 확인할 수 있는 다양한 정보가 포함되어 있다.

connections –활성화 상태의 네트워크 연결 정보 나열 (Windows XP, Windows 2003 Server 만 사용 가능)

connscan - 활성화 상태의 네트워크 연결 정보와 함께 이미 종료된 네트워크 연결 정보도 나열 (Windows XP, Windows 2003 Server 만 사용 가능)

netscan – 활성화 상태의 네트워크 연결 정보를 보여주나 윈도 비스타와 7 그리고 윈도 2008 서버에서만 사용 가능

4) DLL 및 쓰레드 분석

일부 악성코드의 경우에는 특정 프로세스에 자신이 생성한 DLL 파일을 인젝션(Injection) 하거나 특정 시스템 프로세스의 특정 메모리 쓰레드 영역에 자신의 코드를 삽입하는 경우가 있다.

dlllist - 특정 프로세스에서 로드 한 DLL의 정보 분석

ldrmodules - 특정 프로세스나 DLL에 의해 은폐된 DLL 정보 분석

dlldump - 특정 프로세스에서 로드한 DLL을 바이너리 형태로 추출

Malfind – 사용자 모드 형태로 은폐되어 있거나 인젝션된 코드 또는 DLL 정보 분석

apihooks – 사용자 및 커널 모드에서 API 후킹 정보 분석

5) String 분석

악성코드에 감염된 것으로 추정되는 시스템에서 생성한 메모리 덤프 파일에 존재하는 특정 프로세스의 메모리 영역 전체 또는 인젝션된 DLL 및 쓰레드 영역을 바이너리 형태로 추출한다. 그 이후 바이너리 형태로 추출해 낸 파일에서 악성코드와 관련된 문자열 및 관련 IP 주소 등을 검색 할 수 있다.\

yarascan - YARA를 이용하여, 사용자 및 커널 모드 메모리 영역에 포함된 바이트(Byte) 순서, ANSI 및 유니코드 (Unicode) 문자열 검색

string – 문자열 검색을 위해 백트랙에 기본적으로 포함된 프로그램

6) 레지스트리 분석

일반적으로 악성코드는 감염된 윈도 시스템이 재부팅 되더라도 자동으로 재시작하기 위해 윈도 레지스트리(Windows Registry) 영역에 특정 키(Key)를 생성하거나 특정 값(Value) 등을 변경한다. 그러므로 메모리 덤프 파일 내부에 남아 있는 레지스트리 관련 데이터의 분석을 통해 악성코드로 의심되는 파일을 추출할 수 있다.

printkey - 특정 레지스트리 키에 포함되어 있는 하위 키(Subkeys) 값과 데이터를 검색하여 나열

userassist – 메모리 덤프 파일에서 UserAssist 관련 레지스트리 키 정보 추출


'Hacking' 카테고리의 다른 글

메모리 보호기법 해제  (0) 2018.12.19
Volatility Commands  (0) 2018.12.02
가상머신 메모리 덤프 파일  (0) 2018.10.09
메모리포렌식 Volatility  (0) 2018.10.09
PNG 구조  (0) 2018.10.09
layout: post title: Memory Forensic Volatility date: 2018-09-18 mathjax: true tag: [메모리포렌식, MemoryForensic, Volatility, 메모리분석] categories: 0x01_MemoryForensic 

 

Info

  • Python 기반으로 반든 Memory Forensic Tool

  • Windows, Linux, Mac OS에서 실행 가능하다.

  • 오픈소스 형태이며, Plugin으로 여러 기능을 사용할 수 있다

  • 직접 Plugin을 만들어서 사용할 수 있다.

Available

  • 침대사고대응 관련

  • 포렌식 관련 CTF

Extension

메모리 덤프 파일(.img, .raw, .dmp)

하이버네이션 파일(.hiber)

가상 머신 메모리(.vmem)

information available

  • 트리 형태 프로세스 리스트

  • 프로세스가 로드한 DLL과 핸들

  • 프로세스 환경변수와 Import

  • 네트워크 정보

  • 시스템에서 로드한 드라이버 목록

  • 루트킷으로 은닉된 프로세스 오프셋

  • SID(보안 식별자)

  • PID

  • 스레드 수, 핸들 수, 시작 및 종료 시간

Command Format

 

$ vol.py -f [이미지경로][플러그인]

 

$ vol.py -f [이미지경로] --profile=[운영체제][플러그인]

Operating system information commands

 

$ vol.py -f memory.dd imageinfo
  • 운영체제, 메모리 주소 공간, DTB, KDBG, KCPR 주소 출력

Time Info Commands

 

$ vol.py -f memory.dd timeliner —output-file result.csv
  • 아티팩트를 시간과 함께 csv 파일로 출력

Executable Extract Commands

 

$ vol.py -f [이미지경로] procexedump -D [저장경로] -p [PID]

 

Option

 

옵션 설명
-h, --help 모든 옵션의 도움말과 해당 옵션의 디폴트 값 출력
--conf-file 설정파일의 경로를 설정
-d, --debug Volatility를 디버그함
--plugins 플러그인이 위치할 폴더 설정(세미콜론을 이용해 추가 디렉터리 포함이 가능함)
--info 지원 운영체제나 각 플러그인의 기본 정보 출력
--cache-directory 캐시 파일이 저장된 경로를 설정
--cache DTB(Directory Table Base), KDBG, KPCR 주소 등, 여러 변수를 저장해 추후에 사용할 수 있도록 함
--tz 타임존을 설정한다(유닉스 계열만 가능하다)
-f, --filename 메모리 이미지의 경로를 설정
--profile 운영체제 및 버전을 설정
-l, --location 메모리 이미지의 URN 경로를 설정
-w, -write 쓰기모드를 활성화
--use-old-as 레거시 주소 공간을 쓰도록 설정
--dtb DTB 주소를 설정
--output 출력 파일의 포맷을 설정
--output-file 출력 파일의 경로 설정
-v, --verbose 진행상황을 출력
-g, --kdbg KDBG 주소 값을 설정
-k, --kpcr KPCR 주소 값을 설정

 

Plugin

 

기능 플러그인
이미지 정보 imageinfo, kdbgscan, kpcrscan
프로세스, DLL pslist, pstree, psscan, dlllist, dlldump, handles, getsids, verinfo, enumfunc
프로세스 메모리 Memmap, memdump, procmemdump, procexedump, vadwalk, vadtree, vadinfo, vaddump
커널 메모리 & 오브젝트 connections, connscan, sockets, sockscan, netscan
레지스트리 Hives can, hivelist, printkey, hivedump, hashdump, lsadump, userassist
크래쉬 덤프, 하이버네이션 변환 crashinfo, hibinfo, imagecopy
Malware, 루트킷 Malfind, svcscan, ldrmodules, impscan, apihooks, idt, gdt, threads, callbacks, driverip, devicetree, pswview, ssdt_ex, timers
기타 strings, volshell, bioskbd, inspectcache, patcher, testsuite
Timeliner Plugin

 

아티팩트 플러그인
프로세스 pslist, psscan, pstree, procmemdump
쓰레드 thrdscan
네트워크, 소켓 netscan(Win7), connections(XP), connscan(XP)
레지스트리 Hivelist, printkey, userassist
실행파일(exe) Procexedump, handles
DLL 및 핸들 dlllist, dlldump
드라이버 driverscan, driverirp, moddump
루트킷 Plugin

 

플러그인 이름 설명
psxview pslist와 psscan으로 숨겨진 프로세스를 찾음
drivers can 메모리에서 드라이버 오브젝트 스캔
apihooks API/DLL 함수 후크를 찾음
ssdt SSDT(System Service Descriptor Table)에서 후크를 찾음
driverirp (IRP)I/O Request Packet 후크를 찾음
idt IDT(Interrupt Descriptor Table)을 출력

 

 

 

'Hacking' 카테고리의 다른 글

메모리 보호기법 해제  (0) 2018.12.19
Volatility Commands  (0) 2018.12.02
가상머신 메모리 덤프 파일  (0) 2018.10.09
메모리 포렌식 분석 과정  (0) 2018.10.09
PNG 구조  (0) 2018.10.09
layout: post title: PNG 구조(Structure) date: 2018-09-18 mathjax: true tag: [PNG, PNGSignature, PNGStructure, PNG구조] categories: 0x00_Info-Forensic 

PNG File Signature

89 50 4E 47 0D 0A 1A 0A : ‰PNG....

PNG 파일은 8Bytes의 시그니처를 가진다.

그 뒤에는 Chunk라는 그룹으로 나뉘어져 이미지 정보가 저장된다.

PNG Chunk

IHDR Chunk : 이미지 헤더 정보(첫 번째 청크)

PLTE Chunk : 팔레트 테이블 정보(색공간 표시)

IDAT Chunk : 이미지 데이터 정보(IDAT 청크로 쪼개질 수 있는 이미지 테이터 정보 표시)

IEND Chunk : 이미지 트레일러 정보(이미지의 끝을 표시)

IHDR

IHDR 청크는 PNG 파일 맨 앞에 위치하는 청크로, PNG 이미지의 크기, 필터링 방식, 압축 방식 등을 알 수 있다. IHDR은 항상 13바이트이다.

{
Length : 00 00 00 0D (13 byte),
Chunk Type : IHDR,
Chunk Data ( 13 byte ),
{
  Width (4 byte),
  Height (4 byte),
  Bit depth (1 byte),
  Color Type (1 byte),
  Compression method (1 byte),
  Filter method (1 byte),
  Interlace method (1 byte),
}
CRC
}

Width, Height

이미지의 폭과 높이를 지정한다. 이 값을 바탕으로 이미지 데이터를 디코딩하고 출력한다. 따라서 이 부분을 조작하면 이미지를 일그러뜨리거나 이미지의 아랫부분을 감추는 것 등도 가능하다.

Bit depth

Bit depth 하나의 채널(channel)이 몇 비트로 구성될 지를 정한다. 이미지의 한 픽셀은 하나 또는 여러개의 채널로 구성될 수 있다.

Color Type

Color Type은 PNG 이미지의 색상을 어떻게 구성할 것인지를 정한다.

Compression method

PNG 압축 표준 : Deflate

Filter method

현재까지 PNG에서 표준으로 정의된 필터링 방식은 한 가지다.

Interlace method

웹 페이지 등에 이미지를 표시할 때 이미지 로딩이 완료되기 전에 먼저 해상도가 낮은 이미지를 보여주기 위하여 사용된다.

IDAT

IDAT청크는 이미지의 실제 데이터가 들어가는 부분이고, 픽셀 데이터는 필터링과 압축을 거쳐 IDAT청크에 저장된다. 한 PNG는 여러 IDAT 청크를 가지는데, 이는 데이터를 적절한 사이즈로 전송하기 위한 것이다. 일반적으로 하나의 IDAT 청크당 65534바이트의 크기를 갖는다. 그래서 PNG는 전체 이미지 데이터를 한꺼번에 압축한 뒤, 여러 IDAT 청크에 나누어 담는 방식을 사용한다. 따라서, 모든 IDAT 청크가 있어야만 이미지 디코딩이 가능하다.

Encoding : Pixel Data -> Filter -> Compression -> IDAT Chunk Data
Decofing : IDAT Chunk Data -> Compression -> Unfilter -> Pixel Data

IEND

IEND청크는 이미지의 맨 뒤에 위치하는 청크로 PNG 파일의 끝을 나타낸다. 데이터를 담는 목적으로 사용되지 않으므로 길이는 항상 0이다.

Footer Signature, Trailer Signature

49 45 4E 44 AE 42 60 82 : IEND®B`‚

'Hacking' 카테고리의 다른 글

메모리 보호기법 해제  (0) 2018.12.19
Volatility Commands  (0) 2018.12.02
가상머신 메모리 덤프 파일  (0) 2018.10.09
메모리 포렌식 분석 과정  (0) 2018.10.09
메모리포렌식 Volatility  (0) 2018.10.09


이름

설명

버퍼

stdin

표준 입력

사용

stdout

표준 출력

미사용

stderr

표준 에러

미사용


stdout은 'standard output'의 약자로 표준 출력 장치에 대한 포인터를 의미하고 stdout을 사용해서 해당 파일의 데이터를 쓰면 해당 시스템의 표준 출력장치에 그 데이터가 출력되는 것이다.


일반적으로 유닉스에서 동작하는 프로그램은 실행 시 세 개의 스트림이 자동으로 열린다. 이를 표준 스트림이라고 부른다.


표준 출력은 프로그램이 출력 데이터를 기록하는 스트림이다. 프로그램은 write 명령을 이용하여 데이터 전송을 요청한다. 모든 프로그램이 출력을 요구하는 것은 아니다. 이를테면 파일 이름 바꾸기 명령(일반적으로 mv, move, ren)은 명령 수행이 성공적이어도 아무 메시지도 나타내지 않는다.

리다이렉션 없이 표준 출력은 프로그램을 시작한 텍스트 터미널이 된다.

표준 출력을 위한 파일 서술자는 1이다. POSIX <unistd.h> 정의는 STDOUT_FILENO이다. 이에 해는 <stdio.h> 변수는 FILE* stdout;이다. 이와 비슷하게 <iostream>에서는 std::cout이다.

'동아리' 카테고리의 다른 글

C언어 암스트롱수,최단거리,레고블럭  (0) 2018.12.06

+ Recent posts