Uw applicatie geschreven in C# werkt zoals bedoeld, dus u bent klaar, toch? Maar heb je overwogen om onjuiste waarden in te voeren? 16Gbs aan gegevens? Een null? Een apostrof? Negatieve getallen, of specifiek -2^32? Want dat is wat de slechteriken zullen doen - en de lijst is nog lang niet compleet.

Het omgaan met beveiliging vereist een gezonde mate van paranoia, en dat is wat deze cursus biedt: een sterke emotionele betrokkenheid door veel hand-on labs en verhalen uit het echte leven, allemaal om de codehygiëne aanzienlijk te verbeteren. Fouten, gevolgen en best practices zijn ons bloed, zweet en tranen.

Dit alles wordt in de context van C# geplaatst en uitgebreid met kernproblemen bij het programmeren, waarbij valkuilen in de beveiliging van de C#-taal en het .NET-framework worden besproken.

Zodat je voorbereid bent op de krachten van de duistere kant.

Zodat er niets onverwachts gebeurt.

Niets.

PRAKTISCHE INFORMATIE

  • Als training op locatie niet haalbaar is, kunnen we een live, interactieve online (virtuele) of hybride training bespreken. Het standaardprogramma met een inhoud van 3 dagen kan ook in 5 halve dagen worden gegeven (van maandag tot vrijdag).
  • Benieuwd hoe je het rendement op investering (ROI) van secure coding-trainingen kunt kwantificeren? Bekijk dan dit artikel.

Doelstelling

  • Benaderingen uitleggen voor het omgaan met beveiligingsproblemen in code;
  • Kwetsbaarheden in de beveiliging en de gevolgen ervan identificeren;
  • Leer de beste manieren om deze fouten te vermijden.

Doelgroep

Deze cursus is bedoeld voor C#-ontwikkelaars die aan desktopapplicaties werken.
Voorbereiding: Algemene C#-ontwikkeling.

Levering In-company (op locatie of online)
Duur 3 opeenvolgende dagen
Groepsgrootte Maximaal 12 deelnemers
Aanpassing De training kan worden aangepast aan uw organisatie, context en leerdoelen
Taal Engels
Investering Op aanvraag
Brochure downloaden

Programma

Day 1

Basisprincipes van beveiliging

Wat is veiligheid?

Bedreiging en risico

Soorten bedreigingen voor computersystemen

Gevolgen van onveilige software

Beperkingen en de markt

Bugs, kwetsbaarheden en exploits

Categorisering van bugs

  • Zeven verderfelijke koninkrijken
  • Algemene opsomming van zwakke punten (CWE)
  • CWE/SANS Top 25 van gevaarlijkste softwarefouten
  • Kwetsbaarheden in de omgeving en de afhankelijkheden

Invoervalidatie

Principes voor ingangsvalidatie

  • Zwarte lijsten en witte lijsten
  • Validatie met regex
  • Wat valideren - het aanvalsoppervlak
  • Wanneer valideren - validatie vs transformaties
  • Waar valideren - verdediging in de diepte

Injectie

  • Injectieprincipes
  • Injectieaanvallen
  • CRLF-injectie
  • Vervalsen van houtblokken
  • Lab - Houthakken
  • Logboekvervalsing - beste praktijken
  • Code injectie
  • Opdrachtinjectie
  • Lab - Opdrachtinjectie
  • Best practices voor opdrachtinjectie
  • Lab - Opdrachtinjectie best practices
  • Casestudie - Opdrachtinjectie
  • Scriptinjectie
  • Beste praktijken voor injectie
  • Invoervalidatie
  • Uitvoer zuiveren
  • De uitvoer coderen en escapen
  • Uitdagingen bij het coderen

Behandeling van gehele getallen

  • Getekende getallen weergeven
  • Integer visualiseren
  • Problemen met gehele getallen
  • Overloop integer
  • Lab - Integer overflow
  • Getekende / niet-getekende verwarring
  • Lab - Getekende / niet-getekende verwarring
  • Gehele truncatie
  • Beste praktijken
  • Upcasting
  • Testen op randvoorwaarden
  • Testen na de voorwaarde
  • Grote integer bibliotheken gebruiken
  • Integerverwerking in C#
  • Lab - Rekenen gecontroleerd
  • Andere numerieke problemen
  • Delen door nul

