Beskytte tastene dine fra GitHub

Hva du skal skape

I desember 2014 løp Slashdot en foruroligende historie Bots Scanning GitHub å stjele Amazon EC2 Keys, basert på utvikler og blogger Andrew Hoffmans erfaring med å prøve Ruby on Rails på Amazon med AWS S3. Han utilsiktet begått en application.yml fil med sine AWS-nøkler. Selv om han la merke til det og slette dem raskt, klarte hackere som kjørte bots til å bruke $ 2.375 av tjenester før Amazon grep inn. Heldigvis, for Hoffman, holdt de ikke ham ansvarlig for avgiftene. 

Men dette var ikke akkurat en ny historie. Tilbake i januar 2014 rapporterte Forbes 'Runa Sandvik: Attackers Scrape GitHub For Cloud Service Credentials, Hijack Account To Mine Virtual Valuta, basert på sikkerhetsblogger Rich Mogulls egen erfaring. Hackere løp opp $ 500 i kostnader på sin konto. 

Hvem kan ikke forholde seg til sin fortelle:

Jeg var på sofaen og fullførte en episode av Marvel's Agents of S.H.I.E.L.D. Uansett ... etter showet sjekket jeg min e-post før du dro til sengs. Dette er hva jeg så: "Kjære AWS-kunde, din sikkerhet er viktig for oss. Vi ble nylig oppmerksom på at din AWS Access Key (slutter med 3KFA) sammen med din Secret Key er offentlig tilgjengelig på github.com." Dritt. Jeg boltet av sofaen, mumlet til min kone, "min Amazon er blitt hacket", og forsvant inn på kontoret mitt. Jeg logget umiddelbart inn i AWS og GitHub for å se hva som skjedde.

Det er en enkel feil, og de fleste av oss har sannsynligvis gjort en lignende ting på et eller annet tidspunkt. Og det er ikke bare AWS-nøkler som er i fare. Etter hvert som bruken av skybaserte tjenester øker, kan den utvidede bruken av et bredt spekter av service-API-nøkler brukes av både hackere og spammere. 

I denne veiledningen vil jeg gå gjennom en løsning jeg bruker i mine egne applikasjoner for å skille min lagerkode fra mine nøkler. Selv om dette ikke er hensiktsmessig for større miljøer, er det en praksis som jeg regelmessig bruker som har hjulpet meg med å begrense disse feilene, ja, jeg har også gjort dem.

Kan vi ikke bare bruke Git's Ignore?

Sikker. Teoretisk sett bør det fungere. Men jeg har hatt erfaringer hvor Gits ignorerer ikke har jobbet slik jeg forventet (sannsynligvis på grunn av min egen feil). Videre, hvis du stole på gitignore og du gjør en feil, kan du ikke oppdage det før det er for sent.

En annen tilnærming er å betale for private repositories. Hvis du har et fleksibelt budsjett, fungerer det bra. Men hvis du jobber med åpen kildekodeprosjekt eller noen gang bestemmer deg for å åpne opp et eldre prosjekt, er det heller ikke en idiotsikker tilnærming. 

Programmerbare Webs Hvorfor Exposed API Keys og følsomme data er voksende Årsak For bekymring lister noen gode praksiser og forslag som:

  • Når du bruker AWS, konfigurer du faktureringsvarsler og maksimale budsjetter.
  • Bruk aldri root-legitimasjon med AWS-bruk begrenset tilgangsnøkler gjennom IAM i stedet.
  • Bruk git-krypt. Git-krypten muliggjør gjennomsiktig kryptering og dekryptering av filer i et Git-depot.

De anbefaler også: 

Ikke legg inn API-nøkler, passord, etc., direkte inn i koden, hold alltid disse separate. Sett API-nøkler, passord, etc. i en separat konfigurasjonsfil. Hvis en konfigurasjonsfil er en del av et prosjekt i en IDE, fjern følsomme data før distribusjon eller deling.

Dette er den tilnærmingen som jeg bruker til mine egne prosjekter, og jeg vil se gjennom med deg nedenfor.

