Etikettarkiv: läsvärt

Bra RFC om identifiering

Kommunicerande system använder och utbyter ständigt olika typer av identifieringsinformation. Exempel på identifieringsinformation är värdnamn, IP-adresser, e-postadresser och resurspekare (Eng: Uniform Resource Identifier – URI).

Men om kommunicerande parter tolkar identifieringsinformationen på olika sätt och hanterar informationen på olika sätt kan problem uppstå. Typiskt kan en legitim användare av en resurs nekas tillgång till resursen. Eller omvänt att en användare (som inte behöver vara en människa) får tillgång till resurser denne inte skall ha tillgång till.

IETF har publicerat en informations-RFC som på ett mycket bra sätt går igenom vilka problem som kan uppkomma vid användning av olika typer av identifieringsinformation. Om du arbetar med att bygga system som på något sätt använder identifieringsinformation är RFC 6943 – Issues in Identifier Comparison for Security Purposes väl värd att läsa igenom. Det är lätt att göra enkla misstag vilka ofta får säkerhetsmässiga konsekvenser. Eller som dokumentet så snyggt sammanfattar det hela:

Screen Shot 2013-06-19 at 09.47.04

Introduktion till Bitcoin

För den som vill veta mer om den kryptografiskt baserade, digitala valutan Bitcoin finns det en riktig bra introduktion att läsa.

Bitcoin: A Technical Introduction (pfd), skriven Chris Clark går på ca 40 sidor igenom vad Bitcoin är, hur man använder Bitcoins, den bakomliggande kryptografiska tekniken, digitala valutor inklusive några föregångare. Slutligen tittar den på hur Bitcoin är implementerad samt hur man gräver (mining) efter bitcoins.

Security Engineering nu som fri e-bok

Säkerhetsforskaren Ross Anderson har skrivit en av de absolut bästa böckerna om säkerhet – Security Engineering.

Security Engineering hos Amazon

Ross har gjort den tidigare versionen av boken fritt tillgänglig. Och nu har Ross även släppt den senaste versionen (från 2008) fritt tillgänglig på sin sida för boken.

Gissningsvis kommer en uppdaterad, tredje version av boken ut under året. Men den version som nu finns är trots sina fem år på nacken fortfarande en riktigt, riktigt bra bok som vi rekommenderar till alla som vill veta mer om säkerhet.

Hacking the Xbox nu som gratis e-bok

Andrew Bunnie Huang, som Secworks tidigare uppmärksammat för sitt projekt att utveckla en egen laptop, har släppt sin bok Hacking the Xbox i PDF-format fri för nedladdning.

Hacking the xbox, som kom 2003 är en fantastisk bok, som inte bara berättar om hur Bunnie som forskarstudent lyckades knäcka skyddet i Xbox. Boken är istället en mycket bra introduktion till metoder och verktyg för att analysera och plocka isär digitala system.

Hacking the xbox

Även om boken har några år på nacken är den fortfarande mycket läsvärd och relativt unik i sitt fokus på praktiskt arbete, inte bara teori.

Skälet till att Bunnie och bokens förlag släpper boken fritt beror på hur hackern Aaron Swartz behandlades. Bunnie skriver bland annat:

No Starch Press and I have decided to release this free ebook version of Hacking the Xbox in honor of Aaron Swartz. As you read this book, I hope that you’ll be reminded of how important freedom is to the hacking community and that you’ll be inclined to support the causes that Aaron believed in.

I agreed to release this book for free in part because Aaron’s treatment by MIT is not unfamiliar to me. In this book, you will find the story of when I was an MIT graduate student, extracting security keys from the original Microsoft Xbox. You’ll also read about the crushing disappointment of receiving a letter from MIT legal repudiating any association with my work, effectively leaving me on my own to face Microsoft.

The difference was that the faculty of my lab, the AI laboratory, were outraged by this treatment. They openly defied MIT legal and vowed to publish my work as an official “AI Lab Memo,” thereby granting me greater negotiating leverage with Microsoft. Microsoft, mindful of the potential backlash from the court of public opinion over suing a legitimate academic researcher, came to a civil understanding with me over the issue.

Här finns hela motivering till varför Bunnie och förlaget släpper boken.

Bli en BIOS-ninja och skydda din kod

För dig som verkligen vill grotta ner dig på lågnivå i en PC kan det vara trevligt att veta att Darmawan Salihun släppt sin bok BIOS Disassembly Ninjutsu Uncovered fritt tillgänglig på nätet.

Boken börjar med en introduktion till hur en PC är uppbyggd inklusive PCI-protokoll och chipset. Men sedan trillar boken snabbt ner i saker som hur BIOS är uppbyggt, hur man plockar isär och dekompilerar binärfiler. Boken använder verktyg som IDA Pro, men är egentligen rätt verktygs- och OS-neutral. En bra bok, väl värd att titta en stund i. Och kanske testa lite exempel.

