Docker는 Union filesystem 구조를 지원하는 Storage Driver를 사용하며, 파일 및 디렉터리가 삭제되었을 경우, whiteout 처리를 한다. Whiteout처리 방식은 Storage Driver에 따라 다르다. 대표적인 Storage Driver인 AUFS와 Overlay2 드라이버에서 whiteout 처리된 파일 및 디렉터리를 검색하는 소스를 코딩하여, 개인 github 사이트에 공개하였습니다. 이 소스코드는 삭제된 파일/디렉터리 중에서 whiteout처리된 파일/디렉터리만 검색이 가능합니다.

https://github.com/kk0m4k/docker-forensics

 

Advertisements

 

은행 근무 시절에 가장 핫 했던 SWIFT 이슈 관련하여, 국내 OO 기관에서 SWIFT 위협과 보안 방안에 대해서 발표 요청이 있었고, 그 당시 발표했던 자료 컨텐츠 중에 방글라데시 중앙은행

사고 관련된 장표 일부를 첨부하였습니다. 방글라데시를 포함하여, 해외 주요 은행의 SWIFT 이슈가 발생하면서, SWIFT 시스템 및 외환거래 프로세스 전반적으로 보안 점검을 수행하면서, 시스템 및 업무에 대한 이해를 할 수 있었으나, 지금은 기억 속에서 지워져 버렸음…

아래 코드는 AWS Boto3 SDK를 사용하여 GuardDuty Finding 목록 및 세부 이벤트 정보를 가져오는 PoC코드입니다.  GuardDuty API 및 Boto3 SDK에 대해서 문서화는 되어 있으나, 샘플코드 및 디테일한 설명은 부족한 면이 있습니다. 특히 주의할 점으로, 필터링 파라미터로 사용되는  updatedAt key에 대한 값으로,  Python time모듈에서 제공하는 time 함수를 사용할 경우, 자리 수가 틀려서 필터링 조건이 적용되지 않습니다. 반드시 유닉스타임스탬프자릿수를 10자리가아닌 13자리로해야합니다


#!/usr/bin/python3

# -*- coding:utf-8 -*-

import boto3

...

...

UPDATEDAT=(CURRENT_UNIXTIME - PERIOD_UNIXTIME) * 1000 # 13자리를 맞추기 위해서 1000를 곱함.

client = boto3.client('guardduty')

def get_Findinglists(x_tokenlist):

...

while True :

token_x = []

response = client.list_findings(

DetectorId=DETECTORID_STRING,

MaxResults=1,

NextToken=nextToken_id,

FindingCriteria={

'Criterion': {

'severity': {

'Gte': 2, #원하는 severity 명시(예, 2, 5, 8 등등)

},

'updatedAt': {

'Gte': UPDATEDAT # 13자리 유닉스타임(정수형)

}

}

},

SortCriteria={

'AttributeName': 'service.eventLastSeen',

'OrderBy': 'ASC'

}

)

nextToken_id = response.get('NextToken')

...

)

MAC OS X 메모리 덤프 및 분석 관련 글….

https://github.com/google/rekall/releases/tag/v1.5.1

MacBook-Pro:Downloads root# unzip osxpmem-2.1.post4.zip

Archive:  osxpmem-2.1.post4.zip

creating: osxpmem.app/

creating: osxpmem.app/libs/

inflating: osxpmem.app/libs/libaff4.0.dylib

inflating: osxpmem.app/libs/libcrypto.1.0.0.dylib

inflating: osxpmem.app/libs/libcurl.4.dylib

inflating: osxpmem.app/libs/libglog.0.dylib

inflating: osxpmem.app/libs/libiconv.2.dylib

inflating: osxpmem.app/libs/liblzma.5.dylib

inflating: osxpmem.app/libs/libpcre++.0.dylib

inflating: osxpmem.app/libs/libpcre.1.dylib

inflating: osxpmem.app/libs/libraptor2.0.dylib

inflating: osxpmem.app/libs/libsnappy.1.dylib

inflating: osxpmem.app/libs/libssl.1.0.0.dylib

inflating: osxpmem.app/libs/liburiparser.1.dylib

inflating: osxpmem.app/libs/libuuid.16.dylib

inflating: osxpmem.app/libs/libxml2.2.dylib

inflating: osxpmem.app/libs/libxslt.1.dylib

inflating: osxpmem.app/libs/libz.1.2.8.dylib

creating: osxpmem.app/MacPmem.kext/

