<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE FL_Course SYSTEM "https://www.flane.de/dtd/fl_course095.dtd"><?xml-stylesheet type="text/xsl" href="https://portal.flane.ch/css/xml-course.xsl"?><course productid="24068" language="de" source="https://portal.flane.ch/swisscom/xml-course/cydrill-casec-caz" lastchanged="2026-01-12T11:34:09+01:00" parent="https://portal.flane.ch/swisscom/xml-courses"><title>Cloud Application Security in C# for Azure</title><productcode>CASEC-CAZ</productcode><vendorcode>CY</vendorcode><vendorname>Cydrill</vendorname><fullproductcode>CY-CASEC-CAZ</fullproductcode><version>1.0</version><objective>&lt;ul&gt;
&lt;li&gt;Getting familiar with essential cyber security concepts&lt;/li&gt;&lt;li&gt;Understand cloud security specialties&lt;/li&gt;&lt;li&gt;Understanding Web application security issues&lt;/li&gt;&lt;li&gt;Detailed analysis of the OWASP Top Ten elements&lt;/li&gt;&lt;li&gt;Putting Web application security in the context of C#&lt;/li&gt;&lt;li&gt;Going beyond the low hanging fruits&lt;/li&gt;&lt;li&gt;Managing vulnerabilities in third party components&lt;/li&gt;&lt;li&gt;Learn to deal with cloud infrastructure security&lt;/li&gt;&lt;li&gt;Identify vulnerabilities and their consequences&lt;/li&gt;&lt;li&gt;Learn the security best practices in C#&lt;/li&gt;&lt;li&gt;Input validation approaches and principles&lt;/li&gt;&lt;li&gt;Understanding how cryptography can support application security&lt;/li&gt;&lt;li&gt;Learning how to use cryptographic APIs correctly in C#&lt;/li&gt;&lt;li&gt;&lt;/li&gt;&lt;/ul&gt;</objective><essentials>&lt;p&gt;General C# and Web development&lt;/p&gt;</essentials><audience>&lt;p&gt;C# developers working on Web applications and Azure&lt;/p&gt;</audience><contents>&lt;ul&gt;
&lt;li&gt;Cyber security basics&lt;/li&gt;&lt;li&gt;The OWASP Top Ten&lt;/li&gt;&lt;li&gt;Cloud infrastructure security&lt;/li&gt;&lt;li&gt;API security&lt;/li&gt;&lt;li&gt;JSON security&lt;/li&gt;&lt;li&gt;XML security&lt;/li&gt;&lt;li&gt;Denial of service&lt;/li&gt;&lt;li&gt;Cryptography for developers&lt;/li&gt;&lt;li&gt;Wrap up&lt;/li&gt;&lt;/ul&gt;</contents><outline>&lt;p&gt;&lt;strong&gt;DAY 1 &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Cyber security basics&lt;/strong&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;What is security?&lt;/li&gt;&lt;li&gt;Threat and risk&lt;/li&gt;&lt;li&gt;Cyber security threat types&lt;/li&gt;&lt;li&gt;Consequences of insecure software
&lt;ul&gt;
&lt;li&gt;Constraints and the market&lt;/li&gt;&lt;li&gt;The dark side&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Cloud security basics
&lt;ul&gt;
&lt;li&gt;Cloud infrastructure basics&lt;/li&gt;&lt;li&gt;Cloud architectures and security&lt;/li&gt;&lt;li&gt;The Cloud Cube Model&lt;/li&gt;&lt;li&gt;Attack surface in the cloud&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Cloud data security
&lt;ul&gt;
&lt;li&gt;Data confidentiality and integrity in the cloud&lt;/li&gt;&lt;li&gt;Data privacy in the cloud&lt;/li&gt;&lt;li&gt;Compliance considerations&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Cloud deployment security
&lt;ul&gt;
&lt;li&gt;Hardening cloud deployments&lt;/li&gt;&lt;li&gt;Security of jump boxes&lt;/li&gt;&lt;li&gt;Serverless computing and security&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Cloud security standards and best practices
&lt;ul&gt;
&lt;li&gt;SOC compliance&lt;/li&gt;&lt;li&gt;CSA controls&lt;/li&gt;&lt;li&gt;Other standards&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;The OWASP Top Ten&lt;/strong&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;OWASP Top 10 &amp;ndash; 2017&lt;/li&gt;&lt;li&gt;A1 - Injection
&lt;ul&gt;
&lt;li&gt;Injection principles&lt;/li&gt;&lt;li&gt;Injection attacks&lt;/li&gt;&lt;li&gt;SQL injection
&lt;ul&gt;
&lt;li&gt;SQL injection basics&lt;/li&gt;&lt;li&gt;Lab &amp;ndash; SQL injection&lt;/li&gt;&lt;li&gt;Attack techniques&lt;/li&gt;&lt;li&gt;Content-based blind SQL injection&lt;/li&gt;&lt;li&gt;Time-based blind SQL injection&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;NoSQL injection
&lt;ul&gt;
&lt;li&gt;NoSQL injection specialties&lt;/li&gt;&lt;li&gt;NoSQL injection in MongoDB&lt;/li&gt;&lt;li&gt;NoSQL injection in CosmosDB&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;SQL injection best practices
&lt;ul&gt;
&lt;li&gt;Input validation&lt;/li&gt;&lt;li&gt;Parameterized queries&lt;/li&gt;&lt;li&gt;Lab &amp;ndash; Using prepared statements&lt;/li&gt;&lt;li&gt;Additional considerations&lt;/li&gt;&lt;li&gt;Case study &amp;ndash; Hacking Fortnite accounts&lt;/li&gt;&lt;li&gt;SQL injection protection and ORM&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Parameter manipulation
&lt;ul&gt;
&lt;li&gt;CRLF injection
&lt;ul&gt;
&lt;li&gt;Log forging&lt;/li&gt;&lt;li&gt;Log forging &amp;ndash; best practices&lt;/li&gt;&lt;li&gt;HTTP response splitting&lt;/li&gt;&lt;li&gt;Header checking in ASP.NET&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;HTTP parameter manipulation
&lt;ul&gt;
&lt;li&gt;HTTP parameter pollution&lt;/li&gt;&lt;li&gt;Variable shadowing&lt;/li&gt;&lt;li&gt;Value shadowing&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Code injection
&lt;ul&gt;
&lt;li&gt;OS command injection
&lt;ul&gt;
&lt;li&gt;Lab &amp;ndash; Command injection&lt;/li&gt;&lt;li&gt;OS command injection best practices&lt;/li&gt;&lt;li&gt;Avoiding command injection with the right APIs&lt;/li&gt;&lt;li&gt;Lab &amp;ndash; Command injection best practices&lt;/li&gt;&lt;li&gt;Case study &amp;ndash; Command injection via ping&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Script injection&lt;/li&gt;&lt;li&gt;Dangerous file inclusion&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;DAY 2 &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The OWASP Top Ten&lt;/strong&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A2 - Broken Authentication
&lt;ul&gt;
&lt;li&gt;Authentication
&lt;ul&gt;
&lt;li&gt;Authentication basics&lt;/li&gt;&lt;li&gt;Multi-factor authentication&lt;/li&gt;&lt;li&gt;Multi-factor authentication best practices&lt;/li&gt;&lt;li&gt;Authentication weaknesses - spoofing&lt;/li&gt;&lt;li&gt;Spoofing on the Web&lt;/li&gt;&lt;li&gt;Case study &amp;ndash; PayPal 2FA bypass&lt;/li&gt;&lt;li&gt;User interface best practices&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Single sign-on (SSO)
&lt;ul&gt;
&lt;li&gt;Single sign-on concept&lt;/li&gt;&lt;li&gt;OAuth2
&lt;ul&gt;
&lt;li&gt;OAuth2 basics&lt;/li&gt;&lt;li&gt;OAuth2 in practice&lt;/li&gt;&lt;li&gt;Best practices&lt;/li&gt;&lt;li&gt;Configuration best practices&lt;/li&gt;&lt;li&gt;Case study &amp;ndash; Stealing SSO tokens from Epic Games accounts&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;SAML
&lt;ul&gt;
&lt;li&gt;SAML basics&lt;/li&gt;&lt;li&gt;SAML profiles&lt;/li&gt;&lt;li&gt;SAML security&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Password management
&lt;ul&gt;
&lt;li&gt;Inbound password management
&lt;ul&gt;
&lt;li&gt;Storing account passwords&lt;/li&gt;&lt;li&gt;Password in transit&lt;/li&gt;&lt;li&gt;Lab &amp;ndash; Is just hashing passwords enough?&lt;/li&gt;&lt;li&gt;Dictionary attacks and brute forcing&lt;/li&gt;&lt;li&gt;Salting&lt;/li&gt;&lt;li&gt;Adaptive hash functions for password storage&lt;/li&gt;&lt;li&gt;Lab &amp;ndash; Using adaptive hash functions in C#&lt;/li&gt;&lt;li&gt;Password policy&lt;/li&gt;&lt;li&gt;NIST authenticator requirements for memorized secrets&lt;/li&gt;&lt;li&gt;Password hardening&lt;/li&gt;&lt;li&gt;Using passphrases&lt;/li&gt;&lt;li&gt;Password change&lt;/li&gt;&lt;li&gt;Password recovery issues&lt;/li&gt;&lt;li&gt;Password recovery best practices&lt;/li&gt;&lt;li&gt;Lab &amp;ndash; Password reset weakness&lt;/li&gt;&lt;li&gt;Case study &amp;ndash; The Ashley Madison data breach&lt;/li&gt;&lt;li&gt;The dictionary attack&lt;/li&gt;&lt;li&gt;The ultimate crack&lt;/li&gt;&lt;li&gt;Exploitation and the lessons learned&lt;/li&gt;&lt;li&gt;Password database migration&lt;/li&gt;&lt;li&gt;(Mis)handling null passwords&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Outbound password management
&lt;ul&gt;
&lt;li&gt;Hard coded passwords&lt;/li&gt;&lt;li&gt;Best practices&lt;/li&gt;&lt;li&gt;Lab &amp;ndash; Hardcoded password&lt;/li&gt;&lt;li&gt;Protecting sensitive information in memory&lt;/li&gt;&lt;li&gt;Challenges in protecting memory&lt;/li&gt;&lt;li&gt;Storing sensitive data in memory&lt;/li&gt;&lt;li&gt;Lab &amp;ndash; Using secret-handling classes in C#&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Session management
&lt;ul&gt;
&lt;li&gt;Session management essentials&lt;/li&gt;&lt;li&gt;Why do we protect session IDs &amp;ndash; Session hijacking&lt;/li&gt;&lt;li&gt;Session fixation&lt;/li&gt;&lt;li&gt;Session invalidation&lt;/li&gt;&lt;li&gt;Session ID best practices&lt;/li&gt;&lt;li&gt;Cross-site Request Forgery (CSRF)
&lt;ul&gt;
&lt;li&gt;Lab &amp;ndash; Cross-site Request Forgery&lt;/li&gt;&lt;li&gt;CSRF best practices&lt;/li&gt;&lt;li&gt;CSRF defense in depth&lt;/li&gt;&lt;li&gt;Lab &amp;ndash; CSRF protection with tokens&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Cookie security
&lt;ul&gt;
&lt;li&gt;Cookie security best practices&lt;/li&gt;&lt;li&gt;Cookie attributes&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;A3 - Sensitive Data Exposure
&lt;ul&gt;
&lt;li&gt;Information exposure&lt;/li&gt;&lt;li&gt;Exposure through extracted data and aggregation&lt;/li&gt;&lt;li&gt;Case study &amp;ndash; Strava data exposure&lt;/li&gt;&lt;li&gt;System information leakage
&lt;ul&gt;
&lt;li&gt;Leaking system information&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Information exposure best practices&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;A4 - XML External Entities (XXE)
&lt;ul&gt;
&lt;li&gt;DTD and the entities&lt;/li&gt;&lt;li&gt;Entity expansion&lt;/li&gt;&lt;li&gt;External Entity Attack (XXE)
&lt;ul&gt;
&lt;li&gt;File inclusion with external entities&lt;/li&gt;&lt;li&gt;Server-Side Request Forgery with external entities&lt;/li&gt;&lt;li&gt;Lab &amp;ndash; External entity attack&lt;/li&gt;&lt;li&gt;Case study &amp;ndash; XXE vulnerability in SAP Store&lt;/li&gt;&lt;li&gt;Preventing XXE&lt;/li&gt;&lt;li&gt;Lab &amp;ndash; Prohibiting DTD&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;DAY 3&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The OWASP Top Ten&lt;/strong&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A5 - Broken Access Control
&lt;ul&gt;
&lt;li&gt;Access control basics&lt;/li&gt;&lt;li&gt;Failure to restrict URL access&lt;/li&gt;&lt;li&gt;Confused deputy
&lt;ul&gt;
&lt;li&gt;Insecure direct object reference (IDOR)&lt;/li&gt;&lt;li&gt;Lab &amp;ndash; Insecure Direct Object Reference&lt;/li&gt;&lt;li&gt;Case study &amp;ndash; Authorization bypass on Facebook&lt;/li&gt;&lt;li&gt;Authorization bypass through user-controlled keys&lt;/li&gt;&lt;li&gt;Lab &amp;ndash; Horizontal authorization&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;File upload
&lt;ul&gt;
&lt;li&gt;Unrestricted file upload&lt;/li&gt;&lt;li&gt;Good practices&lt;/li&gt;&lt;li&gt;Lab &amp;ndash; Unrestricted file upload&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;A7 - Cross-site Scripting (XSS)
&lt;ul&gt;
&lt;li&gt;Cross-site scripting basics&lt;/li&gt;&lt;li&gt;Cross-site scripting types
&lt;ul&gt;
&lt;li&gt;Persistent cross-site scripting&lt;/li&gt;&lt;li&gt;Reflected cross-site scripting&lt;/li&gt;&lt;li&gt;Client-side (DOM-based) cross-site scripting&lt;/li&gt;&lt;li&gt;Lab &amp;ndash; Stored XSS&lt;/li&gt;&lt;li&gt;Lab &amp;ndash; Reflected XSS&lt;/li&gt;&lt;li&gt;Case study &amp;ndash; XSS in Fortnite accounts&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;XSS protection best practices
&lt;ul&gt;
&lt;li&gt;Protection principles - escaping&lt;/li&gt;&lt;li&gt;XSS protection APIs&lt;/li&gt;&lt;li&gt;Request validation in ASP.NET&lt;/li&gt;&lt;li&gt;Further XSS protection techniques&lt;/li&gt;&lt;li&gt;Lab &amp;ndash; XSS fix / stored&lt;/li&gt;&lt;li&gt;Lab &amp;ndash; XSS fix / reflected&lt;/li&gt;&lt;li&gt;Additional protection layers&lt;/li&gt;&lt;li&gt;Client-side protection principles&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;A8 - Insecure Deserialization
&lt;ul&gt;
&lt;li&gt;Serialization and deserialization challenges&lt;/li&gt;&lt;li&gt;Integrity &amp;ndash; deserializing untrusted streams&lt;/li&gt;&lt;li&gt;Integrity &amp;ndash; deserialization best practices&lt;/li&gt;&lt;li&gt;Property Oriented Programming (POP)
&lt;ul&gt;
&lt;li&gt;Creating payload&lt;/li&gt;&lt;li&gt;Summary &amp;ndash; POP best practices&lt;/li&gt;&lt;li&gt;Lab &amp;ndash; Creating a POP payload&lt;/li&gt;&lt;li&gt;Lab &amp;ndash; Using the POP payload&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;A9 - Using Components with Known Vulnerabilities
&lt;ul&gt;
&lt;li&gt;Using vulnerable components&lt;/li&gt;&lt;li&gt;Assessing the environment&lt;/li&gt;&lt;li&gt;Hardening&lt;/li&gt;&lt;li&gt;Untrusted functionality import&lt;/li&gt;&lt;li&gt;Importing JavaScript&lt;/li&gt;&lt;li&gt;Lab &amp;ndash; Importing JavaScript&lt;/li&gt;&lt;li&gt;Case study &amp;ndash; The British Airways data breach&lt;/li&gt;&lt;li&gt;Vulnerability management
&lt;ul&gt;
&lt;li&gt;Patch management&lt;/li&gt;&lt;li&gt;Vulnerability management&lt;/li&gt;&lt;li&gt;Bug bounty programs&lt;/li&gt;&lt;li&gt;Vulnerability databases&lt;/li&gt;&lt;li&gt;Vulnerability rating &amp;ndash; CVSS&lt;/li&gt;&lt;li&gt;Lab &amp;ndash; Finding vulnerabilities in third-party components&lt;/li&gt;&lt;li&gt;DevOps, the build process and CI / CD&lt;/li&gt;&lt;li&gt;Dependency checking in C#&lt;/li&gt;&lt;li&gt;Lab &amp;ndash; Detecting vulnerable components&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;A10 - Insufficient Logging &amp;amp; Monitoring
&lt;ul&gt;
&lt;li&gt;Logging and monitoring principles&lt;/li&gt;&lt;li&gt;Insufficient logging&lt;/li&gt;&lt;li&gt;Case study &amp;ndash; Plaintext passwords at Facebook&lt;/li&gt;&lt;li&gt;Logging best practices&lt;/li&gt;&lt;li&gt;Monitoring best practices&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;Web application security beyond the Top Ten&lt;/strong&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Client-side security&lt;/li&gt;&lt;li&gt;Same Origin Policy&lt;/li&gt;&lt;li&gt;Tabnabbing&lt;/li&gt;&lt;li&gt;Lab &amp;ndash; Reverse tabnabbing&lt;/li&gt;&lt;li&gt;Frame sandboxing
&lt;ul&gt;
&lt;li&gt;Cross-Frame Scripting (XFS) attack&lt;/li&gt;&lt;li&gt;Lab - Clickjacking&lt;/li&gt;&lt;li&gt;Clickjacking beyond hijacking a click&lt;/li&gt;&lt;li&gt;Clickjacking protection best practices&lt;/li&gt;&lt;li&gt;Lab &amp;ndash; Using CSP to prevent clickjacking&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;DAY 4&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Cloud infrastructure security&lt;/strong&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Container security
&lt;ul&gt;
&lt;li&gt;Container security concerns&lt;/li&gt;&lt;li&gt;Containerization, virtualization, and security&lt;/li&gt;&lt;li&gt;Attack surface of container technologies&lt;/li&gt;&lt;li&gt;Container security tools&lt;/li&gt;&lt;li&gt;Docker security
&lt;ul&gt;
&lt;li&gt;Docker and security&lt;/li&gt;&lt;li&gt;Docker security features&lt;/li&gt;&lt;li&gt;Common Docker security mistakes&lt;/li&gt;&lt;li&gt;Docker security best practices&lt;/li&gt;&lt;li&gt;Hardening Docker&lt;/li&gt;&lt;li&gt;Lab &amp;ndash; Static analysis of Docker image&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Kubernetes security
&lt;ul&gt;
&lt;li&gt;The Kubernetes architecture and security&lt;/li&gt;&lt;li&gt;Common Kubernetes security mistakes&lt;/li&gt;&lt;li&gt;Securing Kubernetes hosts&lt;/li&gt;&lt;li&gt;Best practices for Kubernetes access control&lt;/li&gt;&lt;li&gt;Building secure Kubernetes images&lt;/li&gt;&lt;li&gt;Secure deployment of Kubernetes containers&lt;/li&gt;&lt;li&gt;Protecting Kubernetes deployments at runtime&lt;/li&gt;&lt;li&gt;Lab &amp;ndash; Scanning a Kubernetes image for vulnerabilities&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Azure security
&lt;ul&gt;
&lt;li&gt;Security considerations for Azure
&lt;ul&gt;
&lt;li&gt;Azure and security&lt;/li&gt;&lt;li&gt;Azure security features&lt;/li&gt;&lt;li&gt;The Azure shared responsibility model&lt;/li&gt;&lt;li&gt;Azure cloud compliance&lt;/li&gt;&lt;li&gt;Azure hardening&lt;/li&gt;&lt;li&gt;Security tools for Azure&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Identity and access management (IAM)
&lt;ul&gt;
&lt;li&gt;Identity and access management in Azure&lt;/li&gt;&lt;li&gt;Azure Active Directory&lt;/li&gt;&lt;li&gt;Multi-factor authentication with Azure&lt;/li&gt;&lt;li&gt;Azure RBAC&lt;/li&gt;&lt;li&gt;Azure Active Directory Federation Services&lt;/li&gt;&lt;li&gt;Azure Shared Access Signatures (SAS)&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Data security
&lt;ul&gt;
&lt;li&gt;Data security in Azure&lt;/li&gt;&lt;li&gt;Storing cryptographic keys in Azure&lt;/li&gt;&lt;li&gt;Protecting data in transit&lt;/li&gt;&lt;li&gt;Protecting data at rest&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Detection and monitoring
&lt;ul&gt;
&lt;li&gt;Utilizing Azure monitoring for security&lt;/li&gt;&lt;li&gt;The Azure Application Gateway WAF&lt;/li&gt;&lt;li&gt;The Azure Security Center&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;API security&lt;/strong&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Input validation
&lt;ul&gt;
&lt;li&gt;Input validation principles&lt;/li&gt;&lt;li&gt;Blacklists and whitelists&lt;/li&gt;&lt;li&gt;Data validation techniques&lt;/li&gt;&lt;li&gt;Lab &amp;ndash; Input validation&lt;/li&gt;&lt;li&gt;What to validate &amp;ndash; the attack surface&lt;/li&gt;&lt;li&gt;Where to validate &amp;ndash; defense in depth&lt;/li&gt;&lt;li&gt;When to validate &amp;ndash; validation vs transformations&lt;/li&gt;&lt;li&gt;Output sanitization&lt;/li&gt;&lt;li&gt;Encoding challenges&lt;/li&gt;&lt;li&gt;Unicode challenges&lt;/li&gt;&lt;li&gt;Lab &amp;ndash; Encoding challenges&lt;/li&gt;&lt;li&gt;Validation with regex&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Integer handling problems
&lt;ul&gt;
&lt;li&gt;Representing signed numbers&lt;/li&gt;&lt;li&gt;Integer visualization&lt;/li&gt;&lt;li&gt;Integer overflow&lt;/li&gt;&lt;li&gt;Lab &amp;ndash; Integer overflow&lt;/li&gt;&lt;li&gt;Signed / unsigned confusion&lt;/li&gt;&lt;li&gt;Case study &amp;ndash; The Stockholm Stock Exchange&lt;/li&gt;&lt;li&gt;Lab &amp;ndash; Signed / unsigned confusion&lt;/li&gt;&lt;li&gt;Integer truncation&lt;/li&gt;&lt;li&gt;Best practices
&lt;ul&gt;
&lt;li&gt;Upcasting&lt;/li&gt;&lt;li&gt;Precondition testing&lt;/li&gt;&lt;li&gt;Postcondition testing&lt;/li&gt;&lt;li&gt;Using big integer libraries&lt;/li&gt;&lt;li&gt;Integer handling in C#&lt;/li&gt;&lt;li&gt;Lab &amp;ndash; Checked arithmetics&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;JSON security&lt;/strong&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;JSON validation&lt;/li&gt;&lt;li&gt;JSON injection&lt;/li&gt;&lt;li&gt;Dangers of JSONP&lt;/li&gt;&lt;li&gt;JSON/JavaScript hijacking&lt;/li&gt;&lt;li&gt;Best practices&lt;/li&gt;&lt;li&gt;Case study &amp;ndash; ReactJS vulnerability in HackerOne&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;DAY 5&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;API security&lt;/strong&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Input validation
&lt;ul&gt;
&lt;li&gt;Files and streams
&lt;ul&gt;
&lt;li&gt;Path traversal&lt;/li&gt;&lt;li&gt;Lab &amp;ndash; Path traversal&lt;/li&gt;&lt;li&gt;Path traversal-related examples&lt;/li&gt;&lt;li&gt;Additional challenges in Windows&lt;/li&gt;&lt;li&gt;Virtual resources&lt;/li&gt;&lt;li&gt;Path traversal best practices&lt;/li&gt;&lt;li&gt;Lab &amp;ndash; Path canonicalization&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Unsafe reflection
&lt;ul&gt;
&lt;li&gt;Reflection without validation&lt;/li&gt;&lt;li&gt;Lab &amp;ndash; Unsafe reflection&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;XML security&lt;/strong&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;XML validation&lt;/li&gt;&lt;li&gt;XML injection
&lt;ul&gt;
&lt;li&gt;XPath injection&lt;/li&gt;&lt;li&gt;Blind XPath injection&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;Denial of service&lt;/strong&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Denial of Service&lt;/li&gt;&lt;li&gt;Flooding&lt;/li&gt;&lt;li&gt;Resource exhaustion&lt;/li&gt;&lt;li&gt;Sustained client engagement&lt;/li&gt;&lt;li&gt;Denial of service problems in C#&lt;/li&gt;&lt;li&gt;Infinite loop&lt;/li&gt;&lt;li&gt;Economic Denial of Sustainability (EDoS)&lt;/li&gt;&lt;li&gt;Algorithm complexity issues
&lt;ul&gt;
&lt;li&gt;Regular expression denial of service (ReDoS)
&lt;ul&gt;
&lt;li&gt;Lab &amp;ndash; ReDoS in C#&lt;/li&gt;&lt;li&gt;Dealing with ReDoS&lt;/li&gt;&lt;li&gt;Hash table collision
&lt;ul&gt;
&lt;li&gt;How do hash tables work?&lt;/li&gt;&lt;li&gt;Hash collision in case of hash tables&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;Cryptography for developers&lt;/strong&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Cryptography basics&lt;/li&gt;&lt;li&gt;Crypto APIs in C#&lt;/li&gt;&lt;li&gt;Elementary algorithms
&lt;ul&gt;
&lt;li&gt;Hashing
&lt;ul&gt;
&lt;li&gt;Hashing basics&lt;/li&gt;&lt;li&gt;Hashing in C#&lt;/li&gt;&lt;li&gt;Lab &amp;ndash; Hashing in C#&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Confidentiality protection
&lt;ul&gt;
&lt;li&gt;Symmetric encryption
&lt;ul&gt;
&lt;li&gt;Block ciphers&lt;/li&gt;&lt;li&gt;Modes of operation&lt;/li&gt;&lt;li&gt;Modes of operation and IV &amp;ndash; best practices&lt;/li&gt;&lt;li&gt;Symmetric encryption in C#&lt;/li&gt;&lt;li&gt;Symmetric encryption in C# with streams&lt;/li&gt;&lt;li&gt;ProtectedData and ProtectedMemory&lt;/li&gt;&lt;li&gt;Lab &amp;ndash; Symmetric encryption in in C#&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Asymmetric encryption&lt;/li&gt;&lt;li&gt;Combining symmetric and asymmetric algorithms&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Integrity protection
&lt;ul&gt;
&lt;li&gt;Message Authentication Code (MAC)
&lt;ul&gt;
&lt;li&gt;Calculating HMAC in C#&lt;/li&gt;&lt;li&gt;Lab &amp;ndash; Calculating MAC in C#&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Digital signature
&lt;ul&gt;
&lt;li&gt;Lab &amp;ndash; Digital signature with ECDSA in C#&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Public Key Infrastructure (PKI)
&lt;ul&gt;
&lt;li&gt;Some further key management challenges&lt;/li&gt;&lt;li&gt;Certificates
&lt;ul&gt;
&lt;li&gt;Certificate management &amp;ndash; best practices&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Transport security
&lt;ul&gt;
&lt;li&gt;Transport security weaknesses&lt;/li&gt;&lt;li&gt;The TLS protocol
&lt;ul&gt;
&lt;li&gt;TLS basics&lt;/li&gt;&lt;li&gt;TLS features (changes in v1.3)&lt;/li&gt;&lt;li&gt;The handshake in a nutshell (v1.3)&lt;/li&gt;&lt;li&gt;TLS best practices&lt;/li&gt;&lt;li&gt;TLS authentication best practices&lt;/li&gt;&lt;li&gt;HTTP Strict Transport Security (HSTS)&lt;/li&gt;&lt;li&gt;Lab &amp;ndash; Setting HSTS in C#&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;Wrap up&lt;/strong&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Secure coding principles
&lt;ul&gt;
&lt;li&gt;Principles of robust programming by Matt Bishop&lt;/li&gt;&lt;li&gt;Secure design principles of Saltzer and Schr&amp;ouml;der&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;And now what?
&lt;ul&gt;
&lt;li&gt;Software security sources and further reading&lt;/li&gt;&lt;li&gt;.NET and C# resources&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;</outline><objective_plain>- Getting familiar with essential cyber security concepts
- Understand cloud security specialties
- Understanding Web application security issues
- Detailed analysis of the OWASP Top Ten elements
- Putting Web application security in the context of C#
- Going beyond the low hanging fruits
- Managing vulnerabilities in third party components
- Learn to deal with cloud infrastructure security
- Identify vulnerabilities and their consequences
- Learn the security best practices in C#
- Input validation approaches and principles
- Understanding how cryptography can support application security
- Learning how to use cryptographic APIs correctly in C#
-</objective_plain><essentials_plain>General C# and Web development</essentials_plain><audience_plain>C# developers working on Web applications and Azure</audience_plain><contents_plain>- Cyber security basics
- The OWASP Top Ten
- Cloud infrastructure security
- API security
- JSON security
- XML security
- Denial of service
- Cryptography for developers
- Wrap up</contents_plain><outline_plain>DAY 1 

Cyber security basics



- What is security?
- Threat and risk
- Cyber security threat types
- Consequences of insecure software

- Constraints and the market
- The dark side
- Cloud security basics

- Cloud infrastructure basics
- Cloud architectures and security
- The Cloud Cube Model
- Attack surface in the cloud
- Cloud data security

- Data confidentiality and integrity in the cloud
- Data privacy in the cloud
- Compliance considerations
- Cloud deployment security

- Hardening cloud deployments
- Security of jump boxes
- Serverless computing and security
- Cloud security standards and best practices

- SOC compliance
- CSA controls
- Other standards
The OWASP Top Ten



- OWASP Top 10 – 2017
- A1 - Injection

- Injection principles
- Injection attacks
- SQL injection

- SQL injection basics
- Lab – SQL injection
- Attack techniques
- Content-based blind SQL injection
- Time-based blind SQL injection
- NoSQL injection

- NoSQL injection specialties
- NoSQL injection in MongoDB
- NoSQL injection in CosmosDB
- SQL injection best practices

- Input validation
- Parameterized queries
- Lab – Using prepared statements
- Additional considerations
- Case study – Hacking Fortnite accounts
- SQL injection protection and ORM
- Parameter manipulation

- CRLF injection

- Log forging
- Log forging – best practices
- HTTP response splitting
- Header checking in ASP.NET
- HTTP parameter manipulation

- HTTP parameter pollution
- Variable shadowing
- Value shadowing
- Code injection

- OS command injection

- Lab – Command injection
- OS command injection best practices
- Avoiding command injection with the right APIs
- Lab – Command injection best practices
- Case study – Command injection via ping
- Script injection
- Dangerous file inclusion
DAY 2 

The OWASP Top Ten



- A2 - Broken Authentication

- Authentication

- Authentication basics
- Multi-factor authentication
- Multi-factor authentication best practices
- Authentication weaknesses - spoofing
- Spoofing on the Web
- Case study – PayPal 2FA bypass
- User interface best practices
- Single sign-on (SSO)

- Single sign-on concept
- OAuth2

- OAuth2 basics
- OAuth2 in practice
- Best practices
- Configuration best practices
- Case study – Stealing SSO tokens from Epic Games accounts
- SAML

- SAML basics
- SAML profiles
- SAML security
- Password management

- Inbound password management

- Storing account passwords
- Password in transit
- Lab – Is just hashing passwords enough?
- Dictionary attacks and brute forcing
- Salting
- Adaptive hash functions for password storage
- Lab – Using adaptive hash functions in C#
- Password policy
- NIST authenticator requirements for memorized secrets
- Password hardening
- Using passphrases
- Password change
- Password recovery issues
- Password recovery best practices
- Lab – Password reset weakness
- Case study – The Ashley Madison data breach
- The dictionary attack
- The ultimate crack
- Exploitation and the lessons learned
- Password database migration
- (Mis)handling null passwords
- Outbound password management

- Hard coded passwords
- Best practices
- Lab – Hardcoded password
- Protecting sensitive information in memory
- Challenges in protecting memory
- Storing sensitive data in memory
- Lab – Using secret-handling classes in C#
- Session management

- Session management essentials
- Why do we protect session IDs – Session hijacking
- Session fixation
- Session invalidation
- Session ID best practices
- Cross-site Request Forgery (CSRF)

- Lab – Cross-site Request Forgery
- CSRF best practices
- CSRF defense in depth
- Lab – CSRF protection with tokens
- Cookie security

- Cookie security best practices
- Cookie attributes
- A3 - Sensitive Data Exposure

- Information exposure
- Exposure through extracted data and aggregation
- Case study – Strava data exposure
- System information leakage

- Leaking system information
- Information exposure best practices
- A4 - XML External Entities (XXE)

- DTD and the entities
- Entity expansion
- External Entity Attack (XXE)

- File inclusion with external entities
- Server-Side Request Forgery with external entities
- Lab – External entity attack
- Case study – XXE vulnerability in SAP Store
- Preventing XXE
- Lab – Prohibiting DTD
DAY 3

The OWASP Top Ten



- A5 - Broken Access Control

- Access control basics
- Failure to restrict URL access
- Confused deputy

- Insecure direct object reference (IDOR)
- Lab – Insecure Direct Object Reference
- Case study – Authorization bypass on Facebook
- Authorization bypass through user-controlled keys
- Lab – Horizontal authorization
- File upload

