WebKiv: ZabezpecenePrihlaseni

from Wiki KIVu

Design pro zabezpečené přihlášení do OpenCms s ověřením proti Kerberos ZČU:

Jednoduché řešení (nasazení 4/2009)

Z důvodu použití Apache + Tomcat na beta.kiv.zcu.cz, kde:

nelze použít řešení s validací.

Nasazeno bylo pouze:

Instalace na ManualModulLogin - Jednoduché řešení.

Kompletní řešení

Cíl: Zabezpečení přihlášení a lepší kontrolu uživatele než přes kontrolu IP (OpenCms interně).

Požadavky

1. zabezpečená přihlašovací stránka do worklace (HTTPS)
2. zabezpečená práce ve workplace
3. zabezpečená přihlašovací stránka na frontendu (odhlášení nebude zabezpečené)
4. login form pro frontend
5. ověření pravosti přihlášeného uživatele pracujícího přes HTTP (rozpoznání zloděje session)

Viz též původní náčrty: Attach:kiv-secure-auth-proces.jpg obrázek - červeně jsou označeny stránky-cookies které jsou secure čili na HTTPS. Attach:opencms-zabezpeceni-frontend.jpg - jak má fungovat zabezpečení při přístupu k frontend obsahu, včetně periodického ověřování autenticity uživatele

K celému se přidá Kerberos autentizace.

Termíny:

Analýza a řešení

ad 1. + 2.

Pro zabezpečení práce ve workplace včetně přihlášení je třeba nastavit v %OPENCMS%/WEB-INF/web.xml:

<security-constraint>

   <web-resource-collection>
      <web-resource-name>SecureWorkplace</web-resource-name>
      <url-pattern>/opencms/system/*</url-pattern>
   </web-resource-collection>
   <user-data-constraint>
      <transport-guarantee>CONFIDENTIAL</transport-guarantee>
   </user-data-constraint>

</security-constraint> 

Dojde k vynucení HTTPS u stránek ležících v /opencms/system/* a podadresářích. Zabezpečí se tedy přihlašovací formulář do workplace (/opencms/system/login) a samotné stránky workplace (/opencms/system/wrkplace).

ad 3. + 4.

Pro účely zabezpečeného přihlášení byl upraven modul org.opencms.welcome z OpenCms 6.2.3. Obsahuje v adresáři /elements soubory login_element.jsp a login_element_secure.jsp.

Pokud potřebuji zabezpečit nějakou operaci (formulář atd.) musí se přejít na HTTPS.

Body 3. a 4. potřebují pro správnou funkčnost sdílení session mezi HTTPS a HTTP.

Problém je následující:

Po analýze problému se nabízí řešení, které pomáhá i k řešení bodu 5.

Sdílení session HTTPS + HTTP

Po přihlášení na zebezpečené stránce by byla session cookie poslána jako secure. Tento stav je nežádoucí kvůlí sdílení session s HTTP. Nutný je tedy zásah do CmsJspLoginBean OpenCms, která je zodpovědná za přihlašování.

Provedeme několik úprav:

Takto je zaručeno sdílení session po přihlášení na HTTPS a případném přechodu na HTTP. Máme taktéž označeného pravého uživatele

ad 5.

Ověření pravosti uživatele se bude dít přes servlet filtr ValidateAuthFilter. Filtr se nastaví, viz ManualModulLogin tak, aby kontroloval veškerou komunikaci.
Parametry filtru jsou:

Filtr se chová několika způsoby:

A. Jsme-li nepřihlášeni, propouští komunikaci dále.

B. Pokud jsme na nezabezpečeném HTTP, počítá při každém požadavku čas od přihlášení. Uplyne-li doba delší než delta t a je-li náš požadavek GET, začne validační smyčka:

  1. uloží se url požadavku
  2. do session se uloží příznak, že validujeme (nutné pro přechod zpět na HTTP)
  3. dojde k přešměrování na HTTPS zabezpečenou stránku (url kde je umístěn login_element_secure.jsp)
  4. ověří se přitomnost secure token a jeho správnost, několik možností:
    • nastane-li chyba při validaci, je uložen příznak do session pro informování skutečného uživatele; útočníkovi je posláno 403 Forbidden a cookie s výsledkem validace - zpracuje login_element.jsp, pokud by se znovu snažil přistoupit s ukradenou session cookie - vyběhne ihned hlášení
    • validace úspěšná, ale zjištěn útok (příznak v session); poslána cookie s příznakem útoku - zpracuje login_element.jsp - hlášení o ukradené session; uložení času validace; přechod zpět na HTTP
    • validace úspěšná; uložení času validace; přechod zpět na HTTP

C. Pokud sami přejdeme na HTTPS, je validován každý náš požadavek (GET, POST). Zůstáváme na HTTPS. Neukládá se čas validace pro případ krádeže session cookie a přístup útočníka na HTTP (bude zachycen filtrem - vyprší čas, na HTTPS by byl zachycen okamžitě). Při neúspěšné validaci se posílá 403 Forbidden.

Instalace na ManualModulLogin - Kompletní řešení.


Zpět na RedSys

Retrieved from http://wiki.kiv.zcu.cz/WebKiv/ZabezpecenePrihlaseni
Content last modified on 30 October 2009, 12:28