Archive for the 'Sécurité' Category

Blacklist de destinataire dans Postfix

Déjà pourquoi faire ça ? Nous avons eu un phishing assez méchant qui demande les identifiants / mots de passes au niveau de l’Université. Le truc est bien ficelé, très bien écrit et avec des domaines plausibles. Bon, le phishing est donc passé, que faire ? A part blacklister en sortie rien. On peut agir à deux niveaux : IP en blacklistant le MX du domaine de info.al au niveau du pare-feu. L’avantage est que c’est simple à faire et qu’en une seule manipulation on touche tout le réseau (du moins ce qui est dans le périmètre du pare-feu). L’inconvenient c’est qu’une requêtes MX sur le domaine sort un serveur hotmail donc il faut oublier cette méthode. Nous allons donc travailler au niveau applicatif SMTP en blacklistant le destinataire.

On génère une map de hash /etc/postfix/block_recipient :

notice@info.al  REJECT  mail bloque

Dans le main.cf :

smtpd_recipient_restrictions =
      check_recipient_access hash:/etc/postfix/block_recipient,
      ...

On recrée la map :
# postmap /etc/postfix/block_recipient

On relance Postfix :
# /etc/init.d/postfix reload

RC4-HMAC et cross-realm KDC Heimdal / AD

Voila un petit moment que j’essaie de mettre en place un cross-realm en virant le DES. Mon KDC de test est un KDC Heimdal installé par les paquets sur une Debian Squeeze. Windows 2003 SP2 gère le RC4-HMAC pour le principal d’approbation (le fameux krgtgt/NTDOMAIN@UNIXDOMAIN). Par défaut, Heimdal fait bien les choses. Un principal est crée avec trois enctypes : aes256, des3 et arcfour. Pas de simple DES : cool.

root@kdc:~# kadmin -l list -l nico

            Principal: nico@GARNETT.FR
    Principal expires: never
     Password expires: never
 Last password change: never
      Max ticket life: 1 day
   Max renewable life: 1 week
                 Kvno: 2
                Mkvno: unknown
Last successful login: never
    Last failed login: never
   Failed login count: 0
        Last modified: never
             Modifier: unknown
           Attributes: 
             Keytypes: aes256-cts-hmac-sha1-96(pw-salt),des3-cbc-sha1(pw-salt),
                            arcfour-hmac-md5(pw-salt)
          PK-INIT ACL: 
              Aliases:

Côté Windows 2003 SP2, on crée une relation d’approbation transitive unilatérale (clic clic dans l’interface) et on fixe un mot de passe pour le principal crée dans le KDC Active Directory. On déclare ensuite le realm UNIX via la commande ksetup :

ksetup /setdomain GARNETT.FR
ksetup /addkdc GARNETT.FR kdc.garnett.fr

On notera que l’on pourrait ajouter les informations de localisation du kdc directement dans la zone DNS, ca serait plus simple. Dernière étape, il faut spécifier au KDC AD que l’enctype par défaut pour l’approbation c’est du RC4 :

ktpass /MITRealmName GARNETT.FR /TrustEncryp RC4

Côté client XP, il faut évidemment l’ajouter au domaine AD. Ensuite de la même manière que sur le KDC AD, on doit déclarer le realm UNIX :

ksetup /setdomain GARNETT.FR
ksetup /addkdc GARNETT.FR kdc.garnett.fr

A l’authentification du client XP (avec son principal et son mot de passe UNIX sur le domaine Kerberos UNIX), on doit voir ça dans les logs :

2010-07-28T15:42:22 Client supported enctypes: arcfour-hmac-md5,
using arcfour-hmac-md5/aes256-cts-hmac-sha1-96

Et voila, l’algorithme minimal est bien RC4-HMAC ^^

Synchronisation LDAP/Kerberos (Heimdal)

