Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Firewall sortant par application: comment ca marche ? Et sous unix ?

33 réponses
Avatar
Yannick Patois
Bonjour,

J'ai lu que certains firewall sous windows etaient capable de donner
acces au reseau en selectionnant application par application les
autorisations.

J'aimerais savoir comment est fait ce mecanisme (comment le firewall
sait-il quelle application a cree le paquet a envoyer) et s'il est
facile a contourner (creer un binaire avec le meme nom, etc.).

Je serais surtout interesse par savoir si l'equivalent peut etre fait
sous unix (et linux en particulier), si cela a ete fait (les fw que je
connais ne le font pas) et quels sont les methodes permettant d'y
arriver eventuellement.

Merci.

Yannick

--
_/ Yannick Patois \___________________________________________________
| web: http://feelingsurfer.net/garp/ | Garp sur irc undernet |
| email: patois@calvix.org | |
| ATTAC dans le Pays de Gex: http://attacgex.ouvaton.org |

10 réponses

1 2 3 4
Avatar
Gilles RONSIN
Yannick Patois , le jeu. 27 mai 2004 14:06:18,
écrivait ceci:

Bonjour,
Salut,


J'ai lu que certains firewall sous windows etaient capable de
donner acces au reseau en selectionnant application par
application les autorisations.

J'aimerais savoir comment est fait ce mecanisme (comment le
firewall sait-il quelle application a cree le paquet a envoyer) et
s'il est facile a contourner (creer un binaire avec le meme nom,
etc.).


Je ne peux te parler que de Kerio 2.1.5. Il identifie le programme en
vérifiant avant communication de sa signature MD5, donc même un
pouillème de différence empècherait la confusion. Par contre ce
principe ne protège pas d'une injection de code. Là j'avoue mon
ignorance quant à ces techniques.


--
Embryon de site : http://gilles.ronsin.free.fr
Nouvelles astuces : Interprêtation des évenements XP en "français"
(trad auto)
Il est impossible pour un optimiste d'être agréablement surpris.

Avatar
Xavier Roche
Yannick Patois wrote:
J'aimerais savoir comment est fait ce mecanisme (comment le firewall
sait-il quelle application a cree le paquet a envoyer)


Il doit tracer les appels de la winsock, je suppose.

Je serais surtout interesse par savoir si l'equivalent peut etre fait
sous unix (et linux en particulier)


man iptables - et notamment --cmd-owner name

Exemple:
iptables -I OUTPUT
-p tcp
--dport 80
-m owner --cmd-owner mozilla
-j ACCEPT

(..)
owner
--cmd-owner name
Matches if the packet was created by a process with the given command
name. (this option is present only if iptables was compiled under a
kernel supporting this feature)

Avatar
Cedric Blancher
Le Thu, 27 May 2004 14:12:15 +0000, Xavier Roche a écrit :
Yannick Patois wrote:
J'aimerais savoir comment est fait ce mecanisme (comment le firewall
sait-il quelle application a cree le paquet a envoyer)
Il doit tracer les appels de la winsock, je suppose.



C'est un tout petit peu plus compliqué que ça, mais y'en a. Cf. :

http://www.sstic.org/SSTIC03/presentations/Firewalls_personnels___C._Blancher/

ou sur ma page perso (le site du SSTIC est un peu chargé en ce moment) :

http://www.netexit.com/~sid/pres/0306_SSTIC_FWPerso_Pres.pdf

Et l'article qui va avec :

http://www.netexit.com/~sid/articles/0306_SSTIC_FWPerso_Article.ps


Je serais surtout interesse par savoir si l'equivalent peut etre fait
sous unix (et linux en particulier)
man iptables - et notamment --cmd-owner name

Exemple:
iptables -I OUTPUT
-p tcp
--dport 80
-m owner --cmd-owner mozilla
-j ACCEPT


Sauf que c'est très limité :

$ ln -s /usr/bin/mon_outil mozilla

En exécutant mon lien symbolique "mozilla", je lance "mon_outil" vers le
site web de mon choix. Par exemple :

$ ln -s /usr/bin/nikto mozilla

--
BOFH excuse #284:

Electrons on a bender


Avatar
Mister
Bonjour,


Bonjour,

J'ai lu que certains firewall sous windows etaient capable de donner
acces au reseau en selectionnant application par application les
autorisations.


Absolument.

