Il blog sulla sicurezza di FireAI

Di FireAI Security & Research Team · Pubblicato

DNS cifrato su macOS: DoH e DoT con profili di configurazione

DNS cifrato su macOS: DoH e DoT con profili di configurazione

HTTPS nasconde cosa invii a un sito web, ma prima che il tuo Mac possa anche solo aprire quella connessione, deve porre una domanda in chiaro: "a quale server punta questo nome?" Quella domanda — una richiesta DNS — viaggia non cifrata per impostazione predefinita sulla maggior parte delle reti, il che significa che il tuo provider internet, l’amministratore della rete del tuo ufficio, o chiunque condivida una rete Wi-Fi non protetta può vedere ogni dominio che risolvi, anche se le pagine stesse sono poi completamente cifrate.

Perché il DNS in chiaro rivela informazioni

Il DNS tradizionale, standardizzato decenni prima che HTTPS diventasse l’impostazione predefinita del web, invia le richieste su semplice UDP o TCP sulla porta 53 senza cifratura e, nella maggior parte delle configurazioni di rete domestiche e pubbliche, senza nemmeno autenticare il resolver. Un operatore di rete non ha bisogno di rompere HTTPS per costruire un elenco di ogni dominio che visiti — deve solo osservare il tuo traffico DNS, che sta in chiaro proprio accanto ad esso. È anche così che funzionano molti filtri di contenuto basati su DNS e alcune forme di sorveglianza a livello di rete: non ispezionando il tuo traffico cifrato, ma semplicemente registrando o bloccando la richiesta che deve avvenire prima che quel traffico esista.

DoH e DoT: due modi per cifrare la stessa richiesta

Due standard IETF risolvono questo problema avvolgendo in cifratura la richiesta DNS stessa. DNS-over-TLS, definito nell’RFC 7858, avvolge le richieste DNS in una connessione TLS cifrata dedicata sulla porta 853, distinguendola dal traffico ordinario e rendendola facile da identificare per una rete — e, in linea di principio, facile da bloccare del tutto se una rete vuole fermare specificamente il DNS cifrato. DNS-over-HTTPS, definito nell’RFC 8484, mappa invece una richiesta DNS su una normale richiesta HTTPS sulla porta 443, la stessa porta usata da quasi tutto il traffico web ordinario — una scelta di progettazione che rende le richieste DoH molto più difficili da distinguere, e quindi da bloccare separatamente, rispetto alla normale navigazione web.

Il supporto nativo di Apple da macOS 11

Apple ha integrato il DNS cifrato direttamente nel proprio stack di rete invece di lasciarlo ad app di terze parti, annunciando la funzione al WWDC 2020 insieme a macOS Big Sur (macOS 11) e alla corrispondente release di iOS 14. La sessione ha illustrato due modi per attivarlo: un’API NEDNSSettingsManager per configurarlo programmaticamente dalle app, e — l’opzione che la maggior parte delle persone userà davvero — un profilo di configurazione con il payload com.apple.dnsSettings.managed, documentato nel riferimento di gestione dei dispositivi di Apple, che permette di specificare l’indirizzo di un resolver DoH o DoT e far sì che ogni app sul sistema lo usi per impostazione predefinita, senza bisogno di software di terze parti.

Un profilo di configurazione di esempio

Un profilo di configurazione è una property list XML (un file .mobileconfig) che macOS può installare tramite Impostazioni di Sistema una volta che ci fai doppio clic o lo trascini nel pannello Profili. L’esempio sotto punta un Mac verso il resolver pubblico DNS-over-HTTPS di Quad9 — un servizio ampiamente usato, che non richiede account e che per impostazione predefinita blocca anche le connessioni verso domini noti per phishing e altra attività dannosa. Sostituisci i valori segnaposto di identificatore e UUID prima di usarlo; ogni profilo reale ha bisogno di un proprio PayloadUUID univoco.

quad9-doh.mobileconfig
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>PayloadContent</key>
  <array>
    <dict>
      <key>PayloadType</key>
      <string>com.apple.dnsSettings.managed</string>
      <key>PayloadIdentifier</key>
      <string>com.example.dns.quad9-doh</string>
      <key>PayloadUUID</key>
      <string>REPLACE-WITH-A-UNIQUE-UUID-1</string>
      <key>PayloadVersion</key>
      <integer>1</integer>
      <key>PayloadDisplayName</key>
      <string>Quad9 Encrypted DNS (DoH)</string>
      <key>DNSSettings</key>
      <dict>
        <key>DNSProtocol</key>
        <string>HTTPS</string>
        <key>ServerURL</key>
        <string>https://dns.quad9.net/dns-query</string>
        <key>ServerAddresses</key>
        <array>
          <string>9.9.9.9</string>
          <string>149.112.112.112</string>
          <string>2620:fe::fe</string>
          <string>2620:fe::9</string>
        </array>
      </dict>
    </dict>
  </array>
  <key>PayloadDisplayName</key>
  <string>Encrypted DNS - Quad9</string>
  <key>PayloadIdentifier</key>
  <string>com.example.dns.quad9-doh.root</string>
  <key>PayloadType</key>
  <string>Configuration</string>
  <key>PayloadUUID</key>
  <string>REPLACE-WITH-A-UNIQUE-UUID-2</string>
  <key>PayloadVersion</key>
  <integer>1</integer>
