2014년 8월 30일 토요일

물리 메모리 수집(Physical Memory Acquisition)

Page info



물리 메모리 수집(Physical Memory Acquisition)



물리 메모리(RAM)는 컴퓨터의 구성 요소 기억 장치에 상응하는 요소이다. 지속적인 전력 공급을 요구하여 시스템 전원을 내리면 보관하던 데이터가 사라지기 때문에 휘발성 메모리라고도 한다. 


주 기억 장치는 컴퓨터의 필수 요소로, 데이터를 읽고 쓰는 속도가 빨라시스템 운용에 중요한 역할을 하고 성능에도 큰 영향을 미친다. 

실제로, 중앙 처리 장치(CPU)에서 연산되는 모든 데이터는  기억 장치를 거쳐 시스템에 저장되거나 결과를 사용자에게 전달한다. 사실상 운영체제 부팅 시, 운용에 필요한 모든 데이터는 물리 메모리에 로딩된다고 보는 것이 맞다. 


물리 메모리 수집의 필요성


휘발성 데이터 수집에서 다룬 내용과 같이 시스템 명령으로 추출하는 휘발성 데이터도 결국은 물리 메모리에 로딩된 정보를 가공하여 보여주는 것이 뿐이다. 

하지만, 시스템 명령는 사용의 편리성만큼 추출할 수 잇는 정보가 매우 한정적이라는 단점이 있다. 반면, 물리 메모리에는 시스템 운용정보 이외에도 웹 접속 로그인 비밀번호 같은 복호화된 데이터나 은닉된 프로세스처럼 커널영역의 조작된 정보 등, 조사에 유용한 정보를 다수 포함하고 있기에 꼭 수집하여 분석할 필요가 있는 것이다. 


시스템 유틸리티를 이용한 수집 vs 물리 메모리에서의 정보 추출

디지털 포렌식 초기에는 물리메모리에 대한 분석 기술이 부족하여, 시스템 유틸리티를 이용하여 데이터를 수집하지 않으면 원활한 활성 시스템 분석이 이루어지지 않았다. 
하지만 최근에는 꾸준한 연구 결과 활성 시스템 조사에 필요한 거의 대부분의 정보를 물리메모리에서 추출 가능 수준에 이르렀다. 

결론적으로, 손쉽게 수집하여 빠르게 시스템 활성 정보를 확인하기 위한 경우에는 시스템 유틸리티를 이용하는 것이 옳다. , 가능할 경우 물리 메모리 덤프를 우선적으로 수집하여 향후 분석에 활용하는 것이 조사에 도움이 된다는 점을 기억하자. 

페이지에서는, 물리 메모리에 저장된 데이터에 관련된 데이터를 수집하는 방법에 관한 정보를 기술하고자 한다. 


분석 대상(Target)

※ 아래의 내용은 PFP-List와 연동되는 정보로, PFP에서 확인 및 분석에 직접적인 활용이 가능합니다.
   (PFP ManualPFP DownloadPFP home)


운영체제의 물리 메모리 오브젝트(Physical Memory object)
Target Path(Location)
Physical Memory object
Check List
Physical memory dump image
Related Tools
[Public] Memory Acquisition

물리 메모리에 포함된 내용을 획득하는 가장 일반적인 방법은, 시스템 운영체제에서 관리하고 있는 물리 메모리 관련 오브젝트에 접근하여 내용을 복사(덤프)하는 것이다. 

시스템의 하위 레벨로 접근을 해야 가능한 기술로, 다소 구현이 어려울 수 있지만 잘 만들어져 제공되는 도구(PFP의 [Public] Memory Acquisition 참고)들이 많이 존재하므로 잘 활용하면 어렵지 않게 물리 메모리의 내용을 획득할 수 있다. 

단, Swap 파일(페이지 파일)에 저장된 내용은 획득할 수 없으므로, 별도로 획득할 필요가 있다. 

Swap파일은 메모리 공간을 효율적으로 사용하기 위해 자주 사용되지 않는 주기억 장치의 내용 보조 기억 장치로 옮겨놓을 사용하는 파일이다.
(파일 위치, 아래 페이지 파일 참고)