J'aimerais savoir comment est fait ce mecanisme (comment le firewall
sait-il quelle application a cree le paquet a envoyer) et s'il est
facile a contourner (creer un binaire avec le meme nom, etc.).


En fait, le firewall soft (ZoneAlarm ou autre), s'interface au niveau des
sockets.
Grosso modo, c'est un proxy de sockets, mais identifie l'emetteur (donc le
programme) grace à mon avis (et là je ne suis pas sur) au process id qui
crée une socket.
Si tu crées une application avec le meme nom qu'un programme déjà existant
et qu'il se connecte au net, le firewall va te le dire.
Quand je developpes des logiciels ayant acces à Internet, le firewall me dit
"Attention, l'application veut se connecter etc".
Quand je modifie mon code, le firewall dit "L'application a été modifiée".
Ou qq chose comme ca.
Donc, j'en deduis que le firewall gere une base de CRC d'applications pour
voir si elles ont été modifiées, et à chaque connexion sur internet par un
programme, le firewall regarde s'il n'a pas été modifié.

Je serais surtout interesse par savoir si l'equivalent peut etre fait
sous unix (et linux en particulier), si cela a ete fait (les fw que je
connais ne le font pas) et quels sont les methodes permettant d'y
arriver eventuellement.


Là, je ne connais pas assez le monde linux/unix et je laisse la parole aux
experts.

Avatar
Yannick Patois
Bonjour,

Yannick Patois wrote:
J'ai lu que certains firewall sous windows etaient capable de donner
acces au reseau en selectionnant application par application les
autorisations.


Merci beaucoup pour vos reponses, en particulier a Cedric Blanchet dont
l'article est eclairant.

J'ignorais en particulier les capacites de netfilter a filtrer sur les
UID/GID. Le nom de la commande est en effet peu utile, sauf si c'est un
chemin absolut, que cette information ne peut etre falsifiee par un
utilisateur non privilegie (mais sous linux je crois que l'on peut
reecrire ce qu'on veut la dedans, non ?), alors peut-etre...

Merci encore,

Yannick

--
_/ Yannick Patois ___________________________________________________
| web: http://feelingsurfer.net/garp/ | Garp sur irc undernet |
| email: | |
| ATTAC dans le Pays de Gex: http://attacgex.ouvaton.org |

Avatar
Cedric Blancher
Le Thu, 27 May 2004 14:39:31 +0000, Yannick Patois a écrit :
Merci beaucoup pour vos reponses, en particulier a Cedric Blanchet dont


BLANCHER, avec un R comme dans GRRRRR ;)

l'article est eclairant.


Merci.

J'ignorais en particulier les capacites de netfilter a filtrer sur les
UID/GID. Le nom de la commande est en effet peu utile, sauf si c'est un
chemin absolut,


Ben en fait non.
Le module va chercher dans la structure décrivant le process le nom de la
commande qui l'a lancé. Le problème est que ce nom de commande ne
reflète pas forcément la réalité. J'ai donné l'exemple du lien
symbolique, mais on pourra aussi écrire un wrapper à base de execve
qui permet de lancer un binaire et qu'il apparaisse sous un autre nom dans
la liste des processus, ce qui revient au même.

que cette information ne peut etre falsifiee par un
utilisateur non privilegie (mais sous linux je crois que l'on peut
reecrire ce qu'on veut la dedans, non ?), alors peut-etre...


L'information qui nous intéresse est bien le chemin absolu. À priori, un
utilisateur normal ne doit pas pouvoir écrire dans /bin, /usr/bin et
/usr/local/bin. Le mieux restant d'identifier le binaire de manière sûre.
L'idéal serait de remonter au numéro d'inode associé au programme qui
est lancé, mais ce n'est pas aussi immédiat et ça demande du temps. On
peut peut-être arriver à déplacer ça en userland avec la cible QUEUE,
ce qui permet de libérer le kernel pour d'autres paquets, et n'utiliser
ce type de check que pour les paquets NEW.


--
RJ> j'ai eu des cookies sur mon HD et j'ai un peu peur des représailles
Il faut reformater ton disque dur et le jetter depuis le 3e étage de la
tour Eiffel pour le détruire irrémédiablement sans laisser de traces.
-+- LP in <http://neuneu.mine.nu> : Par ici ou parano c'est pareil -+-

Avatar
Yannick Patois
Cedric Blancher wrote:
Merci beaucoup pour vos reponses, en particulier a Cedric Blanchet dont
BLANCHER, avec un R comme dans GRRRRR ;)

