
교육용 프레젠테이션으로, Google Chrome의 Blink 엔진에서 발생한 use-after-free 취약점인 CVE-2021-21193을 분석하고, 악용 세부 사항과 완화 조언을 포함합니다.
해킹 입문
취약점 사례 연구 발표
2022년 3월
Mehrzad Khodashenas, Setareh Sheikholeslamzadeh
CVE 사전 항목:
CVE-2021-21193
NVD 게시 날짜:
2021년 3월 16일
NVD 최종 수정일:
2021년 12월 3일
출처:
Chrome
| 속성 | 값 |
|---|
| 심각도 | 7 |
| CVSS | (AV:N/AC:M/Au:N/C:P/I:P/A:P) |
| 게시일 | 2021년 3월 5일 |
| 생성일 | 2021년 3월 6일 |
| 추가일 | 2021년 3월 5일 |
| 수정일 | 2021년 4월 9일 |
Google Chrome 89.0.4389.90 이전 버전의 Blink에서 발생한 use-after-free 취약점으로, 원격 공격자가 조작된 HTML 페이지를 통해 힙 손상을 잠재적으로 악용할 수 있었습니다.
enter image description here
CVE(Common Vulnerabilities and Exposures)는 공개적으로 공개된 컴퓨터 보안 결함 목록입니다. 누군가 CVE를 언급할 때, 이는 CVE ID 번호가 할당된 보안 결함을 의미합니다. 벤더와 연구원이 발행하는 보안 권고문에는 거의 항상 최소 하나 이상의 CVE ID가 언급됩니다. CVE는 IT 전문가들이 이러한 취약점의 우선순위를 정하고 해결하기 위해 노력을 조정하여 컴퓨터 시스템을 더 안전하게 만드는 데 도움을 줍니다. 출처

Chrome 팀은 2021년 3월에 기기에서 Google Chrome을 사용하는 경우 즉시 업데이트해야 한다는 공지를 발표했습니다. Google Chrome 업데이트는 빈번하지만, 가장 최근 패치인 안정 버전 89.0.4389.90은 여러 취약점을 패치하며, 그중 세 가지는 높은 심각도 등급을 가지며, 그중 하나는 이미 사이버 범죄자와 해커에 의해 악용되었습니다. 출처 이는 CVE-2021-21193이라고 불리는 높은 심각도 등급의 취약점 중 하나였습니다. 이는 Google Chrome의 브라우저 엔진인 Blink의 취약점으로, HTML 코드를 사용자가 탐색하는 잘 설계된 웹 페이지로 변환하는 주요 구성 요소입니다. 이 문제는 Blink 구성 요소의 특정 미확인 처리에 영향을 미치며, 알 수 없는 입력의 조작으로 인해 메모리 손상 취약점이 발생합니다. 악의적인 사용자에 의해 악용된 이 취약점은 모든 사용자가 버전 89.0.4389.90으로 업데이트해야 함을 시사합니다. 이는 use-after-free 취약점으로, Blink가 메모리 정리에 문제가 있었음을 의미합니다. 출처
이 취약점은 2021년 3월 5일에 공개되었습니다. 성공적인 악용을 위해 어떤 형태의 인증도 필요하지 않지만, 피해자가 어떤 종류의 사용자 상호작용을 해야 합니다. 또한 2021년 3월 28일 기준으로 악용 코드의 예상 가격은 약 미화 5천~2만 5천 달러로 추정됩니다. https://vuldb.com/?id.170687
이것이 사소하고 평범해 보일 수 있지만, use-after-free 취약점의 가장 흔한 결과는 데이터 손상과 임의 코드 실행이며, 국가 취약점 데이터베이스(NVD)의 CVE-2021-21193 취약점 자체 설명에 따르면 "원격 공격자가 조작된 HTML 페이지를 통해 힙 손상을 잠재적으로 악용할 수 있습니다." 출처
Use-After-Free(UAF)는 프로그램 실행 중 동적 메모리의 잘못된 사용과 관련된 취약점입니다. 메모리 위치를 해제한 후 프로그램이 해당 메모리에 대한 포인터를 지우지 않으면, 공격자는 이 오류를 이용하여 프로그램을 해킹할 수 있습니다.
UAF 취약점은 동적 메모리 할당 메커니즘에서 비롯됩니다. 스택과 달리 동적 메모리(힙이라고도 함)는 대량의 데이터를 저장하도록 설계되었습니다. 프로그래머는 그 안에 임의 크기의 블록을 할당할 수 있으며, 프로그램 내의 작업은 이를 수정하거나 해제하여 동일한 프로그램의 다른 작업이 이후에 사용할 수 있도록 힙에 반환할 수 있습니다.
프로그램은 동적 메모리가 자주 재할당되므로 힙의 어느 영역이 비어 있고 어느 영역이 점유되어 있는지 지속적으로 확인해야 합니다. 헤더는 할당된 메모리 영역을 참조하여 도움을 줍니다. 적절한 블록의 시작 주소는 각 헤더에 포함되어 있습니다. UAF 버그는 프로그램이 이러한 헤더를 제대로 관리하지 못할 때 발생합니다.
프로그램의 포인터는 동적 메모리의 데이터 세트를 참조합니다. 데이터 세트가 삭제되거나 다른 블록으로 이동했지만 포인터가 지워지지 않고(null로 설정되지 않고) 해제된 메모리를 계속 참조하면, 결과적으로 댕글링 포인터가 발생합니다. 그런 다음 프로그램이 이 동일한 메모리 청크를 다른 객체(예: 공격자가 입력한 데이터)에 할당하면, 댕글링 포인터는 이제 이 새로운 데이터 세트를 참조하게 됩니다. 즉, UAF 취약점은 코드 대체를 허용합니다.
공격자는 UAF를 사용하여 임의 코드 또는 이에 대한 참조를 프로그램에 전달하고 댕글링 포인터를 사용하여 코드의 시작 부분으로 이동할 수 있습니다. 이러한 방식으로 사이버 범죄자는 악성 코드를 실행하여 피해자의 시스템을 제어할 수 있습니다. 출처
익명의 보안 연구원이 3월 9일에 CVE-2021-211193을 보고했고, Google은 단 3일 만에 수정 사항을 서둘러 출시했습니다. 이러한 서두름은 취약점의 실제 악용 때문일 수 있습니다. 범죄자들이 이미 이 취약점을 사용했으며, 이것만으로도 모든 사람이 Google Chrome을 가능한 한 빨리 패치해야 하는 충분한 이유입니다. 출처
Google은 일반적으로 취약점이 패치된 후에야 정보를 공개하며, CVE-2021-21193 취약점은 익명의 보안 연구원이 보고한 후 3일 이내에 패치되었습니다. 이는 해당 취약점이 실제 상황에서 이미 악용되었을 가능성이 매우 높다는 것을 의미합니다. 좋은 기준은 Google과 같은 거대 기술 기업이 보안 문제를 진지하게 받아들인다면, 우리 모두도 그렇게 해야 한다는 것입니다.
하지만 여기서 또 다른 중요한 교훈이 있습니다. 이러한 기술 거대 기업과 그들의 제품은 완벽하지 않으며, 우리와 마찬가지로 그들도 최종 사용자를 위해 시스템과 도구를 안전하게 유지하기 위한 끊임없는 경쟁의 일부라는 것입니다. 개발자의 최신 업데이트로 소프트웨어를 패치하는 것은 절대적으로 중요합니다. 가장 최근의 업데이트는 빠르게 진화하고 발전하는 사이버 위협의 위험을 최소화하도록 설계되었기 때문입니다. 출처