Issues

Zoom 취약점

Jonathan Leitschuh이란 연구원이 Zoom 서비스 취약점을 7월 9일자로 공개했습니다.

요약

  • Zoom의 Mac 클라이언트에서 원격 취약점이 발견됨
  • 여러 취약점 중에서 사용자의 웹캠을 노출시킬 수 있는 취약점이 가장 크리티컬함
  • 2015년 기준으로 약 4천만명이 Zoom을 사용하고 PC 시장에서 대략 10% 정도가 Mac 유저라고 볼 때, 최소 4백만명 정도의 Mac 사용자가 해당 취약점에 영향을 받는다고 추산

취약점

취약점 원인은 Mac 클라이언트를 설치할 때 같이 설치되는 로컬 웹서버(포트19421)에 있습니다.

해커는 다음과 같은 스크립트를 통해 Zoom 사용자 PC의 로컬 웹서버에 요청을 보낼 수 있고, 사용자 동의 없이 해커가 만들어놓은 채널에 사용자를 조인시킬 수 있습니다. 사용자의 웹캠이 켜진 상태로 말이죠.

<img src="http://localhost:19421/launch?action=join&confno=492468757"/>

다음 그림처럼 참여자의 웹캠을 켜는 권한이 채널을 만드는 사람(해커)에게 있었기 때문에,

위 스크립트를 통해 사용자를 채널로 유인하면 자동으로 웹캠이 켜진 상태로 조인되었던 것이죠.

해결책

제로데이 상태로 공개가 되었기 때문에 현재까지도 많은 이슈가 되고 있습니다. Mac 사용자들은 Zoom 클라이언트를 삭제하면 되겠다라고 생각할지도 모르겠습니다. 하지만 더 문제가 된 것은 사용자가 Mac 클라이언트를 삭제해도 로컬 웹서버는 삭제되지 않고 살아있다는 점인데요. Mac 클라이언트를 삭제해도 여전히 해당 취약점에 노출되어 있는 상태였던 것이죠.

그래서 로컬 웹서버까지 확실히 제거할 수 있는 방법이 사용자들 사이에서 공유되었습니다.

$ lsof -i:19421
$ kill -9 <pid>
$ rm -rf ~/.zoomus
$ touch ~/.zoomus

19421 포트의 프로세스를 먼저 죽이고, zoom 관련 디렉토리(~/.zoomus)를 제거하는 것입니다.

취약점 타임라인 및 더 자세한 내용은 Jonathan의 블로그, “Zoom Zero Day: 4+ Million Webcams & maybe an RCE? Just get them to visit your website!”를 참고해주세요.


Issues

애플의 사일런트 업데이트

Zoom 클라이언트를 삭제해도 Zoom의 로컬 웹서버가 삭제되지 않고 살아있는 문제를 해결하기 위해 애플이 직접 나섰습니다. 바로 MacOS의 사일런트 업데이트를 통해 Zoom 클라이언트의 로컬 웹서버를 제거하기로 한 것인데요. OS에서 사일런트 업데이트를 통해 타사의 제품을 제거한 사례는 매우 이례적이라 큰 이슈(Apple has pushed a silent Mac update to remove hidden Zoom web server)가 되었습니다.

사일런트 업데이트는 MacOS에서 사용하는 MRT(Malware Removal Tool)이라는 악성코드제거도구의 패턴업데이트로 밝혀졌습니다.

Zoom 클라이언트 제거 패턴은 MRTConfigData 1.45 버전에서 업데이트되었습니다.

패턴 내용은 MRT 앱(/System/Library/CoreServices/MRT.app)의 실행 바이너리를 분석해보면 알 수 있습니다. objective-see 운영자로 유명한 patrick wardle의 트윗에서 패턴명(“MACOS.354c063”)을 언급하고 있는데요. hopper 등의 디스어셈블리를 사용해서 해당 패턴명을 참조하는 곳을 보면

다음 문자열을 패턴으로 사용하고 있음을 알 수 있습니다.

~/.zoomus/ZoomOpener.app/Contents/MacOS/ZoomOpener

패턴 테스트를 위해 ~/.zoomus 아래에 ZoomOpener 파일(로컬웹서버)을 만들고 실행해보겠습니다.

$ mkdir -p ~/.zoomus/ZoomOpener.app/Contents/MacOS/
$ cd ~/.zoomus/ZoomOpener.app/Contents/MacOS/
$ echo "void main() { getchar(); }" > ZoomOpener.c
$ clang ZoomOpener.c -o ZoomOpener
$ ./ZoomOpener

MRT를 실행합니다.

$ ./MRT -a                  
2019-07-12 12:43:02.952 MRT[6575:173083] Running as agent
2019-07-12 12:43:03.037 MRT[6575:173083] failed to check loginItems
2019-07-12 12:43:03.196 MRT[6575:173083] Found MACOS.354c063 infection.
/Users/diff/.zoomus/ZoomOpener.app/Contents/MacOS/ZoomOpener: Process killed
2019-07-12 12:43:03.198 MRT[6575:173083] Found MACOS.354c063 infection.
/Users/diff/.zoomus: Directory removed
2019-07-12 12:43:03.198 MRT[6575:173083] Found MACOS.354c063 infection.
/Users/diff/.zoomus: Directory recreated
2019-07-12 12:43:03.199 MRT[6575:173083] Agent finished.
2019-07-12 12:43:03.199 MRT[6575:173083] Finished MRT run

MACOS.354c063 감염을 발견했다는 메시지를 볼 수 있고, ZoomOpener(로컬웹서버) 프로세스를 죽이고 관련 디렉토리(~/.zoomus)를 제거했다는 것을 로그를 통해 확인할 수 있네요.

Filemon 로그도 확인해보겠습니다.

$ sudo ./filemon -f zoomus

Adding File filter 0: zoomus
 6575 MRT	Deleted        /Users/diff/.zoomus/ZoomOpener.app/Contents/MacOS/ZoomOpener
 6575 MRT	Deleted        /Users/diff/.zoomus/ZoomOpener.app/Contents/MacOS/ZoomOpener.c
 6575 MRT	Deleted        /Users/diff/.zoomus/ZoomOpener.app/Contents/MacOS
 6575 MRT	Deleted        /Users/diff/.zoomus/ZoomOpener.app/Contents
 6575 MRT	Deleted        /Users/diff/.zoomus/ZoomOpener.app
 6575 MRT	Deleted        /Users/diff/.zoomus
 6575 MRT	Created dir    /Users/diff/.zoomus
 6575 MRT	Chowned        /Users/diff/.zoomus

Zoom 클라이언트 제거를 위해 MacOS 사일런트 업데이트가 이루어진 사실을 확인해보았습니다. MRT가 동작하는 시점이 확인되지는 않았으나, Zoom 클라이언트의 로컬웹서버가 설치되어있다면 사용자 인지없이 백그라운드에서 제거가 될 것입니다.

참고자료: