웹 환경 무결성 검사에 대한 두 가지 입장
딱히 웹 기술의 현재와 미래에 관심이 있지는 않습니다. 가령 인터넷 익스플로러가 세계를 평정했지만 정작 마이크로소프트 본인은 그게 얼마나 대단한 기회였는지 제대로 알지도 못한 채 상황을 날려 버리는 동안 온갖 사람들이 한 가지 브라우저가 세계를 평정한 이 상태가 얼마나 나쁜지 이야기하곤 했지만 크게 관심 갖지 않았습니다. 한동안은 아무 의미 없이 웹사이트에 ‘인터넷 익스플로러에 최적화됨’이라는 메시지를 걸어놓곤 했는데 딱히 뭘 최적화 했다기보다는 그저 제가 사용하던 인터넷 익스플로러에서 이상하지 않게 보인다는 의미였습니다.
세월이 흘러 마이크로소프트가 그렇게 어이 없이 브라우저 시장을 날려버리고 지금은 구글 크롬 브라우저가 이전의 인터넷 익스플로러 처럼 세계를 평정한 것 같습니다. 이전 시대의 마이크로소프트에 비해 웹에서 나고 자란 구글은 직접 통제할 수 있는 브라우저가 세계를 통제한 이 상황이 가지는 의미를 잘 알고 있었고 이를 활용하기 시작합니다. 가령 크롬 브라우저는 인터넷에서 가장 활발히 개발되는 익스텐션 생태계를 가지고 있고 이를 최대한 원활하게 지원해 여느 새로운 브라우저의 진입을 사실상 불가능하게 만들고 있습니다. 이런 상황에 대응하기 위해 마이크로소프트는 자신들의 새 브라우저를 크롬미움 기반으로 바꿔버리기까지 했을 정도입니다. 또한 구글은 종종 크롬 브라우저에서만 온전히 지원하거나 제대로 지원하지 않는 기능 사이를 오가며 개발한 끝에 자사 서비스 중 일부가 다른 브라우저에서 원활하게 동작하지 않는 상태를 의도적으로 만들기도 하는 것 같아 보입니다.
세계에서 가장 많은 사람들이 사용하는 브라우저를 통제할 엄청난 권한을 가지게 된 회사가 그런 권한을 사용하지 않고 버티는 것 또한 상상하기 어렵습니다. 마치 심지어 감시 하에서도 적극적으로 부패하는 권력처럼 이런 막강한 권한은 반드시 오용 되거나 악용될 겁니다. 때문에 비록 같은 크로미움 기반이더라도 구글이 아닌 회사에서 만드는 다른 브라우저를 선택하거나 아예 크로미움 기반이 아닌 브라우저를 선택하는 행동은 이런 세계에서 권한의 남용을 감시하는 효과가 있다는데 동의합니다. 개인적으로 이런 선택을 대단하다고 생각하는데 이유는 그런 선택이 실제로 현대 인터넷을 원활하고 편리하게 사용하기 어렵게 만들기 때문입니다.
한편 지나가다가 ‘Web-Environment-Integrity’라는 리파지토리를 봤는데 여러 곳에서 이 리파지토리 이야기를 하는 것으로 미루어 분명 재미있는 시도를 하려는 것 같아 보입니다. 현대 인터넷 환경에서 클라이언트는 다양한 이유로 눈에 띄게, 그리고 눈에 띄지 않게 변조 되어 있을 수 있습니다. 가령 사용자가 의도해서 설치한 광고 차단 프로그램은 클라이언트 수준에서 서버가 건네준 사이트를 변조해서 광고를 없앤 다음 화면에 표시합니다. 현대에 어떤 사이트들은 광고가 화면에 표시되지 않는 상태를 감지해 서비스를 제공하지 않기도 합니다. 또 한때 온갖 문제를 일으키던 브라우저 툴바는 브라우저 이름을 바꿔 툴바 제조사가 운영하는 서비스에서 이를 감지해 특정 기능의 사용 가능 여부를 결정하기도 했습니다.
대강 설명하면 웹 서비스가 클라이언트의 무결성을 검사할 수 있도록 하는 겁니다. 지금도 소극적으로는 광고가 화면에 표시되지 않는 상태를 감지하는 식으로 클라이언트에 특정 상태를 강제하기도 하지만 이번에는 좀 더 적극적으로 클라이언트가 변조 된 상태를 확인하려는 것 같습니다. 하지만 브라우저 스스로는 마음 먹고 변조 된 상태를 숨기려는 시도를 감지할 수 없습니다. 마치 이미 바이러스에 의해 조작돼 바이러스를 탐지해내지 못하는 보안 소프트웨어의 상태와 비슷합니다. 그래서 이번에는 브라우저 바깥의 누군가가 브라우저를 감시하며 브라우저가 변조 된 상태인지 여부를 검사하려는 것 같습니다.
역사적으로 이런 시도는 대부분 멍청한 결말을 맞이해 왔습니다. 가령 게임 유통사가 게임의 허가되지 않은 복제를 막기 위해 운영체제 수준에서 동작하는 숨겨진 감시 코드를 실행했다가 목적을 달성하지도 못하고 이 코드의 취약성을 이용한 다른 공격에 악용되기도 했습니다. 또 특히 한국에서는 클라이언트 무결성 검증을 위해 지난 20여년에 걸쳐 클라이언트에 온갖 소프트웨어를 설치할 것을 요구 받곤 했지만 정작 이 소프트웨어들은 그 분야에 별다른 전문성이 없는 것으로 추정되는 인력에 의해 개발되어 예상한 역할을 수행하기는 했지만 예상하지 못한 역할을 수행하는데 너무 쉽게 악용되어 왔습니다. 현대에는 보안을 위해 설치한 보안 카메라 소프트웨어가 충분히 사려 깊게 만들어지지 않아 똑같이 보안 문제를 일으켜 오히려 보안을 악화 시킨 사례 역시 수없이 많습니다.
그래서 이런 시도가 일어날 예정이라는 사실이 이 리파지토리를 통해 알려지자 수많은 사람들이 달려와 우려를 표하고 있습니다. 개인적으로도 그냥 가깝게는 이미 지금도 어떤 사이트에서 광고가 제대로 표시되지 않는다는 이유로 서비스 제공을 거절하면 ‘ㅇㅇ 안볼께’ 하며 짜증을 내고 또 제가 제 컴퓨터와 내 컴퓨터에서 동작하는 여러 소프트웨어에 대한 온전한 통제 권한을 망가뜨리려는 시도가 달갑지 않습니다. 또한 이런 시도는 조금만 실수해도 원래 의도와 완전히 다른 동작에 악용될 수 있음을 이미 지난 오랜 역사를 통해 배워 왔기도 하고요. 때문에 개인적으로는 이런 시도가 미래에 인터넷을 더 불편하게 만들고 더 안전하지 않게 만들며 궁극적으로 제 컴퓨터와 제 정보에 대한 내 통제 권한을 약화 시킬 거라는 의견에 깊이 동의합니다. 그냥 보나 마나 운영체제 수준에서 동작하는 이런 감시 소프트웨어는 순식간에 악용되어 보안 프로그램에 의해 차단되는 신세가 될 겁니다.
하지만 다른 한 편으로는 지금까지 일해 온 세계에서는 클라이언트의 무결성을 검증하고 조작된 클라이언트가 서비스를 망치지 않도록 하기 위해 온갖 방법을 동원해 싸워 왔습니다. 현대에 조작된 클라이언트는 게임 규칙을 무시한 온갖 치팅을 가능하게 만들어 이를 활용하지 않는 고객들의 경험을 완전히 망치고 있습니다. 경험을 망치는 수준에서 끝난다면 오히려 다행일 정도인데 현대의 여러 게임은 특정 행동에 대해 보상하고 이런 행동 각각이 유료화 메커닉과 연결되어 있는 경우가 많아 경험 뿐 아니라 게임 전체의 경제 시스템, 유료화 메커닉 전체를 망가뜨릴 수 있습니다. 이전 시대에는 이런 시도가 순식간에 게임 전체를 망가뜨려 서비스를 종료하게 만들기도 했지만 그러는 사이에 우리들도 조금 더 똑똑해져 왜 현대 게임에 그렇게 많은 종류의 재화를 사용하나요?에서 설명했 듯 격벽으로 구성된 배처럼 경제 시스템을 서로 다른 여러 재화로 나누고 각 재화가 전환되는 지점을 통제하는 방식으로 경제 시스템을 설계해 문제가 생길 때 게임에 미칠 영향을 최소화 하고 있고 이런 디자인은 꽤 여러 가지가 있습니다.
아예 적극적으로 서드파티 보안 소프트웨어를 포함해 클라이언트를 위조하거나 클라이언트에 우리가 지정한 방식 이외의 방식으로 접근하려는 시도를 탐지하면 서비스를 거절하기도 합니다. 또 게임을 실행할 때마다 클라이언트를 구성하는 모든 파일을 검사해 서버가 알고 있는 정보와 비교해 변조 된 파일이 있는지 확인하기도 하는데 이 과정은 시간이 오래 걸릴 뿐 아니라 위에서 설명한 것처럼 마음 먹고 속이려는 시도에 대응할 수 없습니다. 한동안은 평판이 좋지 않은 무슨무슨 게임 가드 같은 서드파티 소프트웨어를 먼저 실행하고 이 소프트웨어가 클라이언트 무결성을 확인한 다음에야 서비스를 제공했고 또 현대에는 이런 서드파티 소프트웨어를 게임에 내장해 고객들에게 평판이 나쁜 보안 소프트웨어 회사의 로고를 보여주지 않고도 비슷한 수준의 보안을 얻을 수 있게 됩니다.
앞에서 충분히 이야기 한 대로 이런 시도가 모든 문제를 해결해 주지 않습니다. 오히려 이런 도구는 그저 게임과 상관 없이 실행한 다른 프로그램을 문제 삼아 서비스 제공을 거절할 수도 있고 고객의 기계가 오동작 하게 만들 수도 있으며 소프트웨어 스스로의 오동작으로 인해 원하지 않는 서비스 거부를 겪을 수도 있습니다. 또한 이런 소프트웨어가 항상 그렇듯 사려 깊지 않은 개발로 인해 악용될 여지가 있고 악용될 경우 오히려 서비스를 방해하고 고객을 위험에 빠뜨릴 여지도 있고요.
하지만 서비스를 제공하는 사람 입장에서 이런 소프트웨어가 항상 문제를 일으키는 것은 아닙니다. 이런 보안 조치는 그 예측 가능한 부정적인 결과에도 불구하고 널리 알려진 공격 상당수를 어렵게 만들어 가벼운 의지로 시작한 공격을 포기하게 만들고 또 공격에 필요한 기술 수준을 높여 그저 그런 공격 시도를 대부분 실패하게 만들어 줍니다. 그러는 사이에 회사는 좀 더 본격적인 공격에 집중해 대응할 수 있고 또 게임을 제공하는 입장에서는 게임 자체에 집중하고 보안은 서드파티 소프트웨어 개발사로 분산해 전문성을 확보할 비용을 줄일 수도 있습니다. 아주 큰 회사들은 자체적으로 보안 부서가 있고 이들이 게임에 쏟아지는 온갖 (정말 별의 별 시도가 있음) 공격을 막아내지만 대부분은 그렇지 못하며 그렇다고 이들 모두가 인하우스에 보안 전문 부서를 구축하기를 기대하는 것 역시 현실적으로 불가능합니다.
현대의 웹은 일상의 거의 모든 일을 수행하는 매개가 되었습니다. 돈을 주고받고 물건을 주문하고 서로 여러 미디어로 구성된 메시지를 주고 받으며 미션 크리티컬한 데이터를 교환하는데도 사용합니다. 하지만 그런 웹이 지난 십 수년에 걸쳐 과연 신뢰할 수 있는 보안 환경을 제공했는지는 잘 모르겠습니다. 현대에 여러 은행이 멀쩡한 웹을 놔두고 왜 스마트폰 앱으로만 서비스를 제공하곤 하는지를 생각해 보면 현대의 웹을 신뢰할 수 있을지 힌트를 얻을 수 있습니다. 일반 컴퓨터에 비해 스마트폰은 훨씬 더 강한 통제를 받아 클라이언트가 변조될 가능성이 상대적으로 낮습니다. 심지어 웹은 클라이언트가 변조 되었는지 확인할 마땅한 방법이 아직 없는 것 같지만 스마트폰은 애초에 운영체제 수준에서 운영체제의 보안 시스템이 정상적으로 유지되고 있는지 확인하면 이에 기반해 설치된 각 소프트웨어의 무결성을 어느 정도 신뢰할 수 있습니다.
그래서 여러 클라이언트 무결성을 요구하는 서비스가 웹에서 앱으로 옮겨 가고 있는데 이런 상황이 올바른지 잘 모르겠습니다. 현대에 스마트폰은 흔해 보이지만 다른 한 편으로는 모든 사람이 접근할 수 있지는 않습니다. 웹을 실행하는 컴퓨터는 여러 사람이 접근하는 경우에 대비해 개발되곤 하지만 스마트폰은 그렇지 않은 경우가 거의 대부분이어서 전통적인 컴퓨터처럼 여러 사람이 함께 사용하는데 적합한 환경을 제공하지 않곤 합니다. 스마트폰이 더더욱 대중화 되더라도 꽤 오랜 기간에 걸쳐 웹은 앱에 비해 더 높은 접근성을 가질 예정이며 이 높은 접근성 때문에 앱으로 옮겨 간 서비스들이 더 많이 웹에서도 똑같이 제공되어야 한다고 생각합니다.
이미 한국에서는 지난 20여년에 걸쳐 클라이언트 무결성을 검증할 운영체제 수준의 온갖 방법이 동원되어 온갖 문제를 일으킨 사례가 있습니다. 그나마 최근에서야 스마트폰 및 운영체제 제조사가 기술적으로 보증하는 보안 상태를 통해 앱을 통한 서비스는 이전 시대처럼 시스템에 온갖 문제를 일으키는 서드파티 소프트웨어를 설치할 필요 없는 상태를 유지하면서도 돈을 보내고 미션 크리티컬한 데이터에 접근할 수 있습니다. 이런 상황에서 서비스를 제공하는 사람 입장에서 인터넷에서 클라이언트 무결성을 확인하는 메커니즘을 만드는 프로젝트는 앞에서 설명한 것처럼 그 위험성에도 불구하고 미래의 웹이 앱에 비해 더 강력한 접근성에 기반해 다양한 미션 크리티컬한 서비스를 제공하면서도 사용자의 시스템을 망가뜨리지 않는 보다 사려 깊고 전문적인 개발자들에 의해 관리되는 시스템이 생기는데 동의합니다.
결론. 역사적으로 클라이언트 무결성을 체크하려는 여러 가지 시도는 비전문가들의 낮은 기술력에 기반한 저질 소프트웨어에 의해 항상 실패했고 더 큰 문제를 일으켜 왔습니다. 또한 웹에서 클라이언트 무결성 확인은 브라우저 바깥의 권한을 요구하므로 사용자의 컴퓨터와 운영체제, 이를 기반으로 실행되는 소프트웨어의 통제권한을 약화 시킬 여지가 있습니다. 그래서 개인적으로는 이런 시도가 달갑지 않습니다. 당장 광고차단 소프트웨어를 감지해 서비스 제공을 거부하는 사이트를 만나면 화가 납니다.
하지만 서비스를 제공하는 사람 입장에서 서드파티 보안 소프트웨어를 통해 자잘한 공격 시도를 포기하게 만들고 보다 본격적인 문제에 집중할 수 있으며 우리는 우리 할 일에 집중하고 보안 소프트웨어 개발사가 보안 문제에 집중하게 만들어 서비스를 유지할 수 있었습니다. 만약 충분한 지식과 기술을 갖춘 그룹이 웹 기반 무결성 확인 메커닉을 개발한다면 현대에 웹 기반 무결성을 신뢰할 수 없어 여러 서비스가 상대적으로 접근성이 낮은 앱 기반으로 옮겨 가는 상황을 개선하면서도 이전 시대에 무결성 유지를 위해 겪던 온갖 문제를 어느 정도 완화할 수도 있을 거라고 생각합니다.