
CVE-2016-6662에 대비하여 MySQL 서버를 패치하기 위한 간단한 Ansible playbook
간단한 Ansible 플레이북으로 CVE-2016-6662로부터 MySQL 서버를 패치합니다.
간단히 말하면, 악성 .so 파일을 파일 시스템에 쓰고 서비스 재시작 시 로드하도록 구성을 수정하려고 시도합니다.
이 패치는 실제 공격을 막지는 않지만, mysqld_safe를 수정하여 .so 파일이 mysqld가 쓸 수 없는 표준 시스템 위치에서만 로드되도록 합니다. 또한 mysqld가 읽을 수 있는 다양한 기본값 파일의 존재와 권한을 확인하여 악성 코드가 이를 생성하거나 수정하는 것을 방지합니다.
전체 이슈는 https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-6662 에서 볼 수 있습니다; Percona의 Kenny Gryp이 짧지만 훌륭한 설명을 https://www.percona.com/blog/2016/09/12/database-affected-cve-2016-6662/ 에 게시했습니다.
이 플레이북은 https://github.com/percona/percona-server/commit/c14be53e029442f576cced1fb8ff96b58e89f2e0#diff-144aa2f11374843c969d96b7b84247eaR261 의 Percona 패치와 https://github.com/mysql/mysql-server/blob/5.7/scripts/mysqld\_safe.sh#L356-L364 의 MySQL 패치를 혼합한 사용자 정의 패치를 적용하려고 시도합니다.
다음을 수행합니다:
거의 백 개의 설치에서 이를 확인했습니다 - 대부분 데비안, 몇몇 레드햇과 수세입니다.
이 새 버전은 거의 200개 호스트에 적용되었으며, 명백한 문제는 없었습니다.
5.1 설정에서 _patch_가 실패하는 것을 관찰했습니다. mysql_safe 스크립트에 앵커 포인트가 포함되어 있지 않기 때문입니다. 그러나 해당 버전(및 그 이하)은 취약하지 않으므로 문제가 되지 않습니다.
변경된= 값이 0 또는 2이면 패치가 수행되지 않았음을 의미합니다(2는 _patch_를 설치하고 제거한 경우). 1 또는 3이면 패치가 수행되었음을 의미합니다. 다른 값은 예상치 못한 것이며 조사해야 합니다 :-)
추가 작업이 있으면 더 이상 명확하지 않습니다; 실제로 출력을 읽어야 합니다.
명확한 설명과 쉬운 해결 방법을 제공한 Kenny Gryp, Percona 및 MySQL에 감사드립니다; 원래 패치의 결함을 발견한 Patrick Forsberg에게 특별히 감사드립니다.
/vegi