Mes plus plates excuses.



reflète pas forcément la réalité. J'ai donné l'exemple du lien
symbolique, mais on pourra aussi écrire un wrapper à base de execve
qui permet de lancer un binaire et qu'il apparaisse sous un autre nom dans
la liste des processus, ce qui revient au même.


En effet.

L'idéal serait de remonter au numéro d'inode associé au programme qui
est lancé, mais ce n'est pas aussi immédiat et ça demande du temps.


Cette information peut etre accedee (meme lentement) et est n'est pas
falsifiable sans privileges ?

peut peut-être arriver à déplacer ça en userland avec la cible QUEUE,
ce qui permet de libérer le kernel pour d'autres paquets, et n'utiliser
ce type de check que pour les paquets NEW.


Oui, cela semblerait raisonable.
Mais je ne connais rien ou ce genre de chose ai ete implementee...

Yannick

--
_/ Yannick Patois ___________________________________________________
| web: http://feelingsurfer.net/garp/ | Garp sur irc undernet |
| email: | |
| ATTAC dans le Pays de Gex: http://attacgex.ouvaton.org |


Avatar
Cedric Blancher
Le Thu, 27 May 2004 15:54:46 +0000, Yannick Patois a écrit :
L'idéal serait de remonter au numéro d'inode associé au programme qui
est lancé, mais ce n'est pas aussi immédiat et ça demande du temps.
Cette information peut etre accedee (meme lentement) et est n'est pas

falsifiable sans privileges ?


Non, parce que les informations comme les inodes sont traitées au niveau
noyau, le niveau utilisateur ne voyant que le VFS.

Oui, cela semblerait raisonable.
Mais je ne connais rien ou ce genre de chose ai ete implementee...


Moi non plus.


--
[11:39] <Arold>: 8h
[11:39] <obionedtc>: 18h putain
[11:39] <Arold>: euh oui 18h
-+- : in Guide du Petit Joueur: t'as quelle heure, toi ? -+-


Avatar
Kevin
Le 27 May 2004 14:18:52 GMT, Cedric Blancher a ecrit:
|> man iptables - et notamment --cmd-owner name
|> Exemple:
|> iptables -I OUTPUT
|> -p tcp
|> --dport 80
|> -m owner --cmd-owner mozilla
|> -j ACCEPT
|
| Sauf que c'est très limité :
|
| $ ln -s /usr/bin/mon_outil mozilla
|
| En exécutant mon lien symbolique "mozilla", je lance "mon_outil" vers le
| site web de mon choix. Par exemple :
|
| $ ln -s /usr/bin/nikto mozilla
|
Ok. Aucun mecanisme de hash n'est prevu dans iptables dans un proche
futur pour n'autoriser que le programme prevu et pas un autre?
un genre de fichier /etc/hash-iptables
avec des lignes:
mozilla HJ45HJ45HJ45

et un iptables <blabla> -m programme --prog-name mozilla -j BLABLA
et une commande iptables-add-hash mozilla /usr/bin/mozilla ?

1. Est-ce possible?
2. Est-ce interessant?
--
Kevin
Avatar
Cedric Blancher
Le Thu, 27 May 2004 15:59:34 +0000, Kevin DENIS a écrit :
Ok. Aucun mecanisme de hash n'est prevu dans iptables dans un proche
futur pour n'autoriser que le programme prevu et pas un autre?
un genre de fichier /etc/hash-iptables
avec des lignes:
mozilla HJ45HJ45HJ45


Non, parce que ce n'est pas utile.

Supposons que je veuilles empêcher un utilisateur d'utiliser autre chose
que le Mozilla qui se trouve dans /usr/bin/mozilla. Dans la mesure où on
est capable de vérifier que c'est bien ce fichier qui est exécuté
(match du chemin complet ou de l'inode), il ne sert à rien de vérifier
son intégrité parce que seul root peut le modifier.

Donc, être capable de le modifier, c'est être root, et être root, c'est
être capable d'altérer les règles de firewalling.

--
Quand je passe par le bios et que je lui dit de booter sur C, il boot
sur le PM en C: et il met le SM en D:. Quand le lui dit de booter sur
D, il boot sur le SM en C: et il met le PM en D:. Ca c'est génial.
-+- FP in: Guide du Neuneu d'Usenet - Le bonheur, c'est simple -+-

1 2 3 4