2020.04.07

맥OS용 줌, API에 기반한 접근 권한 취약점 있다

Lucian Constantin | CSO
줌(Zoom)의 맥OS용 화상회의 클라이언트가 운영체제가 제공하는 애플리케이션 강화 기능을 충분히 활용하지 못해 로컬 맬웨어가 사용자 모르게 권한을 확대하거나 카메라와 마이크에 액세스할 수 있다는 경고가 제기됐다. 보안 연구원 패트릭 워들은 수요일 블로그를 통해 이런 문제가 시스템 API의 불안정한 사용에서 비롯된다는 내용의 보고서를 공개했다. 워들은 취약성 발견, 맬웨어 분석, 애플 플랫폼용 보안 도구 등 오랜 기간 맥OS 보안 연구를 해 온 전문가다.
 
ⓒZOOM

권한 확대와 카메라, 마이크 액세스라는 2가지 결함을 악용하려면 공격자가 이미 맥 기기에 로컬 코드 실행 액세스 권한을 갖고 있어야 한다. 그러나 조건이 엄격하다고 해서 문제가 심각하지 않은 것은 아니다. 제한된 사용자 권한으로 다양한 방법으로 로컬 코드를 실행할 수 있기 때문이다. 게다가, 워들은 예전에는 자신을 포함한 보안 연구자들이 블로그 포스팅과 보안 회의에서 공격 기법을 문서로 제시했기 때문에 줌이 문제를 쉽게 피할 수 있었다고 믿는다.

워들은 블로그 게시물에서 “우선 권한이 없는 공격자나 악성코드가 줌 설치 프로그램을 이용하여 루트 특권을 얻을 수 있는지를 설명했다. 그 다음에 ‘예외’ 자격 때문에 줌의 신뢰할 수 있는 프로세스 컨텍스트에 악성 라이브러리를 투입하는 방법을 알렸다. 악성 프로그램은 모든 줌 회의를 기록할 수 있고, 아무 때나시간에 마이크와 웹캠에 접속할 수 있도록 간단하게 백그라운드에서 줌에 접근한다”고 설명했다.

워들은 “현재 많은 기업이 민감한 내용의 기업 회의에 줌을 활용하기 때문에 전자는 문제가 있고, 후자는 맥OS 경고나 프롬프트 없이 마이크나 웹캠에 몰래 접근할 수 있는 기회를 맬웨어에 제공하므로 문제가 있다”고 말했다.

다른 맥OS 애플리케이션 개발자도 줌과 유사한 구성을 사용할 경우에 유사한 취약점을 지닐 수 있으므로 유의해야 한다.
 

사용 중단될 API의 문제점

보안업체 VM레이(VMRay)의 기술팀장 펠릭스 실이 트위터에서 줌이 맥OS의 Authorization Execute With Privileges API(권한 인증 실행 API)를 사용하여 사용자들이 루트 권한으로 설치를 실행하도록 마스터 암호를 권장하고 있다고 언급한 후, 워들은 줌의 맥OS용 인스톨러를 살펴보기 시작했다. 루트는 유닉스 유사 운영체제에서 가장 높은 권한을 가진 계정이다.

워들은 블로그 포스트에서 “전에도 이야기했지만, 애플은 Authorization Execute With Privileges API가 곧 사용이 중단될 것이기 때문에 써서는 안 된다고 분명히 지적하고 있다. 왜일까? 이 API는 (루트로!)실행될 바이너리의 유효성을 확인하지 않기 때문이다. 권한 없는 로컬 공격자나 맬웨어 일부가 루트까지 권한을 확대하기 위해 몰래 항목을 변조하거나 대체할 수 있다는 의미”라고 지적했다. 

줌은 API를 사용하여 사용자가 쓸 수 있는 임시 디렉토리에 실행 프로그램이 압축을 푼 runwithroot라는 배시 스크립트를 실행한다. 즉, 맬웨어를 포함한 모든 로컬 애플리케이션이 줌 설치 프로세스를 모니터링해서 배시 스크립트를 바로 다시 쓰고 악성 코드를 추가할 수 있다는 의미다. 악성 코드가 시스템에 대한 완전한 제어권을 지니게 된다.

이 공격이 가지는 유일한 한계는 사용자가 줌을 설치하거나 업데이트할 때까지 기다려야 한다는 점이다. 업데이트나 설치를 통해 루트 액세스 프롬프트가 시작되기 때문이다.
 

애플리케이션 강화의 예외

