2012-02-03 2 views
4

첫 번째 멀티 플레이어 RTS 게임을 개발 중이며 자연스럽게 UDP 소켓을 사용하여 데이터를 수신/전송합니다. 내가 알아 내기 위해 노력했습니다UDP 소켓의 보안 관리

한 가지 DoS 공격에서 가짜 패킷이 침수되는 이러한 포트를 보호하는 방법입니다. 일반적으로 방화벽은 홍수 공격으로부터 보호 할 수 있지만 사용중인 포트에서 패킷을 허용해야하며 가짜 패킷을 거부하기 위해 자체 소프트웨어에 의존해야합니다. 사람들이 내 패킷을 스니핑하지 못하게하고, 내가 사용하고있는 인증 또는 특수 구조를 관찰하고 비슷한 패킷을 사용하여 스팸 메일을 보내지 않게 할 수 있습니까? 범죄자를 탐지하고 금지하는 것을 거의 불가능하게하기 위해 출처 주소를 쉽게 변경할 수 있습니다. 이러한 종류의 공격으로부터 보호 할 수있는 널리 인정되는 방법이 있습니까?

나는 UDP와 TCP의 차이점을 모두 알고 있으므로 그것에 대해 강의로 바꾸지 마십시오.

===================== 편집 ======================== =

나는 또한 게임을 '해킹'나는 내 게임에서 오는 생각 패킷을 전송하여 부정 행위 누군가로부터 보호하는 방법을 해결하기 위해 노력하고 있음을 추가해야합니다. 시퀀싱/싱크 번호 나 ID는 쉽게 가짜가 될 수 있습니다. 암호화를 사용할 수는 있지만 서버의 응답 속도가 얼마나 느려지는지 걱정되며 DoS로부터 보호되지 않습니다.

나는이 발생할해야 UDP 소켓을 사용하는 모든 프로그래머 기본적인 문제를 알고 있지만, 내 인생 내가 그들 주위에 작업을위한 방법에 대한 모든 관련 문서를 찾을 수 없습니다!

어떤 방향으로 생각하겠습니다!

답변

4

기술은 UDP와 관련이 없습니다. 스푸핑을 처리하기위한 일반 메시지 인증, DoS 처리 속도 조절 및 서버 측 상태 휴리스틱 ("이 패킷이 의미가 있습니까?")을 처리해야합니다. 클라이언트 해킹.

DoS를 효율적으로 처리하려면 탐지 계층이 필요합니다. 먼저 내용을 보지 않고 잘못된 소스 주소를 삭제하십시오. 할당되지 않았거나 올바른 소스와 일치하지 않는 ID로 각 패킷의 시작 부분에 세션 ID를 입력하십시오. 다음으로 세션 당 도착률을 추적하십시오. 주소가 너무 빨리지나 가기 시작합니다. 이러한 기술은 합법적 인 패킷을 실시간으로 스니핑 할 수있는 사람을 제외한 모든 것을 차단합니다.

그러나 스니핑 실시간 기반의 DoS 공격은 매우 희귀하고 공격의 속도는 단일 소스 네트워크의 속도로 제한됩니다 것입니다. 패킷 스니핑을 차단하는 유일한 방법은 많은 작업이 될 암호화와 체크섬을 사용하는 것입니다. 이것이 "첫 번째 멀티 플레이어 RTS"이므로 암호화가 부족한 모든 작업을하는 것이 좋습니다.

암호화를 사용하기로 결정하면 AES-128은 상대적으로 빠르고 안전합니다. Brian Gladman의 참조 Rijndael 구현은 실제로 최적화하고 싶거나 거기에 많은 AES 라이브러리가있는 경우 좋은 출발점입니다.클리어 텍스트 데이터 체크섬은 간단한 CRC-16으로 할 수 있습니다. 그러나 그것은 아마 당신의 공격 가능성에 대한 과잉 공격 일 것입니다.

+0

위대한 요약, 정말 고마워요! 소스 IP가 유효하지 않은지 어떻게 알 수 있습니까? 게임이 랩톱/스마트 폰에서 재생되는 경우 세션의 IP가 변경 될 수 있습니다. 여기에 내가 지금까지 할 일은 다음과 같습니다 : * 로그인 인증을 사용하여 활성 세션 시작 * 모든 패킷에 세션 ID 추가 * 각 패킷에 (이동/촬영/keepalive) 태그를 붙이고 각 초당 수를 제한하십시오 * 서버가 클라이언트에게 마지막 30 초 동안 X 유형의 패킷 수를 확인하도록합니다. * 손상되거나 위조 된 것으로 보이는 모든 패킷을 논리적으로 제거합니다.* 이러한 규칙을 너무 자주 위반하는 세션을 너무 자주 종료하십시오. – Scotty

4

가장 중요한 것 : 클라이언트를 믿지 마세요! 항상 모든 서버 측을 추적하십시오. 가짜로 보이는 패킷이 도착하면 (예 : 초당 Y 단위를 이동하는 단위는 초 당 mov X 단위 만 가능해야 함) 패킷을 드롭하면됩니다.

또한 초당 패킷 수가 커지면 패킷도 함께 삭제됩니다.

그리고 게임 내 채팅 및 이와 유사한 일들이 정상적인 TCP 스트림 불구하고 갈 수있는 ... "중요하지 않은"것들에 대한 UDP 패킷을 사용하지 마십시오.

+0

물론 내 클라이언트의 모든 메시지를 처리하여 합법적인지 확인합니다. 그러나 암호화되지 않은 프로세스 (해당 경로를 사용하는 경우)에서 내가 알고있는 지점까지 해당 패킷을 처리하는 과정에서 가짜임을 충분히 압니다 좋은 DoS 공격을 위해 서버에! – Scotty

+0

@Scotty 그래서 대형 온라인 게임은 모두 다중 서버 아키텍처를 사용합니다. 하나의 서버가 연결을 처리하고 하나의 데이터베이스 서버는 하나의 "응용 프로그램"서버를 처리합니다. ("한 서버"를 "서버 클러스터"로 바꾸십시오). –

+0

한 편으로는 - 나중에 같은 네트워크에서 작동하는 것과 동시에 TCP와 UDP를 동시에 사용할 수 없다는 것을 기억합니다 ... 물론 포트 단위로만 구성 될 수도 있습니다. 나는 완전히 완전히 잘못 될 수 있습니다 :) – Scotty