Tématem této práce je otázka bezpečnosti webových služeb. Tato oblast bouřlivým rozvojem, neboť podniky a společnosti jak pro své interní aplikace, tak pro svou komunikaci s vnějším prostředím začaly používat právě technologii postavenou na bázi protokolu TCP/IP.
S použitím uvedených technických prostředků souvisí i zvýšená potřeba chránit data nejen před interním zneužitím (neboť tomu lze ostatně velmi špatně zabránit a hrozba selhání lidského faktoru nemůže být nikdy zcela vyloučena), ale zejména před útoky zvenčí.
Cílem práce je seznámit čtenáře se základy bezpečnosti webových služeb, problémy při návrhu webových služeb a představení architektury a možných řešení z praxe.
Webové služby tvoří jeden z prvků architektury zvané SOA (service-oriented architecture) – nového „technologického konceptu“ [2] jak přistupovat k návrhu a vývoji aplikací. SOA nahlíží na funkce systému jako na jednotlivé komponenty, které mají jasně definovaná rozhraní pro vstup i výstup, z pohledu uživatele i celkového systému jsou nezávislé na technologické platformě a umožňují vícečetné použití stejných funkcí v různých procesech – jak interních, tak externích (dodavatelé, odběratelé).
Webové služby jsou jednotlivými komponentami systému, založené na webových technologiích. Vzhledem k dostupnosti programového vybavení se tak stávají nejrozšířenější formou služeb v systémech směrem k uživatelům. „Důležitou charakteristikou webových služeb je fakt, že interakce je okamžitá, vzhledem k tomu, že interakce bude probíhat spíše od aplikace k aplikaci (business to business) než od člověka k aplikaci.“ [3]
Díky této přidané hodnotě velká většina firem staví své aplikace na webovém rozhraní, ale otázky bezpečnosti je zároveň odrazují od myšlenek na úplný přechod na webové služby. Není totiž možné postavit bezpečnost pouze na některých částech systému, je nutno bezpečnostní prvky implementovat již v návrhu systému, od nejnižších úrovní. „Odpovědnost za bezpečnost celého řešení .. do značné míry musí převzít samotná SOA infrastruktura.“ [4]
Problémem SSL (Secure Socket Layer), který je tak často používán jako nástroj bezpečnosti na webových aplikacích, je fakt, že bezpečnost webových služeb musí být řešena již v architektuře systému, nikoli pouze v její nejvyšší vrstvě.
Obsahuje sice prvky pro autentikaci, důvěrnost nebo integritu, problémem ovšem zůstává fakt, že zabezpečené připojení je navázáno pouze mezi dvěma prohlížeči nebo servery. Naproti tomu webové služby jsou vystaveny a volně provazovány pomocí Internetu, aniž by o všech z nich jednotliví vývojáři při vytváření aplikace věděli. Webové aplikace navíc vyžadují zvláštní ochranu pro komunikaci pomocí SOAP.
Problém je naznačen graficky na následujícím obrázku:

