kkamagi's story

IT, 정보보안, 포렌식, 일상 공유

DFIR/사고 대응

[Forensic] 윈도우 포렌식 실전 가이드 / 침해사고대응

까마기 2020. 10. 26. 15:12
반응형

'윈도우포렌식 실전 가이드(고원봉/한빛미디어)' 도서를 참고하여 포스팅하였다.

침해사고대응 및 컴퓨터 포렌식 관련하여 긴급하게 윈도우 호스트에 대한 휘발성 데이터를 수집하여 조사 시 참고한다.

 

* 라이브 포렌식 단계에서 영향을 받는 시스템 구성 요소

 

메모리 : Live Response 도구를 실행하면 프로세스가 생성되고 실행 코드와 오브젝트들이 메모리에 적재된다. 

 

네트워크 : 사용하는 도구가 네트워크 기능을 이용하면 시스템은 지정된 소켓을 열고 외부와 네트워크 연결을 맺는다. 그리고 네트워크 연결도 커널 오브젝트에 의해 관리됨으로써 메모리에 있는 커널 테이블을 갱신한다.

 

프리패치 : 윈도우는 새로운 프로그램이 실행될 때마다 프리패치(Prefetch) 파일을 만든다. 

 

레지스트리 : 많은 Live Response 도구가 레지스트리에 접근하여 그 값을 사용한다. 윈도우 설치 정보나 EULA(End User License Agreement)가 사용자에 의해 승인되었다는 것을 기록한다. 레지스트리에 대한 접근은 레지스트리 하이브 파일의 접근 시간 갱신을 의미하며, 레지스트리에 대한 쓰기 작업은 레지스트리 키의 마지막 쓰기 시간 변경을 의미한다.

 

DLL : 정적 링킹(static linking)으로 컴파일되지 않은 모든 프로그램은 외부 함수를 사용하려면 DLL파일이 필요하다. 컴퓨터 포렌식 도구가 시스템 DLL 파일을 필요로 한다면 해당 파일을 찾아서 읽을 것이고, 파일의 접근 시간을 갱신할 것이다. 

 * DLL(Dynamic Link Library) 파일이란, 프로그램들이 자주 사용하는 공용 코드들을 성격에 따라 분류해 놓은 파일이다. 이 DLL 파일이 필요한 이유는 프로세스가 실행에 필요한 기능(정확히는 함수) 중에서 실행 파일에는 없는 부분들을 보충하기 위해서다. 프로세스가 사용한 DLL 파일을 살펴보면 프로세스에 어떤 기능이 있는 지 유추가 가능. (DLL 파일만 보고 프로세스의 성격을 정확히 규정하기는 어려움)

ex) mswsock.dll 파일 로그 -> 네트워크 기능 / COMDLG32.dll 파일 로드 -> 윈도우 대화상자(common dialog box)를 통해서 파일을 저장하거나 불러올 수 있다는 것을 의미

---> 이것은 어디까지나  DLL 파일이 필요한 동적 링킹 프로그램에 한하며, 정적 링킹으로 만들어진 프로그램은 DLL이 필요없다. 

 

로그 파일 : 사용한 도구가 에러를 발생시켰다면 기본적으로 이벤트 로그에 기록. 에러가 아니더라도 도구 자체가 이벤트 로그에 스스로 로그 기록을 남길 수도 있다. 보안 프로그램이 설치되어 있다면 실행된 모든 애플리케이션에 대한 추적 기록과 검사 기록이 남을 수 있다.

 

시스템에 미치는 영향을 최소화하는 가장 좋은 방법은 도구를 만들 때 프로그래망 단계에서 부터 고려하는 것이나 가장 이상적인 해결책일 뿐이다. 실제로 다양한 도구를 테스트해보고 그 중에서 가장 기능이 좋으면서 시스템에 영향을 적게 미치는 도구를 선별해서 사용하는 것이 현실적인 방법.

 

 

* 사전 준비

도구 선택 단계 : 

 

도구 테스트 단계 : 

 

문서화 단계 : 

 

사전 훈련 단계 : 

 

* 모니터링과 문서화

 

