Verfiering och validering av klient genom Proof-of-work och Challenge-response

Relevanta dokument
Instruktion för integration mot CAS

EIT060 Datasäkerhet - Projekt 2. Jacob Ferm, dt08jf0 Johan Paulsson, dt08jp8 Erik Söderqvist, dt08es8 Magnus Johansson, dt08mj9 26 februari 2011

Datasäkerhet. Petter Ericson

Lösenord och ditt Axxell IT-konto

Säkerhet. Säker kommunikation - Nivå. Secure . Alice wants to send secret message, m, to Bob.

Proof of Work. En studie av proof-of-work som skydd mot överbelastningsattacker. FREDRIK HENRIQUES och NIKLAS NORDMARK

Designmönster, introduktion. Vad är det? Varför skall man använda mönster?

Säkra Designmönster (Secure Design Patterns)

Ekonomiportalen Sa kommer du iga ng

Lösenordsregelverk för Karolinska Institutet

EIT060 Datasäkerhet - Projekt 2. Jacob Ferm, dt08jf0 Johan Paulsson, dt08jp8 Erik Söderqvist, dt08es8 Magnus Johansson, dt08mj9 26 februari 2011

Säkerhet. Säkerhet. Johan Leitet twitter.com/leitet facebook.com/leitet. Webbteknik II, 1DV449

Programutvecklingsprojekt Projektgrupp Elvin. Detailed Design Document

Klient/server. Översikt. Lektion 1: Webbtekniker från Microsoft. Webbteknik från Microsoft. Klient/server. Designmönster. Utrullning.

Olika slags datornätverk. Föreläsning 5 Internet ARPANET, Internet började med ARPANET

Modul 6 Webbsäkerhet

Distribuerade affärssystem

Installationsguide Junos Pulse för iphone/ipad

SSL/TLS-protokollet och

TDDI16: Datastrukturer och algoritmer

Telia Centrex IP Administratörswebb. Handbok

Towards Blocking---resistant Communication on the Internet

Arv. Fundamental objekt-orienterad teknik. arv i Java modifieraren protected Lägga till och modifiera metoder med hjälp av arv Klass hierarkier

Startanvisning för Bornets Internet

Webbtjänster med API er

Introduktion till protokoll för nätverkssäkerhet

Installera SoS2000. Kapitel 2 Installation Innehåll

Lösenordsportalen Hosted by UNIT4 For instructions in English, see further down in this document

Granskning av intern IT - säkerhet. Juni 2017

WWW. Exempel på klientsidan. Överföring av en html-fil. Snyggare variant. Verkligt format. Meddelandeformat för begäran HTTP

Filleveranser till VINN och KRITA

Decentraliserad administration av gästkonton vid Karlstads universitet

Instruktioner för Axxell's Trådlösa Nät

Nätverksprogrammering, EDA095

Säkerhet. Föreläsning 6 Säkerhet. Johan Leitet twitter.com/leitet facebook.com/leitet. Webbteknik II, 1DV449

Att använda ELSA. Vad behövs för att använda ELSA?. Felrapportering och support

Handledning hantera förfrågan och lämna offert i IBX Quote

Introduktion Schenker-BTL AB, Stab IT Beskrivning över informationsintegreringmed Schenker, metodbeskrivning version 1.

TELIA CENTREX IP ADMINISTRATÖRSWEBB HANDBOK

INNEHÅLL. Konfigurering av SQL Server. Egenskaper Kommunikationsprotokoll

Autentisering av klient genom Proof-of-work och Challenge-response SAMUEL WEJÉUS

Försättsblad till skriftlig tentamen vid Linköpings Universitet

3) Routern kontrollerar nu om destinationen återfinns i Routingtabellen av för att se om det finns en väg (route) till denna remote ost.

EAs krav vid ackreditering av flexibel omfattning

Autentisering och Code-Based Access Control

Logging Module into the PRIME Core

Logisk Access I MicroWeb

Telia Centrex IP Administratörswebb Handbok

Avancerade Webbteknologier 2. AD11g Göteborg 2012 Säkerhet

Grundläggande datavetenskap, 4p

Kryptering. Krypteringsmetoder

Installationsguide fo r CRM-certifikat

Datum Den första bilden i installationsprogrammet visar vilken version det är. Klicka på Nästa eller tryck Enter för att fortsätta.

Extern åtkomst Manual för leverantör

DIG IN TO Nätverkssäkerhet

Kontorsinstallation av SDCs insändningsprogram Sender för filer från skördare, skotare eller drivare

Wilhelm Käll. Rapport Trådlösa nätverk

Kihl & Andersson: , 4.5 Stallings: , , (7.3)

OWASP Topp De 10 allvarligaste riskerna i webbapplikationer OWASP East Sweden: Uppstartsmöte

Krypteringteknologier. Sidorna ( ) i boken

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 11 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Java Secure Sockets Extension JSSE. F5 Secure Sockets EDA095 Nätverksprogrammering! Roger Henriksson Datavetenskap Lunds universitet

Att använda kryptering. Nyckelhantering och protokoll som bygger på kryptering

Användarhandbok. Trio Visit Web. Trio Enterprise 4.1

Gränssnitt och identiteter. - strategiska frågor inom Ladok3

Programmering B med Visual C

Datasäkerhet. Informationsteknologi sommarkurs 5p, Agenda. Slideset 10. Hot mot datorsystem. Datorsäkerhet viktigare och viktigare.

Det här dokumentet är till för att ge en översikt över ASP.NET MVC samt hur WCF Services används från.net applikationer.

Blockkedjor. en introduktion för datavetare. Rikard Hjort, 24 maj 2019

Modul 8 Hantering av indata

Konfigurera Microsoft Outlook 2007-klient.

Installationsguide Junos Pulse för MAC OS X

Installationsanvisning Boss delad databas

Services + REST och OAuth

Karlstads universitet Institutionen för Informationsteknologi Datavetenskap

Säkra trådlösa nät - praktiska råd och erfarenheter

Vitec Connect. Teknisk beskrivning REVIDERAT SENAST: VITEC. VITEC Affärsområde Mäklare

PROJEKTRAPPORT EDA095 NÄTVERKSPROGRAMMERI

Proof-of-Work. En modern betraktelse. Namn: Aron Sharma & Damon Shahrivar. Examenrapport vid NADA Handledare: Mikael Goldmann Examinator: Mads Dam

Telia Connect för Windows

Övningen vill visa på vikten av valet av datastruktur, trots att de ofta erbjuder samma funktionalitet genom sina gränssnitt.

Konsten att få eduroam säkert. Anders Nilsson Hans Berggren

Datum: Version: Författare: Christina Danielsson Senast ändrad:

Översikt av kapitlet. Ge databasen ett lösenord. Förhindra ändringar av koden i databasen

God nätverksdesign och distribuerade brandväggar. Patrik Fältström

Användarguide: Pagero Web Portal Skapa och skicka fakturor

Opponenter: Erik Hansen Mats Almgren Respondent: Martin Landälv ioftpd-verktyg

Objektorienterad programmering

BRUKSANVISNING FÖR NÄTVERKSANVÄNDARE

Garantianspråk. Manual

Ladda upp filer fra n PLC till PC

Alla rättigheter till materialet reserverade Easec

Teoretisk och praktisk genomgång av IPv6 och dess säkerhetsaspekter

Laboration 2: Designmönster

Remote Access Services Security Architecture Notes

DNSSec. Garanterar ett säkert internet

Denna laboration skapades för elever vid Roslagens Högskola men kan användas av vem som helst. Namnen på servrarna måste i så fall ändras.

Denna genomgång behandlar följande: Trådlösa tekniker WLAN Utrustning Säkerhet Konfiguration

Fördjupande uppsats i datalogi

tisdag 8 november 11

Transkript:

Verfiering och validering av klient genom Proof-of-work och Challenge-response SAMUEL WEJÉUS wejeus@kth.se Examensrapport vid NADA Handledare: Mikael Goldmann Examinator: Mads Dam 2011-04-14

Referat Denna essä kommer att analysera grunderna i två tekniker vid namn Proof-of-work och Challenge-response samt presentera ett förslag till hur dessa kan kombineras till ett protokoll för att säkerställa både identitet och intention för en klient som önskar utnyttja någon serverresurs. Jag kommer visa hur detta nya protokoll kan motverka Brute-force attacker och därtill hur en klient kan identifieras utan att behöva skicka känslig information så som ett lösenord. En grundläggande realisering av protokollet kommer att presenteras, implementerad som en klient/servermodell. Som en konsekvens av arbetet med realiseringen, kommer ett förslag till ett effektivt designmönster för klient/server-protokoll att ges.

Abstract Verification and validation of client using Proof-of-work and Challenge-response This essay will analyze the basics of two techniques called Proof-of-work and Challenge-response and present a proposal for how these can be combined into a protocol to ensure both the identity and intention of a client who wishes to use any server resources. I will show how this new protocol can prevent Brute-force attacks and further more, how a client can be identified without having to send sensitive information such as a password. A basic realization of the protocol will be presented, implemented as a client/server model. As a consequence of the process of realization, a proposal for an efficient design pattern for client/serverprotocol to be presented.

Innehåll 1 Introduktion 1 1.1 Bakgrund............................. 1 1.2 Problemformulering........................ 2 2 Undersökning av använda koncept 4 2.1 Proof-of-Work........................... 4 2.1.1 Hashbaserade pussel................... 5 2.2 Challenge-response........................ 6 3 Resultat 8 3.1 Autentisering av klient...................... 8 3.2 Exempel på lyckad inloggningsprocedur............. 10 3.3 Möjliga svagheter......................... 12 3.4 Shared-command - ett utökat design mönster........ 12 4 Slutsats 15 Figurer 17 Tabeller 17 Litteratur 18

