Med en Filter Bypass and Some Hexadecimal, Hacked Credit Card Numbers Are Still, Still Google-able
A Word on Credit Card Hacking
Om du känner mig, eller har läst mitt tidigare inlägg, vet du att jag arbetade för ett mycket intressant företag innan jag kom till Toptal. På detta företag behandlade vår betalningsleverantör transaktioner i storleksordningen 500 000 dollar per dag. En del av mitt jobb var att göra vår leverantör PCI-DSS-kompatibel – det vill säga kompatibel med Payment Card Industry – Data Security Standard.
Det är säkert att säga att detta inte var ett jobb för de svaga. Vid det här laget är jag ganska insatt i kreditkort, kreditkortshackning och webbsäkerhet i allmänhet. Vårt jobb var trots allt att skydda våra användares uppgifter, att förhindra att de hackas, stjäls eller missbrukas.
Du kan föreställa dig min förvåning när jag såg Bennett Haseltons artikel från 2007 på Slashdot: Why are CC numbers still so easy to find?. I korthet kunde Haselton hitta kreditkortsnummer via Google, först genom att söka efter kortets första åtta siffror i formatet ”nnnn nnnn nnnn” och senare med hjälp av avancerade frågor som bygger på nummerintervall. Han kunde till exempel använda ”40600000000000000000..4060999999999999999999” för att hitta alla 16-siffriga primära kontonummer (PAN) från CHASE (vars kort alla börjar med 4060). Förresten: här finns en fullständig lista över Issuer ID-nummer.
Jag tänkte inte så mycket på det, eftersom Google genast började filtrera de typer av frågor som Bennett använde. När man försökte googla på ett sådant intervall fick Google upp en sida där det stod något i stil med ”Du är en dålig människa”.
För ungefär sex månader sedan, när jag mindes en gammal vän, kom jag återigen att tänka på det här kreditkortsnummerhacket. Strax därefter upptäckte jag något alarmerande. Inte särskilt alarmerande, men ändå alarmerande – så jag anmälde det till Google och väntade. Efter en månad utan svar anmälde jag dem igen utan resultat.
Med en liten ändring av Haseltons gamla trick kunde jag googla kreditkortsnummer, personnummer och annan känslig information av intresse.
Bennett
I går uppmärksammade några av mina vänner (buhera.blog.hu och _2501) mig på ett nyare inlägg på Slashdot: Credit Card Numbers Still Google-able.
Artikelns författare, återigen Bennett Haselton, som skrev den ursprungliga artikeln 2007, hävdar att kreditkortsnummer fortfarande kan googlas. Du kan inte använda dig av hack för att fråga efter nummerintervallet, men det går fortfarande att göra. Istället för att använda enkla intervall måste du tillämpa specifik formatering på din fråga. Något i stil med: ”1234 5678” (lägg märke till utrymmet i mitten). Det kommer upp många träffar på denna fråga, men väldigt få är av verkligt intresse. Bland de tävlande finns telefonnummer, postnummer och liknande. Inte särskilt alarmerande. Men här kommer vändningen med kreditkortshacket.
Metodiken
Jag var nyfiken på om det fortfarande var möjligt att få tag på kreditkortsnummer på nätet på samma sätt som vi kunde 2007. Som alla goda ingenjörer brukar jag närma mig saker och ting med hjälp av en korrekt konstruerad och intelligent plan som måste utföras perfekt och med yttersta precision. Om du har provat den metoden vet du kanske att den kan misslyckas riktigt hårt – i så fall går din noggranna planering och dina ansträngningar till spillo.
Inom IT har vi en tendens att överintellektualisera, även när det inte riktigt är befogat. Jag har sett mina vänner och kollegor bryta sönder program helt och hållet med hjälp av till synes slumpmässiga indata. Deras framgångsfrekvens var häpnadsväckande och den ansträngning de lade ner på det var nära noll. Det var då jag lärde mig att för att öppna en dörr måste man ibland bara knacka.
The Credit Card Hack
Förra stycket var ett skickligt förklätt försök att få mig att framstå som mindre idiot när jag visar upp mina ”elitkunskaper i hackning”. Oops.
Först försökte jag mig på flera olika range-query-baserade tillvägagångssätt. Sedan tittade jag på avancerade förfrågningar och i stort sett allt man kan komma på på en timme eller så. Ingen av dem gav några betydande resultat.
Och sedan fick jag en galen idé.
Tänk om det fanns en missmatchning mellan filtreringsmotorn och den faktiska baksidan? Tänk om meddelandet jag fick från Google (”Du är en dålig person”) inte kom från själva backend-enheten utan från en särskild filtermotor som Google hade infört för att censurera frågor som min?
Det skulle vara mycket logiskt ur ett arkitektoniskt perspektiv. Och sådana buggar är ganska vanliga – vi ser dem inom ITSEC hela tiden, särskilt i IDS/IPS-lösningar, men även i vanlig programvara. Det finns ett filtreringsförfarande som bearbetar data och endast ger den till backend om den anser att data är acceptabla/icke-skadliga. Backend och filtreringsservern analyserar dock nästan aldrig inmatningen på exakt samma sätt. Således kan en till synes giltig indata gå igenom filtret och ställa till med förödelse i backend, och effektivt kringgå filtret.
Du kan vanligtvis utlösa den här typen av beteende genom att tillhandahålla din indata i olika kodningar. Till exempel: i stället för att använda decimaltal (0-9), vad sägs om att konvertera dem till hexadecimaltal, oktaltal eller binärtal? Tja, gissa vad…
Sök efter detta och Google kommer att tala om för dig att du är en dålig människa: ”40600000000000000000..4060999999999999999999”
Sök efter detta och Google kommer gärna att hjälpa dig: ”0xe6c8c69c9c000..0xe6d753e6ecfff”.
Det enda du behöver göra är att konvertera kreditkortsnummer från decimal till hexadecimal. Det är allt.
Resultaten inkluderar…
- Humorösa CSV-filer fyllda med potentiellt känslig information.
- Felaktiga loggfiler för e-handel.
- Känslig information som delas på hackersajter (och till och med Facebook).
Det är verkligen skrämmande.
Jag vet att den här buggen inte kommer att inspirera till någon säkerhetsforskning, men det är så det är. Google gjorde detta misstag och struntade i att ens skriva tillbaka till mig. Det händer. Jag avundas dock inte säkerhetsfolket på Big G. De måste ha mycket att se upp för. Jag skriver om det här kreditkortsnummerhacket här eftersom:
- Det har relativt liten inverkan.
- Alla som är intresserade och motiverade kommer att ha listat ut det här vid det här laget.
- För att citera Haselton, om de stora aktörerna inte tar sitt ansvar och agerar på dessa exploits, så är ”det rätta att göra att belysa problemet och insistera på att de åtgärdar det så snart som möjligt”.
Detta trick kan användas för att leta upp telefonnummer, SSN, TFN, med mera. Och, som Bennett skrev, är dessa nummer mycket svårare att ändra än ditt kreditkort, för vilket du helt enkelt kan ringa din bank och spärra kortet.
Exempel på sökningar
VARNING: Googla INTE ditt eget kreditkortsnummer i sin helhet!
Leta efter CC PAN som börjar med 4060:4060000000000000..40609999999999999999 ? 0xe6c8c69c9c000..0xe6d753e6ecfff
Några ungerska telefonnummer från leverantören ”Telenor”? Inga problem:36200000000..3620999999999 ? 0x86db02a00..0x86e48c07f
Leta efter SSN. Tack och lov ger dessa inte många meningsfulla resultat:100000000..99999999999 ? 0x5f5e100..0x3b9ac9ff
Det finns många, många fler.
Om du hittar något som är mycket alarmerande, eller om du är nyfiken på kreditkortshackning, så lämna det gärna i kommentarerna eller kontakta mig via e-post på eller på Twitter på @synsecblog. Att ringa polisen är oftast lönlöst i dessa fall, men det kan vara värt ett försök. Den givna handlaren eller kortleverantören är vanligtvis mer angelägen om att ta itu med problemet.
Hur vi ska gå vidare härifrån
Nja, Google måste uppenbarligen åtgärda detta, eventuellt med hjälp av de stora aktörerna som Visa och Mastercard. Haselton ger faktiskt ett antal intressanta förslag i de två artiklarna som länkas ovan.
Vad du måste göra, dock (och varför jag har skrivit det här inlägget), är att sprida ordet. Kreditkortsbedrägerier är en stor bransch, och enkel medvetenhet kan rädda dig från att bli ett offer. Vidare, om du har en e-handelswebbplats eller hanterar någon kreditkortsbehandling, se till att du är säker. PCI-DSS är en bra riktlinje, men den är långt ifrån perfekt. Dessutom är det alltid en bra idé att googla din webbplats med den avancerade sökfrågan ”site:mysite.com” och leta efter känsliga nummer. Det finns en mycket, mycket liten chans att du hittar något – men om du gör det måste du agera omedelbart.
Också ett litet vänligt råd: Du bör aldrig ge ut din kreditkortsinformation till någon. Mitt råd är att använda PayPal eller en liknande tjänst när det är möjligt. Du kan kolla in dessa länkar för mer information:
- Visa’s credit card safety tips
- Citi’s credit card safety tips
Och några allmänna tips: ladda inte ner saker som du inte har bett om, öppna inte skräppost och kom ihåg att din bank aldrig kommer att be dig om ditt lösenord.
Förresten: Om du tror att ingen är dum nog att falla för dessa tekniker för kreditkortshackning eller ge bort sin kreditkortsinformation på internet, ta en titt på @NeedadADebitCard.
Var försiktiga människor!