Kategoriarkiv: IT-Säkerhet

Bild CC Cydcor https://flic.kr/p/fcUr79

Svenska IT-Konferenser 2015

Jag tänkte försöka mig på att sammanfatta några intressanta konferenser som går av stapeln under 2015 som kan vara av intresse för dig som jobbar med webb/it/säkerhet.

Dessa konferenser går alla i Sverige:

  • Webbdagarna – Har tyvärr redan varit och jag lyckas alltid missa denna men nästa gång lovar jag att komma.
  • Internetdagarna – 23-24 November. Detta är en bred konferens som har ett antal olika spår för dig som gillar säkerhet, domäner, wordpress, startups
  • PyCon – 12-13 Maj. För dig som gillar att programmera Python. Går för andra året
  • EuroBSDcon – 3-4 Oktober. Brukar vara en bra konferens för dig som gillar opertivsystemet BSD.
  • SEC-T – 17-18 September. Helt klart bästa säkerhetskonferensen i Sverige. Även pubkväll den 23:de April
  • Startup Day – April 25. Har ej varit på den men har hört mycket bra om denna startup-konferens
  • NordicJS – 10-11 Sep. En konferens för dig som programmerar JavaScript. Lokalen förra året var Artipelag ute i Stockholms skärgård som helt klart verkar intressant.

Vad har du för förslag på konferenser? Lämna gärna en kommentar med tips.

Lyssna på mig under Internetdagarna

Under Internetdagarna 2014 så är jag inbjuden att hålla föredrag under spåret Fallgropar och läxor för säker utveckling. Jag har inte så många minuter på mig eftersom schemat är fullspäckat med andra intressanta föredrag men tänkte försökt mig på att prata om två intressanta saker:

  • Exfiltration av data – Hur antagonisterna gör för att få ut information från skyddade nätverk
  • SWF som angreppsvektor – Jag kommer att bl.a. berätta hur jag hackade Facebook

Kostnaden för att gå en dag på Internetdagarna kostar 1000kr och två dagar 2000kr. Läs mer om mig här på Internetdagarna.se.

Internetdagarna är Sveriges viktigaste mötesplats för oss som jobbar med internet.

Bomb illustration CC-BY, Bedow

Nytt projekt: Antivirus

IT-säkerhet, webbutveckling och devops är de tre delar som jag gillar allra mest. Och nu har jag äntligen utvecklat en ny typ av antivirus-produkt som använder alla dessa.

Denna nya tjänst som jag utvecklat är helt klart intressant och riktar sig både till privatpersoner och företag. Den är skapad för att hitta skadlig kod som andra produkter ej troligtvis hittar: riktade intrång, zerodays, rootkits etc.

Tanken är att först köra en beta-period helt gratis för privatpersoner och dra lärdom om hur produkten ska utvecklas. Även spännande för mig har varit att den mesta av koden är skriven i Python,  Windows kommer initialt att stödjas. Python är populärt och hipster-mjukvara såsom Dropbox är utvecklad i Python.

Hoppas även på en Mac OS X version men det ligger nog lite längre bort även det skulle behövas.

Psst, du följer väl Kryptera.se där jag bloggar om IT-säkereht och kryptering?

Google favoriserar https

Som Google meddelade för några månader sedan gällande att de avser att favorisera webbsajter som använder sig av https är nu officiellt bekräftat.

Detta är så klart en bra utveckling men många webbhotell åtminstone i Sverige verkar inte riktigt vara med på banan.

För att citera några webbhotell:

”För att ha SSL-certifikat under eget domännamn krävs en egen IP-adress” – Loopia

”Ett SSL-cert med inkluderad privat ipv4-adress” – Binero

Det behövs ej egen IP-adress utan Server Name Indication (SNI) finns implementerat i TLS (SSL) och bör användas istället. Som alla vet så är IP-adresserna slut sedan länge och att slösa på detta sätt gynnar ingen som webbhotellen föreslår.

Att kräva privat IP-adress för tls är lite 1900-tal tycker jag, eller i varje fall före 2010. Vid 2010 påstår jag tåget gick.

Skriver Internetgurun Patrik Fältström i gruppen Kodapor på Facebook.

Det finns även en mängd andra saker som bör tänkas på (lämna gärna en kommentar om jag glömt något mer)

  • Använd protokollrelativa URL:er dvs // istället för http://domän (finns i RFC 1808 sedan 16 år tillbaka)
  • Testa så du får bra betyg via Qualys SSL-Test
  • Håll koll på när certifikatet förfaller
  • Hur gör du revokering om något inträffar såsom Heartbleed?
  • Använd PFS, secure cookies och HSTS.
  • Vilket certifikat ska användas? Domänvaliderat eller EV? Wildcard?
  • Kontollera så du ej har mixed content:

