slide-image

 

디지털포렌식

[2019-1]

#02

 

 

이번에는 라이브 포렌식에 대한 내용이다.

라이브 포렌식은 실시간 대응으로 번역되며, 현장에서 조사 대상 시스템을 접했을 경우 취해야 하는 대응 방법을 말한다.

물론 시스템의 규모, 종류, 상태에 따라 적절한 대응 방안이 필요한데, 비휘발성/휘발성 정보를 수집하는 방법이 다르며, 같은 부류의 OS라도 버전, 배포판, 서비스팩, 패치에 따라 수집하는 방법이 다르다.

따라서 적절한 대응을 위해 세부적인 시스템별 대응 방안에 대한 문서화가 필요하며, 다양한 환경에서의 조사/수집 경험이 있으면 좋고, 2명 이상의 전문가에 의한 통합적 판단이 필요하다.

 

대규모 서버같이 시스템을 강제로 종료할 수 없는 환경이 존재할 경우 실시간으로 정보를 수집해야 하므로 반드시 필요하다.

또한 시스템의 휘발성 데이터를 통해서만 얻을 수 있는 데이터가 존재하는데, 특히 사고 후에도 계속 전원이 켜져 있는 경우, 휘발성 데이터는 사건 상황을 가장 잘 표현해 줄 수 있는 정보임로 반드시 수집해야 한다.

 

일단 실시간 대응 시 시스템 종료 방식만 해도 과거와 최근이 바뀌고 있다. 과거는 서버용 시스템의 경우 시스템에서 지원하는 안전한 종료 방식을 사용했고, 개인용 시스템일 때는 시스템 본체 뒤에서 전원 코드를 바로 분리하는 식의 방법을 사용했는데, 최근에는 현장 시스템이 활성 상태인 경우(전원이 켜져 있을 때) 수집할 수 있는 최대한의 휘발성 데이터(라이브 데이터)를 수집한 후 시스템을 종료하는 추세이다. 또한 휘발성 데이터 수집 시 시스템 무결성에 대한 고려가 반드시 필요한데, 건드리면서 바뀔 수 있기 때문이다.

 

원본에 대한 영향을 최소화 해야 하므로 실시간 대응에 사용되는 도구나 저장매체 등은 원본에 최소한의 영향을 미쳐야 한다.

그러기 위해서 시스템 스크립트나 CLI(커맨드 라인) 명령을 사용한다. (윈도우는 배치 스크립트, 리눅스, 유닉스는 쉘 스크립트) 이렇게 스크립트를 사용하는 이유는, 파이썬이나 펄 같은 추가 프로그램들은 설치해야만 사용이 가능할 수도 있으며, 그렇게 되면 시스템에 흔적이 남으므로 쓰지 않는다.

마찬가지로 수집 대상 시스템의 명령을 직접 사용하지 않는데, 이 말은 포렌식 대상 시스템 내에 존재하는 프로그램이나 명령어를 사용하지 않는다는 것이다. 마찬가지로 시스템 내부 명령어는 시스템 내에 영향을 줄 수 있기 때문이다.

또한 스크립트 동작 과정에 대한 로그를 수집해야 한다.

 

그리고 휘발성 데이터를 수집할 때 휘발성 민감도를 고려해서 데이터를 수집해야 한다.

비휘발성 데이터도 고려한다고 가정하면, 일반적으로 프리패치(비휘발 데이터)를 먼저 수집하고, 그다음 네트워크 연결 정보, 물리 메모리 덤프, 프로세스 정보, 로그온 사용자 정보, 시스템 정보, 네트워크 인터페이스 정보, 자동실행, 클립보드, 작업 스케줄러, 네트워크 패킷을 수집한 후 나머지 비휘발성 데이터를 수집한다.

물리 메모리 덤프는 가장 많은 시간이 소요됨에도 불구하고, 수집 명령을 실행하면서 물리 메모리 흔적이 손상될 가능성이 많으므로, 비교적 빨리 수집해야 한다. 

 

또한 휘발성 데이터 뿐만 아니라 주요 비휘발성 데이터 수집도 필수적이다. 원래 비휘발성 데이터는 저장매체 이미징 후에 분석하는 것이 원칙이였으나, 이미징 시간이 길어지면서 우선 분석이 필요한 비휘발성 데이터를 수집해(물론 쓰기 방지 켜 놓고)서 분석 결과를 바탕으로 이미징된 저장매체의 분석 방향을 잡는 용도로 사용된다.

