ฉันจะป้องกันการปลอมแปลงตัวตนในเกมที่มีผู้เล่นหลายคนได้อย่างไร


9

ฉันกำลังคิดเกี่ยวกับลูกค้าที่แอบอ้างที่อยู่ IP หลอกลูกค้ารายอื่นว่าเป็นเซิร์ฟเวอร์ สิ่งนั้น (ฉันไม่ค่อยรู้เรื่องนี้มากนักดังนั้นถ้านี่ผิดทั้งหมดโปรดแก้ไขให้ฉันด้วย)

ฉันควรทำอย่างไรเพื่อป้องกันปัญหานี้ เพราะมันเป็นเกมเรียลไทม์ถ้าฉันต้องใช้การเข้ารหัสฉันจะใช้สิ่งที่รวดเร็วและปลอดภัยเหมือน RC4 ฉันควรเข้ารหัสข้อมูลแพ็คเก็ตด้วยคีย์ที่เซิร์ฟเวอร์มอบให้กับลูกค้าหรือไม่

ถ้ามันสร้างความแตกต่างฉันใช้ UDP

คำตอบ:


8

ทางออกหนึ่งที่เป็นไปได้คือการตรวจสอบผู้ใช้โดยใช้ TCP + TLS จากนั้นภายในช่องสัญญาณเดียวกันให้ใช้สิ่งต่าง ๆ เช่น Diffie-Hellman เพื่อต่อรองคีย์แบบสมมาตร สุดท้ายเข้ารหัสแต่ละแพ็คเก็ต UDP โดยใช้อัลกอริทึมแบบสมมาตรเช่น RC4

คุณในทางเทคนิคไม่จำเป็นต้องใช้ TCP + TLS เพื่อเจรจาคีย์สมมาตรถ้าคุณใช้สิ่งที่ต้องการSRP - เพียงแค่จำไว้ว่าสะอาด Diffie-Hellman เป็นความเสี่ยงที่จะโจมตี MITM

คุณสามารถไปให้ไกลกว่านั้นและใช้ฟิลด์ SEQ ที่กำหนดเองในแพ็คเก็ต UDP ของคุณ (ถ้าคุณใช้รูปแบบของ UDP ที่น่าเชื่อถือ) เพื่อใช้รูปแบบของการเข้ารหัสโหมดตอบโต้ - ซึ่งคุณเพิ่มหมายเลข SEQ ไปยังคีย์เจรจาสำหรับแต่ละแพ็คเก็ต ทำให้ยากที่จะเมานท์การโจมตีด้วยข้อความธรรมดา

อย่าปล่อยให้เซิร์ฟเวอร์ของคุณส่งกุญแจออกมาโดยเด็ดขาดเพราะเซิร์ฟเวอร์ 'หลอก' สามารถส่งกุญแจของตัวเองได้อย่างง่ายดาย เอาชนะวัตถุประสงค์ของโครงร่างการเข้ารหัสทั้งหมดของคุณ วิธีเดียวที่มั่นใจได้คือการใช้ TLS หรือความรู้ร่วมกัน (เช่นรหัสผ่าน / แฮช)


คุณช่วยอธิบายได้อย่างแม่นยำว่าจะปิดช่องโหว่ใด? ฉันเคยได้ยินเกี่ยวกับการปลอมแปลง IP และสิ่งที่คล้ายกัน แต่ฉันไม่ได้รับการศึกษาในหัวข้อ
liamzebedee

@ LiamE-p GameDev ไม่ใช่สถานที่สำหรับความผิดพลาดในการรักษาความปลอดภัย ฉันไม่มีเวลาให้ใคร โดยพื้นฐานแล้ว SRP และ TLS (อย่างใดอย่างหนึ่ง) ควรมีความปลอดภัยเท่ากับเว็บไซต์ธนาคารออนไลน์ของคุณ - SRP มากขึ้นด้วยโหมด CTR หากคุณต้องการคำอธิบายเพิ่มเติมคุณควรถามเว็บไซต์ Security SE
Jonathan Dickinson

นี่จะเป็นหัวข้อเกี่ยวกับความปลอดภัย SE ฉันจะตั้งค่าสถานะสำหรับ mod เพื่อโยกย้ายที่นั่น
Rory Alsop

8

ฉันมีพื้นหลังที่ห่างไกล (2 ปีที่แล้ว) ในการแฮ็คแพ็คเก็ตที่ยากที่สุดที่จะถอดรหัส (และสิ่งที่ฉันแนะนำให้คุณใช้) คือการใช้วิธีการเข้ารหัสคีย์สมมาตรซึ่ง Jonathan Dickinson อธิบายไว้สั้น ๆ คุณควรใช้ TCP + TLS ตามที่ได้กล่าวมา อย่างไรก็ตามเขากล่าวว่าลำดับการนับ

ฉันพบกับช่วงเวลาที่โปรแกรมเมอร์ "ระบบแฮ็คหลักฐาน" ถูกหัวหมุนเพราะพวกเขามีระบบการนับที่แปลกพอที่ฉันสามารถถอดรหัสได้โดยไม่ต้องมีความรู้ในการเขียนโปรแกรมและตรรกะพีชคณิตในปีแรก ตราบใดที่คุณเลือกวิธีการเรียงลำดับที่เหมาะสมเป้าหมายของคุณควรได้รับข้อมูลตรงตามที่คาดหมายหมายความว่าคุณควรใช้ TCP สำหรับการดำเนินการที่ปลอดภัยที่สุด