Obrázek 1 - Nepřímý přístup k webové službě, zdroj: http://java.sun.com/developer/technicalArticles/WebServices/security/fig1.gif
V otázce webových služeb má SSL několik limitů. K nejdůležitějším podle [3] patří:
· SSL pracuje na transportní vrstvě, ne na vrstvě zprávy – z toho plyne, že zpráva je chráněna pouze po dobu přenosu. Později již není možno dokázat, že zpráva nebyla změněna.
· SSL nepodporuje nemožnost odmítnutí zprávy – není tedy možno vystopovat, zda zpráva dorazila a zda adresát podnikl nutné kroky, které byly spojeny s touto zprávou.
· SSL umožňuje chráněnou komunikaci dvou koncových bodů, pro potřeby systémů s webovými službami tato ochrana není dostatečná – při komunikaci dvou služeb může jít zpráva přes několik uzlů, které nemusí bezpečnost dostatečně podporovat.
Ochrana přenosu dat pomocí SSL tedy řeší pouze první část bezpečnosti, přístup klienta na stránku jako takovou. Pro potřeby systému je nutné vyřešit i druhý kontext bezpečnosti, tedy přímou komunikaci s webovými službami. Jinak řečeno zpráva je šifrována pouze při přenosu. SSL totiž šifruje na transportní vrstvě tzn. HTTPS nešifruje samotnou zprávu, ale spíše kanál, kterým zpráva prochází. SSL tedy neposkytuje bezpečnost na úrovní zpráv. Vzniklo tedy velké množství standardů. Za zmínku stojí třeba XML Encryption, který byl vyvinut konsorciem W3C. Tento standard se zabývá šifrováním xml zpráv a je schopný xml dokument zašifrovat na úrovni jak jak jednoho elementu, tak celého dokumentu.
SOA ve svém důsledku znamená obrovský prostor pro systémovou integraci. Je tedy možné propojit mnoho různých systémů, na jejichž spojení leckdy chybí prostředky, znalosti nebo technologie a které pracovaly samostatně. „Tak je dnes klidně možné aplikaci realizovanou v Cobolu na mainframe vystavit jako webovou službu použitelnou kdekoliv v internetu. Je však systém, kde bezpečnost nebyla řešena na prvním místě, na takové otevření připraven?“ [4]
„Jednou z nejčastějších výmluv, proč neuzavírat webové služby, je mylné přesvědčení, že aplikace, které jsou jejich prostřednictvím vystaveny, jsou známy pouze zaměstnancům nebo důvěryhodným partnerům.“ [5] Za otevřeným přístupem k webovým službám se skrývá velké bezpečnostní riziko, neboť jsou tak přímo do Internetu napojeny interní podnikové systémy, které by se jinak nikdy do volného prostoru nedostaly. „Pokud dnes prostřednictvím webových služeb zpřístupňujete systémy, o jejichž připojení k internetu jste dříve nechtěli ani slyšet (nikdy byste přeci nepřipojili mainframy k lince DSL) a zároveň neřešíte otázku jejich zabezpečení...“ [5]
Možností, jak toho dosáhnout, je omezení přístupu k interním aplikacím pomocí firewallů. Zprávy pomocí protokolu SOAP jsou svázány s HTTP nebo SMTP protokoly, snadno se tedy mohou dostat až k systému, neboť většina podniků tyto porty nefiltruje. Proto je nutné zaměřit se na tři oblasti, které musí být firewall schopen rozlišit [3] :
· zda je přicházející SOAP zpráva určena „živé“ webové službě,
· zda je SOAP zpráva (a požadavek) validní a
· zda jsou validní také data ve zprávě.
Ještě před samotným sestavováním návrhu je třeba řádně uvážit všechna rizika situací, která mohou nastat, a připravit se na ně. Webové služby vyžadují mnohem větší úroveň granularity, neboť data jsou mnohem cennější a požadavky na bezpečnost jsou vyšší. Proto je nutné věnovat přípravě dostatečné úsilí.
Mezi nejčastěji zmiňovaná rizika patří [3],[4]:
· oprávnění klienta využít službu (authetizace a autorizace) a případné pokusy o neoprávněný přístup nebo pokusy do systému se dostat jinými cestami
· neautorizovaná změna, mazání nebo odkrývání dat veřejnosti
· viry, trojské koně nebo jiný škodlivý kód, který by mohl data v systémech záměrně poškodit
· validita požadavku, aby zpracování požadavku na cílovém systému nebylo jen plýtvání časem (např. pokud klient zasílá XML, je nutné prověřit, zda se jedná o platné XML příp. platný SOAP požadavek, zda jsou vlastní XML data platná dle XML schématu...
· vyhodnocení, zda zaslaná data nepředstavují bezpečnostní hrozbu pro cílový systém (v případě XML se jedná XML threats, SQL injection, omezení velikosti zpráv ap.)
· nezpochybnitelný audit požadavků a odpovědí služby
· digitální podpisy a validace digitálních podpisů zpráv
· šifrování a dešifrování zpráv
Jedním z možných řešení bezpečnosti již v architektuře systému je naznačen v [3]:

Obrázek 2 - Webové služby za DMZ, zdroj: http://java.sun.com/developer/technicalArticles/WebServices/security/fig2.gif
DMZ (angl. demilitarized zone) je nějaká podsíť, která obsahuje webový server a skrz kterou jsou k dispozici veřejně přístupné služby, například internet. Z DMZ nevycházejí žádné spojení mimo zónu, při případném útoku jsou tak chráněny interní systémy a škoda se omezí pouze na server v DMZ. Pokud na webový server přijde SOAP zpráva, která obsahuje škodlivá data nebo bude žádat službu, která není dostupná veřejnosti, interní firewall už by měl být schopen tyto skutečnosti rozpoznat a zprávu dále nepředat. Smysl DMZ je vytvoření další vrstvy bezpečnosti, která odstíní útočníky od přímého přístupu k firemní síti.
Zde můžeme nalézt rozdíl oproti stavu, kdy firewall je předsazen před webový server jako prostředník výměny dat serveru a okolního Internetu – v tom případě budou SOAP zprávy většinou procházet.
V momentě, kdy jsme připraveni na vystavení webových služeb na své straně, můžeme začít navazovat své služby na procesy ostatních podniků, např. s našimi dodavateli. Zde ovšem narazíme na problém, kdy například zákazník si chce od nás zakoupit výrobek, ale ten je nutno nejprve objednat.
Problémy, které vyvstávají, jsou nejčastěji spojeny s možnostmi, jak dodavatel pozná, o jakého zákazníka jde, že má s naší společností již dlouholetý kontrakt a podobně. Do popředí se tedy dostává otázka řízení identit a jejich propagace do ostatních systémů a služeb. Zmíněnou problematiku shrnuje následující obrázek:

Obrázek 3 - Příklad problému s propagací identit, zdroj: https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEghNpd7zDN-wfEVJH1duoFfd3kozyJ5Mflr-PrE19gpPnt8bdfkEaFQNo9BKgIvg6PfwImjl21NPD2f3Qq2jhBYiPW8mOH0xL2zSKtmymXx_KmVJKxWh3YARKlBotNqc5j8IvCz3StuQjA/s1600-h/Bezpecnost-v-SOA-2.png
„Vyřízení objednávky však pro společnost A může znamenat nutnost oslovit dva partnery – společnosti B a C. Budou mít oba partneři ve svém systému identit zavedeného klienta společnosti A? Pravděpodobně ne.“ [4]
Klientem služby (na obrázku) je náš zákazník, který poptává (prostřednictvím SOAP požadavků) služby od našich partnerů. V našem systému je zákazník zaveden, informace o proběhlých obchodních položkách jsou uloženy v databázích, a proto je oprávněn přihlásit se do interních systémů naší společnosti. V partnerských databázích ale nejspíše neexistuje.
Jedním z možných řešení je „sdílení identit“, kdy si společnosti B a C ověří zákazníka v naší databázi na základě požadavku na naši službu a dále pracuje jako by byl v jejich vlastních systémech pro správu vztahů se zákazníky. Celý systém je založen na vzájemné důvěře podniků – jednak že informace ve spol. A jsou správné a jednak, že dodavatelé nebudou požadovat informace jiné, než potřebují k uskutečnění obchodu.
Pro řízení informací o zákaznících, jejich identitách a další propagaci identit vyvinula společnost IBM dva nástroje:
· SOA Appliance XS40
· IBM Federated Identity Manager
SOA Appliance ověřuje příchozího návštěvníka proti jeho jménu a heslu a předává informace dále do systému naší společnosti (tedy spol. A). Tyto informace jsou vloženy do těla XML zprávy jako tzv. „SAML assertion (prohlášení o identitě)“ [4] – tedy přímo jako dodatečné elementy v XML zprávě.
Při volání služeb na straně partnerů se použije modifikovaný text XML požadavku a pomocí produktu IBM Federated Identity Manager se zákazníkovi přiřadí unikátní jméno, případně další atributy, pomocí kterých pak bude jednoznačně určen u partnerské společnosti. Zde je nutno opět zdůraznit důvěru společností mezi sebou, neboť jinak nemá toto řešení smysl – společnosti by si navzájem bránily ve sdílení informací a zákazníkovi by mohla vzniknout škoda nebo by jeho požadavkům nemuselo být vyhověno.
Nejprve je tedy nutno zákazníka ověřit:

Obrázek 4 - Ověření zákazníka ve společnosti A, zdroj: https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhpYw3z93w7fPtzZa7arytFmmofvoyhjCJwjSUdYbR7WpnhxutkoshcNYWMluE1RXwsjVSgri56c4Q5tCJ-Do0KW6dt0OzZTGnEz74O0C_h2T1esc0tQt4OC35_I-lh0SOSXMgopJ7gCtQ/s1600-h/Bezpecnost-v-SOA-3.png
Poté máme možnost propagovat jeho identitu (na požádání partnerské strany) do dalších systémů:

Obrázek 5 - Ověření zákazníka pomocí propagované identity, zdroj: https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhmziy0S4XeZDWNmEF1C42w51f2IFZP7UgtYFm9VnEbdB2bQDGFcA36JyNLSIROILXc_Zl6d46muES2CifHReSCvAyfs5SSiVAdBSc2kVTbZDDjqIdtj8F9GPCdn7vlztTMTFexiL7AEfU/s1600-h/Bezpecnost-v-SOA-4.png
Nejsrozumitelněji popisuje rozsah požadavků a jejich pokrytí standardy následující tabulka (převzato z [1]):
Požadavek | Technologie | Standard |
Autentizace | Uživatelské jméno/heslo, digitální podpis založený na klíči a ověřování podpisu, požadavek/odpověď, biometrické údaje, chytré karty apod. | XML Signature, XKMS, SAML, Java Card, Java 2 Platform, Standard Edition (J2SE™), Kerberos, Generic Security Service (GSS), DSS, Federated Network Identity (Liberty) |
Autorizace | Aplikování politik, kontrola přístupů, správa digitálních práv | Java Authentication and Authorization Service (JAAS), XACML, XrML, DSS |
Integrita | Samotný obsah zprávy autentikován digitálním podpisem | J2SE (Secure Hash Algorithm (SHA), MD5 a další), XML Signature, XKMS, XML Encryption |
Nemožnost odmítnutí zpráv | Digitální podpis založený na klíči a ověřování podpisu, důvěryhodnost zprávy | J2SE, Cert Path, XML Signature, XKMS, DSS |
Utajení | Šifrování a dešifrování digitálně pomocí klíčů | J2SE (GSS, Java Cryptography Extension nebo JCE), XML Encryption, XKMS |
Audit | Různé druhy přihlašování, automatické kontroly pro předcházení neoprávněné manipulaci | XML Signature, XKMS, J2SE (Logging) |
Důvěra | Digitální podpis založený na klíči a ověřování podpisu | J2SE (Cert Path, GSS), XML Signature, XKMS, DSS |
Tab. 1 - Pokrytí požadavků standardy
XML Signature (XML podpis)
je doporučením W3C, které definuje syntaxi XML pro digitální podpisy. Může být použit k podepisování dat jakéhokoli typu (typicky XML, ale ve své podstatě všech zdrojů, které mají svou URL). Existují tři typy – oddělený (podepisuje obsah mimo tělo podpisu), zabalený (je součástí XML dokumentu, ale podepisuje jenom jeho část) a zabalující (pokud obsahuje data k podepsání v těle sebe sama). Může být používán protokoly SOAP, SAML a dalšími.
XML Key Management Specification (Specifikace správy XML klíčů - XKMS)
byla opět vyvinuta W3C a popisuje jednak registraci, zánik a distribuci veřejných klíčů a certifikátů a dále též správu privátních klíčů. Poskytuje též možnosti, jak získat informace o nich. Může být použita spolu s XML podpisem a XML šifrováním.
Security Assertions Markup Language (Značkovací jazyk pro prosazování bezpečnosti - SAML),
zmíněný v kapitole 3.3, je standardem pro výměnu autentizačních a autorizačních údajů mezi poskytovatelem identit a poskytovatelem služeb. Nespecifikuje způsob, jakým jednotliví poskytovatelé data získávají a ověřují. Definován sdružením OASIS.
XML Encryption (XML šifrování)
Tento standard zavedlo konsorcium W3C pro standardizaci šifrování XML dokumentů a může být použito pro zajištění důvěrnosti v případě, že SOAP požadavek musí projít přes mnoho prostředníků. Části zprávy jsou během přenosy uchovány mimo dosah.
eXtensible Access Control Markup Language (Rozšiřitelný značkovací jazyk pro řízení přístupu - XACML)
je primárně určen k řízení přístupů k dokumentům, nastavuje práva uživatelům. Jazyk, který z něj vychází - Web Services Policy Language (Jazyk pro politiku webových služeb - WSPL), je základním jazykem, který nastavená práva zobrazuje ostatním uživatelům.
WS-Security
je rozšířením protokolu SOAP a poskytuje ochranu integrity, důvěrnosti a autentizace. Pro tyto své vlastnosti využívá XML podpis a XML šifrování (XML Signature a XML Encryption). Lze podepisovat a šifrovat libovolnou kombinaci částí zprávy.
Standardy musí navzájem spolupracovat tak, aby bylo jejich zavedení užitečné nejen zákazníkovi, ale zejména podnikům, které je zavádějí. Uživatel zřejmě nebude chtít vyplňovat své uživatelské jméno a heslo do všech částí systému, do všech služeb, a pravděpodobně přestane naše služby využívat.
Pro vyřešení těchto problémů se zavedl termín „Single Sign-On“ a možnost, jak řešit tento problém, jsem představil již v kapitole 3.3, kde jsou základními kameny protokoly SAML a XACML. Jinou možností je ověřování zákazníka v centrálním seznamu nebo databázi (například Microsoft Passport).
Příklad vzájemného provázání uvádí [3]: „SAML může být použit pro definování bezpečnostních informací vyjádřených ve formě informací o objektech. Tyto SAML informace můžeme digitálně podepsat XML podpisem a pro zajištění soukromí mohou být zakódovány pomocí XML šifrování. Veřejný klíč, používaný pro šifrování, může být ověřen a registrován přes XKMS. XACML může být dále používán pro definování politiky kontroly přístupu při zpracovávání požadavků na informace SAML.“
Ve své práci jsem popsal základní úskalí v otázkách bezpečnosti webových služeb při jejich vytváření, zpřístupňování veřejnosti a vzájemném provazování se službami v jiných systémech. V první části práce je zasazení webových služeb do celkového rámce servisně orientované architektury (SOA) a analýza dostupné literatury, věnující se otázkám bezpečnosti webových služeb. Ve třetí kapitole je uvedeno jedno z možných řešení základní architektury zajištění bezpečnosti webových služeb na příkladu produktů firmy IBM. Závěrečná kapitola obsahuje podporu jednotlivých oblastí standardy, vyvinutých sdružením OASIS nebo konsorciem W3C.
Entita
Aktivní prvek systému.
Identita
Elektronická reprezentace entity skutečného světa (člověk, organizace apod.)
Správa identit
Popisuje náležitosti životního cyklu, atributy, práva a povinnosti identit.
Klíč
Náhodná hodnota, která je používána algoritmy pro šifrování a dešifrování zpráv.
Infrastruktura veřejných klíčů (Public Key Infrastructure – PKI)
Je základním kamenem, na kterém jsou postaveny další části bezpečnosti aplikací a sítě. Používá algoritmy navzájem matematicky propojených soukromého (tajného) a veřejného (pro důvěrnou veřejnost) klíče – je nazývána též „asymetrickou kryptografií“, neboť soukromý a veřejný klíč nejsou shodné.
Sama o sobě neobsahuje bezpečnostní funkce, je spíše podpůrnou technologií pro potřeby podniku, které je dále nutno implementovat.
Integrita
Zajišťuje neměnnost jak obsahu zprávy, tak transakce, kterou je zpráva zasílána. Příklady mohou být certifikáty veřejného klíče nebo „obálky“ s digitálním podpisem.
Důvěrnost (Confidentiality)
Informace během celého přenosu od odesílatele k příjemci může být viděna pouze oprávněným osobám – pro potřeby důvěrnosti se nejčastěji používá šifrování.
Autentizace
Používá se pro jasné určení, že daný uživatel je tím, za koho se vydává. Mezi základní způsoby, jak můžeme tohoto účelu dosáhnout, je použití uživatelského jména a hesla, PKI nebo karet.
Autorizace (nebo též řízení přístupu)
Proces autorizace ověřuje, zda přihlášený uživatel má k dispozici nutné oprávnění k použití zdroje nebo určité funkce v systému. Práva nejčastěji stanovuje administrátor systému pomocí seznamu oprávnění nebo nastavení atributů uživatelů.
Nemožnost odmítnutí zprávy („non-repundiation“)
Zajišťuje, že ani odesílatel ani adresát zprávy nemůže legitimně vyjádřit fakt, že zprávu neodeslal/nepřijal. Jedná se tedy o způsob, jakým jednoznačně určit identity odesílatele/ adresáta.
SOAP (Simple Object Access Protocol)
Je jednoduchý protokolový framework pro přenos zpráv založených na XML pro výměnu informací mezi vzdálenými a decentralizovanými částmi systému.
[1] MYSORE, Shivaram. Securing Web Services – Concepts, Standards, and Requirements [online]. Santa Clara : Sun White Papers, 2003 [cit. 2007-12-07]. Dostupný na WWW: .
[2] LEŠTINA, Petr. Co Je Servisně Orientovaná Architektura [online]. Praha : BPM a IBM, 2007. Dostupný na WWW:
[3] MAHMOUD, Qusay H. Securing Web Services and the Java WSDP 1.5 XWS-Security Framework [online]. Santa Clara : Sun Developer Network. 2005 [cit. 2007-12-07]. Dostupný na WWW:
[4] MELICHNA, Jiří. Aspekty bezpečnosti v SOA. [online]. Praha : BPM a IBM. 2007. Dostupný na WWW:
[5] GOODIN, Dan; Pat. Zabezpečení webových služeb (část 1: Meze důvěry) [online]. Praha : Computerworld. 2007-03-28. Dostupný na WWW: