Zwei Computer über das Internet miteinander verbinden
Zwei Computer über das Internet miteinander verbinden
Hallo!
Angeregt durch einige endlose Beiträge hier im Forum, wollte ich selbst mal
probieren zwei Computer über das Internet miteinander zu verbinden. Ist
mir auch alles gelungen. Ich musste natürlich einen Port in meinem Router
öffnen, und da stellt sich mir jetzt eine Frage. Können jetzt auch andere über
diesen geöffneten Port auf meinen Rechner zugreifen, oder muss da ein
Programm an diesem Port auf etwas warten, wie z.B. das von mir
geschriebene Programm? Eigentlich könnte ich es mir nur so vorstellen, denn
wenn da kein Programm die ankommenden Daten verarbeitet geht das doch
ins leere, oder...?
Angeregt durch einige endlose Beiträge hier im Forum, wollte ich selbst mal
probieren zwei Computer über das Internet miteinander zu verbinden. Ist
mir auch alles gelungen. Ich musste natürlich einen Port in meinem Router
öffnen, und da stellt sich mir jetzt eine Frage. Können jetzt auch andere über
diesen geöffneten Port auf meinen Rechner zugreifen, oder muss da ein
Programm an diesem Port auf etwas warten, wie z.B. das von mir
geschriebene Programm? Eigentlich könnte ich es mir nur so vorstellen, denn
wenn da kein Programm die ankommenden Daten verarbeitet geht das doch
ins leere, oder...?
Nein, ich habe die Suche nicht benutzt, und deshalb auch nichts dazu gefunden... 

- Tafkadasom2k5
- Beiträge: 1578
- Registriert: 13.08.2005 14:31
- Kontaktdaten:
Heyho!
Also das läuft (wenn ich deine Frage richtig verstehe) jetzt so:
Wenn dich jemand auf dem Port "anspricht" und du kein Programm auf diesem am "horchen" hast, dann geht die ANfrage mehr oder minder ins Leere.
Hast du aber ein Programm laufen, dann können andere mit dem Gegenstück des Programmes darauf zugreifen. Programmierst du den Server sowie den Clienten selber, (baust dir also mehr oder weniger dafür dein eigenes Protokoll) dann können nur Leute mit dem Gegenstück damit was anfangen.
Nein, halt- es geht auch anders:
Wenn ich jetzt so eine Art Sniffer auf dich ansetze, und versuche dein Protokoll zu entziffern (durch spezielle Befehle oder Bytes dein Programm dazu zu bringen zu "antworten"; sodass ich weiß, wie ich mit diesem kommunizieren muss) dann kann ich versuchen, es zu manipulieren.
Auch wenn ich es irgendwie schaffe, mal zwischen deinem Programm und deinem Server "mitzuhören", dann kann ich daraus auch das Protokoll erschließen.
Auch kann mandurch manche Tricks und Kniffe "ungesicherte Programme" ganz böse zu BufferUnderuns zwingen, und diese ausnutzen.
Baust du aber vorher einen VPN-Tunnel zu deinem PC auf, und läuft dein Programm nur im Netzwerk, so ist es "recht sicher".
Es kommt halt drauf an, wie du dein Programm intern mit "TRY" und "CATCH"es schützt, und spezielle Abfragen machst, um z.B. Bruteforce zu verhindern, oder gar um eine eigene verschlüsselung für deine Kommunikation zu bauen.
Soweit vom Prinzip her-
wenn du was nicht genau verstanden hast, dann sags - ich probiers gerne noch einmal
Gr33tz
Tafkadasom2k5
Also das läuft (wenn ich deine Frage richtig verstehe) jetzt so:
Wenn dich jemand auf dem Port "anspricht" und du kein Programm auf diesem am "horchen" hast, dann geht die ANfrage mehr oder minder ins Leere.
Hast du aber ein Programm laufen, dann können andere mit dem Gegenstück des Programmes darauf zugreifen. Programmierst du den Server sowie den Clienten selber, (baust dir also mehr oder weniger dafür dein eigenes Protokoll) dann können nur Leute mit dem Gegenstück damit was anfangen.
Nein, halt- es geht auch anders:
Wenn ich jetzt so eine Art Sniffer auf dich ansetze, und versuche dein Protokoll zu entziffern (durch spezielle Befehle oder Bytes dein Programm dazu zu bringen zu "antworten"; sodass ich weiß, wie ich mit diesem kommunizieren muss) dann kann ich versuchen, es zu manipulieren.
Auch wenn ich es irgendwie schaffe, mal zwischen deinem Programm und deinem Server "mitzuhören", dann kann ich daraus auch das Protokoll erschließen.
Auch kann mandurch manche Tricks und Kniffe "ungesicherte Programme" ganz böse zu BufferUnderuns zwingen, und diese ausnutzen.
Baust du aber vorher einen VPN-Tunnel zu deinem PC auf, und läuft dein Programm nur im Netzwerk, so ist es "recht sicher".
Es kommt halt drauf an, wie du dein Programm intern mit "TRY" und "CATCH"es schützt, und spezielle Abfragen machst, um z.B. Bruteforce zu verhindern, oder gar um eine eigene verschlüsselung für deine Kommunikation zu bauen.
Soweit vom Prinzip her-
wenn du was nicht genau verstanden hast, dann sags - ich probiers gerne noch einmal

Gr33tz
Tafkadasom2k5
OpenNetworkConnection() hat geschrieben:Versucht eine Verbindung mit dem angegebenen Server aufzubauen. 'ServerName$' kann eine IP-Adresse oder ein voller Name sein (z.B.: "127.0.0.1" oder "ftp.home.net").
php-freak hat geschrieben:Ich hab die IP von google auch ned rausgefunden!
Danke für die schnelle Antwort! Im Grunde genommen hast Du mich schon
beruhigt. Da es mir hauptsächlich darum ging, zu wissen ob ein offener Port
ohne Programm dahinter ein Sicherheitsrisiko wäre.
Aber Deine Antwort lässt mich doch noch einmal nachfragen. Wenn ich mein
Programm laufen lasse, und ein Bösewicht es durch die von Dir
beschriebenen Methoden schafft das Programm zu benutzen, könnte er doch
allenfalls nur die Funktionalität die mein Programm bietet benutzen. Da das
nur ein kleiner Chat für meine Bekannten wird, wäre ja nun allenfalls ein
"Hallo" oder das Blockieren meines Programmes möglich. Oder?
Und was ist ein VPN-Tunnel. Ich nehme an "Virtual Private Network"? Wirklich
was anfangen kann ich damit nicht.
beruhigt. Da es mir hauptsächlich darum ging, zu wissen ob ein offener Port
ohne Programm dahinter ein Sicherheitsrisiko wäre.
Aber Deine Antwort lässt mich doch noch einmal nachfragen. Wenn ich mein
Programm laufen lasse, und ein Bösewicht es durch die von Dir
beschriebenen Methoden schafft das Programm zu benutzen, könnte er doch
allenfalls nur die Funktionalität die mein Programm bietet benutzen. Da das
nur ein kleiner Chat für meine Bekannten wird, wäre ja nun allenfalls ein
"Hallo" oder das Blockieren meines Programmes möglich. Oder?
Und was ist ein VPN-Tunnel. Ich nehme an "Virtual Private Network"? Wirklich
was anfangen kann ich damit nicht.
Nein, ich habe die Suche nicht benutzt, und deshalb auch nichts dazu gefunden... 

- Captn. Jinguji
- Beiträge: 397
- Registriert: 07.06.2005 19:47
- Computerausstattung: PB 4.73x64, i7, WIN 10x64, ATI NVidia RTX 2070
- Wohnort: Witten
Bin zwar nicht der ürsprünglich Antwortende, glaube indes, der Link http://de.wikipedia.org/wiki/Virtual_Private_Network ist gar nicht übel. 
Grade bei ChatProgrammen muss man aufpassen, dass man die Menge der bei der Eingabe zu übernehmenden Zeichen begrenzt, sonst kann ein Angreifer durch hinreichend viel "überzählige" Zeichen "beliebigen" Code zur Ausführung bringen. Der läuft dann zwar in erster Näherung nur mit den Rechten Deines Programmes, aber das ist ja schonmal 1 Anfang.
Auf die Art kann man dann natürlich auch ein Codestück implementieren, dass an dem einen Port lauscht, aber dann natürlich mit dem Protokoll des Angreifers.

