파이썬 모듈 설치 페이지

http://www.voidspace.org.uk/python/modules.shtml


<distorm3 download page>
https://pypi.python.org/pypi/distorm3#downloads

윈도우 메모리 분석

* 메모리 덤프 수집 방법
* 운영체제 별 블루스크린(BSOD) 발생 시 덤프 남기는 법

프리패치와 슈퍼패치(Prefetch and Superfetch)

프리패치와 슈퍼패치(Prefetch and Superfetch)

Page info



    프리패치 사용의 목적

    SSD(좌측)와 HDD(우측)의 내부 모습
    프리패치의 사용 목적을 이해하기 위해 우선 SSD와 HDD의 특징에 대해 간단히 알아보자. 

    SSD(Solid State Drive)가 개발되기 이전에 거의 모든 컴퓨터에서 보조 저장 장치의 역할은 HDD(Hard Disk Drive)가 수행하였다. 각각의 내부 모습은 위 그림에서 확인할 수 있는데, 그림의 좌측은 SSD, 우측은 HDD의 내부 모습을 나타내고 있다. 

    SSD가 I/O속도를 획기적으로 개선할 수 있었던 가장 큰 이유를 간단하게 요약하면 '데이터를 읽고 쓰는 과정에서의 물리적인 움직임을 전자/전기적인 신호로 모두 대체한'것에 있다고 할 수 있다. 


    실제 HDD는 플래터(Platter)라고 하는 저장매체를 빠르게 회전시킨 후 헤드(Head)라는 I/O매개체를 원하는 곳으로 움직여 해당 위치의 데이터를 읽고 쓴다. 따라서, 플래터의 회전 속도와 헤드의 움직임 필요 여부에 따라 데이터 I/O속도가 크게 좌우되는데, 인간의 눈으로는 보기도 힘들정도의 굉장히 빠른 속도이지만 전기적인 신호로 제어되는 물리메모리(주기억장치)나 플래시메모리, SSD와는 비교가 힘들 정도로 느린 속도라 할 수 있다. 

    그럼에도 불구하고 HDD가 전세계에 보급되어 주로 사용된 이유는, 대용량의 데이터를 안정적으로 저장할 수 있도록 설계되었기 때문이다. 보조 기억 장치의 주 목적은 전원이 차단된 후에도 안정적으로 데이터를 최대한 많이 저장해 두는 것이기 때문에 HDD는 수십년간 그 역할을 부족함 없이 수행해 왔다고 보아도 무방하다. 

    다만, 극복할 수 없는 주기억장치(물리메모리)와의 속도 차이 때문에 윈도우는 스스로 운용속도를 향상시키기 위한 관리 정책들을 구성해 왔는데, 그 과정에서 프리패치의 개념도 생겨난 것이다. 

    ※ 뒷 부분에 다루겠지만, SSD의 I/O속도는 윈도우의 메모리 관리 정책이 유명무실할 만큼 빨라졌다. 이 때문에 실제로 SSD 사용시에는 프리패치의 사용이 자동으로 비활성화 되는 것을 알 수있다. 포렌식 조사관 입장에서는 아쉬운 면이 없지 않지만, 여전히 HDD의 사용이 만연하므로 관련 내용을 꼭 숙지할 수 있도록 하자.

    이제 본론으로 돌아와 프리패치에 관해서 알아보자. 



    프리패치(Prefetch)

    프리패치는 윈도우 XP 이후 (2003, Vista, 2008, 7, 8, 8.1) 의 운영체제에서 제공하는 메모리 관리 정책으로, 실행파일을 메모리로 로딩할 때의 효율을 최대한 끌어올리기 위한 목적으로 개발되었다. 

    앞서 다룬 것 처럼 데이터의 영구적인 저장을 위해 사용되는 보조기억장치는 I/O 속도는 주 기억 장치에 비하여 현저하게 느렸다(SSD의 보급 이전). 

    이에, 윈도우는 프리패치 파일에 실행 파일이 사용하는 시스템 자원을 미리 저장하였다가 윈도우 부팅 시 프리패치 파일(.pf)을 모두 메모리에 로드한 후 실제 사용할 때에는 메모리 매핑만을 수행하여 사용할 수 있도록 하여 실행 속도를 다소 향상시켰다. 

    프리패치가 저장되는 폴더 예시

    포렌식 분석가 입장에서는 프리패치가 생성되는 이유만 정확하게 파악 하였다면, 더욱 중요한 것은 프리패치 파일이 포함하는 정보를 분석하는 일 일것이다. 프리패치 파일에 저장되는 정보 중 분석에 유용한 목록은 아래와 같다. 
    • 실행 파일 이름
    • 실행 파일의 실행 횟수
    • 실행 파일의 마지막 실행 시간
    • 프리패치 파일의 생성 시간(최초 실행 시간)
    • 실행된 볼륨의 정보
    • 실행파일 실행 시 참조하는 파일의 목록
    프리패치 분석 도구 사용 예시
    프리 패치는 주로 실행파일의 실행 여부를 입증하거나, 파일 시스템 분석에서는 찾을 수 없는 실행파일 관련 정보를 확인하고자 하는 목적으로 분석된다. 

    프리패치 파일의 생성 시간은 연결되는 실행파일의 최초 실행 시간이라고도 볼 수 있으며, 프리패치 파일 내부에는 실행파일이 마지막으로 실행된 시각도 기록되어 있기 때문에, 시스템에서의 실행파일의 사용 이력을 파악하는 데에도 도움이 될 것이다. 

    또한, 프리패치 내부의 참조 목록은 경우에 따라 유용하게 활용될 수 있는데, 문서 편집 프로그램의 경우 사용한 문서파일의 경로를 확인할 수도 있고, 압축 해제 프로그램에서는 압축 해제된 파일의 목록도 확인이 가능하다. 



    부트 프리패치와 어플리케이션 프리패치, 그리고 슈퍼패치

    프리패치 파일(.pf)은 크게 부트 프리패치와 어플리케이션 프리패치 두 종류로 나뉜다. 우선 부트 프리패치는 NTOSBOOT-BOODFAAD.PF라는 이름을 가지며, 단일 파일로 존재한다. 부트 프리패치는 이름처럼 시스템이 부팅되는 속도를 조금 더 빠르게 하기 위한 것으로 부팅 시 사용되는 시스템 자원을 파악하여 한곳에 모아놓는 역할을 한다.

    어플리케이션 프리패치는 부팅 시점에 미리 사용하는 자원을 로드하여, 어플리케이션을 구동할 때 조금 더 빠르게 하는 목적이 있는데, 부트 프리패치는 어차피 부팅 시점에 자원을 로드함에 있어 한꺼번에 모아서 로드할 뿐인 것이다.

    언듯 의미가 없어보이지만, HDD에 산재해있는 파일을 각각 로드하려면 디스크 헤드의 움직임이 그만큼 많아지고, 부팅 속도가 현저하게 저하될 수밖에 없다. 이 때 부트 프리패치를 로드하는 방식을 이용하면 헤드의 움직임을 최소화할 수 있는 것이다.

    분석 관점에서 부트프리패치는, 시스템이 부팅될 때 로드되는 파일들의 목록을 확인할 수 있는 여지를 주기 때문에 유용하다. (물론 부트 프리패치 목록에 없다고하여 부팅시 로드되는 악성코드가 없다고 단정할 수 는 없다.)


    반면, 어플리케이션 프리패치는 "[실행 파일  [파일 위치에 대한 해쉬].pf"와 같은 이름으로 생성되며, 실행파일이 구동될 때 메모리에 올라간 실행코드의 일부나 전부를 저장하기 위해 사용된다. 

    이렇게 생성된 프리패치 파일은 운영체제 부팅시 미리 로드되며, 실행파일이 다시 실행될 때 HDD로의 접근을 최소화하여 구동 속도를 높히는 역할을 한다. 또한 Windows 2003, 2008과 같은 서버용 운영체제에서는 응용프로그램이 구동이 많지 않으므로 자동 비활성화되어 있다. 

    하지만 프리패치의 사용은 메모리의 페이징 아웃 기법(오래 사용되지 않는 메모리 영역을 잠시 보조저장장치로 이동시켜 메모리 공간을 확보하는 기술)에 의해 제 기능을 못할 때가 있다. 정작 운영체제가 미리 로딩해 놓은 프리패치 파일이 페이징 아웃 되버리면, 다시 응용프로그램을 실행할 때 보조 저장장치의 페이지 파일(pagefile.sys)로부터 로딩을 해야 하는 모순이 생기는 것이다. 

    이러한 문제를 개선하기 위해 Windows Vista부터 적용된 것이 슈퍼패치(Superfetch)라는 것으로 C:\Windows\prefetch 경로 내부의 .db확장자를 가지는 는 파일로 존재한다. 슈퍼패치는 사용자의 프로그램 사용 패턴(얼마나 자주, 언제, 얼마 동안)을 추가적으로 기록하여 자주 사용하는 프로그램일 경우 지속적으로 메모리 로드해 두는 것을 목적으로 존재하지만, 조사 관점에서도 더욱 유용하게 활용될 수 있다는 점을 기억하자. 


    ※Superfetch 압축 포맷관련 정보 : 

    • LZNT1 압축(RtlCompressBuffer, RtlDecumpressBuffer)
    • http://msdn.microsoft.com/en-us/library/ff552191(v=vs.85).aspx




    SSD 이슈와 시스템의 프리/슈퍼패치 사용 여부

    앞서 잠시 다뤘던 것과 같이 프리패치와 슈퍼패치는 기본적으로 보조기억장치와 주 기억장치의 속도 차이를 극복하기 위해 사용되는 기술 이므로 보조 기억 장치의 속도가 빠르다면 불필요한 기술이라고도 볼 수 있다.

    이에 따라, 윈도우 7이상의 운영체제에서는 SSD를 사용할 경우, 메모리 관리 기술을 자동으로 최적화하는 기능이 추가되었다. 실제로, SSD가 사용된 시스템을 조사하다보면 프리패치 파일이 발견되지 않아 당혹스러웠던 경험을 공유하는 분석가들이 많이 생긴것이 사실이다.

    하지만 Windows 7이상의 모든 운영체제에서 프리패치나 슈퍼패치를 비활성화 하는 것은 아닌 것으로 보인다. 운영체제의 세부적인 버전 별로 자동 설정 여부가 다른 것으로 확인되므로, 우선적으로 프리패치와 슈퍼패치의 존재 여부를 확인한 후, 존재하지 않는다면, 아래 레지스트리와 서비스의 설정 상태를 확인하여 의도적으로 삭제한 것인지 원래 존재하지 않는 것인지를 판단하여 복구 여부를 결정하는 절차로 분석을 진행할 수 있도록 하자. 

    • 관련 레지스트리 
      • HKLM\SYSTEM\ControlSet00#\Control\Session Manager\Memory Management\Prefetch Parameter\EnablePrefetcher
      • HKLM\SYSTEM\ControlSet00X\Control\Session Manager\Memory Management\Prefetch Parameter\EnableSuperfetch
      • 각각의 키의 값은 아래의 의미를 가진다.
        0 : 사용 하지 않음.
        1 : 응용프로그램 캐싱만 사용
        2 : 부트 캐싱만 사용
        3 : 응용프로그램/부트 캐싱 모두 사용(기본 설정)
        .
    • 관련 서비스
      • 아래 서비스의 동작 여부를 확인하여 
      • Event Log | Windows Event Log (Prefetch 생성에 영향)
      • Task Scheduler (Prefetch 생성에 영향)
      • Superfetch (Superfetch 생성에 영향)


    분석 대상(Target)

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

    prefetch

    Target Path(Location)
    %SystemRoot%\prefetch\*.pf
    Check List
    Check whether specific program is running or not
    And execute time
    Related Tools
    [Public] Prefetch and Superfetch(Windows)
    WinPrefetchView
    WFA

    Prefetch 파일의 경로와 관련 분석 도구




      superfetch
      Target Path(Location)
      %SystemRoot%\prefetch\*.db
      Check List
      Pattern of specific program execution
      Related Tools
      [Public] Prefetch and Superfetch(Windows)
      SuperfetchList
      SuperfetchTree
      Superfetch 파일의 경로와 관련 분석 도구

        윈도우 이벤트 로그(Windows Event Log)

        Page info




        이벤트 로그 분석


        윈도우 이벤트 로그는 윈도우의 운용과정에서 발생하는 특정 동작(이벤트)을 체계적으로 기록한 바이너리 로깅 시스템이다. 물론, 윈도우도 시스템 방화벽, 응용프로그램 관리 등에 관한 로그를 텍스트 형태로 기록하고 있지만, 이벤트 로그에서는 시스템의 전반적인 동작을 보다 종합적이고 체계적으로 기록하므로 디지털 포렌식 조사시 중요하게 살펴 보아야 할 대상이다. 

        단, 시스템 운용 로그라는 관점에서 볼 때, 이벤트 로그는 사용자의 행위 보다는 시스템의 운용상태를   있는 정보가 많다. 따라서 사건 용의자에 관한 부정조사 보다는  침해사고 대응에 효과적으로 이용되는 것이 현실이기도 하다. 

        침해사고 조사 시 이벤트 로그를 면밀하게 살펴 본다면, 악성코드가 실행된 원인을 비롯하여 유입 경로(내부 네트워크 다양한 정보를 획득할 수 있을 것이다.


        이벤트 ID

        이벤트 로그의 분석은 결국 기록된 이벤트 로그의 의미와 기록 원인을 파악하는 것이 과정이라고 볼 수 있다. 이때 각각 기록된 로그의 의미는 각 로그가 가지는 이벤트 ID로 구분할 수 있는데, 이벤트 로그 파일을 정확하게획득하여도 기록된 로그의 이벤트 ID 의미를 알지 못하면 무용지물이라고도 할 수 있다. 

        이벤트 ID에 관한 정보를 확인하기 좋은 사이트로는 eventid.net과 ultimatewindowssecurity.com 등이 있으며, 검색엔진 검색을 통해서도 많은 정보를 얻을 수 있으므로 참고하도록 하자.

        아래는 침해사고 조사시 주로 확인되는 몇가지 이벤트 ID에 관한 예시이다. 실제 조사시에는 아래 표의 이벤트 ID에만 의존해서는 안되며, 숙지하고 있는 주요 이벤트 ID에 관해 빠르게 확인한 후 사건과 관련된 키워드 검색 및 관련 시간대에 존재하는 이벤트 로그를 정밀하게 조사하는 것이 바람직하다.



        이와 같은 이유로, 개인 혹은 조직별로 주로 확인해보아야 할 이벤트 ID와 특징에 관한 분류 체계를 구성하여 정보를 꾸준히 축적한다면, 훨씬 효율적으로 경쟁력있는 조사를 수행할 수 있을것이다.

        이벤트 ID에 관한 분류 체계는 그 자체만으로도 하나의 연구주제가 될만큼 광범위한 내용을 다뤄야 하므로 여기서는 이정도로 내용을 마치겠다(필자 역시 실제 분석에 임할때, 키워드 검색과 관련 시간대 로그 확인, 구글링을 통한 ID의미 확인을 통해 결론을 도출하고 있다). 또한 Windows Vista 이상의 버전에서는 Security, System, Application 로그 외에도 수많은 로그가 존재하며, 이벤트 로그 분석의 중요성이 점차 증대되고 있음을 기억하자.


        분석 대상(Target)

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

        *.evt (XP or lower)
          Target Path(Location)
          %SystemRoot%\System32\Config\SysEvent.Evt
          %SystemRoot%\System32\Config\AppEvent.Evt
          %SystemRoot%\System32\Config\SecEvent.Evt
          Check List
          Remote Logon or access
          Account create or delete
          Service strat or end
          Process start
          System halt
          Related Tools
          elex

          윈도우 XP 이하 버전에 존재하는 이벤트 로그는 evt라는 확장자를 가지며 System, Security, Application 로그에모든 정보를 저장한다. Vista 이상의 이벤트로그에 비해 상대적으로 빈약한 정보를 제공하지만 사건의 단서를 얻기에는 충분한 로그를 기록한다. 


            *.evtx(Vista or higher)
              Target Path(Location)
              %SystemRoot%\System32\winevt\Logs\security.evtx
              %SystemRoot%\System32\winevt\Logs\system.evtx
              %SystemRoot%\System32\winevt\Logs\application.evtx
              %SystemRoot%\System32\winevt\Logs\*.evtx
              Check List
              Remote Logon or access
              Account create or delete
              Service strat or end
              Process start
              System halt
              Related Tools
              elex


              윈도우 Vista 이상 버전에서는 System, Security, Application 로그 이외에도 다양한 로그가 존재한다. Task Scheduler, RDP Connection  포렌식 관점의 유용한 이벤트를 별도의 파일로 보관하므로 이벤트로그가 존재하는 경로 내의 모든 .evtx파일을 수집하여 경우에 따라 정밀하게 조사할 필요가 있다. 
              • Task Scheduler Log Name : Microsoft-Windows-TaskScheduler%4Operational.evtx
              • RDP Connection Log Name : Microsoft-Windows-TerminalServices-RemoteConnection Manager%4Operational.evtx
              • External-Device Usage : Microsoft-Windows-DriverFrameworks-UserMode%4Operational.evtx

              Python - Snmpget (진행중)

              1. snmp

              mib : agent에 존재하고 필요한정보가 저장되어 있는 데이터베이스, 즉 agent가 정보를 저장하는 방식 MIB는 Object의 집합으로, 트리형태로 저장되어 있다.

              Object는 특정 레이아웃이 정의된 자료구조라고 보면됨
              Instance는 그 자료구조에 들어간 값을 의미
              실제구조에서 각 Object는 Object name과 OID(Object ID)를 가진다.
              일반적으로 OID를 이용하여 접근을 한다.

              Python - apache 연동 및 CGI 이용

              관련 URL  : https://blog.ayukawa.kr/archives/1342


              Python - CGI 연동 시 에러 메세지 - (8)Exec format error: exec of '파일경로/파일명.py' failed

              1.  - cgi error (8)Exec format error: exec of '파일경로/파일명.py' failed
                   
              파이썬 파일 (x.py) 상단에 아래와 같이 입력

              #!/usr/bin/env python

              관련URL  : https://stackoverflow.com/questions/41082302/ah01215-8-exec-format-error-exec-of-var-www-python-hello-py-failed-var


              2. malformed header from script. Bad header

              파이썬 파일 상단에 아래와 같이 입력

              print ("Content-Type: text/plain\n\n")

              관련 URL : http://blog.boyo.kr/entry/cgi-%EC%82%AC%EC%9A%A9%EC%8B%9C-%EC%97%90%EB%9F%AC-%EB%8C%80%EC%B2%98%EB%B2%95

              save image

              3. UnicodeEncodeError: 'ascii' codec can't encode characters in position 16-17: ordinal not in range




              최근 게시물

              Volatility 다운로드 페이지

              http://www.volatilityfoundation.org/releases