+ All Categories
Home > Documents > Multicast dt. Gruppenruf - Matthias-Draeger.info

Multicast dt. Gruppenruf - Matthias-Draeger.info

Date post: 18-Dec-2021
Category:
Upload: others
View: 0 times
Download: 0 times
Share this document with a friend
27
Robert Tolksdorf und Peter Löhr Multicast dt. Gruppenruf
Transcript
Page 1: Multicast dt. Gruppenruf - Matthias-Draeger.info

Robert Tolksdorf und Peter Löhr

Multicastdt. Gruppenruf

Page 2: Multicast dt. Gruppenruf - Matthias-Draeger.info

Robert Tolksdorf und Peter Löhr 2

Transportmöglichkeiten

• Verbindungsorientiert 1:1TCP

• Verbindungslos 1:1UDP

• Verbindungsorientiert 1:nMulticast

• Verbindungslos 1:nMulticast

Page 3: Multicast dt. Gruppenruf - Matthias-Draeger.info

Robert Tolksdorf und Peter Löhr 3

• IP Multicast ist ein unzuverlässiger Vermittlungsdienst,der als Multicast-Variante von UDP verwendet werden kann.

• Die Zieladresse eines Multicast-Datagramms identifiziert nichteinen bestimmten Rechner, sondern eine Gruppe von Rechnern.

IP Multicast

• Für solche Gruppenadressen ist folgender Bereich reserviert:224.0.0.1 bis 239.255.255.255

• Rechner können mit Nennung einer solchen Adresse einerbestimmten Gruppe beitreten.

• Das Multicast-Datagramm geht an den gewählten Ziel-Port beiallen Gruppenmitgliedern.

Page 4: Multicast dt. Gruppenruf - Matthias-Draeger.info

Robert Tolksdorf und Peter Löhr 4

• Internet Group Management Protocol (IGMP)ist zuständig für die Gruppenverwaltung.

• Gruppenruf wird üblicherweise auf einen bestimmtenLokalitätsbereich beschränkt: die Datagramme enthaltenkleine Werte für die „Time to Live“, z.B. 1 für Beschränkungauf das Lokalnetz.

IP Multicast

Page 5: Multicast dt. Gruppenruf - Matthias-Draeger.info

Robert Tolksdorf und Peter Löhr 5

Multicast Sockets

1. Teilnehmer bindenSockets

2. Teilnehmer treten einerGruppe bei

3. Teilnehmer empfangenvon Sender

4. Teilnehmer verlassenGruppe und gebenSocket auf

bind

224.x.x.x

bindbind

bindbindjoingroup

bindbindsend / receive

bindbind

224.x.x.x

leavegroup /close

Page 6: Multicast dt. Gruppenruf - Matthias-Draeger.info

Robert Tolksdorf und Peter Löhr 6

java.net.MulticastSocket

