Sichere Interprozesskommunikation
Sichere Interprozesskommunikation
Interprozesskommunikation bedeutet, dass Prozesse Daten austauschen oder gemeinsam an einer Aufgabe arbeiten.
IPC wird gebraucht, weil Prozesse normalerweise voneinander getrennt sind. Diese Trennung ist gut für Sicherheit, aber Prozesse müssen trotzdem kontrolliert kommunizieren können.
Warum IPC?
Prozesse kommunizieren, um:
- Informationen auszutauschen
- Aufgaben aufzuteilen
- modulare Programme zu bauen
- Rechenzeit besser zu nutzen
- Dienste und Clients zu verbinden
Shared Memory
Bei Shared Memory teilen sich Prozesse einen gemeinsamen Speicherbereich.
Vorteile:
- sehr schnell
- wenig Kopieraufwand
- gut für große Datenmengen
Nachteile:
- Synchronisation nötig
- Race Conditions möglich
- Zugriffsrechte müssen sauber gesetzt sein
Shared Memory braucht fast immer zusätzliche Mechanismen wie Mutexe oder Semaphore.
Message Passing
Beim Message Passing senden Prozesse Nachrichten über das Betriebssystem.
Grundform:
send(P, message)
receive(Q, message)
Kommunikation kann direkt oder indirekt stattfinden.
| Art | Beschreibung |
|---|---|
| Direkt | Sender und Empfänger kennen sich direkt. |
| Indirekt | Kommunikation läuft über Mailboxen, Queues oder andere Vermittler. |
Message Passing ist oft einfacher zu kontrollieren als Shared Memory, kann aber langsamer sein.
Unix Pipes
Pipes gehören zu den ältesten IPC-Techniken in Unix-Systemen. Sie wurden Anfang der 1970er Jahre eingeführt.
In der Shell verbindet | die Ausgabe eines Prozesses mit der Eingabe eines anderen Prozesses.
Beispiel:
cat access.log | grep "ERROR"
Eigenschaften:
- Datenstrom zwischen Prozessen
- Puffer zwischen Sender und Empfänger
- meist eine Richtung
- Full-Duplex-Kommunikation benötigt zwei Pipes
Unbenannte und benannte Pipes
| Art | Beschreibung |
|---|---|
| Unbenannte Pipe | Häufig zwischen verwandten Prozessen, zum Beispiel Eltern- und Kindprozess. |
| Benannte Pipe | Kann über einen Namen angesprochen werden und ist flexibler nutzbar. |
Vorteile von Pipes:
- einfach
- effizient
- zuverlässig
- gut in Unix-Werkzeuge integrierbar
Nachteile:
- begrenzte Puffergröße
- Blockierung möglich
- Synchronisation wichtig
- oft nur eine Richtung
IPC Sockets
Sockets ermöglichen bidirektionale Kommunikation zwischen Prozessen.
Sie können lokal auf einem Rechner oder über ein Netzwerk verwendet werden.
Typischer Ablauf:
- Server erstellt einen Socket.
- Server bindet Adresse und Port.
- Server wartet auf Verbindungen.
- Client verbindet sich.
- Daten werden ausgetauscht.
- Socket wird geschlossen.
Sockets nutzen häufig TCP oder UDP.
Einsatzgebiete:
- Webbrowser und Webserver
- E-Mail-Clients
- lokale Dienste
- Echtzeitkommunikation
- Online-Spiele
- Protokollimplementierungen
RPC
Remote Procedure Call bedeutet, dass ein Programm eine Funktion in einem anderen Adressraum aufruft, oft sogar auf einem anderen Rechner.
Bekannte Varianten:
- ONC RPC
- MSRPC
- RMI
- XML-RPC
Die Grundidee: Ein Aufruf sieht für das Programm wie eine normale Funktion aus, wird aber als Nachricht übertragen und beim anderen Prozess ausgeführt.
Sicherheitsaspekte
IPC muss sicher gestaltet werden.
Wichtige Fragen:
- Darf dieser Prozess überhaupt kommunizieren?
- Sind Nachrichten validiert?
- Können fremde Prozesse Pipes, Sockets oder Shared Memory missbrauchen?
- Gibt es Größenlimits?
- Können Nachrichten blockieren oder Ressourcen erschöpfen?
- Werden sensible Daten unverschlüsselt übertragen?
- Sind Rechte und Besitzer korrekt gesetzt?
Merksatz
IPC verbindet getrennte Prozesse. Sicher wird sie erst durch klare Berechtigungen, validierte Nachrichten und saubere Synchronisation.
Zuletzt aktualisiert: 6. Juni 2026