본문 바로가기

컴퓨터/보안

슈퍼 타임라인 분석도구 - Plaso (도커 기반)

0. 소개

  Plaso는 여러 형식의 로그를 한번에 묶어서 시간대별로 정렬해주는 도구로, 타임라인 분석을 할 때 유용한 아주 강력한 도구다. 시스템 상의 로그가 분석가가 예상치 못한 곳에 남는 것도 많기 때문에, 임라인 분석도구에서 생각지 못한 유용한 정보를 얻는 경우도 많다.

  과거 Plaso 버전은 '1.5.1'과 같은 식으로 버전명을 붙였으나, 최근 나오는 Plaso는 '20210213'과 같이 날짜를 버전으로 사용한다. 그리고 이전에는 윈도우 독립 실행 바이너리를 제공했는데, 최근엔 Python 소스코드나 도커 이미지 형태로 제공된다. 도커로 사용하는 방식이 간편하기 때문에 여기에서는 도커를 이용한 방법을 소개한다.

 

  먼저 docker가 설치되어 있어야 한다. 아래의 매뉴얼에 따라 docker 설치를 진행한다.

  docs.docker.com/engine/install/ubuntu/

 

Install Docker Engine on Ubuntu

 

docs.docker.com

 

  이후 아래 명령으로 Plaso 도커 이미지를 받아온다.

 

$ sudo -s
$ docker pull log2timeline/plaso

 

1. Plaso 구성

  Plaso는 아래의 도구들로 구성돼 있다. 기본적으로 log2timeline을 이용해 로그 또는 디스크 이미지 파일을 'Plaso 스토리지 파일'이라는 단일 파일로 만든 후, psort를 이용해 Plaso 스토리지 파일을 시간대별로 정렬하여 결과 파일로 만든다.  이 두 가지 과정을 한번에 할 수 있는 psteal이라는 명령어도 제공한다.

image_export

  image_export는 확장자, 파일시그니처, 파일생성날짜 등 특정 조건에 맞는 파일을 이미지 파일에서 추출해주는 도구다.

log2timeline

  log2timeline은 로그 파일, 디렉터리, 스토리지 미디어 이미지, 장치에서 이벤트를 추출하는 도구다. 이 도구 실행 결과로 Plaso 스토리지 파일이 생성되며, 이 파일은 pinfo와 psort로 분석 가능하다.

pinfo

  pinfo는 Plaso 스토리지 파일 내용에 대한 정보를 보여주는 도구다.

psort

  psort는 Plaso 스토리지 파일의 후처리(필터링, 정렬, 분석)를 하는 도구다.

psteal

  psteal은 log2timeline과 psort를 한번에 하는 도구다.

 

2. 타임라인 만들기

log2timeline

  아래는 로컬 /tmp 디렉터리에 있는 test.E01 이미지 파일에 대한 이벤트를 추출하여 결과 파일을 test.plaso로 저장하는 명령이다. -z 옵션은 타임존 설정이며 여기서는 한국 시간(KST)으로 설정해주었다. 설정값이 없으면 디폴트는 UTC+0 시간으로 이벤트를 추출한다.

 

$ docker run -v /tmp:/data log2timeline/plaso log2timeline -z ROK /data/test.plaso /data/test.E01

psort

  이제 psort를 통해 test.plaso 파일을 정렬해줘야 한다. psort의 출력 형식은 아래 명령어로 확인 가능하다. Disabled Output Modules에 timesketch 형식은 Timesketch를 위한 옵션이다. log2timeline/plaso 도커 이미지에는 Timesketch가 없으므로 비활성화돼있다.

 

$ docker run log2timeline/plaso psort -o list

******************************** Output Modules ********************************
      Name : Description
--------------------------------------------------------------------------------
   dynamic : Dynamic selection of fields for a separated value output format.
   elastic : Saves the events into an Elasticsearch database.
elastic_ts : Saves the events into an Elasticsearch database for use with
             Timesketch.
      json : Saves the events into a JSON format.
 json_line : Saves the events into a JSON line format.
       kml : Saves events with geography data into a KML format.
    l2tcsv : CSV format used by legacy log2timeline, with 17 fixed fields.
    l2ttln : Extended TLN 7 field | delimited output.
      null : Output module that does not output anything.
     rawpy : native (or "raw") Python output.
       tln : TLN 5 field | delimited output.
      xlsx : Excel Spreadsheet (XLSX) output
--------------------------------------------------------------------------------

*************************** Disabled Output Modules ****************************
      Name : Description
--------------------------------------------------------------------------------
timesketch : Create a Timesketch timeline.
--------------------------------------------------------------------------------

 

  결과값을 무려 17개 필드나 보여주는 l2tcsv 형식으로 출력을 해보자. 아래 명령을 실행하면 test.palso 내에 있는 이벤트를 test.csv 파일에 시간순으로 정렬하여 출력해준다. 필드 내용은 여기에서 참고하면 된다.

 

$ docker run -v /tmp:/data log2timeline/plaso psort -o l2tcsv --output-time-zone ROK -w /data/test.csv /data/test.plaso

 

  csv나 xlsx 파일로 출력을 하면 엑셀로 분석하기 용이하지만 GB 단위의 대용량의 파일은 엑셀로 열 수 없다. 분석할 시간대를 정확하게 알고 있다면 psort의 --slice 옵션을 이용해 특정 시간의 앞뒤의 로그만 출력하는 방법도 있지만, 이 경우엔 예상치 못한 시간대의 중요한 로그를 놓치기 쉽다. 그렇기 때문에 Elasticsearch를 구축하여 사용하거나 Timesketch를 이용하는 방법 등 다른 방법을 고려해야한다. 

 

참고자료

Plaso in a Docker Container

Plaso User Manual