Skip to content
NovaDen
Go back

DevSecOps Foundations

Introduction

DevOps is the integration and automation of software development, security and quality testing, and operations. The goal is to shrink the time between committing a change and shipping it to production. It is a mix of practices, culture, and tooling, and its motivations come straight out of Agile.

DevSecOps is DevOps with security folded into every phase of that lifecycle, not bolted on at the end. The promise is the same as DevOps (speed and reliability) plus security checks running inside the same workflows that build and deploy the code.

CI/CD: the Core of DevOps

Two ideas sit at the centre of DevOps:

CI/CD is what actually bridges development and operations.

Benefits of DevOps

Benefits of DevSecOps

“Shift left”, automation, and continuous monitoring are the practices that deliver those benefits, not benefits in themselves.

The Tool Categories

DevOps is not one tool; it’s a set of categories you wire together.

CategoryWhat it doesCommon tools
Source Code Management (SCM/VCS)Track and record changes to the codebase, collaborate on a structured history.Git, GitHub, GitLab
CI/CDRun defined stages and jobs against the code (build, test, deploy).GitHub Actions, GitLab CI/CD, Jenkins, Travis
Artifact ManagerStore, organise, and distribute binaries, packages, and container images produced by the build.Docker Registry, JFrog Artifactory, Nexus
PlatformOn-demand compute, storage, and network.AWS, Azure, GCP
Infrastructure as Code (IaC)Provision and manage infrastructure with code instead of clicks.Terraform, Ansible
ContainersPackage the app and its runtime so it runs the same everywhere.Docker
MonitoringWatch the system in production: performance, resource usage, logs.ELK stack (Elasticsearch, Logstash, Kibana), Prometheus, Grafana

The mental model for images, containers, registries, networking, and volumes lives in Docker Foundations.

The DevSecOps Maturity Model (DSOMM)

DSOMM is an OWASP project that measures how mature a DevSecOps practice actually is. The current model is structured as 5 dimensions, 18 sub-dimensions, and 167 activities, with 5 maturity levels per sub-dimension. Not every sub-dimension defines all five levels; the model only includes a level where it’s meaningful for that topic.

The five top-level dimensions:

Inside “Test and Verification”, the sub-dimensions most often cited when talking about scan coverage are:

A rough sketch of what the five maturity levels mean in practice:

The point of DSOMM isn’t the exact rubric; it’s to give a team a shared way to say “we’re a Level 1 SCA shop, let’s get to Level 2 next quarter” instead of arguing about whether security is “good”. For the full activity catalogue, see dsomm.owasp.org.

How a Pipeline Actually Works

A pipeline is a system of stages that continuously integrates, delivers, or deploys software.

Engineering Hygiene for Pipelines

These aren’t security-specific, but they’re what makes a pipeline survive contact with a real team:

Securing the Pipeline Itself

The pipeline is part of the attack surface. The authoritative guidance lives in a few places:

The shared themes:

Picking a Security Tool

Most of the criteria for choosing between two scanners are the same regardless of whether the scanner is SCA, SAST, DAST, or something else. Pick on:

Security in the Pipeline

Most DevSecOps tooling falls into a handful of well-known categories. Each gets its own job in the pipeline.

Software Component Analysis (SCA)

SCA is a static technique for finding security vulnerabilities in third-party components: npm packages, Python wheels, Go modules, OS packages, container base image layers. It does not look at your own source; it looks at what you imported.

It works by comparing the dependency manifest (package-lock.json, requirements.txt, go.sum, etc.) against vulnerability databases (NVD, GitHub Advisory Database, OSV). A match means a CVE has been published for a version you’re pulling in.

Use cases:

Benefits:

Shortcomings:

Common tools: safety, RetireJS, OWASP Dependency-Check, Snyk, npm audit, bundler-audit, Composer Audit, Renovate, Dependabot, OSV-Scanner, OSV-Scalibr, Semgrep (with rule packs), Trivy, Sandworm, pip-licenses (license-focused).

Static Application Security Testing (SAST)

