Lesson 3.4
Planning an Investigation
Learning Objectives
- Fill out a scope sheet and intelligence requirements before starting any investigation
- Build a collection plan and source checklist that map requirements to sources
- Keep a pivot log, parking lot, and time budget during an investigation
- Follow a complete, realistic recon investigation from question to findings
- Reuse these templates for the labs in this module
How to Use This File
The first half is a set of copy-and-paste templates. The second half is a complete walkthrough showing the templates filled in for a fictional company. Students should copy the templates into their own notes at the start of every lab.
All data in the walkthrough is fictional. IP addresses use the ranges reserved for documentation (192.0.2.0/24, 198.51.100.0/24, 203.0.113.0/24), so they don’t point at anyone’s real systems.
Part 1: Templates
Template A: Scope Sheet
## Scope Sheet
- **Investigation name:**
- **Requester / client:**
- **Authorization:** (document name, date, who signed)
- **Decision this supports:**
- **Targets in scope:** (organizations, domains, IP ranges, named roles)
- **Explicitly out of scope:** (personal accounts, family members, home addresses, third-party providers, other orgs with similar names)
- **Allowed methods:** [ ] Passive [ ] Semi-passive [ ] Active (list techniques) [ ] Social engineering
- **Prohibited actions:** (e.g., logging in, contacting staff, downloading breach data)
- **OPSEC level:** Low / Medium / High, and why
- **Data handling:** (where notes are stored, who can see them, when they're deleted)
- **Total time budget:**
- **Deadline:**
- **Point of contact for scope questions:**
Template B: Intelligence Requirements
## Intelligence Requirements
| ID | Question | Why it matters (decision) | Done when... | Time box |
|----|----------|---------------------------|--------------|----------|
| R1 | | | | |
| R2 | | | | |
| R3 | | | | |
Tips:
- Write each requirement as a question with a clear answer.
- “Done when” is your stopping rule (e.g., “confirmed by 3 independent examples”).
- 3–6 requirements is plenty for a class lab.
Template C: Collection Plan
## Collection Plan
| Req | Source type | Specific source / query | Passive? | Status | Notes |
|-----|-------------|-------------------------|----------|--------|-------|
| R1 | | | | Not started / Done / No results | |
Template D: Source Checklist
Tick each source category as you consider it, even if you decide to skip it. (Details for each category are in Module 5 OSINT Sources.)
## Source Checklist
- [ ] Search engines (multiple engines, advanced operators)
- [ ] Organization's own website and documents
- [ ] Terms of service / privacy policy (what's allowed, what's hinted at)
- [ ] Job postings
- [ ] Professional networking and social media (organization-level)
- [ ] Code repositories
- [ ] Domain registration (WHOIS/RDAP)
- [ ] DNS records and passive DNS
- [ ] Certificate Transparency logs
- [ ] Internet scan search engines
- [ ] Web archives
- [ ] Public records and business filings
- [ ] News and press releases
- [ ] Breach notification services (authorized domains only)
- [ ] Images / geospatial (office locations)
- [ ] Other: ______
Template E: Pivot Log
## Pivot Log
| # | From | Method / source / query | To | Confidence | In scope? | Time (UTC) | Evidence file |
|---|------|-------------------------|----|------------|-----------|------------|---------------|
| 1 | | | | | | | |
Confidence values: Confirmed / Likely / Possible / Unverified.
Template F: Parking Lot
## Parking Lot (interesting, but not answering a requirement right now)
| # | Lead | Why it might matter | Scope concern? | Decision (pursue / drop / ask client) |
|---|------|---------------------|----------------|---------------------------------------|
Template G: Time Budget Tracker
## Time Budget
| Req | Budget | Used | Status | Reassess note |
|-----|--------|------|--------|---------------|
| R1 | 45 min | | | |
| Total | 4 h | | | |
Template H: Findings Summary
## Findings
| Req | Finding | Confidence | Supporting pivots | Gaps / next steps |
|-----|---------|------------|-------------------|-------------------|
The full report format belongs to Module 7 Verification & Reporting. The findings table is the bridge between your working notes and that report.
Part 2: Walkthrough — External Exposure Review of Company X
Background (fictional)
Company X is a 200-person regional logistics company. Its domain is companyx.com. Its IT director has hired your team for an external exposure review: find out what an attacker could learn about the company from public sources before a planned authorized phishing simulation and external penetration test next month.
Step 1: Scope Sheet (filled in)
## Scope Sheet
- **Investigation name:** Company X External Exposure Review
- **Requester / client:** IT Director, Company X
- **Authorization:** Signed statement of work + rules of engagement, dated (fictional)
- **Decision this supports:** Design of next month's phishing simulation and external pentest; exposure-reduction recommendations
- **Targets in scope:** Company X (the legal entity), companyx.com and its subdomains, IP range 198.51.100.0/24 (confirmed by client), employees' professional presence
- **Explicitly out of scope:** employees' personal social media, family members, home addresses, third-party SaaS providers' systems, "Company X Holdings" (unrelated company with a similar name)
- **Allowed methods:** [x] Passive [x] Semi-passive [ ] Active [ ] Social engineering (next month, separate RoE)
- **Prohibited actions:** logging into anything, contacting staff, downloading breach data, using any credentials found
- **OPSEC level:** Low-medium (client knows; IT staff don't, to keep the simulation realistic)
- **Data handling:** encrypted team folder; deleted 30 days after report delivery
- **Total time budget:** 6 hours
- **Point of contact for scope questions:** IT Director
Notice the “similar name” exclusion. Mixing up organizations is one of the most common OSINT errors.
Step 2: Intelligence Requirements
| ID | Question | Why it matters | Done when… | Time box |
|---|---|---|---|---|
| R1 | What is Company X’s email address format? | Needed for realistic phishing and to assess exposure | Confirmed by 3 independent examples | 45 min |
| R2 | What internet-facing hosts and login portals exist? | Target list for next month’s pentest; attack surface | CT logs, passive DNS, and scan DB checked; list reconciled with client’s IP range | 90 min |
| R3 | What technologies does Company X use (email, VPN, security tools)? | Pretext realism and pentest focus | Each technology confirmed by 2 sources | 60 min |
| R4 | Which roles and departments are publicly identifiable? | Phishing target selection; awareness training | Department counts established from professional sources | 60 min |
| R5 | What sensitive details are exposed unintentionally (documents, code, metadata)? | Direct exposure-reduction recommendations | Site documents and public code searched | 60 min |
That’s 5.25 hours, leaving 45 minutes for processing and writing findings.
Step 3: Collection Plan (excerpt)
| Req | Source type | Specific source / query | Passive? | Status |
|---|---|---|---|---|
| R1 | Org website | Contact and press pages | Semi-passive (use archive copy) | Done |
| R1 | Search engine | "@companyx.com" |
Passive | Done |
| R1 | Document metadata | site:companyx.com filetype:pdf, then metadata review |
Semi-passive (downloads from site) | Done |
| R2 | CT logs | Search for %.companyx.com |
Passive | Done |
| R2 | Passive DNS | Historical records for companyx.com | Passive | Done |
| R2 | Scan search engine | Search the client’s IP range | Passive | Done |
| R3 | DNS | MX and TXT records | Semi-passive | Done |
| R3 | Job postings | Company careers page, job boards | Passive | Done |
| R4 | Professional networking | Company page employee list | Passive | Done |
| R5 | Code repositories | Search for companyx.com in public code |
Passive | Done |
Step 4: Collection and Pivot Log (excerpt)
| # | From | Method / source | To | Confidence | In scope? | Time (UTC) | Evidence |
|---|---|---|---|---|---|---|---|
| 1 | companyx.com | Archived contact page | info@, press@ addresses |
Confirmed | Yes | 13:05 | ev-001.png |
| 2 | companyx.com | Search "@companyx.com" |
maria.lopez@companyx.com in a trade association newsletter |
Confirmed | Yes | 13:12 | ev-002.png |
| 3 | companyx.com | PDF metadata (annual safety report) | Author “Tom Nguyen”, creator user tnguyen |
Confirmed | Yes | 13:20 | ev-003.txt |
| 4 | Pivots 2, 3 | Comparison | Email format first.last@; internal username format first-initial + last |
Email: Confirmed (with #6); username: Likely | Yes | 13:30 | — |
| 5 | companyx.com | CT log search | 14 subdomains incl. vpn., mail., sso., dev-portal. |
Confirmed (certs issued) | Yes | 13:48 | ev-004.csv |
| 6 | Careers page | Job posting contact | hr.jobs@ and sam.patel@companyx.com |
Confirmed | Yes | 14:02 | ev-005.png |
| 7 | dev-portal.companyx.com |
Passive DNS | Resolves to 203.0.113.40 — outside the client’s confirmed range | Confirmed | Unclear — ask client | 14:10 | ev-006.png |
| 8 | 198.51.100.0/24 | Scan search engine | 3 hosts with services seen: web, VPN portal, remote desktop | Likely (data 5 weeks old) | Yes | 14:25 | ev-007.png |
| 9 | companyx.com | MX + TXT records | Cloud email provider; verification tokens for a project-tracking SaaS and an e-signature SaaS | Confirmed | Yes | 14:40 | ev-008.txt |
| 10 | Job posting “Network Engineer” | Careers page | Names a specific firewall vendor and SIEM product | Likely (1 source) | Yes | 14:55 | ev-009.png |
| 11 | Pivot 10 | IT manager’s professional profile skills | Same firewall vendor | Confirmed (2 sources) | Yes | 15:05 | ev-010.png |
| 12 | Professional networking | Company employee list | 87 profiles; IT 6, Finance 9, HR 4, Operations 51, Other 17 | Likely (profiles may be stale) | Yes | 15:40 | ev-011.csv |
| 13 | “companyx.com” | Public code search | Config file in a former contractor’s repo containing dev-portal.companyx.com and a hardcoded API key |
Confirmed | Yes (org data); key not used | 16:20 | ev-012.png (key redacted) |
Step 5: Parking Lot
| # | Lead | Why it might matter | Scope concern? | Decision |
|---|---|---|---|---|
| P1 | An employee’s personal photo account shows their badge | Badge design useful for physical pretext | Personal account: out of scope | Drop; mention generically in awareness recommendations |
| P2 | dev-portal hosted outside client range (pivot 7) |
Could be a cloud host or a third party | Might not be client-owned | Ask client before including in pentest target list |
| P3 | “Company X Holdings” appears in several results | Similar name | Different organization | Drop; note in report to avoid confusion |
Step 6: Processing
- Merged subdomains from CT logs and passive DNS: 14 + 5 → 16 unique
- Normalized employee titles into departments
- Redacted the API key in the evidence screenshot and noted it was not tested or used
- Tagged every item with its requirement
Step 7: Analysis — Findings
| Req | Finding | Confidence | Supporting pivots | Gaps / next steps |
|---|---|---|---|---|
| R1 | Email format is first.last@companyx.com |
Confirmed | 2, 4, 6 | — |
| R1 | Internal usernames likely follow first-initial + last |
Likely | 3, 4 | Only one example; mention as a hypothesis |
| R2 | 16 subdomains, including VPN, SSO, and a developer portal | Confirmed | 5, 7 | Client to confirm ownership of dev-portal host |
| R2 | A remote desktop service appears exposed on one host | Likely | 8 | Data is 5 weeks old; confirm during authorized active testing |
| R3 | Cloud email platform; project-tracking and e-signature SaaS in use | Confirmed | 9 | — |
| R3 | Specific firewall vendor in use | Confirmed | 10, 11 | SIEM product only in one source (Possible) |
| R4 | ~87 employees identifiable, including 6 in IT | Likely | 12 | Professional profiles can be outdated |
| R5 | Hardcoded API key for the developer portal in a former contractor’s public repo | Confirmed | 13 | Client should revoke the key immediately |
| R5 | PDF metadata leaks author names and internal usernames | Confirmed | 3 | Recommend metadata scrubbing |
Analytic judgments (what it means for the decision):
- Phishing pretexts using an e-signature request or project-tracking notification would look realistic, because both services are confirmed in use.
- The exposed API key is the highest-priority finding and should be reported to the client immediately, not held until the final report.
- The remote desktop exposure and dev-portal ownership need confirmation before next month’s active testing.
Step 8: Dissemination
- Immediate notice to the IT Director about the exposed API key (same day)
- Report following the structure in Module 7: executive summary, scope and method, findings with confidence, risk, recommendations
- Handling: employee names summarized as counts by department in the main report; full list in a restricted appendix only because the phishing simulation needs it
Step 9: Feedback
The IT Director confirms dev-portal is a legitimate cloud host they own and adds it to next month’s scope. They ask a new question: “Are any of our IT staff credentials in breach data?” This becomes a new requirement (R6) with its own authorization check and data handling rules (see Module 2 and Module 6).
Time Budget (final)
| Req | Budget | Used | Status |
|---|---|---|---|
| R1 | 45 min | 30 min | Done early |
| R2 | 90 min | 100 min | Over by 10; reassessed at 90 and continued to resolve pivot 7 |
| R3 | 60 min | 45 min | Done |
| R4 | 60 min | 50 min | Done |
| R5 | 60 min | 70 min | Over by 10; stopped after the API key finding |
| Processing + findings | 45 min | 55 min | Done |
| Total | 6 h | 5 h 50 min | Within budget |
Lessons from the Walkthrough
- Scope decisions happen all the time, not just at the start (pivots 7 and 13, parking lot P1–P3).
- Similar names are a trap; write exclusions into the scope sheet.
- Some findings can’t wait for the final report.
- Found credentials are reported, never used.
- Stale data is labeled as such and handed to active testing for confirmation.
- Minimize personal data in deliverables: counts instead of names where possible.
Key Terms
- Scope sheet: a one-page summary of what’s authorized, what’s excluded, and how data is handled
- Statement of work (SOW): the contract document describing the engagement
- Rules of engagement (RoE): the specific rules for what testers may do and when
- External exposure review: an assessment of what an organization reveals to the internet
- Documentation IP ranges: address blocks reserved for examples (
192.0.2.0/24,198.51.100.0/24,203.0.113.0/24) - Analytic judgment: a conclusion about what findings mean for the decision
Key Takeaways
- Fill out a scope sheet before you open a browser
- Every requirement needs a “done when” stopping rule and a time box
- Map each requirement to sources in a collection plan
- Log every pivot with confidence and a scope decision
- Park interesting-but-off-target leads instead of chasing them
- Critical findings (like exposed keys) get reported right away
- Findings tables bridge working notes and the final report
References
- Reconnaissance, Tactic TA0043 — MITRE ATT&CK (for mapping walkthrough activities)
- RFC 5737: IPv4 Address Blocks Reserved for Documentation — RFC Editor
Free to use, copy, change and teach. Security For the Folks dedicates this course to the public domain under CC0 1.0 Universal: no permission or credit needed. Quoted material and the sources it links to belong to their own authors.