Copy Link
Add to Bookmark
Report

N0RoUTE Issue 3-12 Introductions aux Firewalls

eZine's profile picture
Published in 
N0RoUTE
 · 4 years ago

  

*******************************DISCLAIMER******************************
* Cet article et son contenu ne sont donnes qu'a but educatif *
* L'auteur degage toute responsabilite quant a son usage frauduleux *
***********************************************************************

-----------------------------------------------------------------------
| Noroute #3 | LordFrog | Introduction aux firewalls |
-----------------------------------------------------------------------

Preintroduction
---------------

Attention! je considere que vous connaissez tcp/ip un
minimum.... si pour vous reseau == minitel, pas la peine de continuer :)


Introduction
------------

Qu'est ce que c'est qu'un firewall? c'est un dispositif mis en
place par les administrateurs systemes (si je dis rewts je vais en perdre
en route =) ) pour proteger le reseau interne des attaques de l'exterieur
. Plusieurs methodes sont utilisees mais les composants physiques les plus
courants sont des routeurs (filtrants... ca sert :)) et une ou plusieurs
machines.


Les principes de base:
---------------------

Les machines directement connectees sur Internet sont *toutes*
potentiellement vulnerables, elles ne le sont peut etre pas maintenant,
mais elles le seront quand on aura decouvert "le bug de sendmail 8.42.666",
et meme si vous croyez avoir parfaitement realise la securite d'une
machine, vous etes rarement a l'abri d'une attaque a base de paquets forges
(on dit aussi spoofes), c'est a dire pretendant venir de votre reseau
interne ou de tout autre machine que vous trustez, etc... enfin bon
bref.. virtuellement une telle machine *est* hackable (miam :) ).

"Firewall" pourrait se traduire en francais par "porte coupe feu",
et c'est exactement le principe... confiner la vulnerabilite d'une
connexion a Internet a une machine ou un perimetre donne.

En pratique vous avez beaucoup de facons de faire un firewall, mais
la configuration la plus "safe" est celle dite du "perimeter
network". Bon... decrochez pas, j'explique :)

Vous prenez 2 routeurs, et une becane (voire 2 pour le fin du
fin). Vous placez le premier routeur entre vous et la connection
exterieure, c'est le routeur "externe". Le deuxieme routeur sera lui au point
d'entree du reseau interne, le routeur "interne". Au milieu de tout ca vous
mettez une becane genre blindee, le "bastion host". Et puis le fin du fin,
c'est de rattacher un moyen d'ecrire les logs non effacable a ce bastion
host, un lecteur de bandes, une ecriture sur papier (sisi ca existe :) ),
ou une machine rattachee par une liaison serie (la fameuse deuxieme box
dont je vous parlait).



***********
* Net *
***********
/ \
| EXTERNAL NETWORK
|
\ /
-----------
I Routeur I
I I++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
I Externe I
-----------
/ \
|
|
\ / PERIMETER NETWORK
-----------
I Bastion I
I I
I Host I
-----------
/ \
|
|
\ /
-----------
I Routeur I
I I++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
I Interne I
-----------
/ \
|
|
\ / INTERNAL NETWORK
***********
* Reseau *
* *
* Interne *
***********



Ce qui est vital dans un firewall, c'est le controle du traffic
entrant, le controle du traffic sortant, la securisation des services que
vous offrez et le log de tout ca (fiou.. on comprend pourquoi il y a des
mecs qui ne s'occupent QUE de ca :) ).

Bon deja... la premiere chose que rencontre votre joli paquet
venant du net quand il arrive face au perimeter network c'est le routeur
externe. Il ne faut pas oublier que ce routeur est un routeur
filtrant... donc le rewt (bin si finalement je dis comme ca :)) va avoir
mis un certain nombre de filtres en place. Quand il passe ce routeur il est
confronte au bastion host, qui lui peut avoir des mecanismes de securite et
de confinage tres evolues (proxies, socks, regles de filtrage, etc...), et
puis au final si il passe tout ca il arrive face au routeur interne qui lui
AUSSI a des filtres... enfin a mon avis si vous tombez sur un *vrai*
firewall, il y a peu de chances que le paquet ait survecu jusque la :)

Le routeur externe
------------------

