Vad är en skalkod?
Shellcode är en sekvens av maskinkod, eller körbara instruktioner, som injiceras i datorns minne med avsikt att ta kontroll över ett löpande program. I en sådan attack är ett av stegen att få kontroll över programräknaren, som identifierar nästa instruktion som ska utföras. Programflödet kan sedan omdirigeras till den infogade koden. Den påträngande maskinkoden kallas attackens nyttolast och är det element som vanligtvis hänvisas till av termen skalkod. Denna metod har ofta använts för att ge en angripare åtkomst genom att öppna ett operativsystem kommandoskal, så kodinjektionsattacker i allmänhet har blivit känt som skalkod.
Sårbarheten som utnyttjas involverar vanligtvis hur ett program tilldelar minne, kontrollerar giltigheten för inmatningsdata och hanterar minnesfel. Programutvecklare kan vanligtvis undvika detta hot genom att definiera inmatningsdata strikt och avvisa felaktiga värden. Om det inte är markerat, kan värden som behöver mer lagringsutrymme än det minne som tilldelats för det värdet accepteras. Detta orsakar en säkerhetsbryggning som kallas ett buffertöverskridande, där en del av data skrivs till minnesplatser intill värdet tilldelade utrymme. När den noggrant manipuleras kan denna avvikelse göra det möjligt att införa påträngande kod.
Shellcode är normalt skriven på ett programmeringsspråk med systemnivå på låg nivå som montering, C eller C ++. Beroende på den inriktade sårbarheten kan samma resultat emellertid realiseras genom att infoga kod för ett tolkat skriptspråk, som PERL eller bytekod för en virtuell maskin, till exempel JAVA. Koden kan implanteras före, under eller efter kapningen av programräknaren. Således kan den påträngande koden innehålla en fil på den riktade maskinen eller överföras via en nätverksanslutning i realtid.
Lokala skalkodutnyttjanden är utformade för att ge en angripare kontroll över en maskin som han eller hon har fysisk åtkomst till. Ett mål i detta fall kan vara att skapa ett konto med administratörsbehörigheter, till exempel. På samma sätt, om en löpande process har en hög privilegienivå, skulle en framgångsrik exploatering tillfälligt ge samma åtkomstnivå till inkräktaren.
Processer som körs på en fjärrmaskin kan utnyttjas med hjälp av standardnätverksprotokoll för att kommunicera med måldatorn. Connect-back shellcode instruerar målmaskinen att initiera en anslutning till inkräktarens dator. Om inkräktaren inleder anslutningen kallas koden ett bindeskal eftersom den försöker ta kontroll över en nätverksanslutning som kallas en port på fjärrmaskinen. Återkopplingsmetoden används mer utifrån eftersom brandväggar sällan förbjuder utgående anslutningar.