본문 바로가기

ETC/기타 정보

[T0M4TO] Jenkins의 보안적 문제점 - 1탄

728x90
반응형

[출처 : https://hub.docker.com/_/jenkins]

Docker Hub에 공식으로 올라와 있는 jenkins 이미지에 대한 사용 방법이다.
직접 실행해보자

??? 안된다 ???
공식문서에는 저렇게 작성되어있지만 실제로 jenkins 이미지를 사용하고 싶다면 'jenkins/jenkins' 이런식으로 이미지명을 작성해 주어야 한다.
(문서좀 고쳐줘...)

사실 이걸 얘기하려는 것은 아니다.
이번에 얘기하고자 하는 주제는 Jenkins 구축 직후 생각한 'Jenkins의 보안적인 문제점'이다.

https://www.jenkins.io/doc/book/security/securing-jenkins/

 

Securing Jenkins

In the default configuration of Jenkins 1.x, Jenkins does not perform any security checks. This means the ability of Jenkins to launch processes and access local files are available to anyone who can access Jenkins web UI and some more. Securing Jenkins ha

www.jenkins.io

Jenkins 공식 홈페이지에서 설명하고 있는 보안에 대한 부분은 아직 다 읽어보지 않았기에 요건 2탄쯔음... 읽어서 올려보겠다.
우선은 Jenkins 구축 이후 개인적으로 생각한 Jenkins의 보안적인 문제점에 대해 적어보려 한다.
(Plugin을 아무것도 설치하지 않았을 때를 기준으로 함!)

바로 API Token에 만료기한과 권한체계가 전혀 없다는 것이다.

모두가 알듯이 API Token은 웹 콘솔 접근 없이 ID, API Token을 가지고 API를 사용할 수 있게 해준다.

그런데 Jenkins는 스크린샷처럼 API Token에 대하여 전혀 권한체계를 가지고 있지 않다.
보통은 API Token을 발급할때, 어떤 기능은 사용가능하게 어떤건 불가능하게 권한을 나누어 최소한의 권한을 가진 Token을 발급하는데, Jenkins는 그냥 admin 권한으로 모든 API Token을 발급해 버린다.

가뜩이나 기능이 많은 Jenkins인데, API Token이 탈취되면 권한제어가 안되기 때문에 아래와 같은 공격이 수행가능해진다.

  • groovy script를 이용한 command injection
  • groovy script, Jenkins CLI를 이용한 Jenkins 설정 임의 수정
  • groovy script, Jenkins CLI를 이용한 Jenkins 관리자 계정 임의 생성, 삭제, 수정

이외에도 여러가지 공격이 가능해질 수 있다.

그런데 그 와중에, Jenkins API Token은 만료시간도 없다. 
한번 만든 Token은 직접 Jenkins에서 삭제하지 않는 이상 계속 유효하다는 것이다.
API Token이 유출되었더라도 만료기한이 있다면 시간이 지남에 따라 Token을 사용할 수 없게 된다. 
하지만 Jenkins는 그마저도 안된다... 사실 Jenkins를 구축하고 나서 가장 쇼크를 받은 부분이다.
(Plugin 추가로 되는지는 잘 모르지만... 기본기능에 없다는 것은 좀 놀랐다.)

API Token에 대한 권한 체계가 잘 수립되어 있는 서비스 예시로는 Github가 있다.

만료기한, 권한체계까지 깔끔하게 넣을 수 있음을 알 수 있다.

아직 Jenkins 공식가이드를 전부 읽지 않았기에, 이를 조치할 수 있는 방법이 있을지도 모른다.
아니면 또 다른 부분이 보안적으로 별로라고 느껴질수도 있다. 
공부를 좀 더 해봐야겠다.

2탄에서 계속...


 

 

 

728x90
반응형