Computer >> 컴퓨터 >  >> 네트워킹 >> 인터넷

Noscript로 글꼴 취약점까지 한 번에 잡는 법: 웹 폰트 차단 실전 가이드

최근 한 달 동안 데스크톱부터 모바일까지 다양한 운영체제에서 글꼴 파싱(font parsing) 취약점으로 인한 원격 코드 실행 익스플로잇과 관련된 보안 공지를 열두 개 남짓 접했습니다. 흥미로운 점은, 이 모든 공지에서 문제 자체는 상세히 설명하면서도 정작 해결책에 대해서는 '벤더 업데이트'라는 말 외에는 거의 아무런 언급이 없었다는 사실입니다.

다소 의외로 느껴지실 겁니다. 글꼴 문제를 스스로 방어할 수 있는 도구가 이미 존재하기 때문입니다. 바로 Noscript입니다. Firefox에서 오랫동안 제공되어 왔고 최근에는 Chrome에서도 사용할 수 있는 훌륭한 브라우저 확장 프로그램으로, 웹페이지에서 글꼴 로딩까지 직접 통제할 수 있게 해 줍니다. 간단하고 우아한 도구로, 글꼴 관련 골칫거리를 없애거나 최소한 크게 줄여 줍니다. 그런데 이 도구가 마땅히 받아야 할 주목을 받고 있을까요? 물론 아닙니다. 드라마와 공포가 훨씬 더 화제성이 높으니까요. 지금부터 자세히 살펴보겠습니다.

Noscript로 글꼴 취약점까지 한 번에 잡는 법: 웹 폰트 차단 실전 가이드

Noscript 60초 요약

Dedoimedo를 꾸준히 읽어 온 독자라면 제가 Noscript를 얼마나 애용하는지 알 것입니다. 저에게는 필수 브라우저 확장 프로그램입니다. 스크립트를 대부분 비활성화하면 브라우징이 훨씬 즐거워집니다. 더 빠르고, 더 깔끔하니까요. 보안이라는 요소는 부수적인 효과지만 분명히 존재합니다. Noscript를 사용하면 순수한 정보, 즉 텍스트와 이미지만 로딩됩니다. 스크립트가 필요한 요소들은 전부 차단되죠. 아주 좋습니다.

이것은 현대 인터넷 경험—솔직히 끔찍하기 짝이 없죠—을 정상적이고 조용한 환경으로 되돌려 줍니다. 자바스크립트가 필요한 작업을 할 때는 특정 도메인의 권한만 임시로 허용하고, 필요한 일을 마친 뒤 다시 조용하고 깔끔한 브라우징으로 복귀하면 됩니다.

TRUSTED(신뢰) 목록과 UNTRUSTED(비신뢰) 목록을 영구적으로 구성할 수도 있습니다. 기본적으로 스크립트와 기타 객체가 허용되는 사이트들, 그리고 임시로 전체 허용을 하더라도 차단 상태를 유지할 사이트들을 미리 지정하는 것이죠. 단순하고 실용적입니다. 물론 번거로울 수 있고, 이걸 제대로 활용하는 건 어느 정도 덕후력이 필요하지만, 어차피 보안 이야기란 전부 그런 덕질의 영역이긴 합니다.

그런데 스크립트 제어는 Noscript 기능 중 일부일 뿐입니다. 이 확장 프로그램은 객체, 미디어 파일, 프레임, WebGL 등 웹페이지의 다른 요소들도 차단하거나 허용할 수 있습니다. 그리고 무엇보다, 글꼴(fonts)도 가능합니다! 글꼴을 잊으면 안 됩니다. 원격 글꼴이 있다면 차단할 수 있습니다. 기본 설정에서 Noscript는 페이지의 스크립트, 글꼴, WebGL, 웹 핑(web ping) 요소를 차단합니다. 신뢰하는 사이트에서는 모든 것이 허용되고, 신뢰하지 않는 사이트에서는 모든 것이 차단됩니다.

Noscript로 글꼴 취약점까지 한 번에 잡는 법: 웹 폰트 차단 실전 가이드

Noscript로 글꼴 취약점까지 한 번에 잡는 법: 웹 폰트 차단 실전 가이드

Noscript와 글꼴 설정

글꼴을 차단해서 웹 경험을 후퇴시키고 싶지 않고, 매번 이 사이트 저 사이트 스크립트 권한을 조정하는 게 귀찮다면, 다음과 같이 설정하면 됩니다:

  • DEFAULT(기본) 영역에서는 스크립트를 허용합니다.
  • DEFAULT와 TRUSTED 영역 모두에서 글꼴을 차단합니다.

