2016년 3월 25일 금요일

싸인코드와 국내 클라이언트 보안 업계에 대한 이야기

"국내 게임보안솔루션" 하면 좀 열받는다. 남들 다 하는 던파 한번 하려고 했다. 켤 때마다 관리자 권한을 요구하며, 심지어 내 컴퓨터에선 변조 툴이 감지되었다며 무력화 없이는 게임을 켜는 것조차 불가능했다. 이 블로그의 개설 동기다.
 
일단 켜지면 내 기준에 전혀 신뢰할 수 없는 드라이버를 알림도 없이 시스템에 올린다. 그 드라이버 개발자를 믿고 내 컴퓨터의 전체 권한을 맡겨야 한다는 말인데, 유쾌할리 없다. 업무에 사용하는 모니터링 툴 같은 것들은 한 번 켜면 재부팅 전까지 감지 메세지를 띄우며, 일부 툴은 삭제하지 않으면 안 된다.
 
내부적으로 로그인 된 유저아이디를 입력받아 감지시 서버로 전송한다. 정확히 어떤 정보가 같이 전송되는지는 분석해보진 않았으나, OS 종류 등 적지 않은 정보가 전송될 것이다.
특정 악성 유저를 하드웨어ID 기반으로 차단하는 기능도 있다고 하니, 법적으로 '사용자를 식별가능한 개인정보'를 수집하고 있는 것은 명확해 보인다. 물론 나는 어떤 동의도 한 기억이 없다.
 
켤 때마다 아무 알림도 동의도 없이 몰래 모듈 업데이트를 진행하고, 그걸 관리자 권한으로 내 컴퓨터에서 실행시킨다. 싸인코드 업데이트 서버가 해킹당하면, 게임을 켜는 모든 PC가 동시에 좀비PC가 될 수 있는 멋진 환경이다. 이런 극단적인 해킹 시나리오는 생각보다 빈번히 현실에서 발생한다. 메신저의 업데이트 서버는 해킹당해도 어플리케이션에 관리자 권한이 없으니, 최악의 경우를 방지할 수 있지만 이런 보안솔루션의 경우엔 정말 얄짤없다. 유저 스스로 대비가 절대 불가능하다. 애초에 업데이트하고 있었는지도 모를 테니까.
 
수많은 API를 후킹해, 말 도 안되는 각종 호환성 이슈와 성능 저하를 발생시킨다. 최악의 경우 블루스크린이다.

백신 프로그램들은 바이러스로 부터 PC를 보호하지만, 이 프로그램은 사용자로부터 게임을 보호한다. 보호하기 위해 말도안되는 권한과 정보들을 요구한다. 정말 일반 사용자에게는 불편하기만 하고 한 점 도움이 안 되는 프로그램이다.
 
나는 이런 프로그램이 내 PC에서 돌아가는걸 원치 않는다. 관리자 권한을 요구하지 않는다면 모를까. 성능 하락을 각오하고 VM에 게임을 설치하면, 상당수는 VM에서 게임을 실행하는걸 허용하지 않는 댄다. 그래서 난 아예 국내 온라인게임을 하지 않는다. 국내 보안솔루션이 달려있을 거거든.
 
열받아서 포스트 몇 개 올리고 잊어버리고 있었더니, 최근엔 이 블로그가 수면 위로 떠올라 상당한 화젯거리인 모양이다.
http://jiniya.net/ng/2016/03/misunderstanding-about-xigncode/
싸인코드 블로그에도 마치 내 블로그를 겨냥한 듯한 해명글을 올리기도 하고 말이다. 대부분 맞는 말을 하고 있지만, 아쉽게도 내가 말하는 "나같이 선량한 유저를 괴롭히며 기술적 수준이 떨어지는 조악한 물건"임을 부정하지는 못 했다.

이 블로그는 현재 싸인코드 타도 의견의 어떤 신뢰할만한 출처로 사용되고 있다. 부분적으로 동의하지만, 방향이 잘못됐다. 타도해야할 건 정확히 싸인코드가 아니다.

