Introduzione
Analizzare QR Linux è una pratica essenziale per evitare link malevoli, provisioning Wi‑Fi non autorizzati e deep link che avviano azioni indesiderate. I codici QR sono comodi ma possono nascondere URL malevoli, payload per app o configurazioni che compromettono la privacy. Questa guida fornisce un workflow pratico e ripetibile per analizzare immagini QR su Linux senza aprire link potenzialmente pericolosi sul dispositivo principale, usando strumenti open source e sandbox per minimizzare i rischi.
Prerequisiti e strumenti
Per analizzare QR Linux in sicurezza avrai bisogno di:
- Sistema Linux con accesso terminale.
- Pacchetti consigliati: zbar-tools (zbarimg), ImageMagick (convert), curl, whois, jq, xxd.
- Strumenti per sandboxing: podman o docker (podman preferibile se disponibile).
- Browser testuale per preview: lynx o w3m (da eseguire in container).
- Utente non‑root per le operazioni rischiose oppure esecuzione all’interno di un container isolato.
- File immagine contenente il QR (es. qr.png).
Panoramica del workflow
- Estrarre il payload dal QR in locale.
- Analizzare il contenuto senza aprirlo (controlli sintattici, dominio, header).
- Effettuare una preview sicura in sandbox.
- Seguire una checklist decisionale prima di aprire su device mobile o browser.
Estrarre il payload dal QR
Comando base con zbarimg
Installa zbar-tools (es. apt install zbar-tools) e usa zbarimg per ottenere il payload testuale:
zbarimg -q --raw qr.png
Il comando restituisce il payload (URL, testo o stringa). Se l’immagine contiene più QR, zbarimg li elenca in ordine.
Pulizia immagine con ImageMagick
Se il QR è difficile da leggere, migliora l’immagine con ImageMagick per aumentare contrasto e risoluzione:
convert qr.png -colorspace Gray -resize 200% -threshold 60% qr_clean.png
zbarimg -q --raw qr_clean.png
Sperimenta con resize, unsharp, contrast e threshold per ottenere il miglior risultato sulla singola immagine.
Gestire immagini multiple o di scarsa qualità
- Se hai più immagini dello stesso QR (es. scatti diversi), esegui zbarimg su ciascuna e confronta i payload.
- Per foto con rumore o inclinazione, usa deskew e denoise:
convert qr.jpg -deskew 40% -denoise 2 -resize 150% -threshold 55% qr_processed.png
zbarimg -q --raw qr_processed.png
- Quando il QR è parzialmente coperto, prova a ritagliare le regioni con suspect content e ripetere il processo.
Analisi del payload senza aprirlo
Determinare il tipo di contenuto
- URL: verifica schema (http vs https), presenza di caratteri sospetti, lunghezza e pattern di redirect.
- Wi‑Fi/WG payload: riconosci prefissi come WIFI:S:… o WG: e non applicare automaticamente la configurazione.
- Testo o comandi: identifica pattern di comandi shell, base64 o chiavi.
Estrarre dominio e controllare header
Estrai il dominio dal payload e richiedi solo gli header per testare la risposta senza scaricare contenuti:
url="$(zbarimg -q --raw qr.png)"
domain=$(echo "$url" | sed -E 's#https?://([^/]+)/?.*#\1#')
echo "Dominio: $domain"
curl -I --max-time 5 --user-agent "curl-safe" --silent "$url" || echo "No response or timeout"
Usa curl con -I per limitare l’esposizione e non seguire redirect automatici.
Controlli WHOIS e reputation
Interroga whois per informazioni sulla registrazione e sulla storia del dominio:
whois "$domain" | sed -n '1,20p'
Per reputazione automatica usa API specifiche eseguite da container se richiedono chiavi o credenziali.
Ispezione del payload testuale
Se il payload non è un URL, ispezionalo in chiaro:
zbarimg -q --raw qr.png | sed -n '1,200p' | sed -e 's/<[^>]*>//g'
Cerca indicatori come base64, comandi shell, pattern WG/WIFI o chiavi incluse.
Preview sicura e sandboxing
Container isolato per richieste e download
Esegui tutte le richieste HTTP o download da dentro un container minimale:
podman run --rm -it -v "$(pwd)":/work:ro docker.io/alpine sh -c "apk add --no-cache curl ca-certificates >/dev/null; cd /work; curl -I --max-time 5 --silent '$url' || echo 'no response'"
Questo mantiene il tuo host separato da payload potenzialmente pericolosi.
Visualizzazione testuale in container (lynx/w3m)
Per vedere una versione sicura della pagina usa lynx o w3m dentro un container:
podman run --rm -it -v "$(pwd)":/work:ro docker.io/ubuntu sh -c "apt-get update >/dev/null; apt-get install -y lynx ca-certificates >/dev/null; lynx -head -accept_all_cookies -nolist '$url' || echo 'preview failed'"
La visualizzazione testuale evita esecuzione di JavaScript e riduce il rischio.
Ispezionare file scaricati in sandbox
Se il QR punta a un file, scaricalo in container e analizzalo con file, hexdump e strumenti antivirus se disponibili:
podman run --rm -it -v "$(pwd)":/work:rw docker.io/ubuntu sh -c "cd /work; apt-get update >/dev/null; apt-get install -y curl >/dev/null; curl -sSL -D headers.txt -o payload.bin '$url' || echo 'download failed'; file payload.bin; hexdump -C payload.bin | head"
Indicatori di rischio e segnali di allarme
- URL corti che mascherano redirect multipli.
- Dominio appena creato o con whois oscurato.
- Mismatch tra contesto e dominio (es. QR in ristorante che punta a pagina di pagamento esterna).
- Parametri sospetti (es. payload=base64, exec=).
- Uso di http per azioni sensibili.
- Payload Wi‑Fi che includono PSK in chiaro.
- File scaricabili che richiedono esecuzione automatica.
Caso pratico ed esempi rapidi
Esempio: estrazione e check header
payload=$(zbarimg -q --raw qr.png)
echo "$payload"
podman run --rm -v "$(pwd)":/work:ro docker.io/alpine sh -c "apk add --no-cache curl >/dev/null; curl -I --max-time 5 --silent '$payload' || echo 'no head'"
Esempio: download e ispezione in container
podman run --rm -it -v "$(pwd)":/work:rw docker.io/ubuntu sh -c "cd /work; apt-get update >/dev/null; apt-get install -y curl >/dev/null; curl -sSL -o payload.bin '$payload' || echo 'download failed'; file payload.bin; hexdump -C payload.bin | head"
Script e automazione
Script di esempio qr_check.sh
Salva come qr_check.sh e rendilo eseguibile:
#!/bin/sh
if [ -z "$1" ]; then echo "Uso: $0 file_qr.png"; exit 1; fi
file="$1"
payload=$(zbarimg -q --raw "$file" 2>/dev/null)
echo "Payload: $payload"
case "$payload" in
http*|https*)
echo "Checking URL headers in container..."
podman run --rm -v "$(pwd)":/work:ro docker.io/alpine sh -c "apk add --no-cache curl >/dev/null; curl -I --max-time 6 --silent '$payload' || echo 'no response'"
;;
*)
echo "Non-URL payload, content preview:"
echo "$payload"
;;
esac
Esegui: chmod +x qr_check.sh && ./qr_check.sh qr.png
Suggerimenti per estensioni e miglioramenti
- Integrare controllo di reputation API all’interno del container.
- Aggiungere parsing di payload WIFI/WG per estrarre SSID senza applicare configurazioni.
- Loggare ogni analisi in file per audit e training del personale.
Checklist decisionale prima di aprire
- Ho verificato il dominio e gli header in sandbox?
- Il dominio è coerente con il contesto?
- Il payload non contiene PSK, chiavi o comandi eseguibili?
- Ho fatto una preview testuale o controllato il download in un container isolato?
- Se il QR chiede di connettersi a una rete Wi‑Fi, ho confrontato SSID e captive portal con quanto fornito dal personale?
Se anche una sola risposta è NO, non aprire il link sul device principale.
Consigli pratici per l’utente mobile
- Usa un’app che mostri sempre l’anteprima URL e non apra automaticamente i link.
- Non connetterti automaticamente a reti trovate tramite QR.
- Verifica con il personale del locale l’autenticità del QR per reti Wi‑Fi o pagine di pagamento.
- Mantieni aggiornato il sistema e blocca installazioni da fonti non ufficiali.
Risorse utili e letture consigliate
- Documentazione ufficiale di zbarimg e ImageMagick.
- Guide su podman/docker per sandboxing e best practice di isolamento.
- Documentazione su captive portal e gestione hotspot per comprendere i rischi di provisioning Wi‑Fi via QR.
Conclusione
Ricorda: analizzare QR Linux prima di aprire link o applicare configurazioni riduce drasticamente i rischi. Adottando questo workflow trasformi il controllo di un QR sospetto in una routine rapida e sicura: estrazione offline, validazione del dominio, preview controllata in container e una checklist decisionale riducono significativamente l’esposizione del dispositivo principale. Integra questi passaggi nelle tue abitudini quando incontri QR in luoghi pubblici o su materiali non verificati.