해결책
마이크로소프트가 NSA의 비공개 제보를 받은 후 2020년 1월 14일에 패치한 치명적인 Windows CryptoAPI 결함 CVE-2020-0601을 공개한 지 24시간도 채 지나지 않아, 연구원 살림 라시드는 GitHub.com과 NSA.gov에서 HTTPS를 통해 릭 애스틀리의 'Never Gonna Give You Up'이 재생되는 이미지를 트위터에 올렸다. 이 릭롤이 바로 시연이었다. 그의 익스플로잇은 Edge와 Chrome이 스푸핑된 사이트를 진짜로 검증된 것으로 처리하게 만들었으며, Brave와 기타 Chrome 파생 브라우저 및 Internet Explorer도 영향을 받았을 가능성이 있다. Firefox는 영향을 받은 징후를 보이지 않았다.
이 결함은 Windows 10, Windows Server 2016 및 2019를 포함한 환경에서 웹사이트, 소프트웨어 업데이트, VPN 및 기타 보안상 중요한 용도의 인증서 검증을 완전히 무력화했다. 작동 원리는 다음과 같다. CryptoAPI는 표준에서 정의된 곡선을 요구하는 대신 각 인증서에 포함된 타원 곡선 매개변수를 신뢰했기 때문에, 공격자가 사용자 정의 생성자 매개변수를 제공할 수 있었고, 이를 통해 Windows가 공격자가 선택한 공개 키에 '동의'하게 만들어 위조 인증서가 진짜로 통과되게 했다.
라시드는 이 익스플로잇이 약 100줄의 코드를 사용했으며, '몇 가지 유용한 트릭'을 빼면 10줄로 압축할 수 있다고 말했다. 공개 기술 설명 없이 공개된 결함에 대해 하루 안에 이루어진 이 시연의 속도는 근본 원인이 메모리 버그가 아닌 설계 오류일 때 '패치된 취약점'과 '무기화된 익스플로잇' 사이에 남은 간격이 얼마나 작은지를 보여주었다.
이 공개의 출처는 이 이야기에 아이러니를 더했다. NSA가 비공개로 버그를 보고했으며, 그 실제 효과에는 NSA 자체 웹사이트의 사칭이 포함되었다. 릭롤링 — 심각한 보안 결함을 보여주는 표준적인 유머러스한 시연 — 은 그 사칭을 비전문가도 즉시 볼 수 있게 만들었다.
달성한 것
공격자의 타원 곡선 매개변수를 받아들이는 암호 라이브러리는 공격자가 수학이 동의하는 키를 선택하게 한다 — 검증은 형식적인 도장이 된다.
왜 통했는가
근본 원인은 구현상의 실수가 아니라 설계 원칙이다. 호출자가 제공한 암호 매개변수를 받아들이는 것은 민첩성을 보편적 위조로 바꾼다.
영향 범위는 모든 Windows 10 및 Server 2016/2019 머신에서 TLS가 보호하는 모든 것 — 웹사이트, 소프트웨어 업데이트, VPN — 이었다.
작동하는 스푸핑은 공개 후 하루 안에 약 100줄로 완성되었으며, 대부분의 방어자가 패치를 적용하기도 전이었다.
시연 대상은 버그를 보고한 주체 자체였기에, 이 실패 모드를 이론적이라고 일축할 수 없게 만들었다.
암호 민첩성은 공격 표면이다. 검증자가 신뢰할 수 없는 측으로부터 받아들이는 모든 매개변수는 공격자가 돌릴 수 있는 손잡이다 — 상수를 하드코딩하고, 선택적인 것은 아무것도 검증하지 말라.
후속 상황
마이크로소프트의 2020년 1월 14일 패치는 Windows 10 및 영향을 받은 서버 버전의 CryptoAPI 검증 결함을 수정했다. 출처는 라시드의 시연 외에 실제 환경에서의 악용은 보고하지 않았다.
근거 확인하기
출처
- Critical Windows 10 vulnerability used to Rickroll the NSA and Github Ars Technica · arstechnica.com ·