버그 해결을 위한 모든 질문을 던져
0 votes
568 views
게임서버를 공부중인 고등학생입니다

현재 c++서버 유니티클라로 게임을 제작중에 있는데

클라에서 패킷을 보내는걸 캡처해서 악용할수있다는걸 알았습니다

 

생각해낸 보안으론 서버에서 클라를 받을때

클라이언트 accept를 한후 랜덤값을 보내 3초안에 AES256으로 암호화시켜서 보내도록하고 인증못한다면

클라이언트를 끊어버린다면 패킷 보내기를 시도할수없지않을까요

 

해킹에 대해서 아직 아무것도 모르는 상태입니다..

안드로이드 앱에서 패킷을 캡처하고 그 앱을 통해 접속한후 패킷을 보내는게 가능한일인가요?

c++ tcpip서버를 책을 읽어가며 직접 제작중인데 프라우드넷같은 엔진없이 게임출시하는건 너무 과한 욕심일지ㅠㅠ

보통 온라인게임들은 어떻게 핵을 방지하는지 궁금합니다..
asked (12 point)
수정됨 , 568 views

2 answers

+2 votes
우수 답변
클라이언트가 유저 컴퓨터 로컬에 있는 이상 클라이언트 변조를 막는건 불가능하다고 보시면 됩니다. 시간과 정성을 들인다면 어떻게든 뚫어낼 수 있기 때문에 인기있는 게임들이 항상 핵으로 고생하는 것이기도 하구요.

 

게임 네트워크 보안의 경우 보통 패킷 암호화+무결성 검증으로 방어하는 것이 보통이구요, 특히 로그인이나 결제와 같이 중요한 데이터의 경우는 보안 수준을 높이기도 합니다.

이 방법으로 논클라이언트 봇 정도는 개발을 힘들게 할 수 있지만 클라이언트 자체가 변조된 경우는 저런 보안과정을 그대로 사용할 수 있기 때문에 이 역시 쉽지 않습니다.

서버에서 어뷰징을 감지하고 차단하는 것이 이론적으로는 완벽한 솔루션이기는 합니다. 가령 FPS게임의 경우 유저가 이상한 위치로 가는 이동 패킷을 보낸다던지, 채팅에 비정상적인 바이트를 섞어 버퍼 오버플로우를 시도하는 것을 미리 감지해 볼 수 있을겁니다. 하지만 이론적으로 완전할 뿐이지 모든 구멍을 서버에서 틀어막으려는 것뿐이어서 일일이 대응하기도 쉽지 않고 운영적인 문제도 존재할 겁니다. 그래서 최근에는 머신 러닝을 도입하여 상당한 정확도로 비정상 활동을 감지하는 회사도 종종 있습니다.

결국 어느 부분에 어느 수준의 보안을 적용할 것인지는 개발자가 적절히 선택해야 합니다. 보안쪽도 한번 시작하면 끝도 없지만 상황에 맞는 보안을 사용하려면 개론 수준의 기본적인 내용은 공부해 두시는 것이 좋을 것 같습니다
answered (137 point)
선택됨
보안은 끝이 없는문제군요..

손이 닿는데까지만 제가 손보고

나머지는 게임이 잘되고난후에 생각해야겠네요

 

답변 감사합니다!
0 votes
현대 컴퓨터로는 공개키 알고리즘의 암호를 해킹하기 힘듭니다. 보통 게임 서버들도 처음에 로그인 과정에서 핸드쉐이킹 과정을 거칩니다.  공개키 핸드쉐이킹이 정상적으로 완료되면 이후에는 공개키 알고리즘을 계속 사용하기엔 비용이 많이 들기 떄문에, 비용이 덜 드는 암호화 방식으로 패킷을 서로 교환 하다 유저가 게임을 종료하면 TCP 세션이 끊어집니다.

 

이건 그렇고, 이후에도 변조된 패킷으로 요청이 충분히 올 수 있습니다. 이 경우에는 서버에서 일일이 무결성 검사를 해줘야 합니다.

이상한 값이 섞여있지는 않은지, 너무 많은 패킷을 보내고 있지는 않은지, 이상하다 싶은 경우는 다 if 로 예외 처리르 하고

로그를 찍거나 제재목록에 추가하는 방식이지요.

 

보통 게임 서버는 위와 같은 방식을 사용합니다.
answered (42 point)

버그 해결을 위해 도움을 구하고, 도움을 주세요. 우리는 그렇게 발전합니다.

throw bug 는 프로그래밍에 대한 전분야를 다룹니다. 질문,논의거리,팁,정보공유 모든 것이 가능합니다. 프로그래밍과 관련이 없는 내용은 환영받지 못합니다.

238 질문
366 answers
375 댓글
468 users