De cursus wordt in het Engels verzorgd onder de titel "Desktop Application Security in Java".

Je applicatie geschreven in Java werkt zoals bedoeld, dus je 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 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.

Dit alles wordt in de context van Java geplaatst en uitgebreid met kernproblemen bij het programmeren, waarbij valkuilen in de beveiliging van de Java-taal en het Java-raamwerk 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).
  • Benieuwd hoe je de return-on-investment (ROI) van secure coding-trainingen kunt kwantificeren? Bekijk dan dit artikel.

Leerdoelen

  • 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 werken aan desktopapplicaties.
Voorbereiding: Algemene Java-ontwikkeling.

Delivery 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
Investment Op aanvraag
Brochure downloaden

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

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

Injectie

  • Injectieprincipes
  • Injectieaanvallen
  • CRLF-injectie
  • Vervalsen van logs
  • Lab - logvervalsing
  • Logvervalsing - best practices
  • Code-injectie
  • Commando-injectie
  • Lab - Commando-injectie
  • Best practices voor commando-injectie
  • Runtime.exec() gebruiken
  • ProcessBuilder gebruiken
  • Casestudy - Shellshock
  • Lab - Shellshock
  • Scriptinjectie
  • Injectie in expressietaal
  • Best practices voor injectie
  • Inputvalidatie
  • Outputopschoning
  • De output coderen en escapen
  • Uitdagingen bij het coderen

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

Datastructuren

  • Datastructuur-sentinels
  • Containers
  • Containerfouten
  • Associatieve containers
  • Iteratoren

Bestanden en streams

  • Path traversal
  • Path traversal-gerelateerde voorbeelden
  • Best practices voor path traversal
  • Lab - path traversal
  • Virtuele bronnen

Onveilige reflectie

  • Reflectie zonder validatie
  • Lab - onveilige reflectie

Onveilige native code

  • Native code-afhankelijkheid
  • Lab - Onveilige JNI

Enkele andere problemen met inputvalidatie

Kwetsbare componenten gebruiken

De omgeving beoordelen

Hardening

Functionaliteit importeren uit niet-vertrouwde bronnen

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

Dag 2

Beveiligingsfuncties

Authenticatie

  • Basisprincipes van authenticatie
  • Zwakke punten in authenticatie
  • Casestudy - PayPal-tweefactorauthenticatie omzeilen
  • Best practices 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
  • 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

Autorisatie

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

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

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

UI-beveiliging

  • UI-beveiligingsprincipes
  • Gevoelige informatie in de gebruikersinterface
  • 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 toestand

  • Best practices voor threadbeheer
  • Best practices voor threadbeheer in Java
  • Thread-pools
  • 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
  • Wederzijdse uitsluiting en locking
  • Deadlocks
  • Laboratorium - Locking
  • Synchronisatie en threadveiligheid
  • Synchronisatie en threadveiligheid in Java

Fouten

  • Principes voor afhandeling van fouten en excepties
  • Foutafhandeling
  • Een misleidende statuscode teruggeven
  • Bereikbare assertie
  • Blootstelling aan informatie door foutrapportage
  • 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

Denial of service

  • Denial of service
  • Uitputting van bronnen
  • Cache-overflow
  • Flooding
  • Duurzame betrokkenheid van klanten
  • Denial of service-problemen in Java
  • Oneindige lus
  • Lab - uitputten van bronnen
  • Amplificatie
  • Netwerkamplificatie
  • Amplificatie in databases
  • Andere voorbeelden van amplificatie
  • Problemen met de complexiteit van algoritmes
  • Denial of service door reguliere expressies (ReDoS)
  • Lab - ReDos
  • Hashtable collision
  • Hoe werken hashtabellen?
  • Hash collision bij hashtables
  • Hashtable collision in Java

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

Verdere labs en uitdagingen

Methodiek

Platform: Linux, Windows
Labs: hands-on

Certificering

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