Wiki / Protocols

LoRa

Long-range sub-GHz chirp radio: sniffable, with replayable and mis-keyed LoRaWAN joins.

LoRaWAN architecture
Network Server
Gateway
End device
End device
Gateway
End device
In LoRaWAN, battery end devices transmit LoRa frames that any gateway in range forwards over IP to a central Network Server; the server de-duplicates, checks the MIC, and routes payloads to the application. Gateways are dumb packet forwarders. Raw LoRa (no LoRaWAN) is just the modulation, with no server and no security at all.

LoRa (Long Range) is a sub-GHz chirp spread-spectrum radio modulation for long-distance, low-power links, and LoRaWAN is the network and security layer most deployments run on top of it. Note the split: LoRa is the physical layer (the chirp), LoRaWAN is the MAC and crypto. Attacking one is not the same as attacking the other.

What it is

LoRa uses chirp spread spectrum (CSS): each symbol is an up-chirp that sweeps across the channel bandwidth, which trades data rate for range and lets a receiver pull signals out from below the noise floor. Three parameters set the physical link and must all match to decode a frame:

Param Meaning
Frequency 868MHz (EU), 915MHz (US), 433MHz (Asia)
SF spreading factor 7 to 12: higher = more range, lower rate
BW bandwidth 125 / 250 / 500 kHz

LoRaWAN then classifies devices as Class A (uplink then two short receive windows, lowest power), Class B (scheduled beacon slots), or Class C (always listening). Security uses two AES-128 keys: a network session key (NwkSKey) for the frame MIC and an application session key (AppSKey) for payload encryption.

Why it matters

LoRaWAN carries OT telemetry, utility metering, and asset trackers over kilometres, so the radius of exposure is large and the endpoints are physically unreachable. Two keying modes exist. ABP (Activation By Personalization) burns static session keys into the device; if those leak or are reused, an attacker can decrypt and forge indefinitely. OTAA (Over The Air Activation) derives fresh session keys from a join, but if the server does not track the DevNonce, a captured join-request can be replayed to force re-keying or denial of service. Raw, non-LoRaWAN LoRa links are frequently unauthenticated and unencrypted entirely.

How to attack it

Match the physical parameters first, then work up the stack:

# 1. Find energy in the sub-GHz band with an SDR.
gqrx                              # or rtl_power sweep around 868/915 MHz

# 2. Decode LoRa frames once frequency, SF, and BW match.
#    gr-lora / gr-lora_sdr flowgraph in GNU Radio, or a LoStik/Heltec node.

# 3. Inspect and replay. For LoRaWAN, load keys into a decoder.
#    lorawan-parser / a NwkSKey+AppSKey in Wireshark's LoRaWAN dissector.

# 4. Replay a captured uplink or a join-request; jam by transmitting
#    continuously on the target channel.

For cheap sub-GHz replay of simple (non-LoRaWAN) OOK/FSK remotes, a CC1101 or a Flipper Zero is often enough; for real LoRa chirp decode you want an SDR (RTL-SDR receive, HackRF for transmit) plus gr-lora, or a dedicated LoRa concentrator.

Pitfalls

  • LoRa is not LoRaWAN. A Flipper or CC1101 can replay a dumb sub-GHz remote, but it does not demodulate LoRa CSS; that needs an SDR flowgraph or a LoRa transceiver.
  • All three of frequency, SF, and BW must match, plus sync word and coding rate. A near miss decodes nothing, which reads like "no signal".
  • OTAA replay only works when the server accepts a repeated DevNonce; compliant LoRaWAN 1.0.4 / 1.1 servers track it and reject the replay.
  • Regional duty-cycle limits (notably 1% in EU868) constrain how often you can legally transmit; jamming and flooding cross legal lines fast.

Further reading