Mikä on Shellcode?

Shellcode on konekoodin sarja tai suoritettavat käskyt, jotka ruiskutetaan tietokoneen muistiin tarkoituksena ottaa haltuunsa käynnissä oleva ohjelma. Tällaisessa hyökkäyksessä yksi vaiheista on hallita ohjelmalaskuri, joka tunnistaa seuraavan suoritettavan käskyn. Ohjelman kulku voidaan sitten ohjata lisättyyn koodiin. Tunkeutuvaa konekoodia kutsutaan hyökkäyksen hyötykuormaksi ja se on elementti, johon yleisesti viitataan termillä shellcode. Tätä menetelmää on usein käytetty antamaan hyökkääjälle pääsy avaamalla käyttöjärjestelmän komentokuori, joten koodin injektiohyökkäykset ovat yleisesti tunnettuja shellcode -koodina.

Hyödyntämässä haavoittuvuudessa on tyypillisesti kyse siitä, miten ohjelma jakaa muistin, tarkistaa syötetyn tiedon oikeellisuuden ja käsittelee muistivirheet. Ohjelmistokehittäjät voivat yleensä välttää tämän uhan määrittelemällä tarkasti syöttötiedot ja hylkäämällä väärät arvot. Jos tätä ei ole valittu, arvot, jotka tarvitsevat enemmän tallennustilaa kuin sille varattu muisti, voidaan hyväksyä. Tämä aiheuttaa suojauksen, jota kutsutaan puskurin ylivuotoksi, jossa osa tiedoista kirjoitetaan muistipaikkoihin arvon osoittaman tilan vieressä. Kun tätä poikkeavuutta käsitellään huolellisesti, se voi sallia tunkeutuvan koodin lisäämisen.

Shellcode on yleensä kirjoitettu ohjelmointikielellä, jolla on alhainen järjestelmän käyttöoikeus, kuten kokoonpano, C tai C ++. Kohdellusta haavoittuvuudesta riippuen sama tulos voidaan kuitenkin saavuttaa lisäämällä koodi tulkitulle komentosarjakielelle, kuten PERL, tai tavukoodi virtuaalikoneelle, kuten JAVA. Koodi voidaan istuttaa ennen ohjelmalaskurin kaappausta, sen aikana tai sen jälkeen. Siten tunkeileva koodi voi sisältyä tiedostoon kohdekoneessa tai lähettää verkkoyhteyden kautta reaaliajassa.

Paikalliset shellcode -hyökkäykset on suunniteltu antamaan hyökkääjälle mahdollisuus hallita konetta, johon hänellä on fyysinen pääsy. Tavoitteena tässä tapauksessa voi olla esimerkiksi tilin luominen järjestelmänvalvojan oikeuksilla. Samoin, jos käynnissä olevalla prosessilla on korkea käyttöoikeustaso, onnistunut hyväksikäyttö antaisi väliaikaisesti saman tason pääsyn tunkeilijalle.

Etäkoneella suoritettavia prosesseja voidaan hyödyntää käyttämällä vakio -verkkoprotokollia kommunikoidakseen kohdetietokoneen kanssa. Connect-back-suojauskoodi kehottaa kohdekonetta aloittamaan yhteyden tunkeutujan tietokoneeseen. Jos tunkeilija aloittaa yhteyden, koodia kutsutaan sitovaksi, koska se yrittää hallita etäkoneen portiksi kutsuttua verkkoyhteyttä. Yhdistämismenetelmää käytetään laajemmin, koska palomuurit kieltävät harvoin lähtevät yhteydet.