Hallo zusammen.
Ich habe ein multiplayer Java-Spiel programmiert. Bisher konnte ich es
jedoch nur vom eigenen Computer aus testen. Um es auch über zwei
Computer spielen zu können oder mehr, müsste ich ja einen Port
freischalten am Router (und PC?)?
Nun habe ich Bedenken bezüglich der Sicherheit, da auch ein Unternehmen
im selben Netz läuft.
Welche Gefahren bestehen bei der Öffnung eines Portes? Wie ich es bisher
gelesen habe gibt es nur Gefahren, wenn ein Programm den entsprechenden
Port auf dem Computer verarbeitet. Stimmt das? Also wäre der Computer
nur bedroht, während mein Server läuft?
Für die Kommunikation werden Objekte versendet welche das jeweilige
Protokoll darstellen. Wie müsste Programmiert werden, um diese Gefahr
auszuschliessen? Oder ist das gar nicht möglich?
Ja, sind einiges an Fragen... Und ich bin mir darüber bewusst, dass es
auch einiges unter Google zu dem Thema zu finden gibt allgemein. Doch wo
nun genau die Gefahren liegen und ob sich die verhindern lassen usw habe
ich noch nicht herausfinden können.
Liebe Grüsse Fritz
Hallo Fritz,
prinzipiell hast Du recht.
Vorweg, Du hast eine sogenannte öffentliche IP-Adresse (vor dem Router),
die Dein Router von Deinem Internetprovider bekommt und mehrere private
IP-Adressen (hinter dem Router) z.B. 192.168.0.1, 192.168.0.10 usw. die
Du selber vergeben kannst.
Freund, die mit Deinem Rechner kommunizieren wollen, müssen also Deine
öffentliche IP-Adresse kennen. Die IP-Adresse wird aber idR. alle 24
Stunden von Deinem Provider geändert, die neue IP-Adresse müßtest Du
dann immer Deinen Freunden bekanntgeben. Um das zu umgehen gibt es
Anbieter wie z.B. DynDns.
Wenn Du jetzt einen Port z.B. 12345 TCP/IP an Deinem Router öffnest,
dann sagst Du ihm auch an welche private IP-Adresse (also z.B.
192.168.0.10) die Anforderung geschickt werden soll. Das heißt, alle
Anfragen von "draußen", also an die öffentliche IP-Adresse über den Port
12345 TCP/IP werden zu dem Gerät mit dieser IP-Adresse geschickt. Andere
Rechner in dem Netzwerk können nicht über diesen Port erreicht werden.
Wenn Du eine Firewall auf deinem Rechner hast, dann mußt Du bei dieser
auch den Port 12345 TCP/IP öffnen (zulassen), damit die Anfragen von
"draußen" auch Deinen Rechner erreichen können.
Damit Dein Rechner auch auf diese Anfrage reagiert, mußt Du einen
sogenannten LISTENER auf Deinem Rechner laufen haben, den Du in Deinem
Java-Spiel festgelegt hast und der nur aktiv ist, wenn Dein Spiel auch
läuft. Ist dieser LISTENER nicht vorhanden, reagiert auch niemand auf
die Anfrage von "draußen".
Was Dein Programm jetzt an Möglichkeiten zuläßt, ist dann entscheidend
was ein möglicher Angreifer alles bewirken kann, also welche
"Freiheiten" Deine Objekte haben.
Theoretisch sollte Dein Netzwerk damit "sicher" sein, aber man weiß ja
nicht was im kranken Hirn eines Cyberkriminellen so alles umher
geistert.
Gruß
Andreas
Ich möchte noch etwas differenzierter darauf eingehen:
Wenn ich dich richtig verstehe, gibt es auf beiden Rechner zwei
verschiedene Arten: Einmal eine eigehende und einmal eine ausgehende
Verbindung.
Die ausgehende Verbindung macht häufig keine Probleme, da viele
Firewalls ausgehende Verbindung pauschal zulassen. Wenn das nicht der
Fall ist, kann man natürlich versuchen einen Port zu wählen, der schon
bereits für andere Zwecke verwendet wird (z.B. HTTP 80, sofern kein
Proxy dazwischen hängt).
Dadurch, dass viele Router NAT implementieren, kann normalerweise keine
Verbindung von draussen zu deinem PC hergestellt werden. Dazu musst du
eine Firewall Regel einbinden, der festlegt, wohin die externe Anfrage
intern umgeleitet werden soll. Diese Regel kann eine Sicherheitslücke
darstellen, da jetzt von aussen auf deinem PC zugegriffen werden kann.
Im schlimmsten Fall muss dazu nicht mal ein Program auf dem Port
lauschen, es reicht vielleicht schon ein fehlerhafter TCP/IP Stack,
dessen Fehler vom Angreifer ausgenutzt werden können.
Um auf eine Eingehende Verbindung zu verzichten könnte man das z. B. so
umsetzen: Jeder deiner beiden PCs bauen eine ausgehende Verbindung zu
einem im Internet erreichbaren Rechner auf, der als Vermittler dient.
Über diese Verbindung machen sich beide dann bekannt (Port und
öffentliche IP). Über diese Information können dann beide über eine
UDP-Verbindung (funktioniert nicht mit TCP) gegenseitig Kontakt
aufnehmen, ohne dass eine eingehende Regel auf der Firewall erstellt
werden muss.
>Stimmt das? Also wäre der Computer>nur bedroht, während mein Server läuft?
ja
(ausser ein "virus/torjaner" usw. würde den "offenen port"
missbrauchen..)
>Für die Kommunikation werden Objekte versendet welche das jeweilige>Protokoll darstellen. Wie müsste Programmiert werden, um diese Gefahr>auszuschliessen? Oder ist das gar nicht möglich?
am "gefährlichten" wäre vermutlich, direkt SQL befehle zuzulassen (siehe
SQL injects usw. )
da du in JAVA arbeitest, hast du aber eh schon 100te Probleme nicht,die
ein C Programm hätte .. ;-) (buffer overruns usw. )
ausserdem kannst du dem Server ja möglich wenig (lokale) rechte
zukommen lasse (bzw. vielleicht sogar in einer art SAandbox laufen
lassen??)
>>Stimmt das? Also wäre der Computer>>nur bedroht, während mein Server läuft?>>ja>(ausser ein "virus/torjaner" usw. würde den "offenen port">missbrauchen..)
Bin da leicht anderer Meinung. Die Wahrscheinlichkeit bei nicht
laufenden Server ist sicherlich wesentlich geringer als bei laufenden
Server. Aber trotzdem können fehler im TCP/IP Stack Probleme bereiten.
Zum Beispiel beschreibt
http://doa.alaska.gov/ets/security/S_Advisory/sa2011-061.pdf einen
Angriff auf einem "closed port" der zu einem Integer überlauf führt und
dazu genutzt werden kann um das System anzugreifen.
Vielen Dank schon mal für die vielen Antworten! Haben mir schon stark
geholfen.
Also gesendet werden nur recht primitive Objekte, welche nur aus jeweils
ein paar Variablen und zum Teil Vektoren bestehen.
Nun ist oft der Ausdruck gefallen: "es besteht eine (erhöhte) Gefahr"
Wie muss man sich diese Gefahr denn vorstellen? Muss man sich da
vorstellen, dass täglich irgendwelche Hackerprogramme versuchen auf
beliebigen Rechnern einzudringen, oder gibt es sowieso nur ein paar
Hacker weltweit, die zu sowas fähig sind, welche es sowieso auf grössere
Ziele abgesehen haben?
Also besteht da wirklich eine reelle Gefahr oder ist die Gefahr grösser
von einem Meteoriten getroffen zu werden?^^
Risikoabwägungen sind immer schwierig. Grundsätzlich musst du das selbst
beurteilen. Veilleicht ein paar Gedanken dazu:
Deine beiden Rechner mit den offenen Ports werden gezielt vermutlich
eher durch Zufall gefunden als durch absicht. Und selbst wenn, wird der
Aufwand vermutlich zu hoch sein, so dass andere Opfer bevorzugt werden.
Wenn es aber jemand auf die Firma abgesehen hat, dann wird er natürlich
jede Schwachstelle ausnutzen, also auch dein offener Port.