파일시스템 메타데이터(NTFS, MFT, FAT Dictionary Entry)나 레지스트리, 프리패치(XP이후 OS에 관리하는 메모리 체계, 시스템 자원을 파일로 저장해서 메모리에 로드하는 과정을 단축시키는 역할), 이벤트 로그, 웹 브라우저 흔적(쿠키, 히스토리), %SystemRoot%\system32\drivers\etc 폴더의 host, networks, protocol, services 파일들, %SystemRoot%\system32\config\systemprofile폴더의 ntuser.dat파일, AppData 폴더 등, ISS 로그, Setuplog.txt, Setupact.log, Netsetup.log, 작업 스케줄러 로그, 방화벽 로그 등을 조사해야 한다.

이런 비휘발성 데이터에 관한 자세한 설명은 다음 주차부터 계속할 것이다.

 

실시간 대응 시 시스템 구성 요소에 대해서도 고려해야 하는데, 실시간 대응 도구를 사용할 경우 원본 시스템 메모리에 영향이 가는 것을 유의해야 하고, 네트워크를 통한 수집 시 네트워크 정보와 관련된 데이터에 영향이 가는 것도 알아두어야 한다. 또한 프로그램 실행 시 프리패치(.pf)나 슈퍼패치(.db) 파일의 생성 및 수정이 발생하며, 도구의 실행이나 외부 저장매체 연결 등의 시스템 행위는 레지스트리를 변경할 수 있다는 것도 알아야 한다. 마지막으로 정적 라이브러리나 자체 DLL을 사용하지 않을 경우 원본 시스템의 DLL에 영향을 주며, 시스템의 로그 기록 수준에 따라 실시간 대응 시에 로그 정보에 영향을 주는 점도 유의해야 한다.

 

라이브 포렌식에 필요한 도구들은 실제 대상 시스템에서 잘 동작하는지 사전에 테스트를 해야하며, 환경에 따라 다른 사용법을 정확히 숙지해야 하고, 당연히 시스템에 영향을 덜 미치는 것을 선택해야 한다. 문서화를 할 경우 선택한 도구나 장비를 철저히 기록하고, 도구의 해쉬값이나 장비 상태 등도 기록해야 한다. 만약 시스템에 영향을 조금이라도 미칠 경우 해당 부분을 정확히 문서화해야 한다.

 

휘발성 데이터를 수집하는 방법은 시스템 스크립트를 사용하는 방법과 정적 라이브러리를 사용하는 수집 도구를 이용하는 방법, 시스템 유틸리티나 미리 검증된 유틸리티 스크립트를 사용하는 방법이 있다.

시스템 스크립트를 사용하는 방법은 시스템에 영향이 최소화되며, 쉘 환경은 시스템에서 지원하는 쉘이 아닌 별도의 프로그램으로 준비해 가야 한다. 

그리고 스크립트 기반이 아닌 별도의 실행 파일을 사용할 경우 정적 컴파일이 필요하다.

 

휘발성 데이터를 전송하는 방법은 네트워크를 통해(netcat emd) 전송하거나, 외부 저장매체(USB, CD)에 저장하여 자신이 직접 제작한 스크립트나 별도의 사용 도구를 사용해 전송하는 방법이 있다.

 

실습 환경이 윈7인데, 더 이상 실습 환경을 꾸릴 여견이 부족해서 윈10에서 해봤다.

휘발성 데이터를 수집하는 포렌식 도구들은 대부분 관리자 권한이 필요하다.

관리자 권한으로 실행하려면 cmd 명령어로는 runas /user:[관리자계정] "실행프로그램명" 의 명령어가 필요하다. 

 

주요 수집 목록으로는 사고 조사 시 수집해야 하는 시스템 시간(설정 시간대, UTC)와 수집에 소요된 시간을 기록해야 한다.

cmd 명령어로는 date /t & time /t 명령이며, YYYY-MM-DD AM/PM hh:mm 형태로 나온다.

 

그 다음 현재 시스템과 연결된 네트워크 연결 정보를 수집해야 한다. cmd 명령어로 netstat -ano 이다.

 

악의적인 프로세스나 현재 실행되고 있는 프로그램을 파악하려면, Tlist, Tasklist(윈도우 명령어), Pslist의 명령어로 프로세스 목록을 확인할 수 있다.

 

시스템에 연결된 로컬 및 원격 사용자 목록(로그온 사용자)를 알기 위해 Net Sessions(윈도우 명령어), PsLoggedOn, LogonSession명령을 이용할 수 있다.

(관리자 비밀번호 까먹었다..)

 

