멀티 플레이어 게임에서 ID 스푸핑을 방지하려면 어떻게해야합니까?


9

클라이언트가 IP 주소를 스푸핑하여 다른 클라이언트가 서버임을 속이려고합니다. 그런 종류의 것들. (나는 이것에 대해 많이 모른다. 그래서 이것이 완전히 틀렸다면 나를 교정하십시오.)

이것을 막기 위해 어떻게해야합니까? 실시간 게임이기 때문에 암호화를 사용하려면 RC4와 같은 빠르고 안전한 것을 사용합니다. 서버가 클라이언트에 제공하는 키로 패킷 데이터를 암호화해야합니까?

차이가 있다면 UDP를 사용하고 있습니다.

답변:


8

가능한 해결책 중 하나는 TCP + TLS를 사용하여 사용자를 인증하는 것입니다. 그런 다음 동일한 채널 내에서 Diffie-Hellman과 같은 것을 사용하여 대칭 키를 협상하십시오. 마지막으로 RC4와 같은 대칭 알고리즘을 사용하여 각 UDP 패킷을 암호화하십시오.

SRP 와 같은 것을 사용하는 경우 대칭 키를 협상하기 위해 기술적으로 TCP + TLS를 사용할 필요는 없습니다. 깨끗한 Diffie-Hellman은 MITM 공격에 취약합니다 .

더 나아가서 UDP 패킷의 사용자 정의 SEQ 필드 (일부 안정적인 UDP 형식을 사용하는 경우)를 사용하여 카운터 모드 암호화 형식을 구현할 수 있습니다. 여기서 각 패킷의 협상 된 키에 SEQ 번호를 추가합니다. 알려진 일반 텍스트 공격을 마운트하는 것이 훨씬 더 어렵습니다.

서버가 마음대로 키를 나눠주지 마십시오. '스푸핑'서버는 자신의 키를 쉽게 나눌 수 있습니다. 전체 암호화 체계의 목적을 무너 뜨립니다. 유일하게 보장되는 방법은 TLS 또는 상호 지식 (예 : 비밀번호 / 해시)을 사용하는 것입니다.


이것이 어떤 취약점을 종식시킬 것인지 정확하게 설명해 주시겠습니까? 나는 IP 스푸핑에 대해 들었어요과 같은,하지만 난 주제에 대한 교육 아니에요
liamzebedee

@ LiamE-p GameDev는 보안 충돌 과정의 장소가 아닙니다. 나도 나눠 줄 시간도 없어 본질적으로 SRP 및 TLS (또는 둘 다)는 온라인 뱅킹 웹 사이트만큼 안전해야합니다 (CTR 모드를 사용하는 SRP). 더 자세한 설명이 필요하면 Security SE 웹 사이트에 문의하십시오.
Jonathan Dickinson

이것은 보안 SE에 관한 주제 일 것입니다. 거기서 모드를 마이그레이션하도록 플래그를 지정합니다.
Rory Alsop

8

나는 해킹에 대해 먼 (2 년 전) 배경을 가지고 있으며, 가장 까다로운 패킷 (및 내가 제안하는 것)은 Jonathan Dickinson이 간략하게 설명 한 대칭 키 암호화 방법을 사용하고 있습니다. 그가 언급 한대로 TCP + TLS를 사용해야합니다. 그러나 그는 카운터 시퀀스를 말했다.

나는 프로그래머 "해킹 방지"시스템이 프로그래밍 지식과 첫해 대수 논리없이 해독 할 수있는 이상한 계산 시스템을 가지고 있기 때문에 쉽게 스푸핑 된시기에 부딪쳤다. 적절한 순차적 방법을 선택하는 한 대상은 예상대로 정확하게 데이터를 수신해야하며, 가장 안전한 작업에는 TCP를 사용해야합니다.

