Rosemary Wang (she/her)
Developer Advocate at HashiCorp
@joatmon08
joatmon08.github.io
3
Slide 4
Slide 4 text
How to secure better…
and remediate faster.
4
Slide 5
Slide 5 text
Securing CI/CD Pipelines
An Overview
✓ Access Control
✓ Secrets
✓ Runners
✓ Dependencies
✓ Configuration
5
Slide 6
Slide 6 text
Access Control 🚥
6
Slide 7
Slide 7 text
limit service’s access rights to minimum required
least privilege
7
Slide 8
Slide 8 text
Choose your access.
Code Repository
Build infrastructure. Infrastructure Provider
Checkout code.
Deploy application.
Application Platform /
Release Repository
Test for security. Security Tool
Check code quality. Quality Assurance Tool
Read repositories.
Write speci
fi
c services.
Write speci
fi
c nodes or
namespaces.
Read test results.
Read test results.
Run integration tests. Store for User Data Read table in testing
environment.
8
Slide 9
Slide 9 text
The challenge of least privilege
Solutions
★ Limit access from pipeline early in development
★ Limit write access to repositories early in development
9
Slide 10
Slide 10 text
The challenge of least privilege
Solutions
★ Limit access from pipeline early in development
★ Limit write access to repositories early in development
★ Offer self-service to refine access
★ Offer templates of secure policies
10
Slide 11
Slide 11 text
The challenge of least privilege
Solutions
★ Limit access from pipeline early in development
★ Limit write access to repositories early in development
★ Offer self-service to refine access
★ Offer templates of secure policies
★ Review access on a regular cadence
★ Audit pipeline runs
11
Slide 12
Slide 12 text
Secrets 🔒
12
Slide 13
Slide 13 text
sensitive information linked to access to a system or service
secrets
13
Slide 14
Slide 14 text
vault_database_secret_backend_connection.post
gres will be created
• resource
"vault_database_secret_backend_connection"
"postgres" {
◦ postgresql {
▪ connection_url = "postgres://
hcpvault:ZWtW62okZyJh@terraform-2020113
0215226595400000001.cho1mmdxhp1z.us-
west-2.rds.amazonaws.com:5432/prod"
PIPELINE LOGS
[UNIT TEST]
TERRAFORM
FMT
[BUILD]
TERRAFORM
INIT
[DEPLOY]
TERRAFORM
PLAN
[RELEASE]
TERRAFORM
APPLY
[TEST]
14
😱
Slide 15
Slide 15 text
Plan R
Remediate the secret
• Regret
• Revoke
• Rotate
• Reference
• Replace
• Re-run
15
100 pipelines later… 😓
Slide 16
Slide 16 text
Pipelines use secrets.
16
Certi
fi
cates
Access Usernames & Passwords
Testing User Data
Tokens
SSH Keys
Encryption Keys
Slide 17
Slide 17 text
Pipelines create secrets.
17
Con
fi
guration Usernames & Passwords
SSH Keys
Tokens
Slide 18
Slide 18 text
The challenge of secrets
Solutions
★ Mask or omit in pipeline output
★ Use a secrets manager
18
Slide 19
Slide 19 text
The challenge of secrets
Solutions
★ Mask or omit in pipeline output
★ Use a secrets manager
★ Issue new credentials per pipeline run
★ Audit secrets usage
19
Slide 20
Slide 20 text
Runners 👟
20
Slide 21
Slide 21 text
resources that run pipeline stages or tasks
runners
21
23
Container
🤔
1. Someone accesses CI/CD runner (e.g., SSH).
Virtual
Machine
$ mount /dev/ /mnt
$ chroot /mnt
2. Container can access host
fi
lesystem.
3. Access code or
fi
les for other jobs.
Other Jobs
on Virtual
Machine
Slide 24
Slide 24 text
24
Infrastructure Provider
Runner Managed Service
Engineer
Must be
authorized
user.
Must be
authorized
account.
Secrets Manager
Allow IP
address over
VPN.
Allow IP
addresses for CI
framework.
Slide 25
Slide 25 text
The challenge of securing runners
Solutions
★ Use trusted / verified images
★ Scan for OS vulnerabilities
25
Slide 26
Slide 26 text
The challenge of securing runners
Solutions
★ Use trusted / verified images
★ Scan for OS vulnerabilities
★ Define network policy
★ Run as a non-root
26
Slide 27
Slide 27 text
The challenge of securing runners
Solutions
★ Use trusted / verified images
★ Scan for OS vulnerabilities
★ Define network policy
★ Run as a non-root
★ Use ephemeral secrets
★ Audit remote access to runner
27
Slide 28
Slide 28 text
Dependencies 🖇
28
Slide 29
Slide 29 text
third-party code used for pipeline stages or tasks
dependencies
29
Slide 30
Slide 30 text
30
name: release
jobs:
goreleaser:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v2
with:
fetch-depth: 0
- name: Set up Go
uses: actions/setup-go@v2
with:
go-version: 1.14
- name: Run GoReleaser
uses: goreleaser/goreleaser-action@v2
with:
version: latest
args: release --rm-dist
Downloaded from trusted source?
Veri
fi
ed code?
Correct plugin?
Slide 31
Slide 31 text
31
public class UnverifiedPlugin {
protected static void getFiles(AbstractBuild b,
FilePath workspace) {
// code to replace project files or metadata
// code to gather information
// code to siphon credentials
}
}
Slide 32
Slide 32 text
The challenge of securing dependencies
Solutions
★ Scan for vulnerabilities
★ Verify checksums and signatures
32
Slide 33
Slide 33 text
The challenge of securing dependencies
Solutions
★ Scan for vulnerabilities
★ Verify checksums and signatures
★ Use verified registry
★ Pin versions
33
Slide 34
Slide 34 text
Configuration 📄
34
Slide 35
Slide 35 text
de
fi
ne delivery pipelines through source code
pipeline as
code
35
The challenge of securing configuration
Solutions
★ Apply immutability to pipeline configuration
★ Offer pipeline templates with secure defaults
37
Slide 38
Slide 38 text
The challenge of securing configuration
Solutions
★ Apply immutability to pipeline configuration
★ Offer pipeline templates with secure defaults
★ Test pipelines as code
★ Secure dependencies that allow arbitrary code / command
38
Slide 39
Slide 39 text
The challenge of securing configuration
Solutions
★ Apply immutability to pipeline configuration
★ Offer pipeline templates with secure defaults
★ Test pipelines as code
★ Secure dependencies that allow arbitrary code / command
★ Audit changes to pipeline configuration
39
Slide 40
Slide 40 text
Securing CI/CD Pipelines
In Summary
✓ Access Control
✓ Secrets
✓ Runners
✓ Dependencies
✓ Configuration
40
Slide 41
Slide 41 text
Securing CI/CD Pipelines
In Summary
✓ Access Control
✓ Secrets
✓ Runners
✓ Dependencies
✓ Configuration
41
Favor immutability.
Limit blast radius.
Automate to reduce friction.
Slide 42
Slide 42 text
Rosemary Wang
@joatmon08
joatmon08.github.io
thank you!
42