Shellcode ( engelsk shellcode , shell startup code) är en binär körbar kod som vanligtvis överför kontrollen till kommandoprocessorn, till exempel '/bin/sh' i Unix - skal , 'command.com' i MS-DOS och 'cmd.exe' på Microsoft Windows operativsystem . Shellcode kan användas som en nyttolast , vilket gör att en angripare kan komma åt ett skal på ett datorsystem .
När man utnyttjar en fjärrsårbarhet kan skalkoden öppna en förutbestämd TCP -port på den sårbara datorn, genom vilken ytterligare åtkomst till kommandoskalet kommer att utföras, sådan kod kallas portbindande skalkod . Om skalkoden ansluter till porten på angriparens dator, vilket görs för att kringgå brandväggen eller NAT , så kallas sådan kod ett omvänt skal ( eng. omvänd skal-skalkod ).
Shellcode injiceras vanligtvis i minnet av det pågående programmet, varefter kontrollen överförs till det genom stack overflow , eller genom en heap buffer overflow , eller genom att använda formatsträngsattacker . Överföringen av kontroll till skalkoden görs genom att skriva över returadressen på stacken med adressen för den injicerade skalkoden, skriva över adresserna för anropade funktioner eller ändra avbrottshanterare. Resultatet av detta är exekveringen av en skalkod som öppnar en kommandorad för användning av en angripare.
Crackers skriver skalkoder och använder ofta trick för att dölja sin attack. De försöker ofta ta reda på hur intrångsdetekteringssystem (IDS) känner igen alla inkommande attacker. En typisk IDS skannar vanligtvis alla inkommande paket och letar efter en skalkodsspecifik struktur (ofta ett stort utbud av skräpkoder , NOPs i det enklaste fallet ); om den hittar en sådan struktur, förstörs paketet innan det når sin destination. Den svaga positionen för IDS i det här fallet är att den inte gör en riktigt bra sökning, annars kommer det att ta för lång tid och därmed sakta ner internetuppkopplingen.
Shellcode innehåller nästan alltid en sträng med namnet på skalet . Alla inkommande paket som innehåller en sådan sträng anses alltid vara misstänkta i IDS:s ögon. Vissa program accepterar inte icke-alfanumerisk inmatning (de accepterar inte tecken utanför intervallet az, AZ, 0-9 och några andra tecken.)
För att komma igenom alla dessa åtgärder mot intrång använder crackers kryptering , självmodifierande kod , polymorf kod och alfanumerisk kod .