Domov      Nastavenia 
RSS English Slovensky

Aktuálne
Zahraničné zdroje
Nahlásené incidenty
1.1.2017 - 31.12.2017
 

Graf

Opatrenia na zaistenie bezpečnosti webových aplikácií

Webové aplikácie v súčasnosti umožňujú poskytovanie celej palety služieb, ku ktorým má používateľ prístup z pohodlia svojho internetového prehliadača. Pri ich tvorbe by si ale vývojári mali uvedomiť, že vybudovanie bezpečnej stránky znamená viac, ako len napísanie niekoľkých webových stránok a pridanie SSL certifikátu.

Podobne ako všetky nové technológie, aj webové aplikácie so sebou priniesli nové zraniteľnosti a možnosti kompromitácie organizácie. Existuje celá škála útokov, ktoré môže útočník využiť na získanie prístupu k citlivým informáciám alebo prístupu do systémov, na ktorých sú webové aplikácie prevádzkované. Okrem implementácie opatrení na zaistenie bezpečnosti webových aplikácií je potrebné myslieť aj na zabezpečenie a hardening ich podporných systémov. Vývojári sa predovšetkým zameriavajú na vytvorenie atraktívnych aplikácií, ktoré splnia očakávania koncových používateľov a bezpečnosť často zostáva v úzadí ich záujmu. Preto sme sa rozhodli publikovať nasledovný kontrolný zoznam, ktorý stručne sumarizuje najdôležitejšie bezpečnostné aspekty pri vývoji a prevádzke webových stránok.

Bezpečný návrh

  • Webová stránka by mala pozostávať z verejných a privátnych zón a navigácia medzi nimi by nemala umožniť tok citlivých informácií medzi týmito zónami.
  • Citlivé informácie musia byť uchovávané v zašifrovanej podobe.
  • Validácia vstupov musí byť vykonávaná ako na strane klienta, tak aj na strane servera.
  • Produkčný a databázový server by mal byť umiestnený v zabezpečenej demilitarizovanej zóne (DMZ), ku ktorej môžu pristupovať len autorizované osoby.
  • Kód by mal byť udržiavaný, prehľadný a dokumentovaný.
  • Prezentačná vrstva musí byť oddelená od logickej vrstvy.

Šifrovanie

  • Na webový portál sa musí pristupovať prostredníctvom protokolu HTTPS.
  • Identita webového portálu musí byť zabezpečená platným, dôveryhodným certifikátom vydaného na doménu, na ktorej je dostupný webový portál.
    • Webový portál nesmie používať nedôveryhodné alebo exspirované SSL/TLS certifikáty.
  •  Údaje, ktoré sú citlivé z hľadiska integrity alebo dôvernosti  sa musia prenášať iba prostredníctvom zašifrovaného spojenia SSL/TLS.
    • Citlivé údaje (zvlášť prihlasovacie údaje) musia byť prenášané výhradne prostredníctvom zašifrovaného kanála.
  • Webový portál nesmie ukladať citlivé informácie v nezašifrovanej podobe na strane klienta, ani na strane servera.
  • Webový portál nesmie vkladať nešifrované zdroje bez SSL/TLS do stránok s SSL/TLS.

