Što je shellcode?

Shellcode je slijed strojnog koda, ili izvršnih instrukcija, koji se ubacuje u memoriju računala s namjerom da preuzme kontrolu nad programom koji se izvodi. U takvom napadu, jedan od koraka je stjecanje kontrole nad programskim brojačem, koji identificira sljedeću instrukciju koju treba izvršiti. Tijek programa se tada može preusmjeriti na umetnuti kod. Intruzivni strojni kod naziva se korisnim opterećenjem napada i element je koji se obično naziva terminom shellcode. Ova metoda se često koristila za odobravanje pristupa napadaču otvaranjem naredbene ljuske operacijskog sustava, pa su napadi ubrizgavanjem koda općenito postali poznati kao shellcode.

Ranjivost koja se iskorištava obično uključuje način na koji program dodjeljuje memoriju, provjerava valjanost ulaznih podataka i rukuje pogreškama u memoriji. Programeri softvera obično mogu izbjeći ovu prijetnju strogim definiranjem ulaznih podataka i odbijanjem neispravnih vrijednosti. Ako nije označeno, mogu se prihvatiti vrijednosti za koje je potrebno više prostora za pohranu od memorije dodijeljene za tu vrijednost. To uzrokuje prekid sigurnosti koji se naziva prelijevanje međuspremnika, gdje se dio podataka zapisuje u memorijske lokacije u susjedstvu dodijeljenog prostora vrijednosti. Kada se pažljivo manipulira, ova anomalija može dopustiti uvođenje nametljivog koda.

Shellcode je obično napisan u programskom jeziku s pristupom sustavu niske razine kao što je asembler, C ili C++. Međutim, ovisno o ciljanoj ranjivosti, isti rezultat može se postići umetanjem koda za interpretirani skriptni jezik, kao što je PERL, ili bajt koda za virtualni stroj, kao što je JAVA. Kod se može ugraditi prije, tijekom ili nakon otmice programskog brojača. Dakle, nametljivi kod može biti sadržan u datoteci na ciljanom stroju ili prenijeti preko mrežne veze u stvarnom vremenu.

Eksploatacije lokalnog shellcode-a osmišljene su da daju napadaču kontrolu nad strojem kojem on ili ona imaju fizički pristup. Cilj bi u ovom slučaju mogao biti, na primjer, stvoriti račun s administratorskim povlasticama. Slično, ako pokrenuti proces ima visoku razinu privilegija, uspješno iskorištavanje privremeno bi dodijelilo istu razinu pristupa uljezu.

Procesi koji se izvode na udaljenom računalu mogu se iskoristiti korištenjem standardnih mrežnih protokola za komunikaciju s ciljnim računalom. Connect-back shellcode daje upute ciljnom stroju da pokrene vezu s računalom uljeza. Ako uljez pokrene vezu, kod se naziva bindshell, jer pokušava preuzeti kontrolu nad mrežnom vezom koja se zove port na udaljenom računalu. Metoda povratnog povezivanja se više koristi, budući da vatrozidi rijetko zabranjuju odlazne veze.