Tutorial 1.13: Secure Software Development and DevSecOps

Table of Contents

Learning Objectives

Upon completion of this tutorial, you will be able to:

  1. Explain the Secure Software Development Lifecycle (SSDLC) and its phases, including security requirements engineering and threat modeling.
  2. Describe the principles of DevSecOps and how security is integrated into CI/CD pipelines.
  3. Analyze the capabilities and limitations of SAST, DAST, IAST, SCA, and fuzzing.
  4. Evaluate software supply chain security practices, including SBOM, code signing, and dependency management.
  5. Apply secure design principles (least privilege, defense in depth, fail-safe defaults) to software architecture.
  6. Design a DevSecOps pipeline that incorporates automated security testing at multiple stages.
  7. Assess the risks associated with open source dependencies and propose mitigation strategies.
  8. Investigate real-world vulnerabilities and attacks (Log4j, SolarWinds) to derive defensive lessons.

Overview

Throughout Unit 1, we have explored the foundational concepts of computer and network security—from the CIA triad and threat modeling to malware analysis, DDoS defenses, and incident response. We have examined how security controls are deployed in networks, endpoints, and cloud environments. However, a critical question remains: How do we build security into the software we develop? Vulnerabilities in application code are the root cause of many breaches, and building secure software requires a fundamentally different mindset from traditional development.

This tutorial addresses the intersection of security and software development, covering Secure Software Development and DevSecOps. These disciplines ensure that security is not an afterthought but an integral part of the software development lifecycle. By embedding security into every phase—from requirements and design to coding, testing, and deployment—organizations can significantly reduce the risk of vulnerabilities making it into production.

We begin by exploring the Secure Software Development Lifecycle (SSDLC), which extends traditional SDLC models (Waterfall, Agile) with security-specific activities. We examine security requirements engineering, threat modeling, and secure design principles that prevent vulnerabilities at the architectural level. The principle of "shift-left"—performing security activities earlier in the development process—is central to this approach.

We then delve into DevSecOps, the practice of integrating security into DevOps pipelines. DevSecOps treats security as a shared responsibility across development, security, and operations teams. We examine how security controls—static analysis, dependency scanning, container scanning—are embedded into CI/CD pipelines to enable automated, continuous security validation.

We explore application security testing methodologies, including SAST (Static Application Security Testing), DAST (Dynamic Application Security Testing), IAST (Interactive Application Security Testing), SCA (Software Composition Analysis), and fuzzing. Each technique has strengths and limitations, and we discuss how they complement each other in a comprehensive testing strategy.

We then examine software supply chain security, a critical area highlighted by attacks such as SolarWinds and the Log4j vulnerability. We discuss the Software Bill of Materials (SBOM), code integrity and signing, and dependency management practices that mitigate supply-chain risks.

Throughout the tutorial, we apply these concepts to real-world case studies, including the SolarWinds supply-chain attack, the Log4j vulnerability, and DevSecOps success stories. By the end of this tutorial, you will have a comprehensive understanding of how to build and maintain secure software in modern development environments.


5.1 The Secure Software Development Lifecycle (SSDLC)

5.1.1 SSDLC Phases and Activities

The Secure Software Development Lifecycle (SSDLC) integrates security activities into each phase of development. Key phases include:

Assumption: Security activities are integrated into existing development workflows. In practice, adding security can be seen as a burden, requiring cultural change and automation to reduce friction.

5.1.2 Security Requirements Engineering

Security requirements should be defined early. Common security requirements include:

5.1.3 Threat Modeling in Development

Threat modeling is a structured process for identifying, prioritizing, and mitigating threats to a system. In the context of development, threat modeling occurs during the design phase. The STRIDE framework (Spoofing, Tampering, Repudiation, Information Disclosure, Denial of Service, Elevation of Privilege) is commonly used.

Process: 1) Decompose the application (data flows, trust boundaries); 2) Identify threats (STRIDE); 3) Prioritize risks (DREAD); 4) Design mitigations.

Assumption: Developers can effectively threat model. In practice, threat modeling requires specialized skills and may be time-consuming.

5.1.4 Secure Design Principles

Secure design principles guide the architecture of software:

Figure 13.1: Secure SDLC Integration

