Computer >> 컴퓨터 >  >> 시스템 >> Mac

macOS 앱 샌드박싱, 사용자를 보호하는 방법 완벽 정리

macOS 앱 샌드박싱, 사용자를 보호하는 방법 완벽 정리

2007년에 도입되어 2012년부터 필수가 된 샌드박싱(sandboxing)은 macOS가 해킹당한 앱이 초래할 수 있는 피해를 제한하기 위해 사용하는 보안 기술입니다. 애플은 "앱 샌드박스는 앱에 대한 공격 자체를 막을 수는 없지만, 공격이 성공했을 때 초래할 수 있는 피해를 최소화한다"고 설명합니다. 즉, macOS 앱 샌드박싱은 애플리케이션이 일으킬 수 있는 문제의 범위를 제한함으로써 사용자를 보호합니다.

macOS 앱 샌드박싱이란?

모든 앱은 각자만의 놀이터, 즉 '샌드박스'를 배정받습니다. 앱이 샌드박스 밖으로 나가려면 운영체제에 권한을 요청해야 하며, 운영체제는 샌드박스 설정에 따라 요청을 승인하거나 거부합니다. 이때 요청을 처리하는 데 필요한 최소한의 정보만 제공됩니다.

macOS 앱 샌드박싱, 사용자를 보호하는 방법 완벽 정리

자동차를 떠올리면 이해하기 쉽습니다. 드라이버는 잠김 방지 브레이크(ABS), 에어백, 크럼플 존 등 다양한 안전 장치로 보호받습니다. 그러나 2007년 앱 샌드박싱이 처음 소개됐을 당시에는 이에 상응하는 컴퓨터용 안전장치가 없었습니다. 당시 발표에서 던진 질문처럼, "컴퓨터의 안전벨트는 어디에 있는가?"였던 것입니다. 샌드박싱은 자동차가 드라이버를 보호하듯 사용자를 지킵니다. 고장이나 실패가 발생하면 피해를 줄이는 시스템으로 대응하는 것이죠. 악성 행위에 의한 공격이든 단순한 코딩 오류든, 결과적으로 피해는 줄어듭니다.

샌드박싱은 앱이 할 수 있는 작업을 제한하기 때문에 개발자의 자유도 역시 제한합니다. 샌드박스 앱은 실행 속도가 느리고 개발 기간도 더 오래 걸립니다. 맥의 강력한 성능을 고려하면 샌드박스 제약이 각종 앱의 호환성에 큰 영향을 미칠 수 있습니다. 그 결과 파워 유저들은 성능이나 기능상의 이유로 샌드박스 밖에서 실행되는 앱을 선택하는 경우가 많습니다.

앱 샌드박싱은 어떻게 작동할까?

샌드박싱은 '최소 권한 원칙(principle of least privilege)'에 기반합니다. 요컨대 시스템은 필요한 만큼만 할 수 있고, 그 이상은 할 수 없다는 것입니다. 시스템의 각 구성 요소가 선언된 목표만 달성하도록 제한하면 앱이 탈취당했을 때의 위험을 크게 줄일 수 있습니다. 예를 들어 손전등 앱이 연락처 목록에 접근할 이유는 전혀 없습니다.

앱은 샌드박스 밖의 자원에 접근할 수 있지만, 반드시 운영체제의 허가를 받아야 합니다. macOS의 '열기 및 저장' 대화상자를 예로 들어 보겠습니다. 샌드박스 안에 있는 앱은 하드 드라이브의 파일 시스템 리소스에 직접 접근할 수 없습니다. 예컨대 "~/Documents" 경로에 열기 패널을 직접 띄울 수 없다는 뜻입니다. 대신 앱은 NSOpenPanelNSSavePanel 클래스를 통해 Powerbox API에 패널 접근을 요청해야 합니다.

macOS 앱 샌드박싱, 사용자를 보호하는 방법 완벽 정리