Petit point sur la synchronisation LDAP/Kerberos (cad du champ userPassword et des clés du KDC). J’ai décidé de faire ça avec l’overlay smbk5pwd fourni dans les contribution d’OpenLDAP. Cet overlay met à jour les clés (et eventuellement les empreintes NTLM et LM) en même que le champs userPassword lors d’une requête de changment de mot de passe (par exemple via ldappasswd). Cependant il faut faire face à plusieurs contraintes :
- Cet overlay ne marche que avec un KDC Heimdal. Un autre overlay qui interagit avec kadmind nommé smbkrb5pwd est disponible. Il est donc utilisable avec MIT et Heimdal mais n’est pas encore prêt pour la production.
- Les attributs Kerberos pour LDAP doivent être accolés à la feuille. On ne peut pas avoir une OU kerberos ou on stock les principals dedans. En effet, l’overlay regarde pour quelle feuille on demande le changement de mot de passe, ensuite il regarde si c’est un objet de type krb5KDCEntry et alors il met à jour les clés.
- Le KDC maître doit être sur le même machine que slapd car la communication se fait via un socket local (ldapi).

1. Installation de l’over-laid

On récupere les sources de slapd (synchronisées avec la version courante su paquet que l’on a installé) :
cd /usr/local/src
aptitude build-dep slapd

On se place dans les sources :
cd openldap-2.4.17
./configure
make depends
make

On installe évidement pas slapd, on va juste compiler l’overlay :
cd contrib/slapd-modules/smbk5pwd
aptitude install heimdal-dev
make

Note : il faut faire quelques petits ‘ln’ pour que ça passe :
ln -s /usr/lib/libldap_r-2.4.so.2 /usr/lib/libldap_r.so
ln -s /usr/lib/liblber-2.4.so.2 /usr/lib/liblber.so
ln -s /usr/lib/libcrypto.so.0.9.8 /usr/lib/libcrypto.so

Enfin, on déplace le contenu de .libs vers /usr/lib/ldap (endroit contenant les modules / overlays de slapd, du moins sous Debian).
mv .libs/* /usr/lib/ldap/

2. Configuration de slapd

Hypothèses :
- Mes utilisateurs sont stockés dans la branche ou=people,dc=garnett,dc=fr.
- Ils sont identifiés par un attribut ‘uid’ contenant leur matricule.

Pour activer l’overlay :

include /etc/ldap/schema/hdb.schema
include /etc/ldap/schema/samba.schema
moduleload smbk5pwd
...
database hdb
...
overlay smbk5pwd

Et ensuite quelques ACLs l’idée est de permettre l’accés en écriture au clés (même pas aux attributs Kerberos car ils sont ajoutés par une autre moulinette) :

access to dn.base="ou=people,dc=garnett,dc=fr"
     by dn="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" write
     by * read
 
access to dn.subtree="ou=people,dc=garnett,dc=fr"
     attrs=krb5KeyVersionNumber,krb5Key
     by dn="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" write
     by * none 
 
access to dn.subtree="ou=people,dc=garnett,dc=fr"
     attrs=entry,objectclass,krb5PrincipalName,krb5MaxLife,\
     krb5MaxRenew,uid,krb5KDCFlags
     by dn="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" read
     by * none

Le DN de connexion bizarre est celui utilisé par la SASL lors de l’accès via ldapi. Avec ce jeu d’ACL (a ajuster selon vos besoins) on peut changer les clés des utilisateurs sans soucis et faire un dump du KDC. Je dois tester comment ça se comprote avec la réplication KDC maitre / esclave(s). pour voir si les ACLs merdouillent, slapd avec le loglevel à 128.

3. Configuration du KDC

On l’installe :
aptitude install heimdal-kdc

Il faut juste indiquer au KDC Heimdal d’utiliser un backend LDAP. dans le /etc/heimdal-kdc/kdc.conf :

[logging]
kdc = FILE:/var/log/heimdal-kdc.log
[kdc]
database = {
  dbname = ldap:ou=people,dc=garnett,dc=fr
  realm = UNIV-ORLEANS.FR
  mkey_file = /var/lib/heimdal-kdc/m-key
  acl_file = /etc/heimdal-kdc/kadmind.acl
}
[kadmin]
[password-quality]

Puis dans le /etc/krb5.conf :

database = {
    dbname = ldap:ou=people,dc=garnett,dc=fr
}

Un restart du KDC Heimdal. Et on peu créer les principals par défaut :
kadmin -l
> init GARNETT.FR

Les principals par défaut ont du être crées dans la branche people (attention aux ACLs slapd, dans notre configuration on ne pourra pas le faire si directement).

4. Ajout des informations Kerberos à une feuille

Je suis dans le cas ou les gens existent déjà et donc on ne peut pas casser le LDAP. Un simple ldapmodify permet de s’en sortir. Créons le fichier kerb.ldif :

dn: uid=matricule,ou=people,dc=garnett,dc=fr
changetype: modify
add: objectClass
objectClass: krb5Principal
-
add: objectClass
objectClass: krb5KDCEntry
-
add: krb5PrincipalName
krb5PrincipalName: p10613@UNIV-ORLEANS.FR
-
add: krb5KeyVersionNumber
krb5KeyVersionNumber: 1
-
add: krb5MaxLife
krb5MaxLife: 86400
-
add: krb5MaxRenew
krb5MaxRenew: 604800
-
add: krb5KDCFlags
krb5KDCFlags: 126
-

On fait un ldapmodify et un changment de mot de passe derrière et les attributs krb5Key seront ajoutés à la feuille. Fin de l’histoire. Derrière on peut faire un kinit pour topper son ticket.

Point de RDV SSH

Voila bien longtemps qu’il n y avait pas eu de nouveau post sur ce blog. Disons que ma vie personnelle a pas mal changée et ça a influé sur mes priorités. Enfin je tente de revenir au top avec un billet sur comment mettre en place un point de RDV SSH. Un point de RDV SSH implique trois protagonistes :
- Un service réseau ;
- Une passerelle SSH ;
- Un client.
Le principe est que le client doit pouvoir accéder à un service du réseau interne sur une machine type passerelle SSH.

Schéma :

1) On exporte la socket du service MySQL vers la passerelle SSH. L’administrateur réseau fait ça en tapant la commande suivante sur le serveur MySQL (le -R crée un tunnel inversé) :

ssh -N -f -R 4406:127.0.0.1:3306 admin@gw_ssh

Le service est joignable sur le loopback de la passerelle SSH.

2) Le client crée ensuite un tunnel SSH vers la socket fraichement crée sur le loopback de la passerelle :

ssh -N -f -L 5506:127.0.0.1:4406 client@gw_ssh

Et hop, le client peut joindre le service MySQL sur lo loopback port 5506 de son laptop.

Avantages :
- Le client n’a pas de compte système sur le serveur MySQL ;
- On n’est pas obligé d’autoriser des connexion de la passerelle vers le serveur de BD (uniquement l’inverse) ;
- A aucun moment le service MySQL est exposé sur un interface “réelle” (uniquement sur des loopback) ;
- Tout le trafic est chiffré (il passe dans des tunnels SSH).

Inconvénient :
- Le client doit savoir utiliser SSH.

Intégration de Pyzor, Razor2 et DCC sous Spamassassin / Amavisd-new

Ce billet fait un point sur l’intégration des bases données distribuées d’empreinte de messages dans un environnement Spamassassin invoqué par Amavisd-new sous Debian. Ces systèmes sont uniquement basés sur les occurrences. C’est a dire qu’on va compter le nombre de fois que les serveurs centraux “voient” passer un message. Les empreintes interviennent dans le processus de normalisation des messages pour être présentés aux serveurs. On réalise plusieurs empreintes pour un message correspondants aux partie “intéressantes” du message (fuzzy checksums). Ces empreintes sont ensuite soumises sous forme de rapport aux serveurs. La différence entre DCC et Pyzor/Razor2 est dans le mécanisme de collecte : DCC collecte tout (ham et spam) tandis que Razor2 et Pyzor ne collectent que des spams. La partie qui nous intéresse est le client. Quand il voit passer un message, il interroge les serveurs pour avoir les statistiques relatives à ce message.

On va commencer par installer ce que l’on peut via les packages :
# apt-cache search razor

pyzor - spam-catcher using a collaborative filtering network
razor - spam-catcher using a collaborative filtering network

# apt-cache search dcc-client
Rien, il faudra se palucher DCC depuis les sources … La raison est que la version packagée par Debian est vulnérable à une faille non corrigée.

1. Razor2 et Pyzor

# apt-get install razor pyzor
On initialise un environnement par défaut Razor (création du .razor dans la home du root) :
# razor-admin -d -create
Ensuite en enregistre sa machine sur le réseau Razor :
# razor-admin -register
On y ajoute le fichier de configuration par défaut de l’agent :
# cp /etc/razor/razor-agent.conf /root/.razor/
On balance ça dans la home de l’utilisateur amavis :
# cp -r /root/.razor /var/lib/amavis
On effectue ensuite deux ou trois modifications dans /var/lib/amavis/.razor/razor-agent.conf :
- passer debug à 0 ;
- ajouter la ligne : “razorhome = /var/lib/amavis/.razor” pour que Razor2 trouve sa home.
On fixe le possesseur du répertoire fraichement ajouté :
# chown -R amavis:amavis /var/lib/amavis/.razor
Dans les préférences Spamassassin de l’utilisateur amavis (/var/lib/amavis/.spamassassin/user_prefs), on lui spécifie l’emplacement du fichier de configuration de Razor2 :

razor_config /var/lib/amavis/.razor/razor-agent.conf

Pour Pyzor, c’est plus simple, on définit le serveur auquel rattacher l’agent local :
# pyzor discover

downloading servers from http://pyzor.sourceforge.net/cgi-bin/inform-servers-0-3-x

Puis recopie de la configuration dans la home de amavis :
# cp -r /root/.pyzor /var/lib/amavis/
chown -R amavis:amavis /var/lib/amavis/.pyzor

On test Pyzor :
# su amavis -c 'pyzor ping'
Côté Spamassassin, on vérifie que dans /etc/mail/spamassassin/v310.pre on a bien les plugins activés :

loadplugin Mail::SpamAssassin::Plugin::Razor2
loadplugin Mail::SpamAssassin::Plugin::Pyzor

2. DCC

On va donc le compiler :
# cd /usr/local/src/
# wget http://www.rhyolite.com/dcc/source/dcc.tar.Z

--2010-02-24 11:06:08--  http://www.rhyolite.com/dcc/source/dcc.tar.Z
Resolving www.rhyolite.com... 192.188.61.3, 2001:4978:230::3
Connecting to www.rhyolite.com|192.188.61.3|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 1630683 (1.6M) [application/x-compress]
Saving to: `dcc.tar.Z'
 
100%[======================================>] 1,630,683   84.2K/s   in 21s     
 
2010-02-24 11:06:29 (75.4 KB/s) - `dcc.tar.Z' saved [1630683/1630683]

# tar xzf dcc.tar.Z
# cd dcc-1.3.120

On va compiler DCC avec trois options : l’uid qui vaut amavis, on désactive le serveur et la partie dccm (interface Sendmail).
./configure --with-uid=amavis --disable-server --disable-dccm
# make
# make install

Dans /etc/mail/spamassassin/v310.pre, décommenter :

#loadplugin Mail::SpamAssassin::Plugin::DCC

Dans /etc/mail/spamassassin/local.cf, ajouter :

# dcc
use_dcc 1
dcc_path /usr/local/bin/dccproc
 
#pyzor
use_pyzor 1
pyzor_path /usr/bin/pyzor
 
#razor
use_razor2 1

Effectivement dans le cadre d’une utilisation avec Amavis, ça sert pas a grand chose (les réglages de ce fichier sont écrasés par Amavis). Par contre si on décidait de dédier la machine à Spamassassin et d’interfacer la version optimisée (Spamd) directement avec Postfix, le local.cf serait utilisé.

On redémarre Amavis et on test :
# /etc/init.d/amavis restart
# wget http://svn.apache.org/repos/asf/spamassassin/branches/b2_4_0/sample-spam.txt
# su amavis -c 'spamassassin -D test-report.txt 2>&1
# egrep -i '(pyzor|razor|dcc)' test-report.txt

[11769] dbg: plugin: loading Mail::SpamAssassin::Plugin::DCC from @INC
[11769] dbg: dcc: network tests on, registering DCC
[11769] dbg: plugin: loading Mail::SpamAssassin::Plugin::Pyzor from @INC
[11769] dbg: pyzor: network tests on, attempting Pyzor
[11769] dbg: plugin: loading Mail::SpamAssassin::Plugin::Razor2 from @INC
[11769] dbg: razor2: razor2 is available, version 2.84
[11769] dbg: config: fixed relative path: /var/lib/spamassassin/3.002005/updates_spamassassin_org/25_dcc.cf
[11769] dbg: config: using "/var/lib/spamassassin/3.002005/updates_spamassassin_org/25_dcc.cf" for included file
[11769] dbg: config: read file /var/lib/spamassassin/3.002005/updates_spamassassin_org/25_dcc.cf
[11769] dbg: config: fixed relative path: /var/lib/spamassassin/3.002005/updates_spamassassin_org/25_pyzor.cf
[11769] dbg: config: using "/var/lib/spamassassin/3.002005/updates_spamassassin_org/25_pyzor.cf" for included file
[11769] dbg: config: read file /var/lib/spamassassin/3.002005/updates_spamassassin_org/25_pyzor.cf
[11769] dbg: config: fixed relative path: /var/lib/spamassassin/3.002005/updates_spamassassin_org/25_razor2.cf
[11769] dbg: config: using "/var/lib/spamassassin/3.002005/updates_spamassassin_org/25_razor2.cf" for included file
[11769] dbg: config: read file /var/lib/spamassassin/3.002005/updates_spamassassin_org/25_razor2.cf
[11769] dbg: razor2: part=0 engine=4 contested=0 confidence=0
[11769] dbg: razor2: results: spam? 0
[11769] dbg: razor2: results: engine 8, highest cf score: 0
[11769] dbg: razor2: results: engine 4, highest cf score: 0
[11769] dbg: pyzor: pyzor is available: /usr/bin/pyzor
[11769] dbg: pyzor: opening pipe: /usr/bin/pyzor check < /tmp/.spamassassin11769frgBiutmp
[11769] dbg: pyzor: [11771] finished: exit=0x0100
[11769] dbg: pyzor: got response: public.pyzor.org:24441 (200, 'OK') 0 0
[11769] dbg: dcc: dccifd is not available: no r/w dccifd socket found
[11769] dbg: dcc: dccproc is available: /usr/local/bin/dccproc
[11769] dbg: dcc: opening pipe: /usr/local/bin/dccproc -H -x 0 -a 212.17.35.15 < /tmp/.spamassassin11769frgBiutmp
[11769] dbg: dcc: got response: X-DCC-CollegeOfNewCaledonia-Metrics: sara 1189; Body=1 Fuz1=1 Fuz2=38

UnixGarden : Jail et OpenVZ

Juste un post pour indiquer la mise en ligne ce jour d’un article soumis sous “creative commons” à Linux Magazine. Je trouve ce principe particulièrement intéressant de publier l’article sur le web librement accessible quelques mois après sa parution. Il est disponible ici.

NAT authentifié avec authpf

A mon sens le NAT est une horrible (mais nécessaire) verrue. Le pire étant quand même lorsque l’on ose qualifier de sécurité le fait de NATer des machines : “On peut initier des connexions vers l’exterieur mais pas l’inverse“. C’est vrai, sauf que les machines compromises initient des connexions vers l’extérieur pour signifier à leur botnet de raccordement leur disponibilité. Devant garantir un minimum de traçabilité de ces accès, j’ai décidé de mettre en place une passerelle de NAT authentifié avec authpf. Authpf permet de jouer des règles PF via les ancres lors d’une connexion SSH. The big picture :




La machine authpf est un OpenBSD 4.6. La problématique est que cette machine n’est pas notre pare-feu principal (snif …). Les flux doivent donc être routés vers cette machine au niveau du pare-feu en fonction du réseau source. Ceci n’est possible qu’en appliquant du “policy routing” qui permet d’appliquer des règles de routage en fonction d’autres critères que le réseau (ou la machine) de destination. On définit ensuite le routeur externe comme passerelle du NAT authentifié et c’est gagné.

1. Configuration de la passerelle

Au niveau de la passerelle, il faut ajouter les lignes suivantes au niveau du rc.conf :

pf=YES
pf_rules=/etc/pf.conf.local

J’aime bien mettre mes règles PF dans un fichier à part.

Examinons le pf.conf.local (seule les sections intéressantes sont affichées) :

set skip on lo
block in log all
block out log all
 
nat-anchor "authpf/*"
rdr-anchor "authpf/*"
binat-anchor "authpf/*"
 
anchor "authpf/*"

On laisse tout passer sur 127.0.0.1 (lo), ensuite on bloque tout et on loggue en entrée et en sortie. Enfin, on pose les ancres pour ajouter dynamiquement les règles des utilisateurs authpf.

2. Création des utilisateurs

Dans tout organisme moderne, on dispose d’un LDAP avec les utilisateurs dedans (et surtout un uid associé à un userPassword). Dans ce cas, on peut connecter son NAT authentifié au LDAP. Pour ce faire, deux options : ypldap ou login_ldap. J’ai choisi la méthode via login_ldap car je ne dispose pas de vrai posixAccount dans mon LDAP et des informations telles que l’UID sont nécessaires. Voila ma section dans le /etc/login.conf pour associer LDAP et authpf :

ldap-authpf:\
        :auth=-ldap:\
        :x-ldap-server=monldap.mondomaine:\
        :x-ldap-basedn=ou=People,dc=mondomaine:\
        :x-ldap-binddn=cn=toto,ou=user4bind,dc=mondomaine:\
        :x-ldap-bindpw=azerty:\
        :x-ldap-filter=(&(objectClass=inetOrgPerson)(uid=%u)):\
        :welcome=/etc/motd.authpf:\
        :shell=/usr/sbin/authpf:\
        :tc=default:

Pour créer les utilisateurs :
useradd -L ldap-authpf -d /var/empty -s /usr/sbin/authpf -r 1500..3000 -g =uid pastounus
Cela crée l’utilisateur pastounus avec une home bidon (-d /var/empty) qui va utiliser la “login class” ldap-authpf (-L ldap-authpf) ainsi que le shell authpf (-s /usr/sbin/authpf) et un groupe privé UPG (-g =uid).

3. Utilisation

On ajoute les règles de l’utilisateur pastounus dans le fichier /etc/authpf/users/pastounus/authpf.rules :

int_if=bge0
 
nat pass log on $int_if from $user_ip to any -> XXX.XXX.XXX.XXX

Et voila : une fois authentifié, pastounus est naté ! On notera quand même qu’il convient d’ajouter les routes de retour sur la passerelle pour les réseaux derrière le NAT authentifié. La passerelle devra également proxifier les réponses ARP pour les IP vers lesquelles elle effectue les translations. Tout cela se passe dans le rc.local. Dans notre exemple XXX.XXX.XXX.XXX est l’adresse de NAT, YYY.YYY.YYY.YYY est le réseau privé à NATer et ZZZ.ZZZ.ZZZ.ZZZ est la patte du pare-feu sur laquelle est raccordée la passerelle.

# Add your local startup actions here.
 
echo '.'
route add -net YYY.YYY.YYY.YYY/24 ZZZ.ZZZ.ZZZ.ZZZ
 
arp -s XXX.XXX.XXX.XXX @mac_nat_auth pub

Proxy FTP sous Linux

Pour éviter de NATer à tort et à travers nos (chers) utilisateurs, nous avons décidé de mettre en place un proxy FTP. Nous pensions pouvoir trouver une multitude d’outils pour rendre ce service. Hé bien non, il n’y en a que deux :

  • ftp-proxy qui est un peu plus récent (2005) et qui lui ne semble pas avoir de problèmes connus.

Notre choix s’est porté sur ftp-proxy. Ce produit fait partie de la proxy-suite développée par SuSE (mais elle avale pas). L’installation sur une Debian Lenny est d’une simplicité biblique.

Tout d’abord, installons le package :

apt-get install ftp-proxy

Ensuite, il faut autoriser le démarrage du service en mode daemon dans /etc/default/ftp-proxy :

RUN_DAEMON=yes

Enfin, il faut modifier le fichier /etc/proxy-suite/ftp-proxy.conf. J’ai mis l’intégralité de mon fichier purgé des commentaires :

[-Global-]
AllowMagicUser yes	
AllowTransProxy no	
DestinationAddress	localhost	
DestinationTransferMode	client
Group			nogroup
LogDestination	/var/log/ftp-proxy/ftp-proxy.log
LogLevel		INF
Port 2121
User			nobody

Une petite explication des paramètres. AllowMagicUser permet de “mettre de la magie” dans le nom de l’utilisateur. En gros ça permet d’interpréter une chaine type utilisateur@serveur:port ce qui est assez courant pour les clients FTP en ligne de commande. AllowTransProxy permet d’autoriser ou non le proxy transparent. J’ai choisi de le désactiver. DestinationAddress est utile quand on veut utiliser ftp-proxy en reverse devant un de nos serveurs FTP (pour interdire des commande ou bloquer du trafic non FTP). Dans ce cas on doit aussi activer le mode transparent. DestinationTransferMode permet de forcer le mode de fonctionnement en actif ou en passif. Ici je laisse le choix au client. Group et User fixent l’identité sous laquelle le service s’exécute. LogDestination et LogLevel l’emplacement et le niveau de détails des événements remontés. Enfin Port donne le port utilisé par ftp-proxy. Il n’y a plus qu’a le lancer :

/etc/init.d/ftp-proxy start

Et voila !

Client Windows XP, KFW, KDC Unix et Mozilla

Un petit post pour mémoire sur le fonctionnement d’un client Windows XP avec KFW (Kerberos For Windows) et les outils Mozilla. Mon but est de proposer une authentification Kerberos aux utilisateurs itinérants : non raccordés à un domaine, compte local à la machine et authentification (au moment du login) non liée au KDC. KFW est un utilitaire distribué par le MIT qui permet d’intégrer une couche GSSAPI “traditionnelle” dans Windows. En effet, Windows utilise une variante fermée de la GSSAPI qui se nomme SSPI (Security Support Provider Interface). L’installation de KFW n’est pas compliquée (suivant, suivant et terminer). Une fois installée, on doit configurer le fichier krb5.ini (qui ressemble comme deux goutes d’eau au krb5.conf). Voici un exemple minimal :

[libdefaults]
	default_realm = MONDOMAINE.FR
 
[realms]
        MONDOMAINE.FR = {
                kdc = kdc.mondomaine.fr
        }
 
[domain_realm]
	.monrealm.fr = MONDOMAINE.FR
	mondomaine.fr = MONDOMAINE.FR

Ensuite, il suffit de cliquer pour obtenir les credentials (TGT). Ensuite, pour les applications Mozilla il faut faire un petit réglage. En effet, Firefox et Thunderbird utilisent par défaut la SSPI. On peut forcer l’utilisation de la GSSAPI en désactivant le SSPI. Pour ce faire, dans “Outils”, “Options” et “Editeur de configuration” placez le network.auth.use-sspi à false.

Extrusion Detection : Security Monitoring for Internal Intrusions

taoextrusionHier soir j’ai terminé le livre “Extrusion Detection : Security Monitoring for Internal Intrusions” de Richard Bejtlich. Ce livre est dédié à l’étude du phénomène d’extrusion. L’extrusion est un acte malveillant initié depuis le réseau interne. Cet acte peut avoir comme résultat la fuite d’information. Il peut aussi être la conséquence de compromissions de vos machines. Une fois sous le contrôle d’un pirates, vos machines peuvent se mettre à initier des attaques vers d’autres sites. Sur une dizaine de chapitres, l’auteur propose des méthodes basées sur l’analyse du trafic réseau pour mettre ces malveillances en lumières. Les aspects techniques sont largement couverts : l’instrumentation du réseau (sondes, boitiers TAP etc.), la collecte des éléments réseau (statistiques globales, données de sessions et stockage des payloads), leur analyse (le plus souvent via des outils libres : sguil, argus, snort etc.). De bonnes astuces sont également livrées, telles que le “sink hole” qui consiste à introduire des routes plus larges que celles réellement utilisées afin de capturer le trafic illégitime. Ce livre est à mon sens excellent dans la mesure ou il donne des pistes exploitables pour garder un oeuil sur l’activité de son réseau et surtout de pouvoir présenter des éléments en cas de compromission. L’auteur propose également un livre entièrement dédié à l’analyse du trafic réseau dans un optique plus classique de détection d’intrusion. Il est déjà sur ma table de nuit …