VMWare 가상 메모리(VMWare virtual memory file)
Target Path(Location)
%VmwareFolder%\*.vmem
Check List
*.vmem files
Related Tools
[Public] Raw Copy

VMware 이미지가 조사 대상인 경우에, 가상 환경으로 구동된 운영체제는 물리 메모리 영역을 vmem이라는 확장자로 하여 파일로 관리한다. 

*.vmem파일을 획득하면 VMWare 시스템을 suspend하였을 때의 물리메모리 내용을 획득할 수 있다.




페이지 파일(Pagefile)
Target Path(Location)
%SystemDrive%\pagefile.sys
Check List
pagefile.sys
Related Tools
[Public] Raw Copy

Windows에서 사용하는 Swap 파일이다. 물리메모리 덤프와 연계하여 Swap out된 내용까지 고려하여 분석을 진행하는 것이 가장 이상적인 물리 메모리 영역의 분석 방법이다. 
(아직은 페이지 파일을 연계한 분석이 원활하게 진행되는 상황은 아니지만, 꾸준한 연구가 이루어지고 있으므로, 향후의 정밀한 연구 결과를 기대해 보자)



하이버네이션(Hibernation)
Target Path(Location)
%SystemDrive%\hiberfil.sys
Check List
Hibernation file
Related Tools
Hibr2Bin
[Public] Raw Copy

하이버네이션 파일은 시스템이 최대 절전 모드로 전환될 생성된다. 향후 복원을 위해 메모리의 내용을 상세히 기록하므로, 전환 당시 상황에 관한 많은 내용을 얻을 수 있다. 

단, 조사하는 대상은 시스템의 가장 최근 최대 절전 모드 직전의 내용인 점을 구분할 필요가 있다. 특정 도구(ex.Hibr2Bin)를 이용하여 물리 메모리 이미지로 변환이 가능하므로, 변환 후 물리 메모리의 분석 기법을 이용하여 정밀하게 조사할 수 있다. 




크래시 덤프(Crash dump)
Target Path(Location)
%SystemRoot%\Minidump\*.dmp
Check List
Crash dump file
Related Tools
[Public] Raw Copy



크래시 덤프(Crash Dump)는 시스템 커널에서 충돌이 발생한 경우 BSOD(Blue Screen Of Death) 함께 생성되는 메모리 덤프 파일이다. 

시스템에 크래시 덤프가 존재할 시, 충돌 당시의 시스템 상황을 살필  있는 정보를 담고 있을 가능성이 크기 때문에 가급적 수집하는 것이 옳다. 

다만, 이와 같은 분석은 보통 정밀 조사 단계에서 진행되므로, 활성 시스템 분석 절차에는 적합하지 않다는 것을 알아두자. 