public class MulticastSocket extends DatagramSocket {public MulticastSocket()...public MulticastSocket(int port)...

// Socket erzeugen, Portnummer implizit oder explizit gewähltpublic void setTimeToLive(int ttl) ...

// Time to Live setzen - Voreinstellung ist 1public void joinGroup(InetAddress mcastaddr) throws ...

// Gruppe unter der Adresse mcastaddr beitreten;public void leaveGroup(InetAddress mcastaddr) throws ...

// Gruppe verlassen}

• send, receive, ... werden von DatagramSocket geerbt

Page 7: Multicast dt. Gruppenruf - Matthias-Draeger.info

Robert Tolksdorf und Peter Löhr 7

$ java Name Alice &

• Programm Name tritt einer Gruppe bei und antwortetauf Anfrage mit dem Benutzernamen.

• Programm Who sendet Rundmeldung "who?".

Beispiel Who

$ java Name Bob &$ java Name Carl &

$ java WhoBobAliceCarl$

Page 8: Multicast dt. Gruppenruf - Matthias-Draeger.info

Robert Tolksdorf und Peter Löhr 8

Beispiel Who

import java.net.*;public class Who {public static void main(String[] args) throws Exception {

String whoGroup = "229.1.2.3";InetAddress group = InetAddress.getByName(whoGroup);DatagramSocket socket = new DatagramSocket();String who = "who?";DatagramPacket out = new DatagramPacket(

who.getBytes(), who.length(), group, 12345);

byte[] inData = new byte[1024];DatagramPacket in = new DatagramPacket(inData, inData.length);socket.setSoTimeout(2000); // answers not arriving

// within 2 sec will be ignoredsocket.send(out); // send "who?"

Page 9: Multicast dt. Gruppenruf - Matthias-Draeger.info

Robert Tolksdorf und Peter Löhr 9

Beispiel Who

while(true) {try {

socket.receive(in);String name = new String(in.getData(),0,in.getLength());System.out.println(name);

} catch (SocketTimeoutException e) { break; }}socket.close();

}}

Page 10: Multicast dt. Gruppenruf - Matthias-Draeger.info

Robert Tolksdorf und Peter Löhr 10

Beispiel Who - Programm Name

import java.net.*;public class Name {public static void main(String[] args) throws Exception {

byte[] inData = new byte[1024];String whoGroup = "229.1.2.3";InetAddress group = InetAddress.getByName(whoGroup);MulticastSocket socket = new MulticastSocket(12345);socket.joinGroup(group);DatagramPacket in = new DatagramPacket(inData, inData.length);

// wait for inquiries:

Page 11: Multicast dt. Gruppenruf - Matthias-Draeger.info

Robert Tolksdorf und Peter Löhr 11

Beispiel Who - Programm Name

while(true) {socket.receive(in); // get message, e.g., "who?"InetAddress senderAddress = in.getAddress();int senderPort = in.getPort();DatagramPacket out = new DatagramPacket(

args[0].getBytes(), args[0].length(),

senderAddress, senderPort);socket.send(out); // send user name

}}}

Page 12: Multicast dt. Gruppenruf - Matthias-Draeger.info

Robert Tolksdorf und Peter Löhr

Sicherheitsprobleme

Schwachstellen bei Angriffen aufTransportdienst, Anbieter, Klienten

Page 13: Multicast dt. Gruppenruf - Matthias-Draeger.info

Robert Tolksdorf und Peter Löhr 13

Schwachstellen von TCP

• Abhören (eavesdropping) der übertragenen Daten -sehr einfach

• Manipulieren (tampering) der übertragenen Daten -extrem schwierig

• Umlenken der Verbindung zum Angreifer (sessionhijacking) - ziemlich schwierig

• Maskerade (spoofing) zwecks Täuschung über dieIdentität eines Partners - sehr einfach

--> sichere Verbindungen: Secure Socket Layer (SSL)oberhalb von TCP

--> Modul IT-Sicherheit

Page 14: Multicast dt. Gruppenruf - Matthias-Draeger.info

Robert Tolksdorf und Peter Löhr 14

keine Zugangskontrolle!

Beachte:

Sobald ein Dienstanbieter bereit ist,mit accept an einem Socket zu lauschen und

anschließend über die eingerichtete Verbindung zu lesen,erlaubt er beliebigen Personen,

die nicht registrierte Benutzer sein müssen, die Benutzung des Dienstes.

Eine Zugangskontrolle, z.B. über ein Passwort,ist nicht vorgesehen

Ist das wirklich ein Problem?

Page 15: Multicast dt. Gruppenruf - Matthias-Draeger.info

Robert Tolksdorf und Peter Löhr 15

Gefahren durch unsicheren Code

Def.: Eine Programmiersprache heißt unsicher (unsafe), wenn Programmfehler die Speicherverwaltung stören können.

Beispiele:ungültige Verweise in Pascal/Modula;

zusätzlich Feldgrenzenüberschreitung in C/C++,

auch Pufferüberlauf (buffer overflow) genannt