- Unrestricted file upload
- Good practices
- Lab – Unrestricted file upload
- A7 - Cross-site Scripting (XSS)

- Cross-site scripting basics
- Cross-site scripting types

- Persistent cross-site scripting
- Reflected cross-site scripting
- Client-side (DOM-based) cross-site scripting
- Lab – Stored XSS
- Lab – Reflected XSS
- Case study – XSS in Fortnite accounts
- XSS protection best practices

- Protection principles - escaping
- XSS protection APIs
- Request validation in ASP.NET
- Further XSS protection techniques
- Lab – XSS fix / stored
- Lab – XSS fix / reflected
- Additional protection layers
- Client-side protection principles
- A8 - Insecure Deserialization

- Serialization and deserialization challenges
- Integrity – deserializing untrusted streams
- Integrity – deserialization best practices
- Property Oriented Programming (POP)

- Creating payload
- Summary – POP best practices
- Lab – Creating a POP payload
- Lab – Using the POP payload
- A9 - Using Components with Known Vulnerabilities

- Using vulnerable components
- Assessing the environment
- Hardening
- Untrusted functionality import
- Importing JavaScript
- Lab – Importing JavaScript
- Case study – The British Airways data breach
- Vulnerability management

- Patch management
- Vulnerability management
- Bug bounty programs
- Vulnerability databases
- Vulnerability rating – CVSS
- Lab – Finding vulnerabilities in third-party components
- DevOps, the build process and CI / CD
- Dependency checking in C#
- Lab – Detecting vulnerable components
- A10 - Insufficient Logging &amp; Monitoring

