Skip to main content
COSMICBYTEZLABS
NewsSecurityHOWTOsToolsStudyTraining
ProjectsChecklistsAI RankingsNewsletterStatusTagsAbout
Subscribe

Press Enter to search or Esc to close

News
Security
HOWTOs
Tools
Study
Training
Projects
Checklists
AI Rankings
Newsletter
Status
Tags
About
RSS Feed
Reading List
Subscribe

Stay in the Loop

Get the latest security alerts, tutorials, and tech insights delivered to your inbox.

Subscribe NowFree forever. No spam.
COSMICBYTEZLABS

Your trusted source for IT intelligence, cybersecurity insights, and hands-on technical guides.

429+ Articles
114+ Guides

CONTENT

  • Latest News
  • Security Alerts
  • HOWTOs
  • Projects
  • Exam Prep

RESOURCES

  • Search
  • Browse Tags
  • Newsletter Archive
  • Reading List
  • RSS Feed

COMPANY

  • About Us
  • Contact
  • Privacy Policy
  • Terms of Service

© 2026 CosmicBytez Labs. All rights reserved.

System Status: Operational
  1. Home
  2. Projects
  3. Build a Dedicated OSINT Investigation Workstation
Build a Dedicated OSINT Investigation Workstation
PROJECTIntermediate

Build a Dedicated OSINT Investigation Workstation

Set up a purpose-built OSINT workstation with Trace Labs VM, sock puppet management, browser isolation, VPN routing, and automated investigation workflows...

Dylan H.

Security Engineer

February 7, 2026
7 min read
4-5 hours

Tools & Technologies

VMware/VirtualBoxTrace Labs VMFirefoxVPNMaltego

Introduction

Professional OSINT investigations require operational security, tool standardization, and clear separation from your personal identity. This project builds a dedicated workstation that keeps your investigations organized, your identity protected, and your tools ready.

What You'll Build

  • Isolated investigation VM (Trace Labs OS or custom Ubuntu)
  • Sock puppet identity management system
  • Browser profile isolation for multiple investigations
  • VPN routing through investigation-specific exit nodes
  • Automated screenshot and evidence collection
  • Structured investigation workflow

Who This Is For

  • Threat intelligence analysts
  • Investigators performing background research
  • Security researchers tracking threat actors
  • Missing persons search volunteers (Trace Labs)

Prerequisites

Hardware Requirements

ComponentMinimumRecommended
RAM8 GB16 GB
CPU2 cores4 cores
Storage50 GB free100 GB SSD
Display1080pDual monitors recommended

Architecture Overview

┌─────────────────────────────────────────────────────────────┐
│                    Host Machine                              │
│                    (Your daily driver)                       │
│                                                             │
│  ┌────────────────────────────────────────────────────────┐ │
│  │              OSINT Investigation VM                    │ │
│  │                                                        │ │
│  │  ┌──────────┐  ┌──────────┐  ┌──────────┐            │ │
│  │  │ Firefox  │  │ Firefox  │  │ Firefox  │            │ │
│  │  │Profile A │  │Profile B │  │Profile C │            │ │
│  │  │(Case #1) │  │(Case #2) │  │(Sock     │            │ │
│  │  │          │  │          │  │ Puppet)  │            │ │
│  │  └──────────┘  └──────────┘  └──────────┘            │ │
│  │                                                        │ │
│  │  ┌──────────┐  ┌──────────┐  ┌──────────┐            │ │
│  │  │  Maltego │  │SpiderFoot│  │ Recon-ng │            │ │
│  │  └──────────┘  └──────────┘  └──────────┘            │ │
│  │                                                        │ │
│  │  ┌─────────────────────────────────────┐              │ │
│  │  │    VPN (Investigation-specific)     │              │ │
│  │  │    Exit node: Different from home   │              │ │
│  │  └─────────────────────────────────────┘              │ │
│  └────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────┘

Part 1: Base VM Setup

Option A: Trace Labs OSINT VM (Recommended)

Download the pre-built Trace Labs OSINT VM which comes with 100+ OSINT tools pre-installed:

  1. Download from tracelabs.org/initiatives/osint-vm
  2. Import OVA into VMware or VirtualBox
  3. Default credentials: osint / osint

Option B: Custom Ubuntu Build

# Start with Ubuntu 22.04 LTS minimal installation
# After install, update system
sudo apt update && sudo apt upgrade -y
 