+-----------------------------------------------------------+ | SECURE SDLC INTEGRATION | | | | +------------------+ +------------------+ | | | REQUIREMENTS | | DESIGN | | | | • Security Req | | • Threat Model | | | | • Risk Assess | | • Secure Design | | | +------------------+ +------------------+ | | | | | | +----------+----------+ | | | | | +------------------+ | | | DEVELOPMENT | | | | • Secure Coding | | | | • SAST | | | | • Code Review | | | +------------------+ | | | | | +------------------+ | | | TESTING | | | | • DAST/IAST | | | | • SCA/Fuzzing | | | | • Pen Testing | | | +------------------+ | | | | | +------------------+ | | | DEPLOYMENT | | | | • IaC Scanning | | | | • Container Sec | | | | • Config Valid. | | | +------------------+ | | | | | +------------------+ | | | OPERATIONS | | | | • Monitoring | | | | • IR | | | | • Vuln Mgmt | | | +------------------+ | | | | Continuous security feedback loop. | +-----------------------------------------------------------+

5.2 DevSecOps: Integrating Security into DevOps

5.2.1 DevSecOps Principles and Culture

DevSecOps is the integration of security into DevOps practices. It is not just a set of tools but a cultural shift where security is a shared responsibility. Key principles:

5.2.2 CI/CD Pipeline Security

Security is embedded into the CI/CD pipeline at multiple points:

Assumption: The pipeline has sufficient security tools integrated. In practice, tool integration can be complex and may require significant investment.

5.2.3 Shift-Left Security

Shift-left means moving security activities earlier in the development lifecycle. Benefits include:

Shift-left activities include: secure coding training, threat modeling in design, pre-commit security checks, and SAST in the development environment.

5.2.4 DevSecOps Tools and Technologies

A typical DevSecOps pipeline uses a combination of tools:

Table 13.1: DevSecOps Tools by Pipeline Stage

Stage Tool Category Examples Primary Function
Code Commit Pre-commit, Secrets Scanning git-secrets, truffleHog Prevent secrets in code
Build SAST, SCA SonarQube, Snyk Static analysis, dependency scan
Test DAST, IAST, Fuzzing OWASP ZAP, Burp Suite Runtime vulnerability detection
Deployment IaC, Container Scanning Checkov, Trivy Infrastructure and image security
Production WAF, SIEM, EDR AWS WAF, Splunk, CrowdStrike Runtime protection and monitoring

5.3 Application Security Testing

5.3.1 Static Application Security Testing (SAST)

SAST analyzes source code, bytecode, or binaries for vulnerabilities without executing the program. It identifies issues like buffer overflows, SQL injection, and insecure cryptographic practices. SAST is performed early in the SDLC (shift-left).

Advantages: Fast, covers all code paths, can be automated in CI/CD. Limitations: High false positive rates; cannot detect runtime issues; requires language-specific tools.

5.3.2 Dynamic Application Security Testing (DAST)

DAST tests a running application by simulating attacks from the outside. It identifies vulnerabilities such as XSS, SQL injection, and misconfigurations that are only visible at runtime.

Advantages: Finds runtime issues; language-agnostic; low false positives. Limitations: Slower; only tests accessible endpoints; may not cover all code paths.

5.3.3 Interactive Application Security Testing (IAST)

IAST combines SAST and DAST by instrumenting the application during testing. It monitors the application's behavior and identifies vulnerabilities in real-time. IAST provides high accuracy and coverage.

Advantages: Low false positives; high coverage; provides context. Limitations: Requires runtime instrumentation; can impact performance.

5.3.4 Software Composition Analysis (SCA)

SCA identifies open source and third-party dependencies in a codebase and checks them against known vulnerability databases (e.g., NVD, CVE). SCA is critical for managing supply-chain risks.

Advantages: Identifies known vulnerabilities in dependencies; supports compliance. Limitations: Only detects known vulnerabilities; cannot find zero-days.

5.3.5 Fuzzing

Fuzzing (fuzz testing) involves feeding invalid, unexpected, or random data into a program to find crashes and vulnerabilities. Fuzzing is effective for finding memory corruption issues and input validation errors.

Advantages: Finds unexpected bugs; automated. Limitations: Can be computationally expensive; requires setup; may not find logical vulnerabilities.

Table 13.2: Application Security Testing Comparison