Bruke en konfigurasjonsfil

Jeg finner det best å plassere nøkler i en konfigurasjonsfil som ligger utenfor de offentlig tilgjengelige webserverkatalogene og administreres manuelt, bortsett fra min Git-depot.

Jeg begynte å bruke denne løsningen da jeg begynte å jobbe med Yii 1.1. Yii 2.0 gir konfigurerbare miljøer som en del av den avanserte applikasjonsmalen, men løser ikke sårbarheten til .gitignore feil.

Min tilnærming er relativt enkel. I stedet for å legge inn tjeneste nøkler og legitimasjon i mine kodende filer direkte, plasserer jeg nøklene i en separat konfigurasjonsfil som blir analysert under initialiseringsskript.

For eksempel, her er hva den tradisjonelle tilnærmingen kan se ut. Yii gir et konfigurasjonsskript som laster på hver sideforespørsel. Legg merke til at alle mine brukernavn, passord og API-nøkler er sårbare for feilaktige innsjekkinger:

array ('connectionString' => 'mysql: host = localhost; dbname = mydatabase', 'emulatePrepare' => sant, 'brukernavn' => 'jeff', 'passord' => 'whitefoxesjumpfences', 'charset' => ' utf8 ',' tablePrefix '=>' fox_ ',), // applikasjonsnivåparametere som kan nås // ved hjelp av Yii :: app () -> params [' paramName ']' params '=> array '=> array (' key '=>' H75EAC19M3249! X2 ',),' google '=> array (' maps_api_key '=>' W69uHsUJZBPhsFNExykbQceK ',),), ...); ...?>

I stedet for å kjøre denne risikoen, lager jeg en app-config.ini fil og plasser den utenfor githubregisterkatalogen. Det kan se slik ut:

mysql_host = "http://host33663.rds.amazon-aws.com" mysql_un = "amzn-app-db7293" mysql_db = "rds-foxesandfences-db" mysql_pwd = "K * $ 1x7B32auiWX91" pushover_key = "H75EAC19M3249! X2" google_maps_api_key = "W69uHsUJZBPhsFNExykbQceK" 

Deretter endrer jeg konfigurasjonsskriptet for å inkludere filen ved hjelp av parse_ini_file og erstatte de hardkodede innstillingene med variabler fra Inn jeg fil:

array ('connectionString' => 'mysql: vert ='. $ config ['mysql_host']. '; dbname ='. $ config ['mysql_db'], 'emulatePrepare' => true, 'brukernavn' => $ config ['mysql_un'], 'passord' => $ config ['mysql_pwd'], 'charset' => 'utf8', 'tablePrefix' => 'fox_',), // applikasjonsnivåparametere som kan nås / / using Yii :: app () -> params ['paramName'] 'params' => array ('pushover' => array ('key' => $ config ['pushover_key'],), 'google' => array ('maps_api_key' => $ config ['google_maps_api_key'],),), ...); >?

Denne tilnærmingen har vist seg ganske enkel og håndterlig for meg.

WordPress Plugin Vulnerabilities

Hvis du er en WordPress-administrator, bør du også være klar over API-nøklene dine som brukes av vanlige plugins; Disse er lagret i WordPress-databasen. Fortsett med OS, WordPress og plugin oppdateringer for å unngå å ha nøkler kompromittert av andre sikkerhetsproblemer.

Avsluttende tanker

Min tilnærming er ment å tilby et grunnleggende alternativ, men det er absolutt ikke det siste ordet. Jeg vil gjerne høre dine ideer og forslag. Vennligst legg inn eventuelle kommentarer og ideer nedenfor. Du kan bla gjennom mine andre Tuts + veiledninger på min instruktørside eller følg meg på Twitter @ reifman.

Relaterte linker

  • Botscanning GitHub å stjele Amazon EC2 Keys (Slashdot)
  • Attackers Scrape GitHub For Cloud Service Referanser, Hijack Konto Til Mine Virtual Valuta (Forbes)
  • Hvorfor utsatte API-nøkler og følsomme data vokser grunnen til bekymring
  • GitHub ignorerer filer