IdentityLogger से CSGO चीटर्स पर लगाम
(mobeigi.com)- Invex Gaming ने 2014–2019 के बीच ऑस्ट्रेलिया–न्यूज़ीलैंड आधारित CSGO कम्युनिटी सर्वर चलाए, और बार-बार ban evasion के कारण admins पर manual demo review का बोझ बढ़ता गया
- मौजूदा ban सिस्टम IP address और Steam ID को जोड़कर track करता था, लेकिन अगर चीटर दोनों को एक साथ बदल देता, तो server के लिए यह पुष्टि करना मुश्किल था कि वह वही player है या नहीं
- IdentityLogger ने CSGO के built-in VGUI browser की persistent cookies का इस्तेमाल कर Tracking ID save की, और IP address, Steam ID व Tracking ID को साथ में fingerprint के तौर पर इस्तेमाल किया
- फरवरी 2017 में सभी servers पर deploy होने के बाद, Steam ID और IP address दोनों बदल चुके players भी Tracking ID से फिर पहचाने गए और तुरंत ban कर दिए गए
- यह तरीका तब तक काम करता रहा जब तक Valve ने security मजबूत करने के लिए अक्टूबर 2017 में VGUI browser को हटा नहीं दिया; उसके बाद technique और plugin सार्वजनिक किए गए
Invex Gaming का संचालन और चीटिंग से निपटने का बोझ
- Invex Gaming 2014 से 2019 तक चला ऑस्ट्रेलिया–न्यूज़ीलैंड आधारित CSGO कम्युनिटी सर्वर था
- संचालन का काम काफी व्यापक था: forums और server infrastructure बनाए रखना, costs और sponsorships manage करना, player models जोड़ना, hitboxes ठीक करना, VIP system automate करना, custom plugins लिखना, game exploits व bugs patch करना, DDoS defense, और reports handle करना
- इनमें से बार-बार होने वाली चीटर्स की पहचान और banning सबसे उबाऊ और खर्चीला काम था
- automatic detection के लिए server-side code और Valve Anti-Cheat जैसे तरीके थे, लेकिन cheat developers और anti-cheat developers के बीच लगातार जवाबी कार्रवाई के कारण सभी cheats को automatically पकड़ना मुश्किल था
- आखिर में अंतिम उपाय CSGO demos देखना यानी manual analysis था, जहां admin को खुद तय करना पड़ता था कि player cheat कर रहा है या नहीं
IP address और Steam ID bans कहां टूटते हैं
- आम तौर पर ban किसी service तक access रोकने के लिए पहचानी जा सकने वाली जानकारी save करने का तरीका होता है
- Invex Gaming servers मुख्य रूप से दो identifiers इस्तेमाल करते थे
- IP address: ISP या server provider द्वारा दिया गया internet identifier
- Steam ID: Steam account से जुड़ा unique identifier
- जब कोई player ban होता, तो IP address और Steam ID ban list में save हो जाते, और बाद में उसी IP address या Steam ID से connect करने पर server से kick कर दिया जाता
- अगर कोई सिर्फ Steam ID बदलकर उसी IP address से लौटता, तो नए Steam ID को पुराने ban से जोड़कर फिर ban किया जा सकता था
- अगर कोई सिर्फ IP address बदलता और वही Steam ID इस्तेमाल करता, तो नया IP address भी पुराने ban से जुड़ जाता
- समस्या तब आती थी जब चीटर Steam ID और IP address दोनों एक साथ बदल देता था
- server के नजरिए से यह IP address और Steam ID का पहली बार दिख रहा combination था
- पुराने ban से जोड़ने का कोई तरीका नहीं था, इसलिए वह फिर से खेल सकता था
- दोबारा ban होने पर भी वह दोनों identifiers साथ बदलकर ban evade कर सकता था
- लोकप्रिय VPNs और उनसे जुड़े IP address lists बनाए रखने का विकल्प भी देखा गया, लेकिन लगातार maintenance burden के कारण operations team ने इसे पसंद नहीं किया
- बाद के analysis में पता चला कि सबसे कुख्यात चीटर के पास geographically distributed IP addresses और CSGO खरीदे हुए 87 से ज्यादा Steam accounts तक access था
IP address fingerprint से false positives की संभावना
- Steam ID player को uniquely identify करता है, लेकिन IP address unique identifier नहीं है
- अगर एक ही घर से दो भाई server पर connect करें और उनमें से सिर्फ एक cheat करे, तो same IP address के कारण दोनों के fingerprints उलझ सकते थे और दोनों ban हो सकते थे
- universities जैसी shared networks में भी समस्या होती है, जहां सारा external traffic एक ही IP address से बाहर जाता है
- एक व्यक्ति campus network से cheat करने पर ban होता है
- उसी network का इस्तेमाल करने वाले किसी दूसरे player का Steam ID और home IP address भी जुड़कर गलत तरीके से ban हो सकता है
- Invex Gaming ने ऐसे rare cases के लिए exception system बनाया और players को सलाह दी कि untrusted networks पर न खेलें
VGUI browser cookies को तीसरे identifier के तौर पर इस्तेमाल करना
- 2017 की शुरुआत में server पर ban evasion की समस्या काफी बिगड़ गई थी, और admins को लगातार demos manually review करने पड़ रहे थे
- मुख्य चुनौती यह थी कि Steam ID और IP address दोनों बदल जाने पर भी उसी player को पहचानना
- CSGO में server operators के लिए connection के समय MOTD दिखाने वाला in-game default web browser था, जिसे VGUI browser कहा जाता था
- VGUI browser server operators को player की screen पर कोई भी website खोलने देता था, और window को hide भी किया जा सकता था
- यह browser Steam cookies से pre-authenticated था, इसलिए Steam domain पर automatic login हो सकता था, और server operator द्वारा भेजे गए JavaScript का client-side execution भी allow करता था
- IdentityLogger का मुख्य आधार यह था कि VGUI browser cookies support करता था और वे sessions के बीच भी बनी रहती थीं
- tests में VGUI browser से save की गई cookies CSGO बंद कर फिर launch करने के बाद भी बची रहीं
- cookie expiry date की कोई limit भी नहीं दिखी, और 10 साल से ज्यादा expiry वाली cookies भी save की जा सकती थीं
- cookie data player की Steam installation directory के अंदर एक file में save होता था
- इस तरीके से हर player को Tracking ID नाम का तीसरा identifier दिया जा सकता था
- नए player जैसा दिखने के लिए Steam ID, IP address और Steam installation folder—तीनों बदलने पड़ते, और माना गया कि Steam installation folder तक बदलने वाला player शायद नहीं होगा
IdentityLogger implementation flow
- IdentityLogger IP address, Steam ID और Tracking ID के आधार पर players को fingerprint करने वाला integrated system है
- player server से connect करता है तो पहले database में ban check किया जाता है
- IP address, Steam ID और Tracking ID check किए जाते हैं
- अगर कोई मौजूदा ban मिलता है, तो player को server से kick कर दिया जाता है और नए identifiers को पुराने ban से जोड़ दिया जाता है
- जो player ban नहीं है, उसके लिए hidden VGUI browser window में एक secret web page खुलवाया जाता है
- request में authentication के लिए secret value डाली जाती थी, और VGUI browser requests client-side से बनती थीं लेकिन traffic HTTPS से encrypted रहता था
- PHP script जांचती है कि Tracking ID cookie पहले से मौजूद है या नहीं
- अगर नहीं, तो नई Tracking ID generate कर save की जाती है
- Tracking ID
TeStsCOhZO1TQsumJkDUOdMMo13ReRLEngrQTg7S49LKT2rBvgPhauzSYbegscOTजैसी 64-character random alphanumeric string होती है - cookie आखिरकार player की Steam installation directory में मौजूद
vgui.browser.cookies.datfile में save होती है
- Steam ID, IP address और Tracking ID player के server से connect करने पर हर बार database में save होते हैं
- यह database admins द्वारा player fingerprints investigate करने वाले web panel और Source-based games के ban management software पर आधारित modified SourceBans plugin में integrate किया गया
ban evasion रोकने का तरीका
- उदाहरण के लिए, कोई player पहली बार IP address
198.51.100.1, Steam IDSTEAM_1:1:1111से connect करता है, तो नई Tracking ID generate होती है - अगर यह player cheat करने पर ban होता है, तो IP address, Steam ID और Tracking ID तीनों ban database में चले जाते हैं
- बाद में वही player IP address
100.64.50.74, Steam IDSTEAM_1:1:3333से connect करता है, तो नया IP address और नया Steam ID ban check पास कर लेते हैं - लेकिन पहले से save की गई Tracking ID पिछले ban से जुड़ी होती है, इसलिए वह ban check पास नहीं कर पाता
- system तुरंत player को फिर ban कर देता है और नए IP address व नए Steam ID को पुराने ban से जोड़ देता है
- इसके बाद यह player कोई भी IP address या Steam ID इस्तेमाल करे, उसी Tracking ID के कारण connect करते ही ban हो जाता है
2017 deployment के नतीजे और public release
- testing के बाद Invex Gaming ने फरवरी 2017 में IdentityLogger को सभी CSGO servers पर deploy किया
- deployment के तुरंत बाद cheaters पर bans की संख्या काफी बढ़ गई
- लंबे समय से जाने-पहचाने और trusted community members में से कुछ के secret accounts पर cheat करने की बात भी सामने आई
- कुछ cheaters ने खुद पूछा कि Steam ID और IP address बदलने के बावजूद उन्हें ban evasion के तौर पर detect क्यों किया गया
- दूसरे server operators ने भी plugin में दिलचस्पी दिखाई, और कुछ ने पैसे की पेशकश भी की
- अगर technique widely known हो जाती, तो सिर्फ cookie file delete करके bypass किया जा सकता था, इसलिए implementation को admin team के अंदर secret रखा गया
- यह तरीका अक्टूबर 2017 में Valve द्वारा game security मजबूत करने की प्रक्रिया में VGUI browser को पूरी तरह हटाने तक काम करता रहा
- VGUI browser हटने के बाद technique सार्वजनिक की गई, और plugin भी open source के रूप में release किया गया
1 टिप्पणियां
Hacker News की राय
UT2004 में खिलाड़ियों को GUID (CD key hash) या IP से block किया जा सकता है, लेकिन Epic ने game को छोड़ दिया उसके बाद key generators बहुत आ गए, जिससे GUID ban बेअसर हो गया। आजकल VPN भी 2 डॉलर में मिल जाता है, इसलिए IP ban की भी बड़ी सीमाएं हैं
अभी इस्तेमाल हो रहा मुख्य समाधान है IP ban के साथ-साथ ज्ञात VPN subnet databases को firewall में डालकर VPN block करना, और कुछ खास system folder structures को scan करने जैसी मिलती-जुलती fingerprinting technique
यह Tremulous (ioquake3 fork) में इसलिए बनाया गया क्योंकि लोग IP ban को लगातार bypass कर रहे थे, लेकिन इसे दूसरे games में भी इस्तेमाल किया जा सकता है। यह मेरा project नहीं है, लेकिन मैं author को जानता हूं, और demand हो तो इसे किसी खास game या general-purpose use के हिसाब से fork करके modify भी किया जा सकता है
schachtmeister2 में
whois -10 "Hosting",whois -13 "VPN",whois +7 "residential"जैसी heuristics भी इस्तेमाल की जा सकती हैंअतिरिक्त: Git repository 502 return कर रही थी, यह देखकर मैंने admin से संपर्क किया
Online अब skill कम पड़ती है इसलिए नहीं खेलता, लेकिन जब करीब 30 मिनट खाली हों तो AI के खिलाफ जल्दी से एक match खेलना आज भी मजेदार लगता है
Server owner non-Steam accounts (pirated copies) को connect करने देता है, इसलिए Unreal के GUID की तरह SteamID ban पर भरोसा नहीं किया जा सकता। spoofed ID बदलना install folder के अंदर कहीं काफी गहराई में होता है, इसलिए थोड़ा झंझट भरा है, पर संभव है। यह game North Africa, पुराने Baltic क्षेत्र और आसपास के इलाकों, North और West Asia में काफी popular है, इसलिए इन players के बिना server खाली हो जाता है
इसलिए हम carrot और stick दोनों इस्तेमाल करते हैं। Steam players को लगभग तुरंत reload, कुछ aggressive automated moderation/kick features से छूट, reserved nickname और “VIP” tag मिलता है। यानी कुछ VPN keys की कीमत में legitimate advantage और game ownership मिल जाते हैं, और one-time cost सीधे developer को जाती है। या 5 हफ्तों तक हर हफ्ते कम से कम 1 game खेलकर और social media पर admins से संपर्क करके यह free में भी हो सकता है
stick वाले हिस्से में हम बस kick/ban नहीं करते, बल्कि जानबूझकर इतना परेशान करते हैं कि उन्हें साफ लगे कि वे welcome नहीं हैं और वे वापस आना न चाहें। जैसे disarm करके सबसे घटिया हथियार देना, map के बाहर या floor में फंसाने के लिए random teleport करना,
amx_rocketबार-बार चलाकर fireworks बनाना,amx_drugसे field of view को maximum करके drunk effect देना, और यह कहकर चिढ़ाना कि वे इतने low-skill loser हैं जिन्हें मजा लेने के लिए AI से अपने बदले game खिलवानी पड़ती हैकुछ amx plugins और commands ऐसे भी हैं जिन्हें “illegal” माना जाता है। आम तौर पर abuse की संभावना ज्यादा होने से लोग इन्हें पसंद नहीं करते, लेकिन ऐसी स्थितियों में ये useful हैं। खासकर
amx_execकाफी डरावना है, क्योंकि यह admin को client के in-game console तक सीधे access देकर arbitrary commands या settings चलाने देता हैउदाहरण के लिए
rate 1000,name iCaNtAiM,unbind all,bind y quit,fps_max 50जैसी commands से network speed खराब की जा सकती है, नाम बदला जा सकता है, key bindings मिटाई जा सकती हैं, default chat key को game quit से bind किया जा सकता है, और max FPS को इतना कम किया जा सकता है कि बहुत obvious न हो लेकिन परेशान करने लायक हो। Defaults वापस लाना settings file delete करके आसान है, लेकिन settings backup न हो तो यह बहुत frustrating हो सकता हैदिलचस्प बात यह है कि कई servers VIP advantages को 20 डॉलर प्रति माह तक में बेच रहे हैं। पहले मुझे झटका लगा था, लेकिन बाद में पता चला कि third-party server browser में ठीक-ठाक जगह दिखने के लिए काफी पैसे देने पड़ते हैं—एक तरह का shady cartel जैसा ढांचा—और income का बड़ा हिस्सा “boost” पर खर्च होता है
हमारे server owner ने दो महीने तक “boost” का payment रोक दिया तो average player count 14/32 से गिरकर 3/32 हो गया, और weekends पर जो peak आम तौर पर 28/32 तक भर जाती थी, वह Friday night को किस्मत अच्छी हो तो 12/32 तक रह गई। जैसे ही फिर से payment किया, player count उछल गया—पागलपन वाली बात यह है कि इसकी cost 180 डॉलर प्रति माह है
Operations में शामिल होने से पहले मुझे लगता था कि एक मजेदार deathmatch, अच्छी moderation, कम latency, high-performance server, और game के दूसरे सबसे popular map के remake/remix के लिए dedicated server होना popular होने के लिए काफी होगा। लेकिन लगता है ज्यादातर players को दिखने के लिए मौजूदा gatekeepers को बहुत ज्यादा पैसे देने पड़ते हैं
यह web scraper को यह बता देने जैसा है कि उसका IP ban हो गया है—ऐसी strategy से कुछ हासिल नहीं होता। बेहतर तरीका है scraper IP को backend में mark करके pages में random तरीके से मिलाया हुआ garbage data ही देना
मुझे cheat detection भी वैसी ही लगती है। Ban करने से सिर्फ strategic advantage खोता है, और IP, CD key या account बदलना cheaters के लिए बस छोटी सी असुविधा है
यह professionally और personally दोनों तरह से मेरी रुचि का क्षेत्र है, इसलिए अगर suggestions चाहिए हों तो मैं मदद कर सकता हूं
मुझे अच्छा लगा कि author ने example IPv4 address के लिए RFC5737 का TEST-NET-2 address इस्तेमाल किया: “An example of an IPv4 IP address is 198.51.100.1.”
https://www.rfc-editor.org/rfc/rfc5737
करियर में कभी न कभी सर्वर-साइड-ओनली anti-cheat पर ज़रूर काम करना चाहता हूं। इस तरह की प्रतिद्वंद्वी हथियारों की दौड़ पर लंबे समय तक गहराई से सोचना वाकई मज़ेदार लगता है
क्योंकि players की संख्या developers से बहुत ज़्यादा होती है, यह हारने वाली लड़ाई है
सभी महत्वपूर्ण actions को सर्वर पर ले जाना न आसान है न सस्ता, लेकिन cheats को अधिक समग्र तरीके से रोकने का यही तरीका है
इसमें अगर physics-heavy games, 120 tickrate (अतिरिक्त testing के बाद शायद और बढ़ाया जा सकता है), बारीक controls पर आधारित action combat, और MMORPG-scale expansion का लक्ष्य जोड़ दें, तो यह सचमुच कठिन हो जाता है
अब YOLO-based aimbots हैं, जिससे दुनिया कहीं ज़्यादा जटिल हो गई है, और व्यावहारिक निष्कर्ष यह है कि anti-cheat आखिरकार टूट सकता है
client side पर ऐसे private binaries बनाए जा सकते हैं जिनके hashes प्रमुख anti-cheat services में registered न हों, और server side पर आप केवल वही देख सकते हैं जो game rules के तहत allowed है
superhuman reaction speed को रोकने का कोई mechanism नहीं है, और शायद होना भी नहीं चाहिए, इसलिए यह अब अनसुलझी समस्या बन जाती है
इसलिए community judgment की ज़रूरत पड़ती है, लेकिन यह भी उबाऊ है। Counter-Strike में अच्छे players को cheater कह देना पुरानी और साथ ही दिलचस्प समस्या है
कुछ साल पहले मैंने कई Battlefield games खरीदे थे, लेकिन speedhack और aimbot cheaters की वजह से उनमें से कई खेलना संभव नहीं था। लगा कि server side पर इन्हें आसानी से detect किया जा सकता है, फिर कोई कुछ क्यों नहीं कर रहा
अगर वेबसाइट down है या slow है और आप लेख पढ़ना चाहते हैं, तो पूरे page का screenshot मौजूद है: https://i.imgur.com/SPp6IHX.jpeg
मुझे नहीं पता था कि इस लेख पर इतना traffic आएगा
यह लेख cheaters को रोकने, यानी cheat detection, के बारे में नहीं है, बल्कि banned cheaters के बार-बार लौट आने वाली ban evasion को रोकने के बारे में है
खासकर आजकल DMA जैसे hardware cheats भी मौजूद हैं, ऐसे में cheat detection पूरी तरह अलग game है। निजी तौर पर मुझे लगता है कि ban evaders को रोकने के सबसे प्रभावी तरीकों में से एक है game के लिए सच में पैसे लेना
CS:GO players को सैकड़ों डॉलर की skins वाले account के ban हो जाने से भी खास फर्क नहीं पड़ता। या तो उन्होंने किसी और का compromised account लगभग 5 डॉलर में खरीदा होता है, या वे वैसे भी cheat service के लिए महीने के 30 डॉलर दे रहे होते हैं
frequent cheaters और pay-to-win whales के बीच बहुत बड़ा overlap होने की संभावना लगती है
game में cheaters कम करने का अधिक भरोसेमंद तरीका cheater honeypot है। cheater को ban करके नया account खरीदने पर फिर track करने के बजाय, उसे चुपचाप ऐसी matchmaking में डाल दें जहां सिर्फ दूसरे cheaters, जानबूझकर परेशान करने वाले bots, fake latency, और कभी-कभी key input ignore करने जैसी चीज़ें हों
उनका मज़ा खराब कर दें, तो वे game खराब करना बंद कर देंगे। तब information war उलटी दिशा में चलेगी: नया account खरीदना है या नहीं, यह जानने के लिए पहले उन्हें यह पता लगाना होगा कि वे नियमित रूप से cheaters या bots के साथ खेल रहे हैं या नहीं
बेशक, किसी दिन कोई ढीला supplier TPM keys leak कर दे, तो forgery संभव हो सकती है
बड़े देशों के players अक्सर छोटे देशों में मौजूद community feeling को miss कर देते हैं
अगर रोज़ game खेलने वालों की संख्या बस 3–4 servers जितनी हो, तो लोग जल्दी ही एक-दूसरे को जानने लगते हैं, और इससे jokes और fun बहुत बढ़ जाता है
यह उन करोड़ों players वाले games से कहीं बेहतर है, जहां एक match में मिले व्यक्ति को शायद फिर कभी न देखें। इसी वजह से मुझे community-run servers वाले games भी पसंद हैं
कौन online है, और मुख्य रूप से मेरा connection कितना अच्छा है, इसके आधार पर मैं बार-बार उसी server में जाता था
“अगर कोई दूसरे Steam ID से connect करे, लेकिन पहले से banned IP address इस्तेमाल कर रहा हो, तो उसे फिर ban कर दो” वाला तरीका तब तक ठीक काम करता है, जब तक यह समझ में न आ जाए कि CGNAT और IP address rotation की वजह से innocent players सज़ा पा सकते हैं
cheaters आम तौर पर जानते हैं कि router से नया IP कैसे request करवाना है, और वह IP बाद में किसी और को assign हो जाता है
हालांकि यह काफी rare था, और कई महीनों में reported cases उंगलियों पर गिनने लायक थे। अगर server और लोकप्रिय होता, तो यह बहुत अधिक बार देखने को मिलता
“मैंने समाधान और techniques सिर्फ UK में मौजूद एक दूसरे server operator के साथ share कीं, जिस पर मैं पूरी तरह भरोसा करता था” तो शायद वह हम ही थे
आखिरकार इसे दूसरे fingerprinting signals के साथ combine किया गया, लेकिन VGUI का उपयोग करने वाला तरीका हैरानीजनक रूप से effective था। मुझे याद है कि 2018 के आसपास web browser हटा दिया गया था, जो अफसोस की बात थी। server के साथ integrate होने वाले custom skill trees या मज़ेदार integrations बनाए जा सकते थे, इसलिए यह बहुत शक्तिशाली था
“ट्रैफ़िक खुद HTTPS से encrypted था, इसलिए Wireshark जैसे packet sniffing tools इस्तेमाल करने पर भी raw token नहीं मिल सकता” — इस बात के लिए, अगर built-in browser ने system proxy और system certificate list इस्तेमाल की होती, तो Fiddler या Burp Suite जैसे tools से HTTPS को decrypt करना बहुत आसान होता
request भी दूसरी requests के बीच सामान्य तरीके से छिपी रहती है, और वे requests अपेक्षित होती हैं। आम तौर पर MOTD request तो होना ही है, इसलिए वह अजीब नहीं लगती
जब workaround local file हटाने जितना कहीं ज़्यादा सरल हो, तब actual request ढूँढने और Fiddler या Burp Suite configure करने की तुलना में यह तरीका काफ़ी अच्छी तरह काम कर गया
ज़रूरत से ज़्यादा design करने की ज़रूरत नहीं है
कुछ clicks लगते हैं, और इस्तेमाल हो रहे TLS के आधार पर हर connection के लिए करना पड़ सकता है, लेकिन यह इतना मुश्किल नहीं है
“patent लेना चाहिए था” यह मज़ाक है, यह समझता हूँ, लेकिन अगर patent लिया होता तो वह technique publicly disclose करनी पड़ती और वह तुरंत बेकार हो जाती
फिर भी इससे लेख की value बिल्कुल कम नहीं होती। पढ़कर मज़ा आया