[.Net Core] MMO 컨텐츠 구현(DB,대형구조,라이브) - 라이브 대비 해킹 이론

Yijun Jeon·2022년 12월 13일
0
post-thumbnail

Inflearn - '[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part9: MMO 컨텐츠 구현 (DB, 대형구조, 라이브 준비)'를 스터디하며 정리한 글입니다.


취약점 공격 개론

해킹이란 왜 일어나고 어떤 식으로 일어날까?

  • C#은 C++ 보다 성능은 떨어지지만 안정성은 높음

Stack Overflow

  • 함수를 호출하고 return 할 때, 돌아갈 코드 위치는 어떻게 알까?

함수에 대한 호출 정보는 Stack에 쌓여나감

  • return Link
  • Data
  1. return Link에 이상한 값이 씌워진 경우 코드의 흐름을 제어할 수 있게 됨

  2. 그 이상한 값이 다음과 같은 쉘 코드의 위치일 경우 실행되는 위치의 데이터도 조작이 가능하게 됨

공격에 사용될 수 있는 취약점 (Window 커널 버그, Chrome, IE 등) 찾으면 초대박!
-> But, 우리 게임 서버와는 특별히 상관이 없음


게임 해킹 개론

일반적인 핵 종류 : 스피드핵, 월핵, 맵핵

해킹의 원리

1). 메모리 조작 (vs 코드 난독화, 메모리 보호 등)

  • 초보자들도 툴을 이용하여 메모리를 찾을 수 있음

2). 패킷 조작 (vs 암호화 등)

3). 리버싱

  • C#은 굉장히 쉬움

서버 구조

Server-based : 중앙 서버가 심판 역할을 해서 보안 쪽으로는 안전함

  • 서버 개발자가 실수만 하지 않는다면 모두 막을 수 있음
  • 서버 쪽에서 클라의 모든 것을 검사해야 하는 부담이 있음
  • MMO에서 주로 사용

P2P : 한 명이 방장 역할을 맡게 되고 나머지가 방장에게 붙는 관계

  • 해킹에 취약함


암호학 개론

암호학 : 데이터를 남이 보더라도 무엇인지 알아채지 못하게 만드는 것

패킷 조작을 막기 위해 암호화를 한다고 해도 결국 리버싱으로 암호를 까볼 수 있음

그럼에도 왜 암호화를 해야 할까?

  • 다른 사람의 정보는 보지 못해야 하기 때문임
  • 리버싱은 내 컴퓨터에서 실행되는 프로그램을 까보는 것에 불과함

암호 종류

양방향

  • 대칭키 암호 : 암호화/복호화 키가 같음
  • 비대칭키 암호 : 암호화/복호화 키가 다름

단방향 - 사용자의 비밀번호를 DB에 저장할 때 유용

대칭키

대칭키 암호만으로 Key 자체를 안전하게 보내는 방법은 아직 없음

비대칭키

수학적인 난제를 기반으로 만듦

  • 공개키
  • 비밀키 : 절대로 노출하면 안 됨 (ex. 공인인증서)





게임 개발의 암호

  • 컨텐츠 패킷 암호화 : 대칭키 암호

  • 로그인 인증, 키 교환 : 비대칭키 암호

  • 비밀번호 DB 저장 : HASH


서버 구조 개론

현재 우리 게임의 구조


실제 MMO의 구조


셋 중에 하나라도 느려지면 게임 느려질 수 밖에 없음

  • 네트워크 부하 : Broadcasting...
  • DB 부하 : 게임이 오래될 수록 느려질 수 밖에 없음...
  • 게임 로직 부하 : AI, astar...

게임은 모든 컨텐츠끼리 서로 맞물려 있는 경우가 많으므로 DB 데이터를 분산하여도 동시에 같이 처리해야 하는 경우가 많기 때문

  • 서로 다른 서버군은 서로 영향을 줄 수 없음
  • 서버군에 따라 DB가 따로 존재하므로 데이터도 다름

  • 하나의 계정과 관련된 별도의 account 서버 (로그인 서버)가 하나 더 있어야 함
    -> ID, 비밀번호, 계정 당 1회 이벤트 등등...

우리 프로젝트에서는 웹서버로 account 서버를 구현할 것

0개의 댓글