</dict>
</plist>

Per usare Cloudflare al posto di Quad9, imposta ServerURL su https://cloudflare-dns.com/dns-query e ServerAddresses su 1.1.1.1 e 1.0.0.1 (con 2606:4700:4700::1111 e 2606:4700:4700::1001 per IPv6) — oppure, per usare DNS-over-TLS invece di DoH, imposta DNSProtocol su TLS e ServerName su one.one.one.one, secondo la documentazione DoT pubblicata da Cloudflare.

Installarlo

  1. Salva il file con estensione .mobileconfig e fai doppio clic su di esso, oppure apri Impostazioni di Sistema, vai su Privacy e sicurezza, poi Profili, e trascina il file lì.
  2. macOS mostrerà i contenuti del payload — incluso il resolver che hai configurato — prima che tu lo approvi; controllali ogni volta, dato che un profilo è esattamente il modo in cui un attore malintenzionato potrebbe reindirizzare il tuo DNS se ne installi uno da una fonte non attendibile.
  3. Fai clic su Installa e autenticati. Un profilo non firmato come questo esempio mostrerà lo stato di verifica "Non firmato"; è previsto per un profilo costruito a mano e non è di per sé un segno di manomissione, ma per qualsiasi uso oltre il test personale dovresti firmare il profilo così che la sua integrità possa essere verificata.

Verificare che abbia funzionato

Non fidarti solo del pannello impostazioni — controlla dal terminale.

Terminale
# Show the resolvers macOS is actually configured to use
scutil --dns
# Look for your interface's resolver entry — it should now show
# the DoH/DoT server address you configured, not your router or ISP's resolver

# Confirm a lookup succeeds and see which resolver answered
dig example.com

# Cloudflare's own diagnostic page also reports whether your
# connection is using encrypted DNS when you open it in a browser
open https://1.1.1.1/help

Se scutil --dns elenca ancora l’indirizzo del tuo router o il resolver del tuo provider come server DNS attivo, il profilo non ha avuto effetto — controlla di averlo installato sotto Profili invece di averlo solo scaricato, e che nessun’altra configurazione di rete (vedi sotto) lo stia sovrascrivendo.

Insidie che fanno smettere di funzionare tutto questo in silenzio

  • Un’app VPN sovrascrive molto comunemente le impostazioni DNS di sistema mentre è connessa, instradando le richieste attraverso il proprio resolver — controlla di nuovo la tua configurazione DNS dopo esserti connesso a una VPN, non solo prima.
  • I captive portal sul Wi-Fi di hotel, aeroporti e caffetterie generalmente non riescono a completare il proprio flusso di accesso su DNS cifrato, poiché si basano sull’intercettare una richiesta DNS in chiaro per reindirizzarti a una pagina di accesso; potresti dover rimuovere o disattivare temporaneamente il profilo per andare online, e reinstallarlo una volta connesso.
  • Alcuni browser — tra cui Firefox e Chrome — includono una propria impostazione DoH separata che può sovrascrivere o duplicare la configurazione a livello di sistema; controlla le impostazioni di rete del browser stesso se il suo comportamento non corrisponde a quanto riporta scutil --dns.
  • iCloud Private Relay e il DNS cifrato risolvono problemi diversi ma sovrapposti — Private Relay nasconde il tuo IP ai siti che visiti in Safari, mentre il DNS cifrato nasconde quali domini risolvi alla tua rete; usarne uno non rende l’altro superfluo.

Il ruolo di FireAI e di HisnLabs

FireAI does not provide encrypted DNS today — it is on the roadmap, not in the current release — so a configuration profile like the one above is what actually closes the DNS-leak gap; FireAI’s job is different, watching and controlling which apps get to make a connection at all once that lookup resolves.

FireAI è il prodotto di HisnLabs: un firewall con IA che funziona direttamente sul Mac. Mostra in linguaggio chiaro ogni connessione che le tue app effettuano e ti lascia decidere cosa esce dal tuo Mac — la sua IA lavora in locale, quindi il tuo traffico non viene mai inviato a noi né a nessun altro. Il team di ricerca sulla sicurezza di HisnLabs è quello che mantiene affidabili queste decisioni: cataloga quali domini sono semplice telemetria e quali un servizio reale, traccia il Paese e la rete dietro una connessione e addestra il modello locale (la funzione Autopilot) su schemi di traffico reali, senza che nulla lasci il tuo Mac.

Puoi leggere le scelte tecniche che ci stanno dietro, oppure provare FireAI per 17 giorni, su FireAI, di HisnLabs.

Fonti