Technique Stage What It Finds Pros Cons
SAST Development Code-level vulnerabilities Fast, early detection High false positives
DAST Testing Runtime vulnerabilities Low false positives Slow, limited coverage
IAST Testing Runtime + code context Accurate, comprehensive Instrumentation overhead
SCA Build/Development Dependency vulnerabilities Essential for supply chain Only known vulnerabilities
Fuzzing Testing Memory/input issues Finds unexpected bugs Computationally expensive

5.4 Software Supply Chain Security

5.4.1 Software Bill of Materials (SBOM)

An SBOM is a formal, machine-readable inventory of all components in a software package. It includes dependencies, versions, and licensing information. SBOMs enable organizations to quickly identify and respond to vulnerabilities in their supply chain.

Assumption: SBOMs are generated accurately and maintained. In practice, generating and maintaining SBOMs can be challenging, especially for complex projects.

5.4.2 Code Integrity and Signing

Code signing ensures that code has not been tampered with after it was produced. It provides integrity and authenticity. Code signing is essential for preventing supply-chain attacks where malicious code is inserted into legitimate updates.

Assumption: Signing keys are managed securely. In practice, key management is a significant challenge, and compromised keys have been used in attacks.

5.4.3 Dependency Management

Managing dependencies is critical for security. Best practices include:

5.4.4 Open Source Security Risks

Open source software is widely used but comes with risks:

Mitigation: Use SCA tools, monitor security advisories, and maintain a policy for open source usage.

Figure 13.2: Software Supply Chain Security

+-----------------------------------------------------------+ | SOFTWARE SUPPLY CHAIN SECURITY | | | | +------------------+ +------------------+ | | | OPEN SOURCE | | THIRD-PARTY VENDOR| | | | • Dependency | | • Commercial | | | | scanning (SCA) | | code scanning | | | | • Version | | • Contractual | | | | management | | security req. | | | +------------------+ +------------------+ | | | | | | +----------+----------+ | | | | | +------------------+ | | | BUILD & RELEASE | | | | • Code signing | | | | • Integrity | | | | verification | | | | • SBOM generation| | | +------------------+ | | | | | +------------------+ | | | DEPLOYMENT | | | | • Artifact | | | | verification | | | | • Runtime | | | | monitoring | | | +------------------+ | | | | End-to-end security across the software supply chain. | +-----------------------------------------------------------+

5.5 Case Studies in Secure Development

SolarWinds Supply-Chain Attack (2020)

The SolarWinds attack was a sophisticated supply-chain compromise. Key failures:

Lessons: Build system security must be ensured; code signing alone is not sufficient; SBOMs are essential for incident response.

Log4j Vulnerability (2021)

The Log4j vulnerability (CVE-2021-44228) was a critical remote code execution flaw in a widely used logging library. Key issues:

Lessons: SCA tools are essential for tracking dependencies; vulnerability disclosure and response must be rapid; organizations should have a vulnerability management process for third-party components.

DevSecOps Success: Capital One

Capital One has been recognized for its DevSecOps transformation. Key practices:

Key Takeaway: Secure software development and DevSecOps are not optional—they are critical for building resilient, trustworthy systems. The SolarWinds and Log4j cases demonstrate that vulnerabilities in the development and supply-chain processes can have widespread and devastating consequences.


Quiz: Tutorial 1.13

Test your understanding of secure software development and DevSecOps. Questions range from foundational to advanced analytical levels.

Question 1 (Foundational): Which phase of the SSDLC involves identifying threats and designing mitigations?

Answer
b) Design. Threat modeling is performed during the design phase.

Question 2 (Foundational): Which principle states that security mechanisms should be as simple as possible?

Answer
c) Economy of Mechanism. Simple mechanisms are easier to verify and less likely to have bugs.

Question 3 (Intermediate): Which application security testing technique analyzes code without executing it?

Answer
c) SAST. Static Application Security Testing analyzes source code or binaries.

Question 4 (Intermediate): What is the primary function of Software Composition Analysis (SCA)?

Answer
c) Identify vulnerabilities in third-party dependencies. SCA scans dependencies against known vulnerability databases.

Question 5 (Intermediate): Which DevSecOps practice involves moving security activities earlier in the development process?

Answer
b) Shift-left. It means performing security activities earlier to catch issues sooner.

Question 6 (Intermediate): The Log4j vulnerability (CVE-2021-44228) was significant because it affected:

Answer
b) A widely used logging library in millions of applications. The widespread use of Log4j made the vulnerability highly impactful.

Question 7 (Advanced): Which of the following is a key limitation of SAST?

Answer
b) It has a high false positive rate. SAST often flags many issues that are not actually exploitable.

Question 8 (Advanced): The SolarWinds attack highlighted the importance of which security practice?

Answer
c) Build system integrity and SBOM. The attack compromised the build system, and SBOMs would have helped identify affected artifacts.

Question 9 (Advanced): In a DevSecOps pipeline, where should container image scanning be performed?

Answer
b) During the build and deployment stages. Container scanning should be performed in the CI/CD pipeline before images are deployed.

Question 10 (Advanced Scenario): A development team receives a DAST report showing several high-severity findings in a web application. The team wants to fix them quickly. What should be their first step?

Answer
b) Prioritize findings based on risk (impact + exploitability) and investigate root causes. Not all findings are equally critical, and understanding root causes prevents reinfection.

Question 11 (Theoretical): Explain the difference between SAST and DAST, and describe a scenario where each would be most effective.

Answer
SAST analyzes source code without executing it (fast, early, high false positives). DAST tests a running application (runtime issues, low false positives). SAST is most effective during development (shift-left), while DAST is effective during testing of deployed applications.

Question 12 (Scenario): An organization uses a large number of open source libraries in its applications. The security team recommends implementing SCA scanning. Why is this critical, and what risks does SCA scanning mitigate?

Answer
b) SCA identifies known vulnerabilities in dependencies and tracks license compliance. It mitigates supply-chain risks from vulnerable open source components.

Exercises

Apply your knowledge through these practical scenarios.

Exercise 1 (Intermediate): Threat Modeling
You are building a new e-commerce web application. Perform a threat modeling exercise using STRIDE for the following component: the user authentication module (login, registration, password reset). (a) Identify at least one threat for each STRIDE category. (b) For each threat, propose a mitigation strategy. (c) Prioritize the threats using DREAD scoring.

Sample Solution

Spoofing: Attacker creates fake account. Mitigation: Email verification, CAPTCHA.

Tampering: Attacker modifies password reset request. Mitigation: Secure tokens, HTTPS.

Repudiation: User denies initiating a transaction. Mitigation: Audit logs, non-repudiation.

Information Disclosure: Credentials exposed in logs. Mitigation: Proper logging practices, encryption.

Denial of Service: Brute-force attacks. Mitigation: Rate limiting, account lockout.

Elevation of Privilege: User escalates to admin. Mitigation: Role-based access control, server-side checks.

DREAD scores: Spoofing (3,2,3,3,2=13), Tampering (3,3,2,3,2=13), DoS (2,3,3,2,2=12).

Exercise 2 (Advanced): DevSecOps Pipeline Design
Design a DevSecOps pipeline for a cloud-native microservices application. Include: (a) the CI/CD stages; (b) security tools at each stage (SAST, SCA, DAST, container scanning, IaC scanning); (c) how findings are triaged and reported; (d) how the pipeline handles vulnerabilities in production.

Sample Solution

(a) Stages: Commit, Build, Test, Deploy (staging), Deploy (production).

(b) Tools: Commit — git-secrets; Build — SonarQube (SAST), Snyk (SCA); Test — OWASP ZAP (DAST); Deploy (staging) — Trivy (container), Checkov (IaC); Deploy (production) — monitoring (SIEM, WAF).

(c) Triage: Critical findings block deployment; High findings require review; Low findings are logged for remediation. Reporting: Dashboard with security metrics and trends.

(d) Production handling: Vulnerabilities in production trigger alerts, incident response, and automated rollback if necessary.

Exercise 3 (Advanced): SBOM and Supply Chain Analysis
A company is responding to a Log4j vulnerability alert. They have 500 applications and no SBOM. (a) Why is an SBOM essential in this scenario? (b) Describe how you would quickly identify affected applications. (c) Propose a strategy for generating SBOMs going forward. (d) How would you prioritize remediation?

Sample Solution

(a) An SBOM would have provided a complete inventory of dependencies, allowing instant identification of which applications use Log4j.

(b) Without an SBOM, use a combination of: (1) scanning with SCA tools on all codebases; (2) scanning running instances; (3) reviewing build logs for dependency inclusion.