creating: osxpmem.app/MacPmem.kext/Contents/

creating: osxpmem.app/MacPmem.kext/Contents/_CodeSignature/

inflating: osxpmem.app/MacPmem.kext/Contents/_CodeSignature/CodeResources

inflating: osxpmem.app/MacPmem.kext/Contents/Info.plist

creating: osxpmem.app/MacPmem.kext/Contents/MacOS/

inflating: osxpmem.app/MacPmem.kext/Contents/MacOS/MacPmem

inflating: osxpmem.app/osxpmem

inflating: osxpmem.app/README.md

MacBook-Pro:Downloads root# kextload -t osxpmem.app/MacPmem.kext/

Notice: -print-diagnostics (-t) ignored; use kextutil(8) to test kexts.

/Users/franc3sco/Downloads/osxpmem.app/MacPmem.kext failed to load – (libkern/kext) authentication failure (file ownership/permissions); check the system/kernel logs for errors or try kextutil(8).

MacBook-Pro:Downloads root# chown -R root:wheel osxpmem.app/

MacBook-Pro:Downloads root# kextload osxpmem.app/MacPmem.kext/

MacBook-Pro:Downloads root#

MacBook-Pro:Documents root# clear

MacBook-Pro:Documents root# dd if=/dev/pmem of=macram.raw

dd: /dev/pmem: Input/output error

37728256+0 records in

37728256+0 records out

19316867072 bytes transferred in 567.741078 secs (34024079 bytes/sec)

MacBook-Pro:Documents root#

 

https://github.com/volatilityfoundation/profiles/tree/master/Mac

MacBook-Pro:volatility-master franc3sco$ pwd

/Users/franc3sco/Documents/volatility-master

MacBook-Pro:mac franc3sco$ cp ~franc3sco/Downloads/HighSierra_10.13.2_17C88.zip  volatility/plugins/overlays/mac/

MacBook-Pro:volatility-master franc3sco$ python2 vol.py -f ~franc3sco/Documents/macram.raw  mac_get_profile

Volatility Foundation Volatility Framework 2.6

Profile                                            Shift Address

————————————————– ————-

MacHighSierra_10_13_2_17C88x64                     0x00016e00000

MacBook-Pro:volatility-master franc3sco$ python2 vol.py -f ~franc3sco/Documents/macram.raw –profile=MacHighSierra_10_13_2_17C88x64 mac_bash

Volatility Foundation Volatility Framework 2.6

Pid      Name                 Command Time                   Command

——– ——————– —————————— ——-

1415 bash                 2018-01-27 04:10:57 UTC+0000   python

1415 bash                 2018-01-27 04:10:57 UTC+0000   pwd

1415 bash                 2018-01-27 04:10:57 UTC+0000   ssh

1415 bash                 2018-01-27 04:10:57 UTC+0000   clear

1415 bash                 2018-01-27 04:10:57 UTC+0000   ls -alc

1415 bash                 2018-01-27 04:10:57 UTC+0000   mkdir .ssh

1415 bash                 2018-01-27 04:10:57 UTC+0000   mv ~/Downloads/MyKEYPair.pem .ssh/

개인적으로 리눅스/유닉스 계열 침해사고 점검 용도로 사용했던 스크립트입니다. 가끔 필요하여 찾으려고 하면 어디에 두었는지 찾기도 힘들고해서, 블로그에 올렸습니다.

#!/bin/sh
# best view tabstop 4
# written by francesco(kimfrancesco@gmail.com)
# Version 0.7 (20130315)

OS=`uname`
USERID=`id | cut -f 2 -d = | cut -f 1 -d \(`
SYSTEMDIRLIST=”/home /usr /bin /dev /var /etc /tmp /sbin”
VARSUBDIRLIST=”/var/tmp /var/spool /var/uucp /var/preserve /var/news /var/opt /var/snmp /var/lp”
XorgRootKIT=”/usr/lib/libX.a/ /usr/lib/libX.a/bin/ /usr/lib/libx.a/ /usr/lib/libx.a/bin/”
SHV4RootKIT=”/usr/lib/libsh /usr/lib/libsh/shsb /lib/libsh.so”
SKRootKIT=”/usr/share/locale/sk/.sk12 /usr/man/.sman/sk”
LJk2RootKIT=”/usr/lib/libmen.oo/.LJK2″
FUCKITRootKIT=”/dev/proc/fuckit”
BALAURRootKIT=”usr/lib/.kinetic /usr/lib/.egcs /usr/lib/.wormie”
BEASTRootKIT=”/usr/lib/elm/arobia/elm /lib/ldd.so/bktools”
CBRootKIT=”/usr/bin/.zeen /usr/bin/.zeen /usr/bin/.system”
DREAMSRootKIT=”/usr/lib/libshtift”
IGNOKITRootKIT=”/usr/lib/.libigno /usr/lib/defs”
PHALANXRootKIT=”/usr/share/.home.ph1″a
PHALANX2RootKIT=”/etc/khubd.p2 /usr/lib/zupzz.p2 /etc/lolzz.p2″
R55808RootKIT=”/tmp/…/r /tmp/…/a”
SUSPECTLOGIN=”ipt\.aol”
SSHBACKDOOR=”/usr/bin/dsdm /usr/bin/ssh2d”