Ce routeur est cense proteger le perimeter network (et par
extension tout le reseau meme si, on le verra plus tard, les trusts entre
le perimeter network et le reseau interne sont faibles) de l'exterieur. Et
qu'est ce qu'il fait pour ca? je vous le donne en mille emile, il FILTRE
:).

Bon... detaillons ce que fait exactement ce routeur quand un paquet
lui arrive dans la tronche (ouch, fait mal :p). Il regarde 6 choses: le
protocole, l'adresse source, l'adresse destination, le port source, le port
destination et dans le cas d'un paquet TCP si le bit ACK est positionne. Ce
routeur a des filtres que lui a sympathiquement fait ingurgiter le rewt
lorsqu'il a mis en place son firewall.

exemple de filtres (ou rules) d'un routeur cisco:
(le reseau interne est 192.168.10.0, et l'host truste est 172.16.51.50)

access-list 101 permit ip 172.16.51.50 0.0.0.0 192.168.10.0 0.0.0.255
access-list 101 deny ip 0.0.0.0 255.255.255.255 0.0.0.0 255.255.255.255
interface serial 0
access-group 101 in

access-list 102 permit ip 192.168.10.0 0.0.0.255 172.16.51.50 0.0.0.0
access-list 102 deny ip 0.0.0.0 255.255.255.255 0.0.0.0 255.255.255.255
interface serial 0
access-group 102 out

bon c imbitable... je suis bien d'accord, on va se representer ca sous
forme de tableaux (d'ailleurs je ferais comme ca jusqu'a la fin de
l'article)

D. = Direction (Inbound, Outbound)
D.A. = Destination Address
S.A. = Source Address
P. = Protocol
D.P. = Destination Port
S.P. = Source Port
* = Any

Rule D. D.A. S.A. P. D.P. S.P. ACK Action
A I 192.168.10.0 172.16.51.50 * * * * Permit
B O 172.168.51.50 192.168.10.0 * * * * Permit
C * * * * * * * Deny

Bon... deja il faut savoir que les regles A, B, C sont examinees dans
l'ordre. Que se passe-t-il si un paquet provenant disons de 42.42.42.42 (la
reponse est ailleurs :) ) essayait de contacter le reseau interne? Le
routeur examine le filtra A... nope c pas ca (la direction est mauvaise),
puis le filtre B... toujours pas ca (adresse source <> de celle defini dans
le filtre), puis enfin le filtre C... qui match tout le reste! donc le
paquet est rejete.

Ces regles la sont simples... ni les ports ni le ack ne sont
verifies, regardont des regles un peu plus evoluees:

Rule D. D.A. S.A. P. D.P. S.P. ACK Action
A I Internal External TCP 25 >1023 * Permit
B O External Internal TCP >1023 25 Yes Permit
C O External Internal TCP 25 >1023 * Permit
D I Internal External TCP >1023 25 Yes Permit
E * * * * * * * Deny

Avant que vous ne vous pulverisiez le neurone a vous demander ce
que font ces filtres :) ils permettent l'envoi et la reception du courrier
a partir du reseau interne vers le reseau externe et empechent TOUT autre
traffic.

Quelques petits rappels avant de vous detailler le fonctionnement
* sous unix, les ports entre 1 et 1023 ne sont utilisables
que par le rewt, et souvent utilises pour des services connus (ex:
sendmail, port 25)
* les paquets tcp, une fois la connection negociee, portent
tous le bit ACK positionne (cf l'excellent papier de kewl sur le tcp/ip
dans NoRoute #1)

Imaginons que qqun du net veuille envoyer un mail a une personne du
reseau interne, son sendmail negocie la connexion (filtra A), la connexion
est etable (le bit ACK est donc positionne) et le demon SMTP interne repond
au sendmail externe (filtre B), la meme chose pour une connexion dans
l'autre sens (interne envoyant du mail a extern) avec les filtres C et D.

Maintenant imaginons qu'un hacker (roooooo :) ) essaye de faire un
finger sur une machine interne (port 79 le finger), le routeur check les
filtres A, B, C ,D et comme rien ne correspond niveau port passe au filtre
E qui est un deny... donc pas de finger.

L'interet du check du bit ACK est que certains demons installes par
des users ou par des em*****eurs (genre xfree au hasard :) ) tournent sur
des ports > a 1023. imaginons que le bit ACK ne soit pas mis, je suis un
hacker astucieux (heu c po vrai, je suis pas astucieux du tout, mais on va
faire comme ci hein :) ), je place sur ma machine un client sur le port 25
(je suis root j'ai le droit, m'emmerdez pas :p) qui va aller faire une
demande de connection sur le port 6000 de la machine interne... ca rentre
dans les rules A et B.. donc ca passe. Avec le bit ACK de positionne ca ne
passe pas :)

