SlideShare a Scribd company logo
1 of 40
Download to read offline
사설 게임 서버를 막기 위한 방법들
(Private Game Server, 더 이상은 Naver!)
NHN NEXT
구승모
발표자 소개
* 2005년 WOW가 인생을 바꿔놓음
* WOW 오리지널 풀파밍
* 전투사령관 캐릭터 둘
그 이외 게임 업계 활동
* China GDC 2010 발표: “How to Support an Action-Heavy MMORPG from Angle of Server Architecture”
* Game Developer Magazine 2012. 5월호 특집 게재: “Evolving MMORPG Combat”
* 2006~ Server Programmer, L3, NCSOFT
* 2007~ Gameplay Programmer, Server Architect, TERA, Bluehole
* 2012~ Professor, Game Track, NHN NEXT
강연 개요
Agenda
• 사설 서버란?
– 사설 서버의 영향
– 사설 서버가 생기는 경로
• 사설 서버 방지를 위한 노력과 방법
– 직접 탈취로부터
– 서버 에뮬레이터 제작으로부터
강연 범위
• 강연 대상
– 온라인 게임 프로그래머 (서버, 플랫폼)
– 게임 서버 보안에 관심 있는 사람 (프로듀싱, 서비스)
• 다루지 않는 것
– 전반적인 서버 보안 방법 (DDOS, SQL Injection, …)
– Reverse engineering 방지 관련 테크닉
 사설 게임 서버에 특화된 내용을 다룸