Mixed content

Lättaste sättet att hitta mixed-content är enligt mig att använda Chrome Developer Tools och klicka på Networks-tabben.

Och jag säljer så klart SSL-Certifikat via https.se.

iOS Reverse-engineering

Behöver Er organisation hjälp med reverse-engineering eller IT-säkerhetsgranskningar? Kontakta mig gärna via https://triop.se

Att utföra reverse-engineering av Apples operativsystem iOS som återfinnes i bl.a. iPhone samt iPad kan inneha olika syften (Ciscos operativsystem heter även iOS). Det kan röra sig om att skapa kompatibilitet mot tredjepartsprodukter, analysera skadlig kod eller identifiera eventuella säkerhetsbrister.

Just konstformen reverse-engineering behöver inte direkt innebära att lusläsa assemblerkod dagarna i ända utan handlar mer om att lägga ett pussel för att dra eventuella slutsatser.

Det som tar längst tid är att upprätta en miljö som innehar diverse verktyg som är bra vid utförande av analysen.

Labbplattform iOS

Du behöver en iPad eller iPhone som du jailbreakar och sedan installera Cydia. När du installerat Cydia så finns det ett antal paket som jag rekommenderar:

  • adv-cmds
  • Bigboss recommended tools
  • OpenSSH
  • gdb
  • cycript

Det spelar även roll om du kör med iOS 6.x, 7.x eller 5.x eftersom vissa appar enbart stödjer iOS > 6.x. Även så kan det underlätta om du har en Mac samt Xcode för att kompilera program för att sedan köra på iOS (utvecklarlicens är ej nödvändig).

Du kan även köra kommandot installtheos på iOS om du vill installera en mängd utvecklarverktyg:

Theos is a cross-platform suite of development tools for managing, developing, and deploying iOS software without the use of Xcode.

Jag har även ett dedikerat WiFi-nätverk för att labba med iOS-enheter för att sätta upp filter och proxy-servrar. Det är lätt att konfigurera och jag använder en Raspberry Pi med hostapd.

Granskning

Jag brukar dela upp granskningen i tre steg. Jag har tidigare skrivit om nätverk samt hur du kan titta på API-trafik exempelvis med hjälp av Charles Proxy eller RVI. Ibland räcker det enbart att genomföra ett av nedan tre områden.

  • Nätverk
  • Filsystem
  • Runtime

Varje steg har sina verktyg och metoder som kan användas. Jag går nu igenom dessa tre steg mer i detalj. Även så kan ett förberedande arbete genomföras då information från öppna källor inhämtas (läs googla). Går man exempelvis in och klickar på Licenser under Facebook Messenger appen så hittar du direkt en hel del bibliotek som återfinnes:

 

Facebook Messenger iOS Nätverk

Här är Wireshark eller NetworkMiner din vän. Se vilken trafik som kommuniceras till eller från appen då den startas eller om den kör i bakgrunden. Om den är krypterad så kan du behöva installera ditt eget certifikat. Även i vissa fall så använder ej appen dina proxy-inställningar om du vill använda Charles eller Burp.

Viktigt är att dokumentera löpande all information som kan vara av intresse såsom sökvägar, IP-adresser och user-agent.

Swedavia API anrop

 

Ovan skärdump från ett tidigare blogginlägg.

Filsystem

Gå till den mapp där just din app håller hus. Om du inte vet vilken mapp som används kan du kontrollera processlistan när du startat appen.

Många utvecklare lämnar kvar information och filer i mapparna. Här kan sqlite-filer (.db) hittas med information eller .plist-filer som kan läsas med plutil.

Här är ett exempel då jag listar några E-postadresser samt telefonnummer på Facebook-vänner från filen fbsyncstore.db med hjälp av sqlite3-kommandot:

fbsyncstore.dbFilerna kan även ändras om det skulle vara en fördel för dig. Såsom om det finns möjlighet till att se mer debug-information.

Runtime

Detta är den svåraste biten, dels för att Apparna på iOS är krypterade när dom ligger på disk men även för att det tar otroligt lång tid att kartlägga hur en App fungerar i detalj.

Ett bra första test är att använda dumpdecrypted och sedan class-dump-z och då kan vi bl.a. se följande information:

SSCrypto iOS

Vilket berättar att dom troligtvis använder SSCrypto som är en wrapper för OpenSSL. Dock så uppdateras ej SSCrypto (Septicus Software) och dom rekommenderar istället Apples CCCrypto.