Gegevensstructuren

  • Gegevensstructuur sentinels
  • Containers
  • Fout in container
  • Associatieve containers
  • Iteratoren

Bestanden en streams

  • Padverkenning
  • Pad-gerelateerde voorbeelden
  • Extra uitdagingen in Windows
  • Best practices voor padomleiding
  • Lab - Path traversal
  • Virtuele bronnen

Onveilige reflectie

  • Reflectie zonder validatie
  • Lab - Onveilige reflectie

Onveilige native code

  • Native code afhankelijkheid
  • Lab - Onveilige native code

Enkele andere problemen met invoervalidatie

Kwetsbare onderdelen gebruiken

De omgeving beoordelen

Verharding

Functionaliteit importeren uit niet-vertrouwde bronnen

Beheer van kwetsbaarheden

  • Patchbeheer
  • Kwetsbaarheidsdatabases en scantools
  • Kwetsbaarheidsbeoordeling - CVSS
  • Lab - Kwetsbaarheden vinden van gebruikte componenten
  • Het bouwproces en CI/CD
  • Afhankelijkheidscontrole in Cake

Day 2

Beveiligingsfuncties

Authenticatie

  • Basisprincipes van authenticatie
  • Zwakke punten in authenticatie
  • Casestudie - PayPal tweefactorauthenticatie omzeilen
  • Beste praktijken voor gebruikersinterfaces
  • Wachtwoordbeheer
  • Inkomend wachtwoordbeheer
  • Accountwachtwoorden opslaan
  • Plaintext wachtwoorden bij Facebook
  • Lab - Waarom is het hashen van wachtwoorden alleen niet genoeg?
  • Woordenboekaanvallen en brute forcing
  • Zouten
  • Adaptieve hashfuncties voor wachtwoordopslag
  • Wachtwoord onderweg
  • Wachtwoordbeleid
  • Zwakke en sterke wachtwoorden
  • Wachtzinnen gebruiken
  • Lab - Een wachtwoordbeleid toepassen
  • Het datalek bij Ashley Madison
  • De woordenboekaanval
  • De ultieme aanval
  • Gebruik van de resultaten en de geleerde lessen
  • Beheer van uitgaande wachtwoorden
  • Harde wachtwoorden
  • Lab - Hard gecodeerd wachtwoord
  • Wachtwoord in configuratiebestand
  • Gevoelige informatie in het geheugen beschermen
  • Uitdagingen bij het beschermen van het geheugen
  • Gevoelige gegevens opslaan in het geheugen
  • Lab - Gevoelige gegevens opslaan in het geheugen met SecureString

Autorisatie

  • Basisprincipes toegangscontrole
  • Ontbrekende of onjuiste autorisatie
  • Toegangscontrole in databases
  • Lab - Databasetoegangsbeheer
  • Privileges en machtigingen
  • Manipulatie van toestemming
  • Onjuist gebruik van geprivilegieerde API's
  • Best practices voor toestemming
  • Principe van de minste privileges
  • Principe van scheiding van privileges
  • Toestemming verlenen
  • Voorrecht laten vallen
  • Afhandeling van onvoldoende privileges

.NET platformbeveiliging

  • Beveiliging codetoegang
  • Bewijzen
  • Rechten
  • De Stapelwandeling
  • Lab - Beveiliging codetoegang
  • Het transparantiemodel
  • Beste praktijken
  • Lab - Experimenteren met het transparantiemodel
  • Rolgebaseerde beveiliging
  • Opdrachtgever en identiteit
  • Rolgebaseerde machtigingen
  • Imitatie
  • Lab - Rolgebaseerde beveiliging
  • .NET-code en toepassingen beschermen
  • Code ondertekenen

