내 데이터베이스는 CVE-2016-6662의 영향을 받나요?

5 개월 ago fermat39 0

[원문 : https://www.percona.com/blog/2016/09/12/database-affected-cve-2016-6662/]

이 글의 소유권은 원저자에게 있습니다. 잘못된 번역이나 오역들은 모두 번역자의 능력문제입니다. ㅠㅠ오역 및 추가사항에 대해서 댓글 달아주시면 반영하겠습니다.

 

이 블로그에서 저는 CVE-2016-6662 취약점, 내가 사용하는 데이터베이스에 적용이 되는지 확인하는 방법, 오래된 MySQL을 운영하고 있다면 취약점을 피할 수 있는 방법을 다룰 것입니다.

 

취약점이 조치된 MySQL 서버들도 알려줄 것입니다.

 

이전 글에서 알려드린 것처럼 원격 루트 코드 실행 (remote root code execution) (CVE-2016-6662)이 가능한 상황이 페르코나 서버 (그리고 MySQL)에 있습니다.

 

취약점 접근

legalhackers.com 웹사이트에 CVE-2016-6662 취약점이 완벽하게 설명되어 있습니다.

 

요약하자면, 루트 권한을 얻기위해 사용되는 방법들은 여러 조건이 필요합니다:

  1. 파일 권한 (아니면 모든 것을 관장하는 SUPER)을 가진 원격 (아니면 심지어는 로컬) MySQL 사용자.
  2. MySQL 시스템 사용자 접속이 신규 설정 파일의 수정이나 생성을 가능하게 하는 MySQL 설정 파일과 관련된 부적절한 OS 파일/디렉토리 권한
  3. 몇 가지 테크닉들이 악의적인 공유 라이브러리 로딩을 포함하기 위해 MySQL 설정을 변경합니다.

    현재 알려진 테크닉들은 현재 FILE이나 SUPER 권한을 필요로 하지만, (FILE 권한 없이도 설정을 변경하는 법을 설명하는) CVE-2016-6663 에 밝혀지지 않은 방법도 있습니다

  4. MySQL가 재시작될 때, 악의적인 공유 라이브러리가 로드, 이 공유 라이브러리는 권한 상승이 가능한 코드를 포함합니다.

 

취약점이 조치된 버전

MySQL 패치

MySQL는 이미 보안 패치를 포함한 릴리즈 버전을 가지고 있습니다.

다음은 MySQL 5.6.33의 릴리즈 노트의 내용입니다:

  • mysqld_safe의 경우, --malloc-lib 에 대한 아귀먼트로 이제 /usr/lib/usr/lib64/usr/lib/i386-linux-gnu, /usr/lib/x86_64-linux-gnu 중 하나를 사용하여야 합니다. 추가로 --mysqld 과 --mysqld-version 옵션은 커맨트라인에서만 사용될 수 있고, 옵션 파일에서는 불가합니다. (Bug #24464380)
  • It was possible to write log files ending with .ini or .cnf that later could be parsed as option files. 옵션 파일로써 차후에 분석될 수 있는 .ini나 .cnf 로 끝나는 로그 파일을 만드는 것이 가능하였습니다. 일반 쿼리 로그와 느린 쿼리 로그는 더이상 .ini나 .cnf로 끝나는 파일에 쓸 수 없습니다. (Bug #24388753)
  • REPAIR TABLE 이 임시 파일들에 사용한 방법을 오용함으로써 권한 상승이 가능하였습니다. (Bug #24388746)

여러분이 5.5.52, 5.6.33 or 5.7.15를 사용하고 있다면 취약점에 영향을 받지 않습니다.

릴리즈 노트: 5.5.525.6.335.7.15

페르코나 서버

페르코나가 보안을 지키는 방법은 (–malloc_lib를 포함하여) LD_PRELOAD로 로딩되도록 하는 라이브러리를 제한하고 그 라이브러리들을 /usr/lib, /usr/lib64, MySQL 기본 설치 디렉토리로 제한하는 것입니다.

이는 루트 사용자가 접근이 가능한 위치들만이 공유 라이브러리를 로드할 수 있다는 것을 의미합니다.

다음 페르코나 서버들은 패치를 가지고 있습니다:

우리는 신규 페르코나 XtraDB 클러스터 버전에 대해서도 조치하고 있습니다.

앞으로의 페르코나 서버 릴리즈들은 MySQL의 모든 패치를 포함합니다.

MariaDB

MariaDB는 5.5.5110.1.1710.0.27에 해당 취약점을 조치하였습니다.

 

저는 오래된 MySQL 버전을 운영중입니다. 무엇을 해야하나요?

데이터베이스 설정을 변경하는 것이 가능합니다. 그래서 (MySQL 버전 변경과 데이터베이스의 재시작이 없어도) 더이상 취약점에 영향을 받지 않습니다. 몇 가지 방법들이 있고, 각각의 방법들은 취약점에 노출되는 조건에 각각 해당합니다.

 

수동으로 mysqld_safe 패치

이 블로그를 막 공개하기 전에 여러분의 데이터베이스에 패치하는 다른 방법을 다룬 다른 글이 공개되었습니다: https://www.psce.com/blog/2016/09/12/how-to-quickly-patch-mysql-server-against-cve-2016-6662/.

데이터베이스 사용자 권한

취약점을 피하는 방법은 원격 사용자가 SUPER나 파일 권한을 가지지 않도록 하는 것입니다.

그러나,  CVE-2016-6663에서(아마도 MySQL 릴리즈 노트에서 언급된 REPAIR TABLE 이슈와 관련있는)어떠한 파일 권한이 없더라도 가능한 방법이 있다고 언급하고 있습니다.

설정 파일 권한

취약점은 몇몇 MySQL 설정 파일에 쓰기 가능이 필요합니다. 쓰기 가능을 막으면 여러분은 안전합니다.

아래처럼 다양한 설정 파일에 대해 여러분의 설정 권한을 확인하세요:

  • MySQL은 여러분의 datadir를 포함하는 다수의 경로에서의 설정 파일을 읽습니다
    • (보통 /var/lib/mysql인) datadir 디렉토리에 (아무것도 없는) my.cnf과 .my.cnf 파일을 만듭니다. 그리고 0644권한으로 소유자 및 그룹을 root로 설정합니다.
    • 살펴 볼 디렉토리 :/etc/my.cnf /etc/mysql/my.cnf /usr/etc/my.cnf ~/.my.cnf  (mysqld –help –verbose 로 mysqld가 참고하는 곳을 볼 수 있습니다)
  • MySQL은 여러분의 현재 설정에 정의된 !includedir 경로들도 포함합니다 – mysql 사용자가 쓰기 가능하지 않도록 확인하세요
  • 어떠한 설정 파일도 mysql 사용자에 의해 쓰기가 가능해서는 안 됩니다 (소유자와 권한을 변경)