Notes pour TP Securite Unix

Version Option SSR, Mars 2008, comptes tpe1 à tpe9

0) Espace de Travail

0.1) Ce document : file: /Users/teleinf1/pascal/TPSEC/TP.html

Le travail a rendre pour la notation : file: /Users/teleinf1/pascal/TPSEC/TP-SSR-AFER.html

0.2) Directory de travail :

> source ~pascal/tpinit
Ceci positionne quelques variables d'environnement utiles et vous place dans le directory de travail ~pascal/TPSEC.
Dans la suite, le ./ qui précede eventuellement les commandes indique des commandes locales dans le directory de travail.

0.3) Différents Hosts et OS :

pour ouvrir une fenêtre sur un host distant :
> xon hostname
NB1 : "xon" lance un "xterm" distant en utilisant "rsh"
NB2 : En cas de pbs, adapter ~/.rhosts ou bien utiliser telnet , "ssh", "ssh -X" ...

et dans la nouvelle fenêtre sur le host distant :
> source ~pascal/tpinit

0.4) En savoir plus sur une commande

> man commande
> man -k mot-cle

1) Cela commence quand ?

Regarder ( less, more, cat, emacs, vi, tail, tail -f , clic www ...) le fichier ./Mails

Kaisako ? comment se 'fesse'?

cf aussi : ./MyMail, ./MyMail1, ./GDM/ ...

1bis) Cheval de Troie au Login (Trop Tard !!!)

1.1) comment ?

Ai-je bien utilisé la procedure de connexion standard du système ou bien un clone ?

> last
> last | more (si la liste est longue)
> who
> finger [user]

LOGs systèmes : generalement accès reservé à root sous linux, ici utilisation du syslog reseau accessible dans le directory /Tools/share/syslog/. On peut essayer :
> grep hostname /Tools/share/syslog/ALL.log | more


Conclusions ?

1.2) autres exemples

Scripts simples pour une connexion en mode texte :
> ./login
> ./telnet hostname
> ./ssh hostname

Suivre les resultats dans le fichier Mails. Par exemple avec :
> tail -f Mails

Fichiers : login , telnet, ssh, MyMail1, Mails...

Exemple utilisation : le pirate se logue et fait un > exec login qui remplace le processus shell de la session par le processus login pirate. A tester dans un xterm.

1.3) cas du TP

Comment cela marche avec la phase de login sous X11 dans le cas du TP ?

C'est justement une question notée pour le TP, quelques éléments :

1.4) "Protocole" gdmlogin

On peut aussi envisager le même cheval de Troie sans executable gdmTP mais avec un script. L'interface de saisie des mots de passe sous gdm est faite par le client gdmlogin qui utilise un protocole simpliste en mode texte. Les commandes sont : Pour tester, on lance le client et l'on tape les commandes précedentes dans la même fenêtre texte. Parallelement, on peut taper des infos dans la fenêtre de saisie du client gdmlogin.
> ./gdmlogin

N pourrais tu me donner ton login
D et plus vite que cela
U et maintenant ton mot de passe
D Je ne regarde pas !
D Merci ducon
P

NB : ./gdmlogin est ici un executable standard (non patché) en version 2.0beta4. Le test est aussi possible avec le client standard installé /usr/bin/gdmlogin en version 2.2.3.1. Il faut toutefois rajouter un "> setenv GDM_VERSION 2.2.3.1 " avant de lancer le client, et modifier le protocole en rajoutant un ctrl-B avant chaque commande (ex : "^BD Merci ducon").
PS: Gdmlogin 2.2.3.1 peut avoir des effets deplaisants sur certains window manager comme twm.

2) Password : Crack , John the Ripper

Objectif : On choisit un certain nombre de mots de passe et on lance des outils pour essayer de les découvrir à partir de leur empreintes DES standard.

2.1) Saisir des Mot de passe

On utilisera un fichier de passwords Unix local ./passwd. Il contient les logins et mots de passe cryptés réels (/etc/passwd et /etc/shadow) pour les comptes tpex et des logins supplémentaires tpexy sans mot de passe pour tester. (x et y sont des chiffres)

L'édition du fichier ./passwd se fait à travers la commande ./tppass qui est un clone de la commande passwd standard. L'executable est pour une machine Solaris.
HOST_SOLARIS > ./tppass
HOST_SOLARIS > ./tppass login_test

On évitera les mots de passe trop "compliqués" (pas plus d'un caractère spécial,...).

Question subsidiaire (notée): comment avez-vous modifié le fichier./passwd sans avoir le droit d'écriture dessus (> ls -al ).
Question subsidiaire (non notée) : Pourquoi le même mot de passe en clair pour les comptes tpex donne des mots de passe cryptés différents dans ./passwd

2.2) Suivi de Crack