정확히는, "게임 해킹 툴을 막기 위한 시스템 권한을 요구하는 보안 솔루션"이라는 그림 자체가 모순이다. 어떤 컴퓨터에서는 관리자 권한이 없는 사람도 있는 반면, 게임이나 단순 소프트웨어가 실행 시마다 관리자 권한을 요구한 후에 켜지는 것은 변명의 여지가 없는 설계 실패다.

그럼 어떤 게 맞는 그림이냐? 라는 답엔 해외 주요 온라인게임을 살펴볼 수 있다. 블리자드의 디아블로, 스타크래프트, 혹은 리그오브레전드, 마인크래프트, ... 등의 게임들은 싸인코드를 사용하지 않는다. 스타크래프트는 동기화가 끊어지면(즉, 클라이언트 변조 등이 일어나면) 게임을 무효화시키는 구조이고, 디아블로, 리그오브레전드, 마인크래프트 등의 게임은 모든 행동에 서버의 유효성 검사가 들어가기 때문에, 사실상 게임 해킹 툴이 아무런 의미가 없다. 그렇다면, 보안이 필요한 영역으로는 작업장 오토 정도가 남는다. 블리자드의 게임엔 작업장 오토 프로그램들이 쉽게 클라이언트를 변조하거나 따라만들 수 없도록 각종 클라이언트 코드, 리소스 의 위변조를 방지하는 서버사이드 기능들이 사용되고 있다. 즉, 자기 자신의 정보만 보호하면 되니, 사용자가 보안솔루션의 존재유무를 알 필요도 없고, 다른 프로그램과 하드디스크 검색을 위해 관리자 권한을 요구할 필요도 없다. 일반 사용자는 아무런 불편함이 없고, 해커만 힘들어진다.

국내의 이런 모순된 온라인게임 보안 솔루션의 산업적 요구를 만들어내는 1차적 원인은 게임 아키텍트 담당 핵심 서버 개발자에게 있다. 한 마디로, 개발사의 아키텍트가 싸지른 똥(설계상의 취약점)을 외주업체에게 맡기려다 보니, 온라인게임보안솔루션 산업에 수요가 생기는 것이다.

2차적 원인은 이런 수요를 통해 수익을 창출하려는 게임보안솔루션사에 있다.
이미 설계가 끝난 게임은, 워낙 방대한 소프트웨어여서 그 프로토콜을 뜯어고치는 것은 거의 불가능에 가깝다. 그리고, 소위말하는 핵유저 때문에 이러지도 저러지도 못 하는 진퇴양난의 상황에 있는 게임사들에게, 이들은 '사용자 컴퓨터의 루트킷과 같은 시스템 권한을 요구하는 말도안되는 프로그램'으로 게임사의 게임을 보호하도록 영업한다. 절대 "그거 설계 잘못이니까, 다음부턴 리그 오브 레전드처럼 설계하세요," 혹은 "검증된 보안 전문가를 고용하세요," 라고 말해주지 않는다. 대신, "우리랑 독점계약하면 좀 더 싸게 해드릴게요," 라고 말한다. 이미 게임보안솔루션사들도 자신들의 솔루션이 말도 안되는 모순에 걸쳐있다는 것을 안다. 하지만 돈이 되니, 드러내지 않고, 오히려 수익의 기회로 만드는 것이다. 이 과정에서 게임사와 사용자들이 우롱당한다.

이런 그림은 사실 국내 인터넷 뱅킹에 공인인증서와 수십가지 '보안 솔루션' 액티브X를 설치하게 만드는 은행과 보안솔루션사의 그림과 매우 흡사하다. "SSL쓰면 ActiveX 필요 없습니다." 라고 보안 솔루션이 필요 없다는 사실을 알려주면 돈을 떼먹을 수 없으니, 어떻게든 자사 솔루션을 과대포장해 도입을 유도하며, 은행은 "우리 보안솔루션 썼는데? 그래도 해킹당한거면 우리 책임은 아니죠."라는 법적인 목소리를 내기 위해 면피성 목적이 겹쳐 금융권 보안솔루션 사업이 성립되는 것이다.

