Notes pour TP Securite Unix
Version Option SSR, Mars 2008, comptes tpe1 à tpe9
0) Espace de Travail
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 :
- LINUX : hosts en A205 (RedHat), fats (Suse), IPv6-2 (Mandrake), idefix2 (fedoraCore 4)
- SOLARIS 5.5 : SAND, HUGO
- SOLARIS 5.7 : IDEFIX
- SOLARIS 5.8 : ALAMBIX, BONEMINE, GOUDURIX
- HPUX : JARRETT
- Domaine S2IA : ELAPHE
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 :
- Le processus standard de gestion du login sous X11 est gdm
- Le cheval de Troie est l'executable ./gdmTP
- cf. aussi directory ./GDM/
-
Pour Tester ./gdmTP :
> xhost + (!!)
> ./gdmTP
Sortie possible avec "arret" dans menu "systeme" de gdmTP.
NB : gdmTP (comme gdm) ne termine que si le mot de passe est correct !
- PS : y-a aussi des données cachées dans l'énoncé !!
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 :
- Invite : N str
- Invite No Echo : U str
- Messages : D str
- Quit : P
- Reset : A
- Session : G
- Stop : !
- Langage : &
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.
- Salut c'est moi : HELO My_host
- J'ai un mail qui viens de : MAIL FROM: moi
- C'est un mail pour: RCPT TO: addresse_mail
- Le contenu du mail: DATA (return) texte_avec_returns (return).(return)
- J'ai oublié : HELP [cmd]
- EXPN adresse
- VRFY adresse
- QUIT
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
où 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 :
- Mecanismes .rhosts, même fonctionnement sans mot de passe que rsh
- Authentification par mot de passe (sur le systeme distant)
- Authentification par clé publique de l'utilisateur local, acceptée par l'utisateur distant
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