- Logging and monitoring principles
- Insufficient logging
- Case study – Plaintext passwords at Facebook
- Logging best practices
- Monitoring best practices
Web application security beyond the Top Ten



- Client-side security
- Same Origin Policy
- Tabnabbing
- Lab – Reverse tabnabbing
- Frame sandboxing

- Cross-Frame Scripting (XFS) attack
- Lab - Clickjacking
- Clickjacking beyond hijacking a click
- Clickjacking protection best practices
- Lab – Using CSP to prevent clickjacking
DAY 4

Cloud infrastructure security



- Container security

- Container security concerns
- Containerization, virtualization, and security
- Attack surface of container technologies
- Container security tools
- Docker security

- Docker and security
- Docker security features
- Common Docker security mistakes
- Docker security best practices
- Hardening Docker
- Lab – Static analysis of Docker image
- Kubernetes security

- The Kubernetes architecture and security
- Common Kubernetes security mistakes
- Securing Kubernetes hosts
- Best practices for Kubernetes access control
- Building secure Kubernetes images
- Secure deployment of Kubernetes containers
- Protecting Kubernetes deployments at runtime
- Lab – Scanning a Kubernetes image for vulnerabilities
- Azure security

- Security considerations for Azure

- Azure and security
- Azure security features
- The Azure shared responsibility model
- Azure cloud compliance
- Azure hardening
- Security tools for Azure
- Identity and access management (IAM)