애플은 맥OS 애플리케이션 개발자에게 맥OS용 통합 개발 환경인 X코드의 ‘Hardened Runtime’으로 애플리케이션을 컴파일할 것을 권고하고 있다. 이 기능은 실행가능한 메인 애플리케이션을 포함한 모든 구성 요소와 로드된 코드에 대해 엄격한 코드 서명을 확인할 수 있다.

애플은 문서에서 “Hardened Runtime은 시스템 완전성 보호(SIP)와 함께 코드 주입, 동적 링크 라이브러리(DLL) 가로채기, 프로세스 메모리 공간 변조 등 특정 종류의 익스플로잇을 방지하여 소프트웨어의 런타임 완전성을 보호한다”고 밝혔다.

Hardened Runtime을 통한 강화는 일반적으로는 앱에 부정적인 영향을 주지 않지만, 메인 애플리케이션과 동일한 팀 ID로 서명되지 않은 JIT(Just-in-Time) 컴파일이나 타사 플러그인 같은 일부 기능을 제한한다. 이 때문에 애플은 개발자들이 ‘자격’이라고 불리는 특정 예외를 구성할 수 있도록 허용한다.

줌은 Hardened Runtime 옵션으로 컴파일되지만 구성에서 com.apple.security.cs.disable-library-validation 자격을 사용한다. 그래서 줌의 동적 라이브러리에 대한 코드 서명 확인을 사실상 비활성화되고, 워들이 ‘다이리브 프록싱(dylib proxying)’이라고 부르는 코드 주입 공격이 가능해지는 것이다. 줌 자체 라이브러리는 적절한 서명을 갖춘 것으로 보이기 때문에, 줌이 왜 이 예외를 사용하는지는 명확하지 않다.

워들은 libssl.1.0.0.dylib라는 줌 라이브러리로 공격을 시연했다. 라이브러리의 이름 앞에 밑줄(_)자를 추가하여 라이브러리의 이름을 바꾼 다음, 실제로 원본을 참조하는 악성 버전을 만들었다. 본질적으로는 줌이 런타임에 실행하는 것과 같은 이름을 가진 서명되지 않은 프록시 라이브러리를 만들었지만, 동시에 애플리케이션이 제대로 작동하도록 원래 라이브러리로의 이동을 지시한다.

이 시연의 의미는 악성 라이브러리의 악성 코드가 카메라와 마이크 접근 기능을 포함, 사실상 줌 애플리케이션과 동일한 권한을 획득한다는 것이다.

워들은 “‘액세스 상속’을 테스트하기 위해 웹캠에서 영상 녹화용으로 삽입된 라이브러리에 코드를 추가했다. 일반적으로 이 코드는 맥OS에서 (마이크와)카메라 접근 허용을 확인하는 경고를 유발한다. 하지만 이미 사용자가 접근 권한을 부여한 줌 앱에 코드가 추가되면서, 별도의 프롬프트가 나타나지 않으면서 주입된 코드가 임의로 음성과 영상을 녹음할 수 있었다”고 설명했다.

악성코드가 카메라에 액세스하려면 줌이 실행되어야 하지만, 맥O의S ‘열기’ 명령 계통 유틸리티에는 백그라운드에서 숨겨진 애플리케이션을 시작할 수 있는 옵션이 있기 때문에 문제가 되지 않는다. 즉, 사용자가 줌이 실행되고 있다는 사실을 감지하지 못한 상태에서도 맬웨어 피기배킹이 아무 때나 음성과 영상을 녹화할 수 있는 것이다.

워들은 오버사이트(Oversight)라는, 애플리케이션이 카메라와 마이크에 액세스할 때마다 사용자에게 알림을 보내는 무료 맥OS 유틸리티를 개발하고 유지한다. 노크노크(KnockKnock)라는 앱은 시스템의 프록시 라이브러리를 스캔하고 식별할 수 있다.

줌 대변인은 CSO에 보낸 이메일을 통해 “이러한 문제를 해결하기 위해 적극적으로 조사하고 노력하고 있다. 우선 한 가지 문제를 해결하기 위해 설치 프로그램을 업데이트하는 중이며 마이크와 카메라 접근 권한 문제는 클라이언트 업데이트를 통해 해결할 것”이라고 밝혔다.

워들은 CSO에 com.apple.security.cs.disable-library-validation을 사용하는 애플리케이션은 서명되지 않은 라이브러리, 또는 다른 개발자가 서명한 모든 라이브러리를 권한을 가지고 로드 할 수 있으므로, 동일한 라이브러리 프록시 공격에 취약하고, 개발자는 애플리케이션을 확인해 최대한 이 예외를 피해야 한다고 강조했다. editor@itworld.co.kr 



