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: Linux, Windows
Labs: hands-on
De cursus wordt in het Engels verzorgd onder de titel "Web Application Security in Java".
Jouw webapplicatie in Java werkt zoals bedoeld, dus je bent klaar, toch? Maar heb je overwogen om onjuiste waarden in te voeren? 16 GB aan data? 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 voor webapplicaties volgens de OWASP-top tien, maar gaat veel verder dan dat, zowel in dekking als in de details. Dit alles wordt in de context van Java geplaatst en uitgebreid met kernproblemen bij het programmeren, waarbij de beveiligingsvalkuilen van de Java-taal en het Java-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 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-ontwikkelaars die aan webapplicaties werken.
Ingangsadvies: algemene Java- 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 - Voorbereide statements gebruiken
- Casestudy - Fortnite-accounts hacken
- Code-injectie
- Commando-injectie
- Lab - Commando-injectie
- Best practices voor commando-injectie
- Runtime.exec() gebruiken
- ProcessBuilder gebruiken
- Casestudy - Shellshock
- 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
- 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
- Lab - Klassen voor geheimhouding gebruiken
- 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
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
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
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
- Lab - Best practices voor XSS
A8 - Onveilige deserialisatie
- Uitdagingen voor serialisatie en deserialisatie
- Onvertrouwde streams deserialiseren
- Best practices bij deserialiseren
- ReadObject gebruiken
- 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
- 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
Dag 3
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
- Integertruncatie
- Best practices
- Upcasting
- Testen van precondities
- Testen van postcondities
- Grote integerbibliotheken gebruiken
- Integerverwerking in Java
- Lab - Behandeling van integers
- Andere numerieke problemen
- Delen door nul
- Werken met drijvendekommagetallen
- 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
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
Codekwaliteit
- Data
- Arrays en toString()
- Initialisatie en opschoning
- Constructors en destructors
- Cycli voor klasseninitialisatie
- Lab - Initialisatiecycli
- Niet-vrijgegeven resource
- Valkuilen van objectgeoriënteerd programmeren
- Toegankelijkheidsmodificatoren
- Overschrijven en toegankelijkheidsmodificatoren
- Overerven en overschrijven
- Equals() implementeren
- Mutabiliteit
- Lab - muteerbaar object
- Klonen
- Gevoelige klassen klonen - object hijacking
- Object hijacking - best practices
- Serialisatie
- Serialiseren van gevoelige data
- Best practices voor serialisatie
- Lab - Serialiseren van gevoelige data
- DoS met deserialisatie
- Geheugenlekken tijdens 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
Deelnemers ontvangen een certificaat van High Tech Institute voor het volgen van deze training.