사설 서버 이야기
사설 게임 서버란?
• 게임 서버를 ‘탈취’하거나 ‘제작’하여 (원작자 동의 없이) 서비스
– Private server, Gray shard, Free server, Server emulator [1], …
– 대부분의 경우 영리를 목적으로 함
• 주로 2가지 방법으로 생김
– 해커들이 직접 탈취한 것을 기반으로
• (예) AEGIS (Ragnarok Online) [2]
– 서버 에뮬레이터 제작을 통하여
• 실제 정식 서버를 흉내(모방) 내도록 제작
• (예) WOW MaNGOS [3]
사설 서버의 악영향
• 직접적으로는 Profit-share 감소
• 간접적으로는 (더 무서운 것)
– 게임 자체에 대한 신뢰 하락
– 유저들이 존중(respect)받지 못한다는 느낌
• Nexon, Blizzard, Ncsoft의 사설 서버에 대한 소송 예
– 북미 1등(?) 메이플스토리 사설 서버인 OdinMS [4]
– WOW 부분유료화 형태의 사설 서버인 Scapegaming [5]
– 5만 사용자를 거느린 리니지2 사설 서버인 L2Extreme [6]
왜 사설 서버를?
• 돈을 벌기 위해
– 꽤 많은 인력들이 사설 서버 구축을 위해 노력
– 생각보다 많은 사람들이 플레이 함  꽤 짭잘(?)
– CIS 관련 국가 및 중국 내륙
• (예) 한 때, 러시아 시장 1위는 리니지2 사설 서버 [7]
• 교육적인(?) 목적
– 서버 에뮬레이터 제작의 경우, 해커들의 도전 의식 자극 + 재미
– “게임 서버 프로그래밍 공부하기 정말 좋다”는 함정
직접 적인 유출(leak)로부터 사설 서버가 생기는 경우
• 개발사에서 직접 유출되는 경우
– 대부분의 경우 트로이 목마를 통한 유출
• 개발실 소스코드 유출 괴담: “출근 해보니 전부 체크아웃 되어 있더라?”
• (예) 밸브의 하프라이프2 소스코드 유출 [8]
• 우리 나라의 몇몇 회사들도 이렇게 털린 경우가 많음 (카더라 통신)
• 퍼블리셔측에서 유출되는 경우
– 서비스 네트워크 또는 배포선에서의 탈취
• (예) 뮤 온라인의 해외 유출 [9]
– IDC 근무자에 의한 인위적인 서버 바이너리 탈취
서버 에뮬레이터 제작을 통하여 생기는 경우
• 해커들은 미리 서버 에뮬레이터 제작을 준비
– 폐쇄형 커뮤니티(private IRC, phpBB 등)를 통해 정보 공유 및 수집
• 패킷 구조, 클라이언트 보안 메커니즘 등
– CBT와 동시에 클라이언트 입수 후, 해당기간 중 다양한 실험 및 공유
• 서버 프로그래머: “어?! 이상하다. 이런 패킷이 올 수가 없는데?”
• Non-Client Bot과 같이 만들어 짐
– 서버 에뮬레이터와 비슷한 시기에 (약간 먼저) 등장
• Non-client bot이 있다는 말은? 어딘가에서 서버 에뮬레이터가…
• 사실상 한 뿌리: 서버를 흉내 내느냐 클라를 흉내 내느냐의 차이
오늘의 진짜 주제와 결론
• 100% 막는 방법은 없습니다
– (작정한) 인원에 대한 보안은 정말 어렵기 때문
– 클라이언트는 이미 적의 수중에 있기 때문
• 그래서, 이미 버린 몸(?)이니 포기?
– 어차피 털릴텐데 아무것도 안하기?
• 그렇지만, 노력대비(?) 효과를 볼 수 있는 방법들은 있음
– 오늘의 핵심 주제
사설 서버 방지를 위한 방법들 1
(직접 탈취를 막기 위한 노력)
개발사에서의 직접 유출
• 트로이 목마(Trojan Horse)를 통한 유출이 대부분
– 개발 관련툴 크랙 버전에 심어서 토렌트 등으로 배포
• (예) V-Asst, I-Bld, A-CS, …
– 개발자의 컴퓨터에서 실행되는 순간
• 백도어 생성후 해커에게 리포팅
• 리포팅 받은 해커는 바로 털어가지 않고, 지속적으로 감시 및 백도어 강화
• Windows Domain Admin 권한을 갖는 컴퓨터에 설치되는 순간 게임 오버
– 계속 지켜보다가 (어느 정도 완성되면) 순식간에 털어감
HOW-TO
• 정품 개발 툴만 사용
– 검증되지 않은 프로그램 사용 금지
• 최신 소프트웨어로 업데이트
– 특히 OS의 경우, 구 버전의 취약점을 공략
• 보안에 자신 없으면
– 개발망을 인터넷으로부터 물리적으로 분리 (가장 확실)
• Source repository, Issue tracking system 등
인원 보안 문제
• 그럼에도 불구하고, 내부 사람에 의해 털릴 수 있음
– 가장 무서운 적은 내부의 적
– 퇴사시 별 생각 없이 습관적으로 가져가는 경우도 있음
• 악의적인 의도가 아닌 경우: (열정이 넘쳐?) 집에 가져와서 일하는 경우
• HOW-TO
– 개발망 분리 후, 비인가 저장장치 사용 금지
– 회사에서의 작업물에 대한 교육(개념 주입) 필요
– 개발자들에게 잘해줘서 회사 떠나지 않게 하는 것 (가장 확실)
• 개발자 괴롭히면? 복수심에 싹 다 들고 제 3국가 가서 서비스 할 수도.. (농담)
퍼블리셔측에서의 유출
• 배포선(release process) 또는 IDC에서 유출되는 경우
– 내부 인원에 의한 유출
• 운영 인원의 권한 최소화 및 2-way 인증 필요 (뻔한 이야기)
– 직접 해킹 당하는 경우
• 해킹 방어는 광범위한 영역 (본 강연 주제를 벗어남)
– 100% 유출 막는 것은 불가
• 서버 바이너리의 유출 여부를 아는 것이 중요
– 어떤 버전이 어디를 통해 유출 되었는지 아는 것이 필요
– 탈취된 서버가 정상적으로 동작하지 않도록 하는 장치 도입
HOW-TO: 기본적으로 해야 할 것
• 인가된 채널로만 배포
– 급한 patch라고 메일 등으로 전송 금지
• 서버 프로그램 유효 기간 설정 (Time-bomb)
– (예) 현재 실행 시각이 빌드 시점(__DATE__)로 부터 얼마 지났는지 체크
• Binary Fingerprint
– 인증된 머신 정보를 서버 바이너리에 삽입
• (예) .data 영역을 확보 해놓고, 배포시에 인가된 머신 MAC주소로 교체
– 서버 실행시 해당 영역 정보와 머신 정보 비교
HOW-TO: 서버 실행 여부를 통지 받기
• 서버 시작시 80번 포트로 서버 정보 보내기
– 버전, 인가된 머신 번호, 퍼블리셔 코드 등을 암호화해서 전송
– Outbound 80번 포트(http)를 막는 경우는 거의 없음
– 리포팅은 제 3지대(Amazon EC, GAP 등) 서버에서 받기
• 리포팅 받은 것을 주기적으로 모아서 메일로 통보 받으면 편함
{NX_KOR, VER, IP, MAC, …}
via HTTP/80
Reporting
e-mail
이것저것 다 귀찮은 경우…
• 돈(?)으로 해결 할 수 있음
• 하드웨어 보안 모듈이 설치된 서버에 배포
– TPM[10]을 통한 디스크 암호화 등
• 라이선스 서버 솔루션 사용
– 인터넷을 통한 실시간 인증을 받아야 서버 실행이 가능
사설 서버 방지를 위한 방법들 2
(서버 에뮬레이터 제작을 방해하기 위한 노력)
서버 에뮬레이터의 경우
• 처음부터 보안에 신경을 써야 함
– 해커들은 최초의 외부 테스트(FGT, CBT)부터 클라이언트 분석
– 오픈 전에 서버 sandbox가 등장하는지 여부를 결정
• Sandbox?
– 월드 접속 및 이동만 되는 일종의 더미 서버로 해커들의 첫 번째 목표
– 서버-클라이언트간 핵심 동작 메커니즘이 분석 당했음을 의미
• 두 측면에서 공략
– 패킷 분석 및 클라이언트 역공학(reverse-engineering)
클라이언트 역공학
• 동작 메커니즘 분석
– DLL injection등을 통해서 send/recv API 부분을 hooking
– 서버-클라이언트간 어떤 데이터를 어떻게 주고 받는지 파악
• 시간과 노력이 많이 들지만 암호화 관련 로직 우회 가능
• 게임 데이터 추출
– 아트 리소스 뿐만 아니라 게임에 필요한 각종 데이터시트 정보들
• (예) 스킬 공격력, 아이템 스탯 테이블 등
HOW-TO: Anti-Reverse Engineering
• 광범위한 주제
– 기초적인 것만 해도 해야 할 것이 많음 [11]
• 해커들의 속도를 따라잡기 힘든 부분
– 개발자가 일일이 적용하는 것은 비용대비 효과 측면에서 비추
• 클라이언트 바이너리 난독화 전문 툴 사용을 추천
– Themida (WinLicense) [12] 등 (의외로 싸다)
– 지속적으로 최신의 반-역공학 방법들이 업데이트 됨
HOW-TO: 꼭 필요한 데이터만 패키징
• 클라이언트에서 꼭 필요한 (client-only) 데이터만 넣기
– 의외로 서버에서만 필요한 데이터도 같이 넣는 경우가 많음
• (주로 귀차니즘 때문에) 통합 데이터시트로 하는 경우
– 배포 툴에서 패키징 자동화하는 것을 추천
• 데이터 항목에 서버/클라/공용 태그 넣기
• [참고] 서버 에뮬레이터 제작시 가장 더럽고(?) 귀찮은 부분
– 실 서버와 같은 데이터 값(밸런싱 정보 등)을 수집하여 입력하는 것
– 클라이언트에 해당 정보가 있다면, 손쉽게 추출해서 사용하게 됨
• (예) W모 게임의 경우, dbc파일 추출 후 그대로 읽어서 사용
패킷 분석
• 서버-클라이언트간 패킷 수집(capture)
– 어떤 내용이 오가는지 알면, 서버/클라이언트 모두 흉내낼 수 있기 때문
– 암호화 하지 않는 경우 클라이언트 역공학을 시도할 필요도 없음
• 패킷 암호화
– 아무리 잘해도 언젠가는 파악당함 (클라이언트 역공학)
• 개발자가 덜 귀찮도록 하는 방식으로 관리하는 것이 핵심
• 패킷 내용들이 파악되어도 조금만 수정하면 시간을 또 벌 수 있도록
– 패킷 수집(감청)으로부터 최소한 유저들의 정보를 보호하기 위함
• Raw data 그대로 수집되면 위험한 것들 (ID, PIN, 메일주소, 채팅내용 등)
HOW-TO: 패킷 암호화시 주의할 점
• 직접 설계하거나 구현하지 말 것
– 이미 검증되고 리뷰 많이 받은 잘 만들어진 코드를 사용 [13]
• (예) AES256, RC4, …
• 아무리 독창적인(?) 암호화 알고리즘을 만들더라도 파악됨
• 결국, key를 잘 관리하는 것이 핵심
• 절대로 key를 클라이언트에 박지(?) 말 것
– 사실상 암호화 하지 않는 것과 같음
– Key는 세션을 맺을 때마다 무조건 새로 생성해서 교환해야 함
HOW-TO: 암호화 통신을 위한 Key 교환
• Diffie-Hellman Key Exchange [14]
– 세션 성립시마다 새로운 키로 암호화하기 위함
– 각종 공격(예: MITM)에 안전한 구현체를 사용할 것 (예: SRP)
ClientServer
소수 p, g
a b
crypto-key
ClientServer
감청 당해도
crypto-key
파악 불가
Transport
K = B^a mod pB = g^b mod p
a b
B A
A = g^a mod p K = A^b mod p
Secure Remote Password Protocol
• SRP [15]
– 스탠포드 대학에서 제작 (현재 버전은 SRP-6a)
– 인증 + 키 교환 + 패스워드 암호화를 한방에 해결!
– 인증에 사용되는 비밀 정보가 일부 털려도 안전
– 사전 공격 및 MITM 공격 등으로부터 안전
– 공인 인증 기관 (CA) 필요 없음
HOW-TO: 패킷 암호화시 주의할 점
• 패킷 전체를 스트림 방식으로 암호화
– (예) W모 게임처럼 패킷헤더만 암호화 하는 경우  raw data 노출됨
HOW-TO: 패킷 셔플링
• 패킷 번호 및 패킷 내용 순서 무작위 치환 (shuffle)
– 패치 때마다 패킷이 바뀌는 효과  해커들 입장에서는 상당히 귀찮음
– SVN revision 번호 또는 GIT tag hash를 key로 활용 가능
– 배포시 자동화 추천: pre-build event로 패킷 코드 생성(emit)할 때
이런 노력에도 불구하고,
• 서버 에뮬레이터 제작을 100% 막기는 불가
– 어차피 클라이언트는 언젠가는 완전히(?) 분석 당함
– 어딘가에서 서버 에뮬레이터가 만들어지고 있는지 아는 것이 중요
• FACT
– 서버 에뮬레이터도 결국 (인터넷상의) 일반인 대상으로 서비스
• HTTP 포트(80)를 일부러 닫고 사용하는 유저는 없다는 점을 이용
– 클라이언트는 정식 배포본을 사용한다는 점을 이용
• 플레이어의 클라이언트가 어느 서버에 접속하는지를 직접 리포팅
• 대상 서버 IP가 127.0.0.1, 192.168.x.x 이런 종류라면 제작 중이라는 뜻
접속 대상 서버 정보를 통지 받기
map-reduce & whois
사설 서버
사설 서버 유저
(클라이언트)
Random sampling report via HTTP
클라이언트가 특정 확률로 서버 정보 리포팅
정식 서버 정보는
걸러내고 리포팅
정리
마무리
• 100% 방지법은 없음
– 최소한의 노력은 하자: 언급한 방법들이 난이도 높은 일이 아님
– 어차피 털린다고 손 놓은 것과는 차이가 큼 (방충망이 유무의 차이)
• 관리의 측면으로 접근
– 지속적으로 모니터링 및 수정(자동화)을 통해서 시간을 벌기
– 내가 보안에 쓰는 노력보다 해커가 뚫는 노력이 더 큰 것 위주로 적용
• 숨기는 것 보다 찾는 것이 더 어려운 이치
• 실제로 상당히 효과적이었음
감사합니다.
Any Questions?
References
1. http://en.wikipedia.org/wiki/Server_emulator
2. http://en.wikipedia.org/wiki/AEGIS_(Ragnarok_Online)
3. https://github.com/mangos/MaNGOS
4. http://maplenewsnetwork.wordpress.com/2008/06/18/odinms-vs-nexon/
5. http://www.gamerlaw.co.uk/2010/blizzard-wins-88m-lawsuit-against-wow-private-server-owner/
6. http://www.gamasutra.com/php-bin/news_index.php?story=11786
7. http://www.thisisgame.com/special/page/event/ion/2008/nboard/79/?n=8335
8. http://www.gamespot.com/articles/half-life-2-source-leaked/1100-6076314/
9. http://m.inven.co.kr/webzine/wznews.php?idx=14253
10. http://en.wikipedia.org/wiki/Trusted_Platform_Module
11. http://www.codeproject.com/Articles/30815/An-Anti-Reverse-Engineering-Guide
12. http://www.oreans.com/themida.php
13. http://security.stackexchange.com/questions/2202/lessons-learned-and-misconceptions-regarding-
encryption-and-cryptology
14. http://en.wikipedia.org/wiki/Diffie%E2%80%93Hellman_key_exchange
15. http://en.wikipedia.org/wiki/Secure_Remote_Password_protocol
뒷이야기
• 수년간 지켜본 입장에서의 개인적인(?) 느낌
• 서버 에뮬레이터 구현 능력
– 프로그래밍 실력?
– 러시아 친구들(잉여력까지 느껴짐) >> 중국 해커들 > 미국 해커들
• 실제 게임(실서버)의 흥망성쇠(?)와 상관 관계 있음
– 서버 에뮬 개발이 활발해지고 있는 추세 ∝ 실서버 사용자 수
– 개발이 중단되거나 관련 커뮤니티가 완전 죽은 경우
• 실서버 사용자 급감 상황
서버 에뮬레이터 제작 커뮤니티
• 서버 에뮬레이터는 다양한 버전이 존재
– Sandbox 이후로 다양한 버전
– 수익금 기부(donation) 문제 등으로 커뮤니티 분열이 잦음
• 누군가 (몰래) 서비스, 핵심 멤버 탈퇴, 원 제작자로부터의 추적 등
– 누군가 기존 작업물을 가져다가(stealing) 새로운 프로젝트로 포장
• 비슷한 이유로 또 분열  반복

