IT/ISSUE

집사 Jenkins가 위험하다. (CVE-2020-2100)

종금 2020. 2. 25. 00:35
반응형

 

 

과거 게시물 보면 시큐어 코딩에 대해 얘기할 떄 Jenkins에 대한 게시글이 하나 보일 것이다.

Jenkins는 웹사이트를 관리하는 툴로 위의 대표 그림처럼 개발사이트부터 운영사이트까지 웹 관리하는데 많은 도움을 주는 웹 집사이다.

 

하지만 2020년 1월 CVE를 통해 Jenkins 취약점이 발표되었다.

CVE 넘버는 2020-2100으로 취약점을통해 DDos 공격이 가능한 취약점이다.

 

취약점의 개요는 다음과 같다.

젠킨스 버전 2.218 이하의 버전이거나 LTS 2.204.1 이하 버전에서 사용할 수 있으며

33848포트를 통해 UDP증폭을 만들어 반사 서비스 거부 공격을 진행한다.

 

먼저 반사 서비스 공격이 무엇일까?

반사 공격이란 공격자가 공격할 때 피해자에게 바로 공격하는 것이 아닌 

다른 서버를 통해 반사해서 공격하는 방식이다.

 

이때 공격자는 반사서버를 지나게 되는데 반사서버의 역할은 패킷의 크기를 증폭시키는 것에 있다.

예를들어 공격자는 서버에 30bit의 패킷을 보내지만 반사서버를 거치게 된다면 이 패킷은 3000bit로 

크기가 증폭되게 됩니다. 

그리 된다면 공격자는 별 계산 없이 작은 데이터를 보내도 반사서버에 의해 데이터가 증폭되면 피해자 PC는 큰 데이터를 처리하기 위해 조금이라도 더 자원을 쓰게 됩니다.

 

여기서 중요한건 DRDOS를 공격하기 위한 서버 목록에 DNS 서버가 존재한다는 것입니다.

(이외에도 NTP, SNMP, CHARGEN 등이 존재합니다.)

그렇다는 얘기는 Jenkins의 DNSMulticast 또한 반사 서비스 거부 공격으로 활용될 수 있다는 것이죠.

 

그런데 왜 33848포트일까? 

이는 젠킨스에서 제공하는 서비스 hudson DNSMultiCast 서비스를 33848포트가 사용하기 떄문인데

hudson DNS Multicast는 Default 기능으로 제공되는 서비스로서 장비 검색을 하기 위해 쓰인다.

 

먼저 DNS Multicast가 무엇인지 알아보자 

먼저 DNS란 Domain Name System으로 도메인 네임을 입력시 혹은 아이피 입력시 자동으로 아이피나 도메인 네임으로 변환해주는 시스템이다.

Multicast란 브로드캐스트보다 좀더 세분화하여 브로드캐스트 하는 기능으로 여러곳으로 동시에 전달하는 것을 목표로한다. 이 기능은 한번에 여러 메시지를 생성한다.

둘의 결합으로 이루어진 DNS Multicasting은 같은 네트워크 안에 속한 호스트들에 대해 호스트이름을 이용해 IP를 스스로 찾아 저장할 수 있다.

 

 

만약 허드슨 기능이 없다면 Jenkins에게 서버 장비 하나하나 모두 입력하며 관리해야 하지만

Jenkins에 DNS Multicast 기능을 이용한다면 같은 네트워크에 존재하는 서버는 모두 젠킨스가 스스로 

검색하여 알 수 있는 관리의 편리성이 높아지는 것이다. 

 

 

그러면 " 우리는 DOS를 대비해 공격 맞으면 대신 죽어줄 L4 이상 장비가 있는데요? 그럼 괜찮지 않을까요?"

라는 담당자가 있다면 이 취약점이 왜 핫픽스 되야하는지 알려주겠다.

 

일단 대략적 회사 네트워크 구성도를 그려보면 아래와 같이 볼 수 있다.

사내망과 DMZ는 그리고 내부망으로 이루어진 데이터베이스존과 데이터베이스 접근하기 위한 내부망 등으로 크게 이루는 것을 상상해보자

이 때 Jenkins는 웹서버와 밀접한 관련이 있는 어플리케이션으로 WEB/WAS의 위치인 DMZ에 설치되있을 것이다.

그리고 젠킨스는 33848포트를 이용해 본인이 직접 서비스 구성도를 그릴것이다.

하지만 젠킨스의 위치를 보면 알겠지만 앞에 존재하는 IPS는 커녕 만약 DOS공격을 막기 위한 WEB/WAS앞 DMZ 입구에도 보안 서비스를 설치해도 이는 통과할 것이다. 

물론 DB존에 DB safer와 같이 DB ACL 솔루션은 거쳐야하기에 DB서버는 만약 설정에 따라 지킬 수는 있을 것이다.

하지만 문제는 DB safer로 아무리 acl을 한다지만 WEB/WAS의 접근을 막는다면 WEB/WAS는 대체 어디서 정보를 가져오냐는 말이다!

 

즉 WEB/WAS의 기능 때문에 DB에 대한 ACL은 화이트 리스트로 등록이 되어 있을 것이고

이 결과 Jenkins가 하는 DOS공격에 DB까지 위험하다는 것이다.

 

즉 우리가 아무리 보안이 강한 문을 사용해 내부를 철저히 막아도 문안에 있는 젠킨스가 뿌리는 DOS 공격은 문안에서 벌어지는 일이라 보안장비는 공격을 지켜만 볼 뿐 아무 쓸모가 없다. 

 

이 방법을 해결하기 위해서는 세가지가 있다.

1. Jenkins가 제공한 최신버전의 업데이트를 하거나 

2. hudson DNSMultiCast 기능을 끄거나

3. ACL을 통해 Hudson이 사용하는 33848 포트를 제거해야한다.

** 이때 2번 3번을 사용하면 DNS 서비스를 이용할 수 없으므로 관리자가 IP를 직접 입력해주는 수고가 생길것이다.

 

 

마무리를 어떻게 끝내야 할지 모르겠지만

 

일단 제일 귀찮지 않게 끝내기 위해 업뎃을 생활화 하자 끄읕!

반응형