RDBMS 혹은 기타 개발 도구들을 활용할 때, 나는 주로 도커를 활용하는 편이다. 간편하기도 하고 굳이 내 로컬에 세팅하지 않아도 되는 장점이 있기 때문이다. 언젠가는 정복할 대상인데 아직도 밍기적밍기적 활용의 영역에만 그치고 있다(...)
각설하고, 포스팅을 작성하는 오늘(2025.1.11) 오전에 QueryDSL 공부를 위해 도커를 잠시 점검하려고 맥북을 켰는데 갑자기 멀웨어(!!!) 경고 문구가 떴다.
'com.docker.vmnetd' 은 사용자의 컴퓨터를 손상시킵니다
'com.docker.socket' 은 사용자의 컴퓨터를 손상시킵니다
위 이미지는 퍼온 이미지고, 나는 한국인이니까 실제로는 한글 문구로 경고문이 뜬다. 사실 저 이슈가 발생했을 때 캡처를 깜빡했다 ㅎ... 여튼 2개의 경고문이 계속 뜨면서 나를 귀찮게 무섭게 했다. 나도 모르는 새에 설치됐다면서 무수한 애플의 경고문이 자꾸 방해되기도 하고 어차피 도커를 써야 되므로 에러 잡기에 들어갔다.
구글 서포트에서는 단순하게 사용자를 해하려는 악성 소프트웨어(Malicious Software의 약자)를 통틀어서 멀웨어(Malware)라고 칭하고 있다. 즉, 멀웨어는 컴퓨터, 서버, 클라이언트 또는 컴퓨터 네트워크에 장애를 일으키거나, 개인 정보를 유출하거나, 정보 또는 시스템에 무단으로 액세스하거나, 정보에 대한 액세스 권한을 박탈하거나, 사용자의 컴퓨터 보안 및 개인 정보를 무의식적으로 방해하도록 의도적으로 설계된 모든 소프트웨어를 뜻한다.
애플, 맥 시리즈는 세 가지 방법으로 멀웨어를 방어한다.
- 악성 코드의 설치 또는 실행 방지: App Store 또는 Notarization과 결합한 Gatekeeper
- 내 시스템에서 악성 코드가 실행되지 않도록 차단: Gatekeeper, Notarization 및 XProtect
- 이미 실행된 악성 코드에 대한 치료: XProtect
보통 멀웨어 의심 앱이 감지되면 Gatekeeper가 경고창을 띄우게 되지만 이 뜻대로라면 도커가 멀웨어(?!)였다는 얘기가 되는데... 무슨 오해(?)가 있었는지 확인을 해보자.
문제 위치는 다음과 같다. 이 두 개는 참고로 macOS 전용 도커 데스크톱 서비스다.
com.docker.vmnetd
com.docker.socket
com.docker.vmnetd
은 도커 데스크톱의 네트워크 브릿지 서비스를 맡으며 가상화된 네트워크 환경을 제공해 외부 컨테이너와 통신할 수 있게 한다. 즉, 컨테이너 및 호스트 간의 네트워크 연결을 관리한다.
com.docker.socket
은 도커허브에서 이미지 풀을 받는 것이 가능하게 하는 작업 등, 도커 CLI와 도커 데몬(백그라운드 서비스) 간의 통신을 맡는 Unix 소켓 파일이다. 둘 다 도커의 핵심 백그라운드 프로세스를 담당한다.
도커 공식 깃허브에서는 다음과 같이 문제 원인을 명시하고 있다.
대충 해석하자면 소프트웨어 서명 문제라고 한다. 서명은 소프트웨어의 출처를 보증하기 위해 공개키 기반 암호화 시스템을 통하여 개발자가 배포했음을 인증하는 장치이며 배포 과정에서 파일이 위변조되지 않고 원본 그대로 배포됐음을 검증하는 역할을 맡는다.
즉, com.docker.vmnetd
파일과 com.docker.socket
의 서명이 유효하지 않은 상태여서 MacOS의 Gatekeeper가 이 둘을 멀웨어로 인식하고 경고문을 계속 띄우는 것이라 볼 수 있다.
앞서 말했듯, 도커의 깃허브에 개설된 이슈에서 이를 다루고 있고 개발자가 이미 친절하게 해결책을 제시하고 있다. 우선 해결 방법으로는 버전(4.37.2) 업그레이드(모든 프로그램이 그렇듯...)를 추천하고 있어서 나는 완전히 삭제하고 도커 데스크톱을 새롭게 설치했다. 하지만 더 나빠진 인터페이스 디자인과 함께 역시나 멀웨어 인식 경고문이 떴다.
다음 추천 방법으로는 로컬의 Sudo 권한을 통해 실행 파일 바이너리들을 전부 정지시키고 새롭게 세팅하는 것이었다. 그 방법은 아래와 같다.
먼저 활성 액티비티 창에서 도커 데스크톱을 완전 종료 후, 터미널 환경에서 아래 명령어를 순차적으로 입력한다.
#!/bin/bash
# 도커 관련 프로세스 완전 종료, 대소문자 구별 없게 [dD]로 입력
sudo pkill '[dD]ocker'
# vmnetd 실행 서비스 종료
sudo launchctl bootout system /Library/LaunchDaemons/com.docker.vmnetd.plist
# socket 실행 서비스 종료
sudo launchctl bootout system /Library/LaunchDaemons/com.docker.socket.plist
# 기존 vmnetd 바이너리 실행파일 제거
sudo rm -f /Library/PrivilegedHelperTools/com.docker.vmnetd
# 기존 socket 바이너리 실행파일 제거
sudo rm -f /Library/PrivilegedHelperTools/com.docker.socket
# 새로운 실행파일들 각각 설치, 기존 실행파일들 완전 대체
sudo cp /Applications/Docker.app/Contents/Library/LaunchServices/com.docker.vmnetd /Library/PrivilegedHelperTools/
sudo cp /Applications/Docker.app/Contents/MacOS/com.docker.socket /Library/PrivilegedHelperTools/
위 과정을 잘 마무리하고 도커 데스크톱을 실행하면 경고문들이 출력되지 않고 정상적으로 잘 작동될 것이다. 여담으로 sudo 권한이므로 당연히 비밀번호 입력이 요구되는 걸 명심하자.
도커 버전과 도커 컴포즈 버전(나는 도커 버전이 20.00 이상이어서 도커 컴포즈도 같이 설치되어 있다)을 테스트 삼아 확인하고, 마지막으로 데스크톱에서 컨테이너를 실행 후 터미널에서 확인하면 정상 작동됨을 확인할 수 있다.
간단한(?) 이슈였지만 멀웨어와 서명의 관계에 대해 확인할 수 있었다. 언젠가는 보안과 관련된 공부도 하고 싶어서 꽤 흥미롭게 이슈를 분석할 수 있었다. 언능 보안 쪽도 공부하고 싶다.물론 취직부터 하고..
이제 QueryDSL 공부하러 가야징
도커 깃허브 이슈
https://github.com/docker/for-mac/issues/7527
도커 공식문서 이슈
https://docs.docker.com/desktop/cert-revoke-solution/