# Install essential OSINT tools
sudo apt install -y \
    firefox \
    chromium-browser \
    tor \
    torbrowser-launcher \
    whois \
    dnsutils \
    nmap \
    python3-pip \
    git \
    curl \
    wget \
    jq \
    exiftool \
    mat2 \
    httrack \
    metagoofil
 
# Install Python OSINT tools
pip3 install \
    theHarvester \
    shodan \
    censys \
    holehe \
    socialscan \
    maigret \
    ghunt

Install Additional Tools

# Maltego Community Edition
wget https://maltego-downloads.s3.us-east-2.amazonaws.com/linux/Maltego.v4.6.0.deb
sudo dpkg -i Maltego.v4.6.0.deb
 
# SpiderFoot
git clone https://github.com/smicallef/spiderfoot.git
cd spiderfoot
pip3 install -r requirements.txt
 
# Recon-ng
sudo apt install -y recon-ng
 
# Amass
sudo snap install amass
 
# Sherlock (username search)
git clone https://github.com/sherlock-project/sherlock.git
cd sherlock
pip3 install -r requirements.txt

Part 2: Browser Isolation

Create Dedicated Firefox Profiles

# Create investigation-specific profiles
firefox -CreateProfile "case-001"
firefox -CreateProfile "case-002"
firefox -CreateProfile "sock-puppet-01"
 
# Launch with specific profile
firefox -P "case-001" -no-remote &

Essential Firefox Extensions (Per Profile)

ExtensionPurpose
uBlock OriginBlock ads and trackers
NoScriptControl JavaScript execution
User-Agent SwitcherChange browser fingerprint
Wayback MachineAccess archived web pages
DownThemAllBatch download evidence
SingleFileSave complete web pages
Exif ViewerView image metadata

Browser Hardening

In each Firefox profile (about:config):

SettingValuePurpose
media.peerconnection.enabledfalseDisable WebRTC IP leak
geo.enabledfalseDisable geolocation
privacy.resistFingerprintingtrueReduce fingerprinting
network.dns.disablePrefetchtruePrevent DNS prefetching
dom.event.clipboardevents.enabledfalseBlock clipboard monitoring

Part 3: VPN and Network Isolation

VPN Configuration

# Install OpenVPN
sudo apt install -y openvpn
 
# Import VPN configuration
sudo openvpn --config /path/to/investigation-vpn.ovpn
 
# Verify VPN is active (IP should be different from home)
curl -s https://api.ipify.org
curl -s https://ipinfo.io/json | jq

DNS Leak Prevention

# Configure DNS to use VPN's DNS servers
sudo bash -c 'echo "nameserver 1.1.1.1" > /etc/resolv.conf'
sudo bash -c 'echo "nameserver 9.9.9.9" >> /etc/resolv.conf'
 
# Test for DNS leaks
# Visit: https://dnsleaktest.com

Kill Switch (Prevent Traffic Leakage)

# UFW-based kill switch — only allow traffic through VPN
sudo ufw default deny outgoing
sudo ufw default deny incoming
sudo ufw allow out on tun0  # VPN interface
sudo ufw allow out to 10.0.0.0/8  # Allow local VM network
sudo ufw allow out to <VPN_SERVER_IP> port 1194 proto udp  # Allow VPN connection
sudo ufw enable

Part 4: Investigation Workflow

Case Directory Structure

# Create case template
mkdir -p ~/investigations/CASE-{001..010}/{evidence,screenshots,reports,notes,tools}
 
# Case directory structure:
# ~/investigations/
# └── CASE-001/
#     ├── evidence/          # Downloaded files, exports
#     ├── screenshots/       # Time-stamped screenshots
#     ├── reports/           # Final investigation reports
#     ├── notes/             # Investigation notes
#     ├── tools/             # Case-specific scripts
#     └── case-log.md        # Timeline of investigation actions

Automated Screenshot Tool

#!/bin/bash
# screenshot.sh — Take timestamped screenshots for evidence
# Usage: ./screenshot.sh <case-number> <description>
 
CASE="${1:-CASE-001}"
DESC="${2:-screenshot}"
TIMESTAMP=$(date +"%Y%m%d_%H%M%S")
FILENAME="${TIMESTAMP}_${DESC}.png"
DEST="$HOME/investigations/${CASE}/screenshots/${FILENAME}"
 
# Take screenshot (requires scrot or gnome-screenshot)
scrot "$DEST"
echo "Saved: $DEST"
 
