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
Uw applicatie geschreven in Java of 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.
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 bespreken. 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 het rendement op investering (ROI) van secure coding-trainingen kunt kwantificeren? Bekijk dan dit artikel.
Doelstelling
- Inzicht in beveiligingsproblemen van webtoepassingen;
- Gedetailleerde analyse van de OWASP Top Tien elementen;
- Verder gaan dan het laaghangende fruit;
- 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 Java- en C#-ontwikkelaars die aan webapplicaties werken.
Voorbereidheid: Algemene Java, C# en webontwikkeling.
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
- SEI Cert richtlijnen voor veilig coderen
- Kwetsbaarheden in de omgeving en de afhankelijkheden
De top tien van OWASP
A1 - Injectie
- Injectieprincipes
- Injectieaanvallen
- SQL-injectie
- Basisbeginselen SQL-injectie
- Lab - SQL-injectie
- Aanvaltechnieken
- Op inhoud gebaseerde blinde SQL-injectie
- Op tijd gebaseerde blinde SQL-injectie
- SQL-injectie best practices
- Invoervalidatie
- Uitvoercodering
- Geparameteriseerde query's
- Andere best practices
- Lab - prepared statements gebruiken in C#
- Casestudy - Fortnite-accounts hacken
- Code injectie
- Opdrachtinjectie
- Lab - Opdrachtinjectie
- Best practices voor opdrachtinjectie
- Runtime.exec() gebruiken in Java
- ProcessBuilder gebruiken in Java
- Best practices voor opdrachtinjectie in C#
- Lab - Opdrachtinjectie best practices in C#
- Casestudie - Opdrachtinjectie
- Scriptinjectie
- Injectie in expressietaal
- Beste praktijken voor injectie
- Invoervalidatie
- Uitvoer zuiveren
- De uitvoer coderen en escapen
- Uitdagingen bij het coderen
A2 - Gebroken authenticatie
- Basisprincipes van authenticatie
- Zwakke punten in authenticatie
- Spoofing op het web
- Casestudie - PayPal tweefactorauthenticatie omzeilen
- Beste praktijken voor gebruikersinterfaces
- Sessiebeheer
- Essentiële functies voor sessiebeheer
- Waarom beschermen we sessie-ID's - Sessiekaping
- Best practices voor sessie-ID
- Onvoldoende sessie afloop
- Sessie fixatie
- Cross-site vervalsing van verzoeken (CSRF)
- Lab - Cross-site verzoekvervalsing
- CSRF best practices
- Lab - CSRF-bescherming met tokens
- Beveiliging cookies
- Beste praktijken voor cookiebeveiliging
- Cookie-parameters
Day 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
- 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
- Gevoelige gegevens opslaan in het geheugen in C#
- Lab - Gevoelige gegevens opslaan in het geheugen met SecureString in C#
A3 - Blootstelling aan gevoelige gegevens
- 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
A4 - Externe XML-entiteiten (XXE)
- DTD en de entiteiten
- Uitbreiding van entiteiten
- Aanval op een externe entiteit (XXE)
- Bestandsopname met externe entiteiten
- Server-side request forgery met externe entiteiten
- Lab - Aanval door een externe entiteit
- Casestudie - XXE-aanval op enkele populaire services
- XXE in Java voorkomen
- XXE voorkomen in C#
A5 - Gebroken toegangscontrole
- Basisprincipes toegangscontrole
- Ontbrekende of onjuiste autorisatie
- Het niet beperken van URL-toegang
- Verward afgevaardigde
- 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
- Beste praktijken
- Lab - Onbeperkte upload van bestanden
A6 - Verkeerde configuratie van de beveiliging
- Configuratieprincipes
- Verkeerde configuratie server
- Configuratiebeheer
- Java-gerelateerde componenten - best practices
- Tomcat configuratie
- NET en IIS configuratie best practices
- 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 klantzijde (DOM-gebaseerd)
- Casestudie - Yahoo mail opgeslagen XSS
- Lab - Gespiegelde en opgeslagen XSS
- Best practices voor XSS-bescherming
- Beschermingsprincipes - ontsnappen
- Extra beschermingslagen
- Principes voor bescherming aan de klantzijde
- XSS-beschermings-API's in Java
- XSS-beschermings-API's in C#
- Aanvraagvalidatie in ASP.NET
- Verdere XSS-beschermingstechnieken in C#
- Lab - XSS best practices in C#
Dag 3
De top tien van OWASP
A8 - Onveilige deserialisatie
- Uitdagingen voor serialisatie en deserialisatie
- Onvertrouwde streams deserialiseren
- Best practices voor deserialiseren
- ReadObject gebruiken in Java
- Verzegelde objecten
- Vooruitblik deserialisatie
- Eigenschap-georiënteerd programmeren (POP)
- Best practices voor POP
- Lab - POP payload maken
A9 - Onderdelen gebruiken met bekende kwetsbaarheden
- Kwetsbare onderdelen gebruiken
- De omgeving beoordelen
- Verharding
- Functionaliteit importeren uit niet-vertrouwde bronnen
- Casestudie - Het datalek bij British Airways
- Beheer van kwetsbaarheden
- Patchbeheer
- Kwetsbaarheidsdatabases en scantools
- Kwetsbaarheidsbeoordeling - CVSS
- Lab - Kwetsbaarheden vinden van gebruikte componenten
- Het bouwproces en CI/CD
- Afhankelijkheid controleren in Maven
- Afhankelijkheidscontrole in Cake
- Lab - Kwetsbare onderdelen detecteren tijdens het bouwen
A10 - Onvoldoende logging en bewaking
- Principes voor loggen en bewaken
- Loggen
- Onvoldoende logboekregistratie
- Best practices voor loggen
- Java logging best practices
- Bewaking
- Best practices monitoren
Beveiliging van webtoepassingen buiten de Top Tien
- Beveiliging aan de klantzijde
- Beleid voor dezelfde herkomst
- Eenvoudig verzoek
- Preflightverzoek
- Het beleid van dezelfde oorsprong omzeilen
- Bronnen delen tussen verschillende landen
- Frame zandbakken
- Clickjacking
- Best practices voor bescherming tegen Clickjacking
- Lab - Clickjacking
- JavaScript-kaping
Veelvoorkomende zwakke plekken in de beveiliging van software
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
- Server- versus client-validatie
- Behandeling van gehele getallen
- Getekende getallen weergeven
- Integer visualiseren
- Problemen met gehele getallen
- Overloop integer
- Lab - Integer overflow
- Getekende / niet-getekende verwarring
- Getekende / niet-getekende verwarring in Java
- Lab - Getekende / niet-getekende verwarring
- Gehele truncatie
- Beste praktijken
- Upcasting
- Testen op randvoorwaarden
- Testen na de voorwaarde
- Grote integer bibliotheken gebruiken
- Integerverwerking in Java
- Lab - Integerverwerking in Java
- Integerverwerking in C#
- Lab - Gecontroleerd rekenen in C#
- Andere numerieke problemen
- Delen door nul
- Werken met drijvende-kommagetallen in Java
- Onveilige reflectie
- Reflectie zonder validatie
- Lab - Onveilige reflectie
- Onveilige native code
- Native code afhankelijkheid
- Lab - Onveilige JNI
- Enkele andere problemen met invoervalidatie
Beveiligingsfuncties
- Beveiliging Java-platform
- De programmeertaal Java en runtime-omgeving
- Type veiligheid en beveiliging
- Beveiligingsfuncties van de JRE
- De ClassLoader en de BytecodeVerifier
- Toegangsbeheer op applicatieniveau in Java
- Machtigingen en de beveiligingsmanager
- Best practices voor privileges
- Lab - Werken met rechten in Java
- Rolgebaseerde toegangscontrole
- Java Authenticatie- en Autorisatiediensten (JAAS)
- Java-code en -toepassingen beschermen
- Code ondertekenen
Dag 4
Veelvoorkomende zwakke plekken in de beveiliging van software
Beveiligingsfuncties
- .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
Tijd en staat
- Best practices voor draadbeheer
- Best practices voor threadbeheer in Java
- Draadpoelen
- Best practices voor threadbeheer in C#
- Race-omstandigheden
- Race-conditie in objectdataleden
- Singleton lidvelden
- Lab - Singleton lidvelden
- Bestandsraceconditie
- Tijd van controle tot tijd van gebruik (TOCTTOU)
- Lab - TOCTTOU
- Onveilig tijdelijk bestand
- Database raceomstandigheden
- Lab - Database racevoorwaarden
- Het vermijden van race-condities in Java
- Het vermijden van "race conditions" in C#
- Wederzijdse uitsluiting en vergrendeling
- Deadlocks
- Wederzijdse uitsluiting en vergrendeling in Java
- Lab - Vergrendelen in Java
- Wederzijdse uitsluiting en vergrendeling in C#
- Lab - Vergrendelen in C#
- Synchronisatie en thread-veiligheid
- Synchronisatie en threadveiligheid in Java
- Synchronisatie en threadveiligheid in C#
Fouten
- Principes voor afhandeling van fouten en uitzonderingen
- Foutafhandeling
- Een misleidende statuscode retourneren
- Bereikbare bewering
- Blootstelling aan informatie door foutenrapportage
- Ontbrekende aangepaste foutpagina's
- Uitzonderingsverwerking
- In het vangblok. En wat nu?
- Leeg vangblok
- Beste praktijken voor vangblokken
- Te brede worpen
- NULL pointer uitzonderingen vangen
- Onjuiste voltooiing van het laatste blok
- Ingeslikte DraadDood
- Gecontroleerde uitzonderingen die ontsnappen uit finally
- Gooien van niet-aangegeven gecontroleerde uitzonderingen
- RuntimeException, Exception of Throwable gooien
- Lab - Uitzonderingsverwerkingszooi
- Uitzonderingsafhandeling in C#
Code kwaliteit
- Gegevens
- Rijen en toString()
- Initialisatie en opschonen
- Niet-geïnitialiseerde variabele
- Constructeurs en destructeurs
- Cycli voor klasse-initialisatie
- Lab - initialisatiecycli
- Niet-vrijgegeven bron
- Objectgeoriënteerd programmeren valkuilen
- Toegankelijkheidsaanpassingen
- Overschrijven en toegankelijkheidsmodifiers in Java
- Erven en oversturen
- Gelijk() implementeren
- Mutabiliteit
- Alleen-lezen verzamelingen in C#
- Lab - Muteerbaar object
- Klonen
- Gevoelige klassen klonen - object hijacking
- Object hijacking - beste praktijken
- Serialisatie
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
Certificering
Na het volgen van deze training ontvangen deelnemers een certificaat van het High Tech Institute.

