Chapter 27

Autopsy and Sleuth Kit

Autopsy is the leading open-source disk forensics platform — a GUI front-end over The Sleuth Kit (TSK) command-line tools. This chapter covers the investigation workflow in Autopsy, the most useful ingest modules, keyword search, and using TSK command-line tools when you need scriptable output.

Scenario

You have a 500 GB E01 disk image. Your goals: browse the filesystem to find attacker-dropped files, search the disk for specific keywords (C2 domain, known tool names, attacker-used file paths), recover deleted files, and extract the KAPE-equivalent artifacts for timeline analysis. Autopsy does all of this from a single case — this chapter walks through the setup and investigation workflow.

Autopsy Case Setup

  Autopsy Investigation Workflow
  ═══════════════════════════════════════════════════════════════════

  1. Launch Autopsy → New Case
     ├── Case name: CASE-2026-009
     ├── Base directory: D:\cases\
     └── Case type: Single-user (multi-user for teams)

  2. Add Data Source
     ├── Image File → select .E01 or .dd
     ├── Configure ingest modules (see list below)
     └── Autopsy begins background ingestion

  3. Ingest Modules (run at data source addition):
     ├── File Type Identification  ← detects file type from header
     ├── Hash Lookup               ← hash against NSRL, custom hash sets
     ├── Recent Activity          ← browsers, recent docs, installed programs
     ├── Keyword Search           ← text search across all files + carved
     ├── Windows Registry         ← parses registry hives automatically
     ├── Volatility (optional)    ← integrate memory analysis if .mem exists
     └── EXIF metadata            ← image geolocation and metadata

  4. Investigation:
     ├── File Browser: navigate filesystem, filter by type/date
     ├── Deleted Files: marked with X icon
     ├── Keyword Search: search across entire disk
     ├── Timeline: chronological artifact browser
     └── Reports: generate HTML or CSV report of findings

Sleuth Kit Command-Line Tools

When you need scriptable, pipeline-friendly disk analysis, TSK command-line tools give you precise control over filesystem inspection:

ToolPurposeExample
mmlsDisplay partition table / volume layoutmmls disk.dd
fsstatShow filesystem statistics (type, cluster size, MFT location)fsstat -o 2048 disk.dd
flsList files and directories (including deleted entries)fls -r -o 2048 disk.dd
istatDisplay MFT record details for a specific inodeistat -o 2048 disk.dd 25
icatExtract file content by inode numbericat -o 2048 disk.dd 25 > recovered.exe
blkcatExtract disk sectors by block numberblkcat -o 2048 disk.dd 1234 10 > sectors.bin
blklsExtract unallocated spaceblkls -e -o 2048 disk.dd > unalloc.dd
tsk_loaddbLoad image metadata into SQLite databasetsk_loaddb -d case.db disk.dd
Bashtsk-workflow.sh
IMAGE="/cases/CASE-2026-009/FINANCE-SRV01.E01"

# Step 1: Show partition table to find volume offset
mmls $IMAGE
# Output:
# DOS Partition Table
# Offset Sector: 0
# Units are in 512-byte sectors
#      Slot      Start        End          Length       Description
# 000:  Meta      0000000000   0000000000   0000000001   Primary Table (#0)
# 001:  -------   0000000000   0000002047   0000002048   Unallocated
# 002:  000:000   0000002048   0000206847   0000204800   NTFS / exFAT (0x07)  ← OS volume
# 003:  000:001   0000206848   0000976773134 0000976566287  NTFS (0x07)        ← data volume

# Note offset of the NTFS partition: 2048 sectors
OFFSET=2048

# Step 2: List all files including deleted (recursive)
fls -r -o $OFFSET -d $IMAGE > /cases/CASE-2026-009/fls-deleted.txt
# -d: only show deleted files
# -r: recursive
# Output format: d/d = directory deleted, r/r = regular file deleted

# Step 3: Find files by extension in deleted entries
grep -i "\.exe\|\.dll\|\.ps1\|\.bat\|\.zip\|\.7z" /cases/CASE-2026-009/fls-deleted.txt

# Step 4: Recover a specific deleted file by inode number
# From fls output: r/r 123456-128-1: svchost32.exe  ← inode 123456
icat -o $OFFSET $IMAGE 123456 > /cases/CASE-2026-009/recovered-svchost32.exe

# Step 5: Extract unallocated space for carving
blkls -e -o $OFFSET $IMAGE > /cases/CASE-2026-009/unallocated.dd
foremost -t exe,zip,7z -i /cases/CASE-2026-009/unallocated.dd \
    -o /cases/CASE-2026-009/carved/
Bashtsk-keyword-search.sh
# Autopsy's keyword search uses a Lucene index — fast for large images
# Via Autopsy GUI: Keyword Search panel → enter term → search

# Via command line: srch_strings (part of TSK) + grep
# Extract printable strings from image and search
srch_strings -a $IMAGE | grep -i "185.220.101.47\|evil-c2\|cobalt"

# More targeted: extract strings only from specific file types
# First get unallocated space, then search it
srch_strings /cases/CASE-2026-009/unallocated.dd | \
    grep -iP "(?:https?://|\\\\\\\\)[a-z0-9.-]+\.[a-z]{2,6}" | \
    sort -u | head -50

# Search for specific indicators in the E01 image using bulk_extractor
bulk_extractor \
    -o /cases/CASE-2026-009/bulk-output/ \
    -x jpeg_carved -x zip_carved \   # disable unnecessary carvers
    $IMAGE

# bulk_extractor creates:
#   domains.txt      — all domains found in image
#   email.txt        — all email addresses
#   ip_histogram.txt — IP addresses with frequency
#   url.txt          — all URLs
# These are goldmines for C2 infrastructure identification

Using Autopsy's Timeline

Autopsy's built-in Timeline view aggregates timestamps from all parsed artifacts into a single chronological display:

  Autopsy Timeline View
  ═══════════════════════════════════════════════════════════════════

  Sources aggregated in Autopsy Timeline:
    ├── MFT timestamps (M/A/C/B for every file)
    ├── Registry key LastWriteTime
    ├── Event log timestamps (after Windows Registry ingest)
    ├── Browser history timestamps (after Recent Activity ingest)
    └── Prefetch file timestamps

  Navigation:
    - Drag timeline left/right to navigate
    - Zoom in for hour/minute resolution
    - Click a spike to see events at that time
    - Filter by artifact type (files, registry, web activity)

  Investigation approach:
    1. Identify the approximate attack window from SIEM/alert
    2. Navigate to that time window in Autopsy Timeline
    3. Look for spikes (unusual activity density)
    4. Zoom into spikes to identify specific file operations
    5. Use "Pin to timeline" on key events to build your narrative

  Pro tip: use the cluster view (bar chart) first to find anomalous
  high-activity periods, then switch to list view within that window
  to see individual events.

Q & A

Q: Autopsy's ingest is taking 4 hours on a 500 GB image. Can you start the investigation before ingestion completes?

Yes — Autopsy allows investigation while ingest modules are still running. The File Browser is available as soon as the image is mounted (seconds after adding the data source). Deleted file detection from MFT parsing completes relatively quickly (10-20 minutes for 500 GB). Keyword search requires the search indexing module to complete before results are available — but you can navigate to specific paths and extract files manually before that. Best practice for time-constrained investigations: start targeted TSK command-line analysis (fls, icat) immediately while Autopsy ingests in the background. TSK gives you actionable results in minutes; Autopsy gives you comprehensive results in hours. Use both concurrently — TSK for immediate answers, Autopsy for thorough analysis.