LastPass 확장 제품을 위한 보안 업데이트

사고 보고서2017년 3월 31일(오후 8시 10분)

3월 25일 토요일, Google의 Project Zero에서 보안 연구원으로 일하는 Tavis Ormandy가 LastPass 브라우저 확장과 관련된 보안 문제를 신고했습니다. 모든 브라우저에서 신고된 취약성을 해결할 수 있는 업데이트가 지난 24시간 사이에 공개되었으며 Tavis 역시 이 업데이트를 확인했습니다.

대부분의 사용자는 자동으로 업데이트됩니다. 최신 버전(4.1.44 이상)을 실행 중인지 확인하십시오. 최신 버전은 항상 https://www.lastpass.com/에서 다운로드할 수 있습니다.

이제 문제가 해결되었으므로 신고에 따라 어떤 조치가 이루어졌고 앞으로 더욱 안전하고 향상된 LastPass 구축을 위해 어떤 노력을 하고 있는지 사후 보고를 드리려고 합니다. 발견된 취약성의 성격으로 인해 이 사후 보고는 기술적인 내용을 많이 포함합니다.

개요

  • LastPass 브라우저 확장에서 발견된 클라이언트 측 취약성으로 인해 데이터 도용 및 LastPass 확장을 조작하는 데 악용될 여지가 있습니다.
  • 그렇게 하려면 사용자를 악성 웹 사이트(피싱, 스피어 피싱 또는 기타 공격)로 유인하거나 악성 애드웨어가 있는 정상 웹 사이트로 유인해야 하는데,
    • 여기에는 사용자의 로컬 브라우저를 통해 실행되어야 하는 사용자별 공격이 필요합니다.
  • 현재 모든 확장 프로그램이 업데이트되어 확장 스토어로 제출되었습니다.
    • 당사의 Android 및 iOS용 모바일 앱은 영향을 받지 않습니다.
  • 모든 LastPass 브라우저 확장 프로그램을 버전1.44 이상으로 업데이트해야 합니다.
    • LastPass 확장 프로그램 아이콘 > 추가 옵션 > LastPass 도움말을 선택하여 버전 번호를 확인하십시오.
    • 대부분 사용자의 기기에서는 자동으로 업데이트되지만 필요한 경우 최신 버전을https://www.lastpass.com/에서 항상 다운로드할 수 있습니다.
    • 제거하지 않고도 업데이트된 버전을 다운로드할 수 있습니다.

사후 보고

보고서

LastPass 브라우저 확장 프로그램의 클라이언트 측 취약성이 발생한 원인은 “격리된 환경”에서 LastPass의 동작 방식 때문입니다. 보고서에 나와 있는 것처럼 “격리된 환경은 다른 환경과 동일한 DOM(Document Object Model)을 공유하지만 변수 및 함수와 같은 다른 요소는 공유하지 않는 JavaScript 실행 환경을 의미합니다. 격리된 환경이 아니라면, 권한이 없는 페이지가 더 높은 권한이 필요한 스크립트를 간섭하고 어떤 작업이든 수행하도록 조종할 수 있습니다.” 확장 프로그램의 바이너리 버전을 실행하는 경우(LastPass 사용자의 10% 미만) 원격 코드 실행(RCE)을 허용하도록 조작될 수 있었습니다.

 “격리된 환경”과 신뢰할 수 있는 페이지

LastPass 작동 원리의 대부분은 컨텐츠 스크립트와 관련이 있습니다. 컨텐츠 스크립트는 로그인 정보를 수집하고 자동 입력을 수행하기 위해 타사 사이트에 입력되는 JavaScript 조각으로 이것이 바로 LastPass를 유용하게 만드는 중요한 부분입니다. 컨텐츠 스크립트는 확장 프로그램의 나머지 부분과 통신하여 저장된 사이트 해독, 저장소 업데이트 등의 어려운 작업을 수행합니다. 확장 프로그램의 나머지 부분은 타사 사이트에 전혀 액세스할 수 없고 콘텐츠 스크립트에 영향을 줄 수 없어야 합니다.

컨텐츠 스크립트는 “격리된 환경”이라는 개념을 통해 사이트의 나머지 영역과 분리되어야 합니다. 격리된 환경이란 컨텐츠 스크립트가 타사 사이트의 DOM 컨텐츠를 읽을 수 있지만 내부 JavaScript 기능이나 변수는 읽을 수 없음을 의미합니다. 그 반대도 마찬가지입니다. 타사 사이트는 컨텐츠 스크립트의 기능을 호출하거나 변수에 액세스할 수 없습니다. 양측 모두를 외부의 조작으로부터 보호하기 위해 분리하는 것입니다.

경우에 따라 이러한 변수가 컨텐츠 스크립트의 로직에 영향을 줄 수 있습니다. 이 기술을 사용하여 JavaScript에 임의의 값을 삽입하기는 어렵습니다. 하지만 신고를 통해 밝혀진 것처럼, 매우 영리한 수법을 사용하면 임의의 문자열을 삽입할 수 있으며 그중 하나는 확장 프로그램이 lastpass.com에서 실행되고 있다고 착각하게 만들 정도로 교묘했습니다. 이를 통해 공격자는 LastPass 확장을 조작하여 바이너리 버전의 경우 저장된 사용자 데이터를 수집하고 임의의 실행 파일을 실행할 수 있었습니다.

