반응형

Cloudflare의 고객 데이터 유출

  • Cloudflare 5백만개 이상의 고객 웹사이트에 향상된 보안과 성능을 제공하는 콘텐츠 전송 네트워크(Content Delivery Network: CDN) 업체이며, 주요 고객으로 FitBit, OKCupid, Uber, 1Password 등이 있음. Cloudflare의 소프트웨어에 존재하는 버그로 인해 고객 웹사이트의 민감한 데이터가 평문(plaintext) 형식으로 유출되는 일이 발생함
  • 처음 이 문제를 발견한 사람은 Google Project Zero 보안 연구원인 Tavis Ormandy이며, 농담삼아 이를 “Cloudbleed”라고 명명함(2014년 발견된 Heartbleed 보안 버그를 본 딴 이름). 그가 2017 2 17일 자신의 프로젝트를 수행하던 중에 예상 못한 데이터(, 패스워드, 쿠키, 인증 토큰 등)를 목격하게 되었고, 처음에는 자신의 코드에 버그가 있는지 의심 했지만 추가적인 테스팅 후에 Cloudflare로부터 데이터가 오는 것을 깨달음
  • 2017 2 18, Ormandy의 연락을 받은 Cloudflare 측이 즉시 팀을 꾸려 해당 이슈의 원인을 식별하고, 데이터 유출을 야기한 HTML 파서 체인을 사용 중이던 3개의 기능(Email Obfuscation, Server-side Excludes, Automatic HTTPS Rewrites)을 비활성화 시킴. 이 버그의 픽스가 7시간 이내에 완료되었지만, 누출된 데이터 일부가 검색 엔진의 캐시에 자동 저장되었기 때문에 CloudflareGoogle, Bing, Yahoo 등의 검색 엔진 업체와 접촉하여 수동으로 캐시 데이터를 제거하는데 일주일 정도가 소요됨


버그의 근본 원인

  • Cloudflare가 최종 사용자와 고객의 웹 서버간의 프록시 역할을 함. , Cloudflare 글로벌 네트워크 후방에 있는 고객 웹사이트의 콘텐츠를 캐싱하고, 최적화 및 보안을 위해서 Cloudflare 엣지 서버(edge servers)를 통해 콘텐츠를 파싱함으로써 오리지널 호스트 서버로의 리퀘스트 수를 줄여줌
  • CloudflareHTML을 읽고 파싱하기 위해 초창기 부터 Ragel로 작성된 파서를 사용해 옴. Ragel 기반 파서가 유지보수 하기에 지나치게 복잡해 짐에 따라 약 1년 전 이를 대체할 새로운 HTML 파서를 작성하기 시작함. cf-html이라는 이름의 신규 파서가 2016 922Automatic HTTP Rewrites 기능에 처음 적용되기 시작했으며, Ragel 파서를 사용하는 다른 기능들도 하나씩 cf-html 파서를 사용하도록 서서히 마이그레이션하는 중에 있음
  • 신규 파서와 구 Ragel 기반 파서가 둘 다 NGINX 빌드로 컴파일된 NGINX 모듈로 구현됨. NGINX 필터 모듈이 엣지 서버의 버퍼(메모리 블록)를 파싱하며, 필요에 따라 변경을 가하고, 버퍼를 다음 필터로 넘겨줌
  • Cloudflare의 기존 Ragel 파서에 메모리 누출을 야기하는 버그가 수년간 잠복해 있었지만, 내부 NGINX 버퍼가 사용되는 방식으로 인해 메모리 누출이 드러나지 않았던 것으로 판명됨. cf-html을 도입하면서 버퍼링 방식이 약간 변하게 되었고, 이는 cf-html 자체에는 문제가 없음에도 불구하고 메모리 누출이 활성화되는 결과로 이어짐. , Cloudflare의 엣지 서버가 버퍼 끝을 넘어서서 실행되고, 개인 정보(, HTTP 쿠키, 인증 토큰, HTTP POST 바디, 기타 민감한 데이터)를 포함하고 있는 메모리를 리턴함. 이렇게 누출된 데이터의 일부가 검색 엔진에 의해 캐싱됨
  • Ragel 코드가 자동 생성 C 코드로 전환되고 컴파일 됨. C 코드가 파싱되는 HTML 문서를 포인터를 사용하여 가리키며, 이 포인터 에러 때문에 메모리 누출이 발생함. 아래 코드에서 볼 수 있듯이 버퍼 끝에 다달았는지 여부가 == 연산자를 사용해 체크되었고, 따라서 포인터가 버퍼 끝을 넘어갈 수 있게 됨(, 버퍼 오버런 발생). 만약 이 체크가 == 대신에 >= 연산자를 사용해 수행되었더라면 버퍼 끝을 뛰어 넘는 문제가 잡혔을 것임



아래는 'The New Screen Savers'의 사회자인 Leo Laporte Iain Thomson Cloudflare의 암호부서장(Head of Crypto) Nick Sullivan "Cloudbleed"라 불리는 소프트웨어 버그에 대해 이야기한 19분 짜리 영상이다.


[2017년 2월 26일 TWiT Netcast Network의 영상]


영상에 나온 내용 중 추가 설명

LifeLock을 언급한 농담: LifeLock은 신원 도용 보호(identity theft protection)를 전문으로 하는 미국 업체임. 이 회사의 CEOTodd Davis가 자기 회사 시스템을 절대적으로 신뢰할 수 있음을 어필하기 위해 회사 광고에 자신의 사회보장번호를 공개함. 이 사람의 얼굴 사진, 이름, 사회보장번호를 담은 광고가 인터넷은 물론 도로와 지하철의 광고판, 심지어 대형 트럭에도 게시 되었다고 함. 이 후 이 사람이 최소 13번 이상 신원 도용을 당했다는 보도가 나옴(미국 각지에서 이 사람 신원으로 대출을 받거나, 통신사 비용 청구 계정을 만들거나, 신용 카드 체납 등이 발생함)

 

“For want of a nail the kingdom was lost” 라는 표현: 크게 중요한 뭔가가 하잖고 사소한 뭔가에 의존할 수도 있다, 겉보기에 중요하지 않은 어떤 행동이나 부재가 뜻밖의 심각한 결과를 가져올 수도 있다는 의미. 전투 동안에 말 편자의 못 하나가 빠지는 바람에 말을 잃게 되었고, 말에 탄 기사를 잃게 되었고, 전투에 지게 되었고, 결국 왕국 전체를 잃게 되었다는 속담에서 유래 

"For the want of a nail the shoe was lost;

For the want of a shoe the horse was lost;

For the want of a horse the battle was lost;

For the failure of battle the kingdom was lost;—

And all for the want of a horseshoe nail."

"The Horseshoe Nails" by James Baldwin (1924-1987)

 



반응형

+ Recent posts