თამაშის სერვერის ექსპლოიტი თითქმის ყოველთვის ბაგია თამაშში, მის მოდინგის ფრეიმვორკში ან პლაგინში, რომელსაც ააქტიურებს შეყვანა, რომლის გაგზავნაც მოთამაშეს უფლება აქვს: სპეციალურად აწყობილი პაკეტი, ზედმეტად დიდი ნივთი, ჩატის შეტყობინება, ქსელური შეტყობინება, რომელიც პლაგინს არასოდეს შეუმოწმებია. თამაშს თავად ვერ დააპატჩავ, ამიტომ დაცვა იმ რამეების მოკლე სიაა, რასაც აკონტროლებ: გაუშვი მიმდინარე, დაპატჩული build და ფრეიმვორკი, გამოიყენე სერვერის პროგრამა, რომელიც შეყვანის ლიმიტებს ამატებს (Minecraft-ზე სტანდარტული მაგალითი Paper-ია), მოაშორე პლაგინები, რომლებიც კლიენტს ენდობა, თამაშის პორტის გარდა არაფერი გამოაჩინო, და შეინახე საკმარისად ახალი backup-ები, რომ დუპი ან კრაშის დროს მოხდენილი უკან დაბრუნება წუთები დაგიჯდეს და არა დღეები.
ეს სტატია განიხილავს ექსპლოიტების სახეებს, რომლებსაც სერვერის მფლობელები რეალურად ხვდებიან, შემთხვევებს, რომელთა სახელით ცოდნაც ღირს, პარამეტრებს, რომლებიც მათ ასუსტებს, და როგორ უპასუხო, როცა ვინმე შენს სერვერს განზრახ აკრაშებს. კლიენტის პროგრამით ჩიტინგი სხვა პრობლემაა და მას ხსნის ჩიტერებთან გამკლავება და ბანების სიები.
ექსპლოიტების სახეები და რომელია შენი გასასწორებელი#
| სახე | რა ხდება | ვინ ასწორებს |
|---|---|---|
| კრაშის ექსპლოიტი | აწყობილი შეყვანა სერვერს კლავს ან ყინავს | თამაშის დეველოპერი ან სერვერის fork |
| ლაგ-მანქანა | ლეგიტიმური მექანიკა, აწყობილი tick-ის გადასატვირთად | შენ: ლიმიტები და წესები |
| დუბლირება | ნივთები კოპირდება დროის ან ლოგიკის ბაგით | დეველოპერი; შენ ზიანს ზღუდავ |
| პლაგინის ლოგიკის ექსპლოიტი | პლაგინი ენდობა შეყვანას, რომელიც უნდა შეამოწმოს | პლაგინის ავტორი, ან შენ შლი |
| დისტანციური კოდის შესრულება | შეყვანა სერვერზე კოდს უშვებს | დეველოპერი, სასწრაფოდ |
| ავთენტიკაციის ან პროქსის გვერდის ავლა | ვინმე სხვის სახელით შემოდის | შენ: კონფიგურაცია |
| ღია ადმინ-ზედაპირი | RCON, ვებ-პანელები ან ბაზები ხელმისაწვდომია | შენ: კონფიგურაცია |
ქვედა სამი სტრიქონი ის ადგილია, საიდანაც ნამდვილი ზიანის უმეტესობა მოდის, და ამავე დროს ისინია, რომლებსაც დღესვე გაასწორებ ვინმეს ლოდინის გარეშე. ზედა სტრიქონები დამოკიდებულია იმაზე, რამდენად სწრაფად აპატჩავს დეველოპერი და რამდენად სწრაფად ანახლებ შენ.
Log4Shell: შემთხვევა, რომელიც ყველა სერვერის მფლობელმა უნდა იცოდეს#
2021 წლის დეკემბერში Java-ს ლოგირების ბიბლიოთეკა Log4j-ის მოწყვლადობა, აღრიცხული როგორც CVE-2021-44228 და მეტსახელად Log4Shell, Minecraft-ის ჩატით ექსპლუატირებადი აღმოჩნდა. მოთამაშე აგზავნიდა შეტყობინებას სპეციალურად აწყობილი სტრიქონით; სერვერი შეტყობინებას თავის ლოგში წერდა; Log4j სტრიქონს ინტერპრეტირებდა როგორც ინსტრუქციას, დისტანციური მისამართიდან კოდი ჩამოეტვირთა და გაეშვა. ნებისმიერი მოწყვლადი სერვერი, რომელიც ჩატს ლოგავდა, შეიძლებოდა დაეპყრო ნებისმიერს, ვისაც შესვლა შეეძლო, და ასევე მოწყვლადი კლიენტები, რომლებიც შეტყობინებას აჩვენებდა.
Mojang-მა გამოუშვა 1.18.1 გასწორებით და ძველი ვერსიებისთვის შემარბილებელი ზომები გამოაქვეყნა: JVM-ის ფლაგი 1.17-ისთვის და ლოგირების შემცვლელი კონფიგურაციის ფაილები 1.7-იდან 1.16.5-მდე. Paper-მა და სხვა სერვერულმა პროგრამებმა თავიანთი build-ები რამდენიმე დღეში დააპატჩეს.
მდგრადი გაკვეთილები:
- ძველი ვერსიები უსაფრთხო არ არის იმიტომ, რომ ძველია. სერვერი, რომელიც ჯერ კიდევ გასწორებამდელ Minecraft-ის ვერსიას უშვებს, დაუპატჩავ build-ზე, გამოქვეყნებული შემარბილებელი ზომის გარეშე, დღესაც მოწყვლადია. თუ მოდპაკისთვის ძველ ვერსიას უშვებ, დარწმუნდი, რომ სერვერის პროგრამის build 2021 წლის დეკემბრის შემდეგაა გამოშვებული ან შემარბილებელი ზომა ადგილზეა.
- ლოგირება შეყვანის დამუშავებაა. მოწყვლადი კოდი თამაშის ლოგიკაში საერთოდ არ იყო. ის იყო ბიბლიოთეკაში, რომელსაც თამაში ტექსტური ფაილების ჩასაწერად იყენებდა.
- სისწრაფეს მნიშვნელობა აქვს. ექსპლუატაცია გამოქვეყნებიდან რამდენიმე საათში დაიწყო. სერვერები, რომლებიც იმავე დღეს განახლდა, კარგად იყო; სერვერები, რომელთა მფლობელებიც შვებულებაში იყვნენ, არა.
Minecraft-ის ვერსიის განახლებები ხსნის დაპატჩულ ვერსიაზე გადასვლას სამყაროს დაკარგვის გარეშე.
Minecraft: პაკეტების ლიმიტები, ზედმეტად დიდი ნივთები და პროქსის გვერდის ავლა#
Minecraft ყველაზე მეტად ექსპლუატირებული თამაშის სერვერია იმ მარტივი მიზეზით, რომ ყველაზე გავრცელებულია, vanilla კი კლიენტებს უფრო მეტად ენდობა, ვიდრე უნდა. Paper ნაწილობრივ ამის გასასწორებლად არსებობს.
პაკეტების ლიმიტები. შეცვლილ კლიენტს წამში ათასობით პაკეტის გაგზავნა შეუძლია, რამაც vanilla-ზე შეიძლება სერვერი გააჩეროს. Paper-ს აქვს პაკეტების შემზღუდველი config/paper-global.yml-ში:
packet-limiter: all-packets: action: KICK interval: 7.0 max-packet-rate: 500.0ნაგულისხმევი პარამეტრი აგდებს კლიენტს, რომელიც შვიდი წამის განმავლობაში საშუალოდ წამში 500 პაკეტზე მეტს აგზავნის, რასაც არცერთი ლეგიტიმური კლიენტი არ აკეთებს. არსებობს ცალკეული პაკეტის ტიპების პარამეტრებიც იმ ტიპებისთვის, რომლებიც კონკრეტულად ბოროტად გამოიყენეს. სტრუქტურა Paper-ის ვერსიებს შორის შეიცვალა, ამიტომ შეამოწმე ის ფაილი, რომელიც შენმა სერვერმა შექმნა, და ძველ გზამკვლევს ნუ დააკოპირებ.
ზედმეტად დიდი ნივთები და book ban-ები. ნივთები უზარმაზარი რაოდენობის მონაცემებით - კლასიკური შემთხვევა გრძელი გვერდებით სავსე წიგნები იყო - შეიძლებოდა ზანდუკში ჩადებულიყო ისე, რომ chunk-ის ჩატვირთვა ყველა ახლოს მისულ მოთამაშეს თიშავდა, ან მოთამაშის მონაცემები იმდენად გაბერილიყო, რომ ვეღარ შემოსულიყო. Paper ნივთების მონაცემებსა და წიგნების ზომას იმავე ფაილის პარამეტრებით ამოწმებს. დატოვე ეს ლიმიტები ნაგულისხმევ მნიშვნელობებზე, თუ კონკრეტულ პლაგინს მეტი არ სჭირდება.
პროქსის გვერდის ავლა. Minecraft-ის ყველაზე დამაზიანებელი "ექსპლოიტი" საერთოდ არ არის ბაგი. Velocity-ის ან BungeeCord-ის პროქსის უკან backend სერვერები online-mode=false-ით მუშაობს და მოთამაშეების ავთენტიკაციას პროქსის ანდობს. თუ backend-ის პორტი პირდაპირ ხელმისაწვდომია, ნებისმიერს შეუძლია მასთან დაკავშირება, თავი ნებისმიერ მოთამაშედ, მათ შორის ოპერატორად გაასაღოს, და backend მას დაუჯერებს. გამოსავალი კონფიგურაციაა:
- გამოიყენე Velocity
player-info-forwarding-mode = "modern"-ით და იგივე forwarding secret-ით backend-ებზე, რომ backend-მა უარყოს კავშირები, რომლებიც პროქსიდან არ მოსულა. - BungeeCord-ზე, რომელსაც ჩაშენებული ეკვივალენტი არ აქვს, გამოიყენე პლაგინი, როგორიცაა BungeeGuard, საერთო ტოკენის დასამატებლად.
- დარწმუნდი, რომ backend-ები ინტერნეტიდან ხელმისაწვდომი არ არის, სადაც ეს შეგიძლია.
Minecraft-ის Velocity პროქსის ქსელი სრულ მოწყობას შეიცავს.
ლაგ-მანქანები. Redstone საათები, ნივთების ფერმები და entity-ების გროვები, რომლებიც ლეგიტიმური მექანიკაა, მაგრამ სპეციალურად tick rate-ის დასაგდებად აწყობილი. Paper-ის entity-ების ლიმიტები და redstone-ის პარამეტრები ეხმარება; ასევე პლაგინები, რომლებიც chunk-ზე entity-ების რაოდენობას ზღუდავს, და წესები, რომლებიც ამბობს, რისი აშენება შეიძლება. რატომ ვარდება TPS და რა ქნა პროფაილერით დიაგნოსტიკას ხსნის.
Source თამაშები და Garry's Mod: სანდო შეტყობინებები#
Source ძრავის თამაშებზე თავად ძრავს Valve აპატჩავს, ხოლო რეალისტური ექსპლოიტის ზედაპირი სერვერის addon-ებშია.
Garry's Mod-ზე კლასიკური ექსპლოიტია net.Receive handler, რომელიც კლიენტს ენდობა. addon-ები კლიენტიდან სერვერზე შეტყობინებებს net ბიბლიოთეკით აგზავნის, ხოლო სერვერის handler-ი, რომელიც აკეთებს ყველაფერს, რასაც შეტყობინება ამბობს - ფულის მიცემა, entity-ის გაჩენა, მოთამაშის რანგის შეცვლა - ნებისმიერ კლიენტს Lua-ს რამდენიმე ხაზით შეუძლია გამოიძახოს. Garry's Mod-ის ექსპლოიტ-მენიუები ძირითადად პოპულარულ addon-ებში ცნობილი მოწყვლადი handler-ების კოლექციებია. უსაფრთხო handler-ი ამოწმებს ყველაფერს, რაზეც კლიენტს შეუძლია მოიტყუოს:
util.AddNetworkString("shop_buy")net.Receive("shop_buy", function(len, ply) if not IsValid(ply) or not ply:Alive() then return end if (ply.nextShopBuy or 0) > CurTime() then return end ply.nextShopBuy = CurTime() + 1 local id = net.ReadUInt(16) local item = SHOP_ITEMS[id] if not item then return end -- check price, distance to the shop NPC and permissions here, -- on the server, never trusting a value the client sentend)ყოველ დაყენებულ addon-ს აუდიტს ვერ გაუკეთებ, მაგრამ handler-ების მოძებნა და ნაკლებად ცნობილ addon-ებში მათი დათვალიერება შეგიძლია: grep -rn "net.Receive" garrysmod/addons. handler-ები, რომლებიც შეტყობინებიდან კითხულობს რაოდენობას, მოთამაშეს ან entity-ს და შემოწმების გარეშე მოქმედებს, ის არის, რაზეც უნდა ინერვიულო. Garry's Mod-ის სერვერის წარმადობა და Lua-ს შეცდომები შესაბამის დებაგინგს ხსნის.
Source თამაშებზე ზოგადად:
- სერვერი განახლებული შეინახე. SteamCMD-ის განახლებები ის გზაა, რომლითაც ძრავის გასწორებები შენამდე აღწევს, ხოლო მოძველებულ სერვერს კლიენტები ხშირად ისედაც უარყოფენ.
- გამორთე ის, რასაც არ იყენებ.
sv_allowupload 0უშლის კლიენტებს spray-ებისა და საკუთარი ფაილების ატვირთვას, რაც ისტორიულად კლიენტების დამაკრაშებელი აწყობილი ფაილების გზა იყო.sv_allowdownload 0, თუ კონტენტს FastDL-ით აწვდი. - SourceMod და Metamod მიმდინარე ვერსიაზე შეინახე. gamedata განახლებების შემდეგ ფუჭდება, ხოლო extension-ების ძველი build-ები ის ადგილია, სადაც native კოდის ბაგები ცხოვრობს.
Valve-მა 2020 წლის ბოლოს სერვერის query პროტოკოლიც შეცვალა და A2S_INFO-ს challenge ნაბიჯი დაუმატა, რომ სერვერების გამოყენება reflection შეტევებში გამაძლიერებლებად აღარ ყოფილიყო შესაძლებელი. მიმდინარე build-ებზე მყოფი სერვერები ამას ავტომატურად იღებს; ეს კიდევ ერთი მიზეზია, რომ ძველისძველი build-ები არ გაუშვა. Query პორტები და A2S პროტოკოლს ხსნის.
გადარჩენის თამაშები: დუპები და კრაშით გამოწვეული უკან დაბრუნება#
გადარჩენისა და sandbox თამაშებს ერთი საერთო ექსპლოიტის შაბლონი აქვთ, რომლის გაგებაც ღირს, რადგან მისი შესუსტება ყოველგვარი პატჩის გარეშე შეგიძლია.
ამ თამაშების უმეტესობა ტაიმერით ინახავს. თუ მოთამაშე მეგობარს ნივთს აძლევს, შემდეგ კი სერვერს მომდევნო შენახვამდე აკრაშებს, სამყარო ვაჭრობამდე ბრუნდება - მაგრამ თუ მოთამაშის მონაცემები ცალკე ან სხვა მომენტში ინახება, ერთ მხარეს შეიძლება ნივთი დარჩეს, მეორეს კი ისევ ჰქონდეს. სერვერის დაკრაშების ნებისმიერი საიმედო გზა დუბლირების მანქანად იქცევა.
რისი გაკეთებაც შეგიძლია:
- შეამცირე შენახვის ინტერვალი, სადაც თამაში ამის საშუალებას იძლევა. Valheim-ის
-saveinterval, Minecraft-ის autosave, Palworld და სხვებს ყველას აქვს. უფრო მოკლე ინტერვალი ფანჯარას ავიწროებს. - განმეორებული კრაშები ერთი და იმავე მოთამაშეების ახლოს შაბლონად მიიღე და არა ცუდ იღბლად. წაიკითხე ლოგში, რას აკეთებდნენ ისინი ყოველი კრაშის წინ.
- შეინახე აღდგენადი backup-ები ისეთი სიხშირით, რომ საჭიროების შემთხვევაში მთელი სამყარო დუპების ტალღამდე დააბრუნო.
- უყურე ეკონომიკას. იშვიათი ნივთის მოულოდნელი მომრავლება ის გზაა, რომლითაც დუპებს ჩვეულებრივ პოულობენ.
თამაშის სერვერის autosave ინტერვალები თითოეული თამაშისთვის ხსნის კომპრომისს შენახვის სიხშირესა და შენახვისას შეფერხებას შორის.
ღია ზედაპირები, რომლებსაც შენ აკონტროლებ#
ბევრი ინციდენტი, რომელსაც აღწერენ როგორც "სერვერი გატეხეს", თამაშის ექსპლოიტი საერთოდ არ არის. ეს სერვისებია, რომლებიც სუსტი ან ნაგულისხმევი მონაცემებით ხელმისაწვდომი დარჩა.
| ზედაპირი | ტიპური პორტი | რა უნდა გააკეთო |
|---|---|---|
| Source-ისა და Minecraft-ის RCON | 27015 TCP, 25575 TCP | გამორთე, თუ არ იყენებ, თუ იყენებ - გრძელი პაროლი |
| BattlEye RCon | მითითებულია BEServer_x64.cfg-ში | იგივე, რაც RCON-ზე |
| txAdmin-ის ვებ-პანელი | 40120 TCP | ძლიერი ადმინ-ანგარიშები ორფაქტორიანი ავთენტიკაციით |
| პლაგინების ვებ-პანელები და რუკები | სხვადასხვა | მიაბი იმას, რაც საჭიროა, მოითხოვე ავთენტიკაცია |
| პლაგინების მონაცემთა ბაზები | სხვადასხვა | არასოდეს იყოს საჯარო სუსტი მონაცემებით |
თითოეული მათგანი კარია, რომელიც თამაშის არცერთ ბაგზე არ არის დამოკიდებული. RCON უსაფრთხოდ დისტანციური კონსოლების ვრცელი ვერსიაა; თამაშის სერვერის პორტების ახსნა ხსნის, რისთვისაა თითოეული პორტი. RE:NODE-ზე ყოველ გეგმაში პორტების რაოდენობაა მითითებული, პორტებს კი Network ჩანართზე ამატებ ან შლი, ასე რომ პორტი, რომელიც არასოდეს გაგიხსნია, ხელმისაწვდომი არ არის - რაც "გახსენი მხოლოდ ის, რასაც იყენებ"-ს ნაგულისხმევ მდგომარეობად აქცევს და არა მოვალეობად.
პატჩინგი სერვერის გაფუჭების გარეშე#
მიმდინარე ვერსიაზე ყოფნა ცნობილი ექსპლოიტების წინააღმდეგ ყველაზე ეფექტური დაცვაა, ხალხი კი ამას იმიტომ არ აკეთებს, რომ განახლებები რაღაცებს აფუჭებს. რუტინა, რომელიც ორივე პრობლემას აგარიდებს:
- გამოიწერე რელიზის ჩანაწერები შენი თამაშის, სერვერის პროგრამის (Paper, SourceMod, txAdmin, Oxide ან Carbon) და შენი უდიდესი პლაგინებისთვის. უსაფრთხოების გასწორებები, როგორც წესი, მონიშნულია.
- გამიჯნე უსაფრთხოების განახლებები ფუნქციონალურისგან. პირველი სწრაფად დააყენე. მეორეს შეუძლია დაელოდოს, სანამ პლაგინები დაეწევა.
- შეამოწმე ასლზე. მეორე პატარა სერვერი იმავე ფაილებით გაფუჭებების უმეტესობას იჭერს - სატესტო სერვერის გაშვება production-ის გვერდით ხსნის მოწყობას.
- ყოველ განახლებამდე გააკეთე backup და დაბლოკე ის, რომ როტაციამ არ წაშალოს, სანამ შედეგს ამოწმებ.
- ვერსიები შეგნებულად დააფიქსირე. თუ ძველ ვერსიაზე დარჩენა გიწევს, იცოდე, რომელ გასწორებებს ტოვებ და გამოქვეყნებული შემარბილებელი ზომები გამოიყენე. ვერსიების დაფიქსირება და უკან დაბრუნება ხსნის, როგორ გააკეთო ეს განზრახ და არა დაუდევრობით.
როცა ვინმე შენს სერვერს აკრაშებს#
- იპოვე შაბლონი. წაიკითხე ლოგის ბოლო ხაზები ყოველი კრაშის წინ და კრაშის ანგარიში, თუ თამაში მას წერს. ერთი და იგივე მოთამაშის სახელი, იგივე ბრძანება, იგივე ადგილი ან იგივე ნივთი ყოველი კრაშის წინ - ეს კვალია. კონსოლის კითხვა დაგეხმარება.
- მოაშორე გამომწვევი. დაბლოკე მოთამაშე, თუ ეს განზრახაა. თუ გამომწვევი ნივთი ან chunk-ია, მოაშორე რედაქტორით ან სამყაროს ეს ნაწილი უკან დააბრუნე.
- დახურე ფანჯარა. დროებით სერვერზე whitelist ჩართე, თუ ადამიანს ჯერ ვერ ადგენ.
- განაახლე ან მოაშორე მოწყვლადი კომპონენტი - პლაგინის განახლება, ფრეიმვორკის განახლება ან addon-ის სრულად წაშლა.
- შეატყობინე ამის შესახებ დეველოპერს ან პლაგინის ავტორს პირადად, ლოგის ხაზებით, რომ ყველასთვის გასწორდეს. მეთოდი საჯაროდ ნუ გამოაქვეყნე.
FAQ#
შემიძლია თამაშის კრაშის ბაგი თავად დავაპატჩო?
თავად თამაშში, როგორც წესი, არა. Minecraft-ზე ისეთი სერვერული პროგრამა, როგორიცაა Paper, ბევრ vanilla ბაგს აპატჩავს, მოდიფიცირებულ პლატფორმებზე კი პლაგინს ზოგჯერ შეუძლია დაბლოკოს შეყვანა, რომელიც ბაგს იწვევს. სხვა შემთხვევაში ამის შესახებ ატყობინებ, საფრთხეს ზღუდავ და ანახლებ, როცა გასწორება მოვა.
ჩემი ძველი Minecraft სერვერი ჯერ კიდევ მოწყვლადია Log4Shell-ის მიმართ?
თუ ის 2021 წლის დეკემბრამდელ ვერსიას უშვებს სერვერულ პროგრამაზე, რომელიც მანამდეა აწყობილი, და გამოქვეყნებული შემარბილებელი ზომის გარეშე, კი. გამოიყენე გასწორების შემდეგ გამოშვებული სერვერის build ან შენი ვერსიისთვის Mojang-ის JVM ფლაგი თუ ლოგირების კონფიგი დააყენე.
ექსპლოიტების გასწორებები იგივეა, რაც ანტიჩიტი?
არა. ანტიჩიტი მოთამაშის კომპიუტერზე ჩიტ-პროგრამებს ეძებს. ექსპლოიტები იყენებს ლეგიტიმურ კლიენტებს, რომლებიც აგზავნის შეყვანას, რომელსაც სერვერი არასწორად ამუშავებს, ამიტომ ანტიჩიტი უჩვეულოს ვერაფერს ხედავს. გასწორებები პატჩებიდან, შეყვანის ლიმიტებიდან და კონფიგურაციიდან მოდის.
როგორ პოულობენ მოთამაშეები ექსპლოიტებს პლაგინებში?
ისე, როგორც შენ იპოვიდი: პოპულარული პლაგინების კოდის კითხვით, განსაკუთრებით სკრიპტულ პლატფორმებზე, როგორიცაა Garry's Mod და FiveM, სადაც ის უბრალო ტექსტია, და ნაპოვნის გაზიარებით. პოპულარული, მიტოვებული addon-ები ჩვეულებრივი სამიზნეებია.
ვუთხრა მოთამაშეებს ექსპლოიტის შესახებ, რომელიც გავასწორეთ?
უთხარი, რომ პრობლემა გასწორდა და რა შეიცვალა მათთვის, მაგალითად უკან დაბრუნება. მეთოდი გამოტოვე, განსაკუთრებით თუ სხვა სერვერები შეიძლება ჯერ კიდევ მოწყვლადი იყოს.




კომენტარები
სრულიად ანონიმურად: ანგარიშის, ელფოსტის და cookie-ის გარეშე. ინახება მხოლოდ სახელი, ტექსტი და დრო - სხვა არაფერი. ბმულების რაოდენობა ლიმიტირებულია.