- Identity and access management in Azure
- Azure Active Directory
- Multi-factor authentication with Azure
- Azure RBAC
- Azure Active Directory Federation Services
- Azure Shared Access Signatures (SAS)
- Data security

- Data security in Azure
- Storing cryptographic keys in Azure
- Protecting data in transit
- Protecting data at rest
- Detection and monitoring

- Utilizing Azure monitoring for security
- The Azure Application Gateway WAF
- The Azure Security Center
API security



- Input validation

- Input validation principles
- Blacklists and whitelists
- Data validation techniques
- Lab – Input validation
- What to validate – the attack surface
- Where to validate – defense in depth
- When to validate – validation vs transformations
- Output sanitization
- Encoding challenges
- Unicode challenges
- Lab – Encoding challenges
- Validation with regex
- Integer handling problems

- Representing signed numbers
- Integer visualization
- Integer overflow
- Lab – Integer overflow
- Signed / unsigned confusion
- Case study – The Stockholm Stock Exchange
- Lab – Signed / unsigned confusion
- Integer truncation
- Best practices

- Upcasting
- Precondition testing
- Postcondition testing
- Using big integer libraries
- Integer handling in C#
- Lab – Checked arithmetics
JSON security



- JSON validation
- JSON injection
- Dangers of JSONP
- JSON/JavaScript hijacking
- Best practices
- Case study – ReactJS vulnerability in HackerOne
DAY 5