(c) Strategy: Implement SCA scanning in the CI/CD pipeline; generate SBOMs as artifacts; store them in a centralized repository.

(d) Prioritize: Critical applications (customer-facing, handling sensitive data) first; applications with known exploitation attempts next; internal applications last.

Exercise 4 (Advanced): SAST vs. DAST Analysis
A security team is evaluating SAST and DAST tools for their organization. (a) Describe the scenarios where SAST is more effective than DAST. (b) Describe scenarios where DAST is more effective. (c) How would you integrate both into a secure development process? (d) What are the cost and resource implications of each?

Sample Solution

(a) SAST is more effective early in development (shift-left), for finding code-level issues (SQL injection, buffer overflows), and for providing developer guidance on fixes.

(b) DAST is more effective for finding runtime issues, configuration flaws, and issues that only appear in a deployed environment (e.g., SSL/TLS issues, server misconfigurations).

(c) Integration: SAST runs on every build; DAST runs on staging environments before release. Both are part of the CI/CD pipeline.

(d) SAST: Typically lower cost, but high false positives require developer time. DAST: Lower false positives but requires running environments and more complex setup.

Exercise 5 (Advanced Research): DevSecOps Cultural Transformation
A traditional enterprise with a "security team as gatekeeper" culture wants to transition to DevSecOps. (a) Identify the cultural challenges. (b) Propose a change management strategy. (c) Describe how to measure success. (d) How would you address security concerns while maintaining development velocity?

Sample Solution

(a) Challenges: Resistance from security team (loss of control), developers seeing security as a burden, lack of security skills in development teams.

(b) Strategy: Executive sponsorship, training programs, pilot projects, integrating security tools into the developer workflow (shift-left).

(c) Success metrics: MTTD and MTTR improvements, reduced vulnerabilities in production, developer satisfaction scores, increased deployment frequency.

(d) Balance: Automate security checks to reduce manual effort; use shift-left to catch issues early; provide developers with training and support; implement a "fail-fast" approach to security testing.


Homework

These assignments require deep research and synthesis.

Homework 1: SSDLC Policy Development
Develop a comprehensive Secure Software Development Lifecycle (SSDLC) policy for a large financial services organization. Your policy must include: (a) security requirements for each phase; (b) roles and responsibilities (developers, security team, architects); (c) required security tools and processes; (d) training and awareness requirements; (e) metrics and reporting for governance.

Sample Answer (Abridged)

SSDLC Policy: Requirements: Security requirements review at design phase; threat modeling for all applications. Development: Secure coding standards (OWASP Top 10); SAST on every build; code reviews. Testing: DAST and SCA on staging; penetration testing for critical applications. Deployment: Container and IaC scanning; configuration validation. Operations: Continuous monitoring, vulnerability management. Roles: Developers (fix findings), Security team (review), Architects (design reviews). Training: Annual secure coding training. Metrics: Number of findings, MTTD/MTTR, remediation rates.

Homework 2: DevSecOps Tool Selection
Evaluate and compare three DevSecOps tools for each category: SAST, SCA, DAST, and container scanning. For each tool, provide: (a) key features; (b) cost; (c) integration capabilities; (d) strengths and weaknesses; (e) a recommendation for a specific use case. Write a 700-word report summarizing your findings.

Sample Answer (Abridged)

SAST: SonarQube (open-source, broad language support, moderate false positives), Checkmarx (enterprise, low false positives, high cost), Fortify (deep analysis, integration with IDEs, expensive). Recommendation: SonarQube for smaller organizations, Checkmarx for large enterprises.

SCA: Snyk (developer-friendly, good integrations), WhiteSource (comprehensive, policy management), Dependency-Check (free, OWASP project).

DAST: OWASP ZAP (free, extensible), Burp Suite (comprehensive, industry standard), Acunetix (enterprise, automated).

Container: Trivy (fast, comprehensive), Clair (open-source, good for CI), Anchore (enterprise, policy-based).

Homework 3: Secure Design Analysis
Analyze the design of a well-known open source application (e.g., WordPress, Django, or a system of your choice) using secure design principles. Your 600-word analysis should cover: (a) the system architecture; (b) how it applies (or fails to apply) security principles (least privilege, defense in depth, etc.); (c) known vulnerabilities and their root causes; (d) recommendations for improving security.

Sample Answer (Abridged)