# Log the screenshot
echo "${TIMESTAMP} | Screenshot: ${DESC} | ${FILENAME}" >> \
    "$HOME/investigations/${CASE}/case-log.md"

Evidence Collection Script

"""Automated evidence collection for OSINT investigations."""
 
import json
import subprocess
from datetime import datetime
from pathlib import Path
 
 
class InvestigationCase:
    def __init__(self, case_id: str):
        self.case_id = case_id
        self.base_path = Path.home() / "investigations" / case_id
        self.base_path.mkdir(parents=True, exist_ok=True)
        for subdir in ["evidence", "screenshots", "reports", "notes"]:
            (self.base_path / subdir).mkdir(exist_ok=True)
 
    def log_action(self, action: str):
        """Log investigation action with timestamp."""
        timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
        log_file = self.base_path / "case-log.md"
        with open(log_file, "a") as f:
            f.write(f"| {timestamp} | {action} |\n")
 
    def save_evidence(self, filename: str, data: str):
        """Save evidence file."""
        filepath = self.base_path / "evidence" / filename
        with open(filepath, "w") as f:
            f.write(data)
        self.log_action(f"Saved evidence: {filename}")
 
    def run_whois(self, domain: str):
        """Run whois lookup and save results."""
        result = subprocess.run(
            ["whois", domain], capture_output=True, text=True
        )
        self.save_evidence(f"whois_{domain}.txt", result.stdout)
        return result.stdout
 
    def run_dns_enum(self, domain: str):
        """Run DNS enumeration and save results."""
        records = {}
        for rtype in ["A", "AAAA", "MX", "NS", "TXT", "SOA"]:
            result = subprocess.run(
                ["dig", domain, rtype, "+short"],
                capture_output=True, text=True,
            )
            records[rtype] = result.stdout.strip().split("\n")
        self.save_evidence(
            f"dns_{domain}.json",
            json.dumps(records, indent=2),
        )
        return records
 
 
# Usage
if __name__ == "__main__":
    case = InvestigationCase("CASE-001")
    case.log_action("Investigation started")
    case.run_whois("example.com")
    case.run_dns_enum("example.com")

Part 5: Sock Puppet Management

Sock Puppet Checklist

For each investigation persona:

  • Unique email address (ProtonMail or Tutanota)
  • Dedicated Firefox profile
  • VPN exit node in persona's "location"
  • Consistent persona backstory
  • Profile photos (generated with AI — thispersondoesnotexist.com)
  • No connection to your real identity

Persona Documentation Template

## Sock Puppet: [Alias Name]
 
**Created:** [Date]
**Purpose:** [Investigation case or general use]
 
### Identity
- Name: [Full name]
- Location: [City, Country]
- Occupation: [Cover story]
- Interests: [Relevant to investigation]
 
### Accounts
- Email: [email]
- Phone: [VoIP number if needed]
- Social Media: [list platforms]
 
### Technical
- Firefox Profile: [profile name]
- VPN Exit: [country/city]
- Browser fingerprint: [user agent string]
 
### Usage Log
| Date | Platform | Activity |
|------|----------|----------|

Verification Checklist

  • Investigation VM isolated from host network
  • VPN active with kill switch enabled
  • DNS leak test passed
  • WebRTC disabled in browser
  • Firefox profiles created for each case
  • Evidence directory structure created
  • Screenshot tool working
  • All OSINT tools installed and tested
  • Sock puppet profiles documented
  • Case log template ready

References

  • Trace Labs OSINT VM
  • OSINT Framework
  • Michael Bazzell OSINT Techniques
  • Bellingcat OSINT Tools
#OSINT#Investigation#Trace Labs#Privacy#Sock Puppets#Intelligence

Related Articles

Build a Collaborative IPS with CrowdSec

Deploy CrowdSec on a Linux server to get community-powered intrusion prevention — block brute-force attacks, credential stuffing, and vulnerability scanners using crowd-sourced threat intelligence and automatic firewall enforcement.

10 min read

Keycloak SSO: Self-Hosted Identity Provider for Your Homelab

Deploy Keycloak with Docker Compose and PostgreSQL to build a centralised single sign-on platform for your homelab services, with OIDC integration for...

11 min read

HashiCorp Vault: Secrets Management for Your Homelab and

Deploy HashiCorp Vault to centrally manage secrets, certificates, and dynamic credentials — eliminating hardcoded passwords from your infrastructure with...

12 min read
Back to all Projects