Sicurezza del protocollo TLS
iOS, iPadOS e macOS supportano Transport Layer Security (TLS 1.0, TLS 1.1, TLS 1.2, TLS 1.3) e Datagram Transport Layer Security (DTLS). Il protocollo TLS supporta sia AES128 che AES256 e favorisce l’uso di suite di cifratura con forward secrecy. App che fanno uso di internet come Safari, Calendario e Mail utilizzano automaticamente questo protocollo per ottenere un canale di comunicazione codificato tra il dispositivo e i servizi di rete. Le API di alto livello (come CFNetwork) rendono facile l’adozione di TLS nelle app da parte degli sviluppatori, mentre quelle di basso livello (come Network.framework) forniscono un controllo dettagliato. CFNetwork non consente l’uso di SSL 3 e alle app che utilizzano WebKit (come Safari) non è consentito stabilire connessioni SSL 3.
In iOS 11 o versioni successive e macOS 10.13 o versioni successive, i certificati SHA‑1 non sono più consentiti per le connessioni TLS, a meno che non siano segnalati come attendibili dall’utente. Inoltre, non sono consentiti neanche i certificati con chiavi RSA inferiori ai 2048 bit. La suite di cifratura simmetrica RC4 è sconsigliata in iOS 10 e macOS 10.12. Di default, i client o server TLS sui cui sono implementate le API SecureTransport non hanno le suite di cifratura RC4 abilitate e non possono connettersi quando RC4 è l’unica suite di cifratura disponibile. Per sicurezza, i servizi e le app che richiedono RC4 devono essere aggiornati per potere utilizzare le suite di cifratura più sicure. In iOS 12.1, i certificati emessi dopo il 15 ottobre 2018 da un certificato root considerato attendibile dal sistema devono essere inseriti in un log attendibile per la trasparenza dei certificati affinché possano effettuare connessioni TLS. In iOS 12.2, TLS 1.3 è abilitato di default per Network.framework e per le API NSURLSession. I client TLS che utilizzano le API SecureTransport non possono utilizzare TLS 1.3.
Sicurezza dei trasferimenti delle app
App Transport Security garantisce requisiti di connessione di default che assicurano il rispetto da parte delle app delle linee guida per le connessioni sicure durante l’utilizzo delle API NSURLConnection, CFURL o NSURLSession. Di default, App Transport Security limita la selezione della cifratura alle suite che forniscono forward secrecy, in particolare:
ECDHE_ECDSA_AES e ECDHE_RSA_AES in modalità Galois/Counter (GCM)
Modalità Cipher Block Chaining (CBC)
Le app sono in grado di disabilitare il requisito di forward secrecy per dominio; in quel caso, RSA_AES viene aggiunto all’insieme delle cifrature disponibili.
I server devono supportare TLS 1.2 e il forward secrecy; i certificati devono essere validi e firmati tramite funzioni uguali o superiori a SHA256 con chiavi uguali o superiori a RSA a 2048 bit o a curva ellittica a 256 bit.
Le connessioni di rete che non soddisfano tali requisiti non verranno stabilite, a meno che l’app non ignori App Transport Security. La presenza di certificati non validi comporta sempre un’interruzione forzata e un blocco della connessione. App Transport Security viene applicato automaticamente alle app realizzate per iOS 9 o successivo e macOS 10.11 o versione successiva.
Controllo della convalida dei certificati
La verifica dello stato di attendibilità di un certificato TLS viene effettuata secondo standard di settore stabiliti, così come illustrato nella RFC 5280, e incorpora standard emergenti come quelli della RFC 6962 (trasparenza dei certificati). In iOS 11 o versione successiva e in macOS 10.13 o versione successiva, i dispositivi Apple vengono aggiornati periodicamente in base a un elenco attuale di certificati revocati e limitati. L’elenco è estrapolato dagli elenchi di revoca dei certificati (CRL), che vengono pubblicati da ognuna delle autorità di certificazione principali ritenute attendibili da Apple e dalle loro entità emittenti CA subordinate. L’elenco potrebbe includere anche altre restrizioni a discrezione di Apple. Queste informazioni sono consultate ogni volta che viene usata una funzione API di rete per stabilire una connessione protetta. Qualora i certificati revocati fossero troppi per essere elencati individualmente da una CA, il controllo per la convalida potrebbe invece richiedere una risposta in linea sullo stato del certificato (OCSP) e restituire esito negativo se tale risposta non è disponibile.