Šifrovacie kľúče a protokoly

  • Webový server nesmie podporovať protokoly SSLv2 a SSLv3.
  • Webový server musí podporovať TLS 1.0 a TLS 1.1.
  • Webový server by mal podporovať TLS 1.2.
  • Webový server by nemal podporovať  šifry s kľúčom kratším ako 112 bitov a blokom kratším ako 64bitov.
  • Použité šifry a protokoly SSL/TLS by mali byť odolné voči útoku FREAK.
  • Použité šifry a protokoly SSL/TLS by mali byť odolné voči útoku BEAST (používanie TLS 1.2, pri TLS 1.0 nepoužívanie šifry s AES).
  • Použité šifry a protokoly SSL/TLS by mali byť odolné voči útoku BREACH (Pri SSL/TLS musí byť vypnutá http kompresia).
  • Použité šifry a protokoly SSL/TLS by mali byť odolné voči útoku POODLE.
  • Použité šifry a protokoly SSL/TLS by mali byť odolné voči útoku LOGJAM.
  • Dĺžka kľúča  asymetrickej šifry RSA, DSA v certifikáte by mala byť aspoň 2048 bitov.
  • Webový server by mal podporovať šifry, ktoré majú vlastnosť Perfect Forward Secrecy (PFS).
  • Webový server by nemal podporovať RC4, DES a 3DES.
  • Pre všetky kryptografické operácie musia byť použité kryptograficky silné generátory pseudonáhodných čísel.

SSL/TLS je potrebné nakonfigurovať na používanie výhradne silných kľúčov, šifier a protokolov. Konfiguráciu je možné otestovať  v SSL teste od Qualys : https://www.ssllabs.com/ssltest/index.html.

Konfigurácia servera

  • Webový server nesmie podporovať klientom iniciovanú SSL/TLS renegociáciu šifrovacích kľúčov.

HTTP hlavičky a cookies

  • Server by mal pri SSL/TLS používať HSTS - HTTP Strict Transport Security.
  • V odpovediach webového servera sa nesmú nachádzať hlavičky prezrádzajúce použitú technológiu a / alebo jej verziu :
    •  Server
    •  X-Powered-By
    •  X-AspNet-Version
    •  a pod.
  • V hlavičkách sa nesmú nachádzať informácie o použitých technológiách, backendových serveroch, internej infraštruktúre, ani bezpečnostných prvkoch.
  • Server musí používať hlavičku:
    •  X-Frame-Options : SAMEORIGIN  // ochrana pred clickjackingom,
    •  X-XSS-Protection : 1  // čiastočná ochrana pred XSS.

Konfigurácia webového servera

Systém

  • Systém, nainštalované aplikácie a frameworky musia byť aktuálne z pohľadu bezpečnostných aktualizácií.
    • Používané verzie softvéru musia byť podporované, resp. im nesmie končiť podpora.
  • Na serveri musia byť deaktivované všetky nepoužívané služby, frameworky, doplnky  a funkcionality.
  • Na serveri musia byť zatvorené všetky nepoužívané porty.

Webový server

  • Webový server by mal podporovať iba HTTP metódy POST a GET.
  • Webový server nesmie podporovať (musia byť vypnuté) HTTP metódy OPTIONS, TRACK a TRACE.
  • Webový server musí byť odolný voči SlowHTTP DoS (limitácia počtu spojení z jednej IP adresy, nastavenie timeoutu na HTTP requesty.)
  • Na webovom serveri musia byť odstránené všetky nadbytočné a nepotrebné súbory a zložky, obzvlášť konfiguračné súbory a zálohy.
  • Ladiace funkcionality (napríklad ASP.NET Application Trace)  musia byť vypnuté.
  • Webový server musí zobrazovať v prípade chyby servera iba všeobecné chybové hlásenia.
  • Webový server nesmie podporovať funkcionalitu listovania adresára (directory listing, Microsoft IIS tilde directory enumeration).
  • Súbor robots.txt nesmie obsahovať odkazy na citlivé zdroje aplikácie (napríklad prihlasovanie administrátora a podobne).
  • Z webového servera musia byť odstránené všetky ladiace výstupy, dočasné súbory, nepotrebné zdrojové kódy a zálohy súborov.
  • Na webovom serveri by mal byť implementovaný WAF (web aplikačný firewall) minimálne s nasledujúcou funkcionalitou:
    •  detekcia a prevencia známych útokov (code injection – SQL, XSS, Command, XPATH),
    •  encoding a kontrola používateľských vstupov prostredníctvom whitelistingu.