More Related Content

What's hot

임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013
devCAT Studio, NEXON
 
테라로 살펴본 MMORPG의 논타겟팅 시스템
테라로 살펴본 MMORPG의 논타겟팅 시스템테라로 살펴본 MMORPG의 논타겟팅 시스템
테라로 살펴본 MMORPG의 논타겟팅 시스템
QooJuice
 
[NDC07] 게임 개발에서의 클라이언트 보안 - 송창규
[NDC07] 게임 개발에서의 클라이언트 보안 - 송창규[NDC07] 게임 개발에서의 클라이언트 보안 - 송창규
[NDC07] 게임 개발에서의 클라이언트 보안 - 송창규
ChangKyu Song
 
임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012
devCAT Studio, NEXON
 
김동건, 할머니가 들려주신 마비노기 개발 전설, NDC2019
김동건, 할머니가 들려주신 마비노기 개발 전설, NDC2019김동건, 할머니가 들려주신 마비노기 개발 전설, NDC2019
김동건, 할머니가 들려주신 마비노기 개발 전설, NDC2019
devCAT Studio, NEXON
 
온라인 게임 처음부터 끝까지 동적언어로 만들기
온라인 게임 처음부터 끝까지 동적언어로 만들기온라인 게임 처음부터 끝까지 동적언어로 만들기
온라인 게임 처음부터 끝까지 동적언어로 만들기
Seungjae Lee
 
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
devCAT Studio, NEXON
 

What's hot (20)

임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013
 
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
 
테라로 살펴본 MMORPG의 논타겟팅 시스템
테라로 살펴본 MMORPG의 논타겟팅 시스템테라로 살펴본 MMORPG의 논타겟팅 시스템
테라로 살펴본 MMORPG의 논타겟팅 시스템
 
실시간 게임 서버 최적화 전략
실시간 게임 서버 최적화 전략실시간 게임 서버 최적화 전략
실시간 게임 서버 최적화 전략
 
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)
 
[NDC07] 게임 개발에서의 클라이언트 보안 - 송창규
[NDC07] 게임 개발에서의 클라이언트 보안 - 송창규[NDC07] 게임 개발에서의 클라이언트 보안 - 송창규
[NDC07] 게임 개발에서의 클라이언트 보안 - 송창규
 
Next-generation MMORPG service architecture
Next-generation MMORPG service architectureNext-generation MMORPG service architecture
Next-generation MMORPG service architecture
 
중앙 서버 없는 게임 로직
중앙 서버 없는 게임 로직중앙 서버 없는 게임 로직
중앙 서버 없는 게임 로직
 
라이브 서비스를 위한 게임 서버 구성
라이브 서비스를 위한 게임 서버 구성라이브 서비스를 위한 게임 서버 구성
라이브 서비스를 위한 게임 서버 구성
 
게임 디자이너와 게임 서버
게임 디자이너와 게임 서버게임 디자이너와 게임 서버
게임 디자이너와 게임 서버
 
임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012
 