- Live Response 도구들이 시스템에 어떤 영향을 미치는가를 문서화할 때 고려해야할 3가지 요소

 

1. 프로그램이 실행될 때 로드되는 DLL 파일 목록

1) netcat / Process monitor를 이용하여 확인

Process monitor 실행 및 Filter 설정 (nc.exe)

 

nc download 및 실행

 

다른 터미널 프롬프트에서 아무 명령 + 파이프 + nc명령어를 실행한다. ex) dir, tasklist, ipconfig 등

> ipconfig | ./nc localhost 5555

위와 같이 출력된 결과에서 dll 리스트만 출력하고 싶어 Operation에서 'CreateFile'을 Filtering하여 출력해보았다.

 

 

정확한 dll 리스트 출력이 아닌 것 같다. 

 

 2) netcat / Listdll

다시 nc 실행 후 pid 확인

 

Listdlls.exe -r [pid]

 

EULA

해당 PID에 대한 DLL list를 출력해준다.

* 반대로 특정 dll을 사용하고 있는 프로세스를 출력하기 위해서 아래와 같이 사용한다.

> tasklist /m gcswf32.dll

ex) -> chrome.exe에서 gcswf32.dll을 사용하고 있을 경우 출력

 

2. 레지스트리 접근 정보

 

3. 프로그램이 수정 및 생성하는 파일 목록

 

 

 

 

 

 

 

1. Live Response (Live Data 수집)

 

 라이브 시스템을 대상으로 행해지는 일련의 컴퓨터 포렌식 조사 과정, 포렌식적인 방법에 의한 증거 수집이라는 부분을 제외하면 기존 인터넷 침해사고 대응와 크게 다를 바가 없다. → 라이브 시스템에서의 휘발성 정보 수집에 초점

- 전원이 off되면 복구할 수 없기 때문에 반드시 휘발성 저장장치로부터 수집

- 하드 드라이브와 같은 비휘발성 저장장치에 자신을 복사하지 않고 곧바로 메모리로 로드되는 악성프로그램이 존재하기 때문에 인터넷 침해사고대응에서의 휘발성 정보 수집은 특히 중요.

- 내부정보의 유출사건 조사 시 그 원인이 메모리에 존재하는 악성프로그램일 경우 휘발성 정보의 수집이 중요.

1) 수집대상

2) 명령어

3) 스크립트

 

 

▷ Live Data 수집 시 참고자료

 

- RFC3227 , NIST SP800-86 : 포렌식 절차 / 대상 등을 정의

https://www.ietf.org/rfc/rfc3227.txt

http://nvlpubs.nist.gov/nistpubs/Legacy/SP/nistspecialpublication800-86.pdf

 

- NIST CFFT(Computer Forensic Tool Testing) : 포렌식 도구 검증

http://nvlpubs.nist.gov/nistpubs/Legacy/SP/nistspecialpublication800-86.pdf

 

 

□ 휘발성 데이터 수집대상

 

=> 주로 사용 할 도구 

- Sysinternals Suite(https://technet.microsoft.com/en-us/sysinternals/bb842062.aspx)

- 기본 윈도우 내장 명령어(cmd.exe, c:\window\system32)

 

 

□ 휘발성 데이터 수집 명령어 (LiveResponse Script)

: 윈도우 배치 스크립트

 

* Rem : 주석을 의미(변수는 제외)

* Echo : 배치 파일 실행 중에 실행되는 명령들을 화면에 표시할지 말지를 결정하는 명령어

  - 사용형식 : Echo On/OFF

  - OFF로 지정되면 그 후에 실행되는 모든 명령은 그 결과만 화면에 출력

  - echo 설정 명령을 내리지 않으면 기본적으로 실행되는 모든 명령 그대로 출력 Echo On 상태로 인식

  - echo 다음에 On이나 OFF 이외의 문자열이 오면 그 문자열을 있는 그대로 화면에 출력

* %1, %2 ... : 사용자가 입력한 옵션(파라미터)의 변수 이름으로, 사용자가 배치 파일 다음에 입력한 문자열과 순서대로 대응됨

  - 예) xcopy %1\*.* %2

  -> 배치 파일 실행 시 변수 %1과 %2에 해당하는 경로를 입력해주어야 함

 

