7.5 KiB
Executable File
Kismet
Kismet is a wireless network and device detector, sniffer, wardriving tool, and WIDS (wireless intrusion detection) framework.
Kismet works with Wi-Fi interfaces, Bluetooth interfaces, some SDR (software defined radio) hardware like the RTLSDR, and other specialized capture hardware.
Kismet can integrate with a GPS device to provide geolocation coordinates for devices.
Compile
Important to get no errors: If you installed Kismet using a package from your distribution, uninstall it the same way; if you compiled it yourself, be sure to remove it.
# get all requiremets
sudo apt install build-essential git libwebsockets-dev pkg-config zlib1g-dev libnl-3-dev libnl-genl-3-dev libcap-dev libpcap-dev libnm-dev libdw-dev libsqlite3-dev libprotobuf-dev libprotobuf-c-dev protobuf-compiler protobuf-c-compiler libsensors4-dev libusb-1.0-0-dev python3 python3-setuptools python3-protobuf python3-requests python3-numpy python3-serial python3-usb python3-dev python3-websockets librtlsdr0 libubertooth-dev libbtbb-dev
# Clone Kismet from git
git clone https://www.kismetwireless.net/git/kismet.git
cd kismet
# Run configure
# If you have any missing dependencies or incompatible library versions, they will show up here
./configure
# compile and install Kismet
make
sudo make suidinstall
# add your user to the kismet group
sudo usermod -aG kismet $USER
# reload and check your groups
newgrp -
groups
For RTLSDR rtl_433 support, you will also need the rtl_433 tool if it is not already a package in your distribution.
Kismet can be run with no options and configured completely from the web interface: kismet
.
If you already know which interface to use you can start Kismet with that source already defined, e.g. kismet -c wlan0
.
THE FIRST TIME YOU RUN KISMET, you must go to the Kismet web UI and create a login and password. This password is stored in ~/.kismet/kismet_httpd.conf
which is in the home directory of the user which started Kismet.
Automatically launching Kismet
An example systemd script is in the packaging/systemd/
directory of the Kismet source; if you are installing from source this can be copied to /etc/systemd/system/kismet.service
and packages should automatically include this file.
When starting Kismet via systemd, you should install kismet as suidroot and use systemctl edit kismet.service
to set the following:
[Service]
User=your-unprivileged-user
Group=kismet
When using systemd, you will need to be sure to configure Kismet to log to a valid location. By default, Kismet logs to the directory it is launched from, which is unlikely to be valid when starting from a boot script. Be sure to put a log_prefix=...
in your kismet_site.conf
, e.g. log_prefix=/home/kismet/logs
Configuring Kismet
Lismet is configured through a set of text files. By default these are installed into /usr/local/etc/
when compiling from source. The config is seperated into several files:
kismet.conf
: master config file which loads all other configuration files and contains most of the system-wide optionskismet_alerts.conf
: includes rules for alert matching, rate limits on alerts, and other IDS/problem detection optionskismet_httpd.conf
: Webserver configurationkismet_memory.conf
: Memory consumption and system tuning optionskismet_storage.conf
: persistent storage configurationkismet_logging.conf
: Logfile configurationkismet_filter.conf
: Packet and device filterkismet_uav.conf
: Parsing rules for detecting UAV/Drones or similar deviceskismet_80211.conf
: Configuration settings for Wi-Fi specific optionskismet_site.conf
: Optional configuration override; will load any options here last and take precedence over all other configs
Any lines beginning with a #
are comments, and are ignored
Often used configurations are listed below:
Edit /kismet.conf
to set the default devices to use, e.g. wifi, bluetooth and GPS
#wireless adapter
source=wlan1:name=wifi1:type=linuxwifi
#internal bluetooth
source=hci0:name=bluetooth0:type=linuxbluetooth
#gpsd service with gps-usb adapter
gps=gpsd:host=localhost,port=2947,reconnect=true
Edit /kismet_logging.conf
to change logging to a defined new path instead of home directory.
Edit /kismet_filter.conf
to filter your own devices and packets and reduce waste of time and space.
kis_log_device_filter=IEEE802.11,B0:4E:26:11:95:F9,block
kis_log_packet_filter=IEEE802.11,any,02:11:87:1A:A0:D9,block
Change /kismet_memory.conf
as you like, here is a configuration to run efficent and memory cheap on a RPi:
# Forget long idle devices
tracker_device_timeout=1800 # 60s * 30 = 30 minutes
# Don't track signal levels
keep_datasource_signal_history=false
# Disable memory taking organizing of devices
track_device_seenby_view=false
track_device_phy_view=false
manuf_lookup=false
packet_dedup_size=1024 #standard 2048
KismetDB
Kismet can replay recorded data in the kismetdb format, the unified log created by Kismet.
Kismet can replay a pcapfile for testing, debugging, demo, or reprocessing.
A kismetdb
file can contain packets and device data from any source Kismet handles.
# Install kismetdb
curl "https://bootstrap.pypa.io/get-pip.py" -o "get-pip.py"
python3 get-pip.py
# or
sudo apt install python3-pip
pip3 install kismetdb
The kismetdb datasource will auto-detect kismetdb files and paths to files:
kismet -c /tmp/foo.kismet
useful commands
Before sharing a packet log, you should strip the packet content
kismetdb_strip_packets --in some-kismet-file.kismet --out some-other-file.kismet
Kismet to Wigle (to upload it via browser to wigle.net)
kismetdb_to_wiglecsv --in some-kismet-log-file.kismet --out some-wigle-file.csv
Kismet to KML, an XML-based markup language for use with Google Earth
kismetdb_to_kml --in some-kismet-log-file.kismet --out some-kml-file.kml
Kismet stores devices it has seen in the kismetdb log file as JSON dumps containing everything Kismet knows about a device.
kismetdb_dump_devices --in some-kismet-file.kismet --out some-json.json
useful plugins
Kestrel (Maps)
Add live mapping of networks into the Kismet UI directly
git clone https://gitlab.com/SoliForte777/Kestrel.git
cd Kestrel/plugin-kestrel
sudo make install
IoD (Internet of Dongs)
Plugin for Kismet to detect and highlight IoD devices.
git clone https://github.com/internetofdongs/IoD-Screwdriver.git
cd IoD-Screwdriver/plugin-iod-screwdriver
make install
Report Generator
This tool generates a report for a specific SSID. This data is exportable as PDF and CSV
git clone https://github.com/soliforte/kismetreportgen.git
cd kismetreportgen
make install
run a Kismet bot
Add new user and update
useradd -m scanbot -G kismet -s /bin/bash
# add password to bot
passwd scanbot
usermod -aG sudo scannrunner
load new configuration with logout
and log back in
autostart kismet for bot
# copy systemd file from kismet to systemd
cp /home/pi/kismet/packaging/systemd/kismet.service /lib/systemd/system/
systemctl edit kismet
[Service]
User=scanbot
Group=kismet
systemctl enable kismet
systemctl start kismet
systemctl status kismet
reboot
The bot will now start Kismet on boot and log every device you get near (if you configured it correct).