Seit Unix Version 7 gehört UUCP zur Standardausrüstung:

Die EUnet-Teilnehmer machen Unix-Sicherheit vor

04.08.1989

Das Thema Sicherheit ist für viele Unix-Anwender von großer Bedeutung, wie das Beispiel des US-Hackers Tom Morris (siehe nebenstehenden Kasten) gezeigt hat. Ein externer Anschluß an das öffentliche Fernsprechnetz scheint speziell bei Unix-Anwendern eine Einladung an Hacker darzustellen. Der Autor dieses Artikels zeigt am Beispiel der Teilnehmer des deutschen EUnet, wie man mit Hilfe des UUCP-Systems Störversuche abblocken kann.

Sicherheitsfragen sind schon lange eng mit Unix verbunden. Im wesentlichen werden dabei nur die Möglichkeiten, die ein Benutzer, der schon auf dem System eingeloggt ist, diskutiert. Innerhalb einer Firma ist aber der Personenkreis, der Zugriff auf die Rechner hat,

normalerweise eingeschränkt. Eine neue Dimension erhält das Problem, wenn der Zugang zu einem oder gar mehreren Rechnern von außerhalb der geschlossenen Umgebung der Firma ermöglicht wird. Dies ist normalerweise unvermeidlich, wenn man sich an einem öffentlichen Netzwerk, wie zum Beispiel dem EUnet, anschließen möchte.

So bedrohlich, wie die Beschreibung bis hierher klingen mag, ist die Lage zum Glück nun auch wiederum nicht. Üblicherweise bieten die Kommunikationsprogramme eine Menge Sicherheitsfeatures, die eine unerlaubte Benutzung verhindern. Im folgenden werde ich gezielt auf die Möglichkeiten von UUCP eingehen, dem Kommunikationsprogramm, das heute noch immer eine dominante Rolle im deutschen EUnet und der gesamten Unix-Welt spielt.

UUCP ist mit dem Gedanken der Sicherheit im Hinterkopf entwickelt worden. Darum bieten selbst frühe und einfache Versionen dieses Programmpakets schon ausgereifte Möglichkeiten, Mißbrauch zu verhindern. Wie bei dem Unix-System allgemein üblich, ist der Grad der Sicherheit, den man erreichen kann, von den Einstellungen, die der Systemadministrator vornimmt, direkt abhängig. Bei einem sauber geführten Unix ist es bekanntermaßen schwierig, wenn nicht gar unmöglich, unerlaubte Modifikationen vorzunehmen.

Die Sicherheit von UUCP beruht auf zwei wesentlichen Designmerkmalen:

þNormales Login: Alle Rechner, die mit einem anderen Rechner Daten austauschen möchten, müssen sich erstmal genauso einloggen, wie das jeder Benutzer machen muß. Es wird dabei das ganz normale Unix-Login benutzt. Dies ist nicht bei jedem Kommunikationsprogramm selbstverständlich. Die in Local Area Networks (LAN) üblichen TCP/IP-Protokolle führen oftmals eine direkte Kommunikation zwischen Daemonen {Hintergrundprogrammen), ohne Standard-Unix-Identifikationen zu beachten.

þKeine Shell: Wenn eben von einem "Normalen Login" die Rede war, so bedeutet das nicht, daß der anrufende Rechner nach dem erfolgreichen Einloggen eine Standard-Unix-Shell zum weiteren Arbeiten erhält. Statt dessen wird sofort ein spezielles Dateitransferprogramm gestartet, welches nur ein eigenes Protokoll versteht, das zum einen nur mühsam von einem bösartigen Benutzer simuliert werden kann und zum anderen auch nur die von UUCP vorgesehenen Operationen erlaubt.

Unter Standardoptionen verstehe ich die Einstellungen, die auf jeden Fall von dem System-Administrator vorgenommen werden müssen. Die nochmal später angesprochenen zusätzlichen Optionen können wahlweise aktiviert werden. Diese werden aber meistens im deutschen EUnet nicht unterstützt, da der zusätzliche Nutzen in keinem Verhältnis zum Aufwand steht.