För att sedan se mer information så rekommenderas theos (mobile substrate), gdb samt cycript. När det gäller gdb så kan objc_msgSend användas för att logga alla Objective-C metodanrop med följande:
break objc_msgSend
commands
printf "-[%s %s]\n", (char *)class_getName(*(long *)$r0,$r1),$r1
c
end

Detta är förutsatt att du redan har anslutit till processen genom gdb -p <processid> innan. Då fortsätter du bara med kommandot c så ska du få ut löpande information.

Även så kan jag rekommendera Snoop-It som i sin tur använder sig av Mobile Substrate Tweak.xm (tyvärr stödjer ej Snoop-It 64 bitars-appar ännu). Bra guide här hur du skapar en egen tweak.

Även så fungerar det bra att ladda in den dekrypterade appen direkt i IDA Pro för att underlätta processen:

IDA Pro iOSKoden för funktionen generateRSAPrivateKeyWithLength ser ut att vara samma som denna.

Tipsar även om att kolla in iRet som Veracoda har släppt samt guiden på penetrationstest.se.

Testa säkerheten i WordPress del 2

Detta är del två av hur du kan själv testa säkerheten på Er WordPress-installation. Detta är del två och första delen hittar du här.

Denna del behandlar några mer automatiserade sätt samt är lättare för nybörjare.

DetectifyDetectify

Svenska startupen Detectify har en utmärkt bra tjänst för att söka igenom WordPress efter sårbarheter.

De har även ett tillhörande WordPress-plugin. Jag rekommenderar alla att testa eftersom kostnaden är ”det du är villig att betala”, dvs du bestämmer själv hur mycket du vill betala.

https://detectify.com

Och här hittar du pluginet https://wordpress.org/plugins/detectify-for-wp/

Exempel på en översiktsrapport kan se ut så här:

Detectify skärmdump

 

Sucuri

Sucuri är också en form av online-scanner som söker igenom Er sajt. Den tittar dock på lite andra saker än vad Detectify såsom om Er blogg dyker upp på Google med sökord som har med spam-sökord såsom viagra, cialis och liknande att göra.

https://sucuri.net

Google dorks

Sist men inte minst så måste jag nämna alla Google Dorks som finnes. Det kan lättast beskrivas som att man använder Google för att hitta intressanta saker på en blogg.

Ett exempel kan vara följande sökning:

intitle:"index of" site:utvbloggen.se

Som försöker hitta kataloger på min blogg/domän som tillåter fillistning. Här finnes en databas med många dorks:

http://www.exploit-db.com/google-dorks/

Kolla även in penetrationstest.se

Så testar du säkerheten i WordPress

Denna guide visar hur du kan genomföra ett penetrationstest av Er WordPress-installation. Fokus ligger på WordPress men det finns så klart andra delar att testa som också är relevanta såsom att testa såsom svaga SFT/FTP-lösenord men det är utanför denna guide.

Informationsinsamling

Först och främst så genomför vi informationsinsamling eller OSINT som det också kan kallas. Vi försöker kartlägga vilka användare som återfinnes samt eventuella plugins. Det går att göra genom att titta på källkoden på sidan och söka efter referenser till sökvägen /wp-content/plugins exempelvis.

Annars finns det ett plugin (script) till verktyget Nmap som kan lista användare:

 $ nmap -p 80,443 -v -sV --script http-wordpress-enum --script-args limit=25 utvbloggen.se

Och då erhåller du efter några minuter aktuella användarnamn, i mitt fall:

Username found: admin

Att det går att hitta användarnamn beror på att WordPress gladeligen berättar detta om en förfrågan genomföres till exempelvis URL:en //utvbloggen.se/?author=1 och 2 för andra användaren osv.

Även så avslöjar WordPress login-funktion om ett användarnamn är giltigt eller ej, se skillnaden mellan dessa två meddelanden:

WordPress felaktigt lösenord WordPress felaktigt användarnamn

Efter detta så testar vi att söka efter dom 500 vanligaste WordPress-plugintyperna som finnes:

$ nmap -p80,443 -v -sV --script=http-wordpress-plugins --script-args http-wordpress-plugins.search=500 utvbloggen.se

Och efter ett tag så finner vi att följande plugins används:

| search amongst the 500 most popular plugins
| akismet
| contact-form-7
| all-in-one-seo-pack
| google-sitemap-generator
| jetpack
| w3-total-cache
| worker
| only-tweet-like-share-and-google-1
| timthumb-vulnerability-scanner
| wordpress-23-related-posts-plugin
|_ syntaxhighlighter

