I want to mimic a replay attack on controller PR402. I connected my
computer with this controller via TCP/IP <-> Serial Bridge and I would
like to analyse packets sent between computer and controller.
Poiché hai a che fare con TCP / IP ↔︎ Serial Bridge, puoi supporre che la porzione di dati del pacchetto TCP sia quella che viene trasferita sulla linea seriale. Quindi puoi ignorare tutto tranne la porzione di dati del pacchetto TCP.
First of all, I send a command "Disarm the system" from software
provided by the producer and capture these packets in Wireshark
Suppongo che tu stia usando Roger's PR Master software o equivalente. Due cose che vorrai fare:
- Ripeti il comando "Disattiva il sistema" più volte, separate dal tempo. Questo ti permetterà di vedere se il comando è un duplicato esatto ogni volta, o se include qualcosa che varia come un contatore incrementale o un timestamp.
- Esegui diversi altri comandi, più volte ciascuno. Di nuovo, sono ripetizioni statiche o si trasformano? Hanno aspetti comuni (ad esempio, ognuno inizia con 0xb03e) o sono tutti unici?
I upload 2 captures. These are just some packets from running the same
command - "Disarm system". I found out that packets from 1st to 8th
from the first screen and from 2nd to 9th have the same length and I
think there this "Disarm system" command was transmitted. Let me know
if this is the right direction of analysis.
Guardando la prima cattura, vedo diversi piccoli bit di dati scambiati. (Tornando a ciò che ho detto all'inizio, ti interessano solo i dati. Puoi dire quando un pacchetto ha dati in questo esempio perché PSH (TCP "Push" Flag) viene utilizzato su tutti i dati pacchetti e la vista di Wireshark mostra "Len = X" per indicare X byte di dati.
1: You -> PR402 3 bytes (0xbe3e01)
2: You -> PR402 9 bytes (???)
3: PR402 -> You 3 bytes (???)
4: PR402 -> You 7 bytes (???)
6: You -> PR402 3 bytes (???)
7: You -> PR402 3 bytes (???)
9: PR402 -> You 1 byte (???)
Dove un messaggio da 3 byte inizia comunemente una serie direzionale (1, 3, 6), potrebbe essere il comando, o potrebbe essere un meta-comando - per esempio, il pacchetto 1 significa "RICHIESTA", il pacchetto 2 significa "DISARMO" ", il pacchetto 3 significa" RISPOSTA ", pacchetto significa" FATTO ".
Qui è dove analisi differenziale , il confronto tra l'acquisizione di ripetizioni diverse dello stesso comando e comandi diversi, arriva - se si invia "ARM", e il pacchetto # 1 è ancora 0xb03e01, allora quello è non ARM / DISARM, è un messaggio di attenzione / richiesta / ecc.
Sai che devi:
Analyse them, dump to a file
Con i pacchetti così brevi probabilmente stai anche facendo clic su ogni pacchetto in Wireshark e digitando manualmente i byte di dati 1-10 per pacchetto.
Quindi, passa attraverso le tue catture e riassumi cosa sta dicendo cosa a chi, scrivilo come ho fatto sopra (ma sostituendo ??? con byte effettivi). Fallo per diversi DISARM e diverse sequenze non DISARM. (Se fai qualcosa come aggiungere un utente con il PIN, allora dovresti vedere l'id utente e il PIN in uno dei pacchetti di dati, il che ti aiuterà a capire come questi scambi pensano ai dati mentre stanno scambiandoli.)
Una volta ottenuti questi pattern, sarai in grado di indovinare come implementare il pattern DISARM da solo.
Generate proper packet/frame
Puoi usare qualcosa come scapy per questo. Se si invia un pacchetto TCP con dati 0xb03e01, ad esempio:
# scapy
>>> packet=IP(dst="192.168.0.21")/TCP(dport=771)/"\xb0\x3e\x01"
>>> send(packet)
.
Sent 1 packets.
Mettendo questo nel contesto di una connessione TCP ben strutturata è un poco più lavoro . Se hai bisogno di eseguire più pacchetti attraverso una singola connessione, dovrai scavare un po 'più in profondità nello scapy (ad esempio, riutilizzare socket ), ma questo è lo strumento che farà rapidamente e facilmente ciò che si vuole fare. Ad esempio, potresti anche inserire un wrapper Perl / Python su nmap, anche se questo ti dà un po 'meno controllo per pacchetto.
Dato che hai a che fare con una connessione da TCP a seriale, l'invio di singoli pacchetti come quello - una connessione TCP, un pacchetto e chiuso - probabilmente sta bene. Probabilmente il bridge Serial potrebbe interessare meno il numero di connessioni TCP utilizzate.
Transfer it to the controller and achieve disarming system
Se hai accesso TCP al bridge Serial, allora tutto ciò che devi fare è inviare i pacchetti. Se funziona per il software PR Master, e lo imiti correttamente funzionerà per te. Ricordate, questo è un dispositivo di sicurezza fisica e funziona probabilmente supponendo che tutti gli input seriali siano attendibili perché la linea seriale non è esposta a spazi fisici non attendibili. La dimensione dei dati che stiamo osservando in questi scambi di pacchetti rende improbabile la crittografia o le precauzioni di autenticazione.