Per funzionare, gran parte dell'Internet moderno fa affidamento su API. La sicurezza delle API consiste nelle strategie e nelle misure adottate per proteggere le API da attacchi e violazioni dei dati.
Dopo aver letto questo articolo sarai in grado di:
Argomenti correlati
Cos'è un'API?
Cos'è la sicurezza delle applicazioni Web?
Exploit zero-day
Cos'è una chiamata API?
endpoint API
Abbonati a theNET, il riepilogo mensile di Cloudflare sulle tematiche più discusse in Internet.
Copia link dell'articolo
Un'interfaccia di programmazione delle applicazioni (API) consente a due software di interagire tra di loro. Se un programma o un'applicazione dispone un'API, i client esterni possono richiedere servizi da essa.
La sicurezza delle API consiste nell'adozione di tecniche e procedure volte a proteggere le API da attacchi. Proprio come le applicazioni, le reti e i server possono essere soggetti ad attacchi, anche le API possono cadere vittima di alcuni tipi di minacce.
La sicurezza delle API è una componente fondamentale della postura complessiva di sicurezza delle applicazioni web. La maggior parte delle applicazioni moderne funziona grazie alle API, che a loro volta espongono le applicazioni a una serie di rischi aggiuntivi, dato che consentono a terzi di accedervi. Possiamo paragonare questa situazione a quella di un'azienda che apra i propri uffici al pubblico. Avere più persone nei locali aziendali, molte delle quali sconosciute ai dipendenti dell'azienda, comporta rischi maggiori. Analogamente, una API consente a soggetti esterni di utilizzare un programma, introducendo un rischio maggiore per l'infrastruttura del servizio API.
Le strategie di sicurezza delle API possono contribuire a mitigare questi e altri rischi.
L'impiego di misure di autenticazione e autorizzazione efficaci contribuisce a garantire che i dati non vengano divulgati, e che solo i client autorizzati effettuino chiamate API. La protezione DDoS e la limitazione della frequenza possono bloccare gli attacchi DDoS. La convalida dello schema e l'uso di un Web Application Firewall (WAF) possono bloccare gli exploit di vulnerabilità.
La limitazione della frequenza stabilisce un limite alla frequenza con cui un utente può ripetere un'azione entro un certo intervallo di tempo. Se un client API supera il numero di richieste consentite, la limitazione della frequenza scarterà o bloccherà ulteriori richieste da parte sua per un determinato periodo di tempo.
La mitigazione DDoS aiuta a bloccare gli attacchi DoS e DDoS. In un attacco DDoS, un attaccante cerca di sopraffare un'API con un elevato numero di richieste in un breve lasso di tempo. Spesso, queste richieste provengono da diverse fonti.
La limitazione della frequenza e la mitigazione degli attacchi DDoS sono cruciali per le API per alcuni motivi:
Affinché un exploit di vulnerabilità funzioni correttamente, le richieste API dannose devono essere strutturate in modo tale da indurre l'API a rispondere in un modo non previsto da chi l'ha progettata. Gli sviluppatori di API possono bloccare tali richieste dannose in diversi modi. I due metodi principali da conoscere sono:
Lo schema descrive il comportamento previsto di un'API: il tipo di richieste che dovrebbe ricevere, e il tipo di risposte che dovrebbe fornire. Le richieste non valide che non si conformano a questo schema possono causare comportamenti imprevisti delle API, e questo può sfociare in una divulgazione involontaria di dati. La convalida dello schema identifica le richieste e le risposte non valide. Bloccando le risposte non valide, gli sviluppatori possono evitare alcune tipologie di attacchi e contribuire a prevenire fuoriuscite di dati.
Un WAF funziona come un firewall tradizionale, bloccando alcune richieste e risposte di rete e permettendo ad altre di passare. Lo fa in base a una serie di regole: se una richiesta o una risposta viola una regola, oppure si conforma ad essa, viene bloccata. Un WAF viene distribuito davanti a un'API o a un'applicazione web e monitora il traffico HTTP.
È possibile impostare regole WAF che bloccano modelli di richiesta e risposta che mirano a sfruttare a una vulnerabilità. Le regole WAF possono anche bloccare le richieste provenienti da determinati indirizzi IP, contribuendo a fermare gli attacchi bot e altri aggressori.
L'autenticazione garantisce che le richieste API provengano da una fonte legittima, mentre l'autorizzazione indica al server API se il client richiedente è autorizzato a ottenere i dati richiesti.
Supponiamo che Alice crei un'API e Francesco sviluppi un'applicazione web che utilizza l'API di Alice. Quando l'applicazione di Francesco invia una chiamata API all'API di Alice, Francesco allega un'etichetta che dice: "questa chiamata proviene da Francesco" alla richiesta. Questo messaggio autentica la richiesta di Francesco, consentendo al server API di Alice di considerarla legittima.
Anche il server API di Alice controlla di quali privilegi dispone Francesco. Se la richiesta di Francesco riguarda dati che l'API di Alice ha etichettato come "Francesco può vedere questo dato", il server soddisfa la richiesta. Tuttavia, l'API di Alice potrebbe contenere una sezione di dati etichettata come "accesso interdetto a Francesco", e il server non deve soddisfare una richiesta per tali dati quando proviene da Francesco. Ecco perché l'autorizzazione riveste un ruolo fondamentale.
(Nella realtà, Francesco allegherebbe una chiave o un'altra forma di autenticazione alle chiamate API, non solo un'etichetta recante la dicitura "questa chiamata proviene da Francesco".)
Esistono diversi metodi di autenticazione per le API. I più comuni sono i seguenti:
Al client viene assegnata una chiave, ovvero una stringa univoca di caratteri che solo lui e il servizio API conoscono. La chiave viene allegata a ogni chiamata API. Il server API controlla la chiave quando riceve una chiamata API per assicurarsi che provenga da un client autenticato.
Lo svantaggio di questo metodo di autenticazione è che se la chiave viene rubata, un utente malintenzionato può utilizzarla per impersonare un client legittimo e sferrare una serie di attacchi. È importante crittografare le richieste e le risposte da e verso un'API utilizzando un protocollo di crittografia come Transport Layer Security (TLS); in questo modo, la chiave non viene esposta in chiaro mentre attraversa l'Internet.
Le chiamate API possono utilizzare le tipiche credenziali di nome utente e password per l'autenticazione tramite un metodo denominato "autenticazione HTTP". Nell'autenticazione HTTP, un nome utente e una password vengono codificati e aggiunti all'intestazione HTTP per tutte le chiamate API. Il server verifica queste credenziali confrontandole con quelle dei client autorizzati, e procede all'autenticazione delle richieste.
Questo approccio comporta tutte le problematiche tipicamente associate alle password, che possono essere smarrite, divulgate, rubate, indovinate o condivise con terzi non affidabili. Le password sono anche soggette ad attacchi di tipo sottrazione e uso illecito delle credenziali e a tentativi di violazione con forza bruta, tra gli altri.
Invece di richiedere l'autenticazione direttamente dal client, un server API può ottenere un token da un server di autenticazione affidabile tramite il protocollo OAuth. Per utilizzare l'API, un utente effettua l'accesso a un servizio esterno anziché accedere direttamente all'interfaccia. Come l'approccio basato su nome utente e password, questo metodo di autenticazione è vulnerabile al credential stuffing e ad altri tipi di attacchi.
TLS è il protocollo di crittografia che crea una connessione crittografata e autenticata tra il client e il server durante il caricamento delle pagine web. TLS può anche verificare e autenticare entrambe le estremità di una connessione API.
Nel mutual TLS (mTLS), sia il client che il server dispongono di un certificato TLS. Le parti si autenticano a vicenda utilizzando questi certificati, fornendo reciprocamente la garanzia che entrambi siano chi dicono di essere, senza dover fare affidamento su password o altri metodi di autenticazione.
Tuttavia, mTLS può rivelarsi complicato da implementare: tutti gli endpoint API e i client necessitano di certificati TLS legittimi, che possono essere difficili da applicare e mantenere.
Cloudflare API Shield abilita diverse funzionalità di sicurezza delle API da un'unica dashboard, per proteggere le API dai rischi alla sicurezza più diffusi. API Shield comprende:
Scopri di più su API Shield o sulle soluzioni di sicurezza per le API.
La sicurezza delle API è l'insieme di tecniche, strategie e strumenti usati per proteggere le API da attacchi e violazioni dei dati. Essa garantisce che solo gli utenti autorizzati possano accedere a servizi e dati specifici tramite, API e le mantiene le operative anche in caso di attacchi progettati per sovraccaricarle o metterle fuori uso. La limitazione della frequenza, la mitigazione degli attacchi DDoS, le regole WAF, la convalida dello schema e solide pratiche di autenticazione sono tutti tasselli importanti delle sicurezza delle API.
L'autenticazione verifica l'identità degli utenti delle API, mentre l'autorizzazione determina a quali dati o servizi tali utenti possono accedere. Insieme, contribuiscono a prevenire un accesso non autorizzato ai dati.
Tra i rischi più diffusi alla sicurezza delle API troviamo gli exploit di vulnerabilità, gli attacchi basati sull'autenticazione, gli errori di autorizzazione e gli attacchi di tipo denial-of-service (Dos/DDoS), che possono interrompere la fruibilità delle API per gli utenti legittimi.
La limitazione della frequenza pone un limite al numero di volte in cui un utente può utilizzare un'API in un determinato intervallo di tempo, mentre la mitigazione degli attacchi DDoS aiuta ad assorbire o bloccare grandi volumi di richieste dannose. Queste contromisure contribuiscono a mantenere le API disponibili per gli utenti autorizzati.
La convalida dello schema blocca le richieste che non corrispondono al formato previsto dall'API. In questo modo è meno probabile che una API si comporti in modo imprevisto in risposta alle richieste degli utenti. Un WAF utilizza regole per bloccare chiamate API dannose o sospette prima che raggiungano l'API.
Le API utilizzano chiavi API, combinazioni nome utente/password, token OAuth o mutual TLS (mTLS) per verificare i propri utenti.
OWASP API Security Top 10 fornisce delle linee guida per la sicurezza e un elenco di vulnerabilità comuni delle API, e aiuta gli sviluppatori di API a comprendere e affrontare i rischi alla sicurezza più rilevanti.
I protocolli di crittografia come Transport Layer Security (TLS) proteggono i dati delle API in transito, impedendo a eventuali malintenzionati di rubare credenziali o informazioni sensibili. Questo aspetto è particolarmente cruciale se l'API rilascia chiavi API per l'autenticazione: se una chiave non è crittografata durante il transito, gli aggressori possono copiarla e utilizzarla per accedere a dati riservati. Inoltre, il mutual TLS (mTLS) viene talvolta utilizzato per l'autenticazione, al fine di impedire a eventuali aggressori di impersonare degli utenti legittimi.
Le minacce zero-day sono attacchi che sfruttano vulnerabilità delle API precedentemente sconosciute. Le minacce zero-day sono particolarmente difficili da rilevare e da fermare.