Grade bei ChatProgrammen muss man aufpassen, dass man die Menge der bei der Eingabe zu übernehmenden Zeichen begrenzt, sonst kann ein Angreifer durch hinreichend viel "überzählige" Zeichen "beliebigen" Code zur Ausführung bringen. Der läuft dann zwar in erster Näherung nur mit den Rechten Deines Programmes, aber das ist ja schonmal 1 Anfang.

Auf die Art kann man dann natürlich auch ein Codestück implementieren, dass an dem einen Port lauscht, aber dann natürlich mit dem Protokoll des Angreifers.
Ist das Kunst hier, oder kann das weg ?
Könntest Du mir das bitte noch ein wenig genauer erläutern? Ich habeCaptn. Jinguji hat geschrieben:
... Grade bei ChatProgrammen muss man aufpassen, dass man die Menge der bei der Eingabe zu übernehmenden Zeichen begrenzt, sonst kann ein Angreifer durch hinreichend viel "überzählige" Zeichen "beliebigen" Code zur Ausführung bringen. Der läuft dann zwar in erster Näherung nur mit den Rechten Deines Programmes, aber das ist ja schonmal 1 Anfang.
Auf die Art kann man dann natürlich auch ein Codestück implementieren, dass an dem einen Port lauscht, aber dann natürlich mit dem Protokoll des Angreifers.
nämlich keine Vorstellung davon, wie ein Angreifer fremden code in meinem
Programm zur Ausführung bringen könnte, selbst wenn ihm das von mir
benutzte Protokoll bekannt wäre.
Nein, ich habe die Suche nicht benutzt, und deshalb auch nichts dazu gefunden... 