Generalement sur ce routeur externe sont places des filtres qui
n'autorisent la connection qu'aux services internets places sur le bastion
host (on va y arriver, vous inquietez pas :) ), genre ftp, nnt, smtp,
etc... sont deny tout le reste, et tous les paquets venant d'adresses
internes (dommage pour le spoof).


Le bastion host
---------------

C'est le deuxieme niveau de securite du firewall... deja si on est
parano (et un mec qui met un firewall EST parano) on commence par repliquer
les filtres qu'on a mis sur le routeur interne. Un bastion host est une
machine avec le moins de choses possibles... juste de quoi provider les
services internet et de quoi logguer. Pas de comptes utilisateurs (a part
le compte root), et le moins de choses possibles dessus (il y en a meme ou
il n'y a pas de compilo :) ) pour ne pas faciliter le travail de gens mal
intentionnes qui pourraient essayer de l'owner ;)

Generalement, on concentre les services internet sur cette machine,
et elle sert egalement de relai entre le reseau interne et internet par des
mecanismes de proxy.

Un proxy est un mecanisme permettant de faire passer toutes les
connections via le bastion host, en creeant un "circuit virtuel". C'est a
dire que le client aura l'impression qu'il parle directement au serveur et
vice versa. Un proxy est utile pour logger et controler tout ce qui passe
entre l'exterieur et le reseau interne.

Un certain nombre de services utilise deja un mecanisme de proxy,
ces services sont dits "store and forward" car ils stockent toutes les
requetes sur le serveur local pour ensuite les delayer aux serveurs
concernes. C'est le cas de SMTP (le mail), NNTP (les niouzes) et NTP
(ajustement de la clock).

Pour les autres services soit un proxy SOCKS (ou qquechose de
ressemblant) est utilise, soit des proxy service par service sont
utilises. Le proxy socks demande une recompilation des clients en
remplacant les fonctions de sockets (connect(), getsockname(), ...) par
leurs equivalents pour SOCKS (Rconnect(), Rgetsockname(), ...), tandis que
le proxy par clients ne demande qu'une modification des procedures de
connections.

Bon... c bien joli tout ca mais ca nous dit pas ce qu'on peut faire
avec un bastion host. Je serais tente de dire, si l'admin est bon.. RIEN
:-/. Les services proposes seront securises a priori, et le routeur externe
empechera les paquets spoofes de passer... enfin a la fin je proposerais
quelques types d'attaques.. a vous de creuser et de voir si c'est
realisable :)

Il faut savoir qu'a priori dans un bastion host les logs sont AUSSI
securises (arrrrrgh), soit par supports "one way" (bandes, imprimante),
soit au moyen d'une machine attachee en serial (et pas sur le reseau bien
sur, ce serait trop facile sans ca :) ) qui garde une copie de tous les logs.


Le routeur interne
------------------

Basiquement il contient les meme regles de filtrage que le routeur
externe, en y ajoutant des regles pour les service passant par proxy (y
compris SMTP and co), faisant un deny de tout ce qui essaye de bypasser le
proxy, et une autre faisant un deny sur tout ce qui a a la fois une adresse
source et une adresse destination interne... donc pour sniffer a partir du
bastion host on est BAISES :-/

Le principe est qu'aucun paquet du reseau interne ne doit passer
sur le perimeter network, qui est cense etre insecure (malgres tout ce que
doit traverser le pauvre paquet qui passe par la :) ), de meme tout le
traffic qui passe par le routeur interne est etroitement controle.


Conclusion et methodes pour essayer de passer au travers d'un fw
----------------------------------------------------------------

Deja, premiere constatation, un fw est (malheureusement :-/) une
*excellente* mesure de securite. Il empeche toute attaque a base de spoof,
et le bastion host est (si il est correctement configure) virtuellement
imprenable.

Maintenant... comme un hacker ne manque jamais de ressources, et
qu'un dispositif de securite sur a 100% ca n'existe pas ;) il y a
effectivement des choses a essayer face a un fw:

