본문 바로가기

컴퓨터/보안

슈퍼 타임라인 분석도구 - Timesketch + Plaso

 

0. 소개

  Timesketch는 오픈소스 웹UI 타임라인 분석 도구로, 다수의 분석가들이 한 사건에 대해 다수의 타임라인을 업로드하여 협업하여 분석이 가능하다. 주석, 태그 등의 편의 기능도 제공한다. 

 

1. Timesketch 도커 컨테이너 실행

  먼저 아래 명령으로 docker-compose를 설치한다.

 

$ sudo apt install docker-compose

 

  이후 아래 Deployment Helper 스크립트를 다운로드하고 실행 권한을 부여한다.

 

 $ curl -s -O https://raw.githubusercontent.com/google/timesketch/master/contrib/deploy_timesketch.sh
 $ chmod 755 deploy_timesketch.sh

 

  Timesketch 데이터를 저장할 디렉터리로 이동한다. Elasticsearch와 PostgreSQL 데이터가 저장될 것이므로 용량이 충분히 많아야 한다. 그리고 Deployment Helper 스크립트를 실행한다.

 

$ cd /opt
$ sudo ~/deploy_timesketch.sh

 

  이제 timesketch 디렉터리로 이동하여 docker-compose up 명령으로 도커 컨테이너를 생성하고 실행한다. 위에서 스크립트가 만들어준 docker-compose.yml 파일 설정에 따라서 필요한 도커 이미지를 받아와 실행할 것이다.

 

$ cd timesketch
$ sudo docker-compose up -d

 

  아래 명령으로 Timesketch 관련 컨테이너들이 제대로 실행중인지 확인한다.

 

$ sudo docker-compose ps
             Name                           Command               State                    Ports                  
------------------------------------------------------------------------------------------------------------------
timesketch_elasticsearch_1       /tini -- /usr/local/bin/do ...   Up      9200/tcp, 9300/tcp                      
timesketch_nginx_1               /docker-entrypoint.sh ngin ...   Up      0.0.0.0:443->443/tcp, 0.0.0.0:80->80/tcp
timesketch_postgres_1            docker-entrypoint.sh postgres    Up      5432/tcp                                
timesketch_redis_1               docker-entrypoint.sh redis ...   Up      6379/tcp                                
timesketch_timesketch-web_1      /docker-entrypoint.sh time ...   Up                                              
timesketch_timesketch-worker_1   /docker-entrypoint.sh time ...   Up 

 

  Timesketch 웹UI 접근을 위한 계정을 아래 명령을 통해 생성한다.

 

$ sudo docker-compose exec timesketch-web tsctl add_user --username [아이디] --password [패스워드]

 

  외부에서 http://[IP주소]에 접근하면 위에서 설정한 아이디/패스워드로 로그인할 수 있다.

 

2. Timesketch 타임라인에 Plaso 스토리지 파일 추가

  Plaso 사용법은 이전 글에 다뤘다. log2timeline 명령을 통해 생성된 Plaso 스토리지 파일을 Timesketch 타임라인에 추가할 수 있다. 방법은 웹UI를 이용한 방법, Timesketch 컨테이너의 psort를 이용하는 방법, Import 클라이언트를 이용하는 방법이 있다. 셋 중 하나로 Plaso 파일을 타임라인에 추가해주면 된다.

웹UI를 사용하는 방법

  웹UI에서 새 스케치 (Investigation)를 생성하여 들어가보면 타임라인 업로드 버튼이 있다. 이 버튼을 이용해 Plaso 스토리지 파일 업로드가 가능하다.

 

웹 타임라인 업로드

Timesketch 컨테이너의 psort를 사용하는 방법

=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=

  현재 최신버전인 Timesketch 20201120 버전에서는 psort로 timesketch 형식 사용 시 매핑파일 에러가 난다. 에러가 수정되면 이 부분은 삭제할 예정이다. 에러가 수정될 때까진 웹UI를 사용하는 방법을 사용해야 한다. 

 

ERROR: No such Elasticsearch mappings file: data/timesketch.mappings.

=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=

 

  Timesketch 도커 이미지는 Plaso를 포함하고 있다. 따라서 psort 명령의 출력 형식으로 timesketch를 지정할 수 있다. 아래는 실행중인 Timesketch 컨테이너의 /tmp 디렉터리에 test.plaso를 복사하고, psort를 이용해 타임라인을 추가하는 명령이다. 

 

$ sudo docker cp "/tmp/test.plaso" "timesketch_timesketch-web_1:/tmp"
$ sudo docker exec -it "timesketch_timesketch-web_1" psort.py -o timesketch --name "test" /tmp/test.plaso
$ sudo docker exec -it "timesketch_timesketch-web_1" rm /tmp/test.plaso

 

Timesketch Import Client를 사용하는 방법

=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=

  현재 최신 버전인 Timesketch Import Client 20210215 버전에서는 업로드 시 마지막 chunk를 업로드하면서 사이즈 에러가 난다. 에러가 수정되면 이 부분은 삭제할 예정이다.  에러가 수정될 때까진 웹UI를 사용하는 방법을 사용해야 한다.

 

RuntimeError: Error uploading data chunk: 16/17. Status code: 400 - BAD REQUEST {"message": "Unable to save file correctly, inconsistent file size (66330624 but should have been 1744052224)"

=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=

 

  Timesketch는 파일을 import할 수 있는 클라이언트를 제공한다. 아래 명령으로 클라이언트를 설치해주면 timesketch_importer 명령을 사용할 수 있게 된다.

 

$ sudo pip3 install timesketch-import-client

 

  아래와 같이 timesketch_importer 명령에 plaso 파일을 지정해주면, 처음 실행 시 서버 주소, 인증방법(user/pass 또는 oauth), 타임라인 이름 등을 설정하는 프롬프트가 뜬다. 세팅에 따라 적절히 입력해준다. 서버 URL의 경우 http://나 https://를 꼭 붙여줘야 한다.

 

$ timesketch_importer /tmp/test.plaso 
[2021-02-23 00:32:40,243] timesketch_api.config_assistance/WARNING No timesketch section in the config
What is the value for <host_uri> (URL of the Timesketch server): http://x.x.x.x 
What is the value for <auth_mode> (Authentication mode, valid choices are: "userpass" (user/pass) or "oauth"): userpass
What is the value for <username> (The username of the Timesketch user): [아이디]
Password for user [아이디] [**] 
[2021-02-23 00:33:15,670] timesketch_api.crypto_client/INFO File does not exist, creating it.
[2021-02-23 00:33:15,747] timesketch_api.crypto_client/INFO Credentials saved to: /home/user/.timesketch.token
[2021-02-23 00:33:15,748] timesketch_importer.importer_frontend/INFO Creating a client.
[2021-02-23 00:33:16,253] timesketch_importer.importer_frontend/INFO Client created.
[2021-02-23 00:33:16,253] timesketch_importer.importer_frontend/INFO Saving TS config.
What is the timeline name [test]: test
[2021-02-23 00:33:24,497] timesketch_importer.importer_frontend/INFO Uploading file.

 

  만약 위의 내용을 잘못 입력한 경우, 설정 파일인 ~/.timesketchrc 파일과 ~/.timesketch.token 파일을 삭제하고 다시 timesketch_importer 명령어를 실행해주면 새로운 프롬프트가 뜬다.

 

$ cat ~/.timesketchrc
[timesketch]
host_uri = http://x.x.x.x
username = [아이디]
verify = True
client_id = 
client_secret = 
auth_mode = userpass
cred_key = [CRED_KEY_STRING]

 

 

참고자료

Install Timesketch with Docker