Die erste Standardeinstellung, die der System-Administrator vorzunehmen hat, ist die Zugangsberechtigung von fremden Systemen mit /etc/ passwd. In der Originaldokumentation von UUCP wird normalerweise angegeben, daß es nur einen Eintrag für alle angeschlossenen Rechner in /etc/passwd gibt. Üblich sind Einträge wie uucp oder nuucp. Dies ist natürlich ein potentielles Sicherheitsproblem, da Sie allen Teilnehmern das gleiche Password geben müssen. Viel besser und im deutschen EUnet auch allgemein üblich, ist es jedem Rechner ein eigenes Login zu geben, natürlich mit einem eigenen Password. Dieses Password sollte ruhig sehr umständlich ausfallen, da sich ja in diesem Fall eine Maschine automatisch einloggen soll und nicht ein Mensch, der das jedesmal an der Tastatur neu eingeben muß. Die normale Loginkennung uucp, die auf jeden Fall immer noch in der passwd-Datei stehen bleiben muß, um ein User-ID (UID) für die UUCP-Prozesse zu haben, sollte aber entweder mit einem "*" oder "nologin" im Password-Feld, je nach Unix, gesperrt werden. Außerdem ist es angebracht, das Home-Directory für diese uucp-Kennung auf /usr/lib/ uucp zu setzen, da ja jeder Benutzer auf /usr/spool/uucppublic schreiben kann und damit "Trojanische Pferde" denkbar sind. Die richtigen UUCP Logins sollten natürlich weiterhin /usr/spool/uucppublic als Home-Directory haben.

Alle Konfigurationsdateien von UUCP befinden sich im Directory /usr/lib/uucp. Die erste wichtige Datei an dieser Stelle ist "Userfile". Diese Datei dient dazu, je nach UID oder System-ID, das ist die UUCP-Kennung des jeweils anderen Partners, die Zugriffsrechte auf Teilbäume des Dateisystems auf dem eigenen Rechner zu beschränken. Das allgemeine Format ist:

Für jede Kennung, die besondere Zugriffsrechte erhalten soll, muß in diese Datei eine eigene Zeile eingetragen werden. Für alle nicht aufgeführten Kennungen gelten Defaulteinträge, die als Minimum immer vorhanden sein müssen. Wie diese Defaults angegeben werden, ist noch weiter unten erklärt. Die Pfadangaben beziehen sich immer auf die Wurzel des Teilbaumes ab dem Zugriffrechte gegeben werden. Zusätzlich gelten immer noch weiterhin die üblichen Unix-Zugriffsrechte auf die Dateien in diesen Directories. Die UUCP-Programme, die darauf zugreifen, laufen immer unter der UID "uucp" . Wie diese Konfigurationsdatei von den UUCP-Programmen wirklich interpretiert wird, ist leider in den üblichen Unterlagen sehr schlecht dokumentiert. Die tatsächliche Bedeutung läßt sich am einfachsten anhand eines Beispiels erklären.

Die Programme "uucp", "uux" und "uucico" aus dem UUCP Paket interpretieren diese Datei nach den folgenden Regeln:

þWenn "uucp" oder "uux" von einer normalen UID aufgerufen werden, das heißt von einem Benutzer aufgerufen wurden, dessen Shell nicht unter uucp oder root läuft oder "uucico" im Master Mode ist, das heißt, es werden Daten gesendet, dann gilt nur die erste Zeile im Userfile, welche eine login-id aufweist, die identisch zu der aufrufenden UID ist. Ein Benutzer, der zum Beispiel eine Datei übertragen möchte kann nur Daten in dem Teilbaum des Filesystems angeben, die im Userfile für seine UID gelistet sind.

þWenn "uucico" im Slave Mode ist, das heißt, es werden Daten empfangen, dann gilt die erste Zeile, welche genau die system-id hat, mit der sich das sendende System gegenüber "uucico" identifiziert hat.

þWenn nach den Regeln [1] oder [2] keine Zeile zutrifft, dann gilt jeweils die erste Zeile als Default, die entweder ein leeres login-id oder system-id-Feld enthält, abhängig davon, was gerade nach den Regeln [1] oder [2] gesucht wird. Diese Defaulteinträge sind als Minimum immer notwendig und sollten mindestens das Directory /usr/spool/uucppublic umfassen'.

Die letzte Zeile in dem Beispiel zeigt eine Sonderberechtigung für das System "uutest". Ferner gibt das "C" vor den Pfadangaben an, daß ein Callback zum Verbindungsaufbau notwendig ist. Dies ist ein optionales Feature, welches im deutschen EUnet nicht üblich ist. Wenn ein System anruft, das dieses Flag in der Userfile gesetzt hat, dann wird die Verbindung sofort wieder abgebaut, und nun ruft die soeben noch passiv angerufene Seite den Partnerrechner an. Dies dient dazu, wirklich sicherzustellen, daß kein anderer Rechner unter einer falschen Identität versucht, eine Verbindung aufzubauen.