Jinguji meint einen Buffer Overflow.
Dabei wird versucht mehr Daten in den Speicher zu schreiben, als deinem Programm zugewiesen wurde. Es ist nun gut möglich, dass die Daten an die Stelle im Speicher geschrieben werden, wo sich dein Programm befindet.
Wenn nun die Daten nichts weiter als fremder Code sind, kann der unter ungünstigen Umständen ausgeführt werden...
Also immer eine Fehlerprüfung machen. Wenn etwas ausserhalb der gültigen Wertebereiche liegt - gleich alles blocken und die Daten neu anfordern.
Das ist zwar die Holzhammer-Methode, aber die bietet schon mal viel Sicherheit.
Dabei wird versucht mehr Daten in den Speicher zu schreiben, als deinem Programm zugewiesen wurde. Es ist nun gut möglich, dass die Daten an die Stelle im Speicher geschrieben werden, wo sich dein Programm befindet.
Wenn nun die Daten nichts weiter als fremder Code sind, kann der unter ungünstigen Umständen ausgeführt werden...
Also immer eine Fehlerprüfung machen. Wenn etwas ausserhalb der gültigen Wertebereiche liegt - gleich alles blocken und die Daten neu anfordern.
Das ist zwar die Holzhammer-Methode, aber die bietet schon mal viel Sicherheit.
Now these points of data make a beautiful line.
And we're out of beta. We're releasing on time.
And we're out of beta. We're releasing on time.
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
> Es ist nun gut möglich, dass die Daten an die Stelle im Speicher geschrieben werden, wo sich dein Programm befindet.
DANKE!
endlich hab ich verstanden, wo beim Buffer-Overflow die eigentliche schwachstelle ist.
(hatte vor ner weile schon mal nach gefragt, aber keiner konnte mir eine einleuchtende antwort geben)
das bedeutet aber ja im gegenzug, dass wenn ich meinen buffer im Datensegment habe,
das keine execute-rechte besitzt, ein buffer-overflow mir nichts anhaben kann,
jedenfalls kein code zur ausführung kommen kann... oder?
*grübel* nunja....
wenn das datensegment dort zuende wäre, und dahinter ein anderes code-segment beginnt...
ok, ich sehs ein, besser auf jeden fall sauber begrenzen.
DANKE!
endlich hab ich verstanden, wo beim Buffer-Overflow die eigentliche schwachstelle ist.
(hatte vor ner weile schon mal nach gefragt, aber keiner konnte mir eine einleuchtende antwort geben)
das bedeutet aber ja im gegenzug, dass wenn ich meinen buffer im Datensegment habe,
das keine execute-rechte besitzt, ein buffer-overflow mir nichts anhaben kann,
jedenfalls kein code zur ausführung kommen kann... oder?
*grübel* nunja....
wenn das datensegment dort zuende wäre, und dahinter ein anderes code-segment beginnt...
ok, ich sehs ein, besser auf jeden fall sauber begrenzen.

Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
- Captn. Jinguji
- Beiträge: 397
- Registriert: 07.06.2005 19:47
- Computerausstattung: PB 4.73x64, i7, WIN 10x64, ATI NVidia RTX 2070
- Wohnort: Witten
- Tafkadasom2k5
- Beiträge: 1578
- Registriert: 13.08.2005 14:31
- Kontaktdaten:
Genau darauf wollte ich ja nun auch hinaus, als ich sagte,Laurin hat geschrieben:Jinguji meint einen Buffer Overflow.
Wenn dein Programm nun merkt:Es kommt halt drauf an, wie du dein Programm intern mit "TRY" und "CATCH"es schützt, und spezielle Abfragen machst
"Hey das ist ja ein viel zu großes Datensegment, das passt garnicht in meinen Speicher!", dann sollte es eine Anfrage an den Clienten senden, die denjenigen auffordert, etwas "kleineres" zu schicken.
Ausserdem könnte er, wenn er die Funktionalität deines Programmes herausbekommt, versuchen Schwachstellen zu finden:
- Was macht der Server, wenn ich ein falsches Passwort sende?
- Wie lange braucht der Server um zu antworten?
- Was genau gibt er mir für eine Antwort?
- Gibt es einen "Notfall-Login" oder sowas?
- Kann man diesen knacken?
etc, etc.
Gr33tz
Tafkadasom2k5
OpenNetworkConnection() hat geschrieben:Versucht eine Verbindung mit dem angegebenen Server aufzubauen. 'ServerName$' kann eine IP-Adresse oder ein voller Name sein (z.B.: "127.0.0.1" oder "ftp.home.net").
php-freak hat geschrieben:Ich hab die IP von google auch ned rausgefunden!
Normalerweise liegt beim ausnutzen von solchen Bufferoverflows der Buffer nicht im Datensegment, da du ja auch schon bemerkt hast, das der Code da nicht ausgeführt werden kann. (und das Datensegment kommt nicht vorm CodesegmentKaeru Gaman hat geschrieben:> Es ist nun gut möglich, dass die Daten an die Stelle im Speicher geschrieben werden, wo sich dein Programm befindet.
DANKE!
endlich hab ich verstanden, wo beim Buffer-Overflow die eigentliche schwachstelle ist.
(hatte vor ner weile schon mal nach gefragt, aber keiner konnte mir eine einleuchtende antwort geben)
das bedeutet aber ja im gegenzug, dass wenn ich meinen buffer im Datensegment habe,
das keine execute-rechte besitzt, ein buffer-overflow mir nichts anhaben kann,
jedenfalls kein code zur ausführung kommen kann... oder?
*grübel* nunja....
wenn das datensegment dort zuende wäre, und dahinter ein anderes code-segment beginnt...
ok, ich sehs ein, besser auf jeden fall sauber begrenzen.

Der Buffer liegt dann nämlich auf dem Stack - d.h. ist eine lokale Variable einer Procedure. Und da Code im Stack ausgeführt werden kann (zumindest z.Z. noch) braucht man dann nur die Rücksprungadresse der Procedure ändern und auf den Stack legen, wo ja der eingeschleuste Code liegt.
Ich bin mir da zwar auch nicht 100%ig sicher ob das so richtig ist, aber so hab ichs mal gelernt


[url=irc://irc.freenode.org/##purebasic.de]irc://irc.freenode.org/##purebasic.de[/url]