Kapitel 1 Introduktion Denna kandidatuppsatsen ingår i kursen DD143X - Examensarbete inom datalogi, grundnivå. Syftet med uppsatsen är att undersöka hur challenge-response kan kombineras med proof-of-work och därefter realiseras genom klient/server modellen samt visa på hur en implementation av detta kan se ut. I och med arbetet att implementera klient/server modellen har även ett förslag till reviderat designmönster, benämnt Shared-command, upptäckts och kommer presenteras i kapitel 3. Challenge-response är ett abstrakt protokoll som beskriver hur en klient kan styrka sin identitet genom att besvara en auktoritets utmaning. Denna utmaning kan bestå av en förfrågan efter uppgifter som endast en unik klient har vetskap om med syftet att fastställa dess identitet. Proof-of-work är ett liknande protokoll för verifiering av utmaning med den utmärkande skillnaden att inga antaganden tas huruvida en klient har någon kunskap om lösning för en efterfrågad utmaning i den inledande fasen av protokollet. Istället för att verifiera identitet är avsikten med proof-of-work att validera en klients uppriktighet genom att denne först måste utföra ett beräkningstungt arbete som en auktoritet sedan enkelt kan bekräfta. I resten av denna text kommer challenge-response och proof-of-work även att refereras till som CR respektive PoW. 1.1 Bakgrund Proof-of-work föreslogs redan på -90 talet av Dwork och Naor[6] som en lösning på problemet med oönskad e-post. Detta genom att låta en användare utföra en beräkningsmässigt tung operation för varje meddelande denna önskar sända. Konceptet har utforskat vidare och har fått viss användning för bekämpning av bland annat Denial-of-service attacker[7]. Mark Handley och 1

KAPITEL 1. INTRODUKTION Adam Greenhalg[8] har lagt fram förslag om hur en miljö fri från DoS attacker i framtiden kan komma att realiseras, men under tiden finns det fortfarande ett behov av skyddsmekanismer för att förhindra dessa. DoS-attacker har även blivit mer sofistikerade, angripare har nu upptäckt olika sätt att initiera DoS-attacker så högt som i lager 7 i OSI-modellen [9] vilket visar på att ett grundläggande DoS skydd, som från och med upprättandet av länken enbart skyddar sessionen, inte är tillräckligt och ytterligare motåtgärder måste implementeras även på applikationsnivå. PoW konceptet har även utökats till att vara mer än bara ett skydd mot DoS attacker, detta bland annat genom arbetet utfört av Aura et al[1] som visade hur en klient kan visa uppriktigheten i sin vilja att använda någon serverresurs genom PoW. Validering genom PoW kommer förklaras ytterligare i sektion 2.1. 1.2 Problemformulering I de situationer där det även är av intresse att säkerställa identiteten hos en klient krävs det ytterligare bevis för att klienten är vem denne utger sig för att vara. Alla former av autentisering kan generaliseras till att tillhöra en av tre följande kategorier[14], nämligen: Något en användare är (röstidentifiering, ögonscanning) Något en användare har (ID kort, smartcards) Något en användare vet (lösenord, PINs) En vanlig lösning som uppfyller punkt tre är att använda sig av challengeresponse. Ett protokoll av denna typ kan implementeras och utökas på flertalet sätt och det är denna kategori av autentisering jag ämnar undersöka. Ett problem med denna typ av autentisering är att en angripare kan ta reda på någon annan klients kunskap, i detta fall ett lösenord, genom att helt enkelt göra en uttömmande sökning, s.k. brute-force [2], av lösenordet dvs testa alla möjliga kombinationer tills den rätta har blivit funnen. En gemensam nämnare mellan tidigare diskuterade DoS och brute-force attacker ligger i hur svagheter kan utnyttjas. I båda fallen kan en angripare initiera en massiv mängd uppkopplingar, för just fallet brute-force attacker, innebär det att varje uppkoppling har som mål att gissa ett lösenord. Utifrån detta resonemang ges en antydan till hur ett skydd mot DoS attacker även kan mildra brute-force attacker. Det är även möjligt att motverka denna typ av attack genom att uppmuntra klienter att använda bättre och säkrare lösenord[3]. I denna rapport kommer ett 2

KAPITEL 1. INTRODUKTION antagandet göras nämligen att en klient redan använder ett säkert lösenord och en fråga jag ämnar försöka besvara är hur detta kan skyddas ytterligare. Jag vill här understryka att jag kommer göra skillnad på validering och verifiering. Att validera en klient innebär ett test av dess ändamål och verifiering en bekräftelse av dess identitet. Kopplingen mellan dessa begrepp och Proof-of-work respektive challenge-response är att jag kommer visa hur det första kan användas till att verifera, och det senare kan således användas till att validera en klient. Det huvudsakliga målet med denna uppsats är att kombinera de två koncepten, proof-of-work och challenge-response. Jag kommer även att undersöka hur denna kombination kan användas för att säkra en användares identitet, förhindra DoS attacker samt skydda en användares inloggningsuppgifter genom att motverka brute-force attacker. Nödvändigheten i att kombinera de två nämnda koncepten ligger i det faktum att vid enbart användning av proofof-work är det endast möjligt att styrka en klients intentioner, men omöjligt att fastställa någon form av identitet. Kravet på identitet uppfylls, som senare kommer förklaras, av CR. Dock så lider enbart användning av challengeresponse av risken att utsättas för riktade brute-force attacker. 3

