Dyrker du usikker XML, kan hackere penetrere dig
Webapplikationer har brug for data, og de data befinder sig ofte på indersiden af firewallen. Det gør webapplikationerne særdeles spændende for hackere, som kan udnytte huller i webapplikationen til at få adgang til netværket og i sidste ende overtage kontrollen.
Den bedst kendte teknik til at angribe webapplikationer er SQL-injektion, men med AJAX-baserede webapplikationer er også XML-koden en mulig vej ind for hackerne.
Det demonstrerede Sascha Herzog fra sikkerhedsfirmaet Compass, da han i sidste uge besøgte København i forbindelse med en sikkerhedskonference afholdt af softwaredistributøren Liga.
»AJAX gør det muligt at kommunikere og sende forespørgsler til webservices, som kører mange niveauer inde bag firewallen,« forklarede Sascha Herzog.
X'et i AJAX står netop for XML, og ligesom med SQL-injektion kan XML-forespørgsler misbruges, hvis udvikleren ikke har hærdet applikationen, så den ikke godtager forespørgsler, som applikationen ikke burde foretage.
Det kan udnyttes til et såkaldt XML External Entity-angreb. Det går ud på at opsnappe forespørgsler og svar mellem webapplikationen og de webservices, som applikationen kommunikerer med.
I mange tilfælde er det tilladt at ændre Doc Type-definitionen, så man kan sende en forespørgsel, der kan hente en fil fra den server, som webservicen kører på.
Hvis webservicen kører som root og dermed har administratorrettigheder, så kan adgangen til lokale filer udnyttes til at få webservicens til at udlevere både password-filen og den tilhørende shadow-password-fil.
»Du kan ikke forestille dig, hvor tit webservices kører med root-rettigheder. Vi har haft masser af sager,« fortalte Sascha Herzog.
Compass Security udfører blandt andet såkaldte penetrationstest på webapplikationer for at identificere sikkerhedshuller, som kan udnyttes af hackere.
Når en hacker har fået fat i password-filerne er det muligt ved hjælp af standardværktøjer at forsøge at knække kodeordene. Hvis der er brugt adgangskoder, som findes i de ordlister, der findes på nettet, så er det trivielt at knække kodeordene i løbet af meget kort tid.
Har man først kodeord og brugernavne for brugerne på den maskine, hvorpå webservicen kører, så kan man forsøge at komme længere ind på virksomhedens netværk ved at lede efter Terminal Services eller andre tjenester på netværket.
»Vi havde en sag for to uger siden, hvor vi på denne måde kunne logge ind på lokalnetværket via VPN,« fortalte Sascha Herzog.
Når først hackeren er nået så langt, så bliver det muligt at anvende teknikker som 'pass the hash', hvor man kan udnytte den måde, hvorpå Windows-maskiner udveksler en hashværdi som autorisation, når først en bruger er logget ind på én maskine. Disse værdier kan så at sige kopieres, så en hacker kan udnytte adgangen fra én maskine til at få adgang til en anden uden at skulle knække et kodeord.
I praksis er det heldigvis vanskeligt at udnytte en usikker fortolkning af XML til at nå helt ind til de følsomme dele af netværket. Men ligesom med SQL-injektion er det vigtigt at sikre sin kode for at lukke for utilsigtet adgang.
»Der er mange måder at hærde sin XML-parser på. Du er for eksempel nødt til at forbyde brugeren adgang til at sætte sine egne XML-entities,« forklarede Sascha Herzog.
Han anbefaler, at webudviklere følger de råd og retningslinjer for best practice til hærdning af XML, som er frigivet af både Oasis og W3.org:
XML-Signature Syntax and Processing XML Encryption Syntax and Processing
XML Key Management Specification (XKMS)
OASIS Security Services (SAML)
Kommentarer (6)
er det bare mig eller bliver overskrifterne ikke lidt for lumre nu...
Det er sådan en overskrift man forventer på gear.comon.dk, men ikke her.
Rart - at der også her - kan være plads til - at smile lidt - så selvhøjtideligheden ikke bliver alt for tyk - men selvfølgelig skal det gøres elegant - som denne
Stort morgensmil
Artiklen er lidt knudret, men følger man det sidste link er det nemt at se hvordan angrebet fungerer. Fedt hack :) (indtil man selv sidder med en kompromiteret server).
Jeg vil lige påpege at på trods af navnet AJAX så er det altså ikke tvungent at bruge XML til kommunikation mellem applikation og server, man kan kreere sit dataformat præcis som man ønsker, hvilket jeg normalt vil anbefale.
Helt åbenlyst er der noget båndbredde at spare ved at gå udenom XML, men man slipper så også for at bruge et stykke kode som man ikke forstår, hvilket vel nok er essensen af den problemstilling som her præsenteres. Man bruger en parser som "kan for meget", og pludselig er der et sikkerhedshul gennem en feature som man sådan set slet ikke bruger.
For nu ikke at folk misforstår må jeg hellere lige præcisere at uafhængige dataformater ikke er den hellige gral, det er ikke svært at skrive sine egne injection huller og lignende snavs, og hvis ikke man har styr på det man laver så er det ganske sandsynligt at der kommer sikkerhedshuller ud af det uanset hvilke teknikker man bruger.
Jeg har skolebørn, der er ældre end XML bombs! Kom lige op på hesten.
Se f.eks. datoen på det nederste link om XXE. Oktober 2002.
Sascha har lavet en screencast, som viser princippet i, hvordan man udfører denne type angreb:
http://media.hacking-lab.com/movies/2600_xml_path_traversal_2nd/index.html
Mvh.
Jesper Stein Sandal