2020.04.07

맥OS용 줌, API에 기반한 접근 권한 취약점 있다

Lucian Constantin | CSO
줌(Zoom)의 맥OS용 화상회의 클라이언트가 운영체제가 제공하는 애플리케이션 강화 기능을 충분히 활용하지 못해 로컬 맬웨어가 사용자 모르게 권한을 확대하거나 카메라와 마이크에 액세스할 수 있다는 경고가 제기됐다. 보안 연구원 패트릭 워들은 수요일 블로그를 통해 이런 문제가 시스템 API의 불안정한 사용에서 비롯된다는 내용의 보고서를 공개했다. 워들은 취약성 발견, 맬웨어 분석, 애플 플랫폼용 보안 도구 등 오랜 기간 맥OS 보안 연구를 해 온 전문가다.
 
ⓒZOOM

권한 확대와 카메라, 마이크 액세스라는 2가지 결함을 악용하려면 공격자가 이미 맥 기기에 로컬 코드 실행 액세스 권한을 갖고 있어야 한다. 그러나 조건이 엄격하다고 해서 문제가 심각하지 않은 것은 아니다. 제한된 사용자 권한으로 다양한 방법으로 로컬 코드를 실행할 수 있기 때문이다. 게다가, 워들은 예전에는 자신을 포함한 보안 연구자들이 블로그 포스팅과 보안 회의에서 공격 기법을 문서로 제시했기 때문에 줌이 문제를 쉽게 피할 수 있었다고 믿는다.

워들은 블로그 게시물에서 “우선 권한이 없는 공격자나 악성코드가 줌 설치 프로그램을 이용하여 루트 특권을 얻을 수 있는지를 설명했다. 그 다음에 ‘예외’ 자격 때문에 줌의 신뢰할 수 있는 프로세스 컨텍스트에 악성 라이브러리를 투입하는 방법을 알렸다. 악성 프로그램은 모든 줌 회의를 기록할 수 있고, 아무 때나시간에 마이크와 웹캠에 접속할 수 있도록 간단하게 백그라운드에서 줌에 접근한다”고 설명했다.

워들은 “현재 많은 기업이 민감한 내용의 기업 회의에 줌을 활용하기 때문에 전자는 문제가 있고, 후자는 맥OS 경고나 프롬프트 없이 마이크나 웹캠에 몰래 접근할 수 있는 기회를 맬웨어에 제공하므로 문제가 있다”고 말했다.

다른 맥OS 애플리케이션 개발자도 줌과 유사한 구성을 사용할 경우에 유사한 취약점을 지닐 수 있으므로 유의해야 한다.
 

사용 중단될 API의 문제점

보안업체 VM레이(VMRay)의 기술팀장 펠릭스 실이 트위터에서 줌이 맥OS의 Authorization Execute With Privileges API(권한 인증 실행 API)를 사용하여 사용자들이 루트 권한으로 설치를 실행하도록 마스터 암호를 권장하고 있다고 언급한 후, 워들은 줌의 맥OS용 인스톨러를 살펴보기 시작했다. 루트는 유닉스 유사 운영체제에서 가장 높은 권한을 가진 계정이다.

워들은 블로그 포스트에서 “전에도 이야기했지만, 애플은 Authorization Execute With Privileges API가 곧 사용이 중단될 것이기 때문에 써서는 안 된다고 분명히 지적하고 있다. 왜일까? 이 API는 (루트로!)실행될 바이너리의 유효성을 확인하지 않기 때문이다. 권한 없는 로컬 공격자나 맬웨어 일부가 루트까지 권한을 확대하기 위해 몰래 항목을 변조하거나 대체할 수 있다는 의미”라고 지적했다. 

줌은 API를 사용하여 사용자가 쓸 수 있는 임시 디렉토리에 실행 프로그램이 압축을 푼 runwithroot라는 배시 스크립트를 실행한다. 즉, 맬웨어를 포함한 모든 로컬 애플리케이션이 줌 설치 프로세스를 모니터링해서 배시 스크립트를 바로 다시 쓰고 악성 코드를 추가할 수 있다는 의미다. 악성 코드가 시스템에 대한 완전한 제어권을 지니게 된다.

이 공격이 가지는 유일한 한계는 사용자가 줌을 설치하거나 업데이트할 때까지 기다려야 한다는 점이다. 업데이트나 설치를 통해 루트 액세스 프롬프트가 시작되기 때문이다.
 

애플리케이션 강화의 예외

