Security testing C and C++ applications

Security testing C and C++ applications

Översikt

Din applikation skriven i C och C++ är testad funktionellt, så du är klar, eller hur?
Men har du tänkt på att mata in felaktiga värden?
16 GB data?
En null?
En apostrof?
Negativa tal, eller specifikt -1 eller -2^31?
För det är vad skurkarna kommer att göra – och listan är långt ifrån komplett.
Säkerhetstestning kräver en anmärkningsvärd expertis inom programvarusäkerhet och en hälsosam nivå av paranoia, och det är vad den här kursen ger: ett starkt känslomässigt engagemang genom massor av praktiska laboratorier och berättelser från verkliga livet. Särskilt fokus läggs på att hitta alla diskuterade problem under testningen, och en översikt ges över metoder, tekniker och verktyg för säkerhetstestning. Så att du är förberedd på den mörka sidans krafter. Så att inget oväntat händer. Ingenting. Översikt

  • Grunderna i cybersäkerhet
  • Sårbarheter i minneshanteringen
  • Förstärkning av minneshanteringen
  • Säkerhetstestning
  • Vanliga säkerhetsbrister i programvara
  • Packa upp

Levereras på plats under tre dagar, 09.00-17.00Levereras online under fem dagar, måndag – fredag 09.00-13.00

  • Att bekanta sig med grundläggande begrepp inom cybersäkerhet
  • Förståelse för metodik och tillvägagångssätt för säkerhetstestning
  • Identifiera sårbarheter och deras konsekvenser
  • Lär dig bästa praxis för säkerhet i C och C++
  • Metoder och principer för validering av indata
  • Bekanta dig med tekniker och verktyg för säkerhetstestning

C/C++-utvecklare och -testare

Allmän C/C++-utveckling, testning och kvalitetssäkring

DAG 1

Grunderna i cybersäkerhet

Sårbarheter i minneshanteringen

  • Grunderna i assembly och anropskonventioner
    – x64 assembly essentials
    – Register och adressering
    – De vanligaste instruktionerna
    – Anropskonventioner på x64
    – Anropskonventioner – vad handlar det om
    – Stapelramen
    – Staplade funktionsanrop
  • Buffer overflow
    – Minneshantering och säkerhet
    – Sårbarheter i verkligheten
    – Säkerhetsproblem med buffertar
    – Buffer overflow on the stack
    – Buffer overflow on the stack – stack smashing
    – Exploitation – Hijacking the control flow
    – Lab – Buffer overflow 101, återanvändning av kod
    – Exploatering – godtycklig exekvering av kod
    – Injicering av skalkod
    – Lab – Kodinjicering, exploatering med skalkod- Buffer overflow på heapen
    – Osäker avlänkning
    – Fallstudie – Heartbleed- Manipulering av pekare
    – Modifiering av hopptabeller
    – Överskrivning av funktionspekare
  • Bästa praxis och några typiska misstag
    – Osäkra funktioner
    – Hantering av osäkra funktioner
    – Lab – Fixa buffertöverflöd
    – Vad är problemet med asctime()?
    – Lab – Problemet med asctime()
    – Använda std::string i C++
    – Strängar som inte avslutas
    – readlink() och strängavslutning
    – Manipulera strängar i C-stil i C++
    – Avsiktlig strängavslutning
    – Lab – Förvirring kring strängavslutning
    – Misstag vid beräkning av stränglängd
    – Off-by-one-fel
    – Allokera ingenting*
    – Testa för typiska misstag

DAG 2
Förstärkning av minneshantering

  • Runtime-skydd
    – Runtime-instrumentering
    – Address Space Layout Randomization (ASLR)
    – ASLR på olika plattformar
    – Labb – Effekter av ASLR
    – Omgå ASLR – NOP-slädar
    – Omgå ASLR – minnesläckage – ickekörbara minnesområden
    – NX-biten
    – Write XOR Execute (W^X)
    – NX på olika plattformar
    – Labb – Effekter av NX
    – NX-omgåenden – Attacker mot återanvändning av kod
    – Return-to-libc / arc injection
    – Return Oriented Programming (ROP)
    – Skydd mot ROP

Säkerhetstestning

  • Säkerhetstestning kontra funktionstestning
  • Manuella och automatiserade metoder
  • Metodik för säkerhetstestning
    – Säkerhetstestning – mål och metoder
    – Översikt över processer för säkerhetstestning
    – Identifiering och värdering av tillgångar
    – Förberedelser
    – Identifiering av tillgångar
    – Identifiering av attackytan
    – Tilldelning av säkerhetskrav
    – Lab – Identifiering och värdering av tillgångar
    – Hotmodellering
    – SDL hotmodellering
    – Mappning av STRIDE till DFD
    – Exempel på DFD
    – Attackera träd
    – Exempel på angreppsträd
    – Lab – Skapa ett angreppsträd
    – Fall av missbruk
    – Exempel på fall av missbruk
    – Riskanalys
    – Laboration – Riskanalys
    – Rapportering, rekommendationer och granskning