Crack et John the Ripper sont lancés sur le fichier ./passwd de manière centralisée par l'administrateur. Crack travaillera en parallelle sur plusieurs machines, John reste centralisé sur 1 machine.

Le suivi de Crack est accessible par :
> ./crackview

Le suivi de John n'est pas accessible directement, suivre au tableau.

2.3) Empreintes

> more /etc/passwd
> more /etc/shadow

> ypcat passwd

> getent passwd
> getent shadow

Recherche web ou ftp de fichiers "passwd.txt", ".htpasswd", ...
Par exemple sous google "allinurl:passwd.txt" ...

3) Petits Chevaux

3.1) VI (l'éditeur Natif d'Unix)

Tester sur différents OS :

[ OSx> source ~pascal/tpinit]
OSx> vi
:q! (quit)
OSx> ls -al ~/

Quelles différences si l'on n'est pas dans le directory de travail ? (cf ./.exrc , ./tpinit, > echo $EXINIT)

3.2) Que contient le directory Secret ?

Tester éventuellement sur différents shell (et differents OS):

[ XXX> source ~pascal/tpinit ]
XXX> cd Secret
XXX> ls -al
XXX> more *
XXX> cat *
XXX> telnet
XXX> su
XXX> pwd

Commandes importantes :

> which commande

> which which (d'abord)

> echo $PATH

> man shell_builtins (ou builtins)

4) Protocole SMTP

Encore un protocole simpliste en mode texte. Quelques MailHosts : hugo (poli et plus causant), smtp1.int-evry.fr et smtp2.int-evry.fr (blindés normalement), mx2.minet.net(...),...

NB : pour avoir les serveurs de mail associés à une adresse faire la requete DNS:
> dig MX DomAddr
DomAddr est la partie après @ dans l'adresse.

> telnet mailhost 25
HELO mulot.elysee.fr
MAIL FROM: chichi@elysee.fr
RCPT TO: mon adresse
DATA
Il etait une fois ..
...
beaucoup d'enfants
.
QUIT

5-a-7) Audit et Vulnérabilités

5)CHECK ACCOUNT

Audit et correction de vulnérabilité sur le compte de l'utilisateur :
Sur les Comptes LOR-RST :
LINUX> ./chkacct

NB: repondre "i" pour ignore si l'on ne veut pas de modif. "return" fait la correction suggerée mais les modifs sont non destructives

Sur les comptes centraux INT :
> ssh elaphe (which ssh?! which elaphe ?!)
ELAPHE> ~hennequi/chkacct

6)COPS, TARA, SYSLOG

Audit Local par l'administrateur du système :

Des logs fournis par les outils d'audit COPS et TARA :
> more ./alix.cops
> more ./alix.tara
(par le web alix.cops, alix.tara)

Des logs instannés d'un ensemble de machines LOR-RST, centralisés par le protocole syslog. Les logs sont dans le directory partagé /Tools/share/syslog/:
SUN> more /Tools/share/syslog/ALL.log
SUN> grep `whoami` /Tools/share/syslog/ALL.log
SUN> tail -f /Tools/share/syslog/ALL.log

7) SARA

Audit Externe (à travers les services réseaux accessibles) d'un ensemble de machines.
Historique: SATAN->SAINT->SARA
Plus connu et mieux maintenu: NESSUS

On peut consulter les résultats d'une audit déjà faite. L'audit est non expurgée , et correspond au mode Heavy sur le sous-reseau 157.159.100 (LOR-RST).

Mode interactif, interface SARA proprement dite : Ouvrir l'URL du serveur SARA donnée au tableau (http://ipv6-2:current_sara_port/)

Consultation du Rapport Complet généré par SARA:/Users/teleinf1/pascal/TPSEC/sara_report.html

8) ADDENDUM : Mécanisme de confiance

(quelques pistes, en travaux!!)
Les tests peuvent s'effectuer entre les machines du domaine LOR-RST (mêmes comptes utilisateurs) ou entre les domaines MCI-INT et LOR-RST. Dans le deuxieme cas, il est fortement recommandé de tester la confiance dans le sens MCI-INT vers LOR-RST (et pas depuis les comptes de TP vers les comptes individuels MCI)

8.1) X11

Le serveur Xwindow (écran, clavier, souris) est identifié par la variable d'environnement DISPLAY:
> echo $DISPLAY
> setenv DISPLAY localhostname:0

Le premier type de controle d'acces au serveur est géré par la commande xhost :
> xhost + , autorise toutes les connexions
> xhost +hostname , autorise les clients lancés sur la machine hostname
> xhost - ,...

Test proposé entre 2 machines serveur X HostA et HostB:
HostA> xhost +HostB
HostB> xwd -root -display HostA:0 | xwud
conclusion ? si xhost - ? (xwd = X window Dump.)
NB : Le display ipv6-2:0 doit deja etre en "xhost+".