API security



- Input validation

- Files and streams

- Path traversal
- Lab – Path traversal
- Path traversal-related examples
- Additional challenges in Windows
- Virtual resources
- Path traversal best practices
- Lab – Path canonicalization
- Unsafe reflection

- Reflection without validation
- Lab – Unsafe reflection
XML security



- XML validation
- XML injection

- XPath injection
- Blind XPath injection
Denial of service



- Denial of Service
- Flooding
- Resource exhaustion
- Sustained client engagement
- Denial of service problems in C#
- Infinite loop
- Economic Denial of Sustainability (EDoS)
- Algorithm complexity issues

- Regular expression denial of service (ReDoS)

- Lab – ReDoS in C#
- Dealing with ReDoS
- Hash table collision

- How do hash tables work?
- Hash collision in case of hash tables
Cryptography for developers



- Cryptography basics
- Crypto APIs in C#
- Elementary algorithms

- Hashing

- Hashing basics
- Hashing in C#
- Lab – Hashing in C#
- Confidentiality protection

- Symmetric encryption

- Block ciphers
- Modes of operation
- Modes of operation and IV – best practices
- Symmetric encryption in C#
- Symmetric encryption in C# with streams
- ProtectedData and ProtectedMemory
- Lab – Symmetric encryption in in C#
- Asymmetric encryption
- Combining symmetric and asymmetric algorithms
- Integrity protection

- Message Authentication Code (MAC)

- Calculating HMAC in C#
- Lab – Calculating MAC in C#
- Digital signature

- Lab – Digital signature with ECDSA in C#
- Public Key Infrastructure (PKI)

- Some further key management challenges
- Certificates

- Certificate management – best practices
- Transport security

- Transport security weaknesses
- The TLS protocol

- TLS basics
- TLS features (changes in v1.3)
- The handshake in a nutshell (v1.3)
- TLS best practices
- TLS authentication best practices
- HTTP Strict Transport Security (HSTS)
- Lab – Setting HSTS in C#
Wrap up



- Secure coding principles

- Principles of robust programming by Matt Bishop
- Secure design principles of Saltzer and Schröder
- And now what?

- Software security sources and further reading
- .NET and C# resources</outline_plain><duration unit="d" days="5">5 Tage</duration><pricelist><price country="GB" currency="EUR">3750.00</price><price country="SI" currency="EUR">3750.00</price><price country="DE" currency="EUR">3750.00</price><price country="IT" currency="EUR">3750.00</price><price country="NL" currency="EUR">3750.00</price><price country="BE" currency="EUR">3750.00</price><price country="FR" currency="EUR">3750.00</price><price country="AT" currency="EUR">3750.00</price><price country="MK" currency="EUR">3750.00</price><price country="GR" currency="EUR">3750.00</price><price country="HU" currency="EUR">3750.00</price></pricelist><miles/></course>