▷ 시간정보

date : 날짜

time : 정보

옵션 /t : 정보 수정없이 현재 정보만 표시

> date /t & time /t

 

 

▷ 기본적인 시스템 정보수집 

[wmic](Windows Managemant Instrumentation Console)

: (wmic 실행 시 프롬프트 변경)

 

os : 대략적인 시스템 정보 전체 조회

os get [특정항복1], [특정항목2].. : 특정 항목만 조회

  installdate         : 설치날짜

  serialnumber     : 시리얼정보

  currenttimezone : 현재 시간대 정보

  localdatetime     : 시간정보

  useraccount      : 사용자 계정 정보

 

사용 예)

[SysinternalsSuite] (폴더로 경로이동)

Sysinternal 도구 실행 시 뒤에 ' /accepteula '옵션 추가      //(end user license agree)

  - 라이센스 동이 GUI 창 미표시

  - 자동 라이센스 동의(스크립트)

 

시스템 정보 확인(Sysinternals)

PsInfo : 기본 시스템 정보 수집

-d : 디스크 정보

-s : 설치 된 프로그램 정보 (안나오는것도 있음)

-h : 핫픽스 정보

 

사용 예) psinfo.exe -d -s -h

 

로그인 된 사용자 정보 (Sysinternals도구)

: 원격 데스크톱 연결 등을 통해 접속한 사용자 목록 확인

: systemtools 사이트에서 NetUsers tool 다운로드

http://www.systemtools.com/cgi-bin/download.pl?NetUsers (현재X)

 

세션 정보 확인(sysinternals)

logonsessions

=> 사용자 로그인 세션 외의 기타 서비스 관련 세션 등의 정보 확인 가능

-p : 각 세션이 실행하는 프로세스 목록 확인

 

[열려있는 파일 목록 조회]

 net file

 openfiles

 psfile 

 

[cmd에서 실행헀던 명령어 조회](해당 cmd창에서만 유효)

 doskey /history

 

[프로세스 목록 조회]

 tasklist : 내장 명령어

     /v : 상세 정보 표시

    /svc : 프로세스가 관련된 서비스 정보 조회

 pslist(sysinternals)

-t : 프로세스 트리표시

-x : 스레드 등 상세 정보 표시

 

[DLL확인]

 listdll.exe (sysinternals)

 

[핸들 확인]

 handle.exe (sysinternals)

 

[서비스 목록 조회]

 psservice.exe (sysinternals)

 

[네트워크 정보 수집]

 netstat: 네트워크에서 열려있는 포트 정보 등 조회

-a : 전체 네트워크 정보 (TCP이외의 연결)

-n : 이름 서비스 조회 중지

-o : 관련 프로세스 정보

-b : 프로세스 이름 정보 표시

 

 fport : 포트 정보 확인 (xp까지는 됐으나 현재 X)

 

 tcpvcon(sysinternals) : 네트워크 포트 정보 확인

-a : 전체 포트 정보

-n : 이름 표시 X

-c : csv형태로 표시 (분석 용이)

 

[네트워크 인터페이스 정보]

 ipconfig /all : NIC 상세 정보 출력

 getmac       : MAC Address 표시

 

[라우팅 테이블]

 netstat -r , route print : 실행 결과 동일

 

[arp 캐시 확인]

 arp -a : 현재 시스템의 arp 캐시 확인

 

[dns캐시]

 ipconfig /dispalydns : 현재 시스템 DNS 캐시확인

 

[네트워크 드라이브 확인]

 net use  : 네트워크 드라이브 연결 / 목록 확인

 

[Netbios 이름확인]

nbtstat -c : netbios 이름 / 캐시 출력

 

▷예약작업

 at           : 일회용 예약 작업 목록    ex)at 13:00 cmd.exe (현재 사용X)

 schtasks   : 작업스케줄러에 등록된 예약 작업 목록

 

 

□ 스크립트(배치파일 batch)

- .bat

test.bat

 

reuslt.txt

 

 