게임 분산 서버 구조
게임 분산 서버 구조게임 분산 서버 구조
게임 분산 서버 구조
 
게임서버프로그래밍 #0 - TCP 및 이벤트 통지모델
게임서버프로그래밍 #0 - TCP 및 이벤트 통지모델게임서버프로그래밍 #0 - TCP 및 이벤트 통지모델
게임서버프로그래밍 #0 - TCP 및 이벤트 통지모델
 
Windows Registered I/O (RIO) vs IOCP
Windows Registered I/O (RIO) vs IOCPWindows Registered I/O (RIO) vs IOCP
Windows Registered I/O (RIO) vs IOCP
 
[IGC 2017] 펄어비스 민경인 - Mmorpg를 위한 voxel 기반 네비게이션 라이브러리 개발기
[IGC 2017] 펄어비스 민경인 - Mmorpg를 위한 voxel 기반 네비게이션 라이브러리 개발기[IGC 2017] 펄어비스 민경인 - Mmorpg를 위한 voxel 기반 네비게이션 라이브러리 개발기
[IGC 2017] 펄어비스 민경인 - Mmorpg를 위한 voxel 기반 네비게이션 라이브러리 개발기
 
김동건, 할머니가 들려주신 마비노기 개발 전설, NDC2019
김동건, 할머니가 들려주신 마비노기 개발 전설, NDC2019김동건, 할머니가 들려주신 마비노기 개발 전설, NDC2019
김동건, 할머니가 들려주신 마비노기 개발 전설, NDC2019
 
게임서버프로그래밍 #1 - IOCP
게임서버프로그래밍 #1 - IOCP게임서버프로그래밍 #1 - IOCP
게임서버프로그래밍 #1 - IOCP
 
온라인 게임 처음부터 끝까지 동적언어로 만들기
온라인 게임 처음부터 끝까지 동적언어로 만들기온라인 게임 처음부터 끝까지 동적언어로 만들기
온라인 게임 처음부터 끝까지 동적언어로 만들기
 
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
 
스마트폰 온라인 게임에서 고려해야 할 것들
스마트폰 온라인 게임에서 고려해야 할 것들스마트폰 온라인 게임에서 고려해야 할 것들
스마트폰 온라인 게임에서 고려해야 할 것들
 

Viewers also liked

ASP.NET과 C#으로 개발하는 대규모 소셜 게임
ASP.NET과 C#으로 개발하는 대규모 소셜 게임ASP.NET과 C#으로 개발하는 대규모 소셜 게임
ASP.NET과 C#으로 개발하는 대규모 소셜 게임
흥배 최
 
MongoDB 모바일 게임 개발에 사용
MongoDB 모바일 게임 개발에 사용MongoDB 모바일 게임 개발에 사용
MongoDB 모바일 게임 개발에 사용
흥배 최
 

Viewers also liked (20)

게임서버프로그래밍 #7 - 패킷핸들링 및 암호화
게임서버프로그래밍 #7 - 패킷핸들링 및 암호화게임서버프로그래밍 #7 - 패킷핸들링 및 암호화
게임서버프로그래밍 #7 - 패킷핸들링 및 암호화
 
게임서버프로그래밍 #6 - 예외처리 및 로깅
게임서버프로그래밍 #6 - 예외처리 및 로깅게임서버프로그래밍 #6 - 예외처리 및 로깅
게임서버프로그래밍 #6 - 예외처리 및 로깅
 
게임서버프로그래밍 #2 - IOCP Adv
게임서버프로그래밍 #2 - IOCP Adv게임서버프로그래밍 #2 - IOCP Adv
게임서버프로그래밍 #2 - IOCP Adv
 
게임서버프로그래밍 #4 - 멀티스레드 프로그래밍
게임서버프로그래밍 #4 - 멀티스레드 프로그래밍게임서버프로그래밍 #4 - 멀티스레드 프로그래밍
게임서버프로그래밍 #4 - 멀티스레드 프로그래밍
 
게임서버프로그래밍 #5 - 데이터베이스 핸들링
게임서버프로그래밍 #5 - 데이터베이스 핸들링게임서버프로그래밍 #5 - 데이터베이스 핸들링
게임서버프로그래밍 #5 - 데이터베이스 핸들링
 
Mongodb2.2와 2.4의 신 기능 소개
Mongodb2.2와 2.4의 신 기능 소개Mongodb2.2와 2.4의 신 기능 소개
Mongodb2.2와 2.4의 신 기능 소개
 
NLog 소개
NLog 소개NLog 소개
NLog 소개
 
Go web framework 비교[번역 정리]
Go web framework 비교[번역 정리]Go web framework 비교[번역 정리]
Go web framework 비교[번역 정리]
 
ASP.NET과 C#으로 개발하는 대규모 소셜 게임
ASP.NET과 C#으로 개발하는 대규모 소셜 게임ASP.NET과 C#으로 개발하는 대규모 소셜 게임
ASP.NET과 C#으로 개발하는 대규모 소셜 게임
 
NHN NEXT 2014년도 게임트랙 소개
NHN NEXT 2014년도 게임트랙 소개 NHN NEXT 2014년도 게임트랙 소개
NHN NEXT 2014년도 게임트랙 소개
 
Windows IOCP vs Linux EPOLL Performance Comparison
Windows IOCP vs Linux EPOLL Performance ComparisonWindows IOCP vs Linux EPOLL Performance Comparison
Windows IOCP vs Linux EPOLL Performance Comparison
 
MongoDB 모바일 게임 개발에 사용
MongoDB 모바일 게임 개발에 사용MongoDB 모바일 게임 개발에 사용
MongoDB 모바일 게임 개발에 사용
 
게임제작개론 : #0 과목소개
게임제작개론 : #0 과목소개게임제작개론 : #0 과목소개
게임제작개론 : #0 과목소개
 
Twitter의 snowflake 소개 및 활용
Twitter의 snowflake 소개 및 활용Twitter의 snowflake 소개 및 활용
Twitter의 snowflake 소개 및 활용
 
NHN NEXT 게임 전공 소개
NHN NEXT 게임 전공 소개NHN NEXT 게임 전공 소개
NHN NEXT 게임 전공 소개
 
게임서버프로그래밍 #3 - 메모리 및 오브젝트 풀링
게임서버프로그래밍 #3 - 메모리 및 오브젝트 풀링게임서버프로그래밍 #3 - 메모리 및 오브젝트 풀링
게임서버프로그래밍 #3 - 메모리 및 오브젝트 풀링
 
소셜게임 서버 개발 관점에서 본 Node.js의 장단점과 대안
소셜게임 서버 개발 관점에서 본 Node.js의 장단점과 대안소셜게임 서버 개발 관점에서 본 Node.js의 장단점과 대안
소셜게임 서버 개발 관점에서 본 Node.js의 장단점과 대안
 
혼자서 만드는 MMO게임 서버
혼자서 만드는 MMO게임 서버혼자서 만드는 MMO게임 서버
혼자서 만드는 MMO게임 서버
 
Game Developer Magazine, May 2012, Supplemental Info
Game Developer Magazine, May 2012, Supplemental InfoGame Developer Magazine, May 2012, Supplemental Info
Game Developer Magazine, May 2012, Supplemental Info
 
