Wat is een shellcode?
Shellcode is een opeenvolging van machinecode, of uitvoerbare instructies, die in het geheugen van een computer wordt geïnjecteerd met de bedoeling de controle over een actief programma te nemen. Bij een dergelijke aanval is een van de stappen om controle te krijgen over de programmateller, die de volgende uit te voeren instructie identificeert. Programmastroom kan vervolgens worden doorgestuurd naar de ingevoegde code. De opdringerige machinecode wordt de payload van de aanval genoemd en is het element dat gewoonlijk wordt aangeduid met de term shellcode. Deze methode is vaak gebruikt om een aanvaller toegang te verlenen door een opdrachtshell van het besturingssysteem te openen, dus code-injectieaanvallen zijn in het algemeen bekend geworden als shellcode.
Het beveiligingslek dat wordt misbruikt, houdt meestal in hoe een programma geheugen toewijst, de geldigheid van invoergegevens controleert en geheugenfouten verwerkt. Softwareontwikkelaars kunnen deze dreiging meestal vermijden door invoergegevens strikt te definiëren en onjuiste waarden te weigeren. Indien niet aangevinkt, kunnen waarden die meer opslagruimte nodig hebben dan het toegewezen geheugen voor die waarde worden geaccepteerd. Dit veroorzaakt een beveiligingsstoring, een bufferoverloop, waarbij een deel van de gegevens wordt geschreven in geheugenlocaties naast de toegewezen ruimte van de waarde. Wanneer deze zorgvuldig wordt gemanipuleerd, kan deze anomalie intrusieve code introduceren.
Shellcode wordt normaal geschreven in een programmeertaal met systeemtoegang op laag niveau zoals assemblage, C of C ++. Afhankelijk van de beoogde kwetsbaarheid kan hetzelfde resultaat echter worden bereikt door code in te voegen voor een geïnterpreteerde scripttaal, zoals PERL, of bytecode voor een virtuele machine, zoals JAVA. De code kan worden geïmplanteerd vóór, tijdens of na de kaping van de programmateller. De opdringerige code kan dus in een bestand op de beoogde machine zijn opgeslagen of in realtime via een netwerkverbinding worden verzonden.
Lokale shellcode-exploits zijn ontworpen om een aanvaller controle te geven over een machine waartoe hij of zij fysieke toegang heeft. Een doelstelling in dit geval kan bijvoorbeeld zijn om een account met beheerdersrechten aan te maken. Evenzo, als een lopend proces een hoog privilegieniveau heeft, zou een succesvolle exploit tijdelijk hetzelfde toegangsniveau verlenen aan de indringer.
Processen die op een externe computer worden uitgevoerd, kunnen worden benut met behulp van standaardnetwerkprotocollen om te communiceren met de doelcomputer. Connect-back shellcode instrueert de doelmachine om een verbinding tot stand te brengen met de computer van de indringer. Als de indringer de verbinding tot stand brengt, wordt de code een bindshell genoemd, omdat deze probeert controle te krijgen over een netwerkverbinding die een poort op de externe computer wordt genoemd. De connect-back-methode wordt meer algemeen gebruikt, omdat firewalls zelden uitgaande verbindingen verbieden.