Slide 1

Slide 1 text

Rosemary Wang | May 3, 2023 Minimum Secure Pipeline 1

Slide 2

Slide 2 text

jenkins.io/security/advisory/2022-02-15/ about.codecov.io/security-update/ msrc-blog.microsoft.com/2020/12/31/microsoft-internal-solorigate-investigation-update/ 2

Slide 3

Slide 3 text

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

Slide 22

Slide 22 text

22 Virtual Machine 🤔 1. Someone accesses CI/CD runner (e.g., SSH). 2. Access other infrastructure. Database

Slide 23

Slide 23 text

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

Slide 36

Slide 36 text

36 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 test_plugin_checkout_has_fetch_depth_of_1 test_plugin_go_uses_secure_version_1.14 test_plugin_release_includes_signature

Slide 37

Slide 37 text

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