애플리케이션은 Powerbox 내부에서 무슨 일이 일어나는지 직접 볼 수 없으며, 열거나 저장한 파일에만 접근이 허용됩니다. 이런 방식으로 앱은 불필요한 위험 없이 핵심 기능을 수행할 수 있습니다.

이 기능은 엔타이틀먼트(entitlement, 구체적으로 com.apple.security.files.user-selected.read-write)를 통해 활성화됩니다. 앱 개발자는 앱이 하는 일을 선언하는 엔타이틀먼트를 설정하고, 운영체제는 선언된 엔타이틀먼트에 따라 적절히 제한된 수준의 기능만 허용합니다.

이 사고방식이 앱 샌드박싱 모델과 메커니즘 전반의 기본입니다. 앱은 의도를 먼저 선언하고, 위험한 작업을 수행하려면 OS 수준의 '상사'에게 허가를 받아야 한다는 것입니다.

샌드박스 앱 vs 비샌드박스 앱

2012년 6월 1일부터 Mac App Store를 통해 배포되는 모든 서드파티 앱은 샌드박싱이 필수가 되었습니다. 샌드박싱이 허용하는 기능 범위가 넓긴 하지만, Mac App Store 앱은 비샌드박스 앱보다 기능이 제한적인 경우가 많습니다. 일부 개발자는 아예 두 가지 버전을 유지하기도 합니다. 직접 다운로드용으로는 온전한 기능을 갖춘 앱을, Mac App Store용으로는 기능이 축소된 버전을 따로 내놓는 식입니다. 샌드박스 개발의 복잡성 때문에 새로운 기능 추가도 더 어렵습니다. 설령 OS가 해당 기능을 허용한다 해도 말입니다.

샌드박스 앱은 Mac App Store 배포라는 이점을 얻을 수 있으며, 샌드박싱은 보안 권한으로 확장할 수도 있습니다. 앱이 스스로 손쉬운 사용(Accessibility) 권한을 켤 수는 없지만, 사용자에게 권한 활성화를 요청할 수는 있습니다.

macOS 앱 샌드박싱, 사용자를 보호하는 방법 완벽 정리macOS 앱 샌드박싱, 사용자를 보호하는 방법 완벽 정리

내 앱 중 어떤 것이 샌드박싱되어 있는지 확인하려면 활성 상태 보기(Activity Monitor)를 열고, 열 제목을 마우스 오른쪽 버튼으로 클릭해 'Sandbox' 항목을 창에 추가하면 됩니다.

macOS 앱 샌드박싱, 사용자를 보호하는 방법 완벽 정리

다만 샌드박스 안에서는 애초에 존재할 수 없는 앱들도 있습니다. 실제로 샌드박싱 때문에 여러 가지 유용한 사용 사례가 차단됩니다. 샌드박싱은 앱 간 통신, 관찰, 수정을 막기 때문에 애플리케이션 간 상호작용 방식이 크게 제한됩니다. TextExpander 같은 시스템 전역 단축키 도구는 완전히 금지됩니다. 그 수준의 기능은 샌드박스가 허용하지 않기 때문입니다.

결론

유망한 아이디어임에도 불구하고, macOS 앱 샌드박싱은 잘 실행되지 못했다는 평가를 받습니다. 속도와 향상된 기능 같은 맥 앱 고유의 강점을 제한해 버린 것입니다. 샌드박스 밖에서 실행되는 앱이 거의 항상 더 강력하고 빠릅니다. 이 파워 유저의 관점에서 볼 때, 가장 많이 쓰는 앱들은 모두 비샌드박스 앱입니다. TextExpander, SnagIt, TotalFinder 같은 앱들은 일상 업무에 없어서는 안 될 도구입니다. 이런 광범위한 외면을 반복하지 않으려면, 앞으로의 보안 시스템은 투명성과 함께 유연성과 성능의 균형을 갖춰야 합니다.