Die zweite wichtige Konfigurationsdatei in /usr/lib/uucp ist L.cmds². In dieser Datei wird angegeben, welche Kommandos von fremden Rechnern aufgerufen werden dürfen. Hier stehen in Herstellerauslieferungen von UUCP normalerweise eine ganze Menge Programme, wie zum Beispiel "who", "ls" oder "lpr", drin. Wirklich notwendig ist aber nur "rmail" und "rnews", falls man neben Mail auch News im EUnet bezieht. Aus Sicherheitserwägungen sollen auch nur diese beiden Programme dort aufgelistet sein. Gerade so ein harmlos anmutendes Programm wie "who" ist zum Beispiel eine Sicherheitslücke, weil damit einem potentiell böswilligen Benutzer die Möglichkeit in die Hand gegeben wird, neue login ids, die er ja dann mal ausprobieren könnte, zu ermitteln. Optional ist bei manchen UUCP-Versionen noch eine Suchpfadangabe, so wie in dem folgenden Beispiel:

Minimale L.cmds

PATH=/bin:/usr/bin:

rmail

rnews

Falls sich in einem L.cmds noch das Programm "uusend" oder "ruusend" befinden sollte, dann ist dies unbedingt zu entfernen, da es sich dabei um ein sehr bekanntes Sicherheitsloch handelt. Dieses Programm dient normalerweise dazu, Dateien mit dem "uucp"-Kommando über mehrere Rechner hinweg zu übertragen. Das normale "uucp" kann nur jeweils Dateiübertragungen mit einem der direkt angeschlossenen Rechner vornehmen. Das Sicherheitsproblem mit "uusend" ist, daß es mit Set User ID (SUID) "uucp" läuft, und damit Zugriff auf alle UUCP-Dateien hat, also insbesondere auch zum Beispiel /usr/lib/uucp/L.sys3, in dem sich alle Logins und Passwords der angeschlossenen Systeme befinden. Die Funktionalität von "uusend" wird normalerweise voll von Mail abgedeckt, daher kann man leicht auf dieses Programm verzichten.

Als letzte unbedingt vorzunehmende Standardeinstellung seien die Zugriffsrechte auf die einzelnen Dateien in /usr/lib/uucp genannt. Hier gilt es normalerweise nur, die sicherheitstechnisch gefährdeten Daten wie Logins, Passwords und Rufnummern vor allzu neugierigen Blicken der eigenen Mitarbeiter zu schützen. Für eine Liste der empfohlenen Permissions siehe Abbildung 1.

Wirklich kritisch sind nur die in Fettdruck hervorgehobenen Dateien, "L.-dialcodes", "L.sys", "SEQF" und "Userfile" sollten aufgrund ihres Inhaltes nur für "uucp" lesbar sein: Die Programme "uucico" und "uuclean" müssen das SUID-Bit gesetzt haben, da sie sonst nicht ordnungsgemäß funktionieren. "uucico" ist normalerweise SUID "root", was kein Sicherheitsproblem ist, da sich das Programm beim Start von selber auf UID "uucp" umsetzt. Neue Versionen von UUCP haben an dieser Stelle auch nur noch SUID "uucp".

Eine der zusätzlichen Optionen wurde schon bei der Beschreibung des Formates von /usr/lib/uucp/ Userfile genannt, die Callback-Option. Wer auf extreme Sicherheit bedacht ist, kann diese Option natürlich für seine externen Verbindungen aktivieren. Nur sollte man sich darüber klar sein, daß dies auch eine teure und aufwendige Methode ist. Eine genauso sichere Alternative ergibt sich aber für Datex-P-Kunden. Dort ist es möglich, den Zugang zum eigenen Rechner für nur ganz bestimmte Datex-P-Kennungen zu erlauben. Man hat also die Möglichkeit zu bestimmen, wer überhaupt eine Verbindung bekommt. Diese Option ist genauso sicher wie das Callback von UUCP.

Callback-Option für externe Verbindungen

Eine andere konfigurierbare Möglichkeit von UUCP ist es, einen wiederholten Mißbrauch zu verhindern. Dazu werden auf den beiden miteinander sprechenden Rechnern der Zeitpunkt der letzten Verbindung und eine Ruffolgenummer, die bei jeder erfolgreichen Verbindung erhöht wird, gespeichert. Bei jedem Verbindungsaufbau werden diese Daten auf ihre Konsistenz überprüft. Sollten dabei Unstimmigkeiten auftreten, so wird die Verbindung sofort abgebrochen. Wenn dieser Fall eingetreten ist, dann müssen die System-Administratoren auf den betroffenen Rechnern manuell diese Daten wieder abgleichen, damit wieder eine Verbindung zustandekommen kann. Bis das geschehen ist, kann keine Verbindung mehr zwischen diesen Rechnern aufgebaut werden. Diese Option ist nicht so aufwendig wie ein Callback und kann daher bei erhöhten Sicherheitsanforderungen in Betracht gezogen werden.