Deja essayer les methodes classiques sur les services internet
proposes par le bastion host (NNTP, SMTP, HTTP, etc...), les trous connus
et autres... maintenant normalement tout ca sera patche, a moins que vous
n'ayez ZE bug que personne n'a.

Plus interessant deja est de s'amuser avec les protocoles, notamment
le routage peut s'averer un jouet tres drole... je n'ai jamais teste mais
je suis sur qu'avec le message ICMP "redirect", l'option IP "loose source
route" ou le RIP on peut faire plein de choses interessantes.

Maintenant tout ca ne vous donnera au mieux que le bastion host (a
moins que cetrains services ne passent pas par un proxy, auquel cas la ca
devient marrant), ce qui n'est pas tout a fait top...

C'est la ou intervient bibi, j'ai de temps en temps remarque que
certains sites bien proteges offraient un acces en ppp a leur users... qui
dit ppp, dit introduction d'une machine weak, en plus souvent ces clients
ppp ont une connection directe avec le net, et egalement une connection non
restreinte avec le reseau local... je vous fais un dessin? ;)

A propos, e jetais un coup d'oeil sur les archives de bugtraq quand
un certain type d'attaques que je ne connaissais qu'en service denial m'a
attrire l'oeil... nos amis les ping de 65536 octets. Il semblerait que
certains routeurs et le produit commercial Firewall-1 reagissent d'une
maniere amusante lorsqu'ils recoivent ce fameux paquet ICMP... genre
flushage des filtres ;)


Le bonus: construisez vous meme votre firewall
----------------------------------------------

Bon.. ca ne sera pas un vrai firewall, mais nous allons jouer avec
la possibilite qu'offre le kernel de linux pour filtrer les paquets: Deja
votre kernel doit etre recompile en activant les options de firewalling (ca
sert :) ). Ensuite pour posez vos regles vous avez un utilitaire bien
pratique qui est ipfwadm (man ipfwadm hein). Je vous evite de lire le
man... voila la sytaxe:

ipfwadm -I command parameters [options]
ipfwadm -O command parameters [options]

(il y a d'autres options, -F etc.. mais seules -O et -I vont nous
interesser)

-I == Incoming, filtrage des paquets entrants
-O == Outgoing, filtrage des paquets sortants

command est de la forme suivante:

<action> <policy>

ou action est -a (append, met a la fin de la liste rapelleez vous que
l'odre est important) -u (insert, place au debut) -d (delete)

a la place de action vous pouvez aussi mettre -l (list) ou -f (flush,
delete TOUT) sans arguments.

comme policy vous avez: accept, deny ou reject. La difference entre deny et
reject est que reject envoie un paquet ICMP de type 3 (host unreachable)
alors que deny drop le paquet purement et simplement.

les parametres sont -S, -D, -P -W

-S et -D representent les adresses source et destination du paquet, avec le
masque reseau sous forme numerique ou decimale (on ne bouge pas j'explique)

exemple: -S 0.0.0.0/0 (numerique) est equivalent a -S 0.0.0.0/0.0.0.0 ce
qui match TOUS les hosts ayant une adresse IP

-D 10.1.1.1/32 est equivalent a 10.1.1.1/255.255.255.255 ce qui match
specifiquement le host 10.1.1.1

-P represente le protocole (tcp, udp, icmp ou all) et -W l'interface (ppp0,
eth0 and so on..)

in fine les options: celles qui nous interessent sont -k, -y et -o

-y n'applique le filtre que si le bit SYN est positionne sur le paquet (tcp
uniquement)

-k meme chose avec le bit ACK (toujours tcp)

-o envoie un message kernel (dans le /var/adm/messages) des qu'un paquet
rentrant dans le cadre du filtre en question est detecte.


Bon... vous devez etre paumes :) donc voila un exemple concret de firewall,
le mien :)

(j'ai mis ca dans le /etc/ppp/ip-up, $4 represente l'adresse IP attribuee
par le provider au moment de la connexion, man pppd pour plus de
renseignements)

Attention... pour pouvoir spoofer avec ces filtres, il faut modifier le
spoofeur pour qu'il bind les ports uniquement > 1024, pour le reste evitez
de lancer des commandes en tant que root, root n'ayant plus l'obligation de
binder < 1024 vous allez vous retrouver avec un deny sur le dos

