Samsung Galaxy S6의 그래픽 드라이버 버그로 인해 Google Chrome 탭 데이터가 유출된 방법

click fraud protection

보안 취약점이 어떻게 발견되는지 궁금하신가요? 영국에 본사를 둔 회사인 GraphicsFuzz는 Google Chrome에서 열린 탭의 데이터를 보는 데 활용할 수 있는 Samsung Galaxy S6의 그래픽 드라이버 버그를 어떻게 발견했는지 설명합니다.

지난 3월 말, GPU 신뢰성 테스트를 전문으로 하는 영국 기반 스타트업 회사가 우리에게 접근했습니다. 그들이 발견한 GPU 버그 그 원인이 퀄컴 스냅드래곤 845삼성 갤럭시 S9/S9+ 웹 페이지를 방문할 때 재부팅합니다. 라는 회사에서 그래픽퍼즈, 우리와 협력하여 다음 주소로 문제를 보고했습니다. 퀄컴 그리고 삼성. 독자 중 일부는 회사가 어떤 모습인지 알아보는 데 관심이 있었습니다. 그래픽퍼즈 이러한 취약점을 찾을 수 있었기 때문에 우리는 회사와 협력하여 그들이 오래된 GPU 취약점을 어떻게 발견했는지 보여주었습니다. 이미 패치된 이 취약점을 통해 공격자는 원격으로 다음 내용을 "스파이"할 수 있습니다. 구글 크롬 브라우저 탭 삼성 갤럭시 S6.

이 사용자는 악성 웹페이지를 방문하기 전에 은행 웹사이트를 보고 있었습니다. 내용이 캡처되어 원격 서버에 업로드되었습니다. 원천: 그래픽퍼즈.

GraphicsFuzz가 GPU 버그를 찾는 방법

그래픽 드라이버는 셰이더 프로그램을 가져와 실행되도록 GPU로 전송하여 이미지를 렌더링하는 방식으로 작동합니다. 셰이더를 GPU로 보내기 전에 그래픽 드라이버는 이를 GPU가 이해할 수 있는 형식으로 변환합니다. 잘못된 번역으로 인해 렌더링 오류, 프로그램 또는 장치 충돌, 잘못된 이미지, 심지어 보안 문제까지 발생할 수 있습니다. 그래픽퍼즈 가지고있다 자동화된 테스트 스위트 이를 통해 참조 셰이더 세트를 기반으로 이러한 버그를 찾을 수 있습니다. 사용자가 테스트를 실행합니다, 결과 이미지는 모두 동일하게 보입니다. 다르게 보이는 이미지는 버그가 있음을 의미합니다.

GraphicsFuzz 테스트 스위트를 실행하는 여러 인기 장치의 결과입니다. 이 차트에는 Samsung Galaxy S6, Samsung Galaxy S7 및 Samsung Galaxy S8이 포함되어 있습니다. 원천: 그래픽퍼즈.

삼성 갤럭시 S6의 경우, 그래픽퍼즈 행 중 하나에 있는 이미지가 다른 테이블에 있어야 하는 이미지를 표시하고 있음을 발견했습니다. 이는 이전 테스트의 이미지가 이후 테스트로 유출되었음을 의미합니다. 그런 다음 팀은 Google Chrome에서 테스트 모음을 다시 실행하여 웹페이지의 일부가 이미지에 나타나는 것을 발견했습니다. 게다가 그들은 다른 탭을 열면 이미지에 다른 탭의 일부가 표시된다는 사실을 발견했습니다. 본질적으로 이 버그로 인해 하나의 Google Chrome 탭이 다른 Chrome 탭에 대한 정보를 유출할 수 있었습니다! 뒤에 팀 그래픽퍼즈 의도적으로 보안 버그를 찾는 것은 아니었지만, 테스트 결과 결국 발견하게 되었습니다. (팀은 갤럭시 S6의 순정 삼성 브라우저의 버그를 재현했으며, 모질라 파이어 폭스.)

버그 작동 방식

Samsung Galaxy S6에서 장기 실행 버그를 유발하는 데 사용된 이미지. 원천: 그래픽퍼즈.

다음이 만든 "악성" 웹페이지 그래픽퍼즈 위와 같이 WebGL을 사용하여 캔버스 내부에 우주 장면을 그리려고 시도합니다. 각 픽셀의 색상은 GPU에서 실행하기 위해 웹페이지에서 제공하는 프로그램인 프래그먼트 셰이더에 의해 결정됩니다. 그만큼 그래픽퍼즈 프레임워크가 조각 셰이더를 수정하여 정말 오랫동안 실행되게 만들었습니다. 셰이더가 너무 오랫동안 실행되면 브라우저나 운영 체제는 일반적으로 렌더링을 중단합니다. 그러나 GPU가 몇 픽셀을 그린 후 렌더링을 중단하는 동안 GPU 드라이버는 이를 Google Chrome에 보고하지 않았습니다. (가비지 비디오 메모리를 보여주는 기사 상단의 이미지를 보면 실제로 상단의 우주 장면의 일부를 볼 수 있습니다. 왼쪽.) 이는 중단 전에 렌더링된 픽셀이 그대로 남아 있음을 의미합니다. 즉, 최종 렌더링된 이미지는 대부분 가비지 비디오입니다. 메모리. 비디오 메모리는 다른 웹 페이지를 렌더링하는 데 지속적으로 사용되므로 "가비지" 데이터에는 실제로 다른 웹 페이지의 이전 렌더링이 포함됩니다. 따라서 다른 웹페이지가 "악성" 웹페이지에 표시되게 됩니다. 결정적으로 WebGL을 사용하면 웹 페이지가 렌더링되는 모든 내용을 캡처할 수 있습니다. 이 이미지는 원격 서버에 업로드됩니다.