"내 경험에서"로 돌아가서, 내가 찾은 하나의 시스템은 훌륭하게 작동합니다. 전송 시간 및 예상 시간을 기반으로하는 순차적 인 방법입니다. 패킷은 항상 올바른 순서로 수신되어야하므로 패킷을 스푸핑하는 것은 패킷이 언제 전송되는지, 그리고 클라이언트 프로그램을 먼저 해킹하지 않고 패킷이 전송 될시기와 패킷이 예상되는시기를 예측할 수 없기 때문에 거의 불가능했습니다.

짧은 대답

한마디로 : 각 패킷 구조에는 밀리 초로 전송 될 때와 같은 타임 스탬프도 있습니다. 그것은 간단합니다. 시간이 다른 시간 전후인지 여부를 확인하는 것은 정말 쉽습니다. 이것이 의미가있는 이유는 서버가 인증 시간없이 스푸핑 순서대로 패킷을 수신 할 수 있기 때문입니다.

이것은 분명히 유일한 순차 방법이 아니거나 심지어 가장 좋은 방법은 아닙니다. 내가 찾은 것은 아주 잘 작동하는 것입니다. TCP + TLS와 결합하면 너무 많은 문제가 없어야합니다.


게임의 문제는 일초 미만의 수준에서 발생한다는 것입니다.
Jonathan Dickinson

@JonathanDickinson 그것은 사실입니다. 그러나 UDP를 사용하고 특히 TCP를 사용하는 경우 데드 레 코닝 알고리즘을 밀리 초 미만 및 심지어 밀리 초 미만의 작업에 사용해야합니다. 그것은 물론 속도, 비쥬얼 및 일부 비하인드 스토리를 돕는 것입니다. (주로 속도 관련)
Joshua Hedges

6
나는 하루가 끝났을 때 그것이 데스 레이 위성 제어 시스템이 아니라 게임이라고 생각합니다. +1
Jonathan Dickinson

4

개인적으로 나는 너무 일찍 배를 타고 가지 않을 것입니다. Jonathan이 권장하는 것처럼 패킷을 암호화하더라도 내 동생과 같은 해커는 암호화되기 전에 패킷 데이터에 액세스합니다. 악의적 인 사용자가 원하는 경우 침입자를 찾을 수 있습니다.

이제는 불가능 해 졌으므로 인디 개발자가 악의적 인 사용자가 할 수있는 피해를 최소화 할 수있는 방법이 있습니다. 아마도 아웃 바운드 패킷을 암호화해야하지만 특정 종류의 공격 만 막을뿐 아니라 현재 "해킹 방지"라고 생각하지 마십시오. 해커를 실제로 끄려면 클라이언트에게 게임 변경을 가능한 한 적게 제어하십시오. 이 큰 MMO 중 하나는 클라이언트가 서버에서 XP를 얼마나 벌 었는지 알려주는 데 사용되었습니다. 무슨 일이 있었는지 알아? 하지마 클라이언트가 서버에 생물체에 대해 약간의 주문을 내고 싶다고 말한 다음 생물체가 죽었을 때 서버가 행동을 해결하도록하고 XP를 추가하도록합니다. 클라이언트는 명령을 보내고받을 수 있고 필요에 따라 약간의 예측을 수행 할 수있는 얇고 멍청한 터미널이어야합니다.게임은 클라이언트에서 보낸 명령에 반응한다.

대형 게임 회사는 위의 해커가 VAC 또는 PunkBuster 와 더불어 알려진 해커가 계속해서 고객 지불을 방해하는 것을 방지하기 위해 위와 같은 것을 사용합니다 . 이러한 보안 조치의 작동 방식은 상당히 비밀로 유지되지만 사용하는 한 가지 방법을 알고 있습니다. 현재 실행중인 응용 프로그램을 검색하고 알려진 해킹 목록과 비교합니다. 부정 행위를 당하면 VAC / PunkBuster 보안 서버에 가입 할 수 없습니다.

관련 : 서버의 게임 로직! 좋거나 나쁘거나?

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.