(heu.. cette mise en garde n'est pas tres claire JE SAIS.. RTFM sur tpc/ip
et les sockets su quand je parle de bind vous coulez :) )

enfin tout ca pour dire... toutes les commandes reseaux lancees en tant que
root vont donc avoir un probleme.

--------------snip snip (/etc/ppp/ip-up)-------------------------------------

/sbin/ipfwadm -I -f
/sbin/ipfwadm -O -f
#flush du fw (ip dynamique oblige)

/sbin/ipfwadm -O -a accept -S $4 1024:5999 -D 0.0.0.0/0 -P tcp -W ppp0
/sbin/ipfwadm -I -a accept -S 0.0.0.0/0 -D $4 1024:5099 -P tcp -W ppp0
/sbin/ipfwadm -O -a accept -S $4 6010:65535 -D 0.0.0.0/0 -P tcp -W ppp0
/sbin/ipfwadm -I -a accept -S 0.0.0.0/0 -D $4 6010:65535 -P tcp -W ppp0
/sbin/ipfwadm -O -a accept -S $4 1024:5999 -D 0.0.0.0/0 -P udp -W ppp0
/sbin/ipfwadm -I -a accept -S 0.0.0.0/0 -D $4 1024:5099 -P udp -W ppp0
/sbin/ipfwadm -O -a accept -S $4 6010:65535 -D 0.0.0.0/0 -P udp -W ppp0
/sbin/ipfwadm -I -a accept -S 0.0.0.0/0 -D $4 6010:65535 -P udp -W ppp0
#traffic sortant en filtrant X (port 6000 +n)

/sbin/ipfwadm -I -a accept -S 0.0.0.0/0 520 -D $4 520 -P udp -W ppp0
#routage (il m'a deja fait chier avec ca)

/sbin/ipfwadm -I -a accept -S 0.0.0.0/0 -D $4 21 -P tcp -W ppp0
/sbin/ipfwadm -O -k -a accept -S $4 21 -D 0.0.0/0 -P tcp -W ppp0
/sbin/ipfwadm -I -k -a accept -S 0.0.0.0/0 -D $4 20 -P tcp -W ppp0
/sbin/ipfwadm -O -a accept -S $4 20 -D 0.0.0/0 -P tcp -W ppp0
/sbin/ipfwadm -I -a accept -S 0.0.0.0/0 -D $4 113 -P tcp -W ppp0
/sbin/ipfwadm -O -k -a accept -S $4 113 -D 0.0.0.0/0 -P tcp -W ppp0
#traffic entrant: ftp et identd

/sbin/ipfwadm -O -a accept -S $4 -D 0.0.0.0/0 -P icmp -W ppp0
/sbin/ipfwadm -I -a accept -S 0.0.0.0/0 0 -D $4 -P icmp -W ppp0
/sbin/ipfwadm -I -a accept -S 0.0.0.0/0 11 -D $4 -P icmp -W ppp0
#icmp: sortant tout, entrant juste reponse d'echo et ttl (time too long,
#efficace pour faire un traceroute)

/sbin/ipfwadm -I -o -a deny -S 0.0.0.0/0 -D 0.0.0.0/0 -P all -W ppp0
/sbin/ipfwadm -O -o -a deny -S 0.0.0.0/0 -D 0.0.0.0/0 -P all -W ppp0
#on deny tout le reste :)

--------------snip snip (/etc/ppp/ip-up)-------------------------------------


SYNnowledgments :)
------------------

quelques lectures interessantes:

"Building internet firewalls", collection O'Reilly
"Firewalls and internet security", collection Addison-Wesley

merci aux gens de #banane, et de #phe(DalNet)... enfin aux copains quoi :)


LordFrog


← previous
next →
loading
sending ...
New to Neperos ? Sign Up for free
download Neperos App from Google Play
install Neperos as PWA

Let's discover also

Recent Articles

Recent Comments

Neperos cookies
This website uses cookies to store your preferences and improve the service. Cookies authorization will allow me and / or my partners to process personal data such as browsing behaviour.

By pressing OK you agree to the Terms of Service and acknowledge the Privacy Policy

By pressing REJECT you will be able to continue to use Neperos (like read articles or write comments) but some important cookies will not be set. This may affect certain features and functions of the platform.
OK
REJECT