Blootstelling aan informatie

  • Blootstelling door geëxtraheerde gegevens en aggregatie
  • Lekken van systeeminformatie
  • Informatie over lekkend systeem
  • Vertrouwen op toegankelijkheidsmodificatoren
  • Lab - Ongepaste bescherming door toegankelijkheidsmodificator
  • Best practices voor blootstelling aan informatie

UI-beveiliging

  • UI-beveiligingsprincipes
  • Gevoelige informatie in de gebruikersinterface
  • Lab - Wachtwoord uit de UI halen
  • Verkeerde interpretatie van UI-functies of acties
  • Onvoldoende UI-feedback
  • Vertrouwen op verborgen of uitgeschakeld UI-element
  • Lab - Verborgen of uitgeschakeld UI-element
  • Onvoldoende anti-automatisering

Dag 3

Veelvoorkomende zwakke plekken in de beveiliging van software

Tijd en staat

  • Best practices voor draadbeheer
  • Best practices voor threadbeheer in C#
  • Race-omstandigheden
  • Race-conditie in objectdataleden
  • Lab - Singleton lidvelden
  • Bestandsraceconditie
  • Tijd van controle tot tijd van gebruik (TOCTTOU)
  • Lab - TOCTTOU
  • Onveilig tijdelijk bestand
  • Database raceomstandigheden
  • Het vermijden van "race conditions" in C#
  • Wederzijdse uitsluiting en vergrendeling
  • Deadlocks
  • Laboratorium - Vergrendeling
  • Synchronisatie en thread-veiligheid
  • Synchronisatie en threadveiligheid in C#

Fouten

  • Principes voor afhandeling van fouten en uitzonderingen
  • Foutafhandeling
  • Een misleidende statuscode retourneren
  • Blootstelling aan informatie door foutenrapportage
  • Uitzonderingsverwerking
  • In het vangblok. En wat nu?
  • Leeg vangblok
  • Beste praktijken voor vangblokken
  • Te brede worpen
  • NULL pointer uitzonderingen vangen
  • Uitzonderingsafhandeling in C#
  • Lab - Uitzonderingsverwerkingszooi

Code kwaliteit

  • Gegevens
  • Rijen en ToString()
  • Initialisatie en opschonen
  • Niet-geïnitialiseerde variabele
  • Cycli voor klasse-initialisatie
  • Lab - initialisatiecycli
  • Niet-vrijgegeven bron
  • Objectgeoriënteerd programmeren valkuilen
  • Toegankelijkheidsaanpassingen
  • Erven en oversturen
  • Gelijkmaken() implementeren
  • Mutabiliteit
  • Alleen-lezen collecties
  • Lab - Muteerbaar object
  • Klonen
  • Gevoelige klassen klonen - object hijacking
  • Object hijacking - beste praktijken
  • Serialisatie

Ontzegging van service

  • Ontzegging van service
  • Uitputting van hulpbronnen
  • Kasoverschot
  • Overstroming
  • Duurzame betrokkenheid van klanten
  • Denial of service-problemen in C#
  • Oneindige lus
  • Lab - Grondstoffen uitputtend
  • Versterking
  • Netwerkversterking
  • Versterking in databases
  • Andere versterkingsvoorbeelden
  • Complexiteit algoritme
  • Ontzegging van de service door reguliere expressie (ReDoS)
  • Lab - ReDos
  • Hashtable botsing
  • Hoe werken hashtabellen?
  • Hash-botsing in geval van hashtables
  • Hashtable botsen in C#

Inpakken

Principes voor veilig coderen

  • Grondbeginselen van robuust programmeren door Matt Bishop
  • Veilige ontwerpprincipes van Saltzer en Schröder
  • Nog enkele principes

En wat nu?

  • Verdere bronnen en lezingen
  • .NET en C# bronnen
  • Verdere labs en uitdagingen

Methoden

Een blended learning-traject: live training onder begeleiding van een instructeur met laboefeningen in een eersteklas e-learningsysteem. Je behoudt 3 maanden na de training toegang tot het e-learningsysteem om de laboefeningen en het materiaal opnieuw te bekijken.

Platform: Windows.
Labs: Hands-on.

Certificering

Na het volgen van deze training ontvangen deelnemers een certificaat van het High Tech Institute.