이게 전부입니다. 일상적인 인터넷 사용은 예전과 거의 같습니다. 사이트는 (거의) 온전히 로딩되고, 스크립트, 댓글 등 필요한 기능은 모두 작동합니다. 처리되지 않는 유일한 것은 원격 글꼴뿐이죠. 즉, 문제가 될 만한 요소가 애초에 들어오지 않으니 문제도 없습니다. 사실 스크립트 관리의 불편함을 감수하고 싶지 않다면, 이 구성을 기본값으로 삼아도 전혀 손색이 없습니다.

Noscript로 글꼴 취약점까지 한 번에 잡는 법: 웹 폰트 차단 실전 가이드

물론 이 설정은 글꼴 경험에는 변화를 가져옵니다. 화려한 원격 글꼴을 사용하는 사이트는 해당 글꼴이 렌더링되지 않으므로, 대체 글꼴(로컬에 있는 아무 글꼴)이 표시되거나, CSS에 fallback 글꼴조차 지정하지 않아 형편없이 구성된 사이트라면 빈 네모 상자들이 보일 수 있습니다. 참으로 훌륭하죠!

사람들은 이런 현상을 보면 자동으로 '나쁘고 불량한 글꼴' 탓을 하곤 합니다. 하지만 저는 모든 원격 글꼴이 나쁘다고 생각합니다. 정확히는 '불필요하다'는 뜻입니다. 시시한 유행 따위를 제외하면, 웹페이지에 원격 글꼴을 쓸 이유가 없습니다. 다크 테마처럼 그저 유행이라서요? 화려한 글꼴이 필요하면 직접 구매해서 자신의 서버에 올리고 방문자에게 서비스하면 됩니다. 아, 그렇죠, 그러려면 돈이 들죠! 하지만 Arial이나 sans-serif는 너무 올드하고 쿨하지 않다는 군요.

참고로 웹 글꼴 차단은 새로운 개념이 아닙니다. Noscript는 적어도 2010년부터 이 기능을 지원해 왔고, 당시에도 원격 글꼴 문제와 FreeType 취약점은 종종 발생했습니다. 초점이 살짝 옮겨갔을 뿐, 근본적으로 달라진 것은 없습니다.

추가로, 위험하거나 불신하는 사이트를 영구적으로 차단해 둘 수도 있습니다. 그러면 여러 도메인에 대해 '전체 허용'을 했을 때도 비신뢰 사이트는 계속 차단 상태를 유지하므로, 부주의하거나 성급한 클릭 하나로 설정에 구멍이 생길 걱정을 할 필요가 없습니다.

덤으로 하나 더: Windows 10과 익스플로잇 방지(Exploit Protection)

Windows 사용자를 위한 이야기로, Noscript와는 무관하지만 이 지점의 가치를 강조하기 좋은 타이밍이라 소개합니다. 사람들이 Windows의 재앙만을 운운하면서도 정작 Windows 운영체제에 내장된 최고의 보안 메커니즘, 즉 전설적인 EMET 도구의 후속격인 우아하고 비교적 투명한 익스플로잇 방지(Exploit Protection) 프레임워크를 언급하지 않을 때마다 저는 짜증이 납니다. 헛되이 보안을 쫓아다닐 대신, 문제를 발생 자체에서 차단할 수 있습니다.

첫째, 운영체제 수준에서 신뢰할 수 없는 글꼴(untrusted fonts)을 전역적으로 비활성화할 수 있습니다. 이것이 과하다고 느껴진다면, Exploit Protection 기능으로 애플리케이션별로 정책을 조정할 수도 있습니다. 역시 매우 간단합니다. 하지만 이 기능은 화려한 서스펜스가 없다 보니 충분한 주목을 받지 못하는 듯합니다.

Noscript로 글꼴 취약점까지 한 번에 잡는 법: 웹 폰트 차단 실전 가이드

Noscript로 글꼴 취약점까지 한 번에 잡는 법: 웹 폰트 차단 실전 가이드

시적 정의: Firefox의 부활

최근 눈에 띄는 현상 중 하나는 Chrome의 제로데이(zero-day) 취약점입니다. 이 자체로는 특별할 것도 새로울 것도 없습니다. 수많은 프로그램이 그래왔고 앞으로도 그럴 테니까요. 취약점이 나타나면 벤더가 패치하고, 끝입니다. 인터넷에 연결되어 있다면 언젠가는 문제가 생길 수 있습니다. 인생의 단순한 진리죠.