LINUX_ROOTKIT_LABEL=”SM5|S.5″
SUNOS_ROOTKIT_LABEL=”cksum”
INFECTED=0
NOT_INFECTED=1

if [ “$USERID” != “0” ]; then
echo ” Your are not superuser”
exit 1
fi

if [ $# -gt 0 ]; then
for arg in $*
do
if [ “${arg}” = “local” ]; then
DONOTUSEFTP=”TRUE”
fi
done
fi

case “$OS” in
*Linux*)
OSNAME=”LINUX”
INTEGRITYTOOL=”/bin/rpm”
INTEGRITYTARGET=”/bin/ls /bin/ps /bin/netstat /usr/bin/find /usr/sbin/lsof /sbin/init /bin/login”
INTEGRITYCMD=”/bin/rpm -V -f –nomtime”
NETSTATPATH=”/bin/netstat”
NETSTATCMD=”netstat -anp”
LSOFPATH=`which lsof`
FINDPATH=”/usr/bin/find”
ARPPATH=”/sbin/arp”
LASTPATH=”/usr/bin/last”
IFCONFIGPATH=”/sbin/ifconfig”
WTMPLOGPATH=”/var/log”
HOSTID=`hostid`
;;
*SunOS*)
OSNAME=”SUNOS”
INTEGRITYTOOL=”/usr/sbin/pkgchk”
INTEGRITYTARGET=”/usr/bin/find /usr/bin/ps /usr/bin/ls /usr/bin/netstat /sbin/init /bin/login”
INTEGRITYCMD=”/usr/sbin/pkgchk -p”
NETSTATPATH=”/usr/bin/netstat”
NETSTATCMD=”netstat -an”
FINDPATH=”/usr/bin/find”
ARPPATH=”/usr/sbin/arp”
LASTPATH=”/usr/bin/last”
LSOFPATH=`which lsof`
IFCONFIGPATH=”/sbin/ifconfig”
WTMPLOGPATH=”/var/adm”
HOSTID=`hostid`
;;

*HP-UX*)
OSNAME=”HPUX”
INTEGRITYTOOL=”/usr/sbin/swverify”
INTEGRITYTARGET=”/usr/bin /usr/sbin”
INTEGRITYCMD=”/usr/sbin/swverify -d”
CHKROOTKITCOMPILE=”N”
NETSTATPATH=”/usr/bin/netstat”
NETSTATCMD=”netstat -an”
FINDPATH=”/usr/bin/find”
ARPPATH=”/usr/sbin/arp”
LASTPATH=”/usr/bin/last”
IFCONFIGPATH=”/usr/sbin/ifconfig”
WTMPLOGPATH=”/var/adm”
HOSTID=`uname -a | awk -F’ ‘ ‘{print $6}’`
;;
esac

check_category_num=0;

fn_file_integrity_result() {

case “$OS” in
*Linux*)
if echo ${integrity_result} | egrep ${LINUX_ROOTKIT_LABEL} > /dev/null
then
return ${INFECTED}
fi
;;
*SunOS*)
if echo ${integrity_result} | egrep ${SUNOS_ROOTKIT_LABEL} > /dev/null
then
return ${INFECTED}
fi
;;
esac

return ${NOT_INFECTED}
}

fn_lastlogin_result() {

if echo ${last_result} | egrep ${login_i} > /dev/null
then
return ${INFECTED}
fi

return ${NOT_INFECTED}
}

check_category_num=`expr $check_category_num + 1`
infected=0
case “$OS” in
*HPUX*)
;;
*)
for i in $INTEGRITYTARGET
do
if [ -f ${i} ]; then

integrity_result=`$INTEGRITYCMD $i 2>&1`