Kapitel 2 Undersökning av använda koncept Jag kommer här förtydliga de grundläggande koncept som kommer användas samt undersöka de egenskaper dessa besitter. Avslutningsvis kommer jag undersöka hur CR och PoW kan modifieras för att i slutändan kunna sammanfogas utan att förlora viktiga säkerhetaspekter. För de två begreppen; proof-of-work och challenge-response kommer ursprungs varianten beskrivet i DOS-resistant Authentication with Client Puzzles[1] respektive Challengeresponse authentication[4] att förklaras då detta ger en trivial koppling till tidigare forskning. 2.1 Proof-of-Work Ett proof-of-work är, som tidigare nämnt, en pusselbaserad utmaning mellan server och klient där klienten ombeds bevisa sin uppriktighet. En beräkningstung operation, som först nämnt i introduktionen, kan vara ett anings svagt uttryck, vad som menas med detta är en operation som bör ta en viss tid för en klient att utföra. Ett pussel bör vara helt autonomt och det ska inte vara möjligt att beräkna lösningar i förhand, detta skulle då omintetgöra syftet med pusslet. Svårigheten på ett pussel bör kunna anpassas dynamiskt med intentionen att svårigheten för en klients pussel skall ökas då en attack mot denna klient identifierats. Med dynamisk syftas på tiden det tar att lösa detta pussel och bör kunna varieras från noll till oändlig. Användningen av denna kostnad tvingar klienten att betala för varje försök till anslutning. Ju fler anslutningar klienten försöker göra, desto mer måste denna betala, och som ett resultat minskar risken för att en angripare som försöker utnyttja systemet lyckas fullfölja en attack. Ett bra pussel bör uppfylla följande egenskaper [6]: Att skapa ett pussel och validera dess lösning är billigt för en server. 4