SAST analyses your own source code for security vulnerabilities without running it. It walks the AST, follows variable flow, and matches against patterns (SQL string concatenation, unsafe deserialization, command injection sinks).

Secrets scanning is a sub-category of SAST. It runs on the same source tree but targets credentials specifically, using two detection strategies:

Use cases:

Benefits:

Shortcomings:

Common tools (security-focused): TruffleHog, detect-secrets, Talisman, Gitleaks, Kingfisher (secrets); Bandit (Python), Brakeman (Ruby/Rails), gosec (Go), hadolint (Dockerfile), FindSecBugs / SpotBugs (Java), njsscan (Node.js), Semgrep, SonarQube, Bearer (data-flow / PII).

Dynamic Application Security Testing (DAST)

DAST exercises a running application to find security vulnerabilities. It probes the app like an attacker would, with no source-code knowledge required. The scanner crawls the routes, fuzzes inputs, and observes responses.

Use cases:

Benefits:

Shortcomings:

Common tools (by purpose):

Infrastructure as Code (IaC)

IaC is the practice of creating, managing, and destroying infrastructure as if it were code, by applying software-development practices (review, version control, testing) to operations work.

Three concerns make up the IaC stack:

Use cases:

Benefits:

Shortcomings:

Terraform

Terraform (and its open-source fork OpenTofu) is the most common infrastructure-definition tool. It is declarative: you describe the desired state, Terraform diffs it against reality and produces a plan to reach it.

Key pieces:

Gotcha: Terraform plans look harmless until you read them. A line that says - aws_db_instance.main (note the minus sign) means a database is about to be destroyed. Add prevent_destroy = true to stateful resources, and keep state and credentials behind tight access controls.

Ansible

Ansible is agentless: it pushes changes over SSH (or WinRM on Windows) instead of running a daemon on every target. Where Terraform shines at provisioning infrastructure, Ansible shines at configuring what’s inside it: installing packages, writing config files, restarting services, applying hardening.

Its core pieces:

Before connecting to a new host you’ll typically populate the SSH known-hosts file so Ansible doesn’t get blocked at the first connection:

ssh-keyscan -H prod-host staging-host build-host >> ~/.ssh/known_hosts
echo "StrictHostKeyChecking accept-new" >> ~/.ssh/config

Compliance as Code (CaC)

CaC is the technique of automating compliance and managing it as code. The same logic as IaC: instead of a PDF checklist, you have a machine-readable specification of “this host must look like X” that runs on a schedule.

A CaC tool defines controls (e.g. “SSH password authentication must be disabled”), executes them against a target, and emits structured pass/fail results. The same controls can be run pre-deploy as a gate, nightly as drift detection, and on demand as evidence for an auditor.

Use cases:

Benefits:

Shortcomings:

Common tools: InSpec (now Chef Inspec) and CinC Auditor (its open-source fork) are the usual choices. The dev-sec community baselines (Linux, Windows, SSH, MySQL, Nginx) are a good starting point.

Vulnerability Management

Pipelines generate findings. A lot of them, from different tools, in different formats, across products and environments. Vulnerability management is the discipline (and the tool that supports it) of getting from “raw scanner output” to “the right person fixing the right thing at the right time”.

A good vuln-management system does the following:

Use cases:

Benefits:

Shortcomings:

Common tools: DefectDojo (open-source, the most common pick), Dependency-Track (specifically for SCA/SBOM workflows), and a long tail of commercial platforms (Snyk, Veracode, GitHub Advanced Security, GitLab Ultimate’s vulnerability reports).

The pattern in a pipeline is the same regardless of which tool you pick:

  1. Every scanner job emits a structured report (JSON, XML, SARIF).
  2. An upload step pushes the report into the vulnerability manager via API, tagged with product, engagement, environment, and a lead.
  3. The manager deduplicates against existing findings and surfaces only what’s new.
  4. Tickets get created (or not) based on severity rules.

Quick reference: the pipeline YAML, Docker-based scanner snippets, and DefectDojo upload patterns live in the DevSecOps Cheat Sheet.


Share this post on:

Previous Post
Git Foundations
Next Post
DevSecOps Cheat Sheet