Administrácia

  • Administračné rozhrania na všetky služby musia byť dostupné iba z dôveryhodných lokalít (potrebná reštrikcia na lokálne siete).
  • Z produkčných systémov musia byť odstránené všetky testovacie a pôvodné účty.
  • Všetky servery a syslog servery musia byť synchronizované s NTP serverom.
  • Administračné rozhrania musia byť dostupné iba prostredníctvom SSL/TLS.

Aplikácia (webový portál)

  • Aplikácia musí ošetrovať všetky chyby a výnimky.
  • Aplikácia musí zobrazovať v prípade chyby aplikácie iba všeobecné chybové hlásenia.
  • V generovanom kóde nesmú byť prítomné komentáre, citlivé informácie a odkazy na vnútorné IP adresy.
  • Aplikácia musí pristupovať k ďalším aplikáciám a serverom prostredníctvom doménového mena  (nie IP adresy, obzvlášť internej).
  • Aplikácia nesmie reflektovať obsahy hlavičiek v odpovedi servera.
  • Pre posielanie citlivých a autentifikačných údajov musí byť vynucované HTTPS spojenie.
  • Aplikácia nesmie ukladať citlivé údaje (napríklad session token) v URL adrese.
  • Aplikácia by nemala používať odkazy na externé zdroje (zdroje mimo správy prevádzkovateľa alebo inštitúcie verejnej správy na SR).
    • Aplikácia nesmie používať odkazy na nedôveryhodné externé zdroje.
  • Všetky činnosti privilegovaných používateľov a administrátorov by mali byť zaznamenávané do log súborov prostredníctvom vzdialených logovacích serverov (syslog, Windows Event Forward).
  • Aplikácia nesmie používať funkciu eval().
  • Z aplikácie musia byť odstránené všetky ladiace výstupy, dočasné súbory, nepotrebné zdrojové kódy a zálohy súborov.

Autentizácia a autorizácia

  • Aplikácia musí pre všetky autorizačné mechanizmy implementovať politiku, pri ktorej je zakázané všetko, čo nie je explicitne povolené (default-deny).
  • Aplikácia musí vyžadovať  autentifikáciu pre každú privilegovanú operáciu.
  • Aplikácia musí implementovať autorizáciu a autentifikáciu na strane servera.
  • Musia byť odstránené všetky testovacie a pôvodné účty z produkčných systémov.
  • Pre všetky citlivé operácie musia byť implementované anti-CSRF tokeny, ktoré musia byť pri vykonaní operácie overované.
  • Aplikácia musí vyžadovať používanie silných hesiel (dĺžka aspoň 10 znakov, aspoň jedno veľké písmeno, malé písmeno, číslo a špeciálny znak).
  • Aplikácia musí vyžadovať pravidelnú zmenu hesla, musí byť nastavený minimálny a maximálny interval na zmenu hesla.
  • Aplikácia musí  pri zmene hesla vyžadovať zadanie starého hesla.
  • Aplikácia musí po zmene hesla vyžadovať reautentizáciu.
  • Aplikácia by mala  pri zmene hesla notifikovať používateľa zaslaním verifikačného emailu.
  • Aplikácia musí uložené heslá hashovať prostredníctvom štandardných kryptografických hashovacích funkcií a musí používať salt.
  • Aplikácia musí implementovať funkcionalitu pre odhlásenie (log-out) aj pre automatické odhlásenie po istej dobe nečinnosti.
  • Aplikácia musí po odhlásení zneplatniť všetky relácie daného používateľa.
  • Aplikácia musí podporovať simultánne paralelné prihlásenie iba z jednej verejnej IP adresy.
  • Aplikácia musí pri zmene verejnej IP adresy požadovať reautentifikáciu.
  • Aplikácia musí podporovať spustenie mechanizmu zamknutia účtu (lock-out) po istom počte neúspešných pokusov (5) o prihlásenie.
  • Zamknutie účtu po 5 neúspešných pokusoch o prihlásenie musí trvať aspoň 10 minút.
  • Zamknutie účtu po 5 neúspešných pokusoch o prihlásenie do kritického systému by malo trvať minimálne hodinu.
  • Je potrebné vytvárať log záznamy všetkých pokusov o autentizáciu (log-in, log-out, neúspešný log-in, žiadosť o zmenu hesla).
  • V prípade zamknutia účtu by aplikácia mala notifikovať zodpovednú osobu, resp. administrátora danej aplikácie.
  • Pre privilegované účty sa musia používať používateľské mená, ktoré nie je možné jednoducho dedukovať.
  • Aplikácia nesmie pre kritické systémy umožniť funkcionalitu zapamätania si hesla.

