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 보안에 구멍이 생겨 사용자의 반발이 매우 클 겁니다. 저희 소프트웨어는 드라이버를 사용하지 않습니다." 라고 말할 수 있게 된단 말이다. 알겠니?

이만 쓴다. 피곤하다.

댓글 14개:

  1. 다른 보안프로그램들은 전용 드라이버를 설치하지않나요??

    답글삭제
  2. 이 글을 읽고 개발자의 블로그에 들어가 해명글을 보니 달아야 할 글이 생겼습니다.

    (1)관리자 권한으로 서드 파티 보안 솔루션에 대한 실행을 허용해야 하는가?

    수 많은 게임을 해온 유저로서, 수 많은 게임들의 보안 이슈들을 접한 유저로서 한마디 해보자면, 이는 사실상 "전혀" 필요가 없는 기능들이다. 전혀 필요가 없는 기능이라기 보다 전혀 이해할 수 없다.

    스팀, 유비 소프트에서 발매되는 게임들을 보면, 그 게임들이 싱글 모드만 있는것이 아니라, 멀티모드도 존재한다.

    그런데 왜 게임가드, 핵쉴드, 사인코드들의 보안 솔루션을 사용하지 않느냐?

    결론적으로 말하자면 굳이 그렇게까지 관리자 권한을 줘가며, 드라이버를 사용하여 커널 영역에서부터 삽질할 필요가 없다.

    관리자 권한을 이용하지 않아도 충분히 대상 프로그램에 대한 "보호"가 가능한데, 게임가드, 핵쉴드, 사인코드 이러한 서드 파티 보안 솔루션은 컴퓨터에 존재하는 모든 파일, 프로세스, 행위를 전부 "잠재적 범죄자"로 취급하고 출발하는것에서부터 잘못되었다.

    현실세계에서 말하면 길에서 서있는데 지나가는 사람들을 보고 저들은 "잠재적 범죄자"이며 그 중 누군가 반드시 나를 때릴것이다, 그러므로 그러한 싹을 잘라버리도록 내가 미리... 이런식의 행위를 하고있다.

    (2)이러한 부류의 솔루션이 과연 올바른가?

    시스템의 "백신"도 아닌 보안 솔루션이라고해서 모든 확장자의 파일들을 검사하고 비교하고, 몇몇 정보를 "동의"없이 서버로 전송하는건 아무리 생각해도 아이러니한 일이다.

    그 어떤 유저도, 게임 회원가입을 할 때부터, 보안 솔루션과 관련된 내역을 안내받지도 못했을것이며, 그러한 정보를 제공한다는것 또한 알 수 없었을것이다.

    이는 개발자의 블로그에서 부제 "빈대 잡으려다 초가삼간 태우는게 아닌가?"

    태우는게 아닌가? 라고 질문을 할게 아니라 이미 태웠다.

    굳이 모든 데이터와 행위에 대한 자료들을 근거로 검색을 하여 "미리" 발견을 해야 하는가?

    백신은 이러한 행위를 해야 한다면 나는 동의할 수 있다.

    하지만 게임 보안 솔루션이 이러한 행위를 한다는것은 동의할 수 없다.

    굳이 시스템상의 "모든 권한"을 쥐어주며, "너 저 프로세스를 보호해라"가 아니라 "너 이 컴퓨터 전부를 검사해라"라는 식의 보안 솔루션은 개발자 본인이 말하는 "철학적"이든, 개발자에게 있어서 공통적인 "철학"이든 이게 올바른 방식의 "철학적" 설계인지 묻고싶다.

    위에서 잘 설명해놨듯이, Active X는 몇몇 업체들이 나랏돈을 가지고 장난치는 행위로 밖에 안보인다. 돈좀 쥐어주며 누이좋고 매부좋고 하는식으로 계약을 해가면서, 국민들의 세금을 등쳐먹는 행위, 그래놓고 우리는 우수한 보안업체입니다 이 지랄을 하는것들을 보면 정말 기가 찬다. 이러한 보안솔루션도 책임소재등을 통해, 솔직하게 말하자면 "동급"이다.

    대한민국 국민은 정말 나라 등쳐먹고 주변 사람 등쳐먹는건 일제시대때부터 알 수 있지만 이건 피속에 정말 타고난것 같다. 미국, 유럽국가들이 바보라서 빌어먹을 Active X를 도입안하고 SSL/TLS기술들을 이용해서 보호를 하고 있느냐고 묻고싶다.

    (3)책임전가

    이러한 부류들은 블로그 주인장이 설명해놨듯이 책임전가에 있어서 이러한 부분을 사용하는게 99.9%가 아닌 100%라고 말하고싶다.

    일반적으로 아무 보안 솔루션도 없이 그 회사의 정보가 털렸으면 그 회사 내부자들이 책임을 져야 한다. 그런데 외주를 주면 이야기가 달라진다.

    소위 말 그대로 "탓"을 할 수 있기 때문이다.

    우리는 아무 잘못없다. 우리는 저 보안 업체를 믿고 사용했기 때문에 우리 잘못이 아닌, 저 보안업체 잘못이다.

    이러한 양상은 결국 게임 커뮤니티에서도 찾아볼 수 있다. 엄청난 핵유저들이 개입하게 되면 선량한 유저들은 글을 적는데, 이러한 글의 대다수가 게임 회사를 탓하는게 아닌 보안 솔루션 회사들을 욕한다.

    결국 윈윈전략이다.

    (4)이러한 솔루션을 이용하지 않고 "프로세스"를 보호할 수는 없는가?

    있다. 없다고 말하면 다시 공부해라고 하고싶다.

    충분히, 보호하고도 남을정도로 많다.

    국내 게임, 해외 게임을 여러가지 해보면 딱 안다. "대한민국"의 "IT"업계의 수준이 어느정도인지.

    정말 차이가 확연하게 드러난다.

    이것도 저것도 아닌 어정쩡하게 배워서 갔다붙인게 티가 바로난다. 게임에서 그 기술력이 바로 확연히 드러난다.

    똑같은 엔진을 써서 개발해도 차이가 나는것은, 회사의 내부 구조, 방침, 그리고 개발자들의 "역량"에 있어서 그러한 차이가 나는것으로 보인다.



    지금 XIGNCODE의 개발자는 유저들이 왜 이러한 양상을 보이는지 이해를 전혀 못하고있다.

    아니 왜? 라는 식의 질문으로 왜? 이 보안 솔루션이 문제가 되는건지?라고 다시 묻고있는 꼴이다.

    그냥 조용하게 게임만하면되지 왜 딴지를 걸어? 이런식의 질문을 하고있는데 뭐가 문제인지 전혀 파악을 못한것 같다.

    뒤늦게 깨달았을 때는, 처음부터 "제대로 된" 보안 솔루션을 설계하려면 애먹을거라고 본다.

    답글삭제
  3. 작성자가 댓글을 삭제했습니다.

    답글삭제
  4. 글 잘 읽고 갑니다 :)
    간만에 이런 저런 생각을 하게 만들어주는 글이네요~

    답글삭제
  5. 동접관련 자료 찾다가...

    잘 읽고 갑니다.

    답글삭제
  6. 작성자가 댓글을 삭제했습니다.

    답글삭제
  7. 작성자가 댓글을 삭제했습니다.

    답글삭제
  8. 작성자가 댓글을 삭제했습니다.

    답글삭제
    답글
    1. 더미다 등 프로텍터류를 상대할 땐 읽기 쉽도록 가공해주는 스크립트나 프로그램을 개발하는게 편하니까 참고하고..
      사인코드 드라이버는 커널 레벨 권한으로 커널레벨 API를 사용할 수 있게 해주는 기능을 가지고 있어서, 권한상승이 가능할 수밖에 없다. 호출자 검증하는 코드는 발견하지 못 했고.
      중대한 문제맞지. 근데 아무도 뜯어보고 클레임 넣지 않으니 실제 사인코드 드라이버로 상위 권한을 취득하는 악성코드가 나와서 공론화되지 않는 한 평생 고쳐질 리가 없다.

      삭제
  9. 헐 너 싸 뚫?
    ㅇ 요 이 유행
    헐 오 저 봐 저 놈 싸 뚫
    근? 빨 가

    답글삭제
  10. 사인코드 로그파일인 xigncode.log 생성을 막아봤는데 정상적으로 실행되네요..
    생성 금지 시키면 오류 나면서 게임 실행이 안될줄 알았는데...
    혹시 전송용 로그 파일을 메모리 같은 다른 곳의 따로 생성하는지 궁금합니다.

    답글삭제
  11. 저기 PE File format 공부중인데 너무 지루하고 어려워요ㅜㅜ 좋은 팁같은거 없나요? 그냥 버티면 되나요??

    답글삭제
  12. 작성자가 댓글을 삭제했습니다.

    답글삭제
  13. 늦게 IT 입문하여 개발, 보안 공부중입니다. 공부를 하면 할수록 세상엔 괴물이 많다는게 느껴지네요... 글 잘보고 갑니다. 감사합니다.

    답글삭제