Hva er en skallkode?
Shellcode er sekvens av maskinkode, eller kjørbare instruksjoner, som blir injisert i datamaskinens minne med den hensikt å ta kontroll over et kjørende program. I et slikt angrep er et av trinnene å få kontroll over programtelleren, som identifiserer neste instruksjon som skal utføres. Programstrømmen kan deretter omdirigeres til den innsatte koden. Den påtrengende maskinkoden kalles nyttelasten til angrepet og er det elementet som ofte refereres til av begrepet shellcode. Denne metoden har ofte blitt brukt for å gi en angriper tilgang ved å åpne et operasjonssystem-kommandoskall, så kodeinjeksjonsangrep generelt har blitt kjent som shellcode.
Sårbarheten som blir utnyttet innebærer vanligvis hvordan et program tildeler minne, kontrollerer gyldigheten av inndatadata og håndterer minnefeil. Programvareutviklere kan vanligvis unngå denne trusselen ved å definere inputdata strengt og avvise feilverdier. Hvis det ikke er merket av, kan verdier som trenger mer lagringsplass enn minnet som er tildelt for den verdien, aksepteres. Dette fører til et sikkerhetsbegrep som kalles et bufferoverløp, der en del av dataene blir skrevet til minneposisjoner ved siden av verdets tildelte plass. Når denne anomalien blir nøye manipulert, kan det være mulig å innføre påtrengende kode.
Shellcode er normalt skrevet på et programmeringsspråk med systemtilgang på lavt nivå, for eksempel montering, C eller C ++. Avhengig av den målrettede sårbarheten, kan imidlertid samme resultat realiseres ved å sette inn kode for et tolket skriptspråk, som PERL, eller bytekode for en virtuell maskin, for eksempel JAVA. Koden kan implanteres før, under eller etter kapring av programtelleren. Dermed kan den påtrengende koden være inneholdt i en fil på den målrettede maskinen eller overført over en nettverkstilkobling i sanntid.
Lokale shellcode-utnyttelser er designet for å gi en angriper kontroll over en maskin som han eller hun har fysisk tilgang til. Et mål i dette tilfellet kan være å opprette en konto med administratorrettigheter, for eksempel. Tilsvarende, hvis en løpende prosess har et høyt privilegienivå, vil en vellykket utnyttelse midlertidig gi samme tilgang til inntrengeren.
Prosesser som kjører på en ekstern maskin kan utnyttes ved bruk av standard nettverksprotokoller for å kommunisere med måldatamaskinen. Tilkoblings-skjelkode instruerer målmaskinen om å starte en forbindelse til inntrengerens datamaskin. Hvis inntrengeren initierer tilkoblingen, kalles koden et bindeskall, ettersom den prøver å ta kontroll over en nettverkstilkobling som kalles en port på den eksterne maskinen. Tilkoblingsmetoden brukes mer, siden brannmurer sjelden forbyr utgående tilkoblinger.