Tutorials
beveiliging | xss, en het voorkomen ervan
wat is xss, en hoe voorkom je het?
Pagina 1
Wat is xss?
Xss staat voor cross site scripting, dus zou het eigenljk css moeten heten.
Omdat css ook al een afkorting is voor cascading style sheet, heeft cross site scripting de naam xss gekregen.
Maar wat is xss nou eigenlijk, en wat kan je ermee?
Cross site scripting is eigenlijk het uitvoeren van commando's in de browser, zonder dat de eigenaar van de website ervan af weet.
Een klein voorbeeldje: stel dat er een gastenboek is, die de input van de gebruiker niet controleerd. Een willekeurige hacker zou dan html code (lees: javascript) in de pagina kunnen zetten, en op die manier de sessies van de gebruikers kunnen stelen. (Als je niet weet wat sessies zjin, en waarom dit schadelijk is, zoek dan een andere tutorial, want daar ga ik niet dieper op in).
Xss is op dit moment de meest voorkomende hack, en je zal je verbazen waar het nog voorkomt.
Omdat css ook al een afkorting is voor cascading style sheet, heeft cross site scripting de naam xss gekregen.
Maar wat is xss nou eigenlijk, en wat kan je ermee?
Cross site scripting is eigenlijk het uitvoeren van commando's in de browser, zonder dat de eigenaar van de website ervan af weet.
Een klein voorbeeldje: stel dat er een gastenboek is, die de input van de gebruiker niet controleerd. Een willekeurige hacker zou dan html code (lees: javascript) in de pagina kunnen zetten, en op die manier de sessies van de gebruikers kunnen stelen. (Als je niet weet wat sessies zjin, en waarom dit schadelijk is, zoek dan een andere tutorial, want daar ga ik niet dieper op in).
Xss is op dit moment de meest voorkomende hack, en je zal je verbazen waar het nog voorkomt.
Pagina 2
Werkwijze van de hacker
Hoe gaat een xss hacker (of cracker, of scriptkiddie, hoe je het wil noemen) nou precies te werk?
Als eerst kijkt hij, wat voor karakters het filter doorlaat, wat voor karakters hij ombuigt, en wat voor karakters hij compleet weghaalt.
Dat gebeurt meestal met een kleine localizer, voorbeeld:
<xss>' "{}();
Nu kijkt de hacker wat voor tekens het filter doorlaat.
als de broncode bijvoorbeeld:
<xss>\'\"{}();
Zou bevatten, weet de hacker dat addslashes aan staat, en dat html niet gefilterd word.
Een simpele <script> met javascript zal nu sesies kunnen stelen, en hem toegang tot andere accounts kunnen geven.
Zo gaat de persoon in kwestie een tijdje door, tot hij precies snapt wat het filter doet, en wanneer.
Dan is de volgende stap, het werkend krijgen van de hack. dit kost vaak maar een paar minuten.
Als een filter bepaalde (voor de hacker nuttige) tekens filtert, dan kijkt de hacker wat hij WEL kan doen, de veiligheid van een website is ALTIJD de minst veilige pagina!
Als eerst kijkt hij, wat voor karakters het filter doorlaat, wat voor karakters hij ombuigt, en wat voor karakters hij compleet weghaalt.
Dat gebeurt meestal met een kleine localizer, voorbeeld:
<xss>' "{}();
Nu kijkt de hacker wat voor tekens het filter doorlaat.
als de broncode bijvoorbeeld:
<xss>\'\"{}();
Zou bevatten, weet de hacker dat addslashes aan staat, en dat html niet gefilterd word.
Een simpele <script> met javascript zal nu sesies kunnen stelen, en hem toegang tot andere accounts kunnen geven.
Zo gaat de persoon in kwestie een tijdje door, tot hij precies snapt wat het filter doet, en wanneer.
Dan is de volgende stap, het werkend krijgen van de hack. dit kost vaak maar een paar minuten.
Als een filter bepaalde (voor de hacker nuttige) tekens filtert, dan kijkt de hacker wat hij WEL kan doen, de veiligheid van een website is ALTIJD de minst veilige pagina!
Pagina 3
Hoe voorkom je xss?
Xss is eigenljk heel makkelijk te voorkomen, als je er voor zorgt dat alle input van de gebruiker word gefilterd, en het filter is GOED, dan is xss onmogelijk..
Maar wat is een goed filter?
Er zijn vele soorten filters, maar meestal zijn ze onder te verdelen in 2 categorien, de html filters, en de bb filters.
Met html filters bedoel ik filters, die opmaak van de pagina toestaan, doormiddel van html tags.
Het is hier zaak, om er voor te zorgen, dat die tags niet schadelijk kunnen zijn voor de beveiliging van de website, dus, er mag geen javascript/vbscript of wat voor script dan ook worden uitgevoerd.
BB filters zijn de filters die van onschuldig ogende tags [img] een complete img tag maken. deze filtes zijn heel nuttig, omdat het teken [ voor de browser niks zegt, dus als je een foutje maakt, en een [ word niet vervangen, is dat geen ramp.
Wanneer is een filter een veilig filter? (html+bb)
zoals ik hierboven al heb verteld, is een filter veilig, als er geen javascript/vbscript kan worden gegenereerd door de hacker.
Maar wat voor dingen moet ik nou filteren, om hier voor te zorgen?
allereerst: natuurlijk de html tags: < en >, die mogen alleen bij een html filter aanwezig zijn, maar zorg er dan wel voor, dat de tags kloppen!
geef dus niet aan wat niet mag, maar wel wat WEL mag, en vervang de rest, dat bespaart je een hoop tijd.
Ten tweede:
In een tag, waar mogelijk javascript kan worden uitgevoerd: script, a href, img, style, object, body, style, input(welke dan ook!) en meta, mogen GEEN karakters als: :, ;, ', ", [, ], #, (, ), \, {, } voorkomen.
van veel van deze karakters zal je denken: ah, die zijn onschuldig, zoals de [], of de #.. maar schijn bedriegt!
maak maar eens een kleine html pagina aan, met deze img tag:
<img src="javascript:alert('XSS');">
dit is dus gewoon javascript in een image tag gegoten!
Als de gebruiker dat soort karakters toch zou moeten kunnen gebruiken, htmlspecialchar dan de pagina, dat zorgt ervoor, dat bijna alle onveilige karakters worden vertaald naar hun ascii aanhanger.
Maar wat is een goed filter?
Er zijn vele soorten filters, maar meestal zijn ze onder te verdelen in 2 categorien, de html filters, en de bb filters.
Met html filters bedoel ik filters, die opmaak van de pagina toestaan, doormiddel van html tags.
Het is hier zaak, om er voor te zorgen, dat die tags niet schadelijk kunnen zijn voor de beveiliging van de website, dus, er mag geen javascript/vbscript of wat voor script dan ook worden uitgevoerd.
BB filters zijn de filters die van onschuldig ogende tags [img] een complete img tag maken. deze filtes zijn heel nuttig, omdat het teken [ voor de browser niks zegt, dus als je een foutje maakt, en een [ word niet vervangen, is dat geen ramp.
Wanneer is een filter een veilig filter? (html+bb)
zoals ik hierboven al heb verteld, is een filter veilig, als er geen javascript/vbscript kan worden gegenereerd door de hacker.
Maar wat voor dingen moet ik nou filteren, om hier voor te zorgen?
allereerst: natuurlijk de html tags: < en >, die mogen alleen bij een html filter aanwezig zijn, maar zorg er dan wel voor, dat de tags kloppen!
geef dus niet aan wat niet mag, maar wel wat WEL mag, en vervang de rest, dat bespaart je een hoop tijd.
Ten tweede:
In een tag, waar mogelijk javascript kan worden uitgevoerd: script, a href, img, style, object, body, style, input(welke dan ook!) en meta, mogen GEEN karakters als: :, ;, ', ", [, ], #, (, ), \, {, } voorkomen.
van veel van deze karakters zal je denken: ah, die zijn onschuldig, zoals de [], of de #.. maar schijn bedriegt!
maak maar eens een kleine html pagina aan, met deze img tag:
<img src="javascript:alert('XSS');">
dit is dus gewoon javascript in een image tag gegoten!
Als de gebruiker dat soort karakters toch zou moeten kunnen gebruiken, htmlspecialchar dan de pagina, dat zorgt ervoor, dat bijna alle onveilige karakters worden vertaald naar hun ascii aanhanger.
Pagina 4
Conclusie
Xss hacks komen relatief heel vaak voor, en dat terwijl ze zo makkelijk te voorkomen zijn.
Als je constant in je achterhoofd houd, wat de aanvaller zou kunnen met de tekens die je hem aanbied, dan zou je een heel eind moeten kunnen komen!
Ik hoop dat je wat aan deze korte tutorial hebt gehad, en ik wens je veel succes in het beveiligen van je website!
Voor mensen die graag meer willen weten over filter evasion, check: ha.ckers.org/xss.html, daar staat gruwelijk veel informatie op.
Voor vragen of opmerkingen, mail me gerust!
~huib
Als je constant in je achterhoofd houd, wat de aanvaller zou kunnen met de tekens die je hem aanbied, dan zou je een heel eind moeten kunnen komen!
Ik hoop dat je wat aan deze korte tutorial hebt gehad, en ik wens je veel succes in het beveiligen van je website!
Voor mensen die graag meer willen weten over filter evasion, check: ha.ckers.org/xss.html, daar staat gruwelijk veel informatie op.
Voor vragen of opmerkingen, mail me gerust!
~huib
Reacties
0