Chrome 탭 데이터 '누출'을 유발하는 장기 실행 GPU 버그를 설명하는 다이어그램 원천: 그래픽퍼즈.

Google 크롬은 여러 프로세스를 사용하므로 서로 다른 탭이 격리되는 경우가 많기 때문에 표면적으로는 이 공격이 불가능해 보입니다. 그러나 Chrome은 단일 "GPU 프로세스"를 사용하여 GPU와 상호 작용합니다. 즉, 모든 탭이 동일한 GPU 메모리를 공유하므로 이 공격이 작동할 수 있습니다. 위의 다이어그램은 이를 더 자세히 보여줍니다.

버그는 이 비디오의 처음 22초 동안 시연됩니다. GraphicsFuzz에서 발견한 다른 보안 문제도 시연됩니다.

배워야 할 교훈

WebGL을 사용하면 악성 웹페이지에서 실행을 위해 GPU로 코드를 보낼 수 있으므로 오작동하는 GPU는 Google Chrome 및 Android의 모든 보안 조치를 우회할 수 있습니다. Google은 GPU 버그를 수정할 수 없습니다. 회사가 하드웨어와 드라이버를 통제하지 않기 때문입니다. 이 경우 버그를 수정하는 것은 GPU 공급업체(이 경우 ARM)의 몫이고 업데이트에 수정 사항을 통합하는 것은 영향을 받는 장치의 OEM(이 경우 Samsung)입니다. 믹스에 캐리어를 추가하면 이와 같은 버그를 수정하는 데 얼마나 오랜 시간이 걸릴 수 있는지 쉽게 알 수 있습니다. 최소 5개월 대부분의 Samsung Galaxy S6 사용자가 패치를 받을 수 있습니다.

그래픽퍼즈 GPU 공급업체가 GPU에서 잘못된 코드가 생성 및 실행되도록 하는 잘못된 컴파일 버그 등 감지하기 어려운 버그를 찾는 데 도움이 됩니다. 자동화된 테스트 프레임워크를 통해 이 기사에 소개된 것과 같은 버그를 찾을 수 있습니다. "악성" 웹 페이지로 인해 발생하는 장기 실행 루프는 다음과 같은 다른 장치에서도 문제를 일으키는 것으로 나타났습니다. HTC 원 M7 그리고 최근에는 삼성 갤럭시 S9. 그래픽퍼즈 플래그십 스마트폰을 테스트하고 결과 테이블 테스트 하위 집합의 성능을 기준으로 이러한 장치의 순위를 매깁니다. 수백 건의 충돌 및 렌더링 오류 테스트 중에 발견되었지만 보안 위협이 있는지 확인하기 위해 대부분 조사되지 않았습니다. 그러나 이 익스플로잇에서 볼 수 있듯이 오작동하는 GPU는 보안 위험이며 하나 이상의 중요한 보안 취약점이 발견되기를 기다리고 있을 가능성이 있습니다. 그래픽퍼즈 GPU 공급업체가 앞으로 드라이버 품질 개선에 우선순위를 두기를 바랍니다.

총 문제 수를 기준으로 정렬된 그래픽 드라이버의 비교 안정성. 원천: 그래픽퍼즈.

공개 일정

  • 2016년 12월, 그래픽퍼즈 버그를 다음 사용자에게 보고했습니다. Google Chromium 버그 추적기 Chrome 보상 프로그램 대상이었기 때문입니다. GraphicsFuzz가 Google Chromium 버그 추적기에 버그를 제출한 후 해당 버그는 Google에서 승인되어 패치를 위해 ARM과 Samsung에 전달되었습니다.
  • Google 보고서를 전달했다 ARM과 삼성의 연락처로.
  • 삼성은 해당 버그를 자동으로 패치하고 2017년 3월부터 6월 사이에 출시된 Android 7.0 Nougat 업데이트에 수정 사항을 출시했습니다. 삼성, 구글, ARM이 만든 CVE는 없었고, 삼성이나 ARM도 패치에 대한 정보를 공개하지 않았지만, 참고하세요. 그래픽퍼즈 다음을 통해 버그를 보고하지 않았습니다. 적절한 프로세스.
  • 나중에, 그래픽퍼즈 삼성과 ARM 모두 해당 보도를 봤고, 보도로 인해 ARM이 문제를 해결할 수 있었음을 확인할 수 있었다.
  • 2017년 8월, 그래픽퍼즈 버그 보고서에 대해 Google로부터 2,000달러의 보상을 받았습니다.
  • 2017년 11월, 버그 보고서가 공개되었습니다.