휘발성 데이터 수집 스크립트 작성 시 유의사항

① 스크립트 실행결과는 파일로 저장

② 스크립트 실행 시 중단되지 않도록 비 대화형 명령 수행

③ 스크립트 실행에 사용되는 파일은 전부 별도로 준비

   (윈도우 내장명령어, 기타 sysinternals 도구 등)

④ cmd.exe도 별도로 준비

 

 

참고사이트  [forensic proof]

http://forensic-proof.com/

 

 

2. 메모리 포렌식(메모리 덤프/분석)

 * 메모리 분석에서 제일 중요한 것은 숨겨진 프로세스를 찾는 것

 

* 메모리 포렌식의 필요성

 - 메모리에 직접 올라가는 악성 프로그램 등을 분석 가능

 - 인 메모리 라이브 인젝션

 - 프라이버시를 위하여 보호된 사용자 데이터들이 메모리에 올라갔을때는 암호화 해제

 

 * 활성데이터 수집(Live Data)과 메모리 포렌식의 차이점

활성데이터 수집(Live Data) 

메모리 포렌식 

 운영체제 API의 영향을 받음

메모리 자체를 가져오기 때문에 영향X 

 시행 시 마다 다른 결과가 나올 수 있음

분석 시 마다 동일한 결과 

 

 전체 메모리 덤프를 통해 분석하지 않은 부분에 대하여 추가적인 분석이 가능

 

□ 메모리 덤프

- 하드웨어 방식 / 소프트웨어 방식

 

[하드웨어 방식]

참고 -- http://www.grandideastudio.com/tribble/

* tribble : RAM 슬롯에 장착하여 메모리 덤프 수행

- 사전에 설치되어 있어야 함

- 설치가 되어있을경우 다른 영향 없이 덤프 추출 가능

- 메모리영역을 사용하지 않아 좀 더 정확한 메모리 덤프 가능, OS에 상관없이 사용 가능

 

* IEEE1394(Firewire) : DMA가 가능 (Direct Memory Access)

  - USB는 운영체제를 통해서만 메모리 접근 가능

  - 원인을 알 수 없는 시스템 크래시가 자주 발생

  => 이러한 이유로 소프트웨어 방식의 메모리 덤프 사용

     - 윈도우 API의 영향을 받을 수 있음

     - 덤프를 만드는 과정에서 시스템에 영향을 줌

 

 □ 메모리 덤프 추출 도구  ▷ 사용자가 임의로 추출한 덤프

 - dumpit http://www.downloadcrew.com/article/23854-dumpit

  : cmd창 -> y -> 메모리 덤프

 

 

 

 

- memoryze (Mandiant사에서 만든 도구)

  : C:\Program Files (x86)\MANDIANT\Memoryze\memoryDD 관리자 권한으로 실행

 

- MDD

: sourceforge.net/projects/mdd/files/mdd/mdd-1.3/mdd_1.3.exe/download?use_mirror=altushost-swe&download=&failedmirror=deac-riga.dl.sourceforge.net

> mdd.exe -o 파일명.mdd

(1.3 버전은 라이센스 문제로 사용이 안되는 듯 하다)

- FTK Imager (무료도구)

: 메모리모양 클릭 ->경로 설정 -> capture memory -> 끝

 

 

 ▷ 자동저장 덤프 (일반적으로 메모리 포렌식에서 사용하지 않음)

- OS 문제를 찾기위해 생성되는 덤프 파일

- 크래시 덤프 : 장애 발생 시 자동 저장

경로)사용자설정-고급설정-시작및복구-시스템오류-디버깅정보쓰기-커널/작은/전체 메모리 텀프

 커널 메모리 덤프

   크래시에 대한 최소 정보

 작은 메모리 덤프

   커널 메모리 부분만 저장

 전체 메모리 덤프

   물리 메모리 전체

 

- 절전모드 덤프 : 최대 절전모드에서 사용하는 덤프 c:\hiberfil.sys

  //끄기 powercfg -h off

 

- 하이버네이션 파일이용

: 물리적인 실체를 가지고 있지 않은 메모리를 말하며 논리적인 형태가 없는 메모리

