Mis on Shellcode?

Shellkood on masinkoodide või käivitatavate käskude jada, mis sisestatakse arvuti mällu eesmärgiga võtta jooksva programmi üle kontroll. Sellise ründe puhul on üheks sammuks saada kontroll programmiloenduri üle, mis tuvastab järgmise täidetava käsu. Seejärel saab programmivoo suunata sisestatud koodile. Sissetungivat masinkoodi nimetatakse rünnaku kasulikuks koormuseks ja see on element, millele tavaliselt viidatakse terminiga shellcode. Seda meetodit on sageli kasutatud ründajale juurdepääsu andmiseks, avades operatsioonisüsteemi käsukesta, seega on koodi sisestamise rünnakuid üldiselt hakatud nimetama shellkoodiks.

Kasutatav haavatavus hõlmab tavaliselt seda, kuidas programm määrab mälu, kontrollib sisendandmete kehtivust ja käsitleb mäluvigu. Tarkvaraarendajad saavad tavaliselt seda ohtu vältida, määratledes rangelt sisendandmed ja lükates tagasi sobimatud väärtused. Kui see on märkimata, võidakse aktsepteerida väärtused, mis vajavad rohkem salvestusruumi kui selle väärtuse jaoks eraldatud mälu. See põhjustab turvamurru, mida nimetatakse puhvri ületäitumiseks, kus osa andmetest kirjutatakse väärtusele määratud ruumi kõrval asuvatesse mälukohtadesse. Hoolikalt manipuleerides võib see anomaalia võimaldada pealetükkiva koodi sisestamist.

Shellkood kirjutatakse tavaliselt madala tasemega süsteemijuurdepääsuga programmeerimiskeeles, nagu assembler, C või C++. Olenevalt sihitud haavatavusest võib aga sama tulemuse saavutada ka tõlgendatava skriptikeele (nt PERL) koodi või virtuaalmasina (nt JAVA) baitkoodi sisestamisega. Koodi saab implanteerida enne programmiloenduri kaaperdamist, selle ajal või pärast seda. Seega võib pealetükkiv kood sisalduda sihitud masina failis või edastada võrguühenduse kaudu reaalajas.

Kohalikud shellcode exploitid on loodud selleks, et anda ründajale kontroll masina üle, millele tal on füüsiline juurdepääs. Sel juhul võib eesmärgiks olla näiteks administraatoriõigustega konto loomine. Samamoodi, kui töötaval protsessil on kõrge privileegitase, annab edukas ärakasutamine ajutiselt sissetungijale sama juurdepääsutaseme.

Kaugmasinas töötavaid protsesse saab sihtarvutiga suhtlemiseks kasutada standardsete võrguprotokollide abil. Connect-back shellkood juhendab sihtmasinat looma ühenduse sissetungija arvutiga. Kui sissetungija ühenduse loob, nimetatakse koodi sideshelliks, kuna see püüab võtta kontrolli võrguühenduse üle, mida nimetatakse kaugmasina pordiks. Tagasiühenduse meetodit kasutatakse laialdasemalt, kuna tulemüürid keelavad harva väljaminevad ühendused.