Kernel에서 발견된 또 다른 퓨텍스 취약점(CVE-2021-3347)
Linux 취약점은 계속 쌓여갑니다. 해마다, 해마다. 오늘날의 복잡한 컴퓨팅 환경을 고려할 때 불가피한 현상이라고 할 수도 있습니다. 그럼에도 불구하고 Linux OS Kernel의 동일한 핵심 요소가 계속해서 취약한 영역으로 드러나는 것은 실망스러운 일입니다.
2020년까지, Linux 퓨텍스 구현을 다루는 14개의 CVE가 가 14개나 있습니다. 물론 퓨텍스는 매우 복잡합니다. 퓨텍스가 필수 기능을 제공하지만 퓨텍스가 명확하게 이해되지 않는 경우가 많으며, 퓨텍스 구현의 복잡성을 고려할 때 취약성이 불가피하다고 주장하는 사람들도 있습니다.
안타깝게도 2021년 1월 말, 퓨텍스 오처리와 관련된 또 다른 Linux Kernel 취약점이 발견되었습니다. 더 심각한 것은, 이 취약점은 위험한 사용 후 무료 취약점과 관련이 있다는 것입니다.
이 글에서는 Linux Kernel에 퓨텍스 시스템 호출이 있는 이유를 간략하게 설명하고 퓨텍스 구현의 복잡성으로 인해 취약점이 발생할 수 있는 이유를 설명합니다. 또한 사용 후 무료 취약점과 이러한 취약점이 왜 위험한지에 대해 자세히 알아보세요.
새로운 취약점의 고유한 특징과 이를 방어하기 위해 조직이 할 수 있는 일, 그리고 광범위한 Linux Kernel 취약점에 대해 알고 있는 내용을 다룰 것입니다.
콘텐츠
퓨텍스 소개
최신 Linux 취약점이 왜 그렇게 중요한지 이해하려면 먼저 퓨텍스가 어떻게 작동하는지 이해해야 합니다.
퓨텍스 사용과 퓨텍스 오용으로 인한 취약점은 애플리케이션에서 프로세스를 조정하는 데 사용되는 낮은 수준의 OS 기능, 특히 애플리케이션이 서로 다른 우선순위를 가진 상호 의존적인 작업을 조정해야 하는 경우와 관련이 있습니다.
그렇다면 퓨텍스는 무엇인가요?
동시 작업은 종종 변수와 같은 동일한 리소스에 대한 제어가 필요하지만 서로 다른 시간에 서로 다른 속도로 수행됩니다. 운영 체제는 리소스에 대한 이러한 제어를 조정해야 합니다. 2003년 Linux Kernel에 퓨텍스가 도입되기 전에는 공유되는 리소스를 잠그고 잠금 해제하기 위해 시스템 호출이 필요했습니다.
그러나 시스템 호출은 상대적으로 프로세서를 많이 사용합니다. 퓨텍스("빠른 사용자 공간 뮤텍스"의 줄임말)는 시스템 호출을 통해 리소스를 지속적으로 잠그고 잠금 해제하는 대신에 대안을 제공합니다. 대신, 퓨텍스는 프로세스가 변수에 대한 잠금을 공유할 수 있는 리소스 효율적인 방법을 제공합니다. 퓨텍스는 복잡하며 정확한 설명은 이 글의 범위를 벗어납니다. 자세한 내용은 위키백과 문서(.
PI-futex
퓨텍스는 변화하는 컴퓨팅 환경에 적응하기 위해 시간이 지남에 따라 진화해 왔습니다. 이러한 진화 중 하나는 바로 우선순위 상속 또는 PI-futex.
PI 퓨텍스가 필요한 이유는 무엇인가요? 표준 퓨텍스 아키텍처에서는 운영 체제가 우선순위가 높은 작업이 우선순위가 낮은 작업과 잠금을 공유하는 결정론적 실행을 보장하는 데 어려움을 겪을 수 있습니다.
실생활의 예로 미디어 플레이어를 생각해 보세요. 먼저 미디어 플레이어는 오디오 또는 비디오 미디어가 끊김이나 중단 없이 실시간으로 컴퓨터를 통해 공급되도록 해야 합니다. 이는 최우선 순위가 높은 작업입니다. 미디어가 원활하게 재생되지 않으면 사용자는 금방 실망하게 됩니다.
동시에 미디어 플레이어는 플레이어 컨트롤, 앨범 아트, 추천 등 우선순위가 중간 또는 낮은 다른 작업도 처리해야 합니다. 이러한 작업은 모두 다른 속도로 진행되는 공통 요소가 있기 때문에 사용자 경험에 영향을 주지 않는 방식으로 이러한 작업을 저글링하는 것은 프로그래머에게 어려울 수 있습니다.
애플리케이션이 우선순위는 다르지만 동일한 데이터와 관련된 다양한 작업을 처리해야 하는 상황은 무수히 많습니다. 한 가지 예로 전 세계 사용자의 동시 쿼리를 처리하는 웹 서버를 들 수 있습니다.
따라서 PI 퓨텍스는 운영 체제가 공유 잠금을 구현하는 동시에 우선순위가 다른 명령이 적시에 실행되도록 보장하기 위해 특별히 설계된 퓨텍스입니다.
퓨텍스 익스플로잇의 오랜 역사
PI-퓨텍스의 복잡성을 살펴보면 퓨텍스를 처리하는 것이 왜 상대적으로 쉽게 보안 문제를 일으킬 수 있는지에 대한 통찰력을 얻을 수 있습니다. 프로그래머가 퓨텍스의 복잡성을 처리하는 데 어려움을 겪을 수 있고, 따라서 제대로 구현되지 않은 동시 프로그래밍을 적용하여 익스플로잇의 문을 열어줄 수 있기 때문에 여러 코어 시스템이 퓨텍스 문제를 악화시킵니다.
Linux Kernel에 이미 14개의 알려진 퓨텍스 취약점이 있다는 것은 놀라운 일이 아닙니다. 첫 번째 취약점입니다, CVE-2005-0937은 2005년에 보고되었습니다. 이 취약점 중 하나는 Android에서 권한 상승 공격의 가능성으로 이어져 많은 주목을 받았습니다. 사용자가 웹 브라우저를 사용하는 것만으로 안드로이드 폰을 루팅할 수 있게 해주는 취약점입니다..
타월루트 익스플로잇이라고 불리는 이 취약점은 다음과 같이 지정되었습니다. CVE-2014-3153. 이 익스플로잇은 푸텍스 구현과 푸텍스 대기열 기능의 버그를 중심으로 이루어집니다. 최신 취약점과 마찬가지로 타월루트 역시 PI-futex와 관련이 있습니다.
해커는 퓨텍스 대기열을 과부하시킴으로써 Android에 과부하를 일으켜 활성 앱이 루트라고 생각하는 상태로 만들 수 있습니다. 이는 결국 추가 익스플로잇의 가능성을 열어줍니다. 이 취약점은 Android를 넘어 많은 Linux 기반 운영 체제에 적용됩니다.
무료 사용 후 취약점 이해하기
최신 Linux 퓨텍스 익스플로잇의 핵심은 사용 후 무료 또는 UAF 취약점이라고 불리는 취약점입니다. 익스플로잇 자체에 대해 살펴보기 전에 UAF 취약점이 무엇인지 살펴보겠습니다.
사용자 후 해제 시나리오는 해당 메모리가 이미 해제되었음에도 불구하고 애플리케이션이 해당 메모리에 액세스하려고 할 때 발생합니다.
UAF 시나리오는 다양하지만, 프로그램의 포인터가 이미 삭제된 동적 메모리의 데이터 세트를 가리키는 경우를 한 가지 예로 들 수 있습니다. 일반적으로는 삭제된 데이터를 반영하기 위해 포인터를 지워야 합니다. 그러나 프로그래밍 오류로 인해 포인터가 계속 존재하여 빈 프로그래밍 메모리를 가리키는 경우가 있습니다. 이를 댕글링 포인터라고 합니다.
댕글링 포인터는 데이터 손상과 프로그램 충돌을 일으킬 수 있습니다. 광범위하게 사용되는 댕글링 포인터와 UAF는 해커가 임의의 악성 코드를 실행하는 데 악용될 수 있습니다.
사용 후 무료 취약점은 비교적 일반적이며 개발 공간 전반에 걸쳐 존재합니다. UAF를 수동으로 식별하기가 매우 어렵기 때문에 UAF 익스플로잇은 부분적으로 일반적입니다: UAF는 애플리케이션의 여러 부분에 걸쳐 결합된 동작으로 인해 존재하는 경향이 있으므로 UAF를 탐지하려면 개별 코드 세그먼트가 아닌 전체 코드베이스를 전체적으로 검사해야 합니다.
따라서 최신 Linux 퓨텍스 취약점은 탐지하기 매우 어려운 UAF 익스플로잇을 위한 공간을 만들어낼 수 있으므로 주의가 필요합니다.
새로운 퓨텍스 취약점에 대해 알고 있는 사실
앞서 말씀드린 것처럼, 최신 취약점에는 PI-퓨텍스도 포함되어 있습니다. 자세한 내용은 아직 밝혀지지 않았지만, 기본적으로 이 특정 퓨텍스 취약점은 사용자가 익스플로잇할 수 있는 위험을 초래합니다.
지금까지 알려진 바에 따르면 애플리케이션이 PI 퓨텍스를 잘못 처리하면 Linux Kernel이 일관되지 않은 상태를 반환할 수 있다는 것입니다. 경우에 따라 이러한 일관되지 않은 상태로 인해 Linux 작업 Kernel 스택에서 사용 후 무료 기회가 발생할 수 있습니다.
최신 취약점에 대한 자세한 내용은 아직 공개되지 않았지만 곧 공개될 것으로 예상됩니다. 저희 팀이 조사한 바에 따르면 이 문제는 2008년 이후의 Kernel을 사용하는 모든 Linux 배포판에 영향을 미치며, 기본적으로 야생의 모든 Linux 구현을 포괄하는 것으로 나타났습니다.
최신 퓨텍스 취약점의 잠재적 영향
이 특정 퓨텍스 취약점이 악용의 문을 열어준다는 점에서 특히 우려의 목소리가 높습니다. 그리고 영향을 받은 Linux 시스템의 수는 매우 당황스러운 수준입니다.
물론 퓨텍스 취약점과 UAF 취약점의 문제점은 프로그래머가 창의력을 발휘하면 다양한 익스플로잇으로 이어질 수 있다는 것입니다. 현재 최신 취약점에 대한 익스플로잇은 없지만 익스플로잇 코드가 등장할 위험은 높습니다.
이 취약점의 위험은 UAF 익스플로잇의 전형적인 위험을 중심으로 전개될 것으로 예상됩니다. 예를 들어 DoS 공격을 생각해 보세요. 새로운 퓨텍스 취약점은 운영 중단을 목적으로 시스템을 다운시키거나 클라이언트에 대한 서비스를 거부하는 데 사용될 위험이 있습니다. UAF 취약점은 종종 실행 중인 애플리케이션을 다운시키는 데 사용될 수 있기 때문입니다.
또한 UAF는 일반적으로 해커가 악성 코드를 실행할 수 있게 하여 데이터 도난과 같은 일반적인 사이버 범죄 문제를 일으킬 수 있습니다. 독자들은 금전적 손실, 평판 손상 등 잠재적인 결과를 이해할 수 있을 것입니다.
퓨텍스 익스플로잇 및 기타 Kernel 취약점으로부터 보호하기
Linux Kernel 취약성에 관한 한 패치는 언제나 정답입니다. 퓨텍스 취약점은 지속적으로 Kernel 변경과 그에 따른 패치로 이어져 왔습니다. 그러나 일관성이 떨어지는 것은 이러한 패치의 적용입니다.
조직에서 지속적으로 패치를 적용하면 익스플로잇이 야생에 등장하기 전에 최신 퓨텍스 취약점으로부터 보호받을 수 있습니다. 하지만 지속적으로 패치를 적용하는 것은 말처럼 쉬운 일이 아닙니다.
패치를 적용하려면 시간이 많이 걸리고 재시작이 필요한 경우가 많으며, 이는 곧 다운타임과 고객 불만 또는 매출 손실로 이어집니다. 이러한 이유로 많은 기업이 패치 적용을 소홀히 하여 알려진 취약점이 계속 악용될 수 있습니다.
재부팅 없이 자동화된 패치가 대안이 될 수 있습니다. 예를 들어, KernelCare는 최신 퓨텍스 관련 익스플로잇을 포함하여 알려진 취약점을 자동으로 보호하여 Linux 배포판을 손쉽게 패치 상태로 유지할 수 있습니다.
결론
현재 이 새로 발견된 Linux Kernel 취약점을 기반으로 시스템을 위험에 빠뜨릴 수 있는 익스플로잇은 아직까지 알려진 바가 없습니다. 그러나 익스플로잇이 출현할 위험은 높으며, 이는 단순히 UAF 취약점의 특성입니다.
시스템 관리자 또는 보안 전문가는 이 새로운 취약점을 다른 취약점과 마찬가지로 취급해야 합니다. 패치가 릴리스되면 패치를 적용하세요.
패치할 리소스가 없으신가요? 패치로 인한 다운타임에 지치셨나요? KernelCare를 사용해 보세요.