Eftersom vi är intresserad av säkerheten så kontrollerar vi sedan om dessa innehåller några sårbarheter som uppdagats. Secunia erbjuder bl.a. en sådan tjänst här.

Även så kan det vara intressant att hitta övriga plugins som används som kanske inte är lika vanliga och ladda hem dessa samt söka efter sårbarheter. Och med detta menar jag att genomföra kodgranskning.

Forcering av lösenord

Nu när vi vet att det finns ett konto med användarnamnet ‘admin’ så är det dags att testa några vanliga lösenord. Det finns hur många lösenordlistor som helst med vanliga lösenord så det är inte helt lätt att hitta en bra lista.

Jag skulle rekommendera att bygga en egen lösenordlista med ord som förekommer på den blogg som vi vill testa och sedan köra den genom John the Rippers filter för att lägga till 01 osv på slutet på orden.

Först och främst så skapar vi filen users.txt dit vi lägger användarnamnet som vi hittade från föregående steg för att hitta användarnamn. Ett användarnamn per rad.

Sedan kör vi igång Nmap igen med modulen som heter http-wordpress-brute:

nmap -p 80,443 --script http-wordpress-brute --script-args 'userdb=users.txt,passdb=500-worst-passwords.txt' utvbloggen.se

Här använder jag lösenordsfilen 500-worst-passwords.txt men det går även bra att använda swedish.txt.

Så här kan det se ut då du hittar rätt lösenord som i detta fall är sexy123fox på denna blogg:

WordPress bruteforce passwordOch ovan statistik visar även på att det tog 107 sekunder att testa 1002 lösenord. Om vi vill få upp hastigheten i lösenordstesterna så kan vi använda ett annat verktyg som heter Hydra (även så fungerar Burp Suite eller WPscan.rb).

Här kan vi se när Hydra hittar rätt lösenord med en annan lösenordslista som innehåller 370 lösenord som Twitter förbjuder som även hittar rätt lösenord sexy123fox:

WordPress hydra passwordOch sist men inte minst så  använder vi WPscan.rb för att göra en analys:

WPscan wordpressDenna analys visar förutom det vi ser ovan 6 st plugins som identifierades samt eventuella sårbarheter som dessa innehåller.

WordPress version 3.9.1 är senaste versionen vilket är bra.

Övrigt att kontrollera

Finns många andra viktiga saker att testa samt kontrollera. Några har jag nämnt tidigare såsom att även testa lösenord på SFTP/FTP. Men även viktigt är att kontrollera säkerheten på webbservern i övrigt och då titta i exempelvis robots.txt, sitemaps eller dylikt.

Söka efter phpmyadmin samt andra liknande script som finnes installerade men även databasdumpar som kan ha namn såsom http://utvbloggen.se/utvbloggen.sql exempelvis.

Mitt företag Triop erbjuder även denna typ av IT-säkerhetstest, läs mer här.

Uppdatering: Nu finns det en del två av denna guide som du kan läsa här.

Tarsnap – Backup för den paranoide

Tarsnap är en backuptjänst i molnet för den som är paranoid. Kryptering genomförs på klientsidan innan datan skickas upp till Amazon S3-tjänst. Tarsnap är utvecklat av Colin Percival som är övermänsklig, han har bl.a. utvecklat scrypt och är säkerhetschef för FreeBSD.

Tarsnap har inget GUI och stödjer operativsystem såsom Mac OS X, Ubuntu, FreeBSD osv. Stöd till Windows finnes via Cygwin.

Så kommer du igång med Tarsnap

Först och främst laddar du hem tarsnap till din server eller klient:

$ wget https://www.tarsnap.com/download/tarsnap-autoconf-1.0.35.tgz

Och verifierar sedan nedladdningen:

$ sha256 tarsnap-autoconf-1.0.35.tgz
SHA256 (tarsnap-autoconf-1.0.35.tgz) = 6c9f6756bc43bc225b842f7e3a0ec7204e0cf606e10559d27704e1cc33098c9a

Sedan installerar du eventuella beroenden som kan behövas. Detta är för Ubuntu:

$ sudo apt-get install libssl-dev zlib1g-dev e2fslibs-dev make

Vi extraherar tarsnap och bygger koden:

$ tar xvfz tarsnap-autoconf-1.0.35.tgz
$ cd tarsnap-autoconf-1.0.35/
$ ./configure && make
$ sudo make install

Och förhoppningsvis gick allt bra och tarsnap är installerat. Om du inte har något konto på tarsnap.com så är det läge att skapa det nu.