게임제작개론: #3 간접통제와 게임 커뮤니티
게임제작개론: #3 간접통제와 게임 커뮤니티게임제작개론: #3 간접통제와 게임 커뮤니티
게임제작개론: #3 간접통제와 게임 커뮤니티
 

Similar to 사설 서버를 막는 방법들 (프리섭, 더이상은 Naver)

임베디드시스템개발 Part2
임베디드시스템개발 Part2임베디드시스템개발 Part2
임베디드시스템개발 Part2
Minsuk Lee
 

Similar to 사설 서버를 막는 방법들 (프리섭, 더이상은 Naver) (20)

오픈스택: 구석구석 파헤쳐보기
오픈스택: 구석구석 파헤쳐보기오픈스택: 구석구석 파헤쳐보기
오픈스택: 구석구석 파헤쳐보기
 
[IGC 2017] 아마존 구승모 - 게임 엔진으로 서버 제작 및 운영까지
[IGC 2017] 아마존 구승모 - 게임 엔진으로 서버 제작 및 운영까지[IGC 2017] 아마존 구승모 - 게임 엔진으로 서버 제작 및 운영까지
[IGC 2017] 아마존 구승모 - 게임 엔진으로 서버 제작 및 운영까지
 
[아이펀팩토리] 클라이언트 개발자, 서버 개발 시작하기
[아이펀팩토리] 클라이언트 개발자, 서버 개발 시작하기 [아이펀팩토리] 클라이언트 개발자, 서버 개발 시작하기
[아이펀팩토리] 클라이언트 개발자, 서버 개발 시작하기
 
Gametech 2014: 모바일 게임용 PaaS/BaaS 구현 사례와 디자인 트레이드오프
Gametech 2014: 모바일 게임용 PaaS/BaaS 구현 사례와 디자인 트레이드오프Gametech 2014: 모바일 게임용 PaaS/BaaS 구현 사례와 디자인 트레이드오프
Gametech 2014: 모바일 게임용 PaaS/BaaS 구현 사례와 디자인 트레이드오프
 
NDC14 모바일 게임서비스를 위한 사설 클라우드 구축/운영 분투기
NDC14 모바일 게임서비스를 위한 사설 클라우드 구축/운영 분투기NDC14 모바일 게임서비스를 위한 사설 클라우드 구축/운영 분투기
NDC14 모바일 게임서비스를 위한 사설 클라우드 구축/운영 분투기
 
Azure로 MMO게임 서비스하기
Azure로 MMO게임 서비스하기Azure로 MMO게임 서비스하기
Azure로 MMO게임 서비스하기
 
Kgc2014 one daylearnunitycryptography-f
Kgc2014 one daylearnunitycryptography-fKgc2014 one daylearnunitycryptography-f
Kgc2014 one daylearnunitycryptography-f
 
클라우드 기반 Unity 게임 서버 구축, 60분이면 충분하다
클라우드 기반 Unity 게임 서버 구축, 60분이면 충분하다클라우드 기반 Unity 게임 서버 구축, 60분이면 충분하다
클라우드 기반 Unity 게임 서버 구축, 60분이면 충분하다
 
KGC 2014: 분산 게임 서버 구조론
KGC 2014: 분산 게임 서버 구조론KGC 2014: 분산 게임 서버 구조론
KGC 2014: 분산 게임 서버 구조론
 
Toast cloud for beginners
Toast cloud for beginnersToast cloud for beginners
Toast cloud for beginners
 
KGC 2014 가볍고 유연하게 데이터 분석하기 : 쿠키런 사례 중심 , 데브시스터즈
KGC 2014 가볍고 유연하게 데이터 분석하기 : 쿠키런 사례 중심 , 데브시스터즈KGC 2014 가볍고 유연하게 데이터 분석하기 : 쿠키런 사례 중심 , 데브시스터즈
KGC 2014 가볍고 유연하게 데이터 분석하기 : 쿠키런 사례 중심 , 데브시스터즈
 
NDC14 범용 게임 서버 프레임워크 디자인 및 테크닉
NDC14 범용 게임 서버 프레임워크 디자인 및 테크닉NDC14 범용 게임 서버 프레임워크 디자인 및 테크닉
NDC14 범용 게임 서버 프레임워크 디자인 및 테크닉
 
피니엔진
피니엔진피니엔진
피니엔진
 
임베디드시스템개발 Part2
임베디드시스템개발 Part2임베디드시스템개발 Part2
임베디드시스템개발 Part2
 
[우리가 데이터를 쓰는 법] 모바일 게임 로그 데이터 분석 이야기 - 엔터메이트 공신배 팀장
[우리가 데이터를 쓰는 법] 모바일 게임 로그 데이터 분석 이야기 - 엔터메이트 공신배 팀장[우리가 데이터를 쓰는 법] 모바일 게임 로그 데이터 분석 이야기 - 엔터메이트 공신배 팀장
[우리가 데이터를 쓰는 법] 모바일 게임 로그 데이터 분석 이야기 - 엔터메이트 공신배 팀장
 
서버학개론(백엔드 서버 개발자를 위한)
서버학개론(백엔드 서버 개발자를 위한)서버학개론(백엔드 서버 개발자를 위한)
서버학개론(백엔드 서버 개발자를 위한)
 
Auto Scalable 한 Deep Learning Production 을 위한 AI Serving Infra 구성 및 AI DevOps...
Auto Scalable 한 Deep Learning Production 을 위한 AI Serving Infra 구성 및 AI DevOps...Auto Scalable 한 Deep Learning Production 을 위한 AI Serving Infra 구성 및 AI DevOps...
Auto Scalable 한 Deep Learning Production 을 위한 AI Serving Infra 구성 및 AI DevOps...
 
쿠키런 1년, 서버개발 분투기
쿠키런 1년, 서버개발 분투기쿠키런 1년, 서버개발 분투기
쿠키런 1년, 서버개발 분투기
 
Meetup tools for-cloud_native_apps_meetup20180510-vs
Meetup tools for-cloud_native_apps_meetup20180510-vsMeetup tools for-cloud_native_apps_meetup20180510-vs
Meetup tools for-cloud_native_apps_meetup20180510-vs
 
(게임개발을위한) printf("Hello World!"); 그 이상의 콘솔 프로그래밍
(게임개발을위한) printf("Hello World!"); 그 이상의 콘솔 프로그래밍(게임개발을위한) printf("Hello World!"); 그 이상의 콘솔 프로그래밍
(게임개발을위한) printf("Hello World!"); 그 이상의 콘솔 프로그래밍
 

More from Seungmo Koo

More from Seungmo Koo (10)

Understanding Tech Debt
Understanding Tech Debt Understanding Tech Debt
Understanding Tech Debt
 
Multiplayer Game Sync Techniques through CAP theorem
Multiplayer Game Sync Techniques through CAP theoremMultiplayer Game Sync Techniques through CAP theorem
Multiplayer Game Sync Techniques through CAP theorem
 
게임제작개론 : #9 라이브 서비스
게임제작개론 : #9 라이브 서비스게임제작개론 : #9 라이브 서비스
게임제작개론 : #9 라이브 서비스
 
게임제작개론 : #8 게임 제작 프로세스
게임제작개론 : #8 게임 제작 프로세스게임제작개론 : #8 게임 제작 프로세스
게임제작개론 : #8 게임 제작 프로세스
 
