답변:
스택 충돌은 상당히 오래된 기술을 기반으로하는 악용입니다. 프로세스가 사용하는 메모리 는 스택과 힙의 두 영역으로 나뉩니다 . 일반적으로 스택은 아래쪽으로 자라며 힙은 위쪽으로 자라고 상상합니다. 둘 중 하나 가 다른 쪽과 충돌 하기에 충분히 자라면 어떻게됩니까 ? 보다 일반적으로, 스택이 관련없는 메모리 공간으로 침입하기에 충분히 커지면 어떻게됩니까? 원래 취약점은 12 살이며 Linux 커널 개발자는 guard page 를 사용하여 일시적으로 수정했습니다 . 그러나 Qualys의 연구원들은 가드 페이지에도 불구하고 이것을 악용했습니다.
스택 크래시 취약점은 보안 연구원 Gaël Delalleau 의 발견으로 2005 년에 처음 발견 되었고 5 년 후 Rafal Wojtczuk 연구원 의 리눅스 취약점 이 발표 되면서 점차 널리 인식되고 있습니다. Linux 개발자 는 스택 충돌을 방지하기위한 보호 기능 을 도입 했지만 오늘날의 연구에 따르면 공격자가 해당 측정을 우회하는 것이 비교적 쉬운 것으로 나타났습니다.
Qualys가 개발 한 주요 개념 증명 공격은 CVE-2017-1000364로 색인화 된 취약점을 악용합니다. Qualys 연구원은 CVE-2017-1000365 및 CVE-2017-1000367을 포함하여 별도의 취약성을 악용하기 위해 Stack Clash를 사용하는 공격을 개발했습니다. 예를 들어, Qualys가 최근에 발견 한 Sudo의 최근 수정 된 결함 인 CVE-2017-1000367과 함께 로컬 사용자는 Sudo를 이용하여 훨씬 더 광범위한 OS에 대한 전체 루트 권한을 얻을 수 있습니다. Qualys는 지금까지 익스플로이 트가 원격으로 코드를 실행하도록 만들 수 없었습니다. 그들이 조사한 유일한 원격 응용 프로그램은 Exim 메일 서버였습니다. 우연히도 악용 할 수없는 것으로 판명되었습니다. Qualys는 이러한 원격 코드 실행 악용 가능성이 배제 될 수 없다고 말했다. Qualys는 나중에 개념 증명 익스플로잇을 릴리스 할 것이라고 말했다.
[...] Qualys의이 상세한 기술 자문 과 grsecurity의이 기술 분석에서 훨씬 더 많은 정보를 얻을 수 있습니다 .
2010 년의 원래 수정에 대한 LWN 기사 인용 :
Linux는 프로세스 스택과 힙 페이지를 분리하지 않기 때문에 스택 페이지를 인접한 힙 페이지로 오버런 할 수 있습니다. 이것은 (예를 들어 재귀 호출에서) 충분히 깊은 스택이 힙의 메모리를 사용하게 될 수 있음을 의미합니다. 그런 다음 해당 힙 페이지 (예 : X 클라이언트)에 쓸 수있는 프로그램은 호출 중 하나의 리턴 주소를 조작하여 선택한 위치로 이동할 수 있습니다. 이는 클라이언트가 서버로 하여금 원하는 임의의 코드 실행 코드를 실행하게하여 루트 권한을 얻을 수 있음을 의미합니다.
위의 설명은 다양한 유닉스 계열 커널에 적용됩니다.
Ars Technica는 Qualys 보고서에 언급 된 임시 해결 방법 ( " 로컬 사용자 및 원격 서비스 의 어려운 RLIMIT STACK 및 RLIMIT_AS 를 낮은 값으로 설정")에 주목하지만, 이것이 반드시이 악용으로부터 보호하는 것은 아니라는 점에 유의해야합니다 . 현재 유일한 안전한 방법은 업그레이드하는 것입니다. grsecurity 분석에 따르면 :
실제 문제는 스택 프로빙이 없기 때문에이 문제를 해결하기위한 커널 전용 시도는 항상 불완전한 것임을 분명히해야합니다. 대안적인 실제 솔루션은 모든 사용자 영역을 재건하는 데 달려 있기 때문에, 이것은 아마도 미래에 유일하게 실현 가능한 솔루션 일 것입니다.
2010 익스플로잇은 X 서버를 사용했고,이 서버는 sudo를 사용했으며, 다음 서버는 어느 시점에서 높은 권한으로 실행되는 다수의 userland 프로그램 일 수 있습니다.
Qualys는 아직 악용에 대한 개념 증명 코드를 아직 게시하지 않았습니다 (나중에 그렇게 할 계획).
CVE-2017-1000364와 관련된 여러 Ubuntu 보안 공지가 있습니다.
또한 CVE 추적기 는 여러 릴리스 / 커널 조합을 보류중인 수정 사항으로 나열합니다 .
일반적으로 가장 간단한 수정 방법은 시스템을 최신 커널 패키지로 최대한 빨리 업데이트하는 것입니다.
USN의 관련 커널 버전 (을 사용하여 정리 for i in {24..35}; curl -s https://www.ubuntu.com/usn/usn-33$i-1/ | pup 'dl:nth-last-of-type(1)'
) :
위에서 언급 한 sudo 버그는 2017 년 5 월 30 일부터 USN-3304-1에 포함됩니다 .