: 가상주소 = 페이지 디렉터리 인덱스(10바이트) + 페이지 테이블 인덱스(10바이트) + 바이트 주소 인덱스 (12바이트) = 32바이트

 

: VMware 등 가상컴퓨터 시스템 - .vmem 파일

 

 


EPROCESS 구조체

 - 프로세스가 메모리에 존재할 때의 구조체

 - 환형 이중 링크드 리스트 형태

 

프로세스 스캔 방식

 - 리스트 워킹(List Walking)     : 링크를 따라 프로세스 검색

 - 패턴 매칭 (Pattern Matching): 실제 메모리 데이터 상 EPROCESS형태를 가진 프로세스 검색


 

□ 메모리 덤프 분석 도구

[volatility] (http://www.volatilityfoundation.org/25)

 

- volatility.exe -h : 사용법 조회 (플러그인 목록)

 

1) imageinfo :  vola.exe -f [메모리덤프파일이름] imageinfo

   메모리 덤프가 추출 된 시스템의 정보 확인  

   Suggested Profile에서 운영체제 종류 확인

   Service Pack이 여러개 검색 될 경우 아래부분의 Service Pack 항목 확인

   Win7SP1x64

2) pslist : vola.exe -f [덤프파일] --prorile=Win7SP1x64 pslist

   리스트워킹 방식으로 프로세스 검색

 

3) psscan : vola.exe -f [덤프파일] --prorile=Win7SP1x64 psscan

   패턴 매칭 방식으로 프로세스 검색

 

4) pstree : 프로세스 트리

 

5) psxview : 다양한 프로세스 검색 방식으로 비교

 

6) dlllist :

- 메모리 상에 존재하는 프로세스와 관련된 DLL리스트를 출력

--pid : 특정 PID와 관련된 DLL리스트를 출력

--offset [물리메모리주소] : psscan으로 검색된 프로세스의 DLL리스트 확인

 

7) dlldump : dlldump --dump-dir [덤프 대상 디렉토리] --pid [특정PID]

- DLL을 추출

추출 된 DLL은 virustotal

 

8) handle

- 프로세스가 접근중인 자원의 목록 확인(핸들)

 

9) getsids

- 보안식별자 확인

- 프로세스가 사용한 보안식별자 목록 환인

- 권한상승 등의 공격 확인 용도

 

10) mod시리즈

- modules, modscan, moddump

- 로드된 드라이버(*.sys)

- modules는 리스트 형태로 검색, modscna은 패턴매칭으로 검색

- moddump를 사용하여 덤프

 

11) thrdscan

- 스레드 정보 검색

 

12) 네트워크 관련 플러그인

- XP이전  : connections, conscan, sockets, sockscan

connections    연결정보를 리스트로 검색

conscan         연결정보를 스캔으로 검색

socket           열려있는 포트정보를 리스트로 검색

sockscan        열려있는 포트정보를 스캔으로 검색

- Vista 이후 : netscan

 

13) svcscan

- 서비스 관련

 

14) cmdscan

- cmd에서 입력했던 명령어

 

15) consoles

- 마지막 cmd창의 화면 상태 표시

 

16) procdump

- 특정 프로세스 덤프

--dump-dir [경로] --pid [PID]

 

 

□ 레지스트리 관련

17) hivescan : 메모리에서 레지스트리 목록 확인

18) hivelist : 레지스트리 주소와 파일 관계 매칭

19) printkey : 레지스트리에서 특정 값 출력

20) hivedump : 레지스트리 하이브 파일로 덤프

21) hashdump : 윈도우 SAM에 들어있는 계정 해쉬 추출

22) clipboard : 메모리 덤프시 클립보드 내용 출력

23) screenshot : 메모리 덤프시 대략적인 윈도우 배치

24) windows : 덤프시 열려있던 윈도우 창 정보

 

 

 

 

출처: http://ss-spring.tistory.com/17 [-]

 

 

3. 실행 파일 분석 (PE)

 

 

 

4. 레지스트리 분석

 

ㅇㄹ

5. 윈도우 아티팩트

 

반응형