| 인기 높은 오픈소스 리눅스 커널서 8년 묵은 취약점 발견 | 2018.05.02 |
mmap() 핸들러 및 관련 드라이버에서 권한 상승 취약점 나와
mmap() 사용시 다양한 오류 발생...꼼꼼한 점검 필수 [보안뉴스 문가용 기자] 리눅스 커널의 최신 버전에서 8년 전부터 있어왔던 권한 상승 취약점이 발견됐다. 보안 업체 체크포인트(Check Point)가 발견한 내용이다. 이 취약점은 로컬의 사용자들이 높은 권한의 드라이버에 접속할 수 있게 해주며, 이를 통해 민감한 커널 메모리에서 읽기와 쓰기를 실시할 수 있다고 한다. 이 취약점은 CVE-2018-8781이라는 이름으로 등록됐다. ![]() [이미지 = iclickart] 체크포인트에 따르면 이 취약점은 DisplayLink의 udl 드라이버 내에 있는 fb_helper 파일 속 내부 mmap() 함수에 존재한다. 비교적 간단한 스캐닝과 검사를 통해 발견됐다고 한다. “드라이버들은 보통 독자적인 파일 조작 기능들을 가지고 있습니다. 그러므로 얼마든지 오류가 들어설 수 있습니다. 이번 리눅스 커널에서 8년이나 오류가 숨어있었다는 것만 봐도 알 수 있죠.” 체크포인트는 여기에 더해 mmap() 핸들러가 사용되는 드라이버들에서 여러 가지 취약점들이 나타난다는 사실 또한 증거로 제시한다. “이번에도 입력 값 확인 오류나 정수 오버플로우 오류가 발견됐습니다.” 체크포인트에 따르면 드라이버란 원래 내부 버퍼를 가지고 있는데, 이 내부 버퍼는 주변 장비와 공유된 메모리 영역을 나타낸다고 한다. 또한 사용자들이 버퍼 내의 메모리 부분만 접근할 수 있도록 하는 것이 일반적이다. 그런데 mmap() 함수는 공격자들이 제어할 수 있는 여러 필드들을 갖추고 있고, 그러므로 mmap() 함수를 개발자들이 사용하려면 꼼꼼한 취약점 점검을 반드시 해야 한다. 체크포인트에 따르면 개발자들이 mmap() 함수를 사용할 때 최소 다음 세 가지를 확인해야 한다고 말한다. 1) Region start : 0 <= offset < 버퍼의 끝 2) Region end : 버퍼의 시작 <= offset + length <= 버퍼의 끝 3) Region start <= Region End “특히 정수 오버플로우 취약점의 보편적이고 전형적인 예입니다. 서명되지 않은 오프셋이 있어서 1)번이 확인되지 않아요. 그리고 offset+size 계산식이 2)번 단계를 확인하지 않고요. offset 값이 비정상적인데도 말이죠.” 체크포인트의 보안 전문가들은 물리 메모리 페이지를 사용자에게 매핑해주는 remap_pfn_range()라는 중요 함수를 세부적으로 분석하다가 mmap()에서의 오류를 발견했다. 그리고 우분투 64비트 가상 기기에서 이 취약점이 있음을 확인할 수 있었다고 한다. “또한 점검을 이어갔더니 사용자가 매핑된 페이지를 읽고, 그 페이지들에서 쓰기 권한도 가져갈 수 있다는 걸 발견했습니다. 이 말은 곧 사용자가 CVE-2018-8781 취약점을 통해 임의의 리눅스 커널 내에서 임의의 코드도 실행할 수 있다는 뜻이 됩니다.” 체크포인트 측의 설명이다. “취약점 자체를 찾아내는 건 그리 어려운 일이 아니었습니다. 그럼에도 이 취약점이 8년전부터 존재했었다는 게 중요한 부분입니다. 아무리 인기가 높은 오픈소스 프로젝트라고 하더라도, 취약점이 오랜 기간 숨어있을 수 있다는 뜻이 되지요. 그러니 취약점 제보와 해결이 빠른 것이 오픈소스 환경의 장점이라는 말이 무색해지죠. 반대로 누구라도 제일 먼저 취약점을 찾는 사람이 될 수도 있습니다.” 체크포인트는 리눅스 커널 팀에 이 사실을 3월 18일 경에 알렸다. 리눅스 커널은 바로 당일에 패치를 발표했다. 그리고 패치에 대한 점검이 끝난 후인 3월 21일부터 패치가 배포되기 시작했다. [국제부 문가용 기자(globoan@boannews.com)] <저작권자: 보안뉴스(www.boannews.com) 무단전재-재배포금지> |
|
|
|