MyDeviceGuard è una Progressive Web App (PWA) pensata per tenere sotto controllo la sicurezza dei tuoi device personali: laptop, desktop, smartphone, tablet. Si installa dal browser come una qualunque app e funziona offline, senza account e senza cloud.
Le funzioni principali sono quattro:
Questo è forse il punto più importante del manuale. MyDeviceGuard è stato progettato con un principio non negoziabile: i tuoi dati non devono lasciare il tuo device.
Tutto quello che fai — sessioni del tracker, risultati degli audit, alert di sicurezza, dispositivi HID approvati, device remoti accoppiati — viene salvato esclusivamente nella memoria del tuo browser, in due strutture chiamate IndexedDB e localStorage. Sono spazi locali che appartengono a te e a questo browser, come fossero una cartella privata nel disco.
Quando disinstalli la PWA o "cancelli dati sito" dalle impostazioni browser, tutti i dati spariscono dal tuo device. Non esistono altrove.
La prima volta che apri MyDeviceGuard, la schermata Home ti chiede due cose:
Cliccando Salva viene creato automaticamente anche un identificativo univoco locale (UUID) che accompagnerà i log di questo device. Non è condiviso con nessuno in automatico — viaggia solo se tu lo esporti tramite backup o se ti connetti via P2P a un tuo altro device.
Puoi cambiare il nome in qualsiasi momento dalla card "Dati e privacy" in basso a destra nella Home, con il bottone Rinomina device.
MyDeviceGuard funziona in due modalità: come pagina web aperta dal browser, o come app installata sulla schermata Home / Dock / menu Start. La seconda è nettamente consigliata perché sblocca funzionalità come le notifiche, un'icona dedicata, finestra senza barra URL, e avvio rapido.
Su iOS, la Fotocamera e il lettore QR aprono sempre i link nel browser predefinito del sistema. Se installi la PWA in un browser, ma il predefinito è un altro, i QR di pairing finiscono in un'app diversa da quella dove hai i tuoi dati. Si creano "due MyDeviceGuard" separati che non si parlano.
La regola d'oro è: installa la PWA nello stesso browser che è il tuo predefinito iOS.
Per verificare e scegliere il browser predefinito:
Ora installa la PWA nello stesso browser che hai scelto:
Da ora in poi l'icona dello scudo è sulla home dell'iPhone. Aprendola, la PWA parte a schermo intero senza barra URL. Ogni volta che scansioni un QR di pairing, la Fotocamera apre lo stesso browser e quindi la stessa PWA: tutto funziona senza attriti.
L'app appare nel Launchpad, puoi trascinarla nel Dock, cercarla con Spotlight. Si comporta come una qualsiasi app nativa.
Per usare bene la PWA aiuta conoscere quattro concetti.
Ogni installazione della PWA su un browser specifico rappresenta un "device" a sé, con nome, ID e log propri. Il tuo MacBook visto da Safari e lo stesso MacBook visto da Chrome sono due device diversi per MyDeviceGuard, perché i dati sono separati per browser. Questo è un limite del modello PWA, non una scelta nostra.
È il "registro" di questo device. Quando avvii il Tracker, la PWA inizia a scrivere un evento ogni 30 secondi (heartbeat) più altri eventi speciali. È utile per avere prova di quando il device è stato aperto/attivato. Funziona come un diario.
È la "vista remota" che usi da un altro device. Se il tuo iPhone è accoppiato al tuo laptop (vedi Pairing), dal Controller puoi chiedere al laptop "fammi vedere il tuo stato", "scaricami i tuoi log", "esegui un audit". Il laptop risponde solo se ha una pagina della PWA aperta in quel momento.
È l'operazione che crea un legame cifrato tra due tuoi device. Avviene una volta sola, tramite QR code. Dopo il pairing i due device si riconoscono sempre e comunicano in modo cifrato end-to-end.
La Home è il punto di partenza. Dopo l'onboarding mostra una griglia di card, ciascuna è una sezione dell'app. Sulla card Security Audit compare in tempo reale un piccolo badge con lo stato dell'ultimo audit (es. "10m fa · 2 avvisi"), così vedi a colpo d'occhio se c'è qualcosa di nuovo.
In basso a destra, la card Dati e privacy contiene due azioni:
In alto a destra, l'icona luna/sole permette di alternare tema chiaro e scuro. La scelta è persistente.
La pagina Tracker è composta di tre sezioni.
Mostra nome e ID del device, quando è stata avviata la sessione corrente, la durata, l'ultimo heartbeat. Con il bottone Avvia tracking inizi a registrare: da quel momento, ogni 30 secondi la PWA scrive un heartbeat nei log. Quando premi Ferma tracking viene registrata la durata totale della sessione.
Il bottone Audit rapido esegue un controllo di sicurezza al volo, senza aprire la pagina Security.
Serve se vuoi che questo device sia controllabile da remoto. Cliccando Attiva ricevitore, la PWA genera un Peer ID e resta in ascolto. Da questo momento gli altri tuoi device accoppiati possono collegarsi via Controller e interrogare questo.
In alternativa, c'è il collegamento a Genera QR di pairing se devi ancora accoppiare un nuovo device.
Tabella riepilogativa degli ultimi 20 eventi registrati sul device. Utile per controllare a colpo d'occhio cosa è stato registrato.
Questa è la sezione più importante per la sicurezza. Clicca Avvia audit per eseguire un controllo completo del tuo browser/device. La PWA genera una lista di 20+ check con quattro possibili esiti:
Toggle ⌨️ Monitor digitazione: OFF / ON. Quando attivo, la PWA conta quanti tasti premi al secondo. Se supera una soglia molto alta (15 tasti/secondo, ben oltre anche un dattilografo veloce), registra un alert perché potrebbe essere il sintomo di un attacco con Rubber Ducky o BadUSB (dispositivi USB che fingono di essere tastiere per iniettare comandi rapidissimi).
Bottone 🔌 Ispeziona HID: enumera i dispositivi HID (tastiere, mouse, gamepad, lettori codici) che hai autorizzato al browser. È il punto di partenza per popolare la whitelist HID.
Un audit fatto ogni tanto a mano è utile, ma l'audit automatico periodico è molto più potente: fa confronti nel tempo e ti avvisa se qualcosa cambia.
Nella card ⏱️ Audit schedulato trovi:
Ogni volta che parte l'audit schedulato, il sistema confronta il risultato con l'ultimo snapshot. Se rileva differenze — un permesso passato da "prompt" a "granted", HTTPS disattivato, un nuovo HID comparso, ecc. — genera automaticamente un alert nel log e, se hai concesso le notifiche, fa apparire una notifica di sistema.
Esempio pratico: ieri la PWA non aveva accesso alla fotocamera. Oggi tu hai concesso il permesso (magari distrattamente, magari qualcun altro ha toccato il tuo Mac). Al prossimo audit schedulato, MyDeviceGuard ti avvisa: "perm_camera: info:prompt → warn:granted". Sta a te decidere se era voluto o no.
Le notifiche sono locali: è la PWA stessa a decidere quando mostrarle, non c'è nessun server esterno che ti manda push. Appaiono nel centro notifiche del sistema operativo (Mac, iOS, Android, Windows, Linux) con titolo, corpo e icona.
danger.Una volta che il browser ha ricevuto un "no", non chiede più. Devi entrare manualmente nelle impostazioni del sito e riconsentire:
HID (Human Interface Device) è la categoria USB che include tastiere, mouse, gamepad, lettori di codici. Un attacco classico è collegare una finta tastiera USB (Rubber Ducky, BadUSB, Flipper Zero) al computer per iniettare comandi. MyDeviceGuard ha una whitelist che ti avvisa se nuovi HID appaiono.
A causa dei limiti delle API WebHID, la PWA vede solo i device per cui il browser ha ricevuto permesso esplicito. Quindi la prima volta devi "presentargli" i tuoi dispositivi fidati:
Cliccando Attiva watch, il controllo HID diventa parte dell'audit schedulato. Se qualche HID non in whitelist compare (perché qualcuno ha autorizzato un device al browser, per esempio), scatta un alert danger e, se abilitata, una notifica push "🚨 Nuovo dispositivo HID".
Sotto la card puoi vedere la lista degli HID approvati. Ogni voce ha un'icona ✏️ per rinominare e × per rimuovere. Un HID rimosso tornerà "ignoto" al prossimo scan.
Il pairing collega due tuoi device in modo che possano comunicare direttamente, cifrati end-to-end, senza che nessun server veda i contenuti.
Supponiamo tu voglia accoppiare MacBook (lo chiamerò "device A") e iPhone (device B).
Alternativa manuale:
Quando generi il codice, MyDeviceGuard crea localmente una chiave AES-GCM 256-bit casuale. La chiave viene inserita nel QR insieme al Peer ID WebRTC. L'altro device, scansionando, ottiene la stessa chiave. Da quel momento, ogni messaggio P2P è cifrato con questa chiave prima di essere spedito. Chi intercetta il traffico (inclusi i server di signaling) vede solo bytes casuali.
I pairing sono salvati nella sezione "Device accoppiati" in fondo alla pagina. Possono essere rimossi in qualsiasi momento.
La pagina Controller mostra la lista dei tuoi device accoppiati. È la sezione da usare dopo aver fatto il pairing.
Dopo una richiesta, si apre una card "📨 Risposta" con tre pulsanti:
mydeviceguard-logs-...).La pagina Log mostra la cronologia completa di eventi e alert salvati su questo device. In alto hai filtri:
session_start, audit_snapshot, peer_paired, ecc.).La pagina ha due tabelle:
La pagina Statistiche trasforma i dati grezzi dei log in visualizzazioni utili.
Quattro KPI visivi: quante sessioni, audit eseguiti, alert totali, cambi di sicurezza rilevati nell'ultimo mese.
Istogramma degli ultimi 14 giorni, una barra al giorno, conta quante volte hai avviato il Tracker.
Grafico a linee con 3 serie: critici (rosso), avvisi (giallo), OK (verde). Mostra come è variata la "salute" del device negli ultimi 14 giorni basandosi sugli audit_snapshot. Se attivi l'audit schedulato, dopo qualche giorno qui vedi una storia chiara.
Grafico a ciambella con la distribuzione delle categorie di alert (digitazione anomala, cambi sicurezza, HID ignoti, ecc.). Aiuta a capire dove stai avendo più problemi.
Scarica un CSV aggregato per giorno, utile per archiviazione o ulteriori analisi con strumenti esterni. Il CSV contiene solo conteggi numerici, nessun dettaglio sensibile.
Il backup è il modo sicuro per:
.mdg con la data nel nome..mdg.Il file .mdg è un JSON con campi format, salt, iv, data. Il campo data è il tuo contenuto cifrato con AES-GCM 256-bit, usando una chiave derivata dalla tua password con PBKDF2-SHA256 e 250.000 iterazioni. Il salt e l'IV sono casuali per ogni export (quindi due backup dello stesso stato producono file diversi — privacy-safe).
Risultato: se qualcuno apre il laptop o collega una USB sospetta mentre sono via, ricevo notifica, e dallo smartphone posso chiedere lo stato del laptop da remoto.
Ho cambiato laptop, voglio portare tutto sul nuovo:
Voglio far vedere a un tecnico i log del mio laptop senza dargli accesso fisico:
Sì, dopo il primo caricamento il service worker mantiene l'app disponibile offline. Le uniche cose che richiedono internet sono il pairing iniziale (per caricare la libreria P2P) e la comunicazione P2P tra device. Audit, log, grafici, backup funzionano tutti offline.
No, i dati sono per-browser. Chrome e Safari sul tuo Mac hanno storage separato. Se vuoi trasferire i dati, usa Backup.
Sì, ti basta dare loro il link dove è hostata. Ogni utente che la apre avrà la sua installazione privata, con i suoi dati, senza vedere i tuoi.
No, il pairing è strettamente privato. La chiave AES che protegge la comunicazione è scambiata solo tramite QR, non passa da nessun server.
Sono entrambe in grado di comunicare con il device host (anche se non contemporaneamente sullo stesso canale). Se è un problema, ri-genera un nuovo codice di pairing: quello vecchio scade quando chiudi la pagina Pairing.
No, mai. La PWA controlla se il browser ha permessi attivi per queste cose, ma non li usa. Se vedi "granted" su camera/mic nel Security Audit, è perché tu (o un'altra app web su questo dominio) li hai autorizzati in passato. Puoi revocarli dalle impostazioni browser.
Dipende. Le notifiche possono arrivare solo mentre l'audit schedulato è in esecuzione, e lo scheduler gira solo mentre la PWA è aperta. iOS mette in pausa le PWA dopo qualche minuto di inattività. In pratica: le notifiche arrivano se la PWA è stata aperta di recente o è in background "caldo". Per avere vero monitoraggio 24/7 servirebbe un servizio nativo — è un limite del modello PWA, non di MyDeviceGuard.
Solo tu, sul browser dove li hai configurati. Viaggiano solo se tu esporti un backup.
Sì. Appena arriva una nuova versione sul server, al prossimo riavvio della PWA il service worker la scarica, si attiva e ricarica la pagina. Vedi un toast "🔄 Aggiornamento installato – ricarico…". Non devi fare nulla.
Perché sono permessi attivi che in un contesto di sicurezza vanno verificati: se non ricordi di aver concesso accesso alla camera a questo dominio, è una informazione utile.
Il CSS non si è caricato, tipicamente per cache del service worker in stato inconsistente dopo un aggiornamento. Soluzione:
Storia vecchia, risolta nelle versioni recenti grazie alla libreria QR locale. Se ancora succede, verifica di non avere un adblock troppo aggressivo che blocca script JS di pagina. Prova in finestra anonima.
Il device remoto deve avere aperta una pagina della PWA che sappia rispondere ai comandi: la pagina Pairing con QR attivo, oppure la pagina Tracker con "Attiva ricevitore" premuto. Se la pagina è chiusa, il comando cade nel vuoto.
La Fotocamera iOS apre i link nel browser predefinito di sistema. Se questo è diverso dal browser con cui hai installato la PWA, il pairing finisce in "un altro MyDeviceGuard" separato. Soluzione: allinea le due cose.
Da quel momento la Fotocamera aprirà sempre la stessa app della PWA. In alternativa, usa il copia-incolla manuale del codice di pairing invece dello scan QR.
Controlla:
Corretto, è così per design. Il Peer ID è effimero, cambia ogni volta. Ma la chiave AES del pairing è salvata stabilmente. Se il Mac si rigenera un peerId diverso, il pairing sul telefono non lo trova più. Soluzione pratica: mantieni la pagina Pairing aperta sul Mac finché ti serve il canale P2P.
Nota: si può migliorare usando un peerId fisso salvato in IndexedDB — è una feature che può arrivare in futuro.
Home → card "Dati e privacy" → Cancella tutto. Azzera tutto ciò che la PWA sa di te, su questo browser. Oppure, per una pulizia più completa includendo cache dei file: DevTools → Application → Clear site data.
Per chi vuole sapere com'è fatta la "cassaforte":
Due strati sovrapposti:
AES-GCM 256. La chiave è derivata dalla password utente con PBKDF2-SHA256, 250.000 iterazioni, salt casuale 16 byte. IV casuale 12 byte. Questo rende attacchi di forza bruta offline molto costosi.
Tutte le dipendenze sono embedded localmente (Chart.js, libreria QR, PeerJS). Nessun CDN esterno viene contattato a runtime. Questo sia per privacy sia per robustezza offline.
Il codice è open source con licenza MIT. Puoi ispezionarlo, forkarlo, modificarlo, auto-ospitarlo. Chi vuole la garanzia totale può usare solo la propria istanza.
Fine del manuale. Per suggerimenti o segnalazioni, apri una issue sul repository GitHub del progetto.
MyDeviceGuard · Licenza MIT · Privacy-first · Made with care.