กลับไปสู่ ​​"ในประสบการณ์ของฉัน" หนึ่งระบบที่ฉันพบว่าทำงานได้อย่างน่าอัศจรรย์ เมธอดตามลำดับตามเวลาที่ส่งและเวลาที่คาดไว้ เนื่องจากแพ็กเก็ตจะต้องได้รับตามลำดับที่เหมาะสมเสมอการปลอมแปลงแพ็กเก็ตนั้นแทบจะเป็นไปไม่ได้เนื่องจากฉันไม่สามารถคาดการณ์ได้ว่าจะส่งแพ็กเก็ตและเมื่อใดที่คาดหวัง (ระหว่างแพ็กเก็ตหนึ่งและอีก)

คำตอบสั้น ๆ

กล่าวโดยย่อ: แต่ละโครงสร้างของแพ็กเก็ตจะมีการประทับเวลาเหมือนเมื่อมันถูกส่งลงไปที่มิลลิวินาที นั่นเป็นเรื่องง่ายและเป็นเรื่องง่ายที่จะตรวจสอบว่าเวลาเป็นก่อน / หลังเวลาอื่น เหตุผลที่ทำให้รู้สึกดีเป็นเพราะเซิร์ฟเวอร์อาจยังคงได้รับแพ็กเก็ตตามลำดับการปลอมแปลงโดยไม่มีเวลาสำหรับการตรวจสอบ

เห็นได้ชัดว่านี่ไม่ใช่วิธีการต่อเนื่องหรือแม้แต่วิธีที่ดีที่สุด เป็นเพียงหนึ่งเดียวที่ฉันพบว่าทำงานได้ดีมาก เมื่อรวมกับ TCP + TLS คุณไม่ควรมีปัญหามากเกินไป


ปัญหาเกี่ยวกับเกมคือสิ่งต่าง ๆ เกิดขึ้นในระดับมิลลิวินาทีย่อย
Jonathan Dickinson

@JonathanDickinson นั่นเป็นความจริงทั้งหมด แต่การใช้ UDP และเมื่อใช้ TCP โดยเฉพาะอัลกอริทึมการคำนวณแบบ Dead Dead ควรใช้สำหรับมิลลิวินาทีย่อยและแม้กระทั่งการดำเนินการหลายมิลลิวินาที นั่นคือเพื่อช่วยในเรื่องความเร็วภาพและบางสิ่งอยู่เบื้องหลัง (ความเร็วส่วนใหญ่เกี่ยวข้องกับ)
Joshua Hedges

6
ฉันเดาว่าท้ายที่สุดแล้วมันเป็นเกมและไม่ใช่ระบบควบคุมดาวเทียมเรย์ +1
Jonathan Dickinson

4

โดยส่วนตัวฉันจะไม่ไปเร็วเกินไป แม้ว่าคุณจะเข้ารหัสแพ็คเก็ตของคุณอย่างโจนาธาน แต่แฮ็กเกอร์อย่างพี่ชายของฉันจะเข้าถึงข้อมูลแพ็คเก็ตก่อนที่มันจะถูกเข้ารหัส หากผู้ใช้ที่ประสงค์ร้ายต้องการพวกเขาจะพบวิธี

ขณะนี้ไม่ได้มีวิธีสำหรับนักพัฒนาอินดี้ที่จะลดความเสียหายที่ผู้ใช้ประสงค์ร้ายสามารถทำได้ คุณควรเข้ารหัสแพ็กเก็ตขาออกของคุณ แต่นั่นจะหยุดการโจมตีบางประเภทเท่านั้นอย่าหลอกตัวเองว่าคิดว่าเป็น "แฮ็คพิสูจน์" หากต้องการปิดแฮ็กเกอร์จริงๆให้มอบการควบคุมการเปลี่ยนเกมให้น้อยที่สุดเท่าที่จะทำได้ หนึ่งใน MMO ขนาดใหญ่เหล่านี้มีไว้เพื่อให้ลูกค้าบอกเซิร์ฟเวอร์ว่าพวกเขาได้รับ XP เท่าใด คาดเดาสิ่งที่เกิดขึ้นที่นั่น? อย่าทำอย่างนั้น ให้ลูกค้าบอกเซิร์ฟเวอร์ว่าพวกเขาต้องการเสกคาถาพิเศษบางอย่างบนสิ่งมีชีวิตแล้วปล่อยให้เซิร์ฟเวอร์แก้ไขการกระทำแล้วเพิ่ม XP เมื่อสิ่งมีชีวิตนั้นตาย ไคลเอนต์ควรผอมเทอร์มินัลที่สามารถส่งและรับคำสั่งและสามารถทำการคาดการณ์บางอย่าง (ถ้าจำเป็น)เกมและตอบสนองต่อคำสั่งที่ส่งมาจากลูกค้า

บริษัท เกมขนาดใหญ่ใช้ข้อมูลข้างต้นเพิ่มเติมจากVACหรือPunkBusterเพื่อป้องกันแฮ็กเกอร์ที่รู้จักไม่ให้รบกวนลูกค้าที่จ่ายเงิน การทำงานของมาตรการรักษาความปลอดภัยเหล่านี้ถูกเก็บเป็นความลับ แต่ฉันรู้วิธีหนึ่งที่ใช้: พวกเขาสแกนแอปพลิเคชันที่รันอยู่ในปัจจุบันและเปรียบเทียบกับรายการแฮ็กที่รู้จัก เมื่อคุณถูกโกงคุณจะไม่สามารถเข้าร่วมเซิร์ฟเวอร์ที่ปลอดภัย VAC / PunkBuster

ที่เกี่ยวข้อง: ตรรกะของเกมบนเซิร์ฟเวอร์! ดีหรือไม่ดี

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.