IDA Pro
IDA Pro.

Om man nu vill veta hur man skyddar sin kod mot dekompliering, analys och isärplockning, och därmed även vill veta mer hur trojaner och annan elak kod på olika sätt fungerar för att skydda sig mot att bli hittade och rensade, finns en mycket bra artikel. Josh Jacksons An Anti-Reverse Engineering Guide är från 2008, men fortfarande högst relevant. Artikeln tar upp hur debugsystemet i x86 ser ut och används. Sedan visar artikeln på ett antal olika metoder för att detektera debuggningsförsök, försvåra för debuggning och till och med direkt ge sig på debugverktygen. Även om attacken på Ollydbg patchats för länge sedan.

Detekterad debugger.
Detekterad debugger.

För dig som vill börja doppa tårna i x86-assembler finns Randy Hydes bok Art of Assembly Language på nätet. Det finns versioner såväl för den som fokuserar på 32-bit Windows som för den som vill hacka Linux/UNIX. Och 16-bit DOS. På den webbplatsen finns även HLA-biblioteket.

Lästips inför helgen: Think Complexity

För dig som är nyfiken på programspråket Python finns en bra bok kallad Python for Software Design, mer känd under namnet How to Think Like a Computer Scientist.

Boken Python for Software Design.

Tillsammans med Mark Pilgrims Dive Into Python och Dive Into Python3 [1] är den boken nog den bästa Pythonboken på nätet. (Dive Into Python är boken som verkligen fick mig att fastna för Python. Jag läste den över en natt och blev otroligt inspirerad av att börja använda Python. Något jag inte ångrat.)

Författaren till Python for Software Design, har nu gjort en till bok tillgänglig på nätet – Think Complexity.

Think Complexity

Den nya boken handlar inte om Python i sig, utan om algoritmer och datastrukturer. Sökträd, databaser, grafer m.m. och det viktigaste – hur olika algoritmer skalar med storleken på problemet dom används för att lösa. Detta brukar kallas för beräkningsmässig komplexitet, eller bara komplexitet.

Jag har hunnit läsa delar av boken och tycker att den är väl värd att lösa. Samtidigt är det intressant att se hur datastrukturer och algoritmer som arbetar på strukturerna fortfarande är viktiga. Moderna språk som Ruby och Python inkluderar kraftfulla datastrukturer som hashtabeller, listor, databaser som fundamentala datatyper. Och det finns, hävdar jag (det är i alla fall min observation) en tendens att utvecklarna använder de verktyg som finns till buds istället för att fundera igenom vad applikationen/problemet kräver. I de flesta fall blir det dessutom tillräckligt bra och går fort (fortare) att få till en lösning med de inbyggda typerna.

Men genom att känna till andra strukturer – vilka problem dom är bra för att lösa och även hur man kan implementera strukturerna kan verktygslådan utökas. I fallet med Python kan det även vara bra att veta att många datastrukturer finns i Pythons extensiva standardbibliotek. Använder du Python och inte grävt runt i biblioteket har du gjort dig själv en otjänst, det finns otroligt mycket bra att lyfta in i din applikation med ett enkelt import-kommando.

Läs, lär och ha en trevlig helg!
(JoachimS)

Fotnot [1]: Mark Pilgrim har skrivit flera bra böcker i sin Dive Into-serie, bland annat om HTML5 – böcker Mark dessutom gjorde tillgängliga på nätet. I oktober förra året valde Mark plötsligt att ta bort sig själv och sina alster från nätet. Många undrade vad som hänt och ringde även polisen som lyckades hitta Mark välbehållen. Han hade helt enkelt bestämt sig för att han haft nog med Internet. Det finns ett antal speglingar av böckerna, vilket gör att dom ändå går att läsa. Och detta är i linje med de licensvillkor Mark hade satt på sina verk varför jag väljer att peka på dom.

John Carmack om statisk kodanalys

Programmeraren John Carmack, skaparen av Doom, Quake m.m. har skrivit en mycket läsvärd text om användning av statisk kodanalys för att hitta fel.

John Carmack

John Camrack hackandes Doom.

Att använda statisk kodanalys som del av utvecklingsmetodiken fångar semantiska fel som är svåra eller omöjliga att hitta med kodgranskning, enhetstester eller dynamisk kodanalys, exempelvis minnesövervakning och fuzzing. Vidare, vilket Carmack påpekar, går det inte att undvika att det introduceras fel, oavsett vilka kodregler som skall följas. Speciellt i en stor, levande kodbas kan förutsättningar ändras som gör att fungerande kod påverkas. John Carmack skriver:

A lot of the serious reported errors are due to modifications of code long after it was written.  An incredibly common error pattern is to have some perfectly good code that checks for NULL before doing an operation, but a later code modification changes it so that the pointer is used again without checking.  Examined in isolation, this is a comment on code path complexity, but when you look back at the history, it is clear that it was more a failure to communicate preconditions clearly to the programmer modifying the code.

John tar upp flera exempel på problem där statisk kodanalys hjälpt ID Software att hitta buggar. De två vanligaste buggarna ID Software hittat är hantering av NULL-pekare i C/C++ samt print-formatteringsfel.

Carmack har även testat flera olika verktyg (Coverity, MS/Analyze, PVS-Studio, PC-Lint) och det visar sig att det skiljer mycket vad gäller mängden och typen av buggar olika verktyg hittar. En aspekt på detta, vilket är ett vanligt problem med denna typ av verktyg är att dom ofta genererar stora mängder med varningar, vilket gör det svårt för konstruktören att hitta de viktiga felen och förstå vad som är problemet. Bra verktyg ska inte bara hitta många fel, utan även kunna gradera dom och hjälpa konstruktören till en bra lösning. Inte minst om kodanalys introduceras i en existerande kodbas kan mängden varningar lätt bli övermäktigt. Carmack påpekar att detta var ett problem första gången han försökte använda denna typ av verktyg, men att verktygen förbättrats.

Jag använder det analysverktyg som finns för kompilatorsystemet clang/llvm. Jag tycker att den fångar många buggar och illustrerar dessa på ett relativt bra sätt. Men graderingen av hur allvarlig en bugg är kan helt klart förbättras.

Bild på rapport från clangs analys.
Bild på rapport från clangs analys.

Carmacks slutsats är att statisk kodanalys är ett viktigt tillägg till utvecklingsmetodiken:

It is impossible to do a true control test in software development, but I feel the success that we have had with code analysis has been clear enough that I will say plainly it is irresponsible to not use it.

För den som vill titta närmare på statisk kodanalys har Wikipedia en bra lista med verktyg.

Uppdaterad ECRYPT II-rapport om algoritmer och nyckellängder

ECRYPT II har äntligen publicerat den uppdaterade versionen av sitt dokument ECRYPT II Yearly Report on Algorithms and Keysizes (pdf). (Dokumentet var färdigt i juni, men har publicerats först nu.)

Ecrypt II

Jag anser att detta dokument ger en bra vägledning om var vi står forskningsmässigt vad gäller olika algoritmer, styrkan hos nycklar för olika typer av algoritmer samt ger rekommendationer om minimum nyckellängder att använda. Det jag skulle vilja se är en sammanfattning som listar dom stora skillnaderna gentemot förra årets version. Vad har ändrats och varför. Symmetriska och asymmetriska algoritmer, blockmoder, nycklar, protokoll. Allt finns samlat i ett dokument vilket gör det lätt att få grepp om nuläget.

Om du arbetar med säkerhetsfunktioner på något sätt – kravställning, systemdesign, säkerhetspolicy, design och/eller implementation, tes/verifiering etc är detta ett dokument väl värt att läsa igenom.

Bra böcker om krypto

Jag får ibland frågan om jag har några tips på böcker att läsa för att lära sig mer om krypto och IT-säkerhet. För den som vill få en allmän introduktion, utan att kasta sig ner i specifika algoritmer och matematiken bakom är Simon Singhs The Code Book fortfarande riktigt, riktigt bra. The Code Book finns även översatt till svenska och heter Kodboken.

The Code Book av Simon Singh
The Code Book av Simon Singh

Om du istället verkligen få en grundläggande bas inom krypto finns istället Nigel Smarts Cryptography: An Introduction.

Cryptography: An Introduction av Nigel Smart
Cryptography: An Introduction av Nigel Smart

Nigels Smarts bok täcker in allt från grundläggande koncept, går igenom historiska krypton (ofta samma som Singhs bok, men mycket mer detaljerat) till moderna algoritmer och attackmetoder. Boken beskriver både symmetriska och asymmetriska metoder. Smarts bok har använts i kurser på Chalmers och ligger på en högskolenivå i svårighetsgrad. Jag tycker dock att boken är trevlig, pedagogisk och lättläst. (Kapitlet om Elliptic Curve-krypto borde dock ligga längre bak i boken. Det kommer inte längre först vilket det gjorde i tidigare versioner, men känns ändå malplacerat och borde komma i samband med andra asymmetriska metoder.)

En annan sak som är bra med Smarts bok är att den finns fritt (som i gratis) tillgängligt på nätet. På Nigels Smarts webbplats finns en sida med information om olika versioner av boken samt en möjlighet att ladda ner boken. Notera att boken är i Postscript-format så du behöver antagligen konvertera den till PDF, EPUB eller vad du nu vill ha. Vill du fördjupa dig inom krypto finns här något att gotta sig med i höstrusket.