시작하며.

최근 회사에서 Jenkins 전체적인 Security Auditing을 진행했었다.
뭐 부터 시작해야할지 막막해서 여러 가지 방면에서 Researching을 했는데,
한국어로 정리된 자료는 많지 않았다.
그래서 Jenkins 전체적인 관점에서 어떤 point를 auditing하면 될 지 내가 찾은 포인트 몇 가지를 블로그를 통해 공유 하려 한다.
(시간이 될 때마다 내용을 보충할 예정이다.)

Check List

  1. Jenkins Access Control
  2. Jenkins Components Management
  3. Jenkins Credential Management
  4. Jenkins Role Management

Jenkins Access Control

  • Jenkins는 배포, 빌드, 테스팅, 사후 작업 등 다양한 Job들을 특정 시점에 trigger 하여 실행하거나 연속적인 pipeline을 만들 수 있다.
  • 대기업, 스타트업 가리지 않고 배포환경을 구성할 때 가장 많이 쓰이는 도구 중 하나이다.
  • 다만 꽤 많은 기업들이 Jenkins를 Public한 환경에서 쓰고 있다. 이 경우 Shodan, scanning 등 을 통해 공격자에게 jenkins 접근정보를 유출당할 위험이 있다.

=> Mitigation : jenkins 자체를 외부에서 접근이 되지 않도록 하거나, 2차 인증 등을 사용할 수 있도록 조치한다.

Jenkins Components Management

  • Jenkins에서 가장 강력한 기능은 다양한 plug-in을 지원한다는 것이다. 그러나 다양한 plug-in을 지원한다는 것은 다양한 취약점 발생 포인트가 많다는 것을 의미하기도 한다.
  • 주기적으로 Jenkins > Configuration > Plug-in 메뉴를 들어가서 사용하고 있는 Plug-in 중 취약점이 존재하는 플러그인이 있는지 확인해야 한다.
  • Jenkins에서는 Plug-in과 Jenkins 자체에 대한 취약점 정보를 패치 때마다 공개하는데 이는 다음 링크에서 확인할 수 있다. (링크)

=> Mitigation : 위 링크에 취약점이 존재하는 Plug-in은 보안 패치가 적용된 버전으로 업그레이드 해준다.

Jenkins Credential Management

  • Jenkins에서는 pipeline 및 Job 구성에 필요한 계정정보, Token, API Key 등 Secret 값을 저장할 수 있는 Credential 기능이 있다.
  • Credential은 Jenkins Job Log에 마스킹 처리되는 등 일반 유저 권한으로는 Credential 정보를 확인하기 어려워 보이지만 우회하여 일반 사용자 권한으로도 조회가 가능하다.(추후 게시)

=> Mitiagtion : Jenkins Credential에는 노출되어도 민감하지 않은 정보정도만 저장을 하고 그 외 정보는 Harbor사의 Vault나 AWS Secrets Manager 등 secret management를 구축한 뒤 Jenkins와 연동해 사용하는 것이 좋다. (Jenkins에 연동 Plug-in 존재)

Jenkins Role Management

  • 규모가 크고 직원수가 많은 기업일수록 내부 직원의 계정정보가 유출될 가능성이 높아진다. 계정정보가 유출되더라도 Jenkins 내에서 영향력을 줄이기 위해서는 유저의 권한관리가 필수다.
  • 특히, Jenkins의 scripts기능(http://jenkins도메인/scripts)은 기본적으로 관리자만 접근가능한데 설정을 변경할 시 일반 사용자도 접근이 가능하므로 한번 체크해 보는 것이 좋다

=> Mitigation : Jenkins 는 Role Base로 권한관리가 가능하므로 팀 단위 혹은 그룹 단위로 사용자 권한을 분산시키고 관리자 권한은 최소화 해야 한다.

profile
DevSecOps

0개의 댓글