Upgrade to Pro — share decks privately, control downloads, hide ads and more …

SPB Jenkins Meetup #9. Managing security in Jen...

SPB Jenkins Meetup #9. Managing security in Jenkins (ENG)

In this presentation you can find introduction to Jenkins security and overview of best practices of administering Jenkins instances at scale. In particular, there is an overview of the Ownership-based security engine in Jenkins, which have been developed by me in order to manage instances with hundreds of active users.

Oleg Nenashev

November 28, 2017
Tweet

More Decks by Oleg Nenashev

Other Decks in Programming

Transcript

  1. Managing security in Jenkins. Best practices and Ownership-Based Security Oleg

    Nenashev CloudBees, Inc. St. Petersburg Jenkins Meetup November 28, 2017
  2. @oleg_nenashev, @jenkins_spb © 2017 CloudBees, Inc. All Rights Reserved. 2

    About me @oleg_nenashev oleg-nenashev LibreCores project St. Petersburg Polytechnic University Jenkins meetups
  3. @oleg_nenashev, @jenkins_spb © 2017 CloudBees, Inc. All Rights Reserved. 3

    Oleg’s “Hall of Shame”(c) • Plugins • Jenkins Core • Windows Service Wrapper • Remoting • Security Team
  4. @oleg_nenashev, @jenkins_spb © 2017 CloudBees, Inc. All Rights Reserved. 4

    https://jenkins.io/security/ Fixes in the core and plugins Jenkins Security Team Board Core Team Security LTS Events INFRA Website
  5. @oleg_nenashev, @jenkins_spb © 2017 CloudBees, Inc. All Rights Reserved. 6

    About you Do you administer Jenkins instances? Do you have more than 20 users?
  6. @oleg_nenashev, @jenkins_spb © 2017 CloudBees, Inc. All Rights Reserved. 7

    Agenda 1. Introduction to Jenkins Security 2. Protecting Jenkins. Best practices 3. Ownership-based security Disclaimer: • Presentation represent the author’s personal opinion • Author’s personal opinion may differ from official positions of CloudBees and/or Jenkins community • Many Jenkins instances were harmed, use carefully
  7. @oleg_nenashev, @jenkins_spb © 2017 CloudBees, Inc. All Rights Reserved. 8

    1. Most popular CI/CD tool in the world 2. Generic automation server 3. Flexible and extensible 4. It’s open source, big community 5. Commercial support vendors 6. … Who is Mr. Jenkins? https://jenkins.io
  8. @oleg_nenashev, @jenkins_spb © 2017 CloudBees, Inc. All Rights Reserved. 10

    Jenkins… is a remote execution engine (by design)
  9. @oleg_nenashev, @jenkins_spb © 2017 CloudBees, Inc. All Rights Reserved. 11

    Jenkins… is a remote execution engine (by design) • One can run code and system commands • Access to master system • Access to agents • Access to private/public clouds
  10. @oleg_nenashev, @jenkins_spb © 2017 CloudBees, Inc. All Rights Reserved. 12

    Jenkins… has access to sensitive data (by design)
  11. @oleg_nenashev, @jenkins_spb © 2017 CloudBees, Inc. All Rights Reserved. 13

    Jenkins… has access to sensitive data (by design) • Credentials • Private repositories • Artifacts, including release ones
  12. @oleg_nenashev, @jenkins_spb © 2017 CloudBees, Inc. All Rights Reserved. 15

    Jenkins… is a shared service (by design) • Multiple users • Different expertise • Users may misuse permissions
  13. @oleg_nenashev, @jenkins_spb © 2017 CloudBees, Inc. All Rights Reserved. 16

    What does security mean? Jenkins security Intrusion and data theft protection Restrictions within organization
  14. @oleg_nenashev, @jenkins_spb © 2017 CloudBees, Inc. All Rights Reserved. 17

    Jenkins security Intrusion and data theft protection Restrictions within organization • Must-have in internet-facing instances • Paranoid mode is fine What does security mean?
  15. @oleg_nenashev, @jenkins_spb © 2017 CloudBees, Inc. All Rights Reserved. 18

    Jenkins security Intrusion and data theft protection Restrictions within organization • Better user experience • Protection from unintentional actions • Protection from lack of expertise What does security mean?
  16. @oleg_nenashev, @jenkins_spb © 2017 CloudBees, Inc. All Rights Reserved. 20

    Limited number of admins Permissions Security audit Rule #0. Use security!
  17. @oleg_nenashev, @jenkins_spb © 2017 CloudBees, Inc. All Rights Reserved. 21

    Rule #1. Keep Updating Frequent security releases • Weekly • Current LTS baseline Info sources • https://jenkins.io/security/advisories/ • jenkinsci-advisories mailing list (including announcements) • RSS feed 2.46.2 Exploits are in the wild, update ASAP
  18. @oleg_nenashev, @jenkins_spb © 2017 CloudBees, Inc. All Rights Reserved. 23

    Build your own core (custom fork) •“mvn clean package” in the root •HINT: Join the security team to get info about changes in advance LTS is only 12 weeks… Not enough?
  19. @oleg_nenashev, @jenkins_spb © 2017 CloudBees, Inc. All Rights Reserved. 24

    Build your own core (custom fork) JEP it, help to maintain! • People is interested in longer LTS LTS is only 12 weeks… Not enough?
  20. @oleg_nenashev, @jenkins_spb © 2017 CloudBees, Inc. All Rights Reserved. 25

    Build your own core (custom fork) JEP it, help to maintain! Use custom versions from vendors: • https://wiki.jenkins-ci.org/display/JENKINS/Commercial+Support • CloudBees Jenkins Enterprise LTS is only 12 weeks… Not enough?
  21. @oleg_nenashev, @jenkins_spb © 2017 CloudBees, Inc. All Rights Reserved. 28

    What’s inside? Who can change them? What if there is a malicious code? Do you pull latest images from DockerHub?
  22. @oleg_nenashev, @jenkins_spb © 2017 CloudBees, Inc. All Rights Reserved. 29

    What’s inside? Who can change them? What if there is a malicious code? How is it different from other package sources? Do you pull latest images from DockerHub?
  23. @oleg_nenashev, @jenkins_spb © 2017 CloudBees, Inc. All Rights Reserved. 30

    Plugins may contain defects Rule #2. Know what you use
  24. @oleg_nenashev, @jenkins_spb © 2017 CloudBees, Inc. All Rights Reserved. 31

    Rule #2. Know what you use Monitor plugin versions and release notes • Beware of transient dependencies (!) • Also monitor JIRA
  25. @oleg_nenashev, @jenkins_spb © 2017 CloudBees, Inc. All Rights Reserved. 32

    Rule #2. Know what you use Monitor plugin versions and release notes Consider using locally managed sources • Internal Maven • Docker Registry • Custom Jenkins Update Center: Juseppe • https://github.com/yandex-qatools/juseppe
  26. @oleg_nenashev, @jenkins_spb © 2017 CloudBees, Inc. All Rights Reserved. 33

    Rule #2. Know what you use Monitor plugin versions and release notes Consider using locally managed sources Use static configurations • Configuration-as-Code • One cannot simply break it
  27. @oleg_nenashev, @jenkins_spb © 2017 CloudBees, Inc. All Rights Reserved. 34

    Previous Jenkins Meetup… http://bit.ly/jenkins_msk_3_groovy_hooks
  28. @oleg_nenashev, @jenkins_spb © 2017 CloudBees, Inc. All Rights Reserved. 35

    System Configuration… as Code External tools Jenkins CLI and REST API python- jenkins jenkins-client (java) Configuration Management Ansible, Chef, … Docker, Docker Compose ... Solutions in Jenkins Groovy Boot Hooks Config as Code Plugin (alpha) SCM Sync Configuration Just examples…
  29. @oleg_nenashev, @jenkins_spb © 2017 CloudBees, Inc. All Rights Reserved. 36

    Disabling setup wizard… turns off security, SURPRISE! Configuration-as-code. Keep in mind!
  30. @oleg_nenashev, @jenkins_spb © 2017 CloudBees, Inc. All Rights Reserved. 37

    Disabling setup wizard… turns off security, SURPRISE! You are responsible for configuring security Configuration-as-code. Keep in mind!
  31. @oleg_nenashev, @jenkins_spb © 2017 CloudBees, Inc. All Rights Reserved. 38

    Disabling setup wizard… turns off security, SURPRISE! You are responsible for configuring security Configuration-as-code. Keep in mind!
  32. @oleg_nenashev, @jenkins_spb © 2017 CloudBees, Inc. All Rights Reserved. 39

    You are responsible for configuring security Examples: • Authentication/Authorization • CSRF • Slave2Master security • Remoting protocols Configuration-as-code. Keep in mind!
  33. @oleg_nenashev, @jenkins_spb © 2017 CloudBees, Inc. All Rights Reserved. 40

    https://hub.docker.com/r/onenashev/ demo-jenkins-config-as-code/ Groovy Hooks
  34. @oleg_nenashev, @jenkins_spb © 2017 CloudBees, Inc. All Rights Reserved. 43

    Rule #3. Keep Jenkins in a sandbox Do not run masters/agents under system accounts • BAD - Local Administrator in Windows • BAD - Root in Unix • NOT BAD? - Root in Docker
  35. @oleg_nenashev, @jenkins_spb © 2017 CloudBees, Inc. All Rights Reserved. 44

    Rule #3. Keep Jenkins in a sandbox Do not run masters/agents under system accounts Restrict access to non- required resources • Generic accounts • Read-only repositories
  36. @oleg_nenashev, @jenkins_spb © 2017 CloudBees, Inc. All Rights Reserved. 45

    Rule #3. Keep Jenkins in a sandbox Do not run masters/agents under system accounts Restrict access to non- required resources Sandbox your scripts as well
  37. @oleg_nenashev, @jenkins_spb © 2017 CloudBees, Inc. All Rights Reserved. 46

    Scryptocalypse https://jenkins.io/security/advisory/2017-04-10/ • Unrestricted scripting • More than 30 plugins affected •Groovy Plugin •JobDSL Plugin •Grails Plugin •Scriptler Plugin • Some of them are blocked, even now
  38. @oleg_nenashev, @jenkins_spb © 2017 CloudBees, Inc. All Rights Reserved. 47

    It is not only about Groovy… Tcl Plugin •Blacklisted in April 2017 Jenkins Core 2.73.3 •Command Computer Launcher •Runs command on a master •Any user with a mode edit permission… was able to run commands on the master
  39. @oleg_nenashev, @jenkins_spb © 2017 CloudBees, Inc. All Rights Reserved. 49

    Jenkins Script Security https://plugins.jenkins.io/ script-security DIY
  40. @oleg_nenashev, @jenkins_spb © 2017 CloudBees, Inc. All Rights Reserved. 50

    Script Security Plugin Used in [almost] all Groovy plugins https://plugins.jenkins.io/script-security
  41. @oleg_nenashev, @jenkins_spb © 2017 CloudBees, Inc. All Rights Reserved. 53

    Builds have access to the master filesystem Examples: • Read data from other builds/artifacts • Read secret hashes • Modify Jenkins system configuration Rule #4. Do not Run Jobs on master
  42. @oleg_nenashev, @jenkins_spb © 2017 CloudBees, Inc. All Rights Reserved. 54

    Rule #4. Do not Run Jobs on master • Solution 1: • Set “0” executors on master • Another node running under different account • BUT: Does not protect from fly-weight tasks
  43. @oleg_nenashev, @jenkins_spb © 2017 CloudBees, Inc. All Rights Reserved. 55

    Rule #4. Do not Run Jobs on master • Solution 1: • 0 executors on master • Another node running under different account • BUT: Does not protect from fly-weight tasks • Solution 2: • Job Restrictions Plugin • Details: later
  44. @oleg_nenashev, @jenkins_spb © 2017 CloudBees, Inc. All Rights Reserved. 56

    Ø By default builds run with the System account Ø Users may trigger wrong builds Ø Users can extract data Rule #5. Do not trust your builds
  45. @oleg_nenashev, @jenkins_spb © 2017 CloudBees, Inc. All Rights Reserved. 57

    Authorize Project Plugin Authorize builds • Global default • Whitelist of user- configurable strategies • Job properties https://plugins.jenkins.io/authorize-project
  46. @oleg_nenashev, @jenkins_spb © 2017 CloudBees, Inc. All Rights Reserved. 58

    Audit Trail – logging of actions •https://plugins.jenkins.io/audit-trail Security Inspector – permission checks •https://plugins.jenkins.io/security-inspector … Rule #6. Audit your security
  47. @oleg_nenashev, @jenkins_spb © 2017 CloudBees, Inc. All Rights Reserved. 59

    Security Inspector Plugin https://plugins.jenkins.io/security-inspector Reports for jobs, agents and users
  48. @oleg_nenashev, @jenkins_spb © 2017 CloudBees, Inc. All Rights Reserved. 60

    1. Assign leads to jobs and agents 2. Share the maintenance effort with them 3. Make the ownership explicit Rule #7. Make the responsibilities explicit
  49. @oleg_nenashev, @jenkins_spb © 2017 CloudBees, Inc. All Rights Reserved. 61

    Common strategies do not “just work” Project Matrix Authorization Strategy • Can be managed on Job/Folder level • Hard to manage every item • WAS: No support of Node permissions
  50. @oleg_nenashev, @jenkins_spb © 2017 CloudBees, Inc. All Rights Reserved. 62

    Common strategies do not “just work” Project Matrix Authorization Strategy • Hard to manage • No support of Node permissions Role-Based Strategy • Regular expression for each role • Performance: Hundreds of Regex checks every request • Web UI easily hangs
  51. @oleg_nenashev, @jenkins_spb © 2017 CloudBees, Inc. All Rights Reserved. 65

    Ownership-based Security Role- Strategy Ownership Job Restrictions • Assign owners of jobs/nodes • Fancy UI • Auth strategy • Macro engine • Restrict runs for jobs and nodes http://bit.ly/ownership-based-security + Authorize Project
  52. @oleg_nenashev, @jenkins_spb © 2017 CloudBees, Inc. All Rights Reserved. 66

    Ownership Plugin • Primary and Secondary Owners • Summary Boxes, View filters, etc. • Environment variables • Integration with Security plugins Customizable layout https://plugins.jenkins.io/ownership
  53. @oleg_nenashev, @jenkins_spb © 2017 CloudBees, Inc. All Rights Reserved. 67

    Ownership Info. Definition and Inheritance Folders Jobs Nodes Runs Sub- Projects Inherits
  54. @oleg_nenashev, @jenkins_spb © 2017 CloudBees, Inc. All Rights Reserved. 68

    Demo. What’s inside? Ownership 0.10.0 Job Restrictions 0.6 Security Inspector 0.4 Jenkins core 2.73.3 (minimal – 1.625) Authorize Project 1.3.0 Dynamic Search View 0.2.2 Role Strategy 2.6.1
  55. @oleg_nenashev, @jenkins_spb © 2017 CloudBees, Inc. All Rights Reserved. 69

    https://hub.docker.com/r/onenashev/ demo-jenkins-config-as-code/
  56. @oleg_nenashev, @jenkins_spb © 2017 CloudBees, Inc. All Rights Reserved. 71

    Ownership Info. What Do you get? • Ownership Summary Boxes • Ownership View Columns • View Filters • Also: @Me macro Customizable layout
  57. @oleg_nenashev, @jenkins_spb © 2017 CloudBees, Inc. All Rights Reserved. 72

    Example: Quick administration contacts Customizable template
  58. @oleg_nenashev, @jenkins_spb © 2017 CloudBees, Inc. All Rights Reserved. 73

    Ownership-Based Security. Role-Based Strategy Settings Roles [1/2]
  59. @oleg_nenashev, @jenkins_spb © 2017 CloudBees, Inc. All Rights Reserved. 74

    Ownership-Based Security. Role-Based Strategy Settings Roles [2/2]
  60. @oleg_nenashev, @jenkins_spb © 2017 CloudBees, Inc. All Rights Reserved. 75

    Ownership-Based Security. Role-Based Strategy Settings Assignments
  61. @oleg_nenashev, @jenkins_spb © 2017 CloudBees, Inc. All Rights Reserved. 76

    Jobs. Securing access Untrusted secondary owners!
  62. @oleg_nenashev, @jenkins_spb © 2017 CloudBees, Inc. All Rights Reserved. 77

    Jobs. Authorize Project Jobs get authenticated as owners => • Permissions • Node access (Computer.BUILD)
  63. @oleg_nenashev, @jenkins_spb © 2017 CloudBees, Inc. All Rights Reserved. 80

    Jenkins nodes • Similar Ownership Management • Special permission • Node Ownership Monitor • => info in the table
  64. @oleg_nenashev, @jenkins_spb © 2017 CloudBees, Inc. All Rights Reserved. 82

    Job Restrictions. Protecting the Master node • NEVER let users run jobs on master • Only use it for system jobs owned by admins
  65. @oleg_nenashev, @jenkins_spb © 2017 CloudBees, Inc. All Rights Reserved. 83

    Ownership-Based Security: Links Plugins: • https://plugins.jenkins.io/ownership • https://plugins.jenkins.io/role-strategy • https://plugins.jenkins.io/job-restrictions • https://plugins.jenkins.io/authorize-project Ownership-based security: • http://bit.ly/ownership-based-security Demo • https://github.com/oleg-nenashev/demo-jenkins-config-as-code
  66. @oleg_nenashev, @jenkins_spb © 2017 CloudBees, Inc. All Rights Reserved. 84

    Ø Item-specific security Ø Ownership-based restrictions for triggering jobs Ø Ownership assignment policy on create/copy Ø “sudo” mode for admins Ownership-Based Security: Out of the scope http://bit.ly/ownership-based-security
  67. @oleg_nenashev, @jenkins_spb © 2017 CloudBees, Inc. All Rights Reserved. 85

    1. Subscribe to security advisories 2. Use Security plugins 3. Keep your Jenkins up to date Takeaways
  68. @oleg_nenashev, @jenkins_spb © 2017 CloudBees, Inc. All Rights Reserved. 86

    1. There are existing solutions for large-scale 2. They are not documented sometimes… 3. Google ’em all Rule #-1. Explore
  69. @oleg_nenashev, @jenkins_spb © 2017 CloudBees, Inc. All Rights Reserved. 87

    Security page • https://jenkins.io/security/ Advisories • https://jenkins.io/security/advisories/ Ownership-based security • http://bit.ly/ownership-based-security Demo • https://hub.docker.com/r/onenashev/demo-jenkins-config-as-code/ Links
  70. @oleg_nenashev, @jenkins_spb © 2017 CloudBees, Inc. All Rights Reserved. 88

    Thank you! Contacts: E-mail: [email protected] GitHub: oleg-nenashev Twitter: @oleg_nenashev