Aanvallen in de toeleveringsketen beperken met Preflight

0
152
Peshkova/Shutterstock.com

De risico's van supply chain-aanvallen zijn de laatste tijd zichtbaar geworden na de hacks van SolarWinds en Codecov. Aanvallers compromitteren upstream-codeproviders om kwaadaardige bronnen in softwareproducten te sluipen.

Veel applicaties downloaden externe afhankelijkheden tijdens hun bouwroutines. Het gebruik van die downloads zoals ze zijn, kan gevaarlijk zijn. Hoe weet u dat het bestand op de server niet is vervangen door een kwaadaardige versie?

curl https://example.com/install-script.sh | sh

Deze opdracht illustreert de eenvoudigste supply chain-aanvallen. Een installatiescript in je shell plaatsen is handig maar riskant. Als example.com is gehackt, heeft u zojuist een aanvaller onbeperkte toegang tot uw systeem gegeven.

Bestandscontrolesommen

U kunt de gevaren van deze aanpak beperken door te controleren of het gedownloade bestand overeenkomt met een bekende controlesom. Veel gerenommeerde open-sourceprojecten publiceren een controlesom waarmee u kunt vergelijken. Voer het bestand alleen uit als de berekende controlesom overeenkomt met uw bekende waarde.

Het implementeren van deze controle in uw buildscripts kan snel repetitief worden. Preflight is een tool waarmee u controlesomvergelijkingen kunt uitvoeren, zodat u veelvoorkomende aanvallen op de toeleveringsketen kunt vermijden.

Advertentie

Preflight accepteert het pad van een binair bestand en een controlesom om het mee te vergelijken. Als de controlesom van het bestand overeenkomt, wordt het normaal uitgevoerd. Anders wordt de opdracht afgebroken, waardoor uw buildscript of CI-pipeline wordt beschermd tegen onbedoelde opname van kwaadaardige code.

Preflight gebruiken

U kunt Preflight downloaden van de GitHub releases pagina. De tool wordt ook gedistribueerd als preflight in de Homebrew-pakketbeheerder.

Op zijn eenvoudigst kan Preflight overal worden gebruikt waar u normaal gesproken naar | sch. Pipetteer een ander commando in Preflight, met een controlesom die overeenkomt voordat er iets wordt uitgevoerd.

curl https://example.com/install-script.sh | preflight run sha256=abc…123

Het installatiescript wordt nu alleen uitgevoerd als het overeenkomt met de bekende controlesom. Dit geeft u het vertrouwen dat er niet met de inhoud van het bestand is geknoeid. Preflight ondersteunt de hash-typen sha256, sha1 en md5.

U moet bekende checksums hardcoderen in uw buildscripts. Download geen checksum-bestand van dezelfde server als het doelbestand. Stel dat een aanvaller met de mogelijkheid om het script aan te passen, ook een nep-checksum-bestand heeft geüpload.

Programmatic Checks

Soms wilt u misschien een actie ondernemen, afhankelijk van of een bestand met succes overeenkomt met de controlesom. In dit geval kunt u preflightcontrole gebruiken om de vergelijking uit te voeren zonder het bestand daadwerkelijk uit te voeren.

curl https://example.com/install-script.sh | preflight check sha256=abc…123 Advertentie

De opdracht wordt afgesloten met statuscode 0 als de controlesom van het bestand overeenkomt. Een statuscode van 1 wordt uitgegeven wanneer er een afwijking is. Preflight zal ook een foutmelding naar de standaard uitvoerstroom sturen.

Hashes maken met Preflight

Niet alle softwareprojecten publiceren hashes voor hun releases. Preflight heeft ingebouwde ondersteuning voor het genereren van een nieuwe hash als je er een nodig hebt voor een afhankelijkheid.

Download het bestand van de website van de leverancier. Geef het vervolgens door aan preflight create om de hash van de inhoud van het bestand te krijgen.

wget https://example.com/install-script.sh preflight create install-script.sh


Er wordt standaard een SHA256-hash gegenereerd. U kunt overschakelen naar SHA1 of MD5 door de vlag –digest aan de opdracht toe te voegen.

Malwarescans toevoegen

Naast eenvoudige vergelijkingen van checksums, ondersteunt Preflight het optionele scannen van malware. Deze functie scant uw bestand op bekende malwarehandtekeningen.

Malwarelijsten worden geleverd door services van derden. Preflight werkt met elk tekstbestand dat een lijst met bekende malwarecontrolesommen bevat. Malshare is een aanbieder van deze lijsten.

Advertentie

Stel de omgevingsvariabele PF_FILE_LOOKUP in om naar de locatie van uw bestand te verwijzen. Preflight detecteert deze variabele en schakelt het opzoeken van malware in. Wanneer u preflightcontrole of preflightrun uitvoert, wordt de controlesom van het doelbestand vergeleken met de vermeldingen in de malwarelijst. De controle mislukt als er een overeenkomst is.

Hoe zit het met andere soorten afhankelijkheid?

Preflight richt zich op op controles van statische bestanden. Het is het meest geschikt voor vooraf gebouwde binaire downloads die u rechtstreeks van de leverancier verkrijgt.

Het is minder realistisch om Preflight te gebruiken met afhankelijkheden die zijn verkregen via pakketbeheerders. Risico's die voortvloeien uit software die is geïnstalleerd via npm, Composer, NuGet of Maven, moeten op een andere manier worden afgehandeld. U kunt pakketbeheerfuncties gebruiken, zoals vendor scoping, om ervoor te zorgen dat afhankelijkheden worden geïnstalleerd vanuit vertrouwde repositories.

Preflight zou een onderdeel moeten zijn van uw verdediging tegen supply chain-injecties. Analyseer uw buildscripts om inbraakvectoren te identificeren die worden geleverd door andere vormen van software van derden.

Samenvatting

Supply chain-aanvallen zijn een groeiend probleem dat de beveiliging van software-implementaties. Veel ontwikkelaars nemen directe softwaredownloads op in hun buildscripts. Dit zou aanvallers een manier kunnen bieden om code in een doelproject op te nemen door een upstream-leverancier in gevaar te brengen.

Preflight vereenvoudigt de beveiligingscontroles van scripts en binaire bestanden van derden. Er is echter een zekere ironie: door Preflight te gebruiken, wordt u afhankelijk van een pakket van derden dat u moet downloaden. U kunt dit verminderen door Preflight zelf vanaf de broncode te bouwen en het binaire bestand te hosten op een interne server die u vertrouwt.