컨텐츠 스크립트가 실행되는 글로벌 범위를 신뢰할 수 있다는 가정은 틀린 것으로 드러났습니다. 결과적으로 LastPass의 JavaScript 내에 외부에서 공급된 글로벌 변수가 기본값을 무시할 수 있는 위치가 여러 개 있었습니다.

문제 해결

전체 신고가 접수된 직후 교차 기능(cross-functional) 대응팀이 문제를 조사하고 결과를 확인했습니다. 문제를 해결하려면 상당한 브라우저 확장 변경이 필요하다는 점이 명백했습니다. 간단한 패치가 아니었으며, 철저하고 신중한 해결책이 필요했습니다. 그리고 영향을 받은 모든 확장 프로그램에 변경을 적용하고 테스트해야 했습니다.

요약: 신고된 문제를 포괄적으로 해결하려면 상당한 노력이 필요했으며 LastPass 팀은 짧은 시간 내에 완전한 해결책을 마련하기 위해 밤을 새워 근무했습니다.

문제 해결을 위해 변수 처리 방식을 조정하고, 컨텐츠 스크립트의 외부 범위에 “샌드박스” 역할을 하는 프록시 개체를 추가하여 외부에서 공급된 윈도우 속성을 컨텐츠 스크립트 내에서 읽지 못하게 했습니다. RCE를 더욱 완화하기 위해 확장 프로그램에서 실행할 수 있는 첨부 파일의 유형을 제한하고 사용 가능한 확장 API도 제한했습니다.

팀은 Google의 Project Zero와 직접 협력하여 이 수정 사항이 문제를 완전히 해결하는지 확인했습니다. 영향을 받은 모든 확장 프로그램에 대한 수정을 준비한 후에는 모든 스토어에 검토를 의뢰하고 신속히 사용자에게 배포할 수 있었습니다. 확장 프로그램의 신속한 심사 및 릴리즈를 도와준 Apple, Google, Microsoft, Mozilla, Opera, Yandex 및 기타 조직에 소속된 파트너 여러분께 감사드립니다.

향후 계획

다른 확장 개발자 여러분께 코드에 이와 같은 패턴이 있는지 보고 그 패턴이 취약하지 않은지 확인할 것을 당부드립니다.

LastPass는 암호 관리 사업을 하는 만큼 항상 보안을 가장 중요하게 생각합니다. 보안 커뮤니티의 활동은 제품의 취약성을 발견하고 사용자를 위한 더욱 안전한 서비스를 제공하는 데에 큰 도움이 됩니다. 업계를 이끌어가는 회사로서 당사에서는 가장 엄격하고 확실한 LastPass 테스트를 거치며 그 덕분에 우수한 소프트웨어와 고객 이점을 제공할 수 있습니다.

최고의 보안 수준 유지를 위한 노력의 일환으로서 앞으로도 화이트햇(white-hat) 보안 전문가와 협력하고 버그 신고 보상 프로그램 참여를 위한 인센티브를 제공할 예정입니다(https://bugcrowd.com/lastpass). 앞으로도 관련 소식을 전해 드리겠습니다.

감사합니다.

LastPass 팀

____________________________________________________________________________________________________________________________

2017년 3월 27일(오후 7시 10분)

지난 주말, Google 보안 연구원인 Tavis Ormandy가 LastPass 브라우저 확장 프로그램에서 새로운 클라이언트 측 취약성을 발견하여 신고했습니다. 현재 이 취약성을 해결하기 위해 적극적으로 노력 중입니다.  이 공격은 독특하며 매우 정교합니다. 범죄에 악용될 소지가 있으므로 이 취약성이나 패치에 관한 구체적인 정보는 공개하지 않을 예정입니다. 해결 작업이 완료되면 더욱 자세한 사후 보고서를 확인할 수 있을 것입니다.

우선 LastPass의 온라인 보안 수준을 높이고 LastPass 팀과 협력하여 시중에서 가장 안전한 암호 관리 도구를 개발할 수 있도록 도움을 주는 Tavis와 같은 분들에게 감사드리고 싶습니다. 또한 이러한 클라이언트 측 문제로부터 스스로를 보호할 수 있는 몇 가지 조치를 사용자 여러분께 알려드리려고 합니다.

  1. LastPass 저장소를 실행 패드로 사용 – LastPass 저장소에서 사이트를 직접 실행하십시오. 취약성을 해결할 때까지는 이것이 자격 증명과 사이트에 액세스하는 가장 안전한 방법입니다.
  2. 2단계 인증을 제공하는 서비스의 경우 2단계 인증을 사용할 것가능할 경우, 계정에 2단계 인증을 사용하십시오. 많은 웹사이트에서는 보안 강화를 위해 이 옵션을 제공합니다.
  3. 피싱 공격에 유의 – 항상 피싱 공격을 피할 수 있도록 주의하십시오.모르는 사람이 보내거나, 또는 신뢰하는 연락처 및 회사가 아닌 주소에서 보낸 링크를 클릭하지 마십시오. 피싱 기초 사항을 알아보십시오.

패치가 완성되면 더 자세한 소식을 전해드리겠습니다