Vanliga säkerhetsbrister i programvara

  • Säkerhetsfunktioner
    – Autentisering
    – Grunderna för autentisering
    – Multi-faktor autentisering
    – Svagheter i autentiseringen
    – Fallstudie – PayPal 2FA-bypass- Lösenordshantering
    – Inkommande lösenordshantering
    – Lagring av kontolösenord
    – Lösenord i transit
    – Lab – Räcker det med att bara hasha lösenord?

    Dictionary attacks and brute forcing
    – Salting
    – Adaptiva hashfunktioner för lagring av lösenord
    – Lösenordspolicy

    NIST authenticator requirements for memorized secrets
    – Case study – The Ashley Madison data breach
    – Attacken med ordbok
    – Den ultimata sprickan
    – Utnyttjande och lärdomar
    – Migrering av lösenordsdatabas
    – Testning av problem med lösenordshantering

DAG 3
Vanliga säkerhetsbrister i programvara

  • Validering av inmatning
    – Principer för validering av indata
    – Denylistor och allowlists
    – Vad som ska valideras – attackytan
    – Var ska man validera – försvar på djupet
    – När ska man validera – validering kontra transformationer
    – Validering med regex
    – Injektion
    – Injektionsprinciper
    – Injektionsattacker
    – Injektion av kod
    – Injektion av OS-kommandon
    – Lab – Kommandoinjektion
    – Bästa praxis för injektion av OS-kommandon
    – Undvik kommandoinjektion med rätt API:er
    – Lab – Bästa praxis för kommandoinjektion
    – Fallstudie – Shellshock
    – Laboration – Shellshock
    – Testning av kommandoinjektion – Processtyrning – Injektion av bibliotek
    – Kapning av bibliotek
    – Lab – Bibliotekskapning – Problem med hantering av heltal
    – Representera signerade tal
    – Visualisering av heltal
    – Heltal marknadsföring
    – Överflöd av heltal
    – Lab – Överflöd av heltal
    – Förväxling av signerad och osignerad
    – Fallstudie – Stockholmsbörsen
    – Lab – Förväxling av signerade och osignerade tecken
    – Trunkering av heltal
    – Laboration – Trunkering av heltal
    – Fallstudie – WannaCry
    – Bästa praxis
    – Upcasting
    – Förberedande testning
    – Testning efter konditionering
    – Bästa praxis i C
    – UBSan ändrar till aritmetik
    – Lab – Hantering av heltalsöverskridanden på verktygskedjenivå i C och C++
    – Bästa praxis i C++
    – Laboration – Bästa praxis för hantering av heltal i C++ – Testning av numeriska problem
    – Filer och strömmar
    – Traversering av sökväg
    – Lab – Traversering av sökväg
    – Exempel på traversering av sökväg
    – Bästa praxis för stigtraversering
    – Lab – Kanonisering av sökväg
    – Test för sökvägsgenomgång

Säkerhetstestning

  • Tekniker och verktyg för säkerhetstestning
    – Kodanalys
    – Statisk säkerhetstestning av applikationer (SAST)
    – Laboration – Användning av verktyg för statisk analys – Dynamisk analys
    – Säkerhetstestning vid körning
    Penetrationstestning
    – Stresstestning
    – Dynamiska analysverktyg
    – Dynamisk säkerhetstestning av applikationer (DAST)- Fuzzing
    – Fuzzing-tekniker
    – Fuzzing – Observation av processen

Packa upp

  • Principer för säker kodning
    – Principer för robust programmering av Matt Bishop
    – Principer för säker design av Saltzer och Schroeder
  • Och nu då?
    – Källor och vidare läsning om programvarusäkerhet
    – Resurser för C och C++
    – Resurser för säkerhetstestning

Kursöversikt

32 900 kr

3 dagar

Distans

Grund

Engelska

Startgaranti gäller om kursen har datum, om inget annat framgår.

Hittar du inget (passande) datum? Skicka in en intresseanmälan så gör vi vad vi kan för att planera ett tillfälle som passar. 

För samtliga utbildningar gäller våra
Allmänna Villkor.

Fö­re­tags­an­pas­sad kurs

Kursen kan anpassas från flera perspektiv:
  • Innehåll och fokusområde
  • Omfattning
  • Upplägg

I samspel med kursledaren ser vi till att kursen uppfyller era önskemåll

Skicka intresseanmälan för utbildningen