Desktop application security in C#

Desktop application security in C#

Översikt

Din applikation skriven i C# fungerar som tänkt, 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 -232? För det är vad skurkarna kommer att göra – och listan är långt ifrån komplett. Att hantera säkerhet kräver 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 labb och berättelser från verkliga livet, allt för att avsevärt förbättra kodhygienen. Misstag, konsekvenser och bästa praxis är vårt blod, svett och tårar. Allt detta sätts i samband med C#, och utökas med kärnprogrammeringsfrågor och diskuterar säkerhetsfällor i C#-språket och .NET-ramverket. Så att du är förberedd på den mörka sidans krafter, så att inget oväntat händer. Ingenting alls. Levereras på plats under tre dagar, kl. 9-17.00Levereras online under fem dagar, måndag – fredag kl. 9-13.00

  • Förståelse för säkerhetsfrågor för webbapplikationer
  • Detaljerad analys av OWASP Top Ten-elementen
  • Att gå bortom de lågt hängande frukterna
  • Förklara tillvägagångssätt för att hantera säkerhetsutmaningar i kod
  • Sårbarheter i identitetssäkerheten och deras konsekvenser
  • Lär dig de bästa metoderna för att undvika dessa misstag

C#-utvecklare som arbetar med desktopapplikationer.

Allmän C#-utveckling.

Dag 1

Grunderna i säkerhet

  • Vad är säkerhet?
  • Hot och risker
  • Olika typer av hot mot datorsystem
  • Konsekvenser av osäker programvara
  • Begränsningar och marknaden
  • Buggar, sårbarheter och exploateringar

Kategorisering av buggar

  • Sju fördärvliga riken
  • Uppräkning av gemensamma svagheter (CWE)
  • CWE/SANS Topp 25 farligaste programvarufelen
  • Sårbarheter i miljön och beroendena

Validering av inmatning

Principer för validering av indata

  • Svarta och vita listor
  • Validering med regex
  • Vad som ska valideras – attackytan
  • När ska man validera – validering kontra transformationer
  • Var ska man validera – försvar på djupet

Injektion

  • Injektionsprinciper
  • Injektionsattacker
  • CRLF-injektion
    * Loggförfalskning
    – Lab – Loggförfalskning
    * Loggförfalskning – bästa praxis
  • Kodinjektion
    * Kommandoinjektion
    – Laboration – Kommandoinjektion
    – Bästa metoder för kommandoinjektion
    – Laboration – Bästa metoder för kommandoinjektion
    – Fallstudie – Kommandoinjektion
    * Skriptinjektion
  • Bästa praxis för injicering
    * Validering av indata
    * Rensning av utdata
    – Kodning och escaping av utdata
    – Kodningsutmaningar

Hantering av heltal

  • Representera signerade tal
  • Visualisering av heltal
  • Problem med heltal
    * Överflöd av heltal
    – Lab – Överflöd av heltal
  • Tecknad / osignerad förvirring
    – Lab – Tecknad / osignerad förvirring
  • Trunkering av heltal
  • Bästa praxis
    * Upcasting
    * Förvillkorstestning
    * Eftervillkorstestning
    * Använda bibliotek för stora heltal
    * Integerhantering i C#
    – Lab – Kontrollerad aritmetik
  • Andra numeriska problem
    * Division med noll

Datastrukturer

  • Datastruktur sentineller
  • Behållare
    * Behållarfel
    * Associativa behållare
    * Iteratorer

Filer och strömmar

  • Traversering av sökväg
  • Exempel på traversering av sökväg
  • Ytterligare utmaningar i Windows
  • Bästa praxis för stigtraversering
    * Lab – Stigtraversering
  • Virtuella resurser

Osäker reflektion

  • Spegling utan validering
    * Lab – Osäker spegelbild

Osäker inbyggd kod

  • Beroende av inbyggd kod
    * Lab – Osäker inbyggd kod

Några andra problem med validering av indata

– Använda sårbara komponenter
– Utvärdera miljön
– Härdning
– Importera funktionalitet från otillförlitliga källor

Hantering av sårbarheter

  • Patchhantering
  • Sårbarhetsdatabaser och skanningsverktyg
  • Sårbarhetsgradering – CVSS
    * Labb – Hitta sårbarheter i använda komponenter
  • Byggprocessen och CI/CD
  • Beroendekontroll i Cake

Dag 2


Säkerhetsfunktioner

Autentisering

  • Grunderna för autentisering
  • Svagheter i autentiseringen
  • Fallstudie – PayPal tvåfaktorsautentisering bypass
  • Bästa praxis för användargränssnitt
  • Lösenordshantering
    * Inkommande lösenordshantering
    – Lagring av kontolösenord
    – Lösenord i klartext på Facebook
    – Lab – Varför räcker det inte med att bara hasha lösenord?
    – Ordboksattacker och brute forcing
    – Saltning
    – Adaptiva hashfunktioner för lagring av lösenord
    – Lösenord i transit
    – Lösenordspolicy
    – Svaga och starka lösenord
    – Använda lösenfraser
    – Lab – Tillämpa en lösenordspolicy
    – Dataintrånget mot Ashley Madison
    – Attacken med ordbok
    – Den ultimata attacken
    – Utnyttjande av resultat och lärdomar* Hantering av utgående lösenord
    – Hårt kodade lösenord
    – Lab – Hårdkodat lösenord
    – Lösenord i konfigurationsfilen
    – Skydda känslig information i minnet
    – Utmaningar när det gäller att skydda minnet
    – Lagra känslig data i minnet
    – Lab – Lagra känslig data i minnet med SecureString