Nu skapar vi en nyckel för denna server och anger våra uppgifter som vi använde när vi skapade kontot på tarsnap.com:

$ tarsnap-keygen --keyfile /root/https-tarsnap.key --machine https.se --user [email protected]

Viktigt här är att du sparar undan nyckelfilen https-tarsnap.key på ett annat system än det du gör backup på. För förlorar du denna fil så kan du ej återskapa data från servern samt ser till att enbart användaren som gör backup får läsa denna nyckelfil.

Så gör du backup med Tarsnap

Finurligt så fungerar tarsnap precis som tar men med lite extra argument. Jag brukar skapa en fil vid namn backup.sh som även dumpar ut MySQL-databas så den följer med i backupen.

Så här ser min backup.sh ut som körs via cronjobb varje natt av root. Se även till att enbart root kan läsa filen backup.sh då den innehåller lösenord.

mysqldump -u root -plösenord https > /var/www/https.se/backup/`date +"%Y%m%d"`.sql
tarsnap --keyfile /root/https-tarsnap.key --cachedir /usr/local/tarsnap-cache -c -f https.se-`date +%F` /var/www/https.se/docs/ /var/www/https.se/backup/ /etc/nginx/sites-enabled/default-ssl /etc/nginx/sites-enabled/default 
tarsnap --cachedir /usr/local/tarsnap-cache --keyfile /root/https-tarsnap.key -d -f https.se-`date -d "2 days ago" +%F`

Den sista raden med tarsnap -d ser till att ta bort lagrade backuper som är äldre än två dagar. Du kan även behöva skapa katalogen /usr/local/tarsnap-cache/

Uppdatering: Kolla in denna gist som underlättar installationen.

Föreläsning om WordPress och säkerhet

Föregående fredag så höll jag en föreläsning om WordPress och säkerhet på Västerås Science Park. Föreläste gjorde även Christoffer Larsson från Aftonbladet och hur de använder Vagrant för utvecklingsmiljön.

På min föreläsning om säkerhet så berättade jag om en händelse som inträffade för några år sedan då en angripare lyckades utnyttja en sårbarhet på en av mina bloggar och placera ut ett antal bakdörrar. Genom att bakdörra angriparens bakdörrar samt spåra IP-adressen mot andra anrop på min webbserver så lyckades jag till slut hitta alla bakdörrar.

Här finnes presentationen:

Läs mer om #wpbar här. Och tack till Västerås Science park samt Flowcom som sponsrat + arrangerat detta trevliga event.

Så hittade jag en säkerhetsbrist på Facebook

Det var en fredagskväll för ett tag sedan och jag hade lite tid över. Jag visste sedan tidigare att Facebook uppmuntrade dess användare att hitta och rapportera in säkerhetsbrister som kan identifieras på facebook.com.

Sagt och gjort så kollade jag runt lite på vad jag skulle kunna tänkas att fokusera på för någon typ av sårbarhet. Valde att titta närmare på  Adobe Flash-filer som fanns (dvs .swf) och det var en hel del.

Tittar man på OWASP-projektets hemsida om just Flash så inser man granska snabbt att det är rätt lätt att skita i det blå skåpet om man gör fel.

Använde mig av en proxy (Charles Proxy) för att göra mitm (man in the middle) på min Facebook-trafik och sedan sökte jag helt enkelt efter .swf-referenser i koden. Hittade efter ett tag en .swf-fil som tillhörde något som heter Open Graph och denna swf hade stöd för att ladda in ytterligare moduler externt.

Sagt och gjort så testade jag att skapa en egen swf-fil som bara exekverade ett JavaScript via flash.external.ExternalInterface.call()-funktionen. Fick dock ett felmeddelande från Facebooks swf att detta ej var en giltig modul men min egna JavaScript-kod exekverades ändå #win! Totalt tog det tre timmar att hitta denna sårbarhet.

Rapporterade detta direkt till Facebook Security och inom några dagar var sårbarheten åtgärdad och mitt namn finns med i ”hall of fame”.

En stor eloge till Facebook som har detta program och uppmuntrar till att sårbarheter identifieras och åtgärdas. Andra företag såsom Google och Microsoft har insett fördelarna och startat egna program. Även så utbetalas en summa till de som hittar sårbarheter: Facebook exempelvis har ett minimum på 3300 SEK (500$).

Här kommer en skärmdump som är censurerad då min kod exekveras och som gör en alert() med meddelandet XSS:

Facebook XSS

Jonas Lejon Facebook Whitehat