[개발 인사이드] 부정행위 방지 커널 드라이버
이번 글에서는 기술적으로 복잡한 내용과 리그 오브 레전드뿐만이 아닌 다른 게임에도 적용되는 부정행위 방지 시스템을 다루는 점 참고 부탁드립니다. 새로운 부정행위 방지 시스템은 리그 오브 레전드에 도입되기 전 (프로젝트 A 같은) 다른 게임에 먼저 도입됩니다.
미국 연방 정부 지원금 미화 2천만 달러가 투입되고 약 8년에 걸쳐 진행된 공동연구에서 굴지의 과학자들은 부정행위의 첫 등장을 기원전 35억 년에서 서기 1985년 11월 20일 사이로 추정했습니다. 부정행위의 정확한 기원은 여전히 불확실하지만, 한 가지 현실은 널리 사실로 인정되고 있습니다. 부정행위는 계속된다는 사실이죠.
지난 20년간 기술의 발전에 따라 부정행위와 부정행위 방지 시스템의 대립은 게임 클라이언트 메모리의 통제권을 차지하려는 정직한 싸움에서 부정행위자의 운영체제나 심지어는 하드웨어까지 변형하는 수법이 동원되는 싸움으로 번졌습니다. 이러한 수법은 부정행위 방지 프로그램이 정상 데이터를 불러오지 못하게 하며, 프로그램이 유저 모드(user-mode)에서 실행되는 경우 이러한 현상은 더 심해집니다.
유저 모드란 무엇인가요?
유저 모드는 운영체제 내의 권한 수준을 나타내며 구체적으로는 소프트웨어가 실행될 수 있는 가장 제한적인 수준입니다. 우리가 사용하는 웹 브라우저나 WinRAR ‘정품’, 즐겨 하는 게임 등은 모두 유저 모드에서 실행됩니다. 유저 모드에서 실행되는 애플리케이션은 자신의 내부만 직접 볼 수 있으며 외부 프로세스의 메모리를 읽거나 쓰려면 보통 운영체제의 네이티브 API에 의존하게 됩니다. 비유를 통해 약간 덜 어렵게 설명해 드리자면, 우리가 (유저 모드에서는) 시킨 부대찌개(리그 오브 레전드)에 어떤 재료가 들어갔는지 알고 싶으면 주방(마이크로소프트 윈도우)에 물어봐야 한다는 의미죠.
누가 “내 핵은 링 0에서 감지되지 않지롱”이라고 말하면 위의 개념을 이야기하고 있는 것입니다.
물론 그 사람은 저 말을 하고 나서 바로 게임 이용 제한 제재를 받겠죠.
최근 몇 년 사이 부정행위 프로그램 개발자들은 자신이 만든 애플리케이션의 전체 또는 일부분을 커널 수준에서 실행하기 위해 취약점을 악용하거나 윈도우의 서명 검증을 훼손하기 시작했습니다. 여기서 문제는 커널 모드에서 실행되는 코드가 데이터를 불러오는 데 필요한 시스템 호출을 가로챈 뒤 감지하기 어려운 방식으로 결과를 변형해 결과가 정상인 것처럼 보일 수 있다는 점입니다. 심지어 직접 메모리 접근1을 활용하는 특수 하드웨어로 시스템의 메모리를 읽고 처리하는 수법도 존재합니다. 이를 완벽하게 해내면 유저 모드에서는 감지가 불가능2할 수도 있죠.
운영 체제를 손상하면서까지 게임을 플레이해야겠다는 발상은 도가 지나치다고 생각하시겠지만, 카이팅을 목적으로 봇넷(botnet, 악성 네트워크)의 일원이 되기를 전혀 서슴지 않는 부정행위자가 충격적일 정도로 많습니다. 현재 매우 많은 부정행위 프로그램이 부정행위 방지 프로그램보다 높은 권한 수준에서 실행됩니다. 다시 주방 비유로 설명해 드리자면, 주방장에게 부대찌개 재료가 유기농인지 물어봤는데 갑자기 수상한 사람이 나타나 자신이 답변할 수 있다고 하며 식당 운영진을 설득한 뒤 “그럼요, 어서 드세요”라고 하는 상황인 셈입니다.
1직접 메모리 접근은 말 그대로 하드웨어가 윈도우 API의 관여 없이 메모리에 직접 접근하는 기능입니다. 몇몇 오래된 부정행위 커뮤니티는 직접 메모리 접근을 활용해 메모리를 별도의 컴퓨터로 중계하고 사후 처리 과정을 거쳐 ESP(다른 플레이어의 움직임이나 위치 등의 정보)를 얻는 수법을 개발했습니다.
2그래서 저희는 이를 감지하는 기법을 개발한 장본인을 고용했습니다.
왜 이러한 정보를 알려주시는 건가요?
부정행위 방지 팀은 지금까지 유저 모드 수준에서만 활동이 가능했습니다. 그래서 사실상 부정행위자에게 매우 유리한 상황이었죠. 그래도 저희는 꼬박꼬박 들어오는 월급과 취침 시간이 정해져 있지 않다는 이점이 있었기 때문에 부정행위와의 싸움에서 두 팔 걷고 나설 필요까지는 없었습니다. 청소년을 상대로 점입가경의 애플리케이션 보안 전쟁을 계속 치르는 것도 나쁘지는 않지만, 게임이 늘어나는 상황(한국어 자막을 켜주세요)에서는 선형적인 시간과 수면 부족이라는 한계로 인해 다른 전략이 필요합니다.
따라서 라이엇에서 앞으로 출시하는 일부 게임에서는 커널 드라이버를 통해 부정행위를 방지할 예정입니다.
걱정이 밀려오는 느낌이 드는데요?
전혀 걱정할 필요가 없는 이유를 말씀드리도록 하겠습니다.
스트레스는 탈모로 이어질 수 있습니다. 저희는 플레이어 여러분의 머리가 따뜻하기를 바랍니다.
저희에게 전에 없던 감시 능력이 추가로 생기는 것은 아닙니다. 가문 대대로 내려오는 김치찌개 비밀 요리법이 궁금하면 유저 모드에서도 충분히 알아낸 뒤 요리 방송에 팔아넘길 수 있습니다. 업그레이드의 목적은 (데이터를 신뢰할 수 있도록) 시스템의 무결성을 확인하고 (실수를 조준 보정 프로그램 탓으로 돌리지 못하도록) 부정행위자가 게임을 함부로 변경하는 행위를 어렵게 하기 위함입니다.
커널 드라이버는 흔한 시스템입니다. 이지안티치트(EasyAntiCheat), 배틀아이(Battleye), 사인코드3(Xigncode3) 등 많은 AAA 게임의 부정행위 방지 시스템에는 이미 커널 드라이버가 도입되었습니다. “이거 한우 맞아요?”라고 물어봤을 때 정직한 답이 돌아올 거라는 확신을 가질 수 있도록 윈도우라는 주방에 라이엇 소속 부주방장을 고용하는 조치라고 생각하시면 됩니다.
시스템 도입 후에는 감지 불가능한 부정행위를 하기가 훨씬 어려워집니다. 새로운 시스템은 플레이어 여러분을 조준 보정 프로그램으로부터, 저희를 레딧으로부터, 부정행위자를 자신으로부터 보호해줍니다.
부정행위 방지는 온라인 멀티플레이어 게임에서 매우 중요한 부분이라고 생각하며, 게임을 플레이할 때 상대의 실력이 진짜인지 의심하지 않아도 되는 세상을 만들어 드리고 싶습니다. 부정행위라는 병에 대한 치료법은 없지만, 최상의 경쟁 경험을 선사해드리기 위해 계속 노력을 아끼지 않을 계획입니다.
오늘은 여기까지지만 알찬 내용이 가득한 [리그 오브 레전드에서 부정행위 없애기]의 후속편으로 무작위 총력전에서 사용되는 봇 프로그램에 대한 이야기와 함께 약 400만 초 후 다시 찾아뵙겠습니다.