애플은 맥OS 애플리케이션 개발자에게 맥OS용 통합 개발 환경인 X코드의 ‘Hardened Runtime’으로 애플리케이션을 컴파일할 것을 권고하고 있다. 이 기능은 실행가능한 메인 애플리케이션을 포함한 모든 구성 요소와 로드된 코드에 대해 엄격한 코드 서명을 확인할 수 있다.

애플은 문서에서 “Hardened Runtime은 시스템 완전성 보호(SIP)와 함께 코드 주입, 동적 링크 라이브러리(DLL) 가로채기, 프로세스 메모리 공간 변조 등 특정 종류의 익스플로잇을 방지하여 소프트웨어의 런타임 완전성을 보호한다”고 밝혔다.

Hardened Runtime을 통한 강화는 일반적으로는 앱에 부정적인 영향을 주지 않지만, 메인 애플리케이션과 동일한 팀 ID로 서명되지 않은 JIT(Just-in-Time) 컴파일이나 타사 플러그인 같은 일부 기능을 제한한다. 이 때문에 애플은 개발자들이 ‘자격’이라고 불리는 특정 예외를 구성할 수 있도록 허용한다.

줌은 Hardened Runtime 옵션으로 컴파일되지만 구성에서 com.apple.security.cs.disable-library-validation 자격을 사용한다. 그래서 줌의 동적 라이브러리에 대한 코드 서명 확인을 사실상 비활성화되고, 워들이 ‘다이리브 프록싱(dylib proxying)’이라고 부르는 코드 주입 공격이 가능해지는 것이다. 줌 자체 라이브러리는 적절한 서명을 갖춘 것으로 보이기 때문에, 줌이 왜 이 예외를 사용하는지는 명확하지 않다.

워들은 libssl.1.0.0.dylib라는 줌 라이브러리로 공격을 시연했다. 라이브러리의 이름 앞에 밑줄(_)자를 추가하여 라이브러리의 이름을 바꾼 다음, 실제로 원본을 참조하는 악성 버전을 만들었다. 본질적으로는 줌이 런타임에 실행하는 것과 같은 이름을 가진 서명되지 않은 프록시 라이브러리를 만들었지만, 동시에 애플리케이션이 제대로 작동하도록 원래 라이브러리로의 이동을 지시한다.

이 시연의 의미는 악성 라이브러리의 악성 코드가 카메라와 마이크 접근 기능을 포함, 사실상 줌 애플리케이션과 동일한 권한을 획득한다는 것이다.

워들은 “‘액세스 상속’을 테스트하기 위해 웹캠에서 영상 녹화용으로 삽입된 라이브러리에 코드를 추가했다. 일반적으로 이 코드는 맥OS에서 (마이크와)카메라 접근 허용을 확인하는 경고를 유발한다. 하지만 이미 사용자가 접근 권한을 부여한 줌 앱에 코드가 추가되면서, 별도의 프롬프트가 나타나지 않으면서 주입된 코드가 임의로 음성과 영상을 녹음할 수 있었다”고 설명했다.

악성코드가 카메라에 액세스하려면 줌이 실행되어야 하지만, 맥O의S ‘열기’ 명령 계통 유틸리티에는 백그라운드에서 숨겨진 애플리케이션을 시작할 수 있는 옵션이 있기 때문에 문제가 되지 않는다. 즉, 사용자가 줌이 실행되고 있다는 사실을 감지하지 못한 상태에서도 맬웨어 피기배킹이 아무 때나 음성과 영상을 녹화할 수 있는 것이다.

워들은 오버사이트(Oversight)라는, 애플리케이션이 카메라와 마이크에 액세스할 때마다 사용자에게 알림을 보내는 무료 맥OS 유틸리티를 개발하고 유지한다. 노크노크(KnockKnock)라는 앱은 시스템의 프록시 라이브러리를 스캔하고 식별할 수 있다.

줌 대변인은 CSO에 보낸 이메일을 통해 “이러한 문제를 해결하기 위해 적극적으로 조사하고 노력하고 있다. 우선 한 가지 문제를 해결하기 위해 설치 프로그램을 업데이트하는 중이며 마이크와 카메라 접근 권한 문제는 클라이언트 업데이트를 통해 해결할 것”이라고 밝혔다.

워들은 CSO에 com.apple.security.cs.disable-library-validation을 사용하는 애플리케이션은 서명되지 않은 라이브러리, 또는 다른 개발자가 서명한 모든 라이브러리를 권한을 가지고 로드 할 수 있으므로, 동일한 라이브러리 프록시 공격에 취약하고, 개발자는 애플리케이션을 확인해 최대한 이 예외를 피해야 한다고 강조했다. editor@itworld.co.kr 

X