Le deuxieme type de controle d'acces au serveur repose sur un secret partagé (MIT-MAGIC-COOKIE). Il est géré pour chaque utilisateur dans le fichier ~/.Xauthority accessible au travers de la commande xauth.
> xauth list , donne le contenu de ~/.Xauthority
> xauth add, merge, ... , cf manuel

NB: Pour des machines utilisant le même espace de compte, l'utilisateur n'a pas besoin de gerer xauth puisque le serveur X met a jour initialement le fichier ~/.Xauthority qui est ensuite directement utilisé par les clients sur les machines du même domaine.

Exemple d'exportation de Xauth entre 2 domaines de compte différents :
HostA> xauth extract - HostA:0 | ssh user@HostB xauth merge -
Par ex : HostA=Host de TP, HostB = elaphe, ensuite un xterm lancé sur hostB peut acceder au display hostA sans restriction de la part de xhost.

8.2) ssh

AVERTISSEMENT: faire un rm ~/.ssh/* avant de quitter le TP.
NB : aussi les commandes scp, ou sftp pour les nostalgiques...
> ssh hostname , ou user@hostname

a) ssh va authentifier le host distant à travers une clé publique du host. L'utilisateur est responsable des clés publiques qu'il accepte; a lui de savoir les authentifier (->PKI !). Ces clés de machines "bien connues" de l'utilisateur sont stockées dans ~/.ssh/known_hosts. ssh accepte automatiquement les hosts distants figurant dans le fichier ou propose de rajouter dans le fichier dans le cas d'une 1ere connexion à un nouveau host.
> more ~/.ssh/known_hosts

a-addendum) Les clés de machines peuvent par exemple etre publiées dans le DNS avec le Record SSHFP (== TYPE44). Exemple :
alambix> dig int-evry.fr axfr | grep SSHFP
elaphe.int-evry.fr.     86400   IN      SSHFP   1 1 57DAEBE4A127040F2DF1FE6F86DC581FF11A0BA4
sodome.int-evry.fr.     86400   IN      SSHFP   1 1 3355D15B7C7DC9094F05960ADBEF27C8F1CC9161
troie.int-evry.fr.      86400   IN      SSHFP   1 1 98DAFB84902A606F838FBA953656A3CFBC462258
vishnu.int-evry.fr.     86400   IN      SSHFP   1 1 08FEC0DA37446C1A55456E6D564CEC27709CA046
L'option "VerifyHostKeyDNS yes" de ssh donne alors
alambix> ssh troie.int-evry.fr
The authenticity of host 'troie.int-evry.fr (157.159.11.29)' can't be established.
RSA key fingerprint is e9:24:e7:86:58:f1:ca:0b:66:c8:bd:59:82:52:db:5b.
Matching host key fingerprint found in DNS.
Are you sure you want to continue connecting (yes/no)? 
NB: autre exemple avec IPv6 en plus:
>ssh alambix.ipv6.int-evry.fr


b) L'authentification de l'utilisateur pourra prendre plusieurs formes (en fonction de la configuration du serveur et/ou des utilisateurs : le distant et le local). Les 3 formes principales sont :
c) Clé publique de l'utilisateur :
Actuellement 3 types de clés : rsa1 (rsa pour le protocole version 1), rsa et dsa (pour version 2).

c.1) Génération d'une clé avec ssh-keygen:
> ssh-keygen -t dsa , (resp. rsa, rsa1)
La bi-clé (publique,privé) est générée par defaut dans des fichiers ~/.ssh/id_dsa* (resp id_rsa, identity)

c.2) Activation de l'authentification par clé publique de l'utilisateur :
mettre les clés publique (~/.ssh/*.pub) de l'utilisateur locaux dans le ficher ~/.ssh/authorized_keys de l'utilisateur distant. Par exemple dans le cas d'un même domaine de compte :
> cat ~/.ssh/*.pub > ~/.ssh/authorized_keys

c.3) protection de la clé privée de l'utilisateur :
Les clés privées sont usuellement protégées par une "passphrase". Dans ce cas, l'utilisation de ssh n'est pas plus conviviale que dans le mode avec mot de passe, puisque ssh demandera la "passphrase" pour déverouiller la clé privée à chaque utilisation. Le demon ssh-agent permet de resoudre ce probleme. Il déverouillera la clé privée (dsa par defaut) au démarrage d'une session, et la gérera ensuite pour les clients ssh à suivre. CF. manuels ssh-agent, ssh-add.
Test de base (apres avoir testé ssh avec clé dsa et "passphrase")
> eval `ssh-agent`
> ssh-add (saisie de la passphrase)
> ssh hostname

8.12) ssh et X11

Etudier la fonction de ssh -X (eventuellement option par defaut de ssh) qui realise un couplage entre l'acces distant terminal texte et terminal Xwindow ?
Regarder la variable DISPLAY juste apres un tel ssh ...

9) Je suis parano et je me soigne