Zabezpečení aplikačního rozhraní (API) představuje klíčový aspekt, na který je nutné brát ohled téměř u každé aplikace.
V současné digitální éře se API stala preferovaným způsobem propojování aplikací. Jelikož slouží jako vstupní brána do vašeho softwaru, je zásadní zajistit jejich robustní zabezpečení, aby se předešlo nechtěným průnikům.
Pojďme se blíže podívat na potenciální slabiny API, které by mohly ohrozit bezpečnost vaší aplikace.
Časté zranitelnosti API
#1. Cross-Site Scripting (XSS)
Útoky typu XSS jsou sice běžné ve webových aplikacích, ale mohou se vyskytnout i v API, pokud se nedostatečně ošetřují vstupní data od uživatelů. Neautorizovaní uživatelé mohou skrze ně spouštět škodlivé skripty na serveru a získat neoprávněný přístup k citlivým informacím.
#2. Omezení rychlosti
Ignorování limitů frekvence požadavků na API může útočníkům umožnit zahlcení serveru obrovským množstvím požadavků. Toto zahlcení může vést až k selhání serveru, a tím i k nedostupnosti služeb pro vaše klienty.
#3. Nesprávné ověřování
Pokud není API adekvátně zabezpečeno spolehlivou metodou ověřování, může k němu přistupovat libovolná třetí strana. Autentizace hraje klíčovou roli, protože určuje, kdo a kdy může přistupovat k jednotlivým zdrojům API.
#4. Nechráněný přenos dat
Data přenášená mezi API a jejími spotřebiteli musejí být během přenosu šifrována. Pokud tak není učiněno, hrozí riziko zachycení těchto dat útočníky pomocí takzvaného „man-in-the-middle“ útoku. Proto se vždy důrazně doporučuje používat zabezpečený protokol, jako je HTTPS.
#5. Zastaralé závislosti
API využívají množství externích knihoven a závislostí, které usnadňují vykonávání složitých úloh. Pokud tyto závislosti obsahují bezpečnostní nedostatky, stává se zranitelným i samotné API. Pravidelná aktualizace těchto závislostí je proto naprosto nezbytná.
Nyní, když jsme si představili potenciální zranitelnosti, pojďme se podívat na osvědčené postupy pro zabezpečení vašeho API.
Mohlo by vás zajímat: Alternativy k Postman pro testování API.
Doporučené postupy pro zabezpečení API
Správa verzí API
Je nezbytné pravidelně monitorovat a aktualizovat vaše API, včetně jeho závislostí, jelikož tyto mohou obsahovat závažné bezpečnostní díry. Uživatelé vašeho API by měli být informováni o dostupnosti opravných verzí, a to v souladu se sémantickým verzováním.
Udržování aktuálnosti API je minimálním krokem, který můžete učinit pro ochranu před útoky.
Ověřování
Existuje několik přístupů k ověřování uživatelů API. Nejjednodušší je použití kombinace uživatelského jména a hesla, nicméně tento způsob je poměrně zranitelný a spoléhá se pouze na sílu hesla.
Další metodou je použití API klíčů, kdy je každému uživateli přidělen unikátní klíč pro přístup k API.
Ověřování pomocí JWT (JSON Web Token) spočívá v převodu uživatelských přihlašovacích údajů na digitálně podepsaný token, který je zaslán uživateli. Tento token pak uživatel přikládá ke každému požadavku na server. JWT mají definovanou dobu platnosti.
Nejrobustnějším řešením je OAuth, které umožňuje aplikacím třetích stran získat přístup k API s využitím již existujících přihlašovacích údajů. Například pokud jste přihlášeni do Google, jiná aplikace může použít tyto údaje k přihlášení, aniž byste museli zadávat nové heslo. V takovém případě se váš Google účet stává de facto heslem.
Autorizace
Autorizace je odlišný koncept od autentizace. Zatímco autentizace ověřuje identitu uživatele, autorizace definuje, ke kterým zdrojům API má daný autentizovaný uživatel přístup.
Například univerzitní profesor může mít přístup ke všem údajům studentů, zatímco student má přístup pouze ke svým vlastním údajům. V obou případech jsou uživatelé autentizováni v systému, ale mají odlišná oprávnění.
Správná implementace autorizace zabraňuje neoprávněnému přístupu ke zdrojům.
Redakce dat
Redakce dat je proces selektivního odhalování informací uživatelům s cílem chránit citlivé údaje. Správná autorizace může vést k efektivnější redakci dat. Ochrana osobních údajů, jako je GDPR, také vyžaduje úpravu a ochranu dat, aby se zamezilo neoprávněnému přístupu k osobním a citlivým údajům třetími stranami.
Redakci dat lze implementovat pomocí middlewaru nebo správce brány.
Šifrování
Šifrování se stalo jednou z nejdůležitějších bezpečnostních praktik. Pokud pracujete s jakýmikoli citlivými informacemi, šifrování je nezbytné. Nejzákladnějším opatřením je použití protokolu HTTPS, který využívá TLS (Transport Layer Security) nebo SSL (Secure Socket Layer) handshake.
End-to-end šifrování je dalším způsobem, jak zabezpečit data během přenosu. Data uložená v databázi by měla být také šifrována, aby se předešlo neoprávněnému přístupu v případě kompromitace databáze.
Zpracování chyb
Podrobné chybové hlášky mohou odhalit informace o infrastruktuře aplikace a usnadnit útok. Z tohoto důvodu je nutné, aby chybové zprávy byly obecné a aby bylo implementováno vlastní zpracování chyb. Je také důležité, aby v chybových protokolech nebyly uvedeny žádné citlivé systémové informace.
Validace vstupu a dezinfekce dat
Při práci s API je validace vstupu klíčová, protože vstupní data jsou neznámá, dokud je uživatel neodešle.
Dezinfekce je proces odstraňování nežádoucího spustitelného kódu z dat. Útočníci mohou do dat vložit škodlivý Javascript kód, který se spustí, pokud není před zpracováním očištěn. Takový kód pak může krást data.
Nedostatečná dezinfekce dat může vést k útokům typu Cross-site scripting (XSS).
Systémy detekce narušení
Systémy detekce narušení (IDS) monitorují a detekují síťový provoz, který směřuje k API. Pokud dojde k detekci neobvyklého chování, systém na tuto skutečnost upozorní.
Obecně existují dva typy IDS: síťové a hostitelské. Síťové systémy jsou rozmístěny po síti a monitorují provoz na více místech, zatímco hostitelské systémy jsou nasazeny na jednom konkrétním hostiteli.
Tyto systémy slouží jako efektivní nástroj pro identifikaci potencionálních útočníků a předcházení kompromitaci dat.
Seznam povolených IP adres
Seznam povolených IP adres umožňuje přístup k API pouze ze specifických, předem definovaných IP adres. Tato technika se příliš nehodí pro veřejná API, kde by byl seznam IP adres příliš rozsáhlý.
Je vhodná, pokud je známý okruh aplikací a systémů, které budou k API přistupovat.
JSON Web Tokens
JWT se obvykle používají k autentizaci uživatele pomocí digitálně podepsaného tokenu vytvořeného z přihlašovacích údajů. Výhodou je, že se skrývají skutečné přihlašovací údaje a nemusí se ukládat do databáze. Token je uložen na straně klienta.
JWT se skládají ze tří částí: hlavičky, datové části a podpisu. Hlavička obsahuje informace o použitém algoritmu, datová část obsahuje přihlašovací údaje a podpis je generován serverem a ověřován při každém dalším požadavku.
JWT mají obvykle definovanou dobu platnosti, po které server generuje nový token a zasílá ho uživateli.
Protokolování a monitorování
Sledování provozu API je důležité pro detekci nežádoucí aktivity a identifikaci potenciálních útočníků. Je vhodné sledovat každý požadavek, ale je třeba dbát na to, aby protokoly neobsahovaly žádné citlivé informace.
Omezení frekvence
Pokud API nemá implementováno omezení frekvence požadavků, je zranitelné vůči DDoS útokům, které mohou zahlcením serveru způsobit jeho nefunkčnost. Útočníci mohou během krátkého časového intervalu zaslat obrovské množství požadavků.
Implementací limitů na frekvenci požadavků lze těmto útokům účinně předcházet.
Zabezpečené závislosti
Bezpečnostní rizika nemusí pocházet pouze z vašeho kódu, ale i ze závislostí třetích stran. Proto je nutné pravidelně kontrolovat a skenovat používané závislosti a odhalovat případné zranitelnosti.
Je vhodné nastavit automatické skenování a aktualizaci závislostí, a to v případě, že je dostupná verze s opravou zranitelnosti. Dále je vhodné vybírat bezpečnější závislosti, které poskytují časté bezpečnostní aktualizace.
V odpovědi API by měly být také obsaženy bezpečnostní hlavičky, které prohlížeči poskytují instrukce týkající se zabezpečení API a toho, jak se má chovat. Mezi důležité hlavičky patří:
- Cache-Control: Nastavte na no-store, abyste zabránili ukládání citlivých informací do prohlížeče.
- Content-Security-Policy: Zabraňuje vkládání odpovědí API do prvku iframe.
- Content-Type: Tato hlavička určuje typ obsahu odpovědi API. V případě JSON odpovědi nastavte na application/json.
- X-Content-Type-Options: Nastavte na nosniff, aby prohlížeč negeneroval MIME typ odpovědi sám, ale používal typ uvedený v hlavičce Content-Type.
Bezpečnostní standardy a rámce
Při návrhu API je vhodné vycházet z předdefinovaných bezpečnostních standardů a rámců, čímž zajistíte, že vaše API bude v souladu s nejnovějšími bezpečnostními doporučeními.
Platnost tokenu
Při použití tokenů by měla být jejich platnost krátkodobá, což si vyžádá opětovné ověření uživatele. V JWT se obvykle používají dva typy tokenů: přístupový a obnovovací. Obnovovací tokeny mají delší platnost, zatímco přístupové tokeny jsou krátkodobé. V každém případě by vaše tokeny měly mít omezenou dobu platnosti.
Firewall webových aplikací
WAF (Web Application Firewall) je brána, která monitoruje, filtruje a blokuje škodlivý síťový provoz. Často se jedná o nejlepší způsob, jak zabránit útokům prostřednictvím protokolu HTTP.
Použití API bran
API brány umožňují snadné nastavení zabezpečení a správu tras API. Poskytují také nástroje pro monitorování, protokolování a analýzu, které lze použít ke sledování API.
Nulová důvěra
Strategie nulové důvěry spočívá v nedůvěřování žádnému centrálnímu zdroji. Zabezpečení by mělo být rozvrstveno a implementováno na více kontrolních místech.
V podstatě nelze věřit nikomu, dokonce ani vývojářům pracujícím na API. Každý vstupní bod je nutné monitorovat a analyzovat, aby se zabránilo narušení bezpečnosti.
V takových případech je velmi užitečná automatizace. Pomocí automatizovaných nástrojů můžete pravidelně sledovat a blokovat neobvyklou nebo podezřelou aktivitu.
Závěrem
Ať už se snažíte jakkoliv, v softwaru se vždy najdou mezery, které mohou být zneužity. Tyto mezery mohou vést ke zranitelnostem zero-day. Proto je důležité udržovat své API aktualizované a dbát na nejnovější bezpečnostní standardy.
Podívejte se na nejlepší nástroje pro dynamické testování zabezpečení aplikací.