싸인코드와 같은 종류인  게임가드, 핵쉴드와 비교해 보자. 게임가드는 2000년대 게임보안솔루션의 무법자 그 자체였다. 윈도우 XP는 드라이버 로드에 아무 제한이 없기에, 게임가드가 전용 드라이버를 올려 시스템을 완벽하게 장악한 뒤, 루트킷의 그것과 같은 기술로 게임프로그램에 영향을 줄 수도 있는 모든 요청을 차단한다. 다른 프로그램의 동작을 제한하고 어쩔 땐 오탐을 내더라도, 무조건 더 많이 감지하고 더 많이 막아냈다. 물론, 버그, 호환성문제, 심지어 해킹툴이 감지되면 일부러(해커들의 해킹 의욕을 꺽는다는 목적으로) 시도때도없이 블루스크린을 띄우는 악질적인 드라이버였다. 이런 깡패같은 짓을 유지한 기간은 길지 않았다.
윈도우7은 루트킷과 각종 악성코드로부터 운영체제를 보호하기위해 여러가지 시스템적 장치를 마련했다. 패치가드(드라이버 레벨 후킹 방어 시스템)와 서명된 드라이버만 로드를 허용하는 정책의 도입(루트킷 드라이버는 물론 게임가드같은 양아치 드라이버는 마이크로소프트가 서명을 절대 허용해주지 않아, 로딩이 불가능하다), UAC(관리자 권한) 시스템 도입이 그것이다. 게임가드는 한동안 MS가 드라이버를 서명해주지 않아 윈도우7 64비트 환경에서 사실상 무력화됐다. 그리고, 게임가드는 이 당시 잘못된 구조를 자각하고 각종 호환성 문제 등 사용자를 불편하게 할 수 있는 코드를 지우고, 블루스크린을 띄우는 짓은 절대 하지 않는다는 정책으로 들어섰다. 보안솔루션으로서 성숙한 것이다. 하지만, 완성도를 위해 필연적으로 포기해야했던 부분 - 해킹툴 탐지율때문에 사업성이 떨어져, 현재는 INCA사의 주력 매출상품이 아니다. 현재는 핵쉴드에 비해 나을 점이 거의 없다고 봐도 무방하다.
핵쉴드는, 시작할 때부터 성숙한 모양이었다. 국내 최고 백신 개발사이기 때문에, 바이러스분석팀 기술 수준의 리버싱을 할 줄 아는 인재들이 투입된 흔적이 보인다. 초기엔 탐지율도 낮고 무력화도 쉬웠으나, 호환성과 소프트웨어적 완성도에 특히 신경쓴 느낌을 지울 수 없다. 무력화에 대해서는 당시부터 지속적으로 강화를 거쳐, 엄청나게 무력화에 강한 구조를 가지게 됐다. 수치로 나타내보자면, 완전 무력화를 위해선 현업 바이러스분석팀에서 5년 구른 프로 리버서 기준으로 15에서 35일정도의 시간 소요가 예상된다(물론 재능에 따라 편차가 크다). 안정성과 오탐율 면에서, 단연 업계 1위 솔루션이라고 판단된다.
싸인코드는 초기 게임가드와 같은 모양새다. 백신사 수준의 리버서를 영입하지 못해, 기술적 수준은 형편없으며, 오탐율은 높고 서드파티와 호환성은 낮으며 개인사용자를 괴롭힌다. 개인적으로 유저들의 보안의식이 성숙해, 관리자 권한 요구 다이얼로그에 "아니오"를 누르기 시작하는 시점부터 양아치 짓을 그만두지 않을까, 하고 예상해본다.