프로세스가 사용하는 DLL 목록을 알기 위해서는 ListDLLs 명령어를 이용할 수 있고, 프로세스가 시스템에서 열고 있는 다양한 핸들을 확인하려면 handle(윈도우 명령어)를 이용할 수 있으며, 프로세스가 원격으로 열고 있는 파일을 확인하려면 Net file(윈도우 명령어), Openfiles(윈도우 명령어), Psfile명령어를 이용하면 된다. 또한 프로세스가 열고 있는 포트를 확인하려면 netstat(윈도우 명령어), fport 명령어를 이용하면 된다.

왜인지 handle은 되지 않고(윈10이라 그런가), 나머지는 권한이 없다.

 

사용자가 쉘을 통해 실행한 명령 히스토리를 참고하고 싶으면 Doskey(윈도우 명령어)를 이용할 수 있다.

시스템에 등록된 모든 서비스 목록과 세부 정보들을 알고 싶다면 PsService 명령어를 이용한다.

시스템의 네트워크 인터페이스 정보(IP, MAC, Gateway, DNS 등)을 알고 싶다면 ipconfig(윈도우 명령어), PromiscDetect 명령어를 이용할 수 있다.

Doskey는 내용이 안나온다.

 

일부 악성코드들에 의해 악용되는 시스템에 자동으로 예약된 작업을 보려면 at(윈도우 명령어)를 이용할 수 있다.

메모리에 존재하는 클립보드 내용을 알려면 ClipBoard Viewer(clipbrd)(윈도우 명령어), Pclip 을 이용할 수 있다. 

또한 공유된 네트워크(다른 유저)의 공유 폴더나 네트워크 드라이브를 확인하려면 Net(윈도우 명령어)를 이용한다.

이들(클립보드, 공유 폴더, 드라이브)은 용의자의 마지막 행위를 파악하는 데 도움이 된다.

특정 프로세스의 메모리 영역의 해당 프로세스 프로그램 코드, 변수, DLL 목록의 다양한 부가 정보를 덤프하려면 Userdump 명령어를 이용할 수 있다.

윈 10에서는 at은 지원을 안하고, clipbrd는 존재하지 않으며, Net은 사용하려면 추가 구문이 필요했다.

 

 

마지막으로 NetBios(각각의 컴퓨터를 구분하는 이름)이름을 알기 위해서는 Nbstat(윈도우 명령어)를 이용할 수 있고, 휘발성 데이터(물리 메모리 데이터) 기반으로 표현된 정보를 덤프해야 한다.

윈10에서는 nbstat이 없었다.

 

 

그 다음에는 BITLive_win이라는 프로그램 툴을 이용해 휘발성 데이터를 수집하는 실습을 해봤어야 하는데,, 이 툴은 Win10환경이 없어서 해보지는 못했다. 다운 링크는 https://github.com/Plainbit/BITLive

 

그냥 압축만 풀면 되며, 조사 대상의 윈도우 시스템 버전을 확인 해 해당 버전 폴더의 cmd를 실행하면 된다. 

그런데 만약 명령어를 실행하면 원래 윈도우의 명령어가 실행되므로 환경변수를 설정해주어야 한다. setenv.bat(명령어 처럼 치면 됨)을 실행 해 환경변수를 설정하고, echo %path% 명령어로 환경변수 설정된 것을 확인해야 한다.

그 후 상위 폴더로 이동 cd ../해 BITLiv_win.bat을 실행하여 케이스 이름과 조사관 이름을 작성하고 나머지를 모두 y로 설정한 후에, 명령어를 이용해 수집을 시작한다.

이렇게 cmd나 명령어들을 따로 준비해가야하는 이유는 증거 수집 시 수집 대상 PC의 cmd가 악성인지 아닌지 판단이 불가하기 때문이다.

 

수집이 완료되면 최상위 폴더(주로 C:\)에 sample 폴더 밑에 nonvolatile, volatile, memory의 폴더가 생성된다. 각각 비휘발성 데이터, 휘바렁 데이터, 메모리 덤프가 저장되어 있으며, volatile 폴더에는 interface_information, logon_user_information 등등 아까 설명한 폴더가 생성되어 있고, 그 안에는 txt 파일로 수집된 비휘발성 데이터들이 생성되어 있다.

txt파일의 이름이 아까 설명한 명령어로 되어 있어서 알기 쉽다.

nonvolatile 폴더에는 이벤트 로그나 mtf, 프리패치, 레지스트리 하이브 파일 등이 수집된다.

물리 메모리에는 xml이나 img 파일으로 메모리에 관한 내용이 담겨져 있다.

 

~끝~

 

'EVI$I0N > 2019-1' 카테고리의 다른 글

[딥러닝] #02  (0) 2019.04.08
[와이어샤크] #02  (0) 2019.04.06
[웹보안] #02  (0) 2019.04.01
[딥러닝] #01  (0) 2019.03.25
[와이어샤크] #01  (0) 2019.03.25