Toegezegde geheime bestanden

Toegezegde geheime bestanden

Eén ontbrekende .gitignore, en uw .env wordt naar de wereld verzonden.

Wat is Toegezegde geheime bestanden?

Het hardcoderen van een geheim in de broncode is één probleem. Een heel bestand ervan vastleggen is iets anders. Een repository zonder .gitignore houdt .env-bestanden, privésleutels en serviceaccount-JSON bij vanaf de eerste commit, en zodra een bestand is bijgehouden, behoort het tot de geschiedenis, dus elke kloon heeft een kopie. U kloont een openbare repository, leest een vastgelegde .env en bereikt een live staging-omgeving. Vervolgens ontkoppel je de bestanden met git rm --cached, roteer je elke blootgestelde sleutel, voeg je een .gitignore toe, en installeer je een pre-commit hook die geheime bestandsnamen blokkeert.

Wat je leert in Toegezegde geheime bestanden

Toegezegde geheime bestanden — Trainingsstappen

  1. Maak het doel groter

    Vandaag richt Bob zich op Tavonn, een startup voor betalingsintegraties die een deel van zijn code openbaar verzendt. Hij begint bij de openbare repository en inventariseert wat het bedrijf beheert voordat hij op zoek gaat naar een manier om binnen te komen. Een openbare repository is een geschenk aan iemand als Bob: het hele project, elk bestand, downloadbaar in één opdracht.

  2. Kloon de opslagplaats

    Bob kloont de repository naar zijn eigen machine, zodat hij elk bestand dat daarin wordt bijgehouden, offline en in zijn eigen tempo kan lezen. Wat de repo-tracks ook zijn, het komt met de kloon naar beneden. Als er ooit een geheim bestand is vastgelegd, staat het in de kopie die hij zojuist heeft opgehaald.

  3. Maak een lijst van de bijgehouden bestanden

    Bob geeft een overzicht van alle tracks in de repository. Hij kijkt niet naar wat er op de schijf staat, hij vraagt ​​git welke bestanden feitelijk onder versiebeheer staan, omdat dat de bestanden zijn die elke kloon bij zich heeft.

  4. Lees het geheime bestand

    Bob opent het vastgelegde omgevingsbestand. Dit is het verschil tussen dit lek en een enkele hardgecodeerde sleutel: het is niet één waarde die in een coderegel is geplakt, het is een heel bestand met geheimen onder versiebeheer. Alles wat de service nodig heeft, staat hier in platte tekst.

  5. Bereik de stagingomgeving

    Een gelekte sleutel is slechts een theorie totdat hij iets opent. Bob heeft al alles wat hij nodig heeft van de kloon: de toegewijde .env gaf hem de API-basis-URL in PUBLIC_API_URL en een live sleutel, en de routes die hij in src/routes/payments.js heeft gekloond definiëren de betalingsfeed op /v1/transactions . Hij stelt het verzoek samen en draagt ​​de sleutel in een autorisatieheader, zoals een echte klant dat zou doen. Eindpunten waren nooit het geheim; ze zitten in de publieke bron. De sleutel was, en het vastgelegde bestand gaf hem er een, dus de server heeft geen reden om het verzoek af te wijzen.

  6. De betalingsgegevens zijn geopend

    De server vertrouwde de sleutel en antwoordde. Bob leest de betalingsgegevens van Tavonn van buiten het bedrijf, zonder dat hij zelf een account heeft.

  7. Kennis check

    Je hebt zojuist gezien hoe een openbare repository een buitenstaander de sleutels van een live-omgeving overhandigde. Leg vast waarom.

  8. De waarschuwing komt binnen

    U bent eigenaar van Tavonn's betalingsservicerepository. Van de ene op de andere dag heeft de geheime scanner van het beveiligingsteam de openbare opslagplaats gemarkeerd en u een e-mail gestuurd. De bevinding is bot: een toegewijde .env met live-sleutels bevindt zich in de openbare repository, en er is geen .gitignore die soortgelijke bestanden buiten houdt.

  9. Bijgehouden, zonder .gitignore

    Je eerste stap is om het zelf te zien. Je vermeldt wat git bijhoudt in de repository, en daar is het: de .env en de serviceaccountsleutel staan ​​onder versiebeheer, en er staat geen .gitignore in de lijst. Een bestand op schijf is één ding; een bestand dat git bijhoudt, wordt vastgelegd, in de geschiedenis en in elke kloon.

  10. Ontgrendel de geheime bestanden

    Je voorkomt dat git de geheime bestanden bijhoudt met git rm --cached , waardoor ze uit de index worden verwijderd terwijl ze op schijf blijven staan, zodat de service nog steeds lokaal kan draaien. Je legt die wijziging vast en pusht deze, en de bestanden verdwijnen uit de huidige repository. Het voelt als de oplossing. Dat is niet zo, en de volgende stap laat zien waarom.

Dekking van beveiligingsframeworks

CWE

  • CWE-540 Inclusion of Sensitive Information in Source Code
  • CWE-522 Insufficiently Protected Credentials

MITRE ATT&CK

  • T1552.001 Unsecured Credentials: Credentials In Files

CIS Controls

  • CIS 3 Data Protection
  • CIS 16 Application Software Security

NIST CSF

  • PR.AT-02 Individuals in specialized roles are provided with awareness and training so that they possess the knowledge and skills to perform relevant tasks with cybersecurity risks in mind
  • PR.DS Data Security
  • PR.PS Platform Security