KAPITEL 2. UNDERSÖKNING AV ANVÄNDA KONCEPT Kostnaden för att lösa ett pussel ska enkelt, på ett dynamisk sätt, kunna ökas från noll till omöjligt. Det skall inte vara möjligt att förberäkna lösningar till pussel. Ett pussel bör kunna lösas oavsett hårdvara (dock kommer det ta längre tid vid användning av långsammare hårdvara). Det finns många typer av pussel som uppfyller kraven på bra pussel. Som exempel på bra pussel kan nämnas det svåra (men inte omöjliga) problemet att finna rötter till ett tal a modulu något primtal p, finna inverser till hashfunktioner eller ett Fiat-Shamir baserat schema (ett teoretiskt tyngre pussel som har likheter med båda tidigare nämnda pussel)[6]. Ett system där Proofof-work används är Hashcash som är ett e-postsystem för vilket en användare måste köpa frimärken (genom att offra ett antal av sina CPU cykler) för att kunna sända e-post. Hashcash har nått viss framgång och existerar som plugins till diverse e-postklienter och som spamfilter i olika bloggsystem. Då syftet är att kombinera proof-of-work med challenge-response kommer endast ett, det så kallade hash-pusslet, att används i undersökningen på grund av enkelheten i dess implementation. 2.1.1 Hashbaserade pussel I ett hash-pussel föreslås att en klient löser ett hash-pussel genom att finna en sträng som genererar ett hashvärde vars strängrepresentation inleds med m nollor[1]. Denna sträng erhålls enklast genom brute-force då det än så länge är det mest effektiva tillvägagångssättet att finna inverser till denna typ av funktioner. Valet av att finna ett hash med känt begynnelse värde är godtyckligt och anledningen till valet är att då motsatsen, finna inverser till hash, är i praktiken (dvs. inom rimligt tid) omöjligt för strängar längre än några få tecken. resterande hash {}}{ h(s, X) = } 00..00 {{} + Y m nollor Här är h en hash funktion, m Z, samt s är en sträng. Utmaningen ligger således i att finna strängen X. En auktoritet kan enkelt validera en lösning genom att enbart beräkna ett hashvärde utifrån en klients påstådda lösning och jämföra denna med den korrekta. Värt att notera, är att implementationen som kommer att presenteras är oberoende av vilket pussel som används så när som på mindre modifikationer. 5

KAPITEL 2. UNDERSÖKNING AV ANVÄNDA KONCEPT Nedanstående figur illustrerar tillvägagångssättet för verifikation med proofof-work genom användning av ett hashbaserat pussel. :Klient :Server Efterfrågar tjänst S (m,s) Genererar S Löser pussles genom att finna en sträng X sådan att hash(s,x) är en sträng med m inledande nollor. X S Verifierar lösningen genom att beräkna hash(s,x) Figur 2.1. Proof-of-work protokoll 2.2 Challenge-response Den enklaste formen av challenge-response är ett autenticeringsprotokoll där en klient valideras genom att en auktoritär komponent ställer en fråga ( challenge ) och en tjänande komponent måste ge ett korrekt svar ( response ). Den vanligaste förekomsten av protokollet är lösenordsautentisering, där utmaningen är en förfrågan om lösenord och ett korrekt svar är det rätta lösenordet. CR kan även användas för att säkerställa svar på en utmaning som inte innehåller hemlig information, tex CAPTCHA s, vilket är en variant av Turing testet [12]. Att utföra CR för att validera en klient kan med fördel genomföras genom användning av ett Zero-knowledge password proof [10] genom att en klient inleder en handskaknings procedur där denne utbyter användarnamn och påföljande lösenord i form av en hashsträng. På serversidan lagras samma lösenord, även här i hashad form, och en jämförelse av dessa kan således påvisa om en klient angett korrekt lösenord. En uppenbar svaghet är möjligheten till att 6

KAPITEL 2. UNDERSÖKNING AV ANVÄNDA KONCEPT bygga tabeller över vanliga lösenord och dess hashvärde med resultatet att en angripare effektivt kan göra en uppslagning på hashvärden och därmed få ut motsvarande lösenord sk. Dictionary Attacks även känt som Rainbow Tables [11]. Detta har lett till utvecklingen, och användningen, av SALT s som motverkar denna typ av attack genom tillägget av ett slumpgenererat värde till varje lösenordshash[13]. Ett sådant tillägg omintetgör den praktiska nyttan av förberäknade värden på grund av mängden tabeller som måste upprättas och storleken på dessa. Figur 2.2 visar en grafisk representation av CR protokollet. Figur 2.2. Challenge-response protokoll [4] 7

Kapitel 3 Resultat 3.1 Autentisering av klient Att verifiera och validera en klient består av två steg som beskrivet tidigare. Först måste en server validera att en klient utfört ett visst arbete för att visa sin uppriktighet, sedan verifiera dennes inloggningsuppgifter för att kunna säkerhetsställa identiteten. Jag kommer nu att ge en beskrivning på hur dessa två steg kan kombineras till ett. Protokollet består av två faser. I initieringsfasen begär en klient att få upprätta en ny uppkoppling. Servern svarar genom att skicka ut ett nytt, individuellt anpassat, pussel. Detta pussel består av två delar: en global tidsbunden del bestående av en sträng som används vid samtliga klienters uppkopplingsförsök, samt en lokal som är unik för varje klient. Genom användning av den globala delen kan en attack riktad mot servern (dvs. inte någon specifik klient) enkelt motverkas genom att höja säkerheten (svårigheten på pusslet) globalt. Den globala delen är även låst till ett visst tidsrum för att motverka att en klient skall kunna förberäkna eller återanvända tidigare pussel. Pusslet har även en del som är direkt knuten till en unik användare. Den användarknutna delen existerar för att ge möjligheten att på användarnivå styra svårighetsgrad och därmed motverka attacker (i form av brute-force) mot enskilda användare utan att påverka övriga klienter. Det pussel som skickas ut skiljer sig från tidigare föreslagna lösningar (2.1) på flertalet sätt. För att enklare förstå de två delarna av pusslet och motivationen bakom, vill jag först beskriva den lösning som servern förväntar sig att se. Klienten löser nu pusslet genom brute-force för att få fram den unika sträng som servern genererat. Vid lösning av pusslet inkluderar klienten även en hashad form av sitt eget lösenord och konstruerar lösningen utifrån dessa värden. Klien- 8

KAPITEL 3. RESULTAT tens lösenord används därmed som en del av lösningen till pusslet. Ett nytt uppkopplingsförsök utförs varefter en lösnings proposition sänds till servern. Servern kontrollerar föreslagen lösningen genom att göra en uppslagning och hämta ut användarens lösenord samt unik klientsträng och testar om det är en korrekt lösning i förhållande till tidigare lagrade värden. Om lösningen är korrekt måste det innebära att (1) klienten har utfört ett arbete i och med att korrekt unik sträng har använts, samt (2) korrekt lösenord måste ha blivit angivet. Klienten är därmed validerad samt verifierad och tillåts därefter tillgång till serverns resurser. Fördelar med denna lösning är att det går att motverka brute-force attacker på användarnivå genom att server kan höja säkerheten (svårigheten på individuellt pussel) vid upptäckt av felaktig lösning på pussel. Med andra ord används PoW som en dynamiskt motåtgärd för brute-forcing av lösenord vid inloggningsprocedurer: svårigheten ökar med antal felaktiga inloggningsförsök (baserat på klient id). En grafisk representation av protokollet är beskriven nedan. :Klient :Server Klien skapar h (lösenord,cid,h'(x)), finner X som genererar hash med k inledande nollor genom brute-force Hello : (användarnamn) pussel / utmaning: k, Cid Autentisera : användarnamn, h'(x) Cid = slump genererad sträng bestående av en global+lokal del, k = svårigheten på pusslet S validates C by calculating h'(user_pass, Cid) and compares to h Klient godkänd Vid misslyckad autentisering genereras nytt Cid, svårigheten ökar Figur 3.1. Challenge-response + Proof-of-work protokoll Genom givet protokollförslag sänds aldrig något lösenord över någon osäker kanal, enbart en lösning på ett pussel där en klients lösenord är ett krav för korrekt lösning. Detta ger fördelar såsom att en angripare aldrig kan ta reda på en klients personliga information (här: lösenord). Det är därmed omöjligt att utföra brute-force på känslig information i icke-uppkopplat läge. Ur detta 9

KAPITEL 3. RESULTAT perspektiv kan lösenordets betydelse i förslagen lösning ses som ett klientgenererat SALT. Alla test av lösenord en angripare försöker sig på måste gå via en server där angriparen tvingas lösa ett nytt pussel. Användning av pussel på detta sätt uppfyller kraven på bra pussel givet i sektion 2.1.1. Att skapa pussel och generera hashvärden kan anses vara billigt för en server. Genom användning av en klientanpassad säkerhetsnivå är det möjligt att dynamiskt variera svårighetsgraden på ett pussel. Med tillägget av den globala och tidbestämda delen motverkas möjligheten att beräkna lösningar i förväg. Sist men inte minst så kan ett hashpussel lösas oberoende av hårdvara då en hashfunktion i grund och botten är en aritmetisk operation. 3.2 Exempel på lyckad inloggningsprocedur För att enklare beskriva arbetsflödet i det exempel som följer inför jag några definitioner av värden som kommer att användas. INITIAL antas server och klient inneha kunskap om definitionerna enligt vad som framkommer i tabell 3.1 och 3.2. Övriga värden som genereras under protokollets livslängd är hypotetiska och specificeras allt eftersom. Klient definitioner Användarnamn Användares lösenord Hashvärde för lösenord john.doe@runlevel5.se supersercret 51993893eee17a904efdafc1835dbbc0015b095f Tabell 3.1. Information känd av klient. Server definitioner AnvändarID john.doe@runlevel5.se Hashvärde för lösenord 51993893eee17a904efdafc1835dbbc0015b095f Global pusselsträng (slumpgenererad dxj för visst tidskvan- ta) Klient specifik pusselsträng iw3k Aktuell säkerhetsnivå 3 Tabell 3.2. Information känd av server (för användare john.doe@runlevel5.se) Inledningsvis skickar klienten en signal till servern att påbörja inloggningsproceduren genom att skicka sitt eget användarnamn (john.doe@runlevel5.se). 10

KAPITEL 3. RESULTAT Servern svarar genom att hämta ut information om pussel för denna klient, dvs unik pusselsträng samt aktuell säkerhetsnivå för denna klient, iw3k resp. 3. Den specifika klient delen av pusslet kombineras med den globala delen, vilket för tillfället är dxj. Jag påminner om att den globala delen är tidsbunden och en ny global del genereras med ett visst tidsintervall. Servern skickar nu ett paket bestående av (3, iw3kdxj ) till klienten och avslutar därefter uppkopplingen. Klienten sammanfogar den mottagna strängdelen av pusslet med den hashade formen av sitt eget lösenord ( supersecret ) och inleder en brute-forcing procedur enligt sektion 2.1.1 för att finna ett tal X vars hashrepresentation, h, genererar h(s, h (X)) så att h består av m inledande nollor. I detta exempel är m = 3 (säkerhetsnivån för pusslet) och s består av klientslösenord+pussel. s = 51993893eee17a904ef daf c1835dbbc0015b095f iw3kdxj Klienten löser detta pussel med resultatet att h (X) = a94a8fe5ccb19b.., vilket därmed genererar h med 3 inledande nollor. Jag kommer att kalla hashvärdet h (X) för lösningen till ett pussel. En ny uppkoppling initieras av klienten med en signal till servern att den nu skall verifiera en lösning. Den information som klienten skickar tillbaka till servern består av användarnamn samt lösning. Servern konstruerar nu en egen version av lösningen för denna användare genom att generera en hashsträng utifrån bifogad lösningssträng, lösenordshash lagrat på server sidan samt lokalt och globalt pussel. Den server genererade versionen testas ifall den består av lika många inledande nollor som angivet i säkerhetsnivån för klienten. h(94a8f e5ccb19b.., h(supersecret), iw3kdxj) = 3 inledande nollor? Då testet ger ett godkänt utfall, innebär det att klienten har använt samma lösenord som finns lagrat hos servern vid lösning av pusslet och som tidigare påpekat, någon form av arbete har blivit utfört. Anledningen till varför klienten söker efter en hashsträng som generar en lösning är för att påtvinga en större sökrymd. Om istället enbart den numeriska lösningen i exemplet skulle skickas för verifikation skulle det kraftigt begränsa antal möjliga lösningar vilket då skulle förenkla för en angripare som försöker utföra en brute-force attack. 11

KAPITEL 3. RESULTAT 3.3 Möjliga svagheter Om en genuin användare försöker upprätta en ny förbindelse kan det hända att denna får ett potentiellt svårt pussel till följd av ett tidigare försökt till attack, men vid korrekt lösning så nollställs svårigheten återigen. Resultatet är att det blir ointressant för en angripare att fortsätta attacken då knäckandet av flertalet pussel tar lång tid (pga svårt pussel) och genuin användare inte påverkas nämnvärt (effekten av en angripares inloggningsförsök) då denne enbart behöver lösa ett svårt pussel en enda gång. En ständigt överhängande risk vid nätverkskommunikation över icke säkra kanaler är man-in-the-middle attacker. Det existerar en svaghet i föreslaget protokoll där en angripare eventuellt kan snappa upp användarnamn och lösning till ett pussel och använda detta för att auktorisera sig för en server. Detta kräver att angriparen både stjäl informationen och hindrar klientens förfrågan att nå server, alternativt, i sin tur skickar vidare informationen så den når servern innan den ursprungliga klientens information når fram. Servern kan då inte veta vem som skickade vad och tillåter därmed tillgång till den vars information når fram först. Ytterligare ett krav för genomförbarhet är att en angripare inte enbart stjäl en klients information, utan hela sessionen, vilket ställer andra krav på säkerhet som är utanför ramen för denna text men som exempel kan nämnas att en angripare då behöver genomföra en lyckad spoofing attack. Genom de ytterligare externa krav som ställs för denna typ av attack dras slutsatsen att genom användning av Proof-of-work så minskar sannolikheten för lyckad attack genom att ställa ytterligare krav för genomförbarhet. I fallet att återanvända en korrekt lösning av pussel (inom tidsramen för pusslet) kan det omintetgöras genom att markera lösning som icke längre giltig. Detta bör ske på specifik användare och inte på pussel då flera användare kan, med stor sannolikhet, ha samma lösenord. 3.4 Shared-command - ett utökat design mönster Istället för att skriva ett protokoll som hanterar vissa förutbestämda kommandon har jag velat ha ett sätt att enkelt kunna utöka med fler kommandon utan att behöva förändra underliggande arkitektur av systemet. En populär lösning på detta problem är designmönstret Command [5], vilket är ett designmönster som möjliggör för en klient att utföra godtyckligt kommando utan att ha någon tidigare kunskap om tillvägagångssätt. Fördelar med en sådan ansats är att det underlättar vid skapandet av generiska komponenter som kan utföra eller delegera funktioner, oberoende av varand- 12

KAPITEL 3. RESULTAT ra. Kommandon kan även utföras utan att en kallande klass behöver känna till ägaren, funktionalitet eller nödvändiga parametrar. Genom användning av Command mönster går det att säkerhetsställa att enbart godkända kommandon utförs hos varje part för sig. Problem uppstår när målet var att generalisera konceptet för Command att gälla för kommunikation mellan klient och server, då Command enbart bryr sig om att lösa problemet med hur kommandon utförs, men inte i vilken ordning. Speciellt ordningen på kommandon är viktig vid nätverkskommunikation då det är en förutsättning att kunna förutse vilket tillstånd som är aktuellt för inblandande parter. Önskan var att kompilatorn skulle hjälpa till genom att förbjuda två olika typer av kommandon att utföras vid kommunikation mellan klient och server. En proposition till ett nytt, eller rättare sagt utökat, designmönster som kan användas för implementation av klient/server-system kommer nu presenteras. Föreslaget designmönster har stora likheter med Command designmönstret, men skiljer sig på det sättet att det använder sig av en delad vy för kommandon, därav det logiska namnet: Shared-command. Designmål har varit att den som implementerar ett nytt kommando som ska utföras över nätverket ska tvingas att implementera både server och klient sidan av protokollet, samt att en klientklass som vill använda detta nya kommando inte ska behöva göra några grundläggande strukturella förändringar av underliggande arkitektur. Övriga designmål är vetskapen att ett protokollkommando även måste kunna hantera alla möjliga framtida önskemål, dvs vi kan inte bestämma på förhand vilka, och hur många, tillstånd varje kommando kan ha. Detta är upp till kommandot själv. En översikt beskrivet i UML av Shared-command kan ses i figure 3.2. Styrkan och anledningen till utvecklandet av Shared-command är att det drastiskt underlättar för en programmerare vid utveckling av protokoll speciellt förenklas hanteringen av tillstånd. En förenkling av tillstånd kan inses genom följande exempel: vid utveckling av ett nytt kommando tvingas utvecklaren att utöka det så kallade Protocol interfacet för att applikationen ska kunna utföra kommandot. Att använda sig av Protocol innebär att utvecklaren måste implementera både klientens och serverns funktionalitet genom de två abstrakta metoderna: executeclientsid(), executeserver Den fördel en programmerare får vid avlusning av applikationen är att om ett fel uppstår i ett visst tillstånd för något kommando så garanterar designmönstret att inget annat kommando kan ha påverkat resultatet. Med andra ord möjliggör Shared-command atomisering av kommandon. 13

KAPITEL 3. RESULTAT Creates a command instance Client Invoker Asks to execute some command << transmit >> << instantiate >> Network ConcreteCommand - header + getheader() : header + executeserverside() + executeclientside() Creates a command instance << transmit >> << instantiate >> Server <<interface>> Protocol + getheader() <<interface>> ServerProtocol + executeserverside() <<interface>> ClientProtocol + executeclientside() Figur 3.2. Shared-command designmönster Fördelar: Ger bättre översikt då varje kommando enbart behöver hålla reda på och instansiera de delar som det kommer att behöva. Kommandon kan med fördel kombineras rekursivt med varandra (sk: chaining). Design filosofie: små delar som gör sin sak bra kombineras ihop till något större. Både server och klientdel av protokoll skapas samtidigt, ger bättre intryck av att vara en enda entitet, samt tvingar utvecklare att hela tiden tänka på både server och klientsidans del i konversationen. Nackdelar: Då både server och klientdel av kommandon utvecklas tillsammans som en entitet, innebär det även att båda delarna kommer att distribueras till både server och klientinstans av ett program. Att låta en klient ha tillgång till server kod kan utgöra en potentiell säkerhetsrisk ifall en utvecklare inte vill tillåta tredje part att ha vetskap om servertillstånd för kommandon. Att sätta sig in i hur servernkommandon fungerar internt är då möjligt genom användning av reverse engineering. 14

Kapitel 4 Slutsats Genom stora likheter är det enkelt att kombinera Proof-of-work med Challengeresponse. Den utmaning som en server ställer i Challenge-responseprotokollet kan ses som en specialanpassning av Proof-of-work. I fallet med att implementera denna lösning som en klient/server-applikation ligger svårigheten istället i att skapa ett stabilt ramverk för kommunikation mellan klient och server vid realisering i godtyckligt objekt orienterat språk. Ett förslag för att underlätta vid implementationen av klient/server protokollet är givet i sektion 3.4. Designidéen är att en server inte ska utföra något arbete, eller rättare sagt så lite som möjligt, innan en klient är validerad. Det leder till att en server bör stänga en uppkoppling så fort arbete blivit utfört och ej vänta på bekräftelse om ej nödvändigt, detta för att minska de tillfällen en server kan fastna i ett väntande stadium då ett sådant tillstånd potentiellt kan utnyttjas vid överbelastningsattacker. När servern svarar på en förfrågan kan det ske på två legitima sätt. Antingen är det en ny klient som vill skapa en ny anslutning eller så är det en klient som har utfört ett arbete och vill få bekräftelse på detta och sedemera få tillgång till serverns resurser. Servern kan anta att detta är de enda former av uppkoppling som kommer att ske, då det är de enda vi är intresserade av, - och därmed kan övriga typer (potentiella attacker) ignoreras. Tilläggas kan att en server inte behöver hålla reda tillstånd för klienter mellan uppkopplingar, det vill säga, mellan det att ett pussel lämnas ut till dess att en lösning mottas. Den information som används för att auktorisera en klient, nämligen lokal och global pusselsträng, är oberoende av vilket tillstånd en klient förtillfället befinner sig i. Exempelvis kan det ske att en klient som inte orsakar en förändring av sin egen säkerhetsnivå, genom att möjligtvis ange fel lösenord, kan mottaga ett pussel där lokaldelen är samma som vid ett tidigare tillfälle. Dock så påverkas inte pusslet av denna upprepning på grund av av utökningen med en global del. 15

KAPITEL 4. SLUTSATS I mitt förslag till autenticeringsprotokoll görs antagandet att säkerhetsnivån ska ökas för varje misslyckat inloggningsförsök. Anledningen till denna ökning är att jag såg ett behov av att på ett enkelt sätt kunna avgöra om ett användarkonto potentiellt var under attack. Det mest troliga beteendet för en användare som glömt bort sitt lösenord är att göra ett par inloggningsförsök, om dessa inte lyckas, gå vidare och försöka använda någon form av återställningsmekanism. En slutsats som då kan dras är att om säkerhetsnivån för ett konto har ökat till en relativt hög nivå har kontot troligtvis varit utsatt för en attack. Funktionalitet för att upptäcka attacker kunde även ha skapats genom användning av en simple räknare som inkrementeras. Men genom att istället använda en dynamiskt ökande säkerhetsnivå innebär det att ju fler attacker en angripare försöker utföra desto svårare blir de att slutföra. 16

Figurer 2.1 Proof-of-work protokoll........................ 6 2.2 Challenge-response protokoll [4]................... 7 3.1 Challenge-response + Proof-of-work protokoll........... 9 3.2 Shared-command designmönster................... 14 Tabeller 3.1 Information känd av klient...................... 10 3.2 Information känd av server (för användare john.doe@runlevel5.se) 10 17

Litteratur [1] Tuomas Aura, Pekka Nikander och Jussipekka Leiwo. DOS-resistant Authentication with Client Puzzles. [2] Brute force attacks. Jan. 2011. url: http : / / www. owasp. org / index. php / Blocking _ Brute _ Force _ Attacks # Finding _ Other _ Countermeasures. [3] Microsoft Safety & Security Center. Online Privacy & Safety. Mars 2011. url: http://www.microsoft.com/security/online-privacy/ passwords-create.aspx. [4] Challenge-response Authentication. Mars 2011. url: http : / / en. wikipedia.org/wiki/challenge-response_authentication. [5] Command pattern. Jan. 2011. url: http://en.wikipedia.org/wiki/ Command_pattern. [6] Cynthia Dwork och Moni Naour. Pricing via Processing or Combatting Junk Mail. I: Crypto 92 (1992). [7] Virgil D. Gligor. Guaranteeing Access in Spite of Distributed Service- Flooding Attacks. [8] Mark Handley och Adam Greenhalg. Steps Towards a DoS-resistant Internet Architecture. [9] Sean Michael Kerner. Denial of Service Attacks Get more Sophisticated. Jan. 2011. url: http://www.esecurityplanet.com/trends/ article.php/3921156/denial- of- Service- Attacks- Get- more- Sophisticated.htm. [10] Steven M.Ballvin och Michael Merritt. Augmented Encrypted Key Exchange: a Password-Based Protocol Secure Against Dictionary Attacks and Password File Compromise. [11] Rainbow table. Mars 2011. url: http://en.wikipedia.org/wiki/ Rainbow_table. 18

LITTERATUR [12] Carnegie Mellon University. CAPTCHA: Telling Humans and Computers Apart Automatically. Mars 2011. url: http://www.captcha.net/. [13] Christoph Wille. Storing Passwords - done right! Juni 2004. url: http: //www.aspheute.com/english/20040105.asp. [14] Thomas Wu. The Secure Remote Password Protocol*. I: Internet Society Symposium on Network and Distributed System Security (1998). 19