Používateľské vstupy

  • Všetky používateľské vstupy musia byť kontrolované na strane servera prostredníctvom  whitelistov alebo regulárnych výrazov v kontexte, v ktorom sú použité.
  • Aplikácia by mala používať parametrizované SQL požiadavky (queries).
    • Aplikácia nesmie využívať používateľské vstupy bez kontroly na tvorenie SQL dotazov.
    • Aplikácia musí ošetrovať  vstupy od používateľa pred ich použitím v SQL príkazoch (statements).
    • Napríklad :
      • Aplikácia musí ošetrovať vstupy od používateľa pred ich použitím v názvoch súborov a zložiek.
      • Aplikácia musí ošetrovať vstupy od používateľa pred ich použitím v akomkoľvek skripte, databázovom dotaze alebo parametri príkazu operačného systému.
      • Aplikácia musí ošetrovať vstupy od používateľa pred ich použitím v kontexte HTML.
      • Aplikácia musí ošetrovať vstupy od používateľa pred ich použitím v kontexte JavaScript.
      • Aplikácia musí ošetrovať vstupy od používateľa pred ich použitím v kontexte REST API.
      • Aplikácia musí ošetrovať vstupy od používateľa pred ich použitím v XML dokumentoch.
      • Aplikácia musí ošetrovať vstupy od používateľa pred ich použitím v XPath požiadavkách (query).
      • Aplikácia musí ošetrovať vstupy od používateľa pred ich použitím v XSL(T) style sheets.
      • Aplikácia musí ošetrovať vstupy od používateľa pred ich použitím v SSI príkazoch (statements).
      • Aplikácia musí ošetrovať vstupy od používateľa pred ich použitím v HTTP hlavičkách.
      • Aplikácia musí ošetrovať vstupy od používateľa pred ich použitím v HTTP parametroch.
      • Aplikácia musí ošetrovať vstupy od používateľa pred ich použitím v LDAP požiadavkách.
      • Aplikácia musí ošetrovať vstupy od používateľa pred ich použitím v regulárnych výrazoch.

Relácie

  • Aplikácia by mala používať CSRF tokeny o veľkosti aspoň 128 bitov.
  • Aplikácia nesmie povoliť požiadavky spôsobujúce zmenu údajov alebo citlivú operáciu bez platného CSRF tokenu.
  • Aplikácia nesmie povoliť požiadavky na privilegované operácie bez platného CSRF tokenu.
  • Na generovanie CSRF tokenov musí aplikácia kryptograficky silný generátor pseudonáhodných čísel.
  • Pri prihlásení musí aplikácia  znovu vygenerovať nový identifikátor relácie.
  • Pri zmene prihlasovacích údajov (credentials) musí aplikácia znovu vygenerovať identifikátor relácie.
  • Pri zmene prihlasovacích údajov (credentials) musí aplikácia  zneplatniť ostatné relácie.
  • Pre relačné (session) cookies musí aplikácia nastaviť Secure flag.
  • Pre relačné (session) cookies musí aplikácia nastaviť HttpOnly flag.
  • Pre relačné (session) cookies musí aplikácia nastaviť reštriktívnu doménu.
  • Pre relačné (session) cookies musí aplikácia nastaviť reštriktívnu cestu (path).
  • Pre generovanie relačných identifikátorov musí aplikácia používať kryptograficky silné generátory pseudonáhodných čísel.
  • Aplikácia by mala používať relačné identifikátory o veľkosti aspoň 128 bitov.
  • Aplikácia musí zamietať neznáme relačné identifikátory zo strany klienta.
  • Relačné identifikátory musí aplikácia prenášať iba cez zabezpečené pripojenia.
  • Relácia musí byť  zviazaná s klientskou IP adresou.
  • Aplikácia musí vynucovať periodickú exspiráciu a zneplatnenie relácií.

