Wat is Code-injectie en hoe u het kunt vermijden
kwetsbaarheden in Code-injectie is een algemene term die kwetsbaarheden beschrijft die door een aanvaller kunnen worden benut om kwaadaardige code te injecteren en uit te voeren.
deze kwetsbaarheid treedt meestal op door het ontbreken van niet-vertrouwde gegevensvalidatie. Toepassingen die direct code te evalueren zonder het eerst te valideren zou kwetsbaar zijn voor dit soort aanval.
Code-injectie wordt soms verward met andere kwetsbaarheden zoals en commando-injectie. Opgemerkt moet worden dat code-injectie is een ander type van kwetsbaarheid, waarbij een aanvaller is het injecteren van code in plaats van besturingssysteem commando ‘ s. Dit betekent dat met betrekking tot code-injectie kwetsbaarheden, de aanvaller wordt beperkt door de taalfunctionaliteit van de toepassing.
aanvaller beperkingen
bij het benutten van dergelijke kwetsbaarheden, worden aanvallers beperkt door de taal van de applicatie (zoals PHP / Python) functionaliteit. Echter, in de meeste gevallen, de aanvaller zou in staat zijn om gebruik te maken van de interpreter functionaliteit om de overgang van code-injectie naar Commando-injectie.
bijvoorbeeld, als een aanvaller PHP-code in een webapplicatie injecteert, wordt de aanvaller beperkt door de functionaliteit die beschikbaar is door de PHP-interpreter. Wanneer de injectie aanval optreedt, de PHP interpreter zou de geïnjecteerde code uit te voeren en afhankelijk van de functionaliteit van de interpreter, een aanvaller kan gebruik maken van programma uitvoering functies die beschikbaar zijn in PHP zoals system() of shell_exec om systeem commando ‘ s uit te voeren.
het effect van een Code-injectie
het effect dat een succesvolle aanval zou hebben, kan variëren afhankelijk van verschillende factoren, zoals de taal die door de toepassing wordt gebruikt, de beschikbare functionaliteit per toepassing, enz.
in de meeste gevallen kan een succesvolle aanval echter de vertrouwelijkheid, integriteit en beschikbaarheid van de applicatie en zijn gegevens volledig in gevaar brengen.
voorbeeld
stel je een webtoepassing voor die niet-vertrouwde gegevens doorgeeft, zoals de input van de gebruiker naar een PHP eval() functie. De eval () functie evalueert eenvoudig een string als PHP code, zolang het een geldige PHP syntaxis heeft en eindigt met een puntkomma.
<?php
$ backup = “”;
$input = $_GET;
eval (“\$backup = \$input;”);
?>
omdat de applicatie de input van de gebruiker doorgeeft aan de dangerous PHP eval() functie en er geen validatie wordt uitgevoerd, zou de applicatie kwetsbaar zijn voor Code-injectie aanvallen.
een aanvaller kan deze zwakte uitbuiten door de invoer 1; phpinfo (); zoals hieronder getoond:
https://example.com/index.php?arg=1;https://example.com/index.php?arg=1; phpinfo ();
uitvoeren OS systeem commando ‘s
na verificatie van de kwetsbaarheid, kan een aanvaller doorgaan met het uitvoeren van systeem commando’ s door gebruik te maken van de interpreter functies die het uitvoeren van commando ‘ s mogelijk maken. In dit geval wordt de functie system() gebruikt.
https://example.com/index.php?arg=1;https://example.com/index.php?arg=1; system (‘whoami’);
het commando whoami drukt de gebruikersnaam van de huidige gebruiker af wanneer deze wordt aangeroepen. Dit betekent dat wanneer de toepassing
de input van de gebruiker doorgeeft aan de eval() functie, de PHP interpreter het whoami commando uitvoert op het
onderliggende besturingssysteem.
zodra de aanvaller systeemcommando ‘ s kan uitvoeren, kunnen ze doorgaan met het verkrijgen van een interactieve shell op het kwetsbare
systeem en andere aanvallen uitvoeren op andere systemen binnen het interne netwerk van het gecompromitteerde systeem.
preventie
ongeacht de taal die wordt gebruikt, kunnen kwetsbaarheden in Code-injectie worden vermeden door de hieronder beschreven beste praktijken
te volgen.:
- niet-vertrouwde gegevens evalueren
◦ tenzij het strikt vereist is, evalueer niet direct onbetrouwbare gegevens met behulp van onveilige functies zoals eval (). * Behandel alle gegevens als niet-vertrouwde
◦ merk op dat niet-vertrouwde gegevens niet alleen verwijzen naar de invoer via HTML-formulieren. Informatie die door gebruikers wordt beheerd, zoals cookies, HTTP-request headers en geüploade bestanden, moet worden behandeld als niet-vertrouwd.
- Validaatgetrouwste gegevens
◦ Valideer altijd gebruikersinvoer op de server.
◦ als de gebruiker verondersteld wordt invoer in een specifiek formaat in te dienen, zoals datum, postcode, nummers, e-mail
adres, enz., zorg er dan voor dat de invoer van de gebruiker overeenkomt met het verwachte formaat.
◦ als de toepassing een waarde verwacht binnen een beperkt aantal opties, volg dan een whitelistbenadering en zorg ervoor dat
de ingevoerde invoer een van de toegestane opties is.
- verharden van de interpreter
◦ de functionaliteit van de PHP-interpreter moet bijvoorbeeld worden beperkt tot de minimale functionaliteit die nodig is om de toepassing te laten functioneren. Dit kan het veel moeilijker maken voor aanvallers om systeemopdrachten uit te voeren. Bijvoorbeeld, de PHP programma uitvoering functies kunnen worden uitgeschakeld door het wijzigen van de php.ini file.
- statische analyse
◦ voer statische analyse-activiteiten uit om kwetsbaarheden in verband met onveilige evaluatie te identificeren.
- VAPT
◦ regelmatig kwetsbaarheidsbeoordelingen en penetratietests uitvoeren om dergelijke zwakke punten op te sporen en te beperken.