Timesketch - 협력적 포렌식 타임라인 분석 치트시트
Timesketch는 협력적 포렌식 타임라인 분석을 위한 오픈소스 도구 (Google에서 제작)입니다. 조사자는 시간 기반 데이터 — Plaso로 구문 분석한 디스크/트리아주 아티팩트, 로그, CSV — 를 “스케치”에 수집한 다음, 공유 타임라인에서 이벤트를 검색, 필터링, 태그 지정, 주석 처리, 별표 표시합니다. DFIR 팀 작업을 위해 만들어졌습니다: 여러 분석가가 동일한 사건을 처리하고, 저장된 검색을 공유하며, 자동화된 분석기를 실행하여 의심스러운 활동을 찾아냅니다. Velociraptor 같은 수집 도구와 자연스럽게 조합됩니다.
배포
| 방법 | 명령어 / 참고 |
|---|
| Docker Compose (권장) | 설명서의 공식 docker-compose 배포를 따르세요 |
| 빠른 개발 설치 | 프로젝트의 deploy/docker 구성 사용 |
| 사용자 생성 | tsctl create-user <username> |
| 그룹에 추가 | tsctl add-user-to-group ... |
| 웹 UI | 시작 후 구성된 호스트/포트에서 제공 |
Timesketch는 서버 애플리케이션 (Elasticsearch/OpenSearch + PostgreSQL + 웹 UI)이며, 단일 바이너리가 아닙니다. 가장 부드러운 설정을 위해 Docker Compose로 배포하세요.
데이터 수집
| 소스 | 방법 |
|---|
| Plaso 저장소 파일 | log2timeline.py로 생성한 .plaso 파일 업로드 |
| CSV / JSONL | 필수 datetime, message, timestamp_desc 열을 포함한 업로드 |
| CLI 가져오기 | timesketch_importer -u user -p pass --host URL data.csv |
| API 가져오기 | Python 클라이언트 import_streamer 사용 |
Plaso → Timesketch
# Plaso로 이미지/트리아주에서 수퍼 타임라인 생성 후 가져오기
log2timeline.py --storage-file evidence.plaso /mnt/triage
timesketch_importer --host https://ts.example.com \
-u analyst evidence.plaso --sketch_id 1
타임라인 검색
Timesketch는 Elasticsearch/Lucene 스타일 쿼리 문법을 사용합니다.
| 쿼리 | 일치 |
|---|
powershell | 용어를 포함하는 이벤트 |
data_type:"windows:evtx:record" | 특정 파서 데이터 타입 |
message:*mimikatz* | 메시지 필드 내 와일드카드 |
tag:bad | ”bad”로 태그한 이벤트 |
datetime:[2026-06-01 TO 2026-06-02] | 시간 범위 |
event_identifier:4624 AND username:admin | 부울 조합 |
이벤트 작업
| 동작 | 설명 |
|---|
| Star | 관심사 마크 |
| Tag | 라벨 적용 (예: bad, suspicious, lateral-movement) |
| Comment | 이벤트에 조사자 메모 추가 |
| Saved search | 재사용 / 공유용 쿼리 저장 |
| Story | 저장된 검색 및 발견사항을 포함하는 내러티브 작성 |
분석기
분석기는 타임라인 패턴을 플래그하기 위해 자동으로 실행됩니다.
| 분석기 | 표시 |
|---|
| Browser search / artifacts | 관심 웹 활동 |
| Login/Windows events | 인증 이상 |
| Sigma | 이벤트에 대한 Sigma 탐지 규칙 일치 |
| Yet, threat intel feeds | 알려진 나쁜 지표 |
| Tagger | 규칙으로 자동 태그 이벤트 |
| 작업 | 방법 |
|---|
| 분석기 실행 | UI 또는 API에서 타임라인에 대해 트리거 |
| Sigma 규칙 | Sigma 분석기가 일치시킬 수 있도록 규칙 관리 |
| Aggregations | 차트 빌드 (예: 시간 경과 이벤트, 최상위 사용자) |
API / 자동화
from timesketch_api_client import client
ts = client.TimesketchApi("https://ts.example.com", "analyst", "password")
sketch = ts.get_sketch(1)
for event in sketch.explore("tag:bad", as_pandas=True).itertuples():
print(event.message)
일반적인 워크플로우
# 트리아주 출력에서 수퍼 타임라인 빌드하고 스케치에 로드
log2timeline.py --storage-file case.plaso /evidence
timesketch_importer -u analyst case.plaso --sketch_id 5
# UI에서: 의심스러운 활동을 검색하고, 발견사항에 태그를 지정하고, Story 작성
# message:*mimikatz* → tag "credential-access" → Story에 추가
Timesketch vs 기타 타임라인 도구
| 측면 | Timesketch | Plaso (log2timeline) | Splunk |
|---|
| 역할 | 협력적 분석 UI | 타임라인 생성 | SIEM/로그 분석 |
| 협력 | 첫 번째 클래스 (스케치, 스토리) | 없음 (CLI) | 팀 대시보드 |
| 입력 | Plaso, CSV, JSONL | 파일시스템/아티팩트 | 포워더/인덱스 |
| 최고 용도 | 팀 DFIR 타임라인 검토 | 타임라인 생산 | 광범위한 엔터프라이즈 로깅 |
리소스