Startseite > Sonstiges > Sonstige Tutorials > Hardened Call of Duty Server

Die Call of Duty Serie ist nicht nur erfolgreich und berühmt, sie hat auch einige Schwächen. Manche wurden von der 10 Jahre alten Quake Engine geerbt, andere sind Hausgemacht.

 

Genervte Call of Duty Server Administratoren sind allerdings nicht ganz hilflos. Wird der Server von der gelangweilten Problemgruppe immer wieder abgeschossen gibt es einige Gegenmaßnahmen.

Als alles erstes sollte man gründlich über die Möglichkeit des Patchens auf einen aktuellen Versionsstand nachdenken. Einige schlimme Fehler wurden vom Publisher mit einen folgenden Patch korrigiert, andere können nicht mehr erfolgreich benutzt werden wenn der Angreifer von Punkbuster gebannt wird.

 

Nur wenn ein offizieller Patch nicht hilft, oder aus anderen Gründen nicht einspielbar ist gilt es den Hebel zu finden den der Angreifer benutzt um ihn erfolgreich aussperren zu können. In fast allen Fällen hilft das Logfile des Servers console_mp.log wo in den Zeilen vor dem Crash ein Hinweis zu finden ist welche Art Angriff zum einsatz kam.

 

Call of Duty Serie
ExploitVerwundbares ProduktOffizieller Patch verfügbar?Ausnutzungspotential
InfostringCoD <=1.4
CoD:UO <=1.41
CoD2
CoD4
CoD5
1.5
1.51
q3infofix
medium
Befehl gcCoD <= 1.4
CoD:UO <= 1.41
 1.5 | q3lamefixPatch NOW
callvoteCoD <=1.5b
CoD:UO <= 1.51b
CoD2 <= 1.3
CoD4 <=1.7
CoD5 <=1.3
codmapboffix
codmapboffix
codmapboffix
q3cbufexec
q3cbufexec
medium
va()CoD1 <= 1.5b
CoD:UO <=1.51b
CoD2 <=1.3
CoD4 <= 1.7
CoD5 <=1.3


cod2vawo|cod2vawo10linux
cod4mapboffix nur für Win 1.7
cod4mapboffix
kein Exploit bekannt
sprintf()Cod <=1.5b
CoD:UO <= 1.51b
CoD2 1.0
1.5c
codmsgfix
1.1
Patch NOW
StatsCoD4 <= 1.5 Windows
CoD5 <=1.3
Patch 1.6
codstatsfix
medium
Download cfgCoDXNur wenn DL on+www aus.medium
openscriptmenu CoD2 <=1.3Scriptmenue FixPatchen wenn ausgenutzt
UDP Flood Alle Quake Basierte <=1.3getstatus FixPatch NOW

Grün = Exploit nicht bekannt
Gelb = Bei der Zielgruppe unbekannt, erfordert höheres Hintergrundwissen
Rot = Einfach auszunutzen, Exploit für Dumme im Umlauf.

 

Gegenmaßnahmen:

Infostring:

  • CoDmp.exe CoDuomp.exe CoD2mp.exe CoDMW.exe, CoDMW2.exe: q3infofix.lpatch
  •                 CoD_lnxded <=1.4 , CoDuo_lnxded <=1.41: q3infofix_linux.lpatch
  •                 CoD_lnxded 1.5b, CoDuo_lnxded 1.51b sind Immun.
  • For CoD 1.1d you must manually modify the byte at offset 0x37459 from byte 03 to 01
  • For CoD 1.1 try at offset 0x37419 from byte 03 to 01

gc:

  • game_mp_x86.dll, uo_game_mp_x86.dll, game.mp.i386.so, uo_game.mp.i386.so: Hexeditor

callvote:

va():


sprintf():

  • Linux: Per Iptables lange Pakete dropen: 
iptables -A INPUT -p udp --dport 28960 -m length --length 1000:2000 -j REJECT

Download

  • Ingame Download deaktivieren
  • Bekannte Dateinamen vermeiden (server.cfg, console_mp.log, etc..)

Scriptmenue

  • In der _menu.gsc die Funktion entfernen.
    if(response == "endround")
       {
        level thread [[level.endgameconfirmed]]();
        continue;
        }
  • (oder Fix fertig herunterladen)

 

UDP Flood

Query Limiter (Nur CoD4 - LINUX)

Fixed DLL (Nur CoD4 - Windows)

IPtables Drop (Alle Q3 Spiele - Linux)

/sbin/iptables -A OUTPUT -p UDP -m length --length 1162:1168 -j DROP
/sbin/iptables -A FORWARD -p UDP -m length --length 1162:1168 -j DROP
/sbin/iptables -A INPUT -p UDP -m length --length 1162:1168 -j DROP
/sbin/iptables -A INPUT -p UDP -m length --length 42 -m recent --set --name getstatus_cod
/sbin/iptables -A INPUT -p UDP -m string --algo bm --string "getstatus" -m recent --update --seconds 1 --hitcount 20 --name getstatus_cod -j DROP

Howto:

.lpatch Dateien: Ist eine .lpatch Datei für dein Problem und deine Call of Duty Version / Patchstand vorhanden, dann lade dir als erstes Aluigis Lame Patcher herunter.
Entpacke den Inhalt der lpatch.zip in einen Ordner deiner Wahl.
Als nächstes klicke mit der rechten Maustaste hier auf die passende .lpatch-Datei und wähle aus dem Kontextmenü "Ziel speichern unter" und speichere die .lpatch in dem selben Verzeichnis in das du gerade ebend die lpatch.zip entpackt hast.

Starte jetzt lpatch.exe durch einen Doppelklick.
Als erstes wird das Programm melden das es keine lpatch.dat gefunden hat, das ist richtig. Du willst die Datei von Hand auswählen und klickst jetzt deswegen [JA]
tl_files/special/aluigi/lpatch_not_found.gif

Nun wählst du die im Schritt oben passend heruntergeladene .lpatch Datei aus.

Datei auswählen


Das Programm analysiert jetzt die Datei und gibt ggf noch weitere Infos aus wie die zu patchende Datei, Art des Patches etc. Einfach immer schön ok klicken bis zu der Aufforderung die zu patchende Datei auszuwählen.
Anhand der .lpatch Datei weiß das Programm im Regelfall bereits welche Datei in Frage kommt und zeigt dies unten bei "Dateityp" an. In dem Beispiel hier kommt die CoD2_mp.exe in Frage.
Navigiere durch das Verzeichnis zu dem Ort an dem deine CoD2_mp.exe liegt und wähle diese aus.

Datei auswählen

Nun prüft der lpatcher ob die ausgewählte Datei den verwundbaren Code enthält, und ob die .lpatch passend zur Version ist. Stimmt alles erscheint eine Meldung das Lpatcher jetzt bereit ist, und fragt ob du eine Sicherheitskopie der ausgewählten Datei anlegen möchtest. Dies ist natürlich sehr ratsam.

Ready

Drückst du jetzt Ja wird eine Sicherheitskopie CoD2MP_s.exe.LPATCH_BACKUP angelegt und die CoD2MP_s.exe mit dem Patch verändert. Hat alles geklappt erscheint eine entsprechende Meldung.

Sucess

Wenn du fliesend Assembler sprichst kannst du dir den Report ansehen, ansonsten bist du jetzt fertig und kannst die gepatchte exe auf den Server hochladen und testen ob die Operation ein Erfolg war oder der Patient tot ist. Oder beides.
Sind mehrere Patche notwendig kannst du jetzt auch mit der nächsten .lpatch von vorne beginnen.

 

Hex Editor:
Der gc Bug ist nur dadurch zu entschärfen das der entsprechende Befehl auf dem Server deaktiviert wird. Dazu benötigst du einen Hex Editor, HxD kann man gut empfehlen.
Öffne in HxD die entsprechende Datei (siehe oben) z.B. für Call of Duty 1.1 die main/game_mp_x86.dll
suche jetzt den Bereich in dem die Serverbefehle abgebildet sind, eine Volltext-ASCII Suche nach vote (STRG-F, Datentyp="text String" ) bringt dich meistens in einen passenden Bereich. Es gehört etwas Erfahrung dazu auf Anhieb zu erkennen ob die Fundstelle richtig ist, es lässt sich aber nicht besser beschreiben.
Jeder "Befehl" fängt mit 2 Byte x00 an. Um einen Befehl wie gc jetzt zu deaktivieren genügt es einfach die Bytes mit x00 zu überschreiben.
Für das Beispiel ist der Offset 5E34.

markiert ist gc in Hex 00 00 (der "Trenner") 67 63

hxD

Nun eliminieren wir gc, denn auf dem Server wird dies nicht benötigt. Auf der "hex" Spalte den Cursor auf die "67" setzen und 00 00 eintippen.

Sucess

Datei speichern, hochladen, beten. Hast du alles richtig gemacht ist der Server jetzt gegen diesen Angriff geschützt.
Diese Methode hilft gegen den gc-Bug und gegen den sprintf() Bug sollte der codmsgfix.lpatch nicht erfolgreich sein (vsay deaktivieren).

 

Warnungen:

Keine der hier beschriebenen Methoden ist vom Publisher abgesegnet. Es ist mit allen möglichen und unmöglichen Nebenwirkungen zu rechnen, bei richtiger Anwendung der hier beschriebenen Methoden und bei falscher sowieso.
Arbeite immer mit Backups deiner Dateien.
Diese Methoden sind nur für einen reinen Server empfehlenswert. Veränderst du auf diese Weise die Dateien deiner Clientinstallation ist es möglich das Punkbuster dies für einen Cheat hält und du einen Kick / Bann riskierst. Außerdem sind Clients von keinem der hier aufgelisteten Probleme betroffen.


Alle Bug-Informationen, die .lpatch Dateien und der Lpatcher sind © Luigi Auriemma.
 Creative Commons License
Diese Anleitung ist unter einer Creative Commons-Lizenz und darf verlinkt, kopiert, verändert und verbreitet werden.
Irrtümer vorbehalten, keine Garantie auf nichts.
Kurz: Denk für dich selbst, Narr.