마이크로소프트가 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 검증 결함을 수정했다. 출처는 라시드의 시연 외에 실제 환경에서의 악용은 보고하지 않았다.

근거 확인하기

출처

  1. Critical Windows 10 vulnerability used to Rickroll the NSA and Github Ars Technica · arstechnica.com ·