Nahrávanie súborov

  • Aplikácia musí nahrávané súbory ukladať mimo koreňového súboru pre dokumenty (document root), kde súčasne nesmie byť možnosť listovania adresára a nesmie byť možnosť interpretovať nahraté súbory ako napríklad skripty (PHP, ASP, JSP).
  • Aplikácia by nemala spúšťať a vyhodnocovať (evaluate) nahraté súbory.
  • Aplikácia musí vynucovať  limit pre veľkosť nahratých súborov.
  • Aplikácia musí umožniť nahrávanie iba špecifických typov súborov a kontrolovať nielen ich príponu, ale aj MIME typ.
  • Aplikácia musí nahrávané súbory kontrolovať na prítomnosť škodlivého kódu prostredníctvom antimalware riešenia.

Obsah

  • Aplikácia by mala pre všetky poskytované zdroje explicitne definovať typ obsahu.
  • Aplikácia by mala pre všetky poskytované stránky definovať „character set“.

Spracovanie XML

  • Aplikácia nesmie podporovať  XML external entity expansion.
  • Aplikácia nesmie podporovať parsovanie XML external DTD.
  • Aplikácia nesmie podporovať všetky nadbytočné alebo nebezpečné XML rozšírenia.
  • Aplikácia by mala používať XML parser, ktorý neexpanduje entity rekurzívne.

Rôzne

  • Aplikácia nesmie podporovať presmerovanie na používateľom poskytnuté externé umiestnenia.
  • Aplikácia musí obmedziť krížový prístup k doménam prostredníctvom whitelistingu.
  • Aplikácia musí pre všetky emailové funkcionality implementovať rate limiting.
  • Aplikácia musí pre všetky  zdrojovo intenzívne funkcionality implementovať rate limiting.
  • Pri implementácii rate limitingu sa musí brať ohľad na predchádzanie neúmyselnému odopretiu služby.

Záver
Pre adekvátne zabezpečenie webových aplikácií a stránok je potrebné implementovať hĺbkovú ochranu, kde v prípade zlyhania jednej obrannej línie zastavia útočníka nasledujúce línie obrany. Je potrebné si uvedomiť, že ochrana musí byť implementovaná na strane servera. Nie je možné spoliehať sa na bezpečnostné opatrenia na klientskej strane, nakoľko sa oveľa ľahšie môže dostať pod kontrolou útočníka. Opatrenia v tomto kontrolnom zozname tvoria súčasť hĺbkovej ochrany. Inštitúcie verejne správy ho môžu použiť ako súčasť bezpečnostných požiadaviek pri obstarávaní alebo vývoji svojich webových stránok a webových aplikácií. Pred samotným nasadením webovej aplikácie je potrebné vykonať dostatočné testovanie, posúdenie zraniteľností a penetračné testovanie na získanie istoty, že všetky bezpečnostné diery sú zaplátané. Webové aplikácie v prevádzke treba periodicky preskúmavať z dôvodu zmien vo vnútornom i vonkajšom prostredí, predovšetkým s objavovaním sa nových zraniteľností a vývoja techník útočníkov. Pre účely vykonania auditu bezpečnosti webových aplikácií sme pripravili aj prehľadný kontrolný zoznam hore uvedených opatrení, ktorý je dostupný v sekcii Naše publikácie.