Een blended learning-traject: live training onder begeleiding van een instructeur met laboefeningen in een eersteklas e-learningsysteem. Je houdt tot 3 maanden na de training toegang tot het e-learningsysteem om de laboefeningen en het materiaal opnieuw te bekijken.
Platform: Windows
Labs: hands-on
De cursus wordt in het Engels verzorgd onder de titel "Web Application Security in Java and C#".
Je applicatie in Java of C# werkt, dus je bent klaar, toch? Maar heb je overwogen om onjuiste waarden in te voeren? 16 GB aan gegevens? Een null? Een apostrof? Negatieve getallen, of specifiek -2^32? Want dat is wat de slechteriken zullen doen - en deze 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 programmeerhygiëne aanzienlijk te verbeteren. Fouten, gevolgen en best practices zijn ons bloed, zweet en tranen.
Het lesprogramma doorloopt de veelvoorkomende beveiligingsproblemen van webapplicaties volgens de OWASP-top tien, maar gaat veel verder dan dat, zowel in de dekking als in de details. Dit alles wordt in de context van de besproken programmeertalen geplaatst en uitgebreid met kernproblemen van programmeren, waarbij de beveiligingsvalkuilen van de gebruikte frameworks 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 aanbieden. Het standaardprogramma met een inhoud van 3 dagen kan ook in 5 halve dagen worden gegeven (van maandag tot vrijdag).
- Doe mee met onze gratis webinar voor meer informatie.
- Benieuwd hoe je de return-on-investment (ROI) van secure coding-trainingen kunt kwantificeren? Bekijk dan dit artikel.
Leerdoelen
- Inzicht in beveiligingsproblemen van webtoepassingen
- Gedetailleerde analyse van de OWASP-top tien
- Verdergaan dan het laaghangende fruit
- Benaderingen uitleggen voor het omgaan met beveiligingsproblemen in code
- Kwetsbaarheden in de beveiliging en de gevolgen ervan identificeren
- De best practices leren om deze fouten te vermijden
Doelgroep
Deze cursus is bedoeld voor Java- en C#-ontwikkelaars die aan webapplicaties werken.
Ingangsadvies: algemene ervaring in Java-, C#- en webontwikkeling.
Programma
Dag 1
Basisprincipes van beveiliging
Wat is beveiliging?
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
- Common Weakness Enumeration (CWE)
- CWE/SANS-top 25 van gevaarlijkste softwarefouten
- SEI Cert-richtlijnen voor veilig programmeren
- Kwetsbaarheden in de omgeving en de afhankelijkheden
De top tien van OWASP
A1 - Injectie
- Injectieprincipes
- Injectieaanvallen
- SQL-injectie
- Basisbeginselen SQL-injectie
- Lab - SQL-injectie
- Aanvalstechnieken
- Op inhoud gebaseerde blinde SQL-injectie
- Op tijd gebaseerde blinde SQL-injectie
- Best practices voor SQL-injectie
- Inputvalidatie
- Outputcodering
- Geparameteriseerde query's
- Andere best practices
- Lab - Prepared statements gebruiken in C#
- Casestudy - Fortnite-accounts hacken
- Code-injectie
- Commando-injectie
- Lab - Commando-injectie
- Best practices voor commando-injectie
- Runtime.exec() gebruiken in Java
- ProcessBuilder gebruiken in Java
- Best practices bij commando-injectie in C#
- Lab - Best practices bij commando-injectie in C#
- Casestudy - Commando-injectie
- Scriptinjectie
- Injectie in expressietaal
- Best practices voor injectie
- Inputvalidatie
- Outputopschoning
- De output coderen en escapen
- Uitdagingen bij het coderen
A2 - Gebroken authenticatie
- Basisprincipes van authenticatie
- Zwakke punten in authenticatie
- Spoofing op het web
- Casestudy - PayPal-tweefactorauthenticatie omzeilen
- Best practices voor gebruikersinterfaces
- Sessiebeheer
- Essentiële functies voor sessiebeheer
- Waarom beschermen we sessie-ID's - sessiekaping
- Best practices voor sessie-ID's
- Onvoldoende sessieafloop
- Sessiefixatie
- Cross-site vervalsing van requests (CSRF)
- Lab - Cross-site requestvervalsing
- Best practices voor CSRF
- Lab - CSRF-bescherming met tokens
- Cookiebeveiliging
- Best practices voor cookiebeveiliging
- Cookieparameters
Dag 2
De top tien van OWASP
A2 - Gebroken authenticatie
- Wachtwoordbeheer
- Inkomend wachtwoordbeheer
- Accountwachtwoorden opslaan
- Plaintext-wachtwoorden bij Facebook
- Lab - waarom is het hashen van wachtwoorden alleen niet genoeg?
- Woordenboekaanvallen en brute forcing
- Salting
- 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
- Hardgecodeerde wachtwoorden
- Lab - Hardgecodeerd wachtwoord
- Wachtwoord in configuratiebestand
- Gevoelige informatie in het geheugen beschermen
- Uitdagingen bij geheugenbescherming
- Gevoelige data opslaan in het geheugen
- Gevoelige data opslaan in het geheugen in C#
- Lab - Gevoelige data opslaan in het geheugen met SecureString in C#
A3 - Blootstelling aan gevoelige data
- Blootstelling van informatie
- Blootstelling door geëxtraheerde data en aggregatie
- Gelekte systeeminformatie
- Lekken van systeeminformatie
- Vertrouwen op toegankelijkheidsmodificatoren
- Lab - ongepaste bescherming door toegankelijkheidsmodificator
- Best practices bij blootstelling aan informatie
A4 - Externe XML-entiteiten (XXE)
- DTD en de entiteiten
- Uitbreiding van entiteiten
- Aanval van een externe entiteit (XXE)
- Bestandsinclusie met externe entiteiten
- Server-side requestvervalsing met externe entiteiten
- Lab - Aanval van een externe entiteit
- Casestudy - XXE-aanval op enkele populaire services
- XXE voorkomen in Java
- XXE voorkomen in C#
A5 - Gebroken toegangscontrole
- Basisprincipes van toegangscontrole
- Ontbrekende of onjuiste autorisatie
- Het niet beperken van URL-toegang
- Confused deputy
- Onveilige directe objectverwijzing (IDOR)
- Lab - Onveilige directe objectverwijzing
- Autorisatie omzeilen via door gebruiker beheerde sleutels
- Casestudy - Autorisatieomleiding op Facebook
- Bestanden uploaden
- Onbeperkte upload van bestanden
- Best practices
- Lab - Onbeperkte upload van bestanden
A6 - Verkeerde configuratie van de beveiliging
- Configuratieprincipes
- Verkeerde serverconfiguratie
- Configuratiebeheer
- Java-gerelateerde componenten - best practices
- Tomcat-configuratie
- Best practices voor NET- en IIS-configuratie
- NET-configuratie
- IIS-configuratie
A7 - Cross-site scripting (XSS)
- Basisprincipes van cross-site scripting
- Typen cross-site scripting
- Persistente cross-site scripting
- Gereflecteerde cross-site scripting
- Cross-site scripting aan de clientkant (DOM-gebaseerd)
- Casestudy - Yahoo mail stored XSS
- Lab - Gereflecteerde en opgeslagen XSS
- Best practices voor XSS-bescherming
- Beschermingsprincipes - escaping
- Extra beschermingslagen
- Principes voor bescherming aan de clientkant
- XSS-beschermings-API's in Java
- XSS-beschermings-API's in C#
- Requestvalidatie in ASP.NET
- Verdere XSS-beschermingstechnieken in C#
- Lab - Best practices bij XSS in C#
Dag 3
De top tien van OWASP
A8 - Onveilige deserialisatie
- Uitdagingen voor serialisatie en deserialisatie
- Onvertrouwde streams deserialiseren
- Best practices bij deserialiseren
- ReadObject gebruiken in Java
- Verzegelde objecten
- Look ahead-deserialisatie
- Eigenschapgeoriënteerd programmeren (POP)
- Best practices voor POP
- Lab - POP-payload maken
A9 - Componenten gebruiken met bekende kwetsbaarheden
- Kwetsbare componenten gebruiken
- De omgeving beoordelen
- Hardening
- Functionaliteit importeren uit niet-vertrouwde bronnen
- Casestudy - Het datalek bij British Airways
- Beheer van kwetsbaarheden
- Patchbeheer
- Databases en scantools voor kwetsbaarheden
- Kwetsbaarheidsbeoordeling - CVSS
- Lab - kwetsbaarheden vinden van gebruikte componenten
- Het buildproces en CI/CD
- Afhankelijkheden controleren in Maven
- Afhankelijkheden controleren in Cake
- Lab - Kwetsbare componenten detecteren tijdens de build
A10 - Onvoldoende logging en monitoring
- Principes voor logging en monitoring
- Logging
- Onvoldoende logging
- Best practices voor logging
- Best practices voor logging in Java
- Monitoring
- Best practices voor monitoring
Beveiliging van webtoepassingen buiten de top tien
- Beveiliging aan de clientkant
- Same Origin Policy
- Eenvoudige request
- Preflightrequest
- De Same Origin Policy omzeilen
- Resources delen van verschillende herkomst
- Frame-sandboxing
- Clickjacking
- Best practices voor bescherming tegen clickjacking
- Lab - Clickjacking
- Javascript-kaping
Veelvoorkomende zwakke plekken in de beveiliging van software
Inputvalidatie
- Principes voor inputvalidatie
- Zwarte lijsten en witte lijsten
- Validatie met regex
- Wat valideren - het aanvalsoppervlak
- Wanneer valideren - validatie vs transformaties
- Waar valideren - verdediging in de diepte
- Server- versus clientvalidatie
- Behandeling van integers
- Signed getallen weergeven
- Integervisualisatie
- Problemen met integers
- Integeroverflow
- Lab - Integeroverflow
- Signed/unsigned-verwarring
- Signed/unsigned-verwarring in Java
- Lab - Signed/unsigned-verwarring
- Integertruncatie
- Best practices
- Upcasting
- Testen van precondities
- Testen van postcondities
- Grote integerbibliotheken gebruiken
- Integerverwerking in Java
- Lab - Integerverwerking in Java
- Integerverwerking in C#
- Lab - Gecontroleerd rekenen in C#
- Andere numerieke problemen
- Delen door nul
- Werken met drijvendekommagetallen in Java
- Onveilige reflectie
- Reflectie zonder validatie
- Lab - onveilige reflectie
- Onveilige native code
- Native code-afhankelijkheid
- Lab - Onveilige JNI
- Enkele andere problemen met inputvalidatie
Beveiligingsfuncties
- Java-platformbeveiliging
- De Java-programmeertaal en -runtime-omgeving
- Typeveiligheid en -beveiliging
- Beveiligingsfuncties van de JRE
- De ClassLoader en de BytecodeVerifier
- Toegangsbeheer op applicatieniveau in Java
- Rechten en de beveiligingsmanager
- Best practices voor privileges
- Lab - Werken met rechten in Java
- Rolgebaseerde toegangscontrole
- Java Authentication and Authorization Services (JAAS)
- Java-code en -toepassingen beschermen
- Code signing
Dag 4
Veelvoorkomende zwakke plekken in de beveiliging van software
Beveiligingsfuncties
- .NET-platformbeveiliging
- Beveiliging van de codetoegang
- Bewijzen
- Rechten
- The Stack Walk
- Lab - Beveiliging van de codetoegang
- Het transparantiemodel
- Best practices
- Lab - experimenteren met het transparantiemodel
- Rolgebaseerde beveiliging
- Principal en identiteit
- Rolgebaseerde rechten
- Imitatie
- Lab - rolgebaseerde beveiliging
- .NET-code en -toepassingen beschermen
- Code signing
Tijd en toestand
- Best practices voor threadbeheer
- Best practices voor threadbeheer in Java
- Thread-pools
- Best practices voor threadbeheer in C#
- Racecondities
- Raceconditie in objectdataleden
- Singleton lidvelden
- Lab - singleton lidvelden
- Bestandsraceconditie
- Tijd van controle tot tijd van gebruik (TOCTTOU)
- Lab - TOCTTOU
- Onveilig tijdelijk bestand
- Racecondities bij databases
- Lab - Racecondities bij databases
- Het vermijden van racecondities in Java
- Het vermijden van racecondities in C#
- Wederzijdse uitsluiting en locking
- Deadlocks
- Wederzijdse uitsluiting en locking in Java
- Lab - Locking in Java
- Wederzijdse uitsluiting en locking in C#
- Lab - Locking in C#
- Synchronisatie en threadveiligheid
- Synchronisatie en threadveiligheid in Java
- Synchronisatie en threadveiligheid in C#
Fouten
- Principes voor afhandeling van fouten en excepties
- Foutafhandeling
- Een misleidende statuscode teruggeven
- Bereikbare assertie
- Blootstelling aan informatie door foutrapportage
- Ontbrekende foutpagina's
- Afhandeling van excepties
- In het catch-blok. En wat nu?
- Leeg catch-blok
- Best practices voor catch-blokken
- Te brede throws
- Null-pointerexcepties afvangen
- Onjuiste voltooiing van het finally-blok
- Ingeslikte ThreadDeath
- Gecheckte excepties escapen uit finally
- Niet-gedeclareerde gecheckte excepties throwen
- RuntimeException, Exception of Throwable throwen
- Lab - Gedoe bij de afhandeling van excepties
- Afhandeling van excepties in C#
Codekwaliteit
- Data
- Arrays en toString()
- Initialisatie en opschoning
- Niet-geïnitialiseerde variabele
- Constructors en destructors
- Cycli voor klasseninitialisatie
- Lab - Initialisatiecycli
- Niet-vrijgegeven resource
- Valkuilen van objectgeoriënteerd programmeren
- Toegankelijkheidsmodificatoren
- Overschrijven en toegankelijkheidsmodificatoren in Java
- Overerven en overschrijven
- Equals() implementeren
- Mutabiliteit
- Alleen-lezen-verzamelingen in C#
- Lab - muteerbaar object
- Klonen
- Gevoelige klassen klonen - object hijacking
- Object hijacking - best practices
- Serialisatie
Samenvatting
Principes voor veilig programmeren
- Grondbeginselen van robuust programmeren door Matt Bishop
- Veilige ontwerpprincipes van Saltzer en Schröder
- Nog enkele principes
En wat nu?
- Verdere bronnen en naslagwerken
- Bronnen voor .NET en C#
- Verdere labs en uitdagingen
Methodiek
Certificering
Na het volgen van deze training ontvangen deelnemers een certificaat van High Tech Institute.