관련 문서 

    2014년 8월 26일 화요일

    휘발성 데이터 수집(Volatile Data Acquisition)

    Page info



    휘발성 데이터(Volatile Data)

    휘발성 데이터란 전원의 공급이 끊기거나 시간이 흐름에 따라 자연히 저장 공간에서 사라지는 데이터로, 말 그대로 휘발성을 가진 디지털 데이터를 의미하는 용어다.  
    일반적으로 디지털 포렌식에서는 컴퓨터가 켜져 있을 , 보조기억장치에 해당하는 물리 메모리(RAM) 로딩되어 있는 데이터를 가리켜 휘발성 데이터라 한다

    따라서, 디지털 포렌식에서 "휘발성 데이터의 조사는 곧, 물리 메모리 내용의 조사" 보아도 무방하다.


    휘발성 데이터 수집 방법의 종류

    휘발성 데이터를 수집하는 방법에는 시스템 내장 명령 혹은 시스템 API로 구현된 도구를 통하여 원하는 정보를 수집 하는 방법과 물리 메모리 전체의 내용을 수집하는 방법이 있다. 이때, 물리 메모리를 수집한 경우에는 메모리의 구조를 분석하여 원하는 정보를 채득하는 과정을 더해야 한다. 

     페이지에서 다루고자 하는 주된 내용은 시스템 내장 명령을 이용한 방법이므로 물리 메모리 전체를 수집하는 방법에 대해서는 PFP Document에서 Physical Memory Acquisition의 내용을 참고하도록 하자. 


    휘발성 데이터의 포렌식적 의미

    휘발성 데이터는 디지털 포렌식 조사에서 조사 당시의 시스템 상태를 정확하게 파악할 있게 하는데 특히 도움을 주는 데이터이다. 

    조사 시점에 연결된 네트워크, 조사 시점에 동작 중인 프로세스를 비롯한 각종 사용중인 운영체제의 자원 등은 현장에서 휘발성 데이터를 수집하지 않고는 얻어낼 수 없는 귀한 정보들이다. 

    그 밖에도 암호화 데이터도 사용 직전에는 복호화 상태로 존재하게 되는 것처럼 물리 메모리에서는 평문(보호 해제된 혹은 복호화된) 상태의 데이터를 취득할 수 있는 가능성이 매우 높다. 

    본 포스트의 내용은 물리 메모리의 수집과 분석에 대한 것과는 별개이지만, 휘발성 데이터라는 큰 시각에서 유사한 내용이기에 짚어 보았다. 

    좀 더 넓은 관점에서 휘발성 데이터 수집의 의미는, 상위 포스트(초기 대응활성 시스템 포렌식)에서 확인 가능하다. 


    이어지는 내용에서는 시스템 명령을 통해 수집하는 휘발성 데이터의 목록과 관련 명령을 확인할 수 있다.

    덧붙여, PFP를 통해서도 시스템 내장명령을 구동시킬 수 있지만, 가급적 관련 명령을 운영체제별로 모아 미리 스크립트, 배치 파일등을 구성하여 현장에서 활용하길 권장한다. 


    분석 대상(Target)

    ※ 아래의 내용은 PFP-List와 연동되는 정보로, PFP에서 확인 및 분석에 직접적인 활용이 가능합니다.
       (PFP ManualPFP Download, PFP home)


    일괄 수집(Comprehensive collection)
    Check List
    System time
    Network connection
    Process List
    Logon users
    Loaded DLL List
    Handles
    Remote Open files
    Open port and mapped process
    Command history
    Service List
    NIC information
    Routing table
    Schedule
    Clipboard
    Network drive and shared folder
    Netbios
    Process dump
    Related Tools
    [Public] Live Acquisition(Volatile)

    휘발성 데이터를 수집할 때에는 일반적으로 분석에 필요한 데이터를 한번에 일괄 수집할 수 있는 자동화 스크립트나 도구를 이용한다. 보통은 조사관이 상황에 알맞게 배치 파일을 만들어 사용하기도 하지만, 최근에는 잘 개발된 .무료도구들이 많이 있으므로, 이를 활용하는 것도 권장할만 하다. 

    스스로 배치파일을 만들어 사용하고자 경우, 위 표의 체크 리스트의 내용은 가급적 반드시 수집하는 것이 조사에 도움이 되므로 고려하도록 하자. 

    체크리스트의 정보를 수집하는 명령은 본 페이지의 이어지는 내용에서 확인 가능하다. 


    주의할 점은, 배치파일 작성시 시스템 유틸리티는 가급적 대상 시스템의 것을 사용하지 않고,미리 준비해간 유틸리티를 사용하는 것이 바람직하다는 것이다. 

    조사 대상 시스템의 명령어(유틸리티) 이미 공격자, 용의자에 의해 변조되었을 있기 때문이다. 

    따라서, 미리 버전의 운영체제에서 시스템 명령 유틸리티를 수집하여 보관하는 것이 좋으며, PFP에서 직접 명령을 수행하여 결과를 확인하는 것은 부득이 도구를 준비하지 못하였거나 명령이 출력하는 내용 포맷을 확인하기 위해서 사용하는 것이 좋다. 



      시스템 기본 정보(System information)
      Check List
      Product name(OS name)
      Owner
      Organization
      Product ID
      BuildLab
      Install date
      System Root
      Related Tools
      systeminfo
      wmic os get installdate
      wmic os get currenttimezone
      wmic os get serialnumber

      시스템 기본 정보를 취득하여, 발생 가능한 취약점에 대한 정보 등을 확인하는데 사용한다. 또한, 시스템의 정보는, 케이스 구성의 가장 기본적인 정보이며 분석 대상이 되는 모든 데이터에 대한 분석 기준을 제공하기도 하므로반드시 수집하는 것이 옳다. 



      시스템 설정 시간(System time)

      Check List
      Current System Time
      Related Tools
      date /t
      time /t

      향후 시간 관계 분석을 위하여 수집 당시의 시간을 시스템에서 채취해야 한다. 초기대응을 진행하는 시간도 물론 중요하지만, 당시 시스템에 설정된 시간을 알아야 추후 분석된 결과물의 시간관계를 정확하게 파악할 수 있으므로, 어떠한 사고 유형을 막론하고 가장 중요한 정보라 할 수 있다. 
      (매우 중요한 정보이므로, 수집 과정에서도 시간은 상황별로 틈틈히 기록할 수 있을만큼 기록하는 것이 추후, 조사에 도움이 된다.)



      네트워크 연결 정보(Network connection)

      Check List
      Network connection information in same network
      Related Tools
      netstat -nao

      현재 시스템과 연결된 네트워크 정보 수집하는 부분이며, 특히 침해사고 조사에 유용하다. 



      프로세스 목록(Process List)

      Check List
      Live Process list
      Related Tools
      tlist -vcstm
      tasklist -v  (XP 이후 tlist 대신 tasklist 사용)
      pslist

      시스템에 동작 중인 프로세스 목록을 수집하는 것은 추후, 악의적인 프로세스 동작 여나 현재 실행되고 있는 프로그램 파악하여 증거로 사용하는데 필요하다. 



      로그온 사용자(Logon users)

      Check List
      Current logged on user
      Related Tools
      Net sessions
      Psloggedon
      logonsessions

      시스템에 연결된 로컬 및 원격 사용자 목록 역시 사건에 따라 필요한 경우가 있다. 




      로딩된 DLL 목록(Loaded DLL List)

      Check List
      Loaded DLL List in target system(operation system)
      Related Tools
      listdlls %TEXT_PROCNAME%
      listdlls %NUM_PID%

      프로세스가 사용하는 DLL 목록은 비정상적으로 로드된 DLL이나, 당시 실제로 프로세스가 로딩하여 사용하고 있던 DLL의 정보를 알 수 있도록 하여 조사에 도움을 준다. 



      핸들(Handles)

      Check List
      Any opened handle by specific process
      Related Tools
      handle -a -p %TEXT_PROCNAME%
      handle -a -p %NUM_PID%

      프로세스가 열고 있는 운영체제 핸들을 확인하는 것은 프로세스의 정상 여부와 은닉된 기능을 파악하는데 용이하다. (자주 확인되는 목록은 아니지만, 수집해둘 경우 보조자료로 활용되는 경우가 간혹 있다)



      열린 파일(Open files)

      Check List
      Opened file by live process
      Related Tools
      net file(외부 사용자가 열고 있는 파일 목록)
      openfiles
      psfile [\\RemoteComputer [-u Username [-p Password]]] [[Id | path] [-c]]
      (원격에서 열린 파일 목록)

      프로세스고 열고 있는 파일의 목록은 해당 프로세스에 의해 생성, 수정, 삭제가 가능한 파일의 목록을 확인하기 위해 필요하다. 



      열린 포트와 프로세스(Open port and mapped process)

      Check List
      Listening port by live process
      Related Tools
      netstat -anob
      fport(Windows XP and lower only)

      열린 포트 목록과 해당 포트를 열고 있는 프로세스의 목록은 프로세스가 열고 있는 포트 확인하여, 시스템에서 진행중인 악성 행위 및 관련 프로세스를 확인하는데 도움을 준다. 



      명령어 히스토리(Command history)

      Check List
      Transmitted command from current active terminal
      Related Tools
      doskey /history

      명령 히스토리는 사용자가 쉘을 통해 실행한 명령의 내용을 저장하고 있으므로, 실행중인 터미널이 존재한다면, 반드시 수집하는 것이 옳다. 



      서비스 목록(Service List)

      Check List
      Installed all service in target system
      Related Tools
      psservice
      net start
      sc qc %TEXT_service_name%

      서비스의 경우 설정에 따라 시스템 부팅 자동을 실행할 있고, SYSTEM권한(시스템 관리자 권한보다도 상위 권한)으로 실행되므로 취약점이 존재하는 시스템에서 악성코드가 즐겨 사용한다. 따라서 침해사고 분석 시에 반드시 수집할 필요가 있고, 일반적인 조사에서도 시스템 부팅시 실행되는 프로세스의 정보를 파악하기 위해 필요한 경우가 종종 있다. 




      네트워크 카드 정보(NIC information)

      Check List
      IP address
      Mac address
      And other network interface card information
      Related Tools
      Related tools
      ipconfig /all
      promiscdetect

      네트워크 인터페이스 정보는 시스템 기본정보와 마찬가지로, 네트워크 통신을 위한 조사 대상 시스템의 정보를 알 수 있으므로, 조사의 기준이 되는 경우가 많다. 



      라우팅 테이블(Routing table)

      Check List
      System Routing table list
      Related Tools
      netstat -r

      내부 라우팅 테이블은 동일 네트워크에서의 맥 주소를 기반한 연결 상태를 나타내므로, 물리적인 네트워크 연결정보 네트워크 구성을 파악하기에 용이한 정보이다. 



      작업 스케쥴러(Schedule)

      Check List
      Scheduled command in target system
      Related Tools
      at
      schtasks(in win8 and more over)

      작업 스케쥴러 목록에서는 시스템에서 자동으로 수행하도록 예약되어 있는 작업 목록 확인할 수 있으므로 침해사고 조사시 반드시 확인해 보아야 한다. 

      특히, 작업 스케쥴러를 통해 실행되는 프로세스는 SYSTEM권한으로 실행되므로 악성코드에 의해 악용되는 경우가 많다. 



      클립보드(Clipboard)

      Check List
      Data in clipboard
      Related Tools
      clipbrd(XP 이하 버전)
      pclip

      클립보드에 복사되어 있는 내용은 조사 현장에 신속 대응했을 경우 용의자의 마지막 행위를 파악하는데 도움이 된다. 



      네트워크 공유 목록(Network drive and shared folder)

      Check List
      Shared network folder and drive
      Related Tools
      net use

      분석 대상 시스템이 공유한 네트워크 드라이브와 공유 폴더를 통해 아래과 같은 정보의 확인이 가능하다. 
      • 공유된 네트워크(다른 사용자)의 폴더나 드라이브 확인
      • 네트워크 공유를 통한 취약점 발생 가능성 파악
      • 정보 유출의 통로로 활용되었을 가능성 추측 다양하게 활용



      바이오스(Netbios)

      Check List
      Shared network folder and drive
      Related Tools
      nbtstat -c

      NET BIOS 정보는 동일 네트워크 상의 다른 시스템이 공유한 네트워크 드라이브와 공유 폴더를 알려주기 때문에, 네트워크 공유 목록과 유사하게 파일의 유출이나 악성코드의 유입 가능성에 대해 따져볼 수 있는 근거가 될 수 있다. 



      프로세스 덤프(Process dump)

      Check List
      process op code
      process variable
      process dll list
      Process handle list
      Related Tools
      userdump %NUM_PID% %FILE_DUMP_FILE_NAME%

      특정 프로세스의 메모리 영역은 다양한 부가 정보 포함한다. (해당 프로세스의 프로그램 코드, 사용중인, 복호화된 암호, 변수, DLL 목록 등)



      관련 문서