Prerequisites: Week 11 lecture; Kismet installed; GPS receiver available (or coordinates from instructor); authorized survey area defined Duration: ~90 min Points: 100
Authorization
- Lab Authorization Form signed
- Survey area: approved campus/building perimeter only (instructor defines exact boundary before lab starts)
- Passive monitoring only -- no injection, deauthentication, or association
- No attempt to connect to any discovered network
- Kismet log files are for lab use only; not to be shared or published (privacy of captured device information)
Objective
Conduct a passive wireless reconnaissance survey of an approved area using Kismet. Export the results. Produce a professional 4-page findings report with at least three scored findings, a remediation summary table, and CVSS v3.1 scores.
Part A — Kismet Setup and Survey (30 min)
Pre-survey checks
# Verify monitor mode
sudo airmon-ng check kill
sudo airmon-ng start wlan0
iwconfig wlan0mon | grep Mode
# Verify GPS daemon (if using GPS receiver)
sudo gpsd /dev/ttyUSB0 -F /var/run/gpsd.sock
cgps -s # confirm GPS fix before moving
If no GPS hardware: use instructor-provided coordinates for the survey area, or set a static location in Kismet.
Launch Kismet
sudo kismet -c wlan0mon \
--log-prefix /tmp/lab11_survey \
--log-types kismet,pcapng,kml,csv
The web interface is at http://localhost:2501. Default credentials on first launch: set username and password when prompted.
Conduct the survey
Walk or drive the approved boundary for 20-25 minutes with Kismet running. Kismet channel-hops automatically across 2.4 GHz and 5 GHz (if your NIC supports 5 GHz monitor mode).
Monitor the Kismet web UI for device count. A typical office building perimeter walk detects 50-200 unique APs.
Stop Kismet and verify logs
sudo kismet --stop # or Ctrl+C in the terminal
ls -lh /tmp/lab11_survey*
You should have files: .kismet, .pcapng, .kml, .csv.
Part B — Data Export and Analysis (20 min)
Export from Kismet SQLite database
# kismet_analysis.py
import sqlite3
import json
db_path = '/tmp/lab11_survey.kismet'
conn = sqlite3.connect(db_path)
# Get all WiFi devices
query = """
SELECT
d.devmac,
d.commonname as ssid,
d.type,
d.first_time,
d.last_time,
d.max_signal,
json_extract(d.device, '$.dot11.last_beaconinfo.tlvdata.rsn.akm_list[0]') as akm,
json_extract(d.device, '$.dot11.last_beaconinfo.tlvdata.rsn.pairwise_list[0]') as cipher,
json_extract(d.device, '$.dot11.channel') as channel
FROM devices d
WHERE d.type = 'Wi-Fi AP'
ORDER BY d.max_signal DESC
"""
rows = conn.execute(query).fetchall()
print(f"Total APs found: {len(rows)}")
for row in rows[:10]:
print(row)
Fallback: if the JSON extraction fails (Kismet schema varies by version), use the Kismet web API at http://localhost:2501/devices/views/all/devices.json to export the full device list.
Build the AP inventory table
Create a spreadsheet or markdown table with columns:
| BSSID | SSID | Channel | Encryption | MFP | Signal (dBm) | Vendor (OUI) | First Seen |
For each AP, do an OUI lookup to identify the vendor:
# Simple OUI lookup (use the ieee.org registry or a local copy)
import requests
def lookup_oui(mac):
oui = mac.replace(':', '')[:6].upper()
# Use local OUI database if available
# Or: requests.get(f"https://api.macvendors.com/{oui}").text
return oui # replace with actual lookup
for bssid, ssid, *rest in rows:
vendor = lookup_oui(bssid)
print(f"{bssid} ({vendor}): {ssid}")
Part C — Findings Report (30 min)
Write a 4-page findings report following the capstone report format. The report must contain at least three findings from your survey.
Required structure
Cover Page
- "Wireless Reconnaissance Survey -- [Survey Area Name]"
- Date, your name, course identifier
Executive Summary (half page)
- 3-5 bullets summarizing the highest-risk findings
- Overall risk rating for the surveyed environment
Scope (2-3 sentences)
- Survey area, time window, tools used
Methodology (half page)
- Passive scanning approach; Kismet configuration; no active attacks performed
Findings (2-3 pages) At minimum three findings; follow the template:
Finding 1: [Title]
Severity: [Critical/High/Medium/Low/Informational]
CVSS v3.1: [score] | [vector string]
Affected Asset: [SSID/BSSID or "multiple"]
Description: ...
Evidence: [data from Kismet output]
Remediation: [specific and actionable]
Candidate finding categories from your survey data:
- Open (unencrypted) APs: Critical
- WEP or WPA-TKIP APs: Critical
- WPA2-PSK without MFP: Medium/High (depends on passphrase strength assessment)
- WPA2-PSK with MFP: Low/Informational (still vulnerable to dictionary if passphrase is weak)
- Hidden SSID (probe-only): Informational (security through obscurity; not a defense)
- Client probe requests for off-network SSIDs: Low (information leakage)
- High AP density on same channel (co-channel interference): Informational
Remediation Summary Table
| Finding | Severity | Remediation | Effort |
|---|---|---|---|
| ... | ... | ... | Low/Med/High |
Part D — CVSS Scoring Exercise (10 min)
Pick two of your findings. For each, write out the full CVSS v3.1 vector string and compute the base score manually using the CVSS v3.1 formula (or the NVD calculator at nvd.nist.gov/vuln-metrics/cvss/v3-calculator -- linked from course portal).
Show your work:
- AV: value and justification
- AC: value and justification
- PR: value and justification
- UI: value and justification
- S: value and justification
- C/I/A: values and justifications
- Final vector string and base score
Write-up Questions
- Your survey detected 15 APs in the approved area. One of them has an SSID you do not recognize -- it is not in the organization's authorized AP inventory. The OUI maps to TP-Link. What are the three most likely explanations for this AP's presence, and what is your recommended next step for each?
- A survey of the same area at 2 PM on a weekday vs. 2 AM on a Saturday would likely show different results. What specific differences would you expect, and why does the time of survey matter for a wireless risk assessment?
- Kismet's WIDS alerting system triggers an alert when it observes the same SSID broadcasting from two different BSSIDs. What attack does this alert detect? Write the specific alert condition logic in pseudo-code.
- You found that 8 out of 15 APs are using WPA2-PSK without MFP (Management Frame Protection). The client asks: "Do I need to upgrade all these APs?" Write a risk-prioritized recommendation: which APs are highest priority to address first, and what is the minimum viable remediation path for each group?
Cleanup
sudo airmon-ng stop wlan0mon
sudo systemctl restart NetworkManager
sudo killall gpsd 2>/dev/null
Delete Kismet log files from /tmp after submission (they may contain personally-identifying device MAC addresses):
rm /tmp/lab11_survey.*
Submission
Zip into lab11_YOURNAME.zip:
lab11_ap_inventory.md(AP table from Part B)lab11_findings_report.pdforlab11_findings_report.md(Part C report)lab11_cvss_scoring.md(Part D)kismet_analysis.pywriteup.md
Do NOT submit the raw Kismet .kismet database or .pcapng capture file. These may contain privacy-sensitive device information. Submit only the analysis outputs.