WordPress Analysis: Architecture: LAMP stack, PHP-based, modular plugins. Security principles: Least privilege—plugin permissions are often too broad; Defense in depth—some built-in measures (nonces, capabilities), but plugins introduce risks; Fail-safe defaults—not always applied. Known vulnerabilities: SQL injection, XSS, privilege escalation (often in plugins). Recommendations: Stricter plugin review, improved isolation between plugins, better input validation.

Homework 4: Supply Chain Security Strategy
Design a software supply chain security strategy for a technology company. Your strategy must include: (a) vendor and open source risk assessment; (b) SBOM generation and management; (c) code signing and integrity verification; (d) dependency management and update processes; (e) incident response for supply-chain vulnerabilities; (f) continuous improvement and monitoring.

Sample Answer (Abridged)

Supply Chain Security Strategy: Risk Assessment: Categorize vendors by criticality and security maturity. SBOM: Generate SBOMs for all applications using SCA tools; store in a central repository. Code Signing: Require signing for all releases; manage keys with HSMs. Dependency Management: Use lock files, scan dependencies regularly, apply updates promptly. Incident Response: SBOM for vulnerability identification, automated patching, and rollback. Continuous Improvement: Regular reviews of the supply chain, threat intelligence integration, and annual assessments.

Homework 5: Unit 1 Capstone – Secure Development Synthesis
Write a 1,000-word capstone essay that synthesizes the concepts of secure development and DevSecOps with the broader Unit 1 topics (CIA triad, threat modeling, security operations, auditing). Your essay should address: (a) how secure development practices support the CIA triad; (b) how threat modeling in development connects to operational threat intelligence; (c) how DevSecOps pipelines enable continuous security auditing; (d) the role of governance in enforcing secure development; (e) the challenges and best practices for integrating security into development in a large enterprise.

Sample Answer (Abridged)

Unit 1 Synthesis – Secure Development: Secure development practices directly support the CIA triad: code-level controls enforce confidentiality (encryption), integrity (input validation), and availability (resilience). Threat modeling during design ensures that security is considered early, and findings can be integrated into operational threat intelligence for SOC monitoring. DevSecOps pipelines enable continuous security auditing by automating security testing and compliance checks. Governance provides the policies and oversight needed to enforce secure development practices. Challenges include integrating security into agile workflows, balancing speed and security, and managing legacy code. Best practices include shift-left, automation, and security training for developers.


Summary

This tutorial has provided a comprehensive exploration of Secure Software Development and DevSecOps, the practices that embed security into the software development lifecycle. We began by establishing the Secure Software Development Lifecycle (SSDLC), which extends traditional SDLC models with security activities at every phase—requirements, design, development, testing, deployment, and operations. The principle of "shift-left" is central: performing security activities earlier in the lifecycle to catch issues before they reach production.

We examined DevSecOps, the integration of security into DevOps practices. DevSecOps treats security as a shared responsibility and relies on automation to embed security checks into CI/CD pipelines. We explored the cultural and technical aspects of DevSecOps, including the use of automated security testing and continuous monitoring.

We then delved into application security testing methodologies: SAST (static analysis), DAST (dynamic analysis), IAST (interactive analysis), SCA (dependency analysis), and fuzzing. Each technique has distinct strengths and limitations, and we discussed how they complement each other in a comprehensive testing strategy.

We also covered software supply chain security, a critical area highlighted by attacks such as SolarWinds and the Log4j vulnerability. We discussed the importance of Software Bill of Materials (SBOM), code integrity and signing, and dependency management in mitigating supply-chain risks.

Real-world case studies—SolarWinds, Log4j, and DevSecOps success stories—illustrated how failures in secure development can lead to catastrophic breaches and how effective practices can improve security posture.

This tutorial concludes Unit 1 of COMP400. You have now built a comprehensive foundation in computer and network security—from the CIA triad and threat modeling to malware analysis, DDoS defenses, security operations, governance, and secure development. As you move to Unit 2, you will explore Cryptographic Protocols, Tools, and Algorithms, which provide the technical underpinnings for many of the security controls we have discussed. The secure development principles you have learned here will help you understand how cryptographic controls are integrated into software and how their implementation must be validated through rigorous testing and auditing.

COMP400 — Computer and Network Security (Revision 3) • School of Computing and Information Systems, TrustOpen University