Auktorisation

  • Grunderna i åtkomstkontroll
  • Avsaknad av eller felaktig auktorisation
  • Åtkomstkontroll i databaser
    * Laboration – Åtkomstkontroll i databaser
  • Privilegier och behörigheter
    * Manipulation av behörigheter
    * Felaktig användning av API:er med privilegier
    * Bästa praxis för behörigheter
    – Principen om minsta möjliga privilegier
    – Principen om åtskillnad av privilegier
    – Tilldelning av behörigheter
    – Upphävande av privilegier
    – Hantering av otillräckliga privilegier

Säkerhet för .NET-plattformen

  • Code Access Security
    * Bevis
    * Behörigheter
    * Stack Walk
    – Lab – Code Access Security
  • Transparensmodellen
    * Bästa praxis
    – Laboration – Experiment med transparensmodellen
  • Rollbaserad säkerhet
    * Huvudman och identitet
    * Rollbaserade behörigheter
    * Personifiering
    – Labb – Rollbaserad säkerhet
  • Skydda .NET-kod och -program
    * Kodsignering

Informationsexponering

  • Exponering genom extrahering av data och aggregering
  • Läckage av systeminformation
    * Läckage av systeminformation
    * Förlitar sig på tillgänglighetsmodifierare
    – Lab – Olämpligt skydd genom tillgänglighetsmodifierare
  • Bästa praxis för exponering av information

UI-säkerhet

  • Säkerhetsprinciper för användargränssnitt
  • Känslig information i användargränssnittet
    * Labb – Extrahera lösenord från användargränssnittet
  • Feltolkning av funktioner eller åtgärder i användargränssnittet
  • Otillräcklig feedback från användargränssnittet
  • Förlita sig på dolda eller inaktiverade UI-element
    * Lab – Dolda eller inaktiverade UI-element
  • Otillräcklig anti-automatisering

Dag 3

Vanliga säkerhetsbrister i programvara

Tid och tillstånd

  • Bästa praxis för trådhantering
    * Bästa praxis för trådhantering i C#
  • Racevillkor
    * Racevillkor i objektdatamedlemmar
    – Lab – Singleton-medlemsfält
    * Racevillkor för filer
    – Time-of-check-to-time-of-usage (TOCTTOU)
    – Lab – TOCTTOU
    – Osäker temporär fil
    * Racevillkor för databaser
    * Undvika racevillkor i C#
  • Ömsesidig uteslutning och låsning
    * Deadlocks
    – Laboration – Låsning
  • Synkronisering och trådsäkerhet
    * Synkronisering och trådsäkerhet i C#

Fel

  • Principer för hantering av fel och undantag
  • Felhantering
    * Returnera en vilseledande statuskod
    * Informationsexponering genom felrapportering
  • Undantagshantering
    * I catch-blocket.
    Och vad händer nu?
    * Tomt catch-block
    * Bästa praxis för catch-block
    * Alltför breda throws
    * Fånga undantag med NULL-pekare
    * Undantagshantering i C#
    – Lab – Undantagshantering – röra

Kodkvalitet

  • Data
    * Arrayer och ToString()
    * Initialisering och rensning
    – Oinitialiserad variabel
    – Klassinitialiseringscykler
    – Laboration – Initialiseringscykler
    * Outnyttjad resurs
  • Fallgropar i objektorienterad programmering
    * Tillgänglighetsmodifierare
    * Arv och åsidosättande
    * Implementering av Equals()
    * Mutabilitet
    – Läsbara samlingar
    – Labb – Mutabelt objekt
    * Kloning
    – Kloning av känsliga klasser – objektkapning
    – Objektkapning – bästa praxis
    * Serialisering

Nekande av tjänst

  • Nekande av tjänst
  • Utmattning av resurser
  • Kassaflöde
  • Översvämning
  • Hållbart kundengagemang
  • Denial of service-problem i C#
  • Oändlig loop
    * Lab – Resursutarmande
  • Amplifiering
    * Nätverksamplifiering
    * Amplifiering i databaser
    * Andra exempel på amplifiering
  • Problem med algoritmkomplexitet
    * Regelbundna uttryck förnekande av tjänst (ReDoS)
    – Labb – ReDos
    * Hashtable-kollision
    – Hur fungerar hashtables?
    – Hashkollision i händelse av hashtables
    – Hashtable-kollision i C#

Packa upp

Principer för säker kodning

  • Principer för robust programmering av Matt Bishop
  • Saltzer och Schröders principer för säker design
  • Några fler principer

Och vad händer nu?

  • Ytterligare källor och läsning
  • .NET- och C#-resurser
  • Ytterligare labb och utmaningar att göra

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