흥미로운 것은 Chrome/Chromium의 압도적인 보급률입니다. 특히 모바일에서 지배적인 브라우저가 되었기 때문입니다. 오늘날 젊은 세대는 이것이 새롭고 유일한 현상이라고 느낄지 모르지만, 사실 2005~2010년경 Internet Explorer가 가장 인기 있으면서 동시에 가장 많은 공격 표적이 되던 시절의 기쁨과 드라마가 반복되고 있을 뿐입니다.

그리고 숨어 있는 드래건, 즉 Electron도 있습니다. 요즘 수많은 애플리케이션이 사실상 커스텀 UI를 입힌 캡슐화된 브라우저이며, 내부에는 Chromium 엔진이 돌아갑니다. 덕분에 디자인은 단순하고 우아해졌지만, 동시에 Chromium에 취약점이 존재한다면 순수한 브라우징과는 무관해 보이는 수많은 앱에도 같은 취약점이 있을 가능성이 커집니다. 그런 버그가 실제로 발현될 때, 과연 당신에게 영향을 줄까요? 어떻게? 언제? 브라우저가 아닌 인터페이스에서 브라우저형 익스플로잇을 유발하는 요인을 파악할 수 있을까요? 힌트를 드리자면, 이미 CVE-2018-1000136 같은 사례가 있었습니다.

그리고 Firefox가 있습니다. 예전만큼 화려하거나 인기 있지는 않지만, 자체 렌더링 엔진을 사용하고 시장 점유율이 작다는 사실은 공격자들의 첫 번째 표적이 될 가능성을 낮춰 줍니다. 우리는 일종의 15년 전으로 시간 여행을 한 셈입니다. 참 아이러니하죠.

결론

최근의 보안 공지들은 대부분 비(非)Windows 운영체제, 특히 모바일과 관련된 것이었습니다. 그렇다면 Exploit Protection은 해당되지 않지만, Firefox와 Chrome은 대부분의 운영체제에서 사용할 수 있으므로 Noscript 확장 프로그램으로 보안과 사용성을 동시에 강화할 수 있습니다. 스마트폰의 광고 차단기가 쓰레기 요소를 99% 줄이고 배터리 수명까지 늘려 주듯, Noscript 역시 노이즈를 더욱 줄이고 보안을 향상시키는 데 도움이 됩니다.

이 글의 초점은 글꼴의 보안 문제지만, 사실 그것만은 아닙니다. 이러한 글꼴 취약점은 잘못된 사용 모델(BAD USAGE model)의 자연스러운 결과물입니다. 어떤 것에든 버그와 문제는 있을 수 있습니다. 글꼴이 특별하거나 유일한 예외는 아닙니다. 진짜 문제는 사람들이 글꼴을 잘못된 방식으로 사용한다는 점입니다. 아이에게 클레이모어 지뢰를 쥐여 주는 격이죠. 다만 그것이 형편없는 CSS와 게으른 웹 디자인일 뿐입니다. 원격 글꼴이란 녹슨 낡은 차에 붙인 화려한 휠과 다름없습니다.

원격·서드파티 리소스 로딩은 점점 커지는 문제입니다. 점점 더 많은 사이트가 코드 조각을 무비판적으로 재사용하고 있고, 모든 것이 '클라우드화'되고 있습니다. 로컬 자산과 원격 자산의 경계가 흐려지고, 클라우드 스토리지와 네트워크 사용이 늘어나면서 인터넷 경험은 점점 복잡해집니다. 결국 어디선가 약간의 속도와 광택을 얻는 대신, 건강한 코딩 관행과 보안을 포함한 나머지 전부를 잃는 셈입니다. 어차피 웹은 2014년경쯤 죽었고, 지금의 모습은 그냥 '바보들의 행진 2.0'일 뿐입니다.

어쨌든, 오늘의 분노 표출은 여기까지. Noscript를 사용해서 당신의 인터넷을 좀 덜 멍청하게 만들어 보세요. 이건 보안의 문제가 아닙니다. 보안은 그저 덤일 뿐이죠. 핵심은 쓰레기를 차단하는 것이고, 차단하는 쓰레기가 많아질수록 웹 디자이너들이 자신의 관행을 다시 생각할 가능성도 높아집니다. 원격 글꼴은 현대 인터넷의 수많은 문제 중 하나일 뿐이며, 여기에 협조할 이유는 없습니다. 그 과정에서 기기가 해킹당할 위험도 함께 줄어들 수 있습니다. 이상입니다.

그럼, 즐거운 브라우징 되세요.