Eine interne Maßnahme zur Erhöhung der Sicherheit ist die netzwerkmäßige Isolation des Rechners, der die externen Verbindungen besitzt.

Diese Maßnahme ist für alle interessant, die Telefonmodems für passive Verbindungen an einem Ihrer Rechner angeschlossen haben. Hier kann natürlich jeder, der ein Modem besitzt, versuchen, sich auf Ihrem Rechner einzuloggen. Eine erste Gegenmaßnahme ist es natürlich, so wenig Logins wie möglich auf einem solchen Rechner zu haben. "guest"-Logins sollte es erst recht nicht geben. Genauso sollte man verhindern, daß man sich als "root" auf dem tty, an dem das Telefonmodem angeschlossen ist, einloggen kann. Wie eine Isolation des Gatewayrechners aussehen könnte, zeigt Abbildung 2.

Der besondere Trick bei der Isolation des Gatewayrechners ist, zu verhindern, daß ein möglicher Hacker, der es schon geschafft haben sollte, sich auf dem Gatewayrechner einzuloggen, noch auf weiteren Rechnern des lokalen Netzwerks Unheil anrichten kann. Durch die bisher geschilderten Sicherheitsmerkmale von UUCP dürfte einleuchten, daß sich an dieser Stelle nochmal UUCP anbietet für die Datenübertragung zwischen dem Gateway und den weiteren Rechnern.

Eine letzte Möglichkeit, ungebetenen Gästen den Eingang zu versperren, ist daß Sie nur noch selber aktiv eine Verbindung aufbauen und gar keine hereingehende Leitung zur Verfügung stellen. Dieser Fall ist im deutschen EUnet fast Standard, denn der Backbone Unido bietet nur aktiven Dienst für Mail über Datex-P, was sich aber nur bei hohem Mailaufkommen lohnt.

1 BSD 4.2 und BSD 4.3 UUCP erlaubt anstelle der zwei Defaulteinträge auch einen kombinierten Defaulteintrag mit leerer system-id und leerer login-id. Die minimale Userfile hätte also nur noch folgende Zeile: /usr/spool/uucppublic

2 In manchen UUCP Versionen auch L.cmds oder XQTCMDS.

3 In HoneyDanBer UUCP /usr/lib/uucp/Systems Was ist EUnet?

EUnet steht für European Network und ist der europäische Teil des Usenet's. Wie der große Bruder in den USA handelt es sich um einen Verbund von Unix-Rechnern, die mit Hilfe von UUCP und Mail miteinander in Verbindung stehen. Beide Netzwerke haben gemeinsam, daß sich jede Firma oder staatliche Institution daran anschließen kann. Dies ist der wesentliche Unterschied zu den meisten anderen Netzwerken, die oftmals eine geschlossene Benutzergruppe darstellen. Zur Zeit sind weltweit über 10 000 Rechner mit insgesamt weit über 100 000 Benutzern erreichbar. Außerdem bestehen Gateways zu fast allen anderen Netzwerken, so zum Beispiel dem EARN, Bitnet, DFN, Csnet, Nordunet, Internet, Janet, Junet, ACSnet, Decnet etc. In Europa ist das EUnet ein Service der EUUG, der European Unix User Group. Darum muß man zur Teilnahme am EUnet Mitglied in der jeweiligen nationalen Unix User Group sein. In Deutschland ist das die GUUG, die German Unix User Group. In jedem europäischen Land steht ein Kontenrechner, an den man sich anschließen lassen kann. In Deutschland steht dieser Rechner an der Universität Dortmund am Fachbereich Informatik. Man kann sich aber auch einen Rechner in seiner Nähe anschließen lassen und die Mail dann über diesen Rechner empfangen.

Was ist UUCP?

UUCP seht für Unix to Unix CoPy. Es handelt sich um ein Paket von Programmen, die dazu dienen, Dateien zwischen zwei Unix-Rechnern zu übertragen oder remote auf einem anderen Rechner Kommandos auszuführen. Die Verbindung zwischen den Rechnern kann dabei mit Telefonmodems, über Datex-P, über Standleitungen oder neuerdings auch über Ethernet mit TCP/IP erfolgen.