게임제작개론 : #7 팀 역할과 게임 리소스에 대한 이해
게임제작개론 : #7 팀 역할과 게임 리소스에 대한 이해게임제작개론 : #7 팀 역할과 게임 리소스에 대한 이해
게임제작개론 : #7 팀 역할과 게임 리소스에 대한 이해
 
게임제작개론 : #6 게임 시스템 구조에 대한 이해
게임제작개론 : #6 게임 시스템 구조에 대한 이해게임제작개론 : #6 게임 시스템 구조에 대한 이해
게임제작개론 : #6 게임 시스템 구조에 대한 이해
 
게임제작개론 : #5 플레이어에 대한 이해
게임제작개론 : #5 플레이어에 대한 이해게임제작개론 : #5 플레이어에 대한 이해
게임제작개론 : #5 플레이어에 대한 이해
 
게임제작개론 : #4 게임 밸런싱
게임제작개론 : #4 게임 밸런싱게임제작개론 : #4 게임 밸런싱
게임제작개론 : #4 게임 밸런싱
 
게임제작개론: #2 세부 디자인 요소
게임제작개론: #2 세부 디자인 요소게임제작개론: #2 세부 디자인 요소
게임제작개론: #2 세부 디자인 요소
 
게임제작개론: #1 게임 구성 요소의 이해
게임제작개론: #1 게임 구성 요소의 이해게임제작개론: #1 게임 구성 요소의 이해
게임제작개론: #1 게임 구성 요소의 이해
 

Recently uploaded

Recently uploaded (8)

JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
 
JMP를 활용한 가속열화 분석 사례
JMP를 활용한 가속열화 분석 사례JMP를 활용한 가속열화 분석 사례
JMP를 활용한 가속열화 분석 사례
 
데이터 분석 문제 해결을 위한 나의 JMP 활용법
데이터 분석 문제 해결을 위한 나의 JMP 활용법데이터 분석 문제 해결을 위한 나의 JMP 활용법
데이터 분석 문제 해결을 위한 나의 JMP 활용법
 
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?
 
JMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
JMP를 활용한 전자/반도체 산업 Yield Enhancement MethodologyJMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
JMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
 
공학 관점에서 바라본 JMP 머신러닝 최적화
공학 관점에서 바라본 JMP 머신러닝 최적화공학 관점에서 바라본 JMP 머신러닝 최적화
공학 관점에서 바라본 JMP 머신러닝 최적화
 
JMP가 걸어온 여정, 새로운 도약 JMP 18!
JMP가 걸어온 여정, 새로운 도약 JMP 18!JMP가 걸어온 여정, 새로운 도약 JMP 18!
JMP가 걸어온 여정, 새로운 도약 JMP 18!
 
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
 