fn_file_integrity_result

STATUS=$?

if [ ${STATUS} -eq ${INFECTED} ]; then
echo “[NO_${check_category_num}][FILE INTEGRITY] : INFECTED ($i)”
infected=1
fi
fi
done
;;
esac
if [ ${infected} -eq 0 ]; then
echo “[NO_${check_category_num}][FILE INTEGRITY] : SAFE”
fi

check_category_num=`expr $check_category_num + 1`
infected=0
if [ -x $LASTPATH ]; then

STATUS=${NOT_INFECTED}

last_result=`$LASTPATH -100`

for login_i in ${SUSPECTLOGIN}
do
fn_lastlogin_result

STATUS=$?

if [ ${STATUS} -eq ${INFECTED} ]; then
echo “[NO_${check_category_num}][SUSPECT LOGIN] : INFECTED (${login_i})”
infected=1
break
fi
done
fi
if [ ${infected} -eq 0 ]; then
echo “[NO_${check_category_num}][SUSPECT LOGIN] : SAFE”
fi

check_category_num=`expr $check_category_num + 1`
infected=0
if [ -x $FINDPATH ]; then

dev_result=`$FINDPATH /dev -type f -a -perm -4100`

if [ “${dev_result}” != “” ]; then
echo “[NO_${check_category_num}][DEV DIR/EXEC FILE] : INFECTED (${dev_result})”
infected=1
fi

fi
if [ ${infected} -eq 0 ]; then
echo “[NO_${check_category_num}][DEV DIR/EXEC FILE] : SAFE”
fi

check_category_num=`expr $check_category_num + 1`
infected=0
if [ -x $FINDPATH ]; then

for sysdir_i in $SYSTEMDIRLIST
do
hiddendir_result=`$FINDPATH $sysdir_i -type d -a \( -name ” *” -o -name “..?*” -o -name “. ?*” \)`

if [ “${hiddendir_result}” != “” ]; then
echo “[NO_${check_category_num}][HIDDEN DIR] : INFECTED (${hiddendir_result})”
infected=1
break
fi

done

fi
if [ ${infected} -eq 0 ]; then
echo “[NO_${check_category_num}][HIDDEN DIR] : SAFE”
fi

check_category_num=`expr $check_category_num + 1`
infected=0
if [ -x $FINDPATH ]; then

for vardir_i in $VARSUBDIRLIST
do

if [ -d ${vardir_i} ]; then

varsubdir_result=`$FINDPATH $vardir_i -type f -a -perm -4100`

if [ “${varsubdir_result}” != “” ]; then
echo “[NO_${check_category_num}][VAR DIR/EXEC FILE] : INFECTED (${varsubdir_result})”
infected=1
break
fi
fi

done

fi
if [ ${infected} -eq 0 ]; then
echo “[NO_${check_category_num}][VAR DIR/EXEC FILE] : SAFE”
fi

check_category_num=`expr $check_category_num + 1`
infected=0
if [ “${OS}” = “Linux” -o “${OS}” = “SunOS” ]; then
for xorgdir_i in $XorgRootKIT
do
if [ -d ${xorgdir_i} ]; then

echo “[NO_${check_category_num}][X-org RootKit] : INFECTED (${xorgdir_i})”
infected=1
break
fi
done
fi
if [ ${infected} -eq 0 ]; then
echo “[NO_${check_category_num}][X-org RootKit] : SAFE”
fi

check_category_num=`expr $check_category_num + 1`
infected=0
if [ “${OS}” = “Linux” -o “${OS}” = “SunOS” ]; then
for shv4rootfile_i in $SHV4RootKIT
do
if [ -f ${shv4rootfile_i} -o -d ${shv4rootfile_i} ]; then
echo “[NO_${check_category_num}][SHV4 RootKit] : INFECTED (${shv4rootfile_i})”
infected=1
break
fi
done
fi
if [ ${infected} -eq 0 ]; then
echo “[NO_${check_category_num}][SHV4 RootKit] : SAFE”
fi

check_category_num=`expr $check_category_num + 1`
infected=0
if [ “${OS}” = “Linux” -o “${OS}” = “SunOS” ]; then
for skrootfile_i in $SKRootKIT
do
if [ -d ${skrootfile_i} ]; then
echo “[NO_${check_category_num}][SK RootKit] : INFECTED (${skrootfile_i})”
infected=1
break
fi
done
fi
if [ ${infected} -eq 0 ]; then
echo “[NO_${check_category_num}][SK RootKit] : SAFE”
fi

