[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M73F4M323FEFXCJQXPR3P5HW":3,"skill-same:01M73F4M323FEFXCJQXPR3P5HW":93},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":16,"sourceHtmlUrl":17,"categories":18,"keywords":19,"publishedAt":20,"linkOnly":21,"markdownContent":22,"markdownBody":23,"frontMatter":24,"refName":53,"commitSha":54,"skillDirectory":55,"forksCount":56,"repositoryHtmlUrl":57,"repositoryHomepageUrl":58,"ownerHtmlUrl":59,"ownerBlogUrl":60,"ownerDescription":61,"updatedAt":62,"install":63,"resources":76},"01M73F4M323FEFXCJQXPR3P5HW","performing-wireless-security-assessment-with-kismet",null,"Conduct wireless network security assessments using Kismet to detect rogue access points, hidden SSIDs, weak encryption, and unauthorized clients through passive RF monitoring.","Horonomos-laps\u002FYana-AI","Horonomos-laps","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F355299122?v=4","01M76B3QPXE88ET2SQPDPVATZT"," Horonomos-laps","01M72ZQRJPCYPSSWT4D00VJR2A",13,"Apache-2.0","https:\u002F\u002Fgithub.com\u002Fyanacuti1121\u002FYana-AI\u002Fblob\u002Fmain\u002Fcore\u002Fskills\u002Fperforming-wireless-security-assessment-with-kismet\u002FLICENSE","https:\u002F\u002Fgithub.com\u002FHoronomos-laps\u002FYana-AI\u002Fblob\u002Fmain\u002Fcore\u002Fskills\u002Fperforming-wireless-security-assessment-with-kismet\u002FSKILL.md",[],[],"2026-11-11 15:11:14",false,"---\nname: performing-wireless-security-assessment-with-kismet\ndescription: Conduct wireless network security assessments using Kismet to detect\n  rogue access points, hidden SSIDs, weak encryption, and unauthorized clients through\n  passive RF monitoring.\ndomain: cybersecurity\nsubdomain: network-security\ntags:\n- kismet\n- wireless-security\n- wifi-assessment\n- rogue-ap\n- 802.11\n- wardriving\n- wids\n- wireless-ids\n- rf-monitoring\nversion: '1.0'\nauthor: mahipal\nlicense: Apache-2.0\nnist_csf:\n- PR.IR-01\n- DE.CM-01\n- ID.AM-03\n- PR.DS-02\nmitre_attack:\n- T1046\n- T1040\n- T1557\n- T1071\n- T1573\nsource: https:\u002F\u002Fgithub.com\u002Fmukul975\u002FAnthropic-Cybersecurity-Skills\nsource_commit: 04450304b12645cb2b974ab96d28c0664758a88d\nnote: \"Vendored verbatim from an external Apache-2.0 security-skill library, pinned by commit. Exceeds the internal 300-line skill guideline (agent-code-constraints.md) -- kept as-is because this is vendored reference material (forensics\u002Fthreat-intel procedure), not Yana AI-authored content, and trimming would damage technical accuracy.\"\n---\n\n# Performing Wireless Security Assessment with Kismet\n\n## Overview\n\nKismet is an open-source wireless network detector, packet sniffer, and wireless intrusion detection system (WIDS) supporting 802.11a\u002Fb\u002Fg\u002Fn\u002Fac\u002Fax. Unlike active scanners, Kismet operates in passive monitor mode, making it undetectable to the networks being assessed. It captures raw 802.11 frames, identifies access points, clients, probe requests, and encryption types without transmitting any packets. This skill covers deploying Kismet for comprehensive wireless security assessments, identifying rogue access points, detecting weak encryption, mapping hidden networks, and analyzing client behavior.\n\n\n## When to Use\n\n- When conducting security assessments that involve performing wireless security assessment with kismet\n- When following incident response procedures for related security events\n- When performing scheduled security testing or auditing activities\n- When validating security controls through hands-on testing\n\n## Prerequisites\n\n- Linux system (Kali Linux, Ubuntu 22.04+) with Kismet 2023+ installed\n- Wireless adapter supporting monitor mode (e.g., Alfa AWUS036ACH, TP-Link TL-WN722N v1)\n- Written authorization for wireless assessment (legal requirement)\n- GPS receiver (optional, for geolocation mapping)\n- Target environment wireless network documentation\n\n## Core Concepts\n\n### Kismet Architecture\n\nKismet uses a client-server architecture:\n\n- **kismet** - Main server process that captures and processes packets\n- **kismet_cap_linux_wifi** - Capture source for Linux WiFi interfaces\n- **kismet_cap_linux_bluetooth** - Capture source for Bluetooth\n- **Web UI** - Browser-based interface at http:\u002F\u002Flocalhost:2501\n\n### Wireless Frame Types\n\n| Frame Type | Purpose | Security Relevance |\n|------------|---------|-------------------|\n| Beacon | AP announces its presence | SSID, encryption, vendor |\n| Probe Request | Client searches for networks | Reveals preferred networks |\n| Probe Response | AP responds to client probe | Hidden SSID disclosure |\n| Authentication | Client authenticates to AP | Auth type identification |\n| Deauthentication | Disconnects client from AP | Potential attack indicator |\n| Association | Client joins network | Client-AP relationship |\n\n### Encryption Assessment\n\n| Encryption | Status | Risk |\n|------------|--------|------|\n| Open (No encryption) | Insecure | Critical - all traffic visible |\n| WEP | Broken | Critical - crackable in minutes |\n| WPA-TKIP | Deprecated | High - known vulnerabilities |\n| WPA2-PSK (CCMP) | Acceptable | Medium - depends on passphrase strength |\n| WPA2-Enterprise (802.1X) | Recommended | Low - certificate-based |\n| WPA3-SAE | Best practice | Low - resistant to offline attacks |\n\n## Workflow\n\n### Step 1: Prepare Wireless Adapter\n\n```bash\n# Identify wireless interfaces\niwconfig\n\n# Check adapter capabilities\niw list | grep -A 10 \"Supported interface modes\"\n\n# Kill processes that may interfere\nsudo airmon-ng check kill\n\n# Enable monitor mode\nsudo ip link set wlan0 down\nsudo iw dev wlan0 set type monitor\nsudo ip link set wlan0 up\n\n# Verify monitor mode\niw dev wlan0 info | grep type\n```\n\n### Step 2: Configure and Launch Kismet\n\nEdit `\u002Fetc\u002Fkismet\u002Fkismet.conf`:\n\n```ini\n# Data sources\nsource=wlan0:name=WiFi-Monitor,channel_hop=true,channel_hoprate=5\u002Fsec\n\n# Logging configuration\nlog_types=kismet,pcapng\nlog_prefix=\u002Fopt\u002Fkismet\u002Flogs\u002Fassessment\n\n# Enable all 802.11 channels (2.4GHz and 5GHz)\nchannel_hop_speed=5\nchannel_list=IEEE80211:1,2,3,4,5,6,7,8,9,10,11,36,40,44,48,52,56,60,64,100,104,108,112,116,120,124,128,132,136,140,149,153,157,161,165\n\n# GPS configuration (if available)\ngps=gpsd:host=localhost,port=2947\n\n# Alert configuration\nalert=ADVCRYPTCHANGE,5\u002Fmin,1\u002Fsec\nalert=BSSTIMESTAMP,5\u002Fmin,1\u002Fsec\nalert=CRYPTODROP,5\u002Fmin,1\u002Fsec\nalert=DISASSOCTRAFFIC,10\u002Fmin,1\u002Fsec\nalert=DEAUTHFLOOD,10\u002Fmin,2\u002Fsec\nalert=PROBENOMFP,5\u002Fmin,1\u002Fsec\n```\n\nLaunch Kismet:\n\n```bash\n# Start Kismet server\nsudo kismet -c wlan0\n\n# Access web interface\n# Open browser to http:\u002F\u002Flocalhost:2501\n# Default credentials: kismet \u002F kismet (change immediately)\n```\n\n### Step 3: Conduct Assessment Scans\n\n**Rogue Access Point Detection:**\n\n```bash\n# Export device list via Kismet REST API\ncurl -u kismet:kismet http:\u002F\u002Flocalhost:2501\u002Fdevices\u002Fsummary\u002Fdevices.json | \\\n    python3 -m json.tool > all_devices.json\n\n# Filter for access points\ncurl -u kismet:kismet \\\n    'http:\u002F\u002Flocalhost:2501\u002Fdevices\u002Fsummary\u002Fdevices.json' \\\n    -d 'json={\"fields\":[\"kismet.device.base.macaddr\",\"kismet.device.base.name\",\"kismet.device.base.type\",\"kismet.device.base.crypt\",\"kismet.device.base.channel\",\"kismet.device.base.manuf\",\"dot11.device\u002Fdot11.device.advertised_ssid_map\u002Fdot11.advertisedssid.ssid\"]}' \\\n    > access_points.json\n```\n\n**Client Probe Analysis:**\n\nProbe requests reveal networks that clients have previously connected to, which can indicate:\n- Corporate devices connecting to insecure home networks\n- Devices searching for known-evil SSIDs (evil twin susceptibility)\n- Unauthorized personal devices in corporate space\n\n### Step 4: Analyze Results\n\nPython analysis script for Kismet database:\n\n```python\n#!\u002Fusr\u002Fbin\u002Fenv python3\n\"\"\"Analyze Kismet capture database for wireless security findings.\"\"\"\n\nimport sqlite3\nimport json\nimport sys\nfrom collections import defaultdict\n\n\ndef analyze_kismet_db(db_path: str):\n    \"\"\"Analyze Kismet SQLite database for security issues.\"\"\"\n    conn = sqlite3.connect(db_path)\n    cursor = conn.cursor()\n\n    findings = []\n\n    # Query all devices\n    cursor.execute(\"\"\"\n        SELECT devmac, type, device\n        FROM devices\n    \"\"\")\n\n    devices = cursor.fetchall()\n    ap_count = 0\n    client_count = 0\n    open_networks = []\n    wep_networks = []\n    wpa_tkip_networks = []\n    hidden_networks = []\n    all_aps = []\n\n    for mac, dev_type, device_json in devices:\n        try:\n            device = json.loads(device_json)\n        except json.JSONDecodeError:\n            continue\n\n        base = device.get('kismet.device.base.type', '')\n\n        if 'Wi-Fi AP' in base or 'Wi-Fi Device' in base:\n            ap_count += 1\n            ssid_map = device.get('dot11.device', {}).get(\n                'dot11.device.advertised_ssid_map', []\n            )\n            crypt = device.get('kismet.device.base.crypt', '')\n            name = device.get('kismet.device.base.name', 'Unknown')\n            channel = device.get('kismet.device.base.channel', '')\n            manuf = device.get('kismet.device.base.manuf', 'Unknown')\n\n            ap_info = {\n                'mac': mac,\n                'ssid': name,\n                'encryption': crypt,\n                'channel': channel,\n                'manufacturer': manuf,\n            }\n            all_aps.append(ap_info)\n\n            if 'None' in crypt or crypt == '':\n                open_networks.append(ap_info)\n            elif 'WEP' in crypt:\n                wep_networks.append(ap_info)\n            elif 'WPA+TKIP' in crypt and 'AES' not in crypt:\n                wpa_tkip_networks.append(ap_info)\n\n            for ssid_entry in ssid_map:\n                if isinstance(ssid_entry, dict):\n                    ssid = ssid_entry.get('dot11.advertisedssid.ssid', '')\n                    if ssid == '' or ssid is None:\n                        hidden_networks.append(ap_info)\n\n        elif 'Wi-Fi Client' in base:\n            client_count += 1\n\n    # Generate findings\n    print(f\"\\n{'='*70}\")\n    print(\"WIRELESS SECURITY ASSESSMENT REPORT\")\n    print(f\"{'='*70}\")\n    print(f\"\\nTotal Access Points Detected: {ap_count}\")\n    print(f\"Total Clients Detected: {client_count}\")\n\n    if open_networks:\n        print(f\"\\n[CRITICAL] Open Networks (No Encryption): {len(open_networks)}\")\n        for net in open_networks:\n            print(f\"  - SSID: {net['ssid']}, MAC: {net['mac']}, \"\n                  f\"Channel: {net['channel']}, Vendor: {net['manufacturer']}\")\n\n    if wep_networks:\n        print(f\"\\n[CRITICAL] WEP-Encrypted Networks: {len(wep_networks)}\")\n        for net in wep_networks:\n            print(f\"  - SSID: {net['ssid']}, MAC: {net['mac']}, \"\n                  f\"Channel: {net['channel']}\")\n\n    if wpa_tkip_networks:\n        print(f\"\\n[HIGH] WPA-TKIP Networks (Deprecated): {len(wpa_tkip_networks)}\")\n        for net in wpa_tkip_networks:\n            print(f\"  - SSID: {net['ssid']}, MAC: {net['mac']}, \"\n                  f\"Channel: {net['channel']}\")\n\n    if hidden_networks:\n        print(f\"\\n[MEDIUM] Hidden SSIDs Detected: {len(hidden_networks)}\")\n        for net in hidden_networks:\n            print(f\"  - MAC: {net['mac']}, Channel: {net['channel']}, \"\n                  f\"Vendor: {net['manufacturer']}\")\n\n    # Channel utilization analysis\n    channel_usage = defaultdict(int)\n    for ap in all_aps:\n        ch = ap.get('channel', 'Unknown')\n        channel_usage[ch] += 1\n\n    print(f\"\\n[INFO] Channel Utilization:\")\n    for ch, count in sorted(channel_usage.items()):\n        print(f\"  Channel {ch}: {count} APs\")\n\n    conn.close()\n\n\nif __name__ == '__main__':\n    db_path = sys.argv[1] if len(sys.argv) > 1 else 'Kismet-*.kismet'\n    analyze_kismet_db(db_path)\n```\n\n### Step 5: Detect Rogue Access Points\n\nCompare discovered APs against authorized inventory:\n\n```python\n#!\u002Fusr\u002Fbin\u002Fenv python3\n\"\"\"Detect rogue access points by comparing against authorized AP list.\"\"\"\n\nimport json\nimport sys\n\n\ndef load_authorized_aps(filepath: str) -> set:\n    \"\"\"Load authorized AP MAC addresses from file.\"\"\"\n    authorized = set()\n    with open(filepath, 'r') as f:\n        for line in f:\n            mac = line.strip().lower()\n            if mac and not mac.startswith('#'):\n                authorized.add(mac)\n    return authorized\n\n\ndef detect_rogues(kismet_json: str, authorized_file: str):\n    \"\"\"Compare discovered APs against authorized list.\"\"\"\n    authorized = load_authorized_aps(authorized_file)\n\n    with open(kismet_json, 'r') as f:\n        devices = json.load(f)\n\n    rogues = []\n    for device in devices:\n        mac = device.get('kismet.device.base.macaddr', '').lower()\n        dev_type = device.get('kismet.device.base.type', '')\n\n        if 'AP' in dev_type and mac not in authorized:\n            rogues.append({\n                'mac': mac,\n                'ssid': device.get('kismet.device.base.name', 'Unknown'),\n                'encryption': device.get('kismet.device.base.crypt', ''),\n                'channel': device.get('kismet.device.base.channel', ''),\n                'manufacturer': device.get('kismet.device.base.manuf', ''),\n                'signal': device.get('kismet.device.base.signal', {}).get(\n                    'kismet.common.signal.last_signal', 0),\n            })\n\n    if rogues:\n        print(f\"\\n[ALERT] {len(rogues)} ROGUE ACCESS POINTS DETECTED\\n\")\n        for rogue in rogues:\n            print(f\"  MAC: {rogue['mac']}\")\n            print(f\"  SSID: {rogue['ssid']}\")\n            print(f\"  Encryption: {rogue['encryption']}\")\n            print(f\"  Channel: {rogue['channel']}\")\n            print(f\"  Vendor: {rogue['manufacturer']}\")\n            print(f\"  Signal: {rogue['signal']} dBm\")\n            print()\n    else:\n        print(\"No rogue access points detected.\")\n\n\nif __name__ == '__main__':\n    if len(sys.argv) \u003C 3:\n        print(\"Usage: python detect_rogues.py \u003Ckismet_devices.json> \u003Cauthorized_aps.txt>\")\n        sys.exit(1)\n    detect_rogues(sys.argv[1], sys.argv[2])\n```\n\n## Assessment Checklist\n\n- [ ] All authorized APs identified and verified\n- [ ] Rogue\u002Funauthorized APs identified and located\n- [ ] Encryption types documented for all SSIDs\n- [ ] Hidden SSIDs discovered and documented\n- [ ] Client probe requests analyzed for sensitive patterns\n- [ ] Evil twin susceptibility assessed\n- [ ] WPS status checked on all APs\n- [ ] Signal coverage boundaries mapped\n- [ ] Guest network isolation verified\n- [ ] Management interfaces not exposed on wireless\n\n## Best Practices\n\n- **Written Authorization** - Always obtain signed authorization before performing wireless assessments\n- **Passive Only** - Use Kismet in passive mode; do not transmit deauth frames or probe requests\n- **Comprehensive Channel Coverage** - Scan both 2.4GHz and 5GHz bands including DFS channels\n- **Multiple Locations** - Perform captures from multiple physical locations for complete coverage\n- **Time Duration** - Capture for at least 30-60 minutes to observe intermittent devices\n- **GPS Mapping** - Use GPS to create heat maps for signal boundary analysis\n- **Baseline Comparison** - Maintain an authorized AP inventory and compare against each assessment\n\n## References\n\n- [Kismet Documentation](https:\u002F\u002Fwww.kismetwireless.net\u002Fdocs\u002F)\n- [CISA Kismet Resources](https:\u002F\u002Fwww.cisa.gov\u002Fresources-tools\u002Fservices\u002Fkismet)\n- [NIST SP 800-153 - Wireless Network Security](https:\u002F\u002Fcsrc.nist.gov\u002Fpublications\u002Fdetail\u002Fsp\u002F800-153\u002Ffinal)\n- [Wi-Fi Alliance WPA3 Specification](https:\u002F\u002Fwww.wi-fi.org\u002Fdiscover-wi-fi\u002Fsecurity)\n","# Performing Wireless Security Assessment with Kismet\n\n## Overview\n\nKismet is an open-source wireless network detector, packet sniffer, and wireless intrusion detection system (WIDS) supporting 802.11a\u002Fb\u002Fg\u002Fn\u002Fac\u002Fax. Unlike active scanners, Kismet operates in passive monitor mode, making it undetectable to the networks being assessed. It captures raw 802.11 frames, identifies access points, clients, probe requests, and encryption types without transmitting any packets. This skill covers deploying Kismet for comprehensive wireless security assessments, identifying rogue access points, detecting weak encryption, mapping hidden networks, and analyzing client behavior.\n\n\n## When to Use\n\n- When conducting security assessments that involve performing wireless security assessment with kismet\n- When following incident response procedures for related security events\n- When performing scheduled security testing or auditing activities\n- When validating security controls through hands-on testing\n\n## Prerequisites\n\n- Linux system (Kali Linux, Ubuntu 22.04+) with Kismet 2023+ installed\n- Wireless adapter supporting monitor mode (e.g., Alfa AWUS036ACH, TP-Link TL-WN722N v1)\n- Written authorization for wireless assessment (legal requirement)\n- GPS receiver (optional, for geolocation mapping)\n- Target environment wireless network documentation\n\n## Core Concepts\n\n### Kismet Architecture\n\nKismet uses a client-server architecture:\n\n- **kismet** - Main server process that captures and processes packets\n- **kismet_cap_linux_wifi** - Capture source for Linux WiFi interfaces\n- **kismet_cap_linux_bluetooth** - Capture source for Bluetooth\n- **Web UI** - Browser-based interface at http:\u002F\u002Flocalhost:2501\n\n### Wireless Frame Types\n\n| Frame Type | Purpose | Security Relevance |\n|------------|---------|-------------------|\n| Beacon | AP announces its presence | SSID, encryption, vendor |\n| Probe Request | Client searches for networks | Reveals preferred networks |\n| Probe Response | AP responds to client probe | Hidden SSID disclosure |\n| Authentication | Client authenticates to AP | Auth type identification |\n| Deauthentication | Disconnects client from AP | Potential attack indicator |\n| Association | Client joins network | Client-AP relationship |\n\n### Encryption Assessment\n\n| Encryption | Status | Risk |\n|------------|--------|------|\n| Open (No encryption) | Insecure | Critical - all traffic visible |\n| WEP | Broken | Critical - crackable in minutes |\n| WPA-TKIP | Deprecated | High - known vulnerabilities |\n| WPA2-PSK (CCMP) | Acceptable | Medium - depends on passphrase strength |\n| WPA2-Enterprise (802.1X) | Recommended | Low - certificate-based |\n| WPA3-SAE | Best practice | Low - resistant to offline attacks |\n\n## Workflow\n\n### Step 1: Prepare Wireless Adapter\n\n```bash\n# Identify wireless interfaces\niwconfig\n\n# Check adapter capabilities\niw list | grep -A 10 \"Supported interface modes\"\n\n# Kill processes that may interfere\nsudo airmon-ng check kill\n\n# Enable monitor mode\nsudo ip link set wlan0 down\nsudo iw dev wlan0 set type monitor\nsudo ip link set wlan0 up\n\n# Verify monitor mode\niw dev wlan0 info | grep type\n```\n\n### Step 2: Configure and Launch Kismet\n\nEdit `\u002Fetc\u002Fkismet\u002Fkismet.conf`:\n\n```ini\n# Data sources\nsource=wlan0:name=WiFi-Monitor,channel_hop=true,channel_hoprate=5\u002Fsec\n\n# Logging configuration\nlog_types=kismet,pcapng\nlog_prefix=\u002Fopt\u002Fkismet\u002Flogs\u002Fassessment\n\n# Enable all 802.11 channels (2.4GHz and 5GHz)\nchannel_hop_speed=5\nchannel_list=IEEE80211:1,2,3,4,5,6,7,8,9,10,11,36,40,44,48,52,56,60,64,100,104,108,112,116,120,124,128,132,136,140,149,153,157,161,165\n\n# GPS configuration (if available)\ngps=gpsd:host=localhost,port=2947\n\n# Alert configuration\nalert=ADVCRYPTCHANGE,5\u002Fmin,1\u002Fsec\nalert=BSSTIMESTAMP,5\u002Fmin,1\u002Fsec\nalert=CRYPTODROP,5\u002Fmin,1\u002Fsec\nalert=DISASSOCTRAFFIC,10\u002Fmin,1\u002Fsec\nalert=DEAUTHFLOOD,10\u002Fmin,2\u002Fsec\nalert=PROBENOMFP,5\u002Fmin,1\u002Fsec\n```\n\nLaunch Kismet:\n\n```bash\n# Start Kismet server\nsudo kismet -c wlan0\n\n# Access web interface\n# Open browser to http:\u002F\u002Flocalhost:2501\n# Default credentials: kismet \u002F kismet (change immediately)\n```\n\n### Step 3: Conduct Assessment Scans\n\n**Rogue Access Point Detection:**\n\n```bash\n# Export device list via Kismet REST API\ncurl -u kismet:kismet http:\u002F\u002Flocalhost:2501\u002Fdevices\u002Fsummary\u002Fdevices.json | \\\n    python3 -m json.tool > all_devices.json\n\n# Filter for access points\ncurl -u kismet:kismet \\\n    'http:\u002F\u002Flocalhost:2501\u002Fdevices\u002Fsummary\u002Fdevices.json' \\\n    -d 'json={\"fields\":[\"kismet.device.base.macaddr\",\"kismet.device.base.name\",\"kismet.device.base.type\",\"kismet.device.base.crypt\",\"kismet.device.base.channel\",\"kismet.device.base.manuf\",\"dot11.device\u002Fdot11.device.advertised_ssid_map\u002Fdot11.advertisedssid.ssid\"]}' \\\n    > access_points.json\n```\n\n**Client Probe Analysis:**\n\nProbe requests reveal networks that clients have previously connected to, which can indicate:\n- Corporate devices connecting to insecure home networks\n- Devices searching for known-evil SSIDs (evil twin susceptibility)\n- Unauthorized personal devices in corporate space\n\n### Step 4: Analyze Results\n\nPython analysis script for Kismet database:\n\n```python\n#!\u002Fusr\u002Fbin\u002Fenv python3\n\"\"\"Analyze Kismet capture database for wireless security findings.\"\"\"\n\nimport sqlite3\nimport json\nimport sys\nfrom collections import defaultdict\n\n\ndef analyze_kismet_db(db_path: str):\n    \"\"\"Analyze Kismet SQLite database for security issues.\"\"\"\n    conn = sqlite3.connect(db_path)\n    cursor = conn.cursor()\n\n    findings = []\n\n    # Query all devices\n    cursor.execute(\"\"\"\n        SELECT devmac, type, device\n        FROM devices\n    \"\"\")\n\n    devices = cursor.fetchall()\n    ap_count = 0\n    client_count = 0\n    open_networks = []\n    wep_networks = []\n    wpa_tkip_networks = []\n    hidden_networks = []\n    all_aps = []\n\n    for mac, dev_type, device_json in devices:\n        try:\n            device = json.loads(device_json)\n        except json.JSONDecodeError:\n            continue\n\n        base = device.get('kismet.device.base.type', '')\n\n        if 'Wi-Fi AP' in base or 'Wi-Fi Device' in base:\n            ap_count += 1\n            ssid_map = device.get('dot11.device', {}).get(\n                'dot11.device.advertised_ssid_map', []\n            )\n            crypt = device.get('kismet.device.base.crypt', '')\n            name = device.get('kismet.device.base.name', 'Unknown')\n            channel = device.get('kismet.device.base.channel', '')\n            manuf = device.get('kismet.device.base.manuf', 'Unknown')\n\n            ap_info = {\n                'mac': mac,\n                'ssid': name,\n                'encryption': crypt,\n                'channel': channel,\n                'manufacturer': manuf,\n            }\n            all_aps.append(ap_info)\n\n            if 'None' in crypt or crypt == '':\n                open_networks.append(ap_info)\n            elif 'WEP' in crypt:\n                wep_networks.append(ap_info)\n            elif 'WPA+TKIP' in crypt and 'AES' not in crypt:\n                wpa_tkip_networks.append(ap_info)\n\n            for ssid_entry in ssid_map:\n                if isinstance(ssid_entry, dict):\n                    ssid = ssid_entry.get('dot11.advertisedssid.ssid', '')\n                    if ssid == '' or ssid is None:\n                        hidden_networks.append(ap_info)\n\n        elif 'Wi-Fi Client' in base:\n            client_count += 1\n\n    # Generate findings\n    print(f\"\\n{'='*70}\")\n    print(\"WIRELESS SECURITY ASSESSMENT REPORT\")\n    print(f\"{'='*70}\")\n    print(f\"\\nTotal Access Points Detected: {ap_count}\")\n    print(f\"Total Clients Detected: {client_count}\")\n\n    if open_networks:\n        print(f\"\\n[CRITICAL] Open Networks (No Encryption): {len(open_networks)}\")\n        for net in open_networks:\n            print(f\"  - SSID: {net['ssid']}, MAC: {net['mac']}, \"\n                  f\"Channel: {net['channel']}, Vendor: {net['manufacturer']}\")\n\n    if wep_networks:\n        print(f\"\\n[CRITICAL] WEP-Encrypted Networks: {len(wep_networks)}\")\n        for net in wep_networks:\n            print(f\"  - SSID: {net['ssid']}, MAC: {net['mac']}, \"\n                  f\"Channel: {net['channel']}\")\n\n    if wpa_tkip_networks:\n        print(f\"\\n[HIGH] WPA-TKIP Networks (Deprecated): {len(wpa_tkip_networks)}\")\n        for net in wpa_tkip_networks:\n            print(f\"  - SSID: {net['ssid']}, MAC: {net['mac']}, \"\n                  f\"Channel: {net['channel']}\")\n\n    if hidden_networks:\n        print(f\"\\n[MEDIUM] Hidden SSIDs Detected: {len(hidden_networks)}\")\n        for net in hidden_networks:\n            print(f\"  - MAC: {net['mac']}, Channel: {net['channel']}, \"\n                  f\"Vendor: {net['manufacturer']}\")\n\n    # Channel utilization analysis\n    channel_usage = defaultdict(int)\n    for ap in all_aps:\n        ch = ap.get('channel', 'Unknown')\n        channel_usage[ch] += 1\n\n    print(f\"\\n[INFO] Channel Utilization:\")\n    for ch, count in sorted(channel_usage.items()):\n        print(f\"  Channel {ch}: {count} APs\")\n\n    conn.close()\n\n\nif __name__ == '__main__':\n    db_path = sys.argv[1] if len(sys.argv) > 1 else 'Kismet-*.kismet'\n    analyze_kismet_db(db_path)\n```\n\n### Step 5: Detect Rogue Access Points\n\nCompare discovered APs against authorized inventory:\n\n```python\n#!\u002Fusr\u002Fbin\u002Fenv python3\n\"\"\"Detect rogue access points by comparing against authorized AP list.\"\"\"\n\nimport json\nimport sys\n\n\ndef load_authorized_aps(filepath: str) -> set:\n    \"\"\"Load authorized AP MAC addresses from file.\"\"\"\n    authorized = set()\n    with open(filepath, 'r') as f:\n        for line in f:\n            mac = line.strip().lower()\n            if mac and not mac.startswith('#'):\n                authorized.add(mac)\n    return authorized\n\n\ndef detect_rogues(kismet_json: str, authorized_file: str):\n    \"\"\"Compare discovered APs against authorized list.\"\"\"\n    authorized = load_authorized_aps(authorized_file)\n\n    with open(kismet_json, 'r') as f:\n        devices = json.load(f)\n\n    rogues = []\n    for device in devices:\n        mac = device.get('kismet.device.base.macaddr', '').lower()\n        dev_type = device.get('kismet.device.base.type', '')\n\n        if 'AP' in dev_type and mac not in authorized:\n            rogues.append({\n                'mac': mac,\n                'ssid': device.get('kismet.device.base.name', 'Unknown'),\n                'encryption': device.get('kismet.device.base.crypt', ''),\n                'channel': device.get('kismet.device.base.channel', ''),\n                'manufacturer': device.get('kismet.device.base.manuf', ''),\n                'signal': device.get('kismet.device.base.signal', {}).get(\n                    'kismet.common.signal.last_signal', 0),\n            })\n\n    if rogues:\n        print(f\"\\n[ALERT] {len(rogues)} ROGUE ACCESS POINTS DETECTED\\n\")\n        for rogue in rogues:\n            print(f\"  MAC: {rogue['mac']}\")\n            print(f\"  SSID: {rogue['ssid']}\")\n            print(f\"  Encryption: {rogue['encryption']}\")\n            print(f\"  Channel: {rogue['channel']}\")\n            print(f\"  Vendor: {rogue['manufacturer']}\")\n            print(f\"  Signal: {rogue['signal']} dBm\")\n            print()\n    else:\n        print(\"No rogue access points detected.\")\n\n\nif __name__ == '__main__':\n    if len(sys.argv) \u003C 3:\n        print(\"Usage: python detect_rogues.py \u003Ckismet_devices.json> \u003Cauthorized_aps.txt>\")\n        sys.exit(1)\n    detect_rogues(sys.argv[1], sys.argv[2])\n```\n\n## Assessment Checklist\n\n- [ ] All authorized APs identified and verified\n- [ ] Rogue\u002Funauthorized APs identified and located\n- [ ] Encryption types documented for all SSIDs\n- [ ] Hidden SSIDs discovered and documented\n- [ ] Client probe requests analyzed for sensitive patterns\n- [ ] Evil twin susceptibility assessed\n- [ ] WPS status checked on all APs\n- [ ] Signal coverage boundaries mapped\n- [ ] Guest network isolation verified\n- [ ] Management interfaces not exposed on wireless\n\n## Best Practices\n\n- **Written Authorization** - Always obtain signed authorization before performing wireless assessments\n- **Passive Only** - Use Kismet in passive mode; do not transmit deauth frames or probe requests\n- **Comprehensive Channel Coverage** - Scan both 2.4GHz and 5GHz bands including DFS channels\n- **Multiple Locations** - Perform captures from multiple physical locations for complete coverage\n- **Time Duration** - Capture for at least 30-60 minutes to observe intermittent devices\n- **GPS Mapping** - Use GPS to create heat maps for signal boundary analysis\n- **Baseline Comparison** - Maintain an authorized AP inventory and compare against each assessment\n\n## References\n\n- [Kismet Documentation](https:\u002F\u002Fwww.kismetwireless.net\u002Fdocs\u002F)\n- [CISA Kismet Resources](https:\u002F\u002Fwww.cisa.gov\u002Fresources-tools\u002Fservices\u002Fkismet)\n- [NIST SP 800-153 - Wireless Network Security](https:\u002F\u002Fcsrc.nist.gov\u002Fpublications\u002Fdetail\u002Fsp\u002F800-153\u002Ffinal)\n- [Wi-Fi Alliance WPA3 Specification](https:\u002F\u002Fwww.wi-fi.org\u002Fdiscover-wi-fi\u002Fsecurity)\n",{"name":5,"note":25,"tags":26,"author":36,"domain":37,"source":38,"license":15,"version":39,"nist_csf":40,"subdomain":45,"description":7,"mitre_attack":46,"source_commit":52},"Vendored verbatim from an external Apache-2.0 security-skill library, pinned by commit. Exceeds the internal 300-line skill guideline (agent-code-constraints.md) -- kept as-is because this is vendored reference material (forensics\u002Fthreat-intel procedure), not Yana AI-authored content, and trimming would damage technical accuracy.",[27,28,29,30,31,32,33,34,35],"kismet","wireless-security","wifi-assessment","rogue-ap",802.11,"wardriving","wids","wireless-ids","rf-monitoring","mahipal","cybersecurity","https:\u002F\u002Fgithub.com\u002Fmukul975\u002FAnthropic-Cybersecurity-Skills","1.0",[41,42,43,44],"PR.IR-01","DE.CM-01","ID.AM-03","PR.DS-02","network-security",[47,48,49,50,51],"T1046","T1040","T1557","T1071","T1573","04450304b12645cb2b974ab96d28c0664758a88d","main","481dcd7dd2e288b9d627a2bd017db70e64e6c6fa","core\u002Fskills\u002Fperforming-wireless-security-assessment-with-kismet",1,"https:\u002F\u002Fgithub.com\u002FHoronomos-laps\u002FYana-AI","https:\u002F\u002Fyana.vutam.link\u002F","https:\u002F\u002Fgithub.com\u002FHoronomos-laps","https:\u002F\u002Fyana.vutam.link","An open-source governed runtime & execution environment for multi-agent AI systems.","2026-11-11 23:56:26",{"source":8,"skillName":5,"commands":64,"prompt":74,"zipAvailable":75},[65,68,71],{"tool":66,"command":67},"npx","npx skills add Horonomos-laps\u002FYana-AI --skill performing-wireless-security-assessment-with-kismet",{"tool":69,"command":70},"bunx","bunx skills add Horonomos-laps\u002FYana-AI --skill performing-wireless-security-assessment-with-kismet",{"tool":72,"command":73},"pnpm","pnpm dlx skills add Horonomos-laps\u002FYana-AI --skill performing-wireless-security-assessment-with-kismet","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FHoronomos-laps\u002FYana-AI\u002Fblob\u002Fmain\u002Fcore\u002Fskills\u002Fperforming-wireless-security-assessment-with-kismet\u002FSKILL.md",true,[77,81,87],{"path":78,"resourceType":78,"resourceTypeDesc":79,"sizeBytes":80,"sourceHtmlUrl":16},"LICENSE","许可证",11255,{"path":82,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":85,"sourceHtmlUrl":86},"references\u002Fapi-reference.md","REFERENCE","参考文档",2054,"https:\u002F\u002Fgithub.com\u002Fyanacuti1121\u002FYana-AI\u002Fblob\u002Fmain\u002Fcore\u002Fskills\u002Fperforming-wireless-security-assessment-with-kismet\u002Freferences\u002Fapi-reference.md",{"path":88,"resourceType":89,"resourceTypeDesc":90,"sizeBytes":91,"sourceHtmlUrl":92},"scripts\u002Fagent.py","SCRIPT","脚本",5818,"https:\u002F\u002Fgithub.com\u002Fyanacuti1121\u002FYana-AI\u002Fblob\u002Fmain\u002Fcore\u002Fskills\u002Fperforming-wireless-security-assessment-with-kismet\u002Fscripts\u002Fagent.py",[94,102,109,117,125,133],{"skillNo":95,"name":96,"nameZh":6,"description":97,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":98,"licenseFileUrl":6,"sourceHtmlUrl":99,"categories":100,"keywords":101,"publishedAt":20},"01M735GKET5YVYKAY62W2P5YXB","openai--sentry--sentry","Use when the user asks to inspect Sentry issues or events, summarize recent production errors, or pull basic Sentry health data via the Sentry API; perform read-only queries with the bundled script and require `SENTRY_AUTH_TOKEN`.","MIT","https:\u002F\u002Fgithub.com\u002FHoronomos-laps\u002FYana-AI\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fopenai--sentry--sentry\u002FSKILL.md",[],[],{"skillNo":103,"name":104,"nameZh":6,"description":105,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":106,"categories":107,"keywords":108,"publishedAt":20},"01M73DCAP83T17HY7SMGK7MGFE","ito-basket-compare","Compare Itô prediction-market baskets against a user's knowledge base, portfolio notes, financial context, watchlist, or research thesis. Use for read-only basket comparison and gap analysis without investment advice or live trading.","https:\u002F\u002Fgithub.com\u002FHoronomos-laps\u002FYana-AI\u002Fblob\u002Fmain\u002Fcore\u002Fskills\u002Fito-basket-compare\u002FSKILL.md",[],[],{"skillNo":110,"name":111,"nameZh":6,"description":112,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":113,"sourceHtmlUrl":114,"categories":115,"keywords":116,"publishedAt":20},"01M734CYEMZFDR3KH6SW0JP8TD","implementing-network-traffic-baselining","Build network traffic baselines from NetFlow\u002FIPFIX data using Python pandas for statistical analysis, z-score anomaly detection, and hourly\u002Fdaily traffic pattern profiling","https:\u002F\u002Fgithub.com\u002Fyanacuti1121\u002FYana-AI\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fimplementing-network-traffic-baselining\u002FLICENSE","https:\u002F\u002Fgithub.com\u002FHoronomos-laps\u002FYana-AI\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fimplementing-network-traffic-baselining\u002FSKILL.md",[],[],{"skillNo":118,"name":119,"nameZh":6,"description":120,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":121,"sourceHtmlUrl":122,"categories":123,"keywords":124,"publishedAt":20},"01M73ASZ6NJRJM44Z2P84NGQ3Q","detecting-evasion-techniques-in-endpoint-logs","Detects defense evasion techniques used by adversaries in endpoint logs including log tampering, timestomping, process injection, and security tool disabling. Use when investigating suspicious endpoint behavior, building detection rules for evasion tactics, or conducting threat hunting for stealthy adversary activity. Activates for requests involving evasion detection, defense evasion analysis, log tampering detection, or MITRE ATT&CK TA0005.","https:\u002F\u002Fgithub.com\u002Fyanacuti1121\u002FYana-AI\u002Fblob\u002Fmain\u002Fcore\u002Fskills\u002Fdetecting-evasion-techniques-in-endpoint-logs\u002FLICENSE","https:\u002F\u002Fgithub.com\u002FHoronomos-laps\u002FYana-AI\u002Fblob\u002Fmain\u002Fcore\u002Fskills\u002Fdetecting-evasion-techniques-in-endpoint-logs\u002FSKILL.md",[],[],{"skillNo":126,"name":127,"nameZh":6,"description":128,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":129,"sourceHtmlUrl":130,"categories":131,"keywords":132,"publishedAt":20},"01M734AFNXD06Z78QRK0VKGT7Q","implementing-microsegmentation-with-guardicore","Implementing microsegmentation using Akamai Guardicore Segmentation to map application dependencies, create granular network policies, visualize east-west traffic flows, and enforce least-privilege communication between workloads across data centers and cloud.","https:\u002F\u002Fgithub.com\u002Fyanacuti1121\u002FYana-AI\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fimplementing-microsegmentation-with-guardicore\u002FLICENSE","https:\u002F\u002Fgithub.com\u002FHoronomos-laps\u002FYana-AI\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fimplementing-microsegmentation-with-guardicore\u002FSKILL.md",[],[],{"skillNo":134,"name":135,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":136,"categories":137,"keywords":138,"publishedAt":20},"01M736TK27QMCXK0DVCH25SJN5","ramdisk-tmpfs-patterns","https:\u002F\u002Fgithub.com\u002FHoronomos-laps\u002FYana-AI\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Framdisk-tmpfs-patterns\u002FSKILL.md",[],[]]