사설 서버를 막는 방법들 (프리섭, 더이상은 Naver)

  • 1. 사설 게임 서버를 막기 위한 방법들 (Private Game Server, 더 이상은 Naver!) NHN NEXT 구승모
  • 3. * 2005년 WOW가 인생을 바꿔놓음 * WOW 오리지널 풀파밍 * 전투사령관 캐릭터 둘 그 이외 게임 업계 활동 * China GDC 2010 발표: “How to Support an Action-Heavy MMORPG from Angle of Server Architecture” * Game Developer Magazine 2012. 5월호 특집 게재: “Evolving MMORPG Combat” * 2006~ Server Programmer, L3, NCSOFT * 2007~ Gameplay Programmer, Server Architect, TERA, Bluehole * 2012~ Professor, Game Track, NHN NEXT
  • 5. Agenda • 사설 서버란? – 사설 서버의 영향 – 사설 서버가 생기는 경로 • 사설 서버 방지를 위한 노력과 방법 – 직접 탈취로부터 – 서버 에뮬레이터 제작으로부터
  • 6. 강연 범위 • 강연 대상 – 온라인 게임 프로그래머 (서버, 플랫폼) – 게임 서버 보안에 관심 있는 사람 (프로듀싱, 서비스) • 다루지 않는 것 – 전반적인 서버 보안 방법 (DDOS, SQL Injection, …) – Reverse engineering 방지 관련 테크닉  사설 게임 서버에 특화된 내용을 다룸
  • 8. 사설 게임 서버란? • 게임 서버를 ‘탈취’하거나 ‘제작’하여 (원작자 동의 없이) 서비스 – Private server, Gray shard, Free server, Server emulator [1], … – 대부분의 경우 영리를 목적으로 함 • 주로 2가지 방법으로 생김 – 해커들이 직접 탈취한 것을 기반으로 • (예) AEGIS (Ragnarok Online) [2] – 서버 에뮬레이터 제작을 통하여 • 실제 정식 서버를 흉내(모방) 내도록 제작 • (예) WOW MaNGOS [3]
  • 9. 사설 서버의 악영향 • 직접적으로는 Profit-share 감소 • 간접적으로는 (더 무서운 것) – 게임 자체에 대한 신뢰 하락 – 유저들이 존중(respect)받지 못한다는 느낌 • Nexon, Blizzard, Ncsoft의 사설 서버에 대한 소송 예 – 북미 1등(?) 메이플스토리 사설 서버인 OdinMS [4] – WOW 부분유료화 형태의 사설 서버인 Scapegaming [5] – 5만 사용자를 거느린 리니지2 사설 서버인 L2Extreme [6]
  • 10. 왜 사설 서버를? • 돈을 벌기 위해 – 꽤 많은 인력들이 사설 서버 구축을 위해 노력 – 생각보다 많은 사람들이 플레이 함  꽤 짭잘(?) – CIS 관련 국가 및 중국 내륙 • (예) 한 때, 러시아 시장 1위는 리니지2 사설 서버 [7] • 교육적인(?) 목적 – 서버 에뮬레이터 제작의 경우, 해커들의 도전 의식 자극 + 재미 – “게임 서버 프로그래밍 공부하기 정말 좋다”는 함정
  • 11. 직접 적인 유출(leak)로부터 사설 서버가 생기는 경우 • 개발사에서 직접 유출되는 경우 – 대부분의 경우 트로이 목마를 통한 유출 • 개발실 소스코드 유출 괴담: “출근 해보니 전부 체크아웃 되어 있더라?” • (예) 밸브의 하프라이프2 소스코드 유출 [8] • 우리 나라의 몇몇 회사들도 이렇게 털린 경우가 많음 (카더라 통신) • 퍼블리셔측에서 유출되는 경우 – 서비스 네트워크 또는 배포선에서의 탈취 • (예) 뮤 온라인의 해외 유출 [9] – IDC 근무자에 의한 인위적인 서버 바이너리 탈취
  • 12. 서버 에뮬레이터 제작을 통하여 생기는 경우 • 해커들은 미리 서버 에뮬레이터 제작을 준비 – 폐쇄형 커뮤니티(private IRC, phpBB 등)를 통해 정보 공유 및 수집 • 패킷 구조, 클라이언트 보안 메커니즘 등 – CBT와 동시에 클라이언트 입수 후, 해당기간 중 다양한 실험 및 공유 • 서버 프로그래머: “어?! 이상하다. 이런 패킷이 올 수가 없는데?” • Non-Client Bot과 같이 만들어 짐 – 서버 에뮬레이터와 비슷한 시기에 (약간 먼저) 등장 • Non-client bot이 있다는 말은? 어딘가에서 서버 에뮬레이터가… • 사실상 한 뿌리: 서버를 흉내 내느냐 클라를 흉내 내느냐의 차이
  • 13. 오늘의 진짜 주제와 결론 • 100% 막는 방법은 없습니다 – (작정한) 인원에 대한 보안은 정말 어렵기 때문 – 클라이언트는 이미 적의 수중에 있기 때문 • 그래서, 이미 버린 몸(?)이니 포기? – 어차피 털릴텐데 아무것도 안하기? • 그렇지만, 노력대비(?) 효과를 볼 수 있는 방법들은 있음 – 오늘의 핵심 주제
  • 14. 사설 서버 방지를 위한 방법들 1 (직접 탈취를 막기 위한 노력)
  • 15. 개발사에서의 직접 유출 • 트로이 목마(Trojan Horse)를 통한 유출이 대부분 – 개발 관련툴 크랙 버전에 심어서 토렌트 등으로 배포 • (예) V-Asst, I-Bld, A-CS, … – 개발자의 컴퓨터에서 실행되는 순간 • 백도어 생성후 해커에게 리포팅 • 리포팅 받은 해커는 바로 털어가지 않고, 지속적으로 감시 및 백도어 강화 • Windows Domain Admin 권한을 갖는 컴퓨터에 설치되는 순간 게임 오버 – 계속 지켜보다가 (어느 정도 완성되면) 순식간에 털어감
  • 16. HOW-TO • 정품 개발 툴만 사용 – 검증되지 않은 프로그램 사용 금지 • 최신 소프트웨어로 업데이트 – 특히 OS의 경우, 구 버전의 취약점을 공략 • 보안에 자신 없으면 – 개발망을 인터넷으로부터 물리적으로 분리 (가장 확실) • Source repository, Issue tracking system 등
  • 17. 인원 보안 문제 • 그럼에도 불구하고, 내부 사람에 의해 털릴 수 있음 – 가장 무서운 적은 내부의 적 – 퇴사시 별 생각 없이 습관적으로 가져가는 경우도 있음 • 악의적인 의도가 아닌 경우: (열정이 넘쳐?) 집에 가져와서 일하는 경우 • HOW-TO – 개발망 분리 후, 비인가 저장장치 사용 금지 – 회사에서의 작업물에 대한 교육(개념 주입) 필요 – 개발자들에게 잘해줘서 회사 떠나지 않게 하는 것 (가장 확실) • 개발자 괴롭히면? 복수심에 싹 다 들고 제 3국가 가서 서비스 할 수도.. (농담)
  • 18. 퍼블리셔측에서의 유출 • 배포선(release process) 또는 IDC에서 유출되는 경우 – 내부 인원에 의한 유출 • 운영 인원의 권한 최소화 및 2-way 인증 필요 (뻔한 이야기) – 직접 해킹 당하는 경우 • 해킹 방어는 광범위한 영역 (본 강연 주제를 벗어남) – 100% 유출 막는 것은 불가 • 서버 바이너리의 유출 여부를 아는 것이 중요 – 어떤 버전이 어디를 통해 유출 되었는지 아는 것이 필요 – 탈취된 서버가 정상적으로 동작하지 않도록 하는 장치 도입
  • 19. HOW-TO: 기본적으로 해야 할 것 • 인가된 채널로만 배포 – 급한 patch라고 메일 등으로 전송 금지 • 서버 프로그램 유효 기간 설정 (Time-bomb) – (예) 현재 실행 시각이 빌드 시점(__DATE__)로 부터 얼마 지났는지 체크 • Binary Fingerprint – 인증된 머신 정보를 서버 바이너리에 삽입 • (예) .data 영역을 확보 해놓고, 배포시에 인가된 머신 MAC주소로 교체 – 서버 실행시 해당 영역 정보와 머신 정보 비교
  • 20. HOW-TO: 서버 실행 여부를 통지 받기 • 서버 시작시 80번 포트로 서버 정보 보내기 – 버전, 인가된 머신 번호, 퍼블리셔 코드 등을 암호화해서 전송 – Outbound 80번 포트(http)를 막는 경우는 거의 없음 – 리포팅은 제 3지대(Amazon EC, GAP 등) 서버에서 받기 • 리포팅 받은 것을 주기적으로 모아서 메일로 통보 받으면 편함 {NX_KOR, VER, IP, MAC, …} via HTTP/80 Reporting e-mail
  • 21. 이것저것 다 귀찮은 경우… • 돈(?)으로 해결 할 수 있음 • 하드웨어 보안 모듈이 설치된 서버에 배포 – TPM[10]을 통한 디스크 암호화 등 • 라이선스 서버 솔루션 사용 – 인터넷을 통한 실시간 인증을 받아야 서버 실행이 가능
  • 22. 사설 서버 방지를 위한 방법들 2 (서버 에뮬레이터 제작을 방해하기 위한 노력)
  • 23. 서버 에뮬레이터의 경우 • 처음부터 보안에 신경을 써야 함 – 해커들은 최초의 외부 테스트(FGT, CBT)부터 클라이언트 분석 – 오픈 전에 서버 sandbox가 등장하는지 여부를 결정 • Sandbox? – 월드 접속 및 이동만 되는 일종의 더미 서버로 해커들의 첫 번째 목표 – 서버-클라이언트간 핵심 동작 메커니즘이 분석 당했음을 의미 • 두 측면에서 공략 – 패킷 분석 및 클라이언트 역공학(reverse-engineering)
  • 24. 클라이언트 역공학 • 동작 메커니즘 분석 – DLL injection등을 통해서 send/recv API 부분을 hooking – 서버-클라이언트간 어떤 데이터를 어떻게 주고 받는지 파악 • 시간과 노력이 많이 들지만 암호화 관련 로직 우회 가능 • 게임 데이터 추출 – 아트 리소스 뿐만 아니라 게임에 필요한 각종 데이터시트 정보들 • (예) 스킬 공격력, 아이템 스탯 테이블 등
  • 25. HOW-TO: Anti-Reverse Engineering • 광범위한 주제 – 기초적인 것만 해도 해야 할 것이 많음 [11] • 해커들의 속도를 따라잡기 힘든 부분 – 개발자가 일일이 적용하는 것은 비용대비 효과 측면에서 비추 • 클라이언트 바이너리 난독화 전문 툴 사용을 추천 – Themida (WinLicense) [12] 등 (의외로 싸다) – 지속적으로 최신의 반-역공학 방법들이 업데이트 됨
  • 26. HOW-TO: 꼭 필요한 데이터만 패키징 • 클라이언트에서 꼭 필요한 (client-only) 데이터만 넣기 – 의외로 서버에서만 필요한 데이터도 같이 넣는 경우가 많음 • (주로 귀차니즘 때문에) 통합 데이터시트로 하는 경우 – 배포 툴에서 패키징 자동화하는 것을 추천 • 데이터 항목에 서버/클라/공용 태그 넣기 • [참고] 서버 에뮬레이터 제작시 가장 더럽고(?) 귀찮은 부분 – 실 서버와 같은 데이터 값(밸런싱 정보 등)을 수집하여 입력하는 것 – 클라이언트에 해당 정보가 있다면, 손쉽게 추출해서 사용하게 됨 • (예) W모 게임의 경우, dbc파일 추출 후 그대로 읽어서 사용
  • 27. 패킷 분석 • 서버-클라이언트간 패킷 수집(capture) – 어떤 내용이 오가는지 알면, 서버/클라이언트 모두 흉내낼 수 있기 때문 – 암호화 하지 않는 경우 클라이언트 역공학을 시도할 필요도 없음 • 패킷 암호화 – 아무리 잘해도 언젠가는 파악당함 (클라이언트 역공학) • 개발자가 덜 귀찮도록 하는 방식으로 관리하는 것이 핵심 • 패킷 내용들이 파악되어도 조금만 수정하면 시간을 또 벌 수 있도록 – 패킷 수집(감청)으로부터 최소한 유저들의 정보를 보호하기 위함 • Raw data 그대로 수집되면 위험한 것들 (ID, PIN, 메일주소, 채팅내용 등)
  • 28. HOW-TO: 패킷 암호화시 주의할 점 • 직접 설계하거나 구현하지 말 것 – 이미 검증되고 리뷰 많이 받은 잘 만들어진 코드를 사용 [13] • (예) AES256, RC4, … • 아무리 독창적인(?) 암호화 알고리즘을 만들더라도 파악됨 • 결국, key를 잘 관리하는 것이 핵심 • 절대로 key를 클라이언트에 박지(?) 말 것 – 사실상 암호화 하지 않는 것과 같음 – Key는 세션을 맺을 때마다 무조건 새로 생성해서 교환해야 함
  • 29. HOW-TO: 암호화 통신을 위한 Key 교환 • Diffie-Hellman Key Exchange [14] – 세션 성립시마다 새로운 키로 암호화하기 위함 – 각종 공격(예: MITM)에 안전한 구현체를 사용할 것 (예: SRP) ClientServer 소수 p, g a b crypto-key ClientServer 감청 당해도 crypto-key 파악 불가 Transport K = B^a mod pB = g^b mod p a b B A A = g^a mod p K = A^b mod p
  • 30. Secure Remote Password Protocol • SRP [15] – 스탠포드 대학에서 제작 (현재 버전은 SRP-6a) – 인증 + 키 교환 + 패스워드 암호화를 한방에 해결! – 인증에 사용되는 비밀 정보가 일부 털려도 안전 – 사전 공격 및 MITM 공격 등으로부터 안전 – 공인 인증 기관 (CA) 필요 없음
  • 31. HOW-TO: 패킷 암호화시 주의할 점 • 패킷 전체를 스트림 방식으로 암호화 – (예) W모 게임처럼 패킷헤더만 암호화 하는 경우  raw data 노출됨
  • 32. HOW-TO: 패킷 셔플링 • 패킷 번호 및 패킷 내용 순서 무작위 치환 (shuffle) – 패치 때마다 패킷이 바뀌는 효과  해커들 입장에서는 상당히 귀찮음 – SVN revision 번호 또는 GIT tag hash를 key로 활용 가능 – 배포시 자동화 추천: pre-build event로 패킷 코드 생성(emit)할 때
  • 33. 이런 노력에도 불구하고, • 서버 에뮬레이터 제작을 100% 막기는 불가 – 어차피 클라이언트는 언젠가는 완전히(?) 분석 당함 – 어딘가에서 서버 에뮬레이터가 만들어지고 있는지 아는 것이 중요 • FACT – 서버 에뮬레이터도 결국 (인터넷상의) 일반인 대상으로 서비스 • HTTP 포트(80)를 일부러 닫고 사용하는 유저는 없다는 점을 이용 – 클라이언트는 정식 배포본을 사용한다는 점을 이용 • 플레이어의 클라이언트가 어느 서버에 접속하는지를 직접 리포팅 • 대상 서버 IP가 127.0.0.1, 192.168.x.x 이런 종류라면 제작 중이라는 뜻
  • 34. 접속 대상 서버 정보를 통지 받기 map-reduce & whois 사설 서버 사설 서버 유저 (클라이언트) Random sampling report via HTTP 클라이언트가 특정 확률로 서버 정보 리포팅 정식 서버 정보는 걸러내고 리포팅
  • 36. 마무리 • 100% 방지법은 없음 – 최소한의 노력은 하자: 언급한 방법들이 난이도 높은 일이 아님 – 어차피 털린다고 손 놓은 것과는 차이가 큼 (방충망이 유무의 차이) • 관리의 측면으로 접근 – 지속적으로 모니터링 및 수정(자동화)을 통해서 시간을 벌기 – 내가 보안에 쓰는 노력보다 해커가 뚫는 노력이 더 큰 것 위주로 적용 • 숨기는 것 보다 찾는 것이 더 어려운 이치 • 실제로 상당히 효과적이었음
  • 38. References 1. http://en.wikipedia.org/wiki/Server_emulator 2. http://en.wikipedia.org/wiki/AEGIS_(Ragnarok_Online) 3. https://github.com/mangos/MaNGOS 4. http://maplenewsnetwork.wordpress.com/2008/06/18/odinms-vs-nexon/ 5. http://www.gamerlaw.co.uk/2010/blizzard-wins-88m-lawsuit-against-wow-private-server-owner/ 6. http://www.gamasutra.com/php-bin/news_index.php?story=11786 7. http://www.thisisgame.com/special/page/event/ion/2008/nboard/79/?n=8335 8. http://www.gamespot.com/articles/half-life-2-source-leaked/1100-6076314/ 9. http://m.inven.co.kr/webzine/wznews.php?idx=14253 10. http://en.wikipedia.org/wiki/Trusted_Platform_Module 11. http://www.codeproject.com/Articles/30815/An-Anti-Reverse-Engineering-Guide 12. http://www.oreans.com/themida.php 13. http://security.stackexchange.com/questions/2202/lessons-learned-and-misconceptions-regarding- encryption-and-cryptology 14. http://en.wikipedia.org/wiki/Diffie%E2%80%93Hellman_key_exchange 15. http://en.wikipedia.org/wiki/Secure_Remote_Password_protocol
  • 39. 뒷이야기 • 수년간 지켜본 입장에서의 개인적인(?) 느낌 • 서버 에뮬레이터 구현 능력 – 프로그래밍 실력? – 러시아 친구들(잉여력까지 느껴짐) >> 중국 해커들 > 미국 해커들 • 실제 게임(실서버)의 흥망성쇠(?)와 상관 관계 있음 – 서버 에뮬 개발이 활발해지고 있는 추세 ∝ 실서버 사용자 수 – 개발이 중단되거나 관련 커뮤니티가 완전 죽은 경우 • 실서버 사용자 급감 상황
  • 40. 서버 에뮬레이터 제작 커뮤니티 • 서버 에뮬레이터는 다양한 버전이 존재 – Sandbox 이후로 다양한 버전 – 수익금 기부(donation) 문제 등으로 커뮤니티 분열이 잦음 • 누군가 (몰래) 서비스, 핵심 멤버 탈퇴, 원 제작자로부터의 추적 등 – 누군가 기존 작업물을 가져다가(stealing) 새로운 프로젝트로 포장 • 비슷한 이유로 또 분열  반복