check_category_num=`expr $check_category_num + 1`
infected=0
if [ “${OS}” = “Linux” -o “${OS}” = “SunOS” ]; then
for fuckitrootfile_i in $FUCKITRootKIT
do
if [ -d ${fuckitrootfile_i} ]; then
echo “[NO_${check_category_num}][FUCKIT RootKit] : INFECTED (${fuckitrootfile_i})”
infected=1
break
fi
done
fi
if [ ${infected} -eq 0 ]; then
echo “[NO_${check_category_num}][FUCKIT RootKit] : SAFE”
fi

check_category_num=`expr $check_category_num + 1`
infected=0
if [ “${OS}” = “Linux” -o “${OS}” = “SunOS” ]; then
for ljk2rootfile_i in $LJk2RootKIT
do
if [ -d ${ljk2rootfile_i} ]; then
echo “[NO_${check_category_num}][LJK2 RootKit] : INFECTED (${ljk2rootfile_i})”
infected=1
break
fi
done
fi
if [ ${infected} -eq 0 ]; then
echo “[NO_${check_category_num}][LJK2 RootKit] : SAFE”
fi

check_category_num=`expr $check_category_num + 1`
infected=0
if [ “${OS}” = “Linux” -o “${OS}” = “SunOS” ]; then
for balaurrootfile_i in $BALAURRootKIT
do
if [ -d ${balaurrootfile_i} ]; then
echo “[NO_${check_category_num}][BALAUR RootKit] : INFECTED (${balaurrootfile_i})”
infected=1
break
fi
done
fi
if [ ${infected} -eq 0 ]; then
echo “[NO_${check_category_num}][BALAUR RootKit] : SAFE”
fi

check_category_num=`expr $check_category_num + 1`
infected=0
if [ “${OS}” = “Linux” -o “${OS}” = “SunOS” ]; then

for beastrootfile_i in $BEASTRootKIT
do
if [ -d ${beastrootfile_i} ]; then
echo “[NO_${check_category_num}][BEASTKIT RootKit] : INFECTED (${beastrootfile_i})”
infected=1
break
fi
done
fi
if [ ${infected} -eq 0 ]; then
echo “[NO_${check_category_num}][BEASTKIT RootKit] : SAFE”
fi

check_category_num=`expr $check_category_num + 1`
infected=0
if [ “${OS}” = “Linux” -o “${OS}” = “SunOS” ]; then

for cbrootfile_i in $CBRootKIT
do
if [ -d ${cbrootfile_i} ]; then
echo “[NO_${check_category_num}][CB RootKit] : INFECTED (${cbrootfile_i})”
infected=1
break
fi
done
fi
if [ ${infected} -eq 0 ]; then
echo “[NO_${check_category_num}][CB RootKit] : SAFE”
fi

check_category_num=`expr $check_category_num + 1`
infected=0
if [ “${OS}” = “Linux” -o “${OS}” = “SunOS” ]; then

for dreamsrootfile_i in $DREAMSRootKIT
do
if [ -d ${dreamsrootfile_i} ]; then
echo “[NO_${check_category_num}][DREAMS RootKit] : INFECTED (${dreamsrootfile_i})”
infected=1
break
fi
done
fi
if [ ${infected} -eq 0 ]; then
echo “[NO_${check_category_num}][DREAMS RootKit] : SAFE”
fi

check_category_num=`expr $check_category_num + 1`
infected=0
if [ “${OS}” = “Linux” -o “${OS}” = “SunOS” ]; then

for ignokitrootfile_i in $IGNOKITRootKIT
do
if [ -d ${ignokitrootfile_i} ]; then
echo “[NO_${check_category_num}][IGNOKIT RootKit] : INFECTED (${ignokitrootfile_i})”
infected=1
break
fi
done
fi
if [ ${infected} -eq 0 ]; then
echo “[NO_${check_category_num}][IGNOKIT RootKit] : SAFE”
fi

check_category_num=`expr $check_category_num + 1`
infected=0
if [ “${OS}” = “Linux” -o “${OS}” = “SunOS” ]; then

for phalanxrootfile_i in $PHALANXRootKIT
do
if [ -d ${phalanxrootfile_i} ]; then
echo “[NO_${check_category_num}][Phalanx RootKit] : INFECTED (${phalanxrootfile_i})”
infected=1
break
fi
done
fi
if [ ${infected} -eq 0 ]; then
echo “[NO_${check_category_num}][Phalanx RootKit] : SAFE”
fi