Folgen: chaotisches Programmverhalten, Absturz mit „Bus Error“, „Segmentation Fault“ u.ä.

Page 16: Multicast dt. Gruppenruf - Matthias-Draeger.info

Robert Tolksdorf und Peter Löhr 16

SYNOPSIS

#include <stdio.h> char *gets(char *s); char *fgets(char *s, int n, FILE *stream);

DESCRIPTIONThe gets() function reads characters from the standard input stream(see intro(3)), stdin, into the array pointed to by s, until a newlinecharacter is read or an end-of-file condition is encountered. Thenewline character is discarded and the string is terminated with a nullcharacter.

The fgets() function reads characters from the stream into the arraypointed to by s, until n-1 characters are read, or a newline character is readand transferred to s, or an end-of-file condition is encountered. Thestring is then terminated with a null character.

When using gets(), if the length of an input line exceeds the size of s, indeterminate behavior may result. For this reason, it is strongly recommended that gets() be avoided in favor of fgets().

Beispiel aus der C-Bibliothek

Page 17: Multicast dt. Gruppenruf - Matthias-Draeger.info

Robert Tolksdorf und Peter Löhr 17

NAME string, strcasecmp, strncasecmp, strcat, strncat, strlcat, strchr, strrchr, strcmp, strncmp, strcpy, strncpy, strlcpy, strcspn, strspn, strdup, strlen, strpbrk, strstr, strtok, strtok_r - string operations

DESCRIPTION The arguments s, s1, and s2 point to strings (arrays of characters

terminated by a null character). The strcat(), strncat(), strlcat(),strcpy(), strncpy(), strlcpy(), strtok(), and strtok_r() functions allalter their first argument. These functions do not check foroverflow of the array pointed to by the first argument.

... und viele andere

Page 18: Multicast dt. Gruppenruf - Matthias-Draeger.info

Robert Tolksdorf und Peter Löhr 18

Anwendung von gets z.B. so:

char line[100]; . . . . . gets(line);

wobei der Programmierer vergessen hat, längere Zeilen (länger als 100 Zeichen) als fehlerhaft abzufangen !

Gefahr: Wenn eine längere Zeile eingegeben wird, wird der Keller beschädigt, und das Programm arbeitet fehlerhaft oder stürzt ab.

Dies ist eine sicherheitsrelevante Schwachstelle, wenn das Programm mit anderer Autorisierung

als der des Benutzers ausgeführt wird!

(typisch: setuid-Programm, Server-Programm!)

Pufferüberlauf

Page 19: Multicast dt. Gruppenruf - Matthias-Draeger.info

Robert Tolksdorf und Peter Löhr 19

void getarg (char *arg ){char text[4] = “ABC“;char buff[4];strcpy(buff, arg);.....

}int main( int argc, char *argv[]) {

if (argc >1) getarg(argv[1]);.....

}

Pufferüberlauf zerstört Daten

Keller (wächst von oben nach unten):

buff text EBP EIP arg EBP EIP argc argvABC\0

wachsender Keller wachsende Adressen

I N P U T \0

$ a.out INPUT

Page 20: Multicast dt. Gruppenruf - Matthias-Draeger.info

Robert Tolksdorf und Peter Löhr 20

Pufferüberlauf bei Netzdienst

Einfacher Dienst: Textzeile anfordern und anzeigen

#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>int main(int argc, char *argv[]) { int max = 100; char line[max]; ..... // initialize server; see, e.g., W.R. Stevens et al. for(;;) { int connfd = accept(listenfd,

(struct sockaddr *) &clientaddr, &len); readln(connfd, line, max); // see, e.g., W.R. Stevens et al.

print(line); close(connfd); }} // dieser Code ist soweit in Ordnung

Page 21: Multicast dt. Gruppenruf - Matthias-Draeger.info

Robert Tolksdorf und Peter Löhr 21

Zerstörung der Rücksprungadresse

void print(char *str) {char buf[10]; // should be 100!

strcpy(buf, str); printf("got %s", buf);}

server: a.outbadguy: nc localhost 12345

got abc abcbadguy: telnet 127.0.0.1 12345Trying 127.0.0.1...Connected to localhost.Escape character is '^]'.

got 1234567890 1234567890Connection closed by foreign host.badguy: nc localhost 12345

got 9999999999999 ..... 9999999999999999999999999999999Segmentation fault badguy:server:

Page 22: Multicast dt. Gruppenruf - Matthias-Draeger.info

Robert Tolksdorf und Peter Löhr 22

• Was ist passiert?

• Rücksprungadresse aus print im Keller wurde durchstrcpy mit Daten überschrieben.

• Rücksprung aus print erfolgte an eine ungültige Adresse--> Segmentation fault

Zerstörung der Rücksprungadresse

• Effekt: Abschuss des Servers --> „denial of service“

• Beachte: mit der gleichen Technik kann auch einbösartiger Anbieter den Klienten zum Absturz bringen.

Page 23: Multicast dt. Gruppenruf - Matthias-Draeger.info

Robert Tolksdorf und Peter Löhr 23

• Und noch viel gefährlicher:• Keller mit Daten und Code (!) überschreiben und dabei• die Rücksprungadresse so setzen, dass der eingeschleuste

Code aktiviert wird,• der eventuell weiteren Code nachziehen kann.

Einschleusen von Schadcode

• Effekt:• Ursprünglicher Dienst ist mit Schadcode des Angreifers

infiziert,• d.h. der Schadcode läuft mit der Autorisierung des

Angegriffenen. Falls das (bei Unix) der Super-User root ist,ist das System unterwandert (compromised).

Page 24: Multicast dt. Gruppenruf - Matthias-Draeger.info

Robert Tolksdorf und Peter Löhr 24

• Sichere Programmiersprachen!• Keller-Segment ohne "execute"-Rechte

(Solaris; OpenBSD 3.2; Linux: OpenWall, PaX)(verhindert allerdings nicht den Überlauf als solchen)

• Andere Keller-Organisation, Hüllen für die unsicherenFunktionen, alle möglichen Tricks …

• restriktive Autorisierung der bedrohten Prozesse• restriktive Öffnung von Ports• Einsatz von Firewalls

• Nicht vergessen: patches einspielen

Gegenmaßnahmen

Page 25: Multicast dt. Gruppenruf - Matthias-Draeger.info

Robert Tolksdorf und Peter Löhr

Zusammenfassung

Page 26: Multicast dt. Gruppenruf - Matthias-Draeger.info

Robert Tolksdorf und Peter Löhr 26

Zusammenfassung

1. Internet-Namen und -Nummern1. Internet-Rechner haben Nummern (IP-Adressen) und Namen2. DNS bildet zwischen ihnen ab

2. TCP Sockets1. verbindungsorientiert: zuverlässiger Byte-Strom2. Server bindet Socket an Port und lauscht am Socket3. Ein Socket-Paar pro Verbindung

3. UDP Sockets1. verbindungslos: keine Garantien2. Nur Datagramme senden und empfangen

4. Multicast1. Versenden einer Mitteilung an viele Empfänger (Multicast-Gruppe)2. i.d.R. verbindungslos (Datagramme)

5. Pufferüberlauf bedroht Sicherheit1. bei Klienten und Anbietern in unsicheren Sprachen (C/C++)2. Sabotage und/oder Einschleusung von Schadcode

Page 27: Multicast dt. Gruppenruf - Matthias-Draeger.info

Robert Tolksdorf und Peter Löhr 27

Literatur

• www.ietf.org, RFCs

• K. Washburn, J. Evans:TCP/IP - Running a SuccessfulNetwork. Addison-Wesley 1996(2 ed.). Deutsch: TCP/IP -Aufbau und Betrieb einesTCP/IP-Netzes. Addison-Wesley1997 (4. Aufl.)

• A. Lockhart: Network Security Hacks.O'Reilly 2006


Recommended