3차적 원인은 무지한 사용자들에게 있다. 싸인코드 타도를 외치는 이들은 "개인정보 유출", "지속적인 디스크 스캔" 등을 말하고 있으나, 그건 중요한 문제가 아니다.
관리자 권한의 의미가 무엇이라고 생각하는가? UAC, 즉 관리자 권한 기능은 악성코드로부터 컴퓨터를 방어하는 일종의 필수이자 최종방어선 같은 매우 중요한 보안기능이다. 지속적인 윈도우업데이트와 신뢰할 수 없는 프로그램에 관리자 권한을 주지만 않으면, 컴퓨터는 이론 상 절대 감염되지 않는다.
드라이버 로드의 의미가 무엇이라고 생각하는가? 드라이버는 관리자 권한은 고사하고, 컴퓨터의 가장 높은 권한을 가지고 실행되는 프로그램이다. 이런 프로그램을 허락도 없이 시스템에 설치한다는 것은 말도 안 된다. 싸인코드 블로그는 "우리 드라이버는 게임이 종료되면 메모리에 상주되지 않으니까 아무 문제 없어요"라고 사용자들을 우롱하고 있으나,
드라이버의 의미는 그걸로 끝나는게 아니다. 내가 악성코드 제작자라면, 게임이 켜져있는 사이 로드돼있는 싸인코드의 드라이버 서비스에 통신을 요청해서, 혹은 싸인코드의 드라이버를 추출해내서, 유저권한으로 관리자권한을 얻는, 혹은 관리자권한에서 시스템권한을 얻는 취약점으로써 활용할 것이다. 내 의견으론 현재 싸인코드 드라이버는 요청자를 검증하지 않고 있어 사용자가 관리자 권한을 게임 프로그램에만 준 상황에서도, 악성코드가 이를 역으로 악용해 관리자 권한을 탈취하는 일이 충분히 가능해보인다. 싸인코드와 같은 준 루트킷 기능의 드라이버는, 그 존재 자체만으로도 시스템 보안의 큰 구멍이 된다. "가능하다면, 드라이버를 사용하지 않는다." 시스템 개발자들의 공통된 의견이다.
소프트웨어 제작자들에겐, "정보통신망 이용촉진 및 정보보호 등에 관한 법률"에 따라, 소프트웨어가 요구하는 시스템의 접근 권한, 소프트웨어의 용도 및 "삭제 방법", "특정한 개인을 알아볼 수 있는 부호·문자·음성·음향 및 영상 등의 정보(즉, 개인정보)"의 수집 항목, 이용 목적, 보유 기간을 고지해야 하는 의무가 있다. 글세, 난 아직까지 고지 받은 적이 없다.
"법률 검토"를 받았다고 주장하는데, 내가 법률 자문을 한다면, 소프트웨어가 "최종 사용자 소프트웨어 사용권 동의서(EULA)" 조차 가지고 있지 않고, 게임 소프트웨어의 EULA와 보안솔루션의 EULA의 개념을 혼용해 사용하도록 자문하진 않겠다.

결론?
그러니까, 무슨 디스크를 통째로 스캔해서 어디로 보낸다느니, 이런 이상한 선동하는애들 때문에 웰비아의 입장이 측은해진다는 말이다. 이런 선동당한 주장은 오히려 제대로 알고 하는 주장의 힘마저 잃게 한다. 제발 검증된 말만 가져다 쓰세요.
그리고, 관리자 권한 요구에 아니오를 누르는 개념찬 유저가 늘어나야, 웰비아같은 보안솔루션사들이 게임사에게 "드라이버를 사용하면 해킹툴을 더 잘 막을 수는 있으나, PC 보안에 구멍이 생겨 사용자의 반발이 매우 클 겁니다. 저희 소프트웨어는 드라이버를 사용하지 않습니다." 라고 말할 수 있게 된단 말이다. 알겠니?

이만 쓴다. 피곤하다.