check_category_num=`expr $check_category_num + 1`
infected=0
if [ “${OS}” = “Linux” -o “${OS}” = “SunOS” ]; then

for phalanx2rootfile_i in $PHALANX2RootKIT
do
if [ -d ${phalanx2rootfile_i} ]; then
echo “[NO_${check_category_num}][Phalanx2 RootKit] : INFECTED (${phalanx2rootfile_i})”
infected=1
break
fi
done
fi
if [ ${infected} -eq 0 ]; then
echo “[NO_${check_category_num}][Phalanx2 RootKit] : SAFE”
fi

check_category_num=`expr $check_category_num + 1`
infected=0
if [ “${OS}” = “Linux” -o “${OS}” = “SunOS” ]; then

for r55808rootfile_i in $R55808RootKIT
do
if [ -f ${r55808rootfile_i} ]; then
echo “[NO_${check_category_num}][55808 RootKit] : INFECTED (${r55808rootfile_i})”
infected=1
break
fi
done
fi
if [ ${infected} -eq 0 ]; then
echo “[NO_${check_category_num}][55808 RootKit] : SAFE”
fi

check_category_num=`expr $check_category_num + 1`
infected=0
if [ “${OS}” = “Linux” -o “${OS}” = “SunOS” ]; then

for sshbackdoor_i in $SSHBACKDOOR
do
if [ -x ${sshbackdoor_i} ]; then
echo “[NO_${check_category_num}][SSH Backdoor] : INFECTED (${sshbackdoor_i})”
infected=1
break
fi
done
fi
if [ ${infected} -eq 0 ]; then
echo “[NO_${check_category_num}][SSH Backdoor] : SAFE”
fi

 

analyzeMFT.py로 파싱된 $MFT 파일의 output를 splunk에 인덱싱하여, STD과 FN 속성에 있는 시간 값을 비교하는 Splunk Query ….

1.analyzeMFT.py를 사용하여 $MFT파일 파싱

– /usr/bin/python analyzeMFT.py -f /MFTdump -o mft_output  –bodyfull -a -l

sourcetype=”mft-csv” | rename “FN Info Modification date” AS fn_mtime_datetime, “Std Info Modification date” AS std_mtime_datetime | eval fn_mtime = strptime(fn_mtime_datetime, “%Y-%m-%d %H:%M:%S.%6N”) | eval std_mtime = strptime(std_mtime_datetime, “%Y-%m-%d %H:%M:%S.%6N”) | where std_mtime = fn_mtime | table std_mtime, std_mtime_datetime, fn_mtime, fn_mtime_datetime, “Filename _1”

 

클라우드기반 아마존 AWS EC2 서버에 대한 디스크 포렌직을 위한 이미징을 위한 방법은 생각보다 간단하며, 이미징한 파일을 다운로드 받은 후, 분석 시스템에서 포렌직 툴(예, Autopsy)로 불러오면 분석이 가능하다. 또한, 이미지를  VMDX 로 변환하여 vmware에서 라이브분석이 가능하다.

1.분석대상(이미징 대상) EC2 volume를 선택한 후 snapshot를 생성

2. 위 1번 단계에서 생성한 snapshot를 가지고 volume 생성

3. 2 번 단계에서 생성한 volume를 dd 포맷의 이미지를 생성할 수 있는 EC2 서버에 연결(attach)

4. 3번 단계에서 attach한 volume를 대상으로 dd 명령어를 사용하여 dd 포맷으로 이미징 수행. 이미징된 파일을 로컬 분석 시스템으로 다운로드 받은데 있어서, 아웃바운드 트래픽 비용을 줄이고자, 이미지 파일을 gzip으로 압축 저장 함.

Screen Shot 2017-09-13 at 10.34.38 AM

Screen Shot 2017-09-13 at 12.29.15 PM

5. 다운로드 받은 이미지에 대해서 압축해제한 후, Autopsy 등의 툴을 사용하여 분석

6. dd 포맷 이미지를 vmdk로 변환하여, Vmware에서 라이브 분석.
root@kali:~/Desktop# qemu-img convert -pO vmdk ./TargetAMILinux_20170913.img /TargetAMILinux_20170913.vmdk

아래 이미지는 위 5번 단계까지 진행하여, autospy로 확인한 내용 임.

capture_4

autopsy_4

vmdx로 변환된 AWS EC2 이미지 파일을 vmware에 설치하여 라이브 분석 수행 가능.

vmware_imgae