Sto cercando di implementare il collegamento dell'applicazione desktop alla controparte mobile per il mio progetto. L'ipotesi è che l'app mobile sia sicura e l'app desktop abbia semplicemente bisogno di collegare la sessione al cellulare per comodità.
Nella mia ricerca ho trovato l' exploit QRLjacking . Si tratta di un exploit di ingegneria sociale che non è molto diverso dall'ottenere gli utenti a rivelare le loro password.
La cosa interessante è che l'app Signal non sembra vulnerabile all'utilizzo di QRLjacking, nonostante il fatto che anche loro colleghino il desktop al cellulare tramite il codice QR.
Sto cercando di capire qual è la salsa segreta applicata dal segnale. Fortunatamente, il codice è qui: link
Sulla base della mia analisi, ecco cosa penso che facciano:
- L'utente registra il dispositivo mobile. Il dispositivo invia pre-chiavi firmate al server Signal
- L'utente può chattare con altri utenti di Signal utilizzando il protocollo crittografato end-to-end, ma ciò che è più interessante per me è il modo in cui impediscono la vulnerabilità di QR durante il collegamento al desktop.
- L'utente installa l'app desktop. La prima cosa da notare è che si tratta di un'app JavaScript impacchettata con l'elettrone. Ciò rende difficile l'utilizzo nelle tecniche di ingegneria sociale. Il pacchetto di installazione può essere firmato e verificato come affidabile.
- Al momento dell'installazione, l'app desktop genera le pre-chiavi e le invia al server.
- Il desktop utilizza la propria chiave pubblica per verificare con il server se è collegato al cellulare. In caso contrario, procedere al passaggio 6.
- Invia la chiave pubblica al server sotto una chiave UUID. Il server lo memorizza. L'UUID è utilizzato per il codice QR.
- L'utente alza il suo dispositivo mobile e scansiona il codice QR con l'app di segnale.
- L'app mobile utilizza il codice QR per scaricare la chiave pubblica dell'app desktop
- L'app mobile invia un messaggio di conferma crittografato all'app desktop, che l'app desktop verifica utilizzando la sua chiave privata.
- L'app per app desktop chiede all'utente di denominare questa app desktop, in genere questo è il nome dell'host su cui è in esecuzione. L'app desktop invia questo messaggio al cellulare (criptato, ovviamente).
- Sul dispositivo mobile, ora viene visualizzato il dispositivo collegato. In qualsiasi momento l'utente può rimuovere il dispositivo collegato, che diventa immediatamente noto al desktop.
- Non credo che il server sia utilizzato per conservare i messaggi. Penso che il desktop si sincronizzi con il cellulare su richiesta.
In sintesi, l'exploit di QRLjacking è mitigato da Signal nel modo seguente:
- L'app non è basata su browser ed è invece installata. Il pacchetto di installazione può essere firmato e verificato con un certificato.
- L'app desktop può anche archiviare in modo sicuro le chiavi localmente, non sul server. Ciò rende difficile perseguire un attacco di social engineering dal momento che richiederebbe il rilevamento fisico della macchina su cui è in esecuzione l'applicazione desktop.
La mia analisi è corretta?