Jump to content

Archived

This topic is now archived and is closed to further replies.

Sandeman

[TUTO][Initié]Outils d'information sur la sécurité

Recommended Posts

:D Introduction

Ce rapide tuto regroupe des éléments pour identifier / retrouver / vérifier la sécurité d'un poste sur Internet. Objectif primaire : vérifier par soi-même son niveau de sécurité. Ce n'est pas un guide pour script-kiddies ou une incitation à hacker des postes sur Internet. Evidemment on est dans le topic du libre, donc je n'utiliserai que des outils libres...

Ma formation et mon métier étant plus orientés réseau, ceci vient donc en complément du topic sur la sécurisation Linux qui aborde les aspects systèmes. Une bonne sécurité réseau est une première chose, mais elle est indissociable d'une bonne sécurité système : si la partie réseau tombe, il y a intérêt à être bien sécurisé niveau système ...

A noter que je liste un certain nombre de commandes système, mon objectif est de donner lesquelles utiliser et avec quel paramètres, pas d'apprendre à utiliser ces commandes. Pour cela il y a toujours recours à man. A noter que si la plupart de ces commandes vous sont inconnues, il y a des chances qu'un approfondissement de votre culture Linux soit nécessaire avant de vous lancer dans les grandes manoeuvres ...

Un peu de lecture ?

  • Réseaux sécurisés à 200% [Andrew Lockhart, O'Reilly]

Share this post


Link to post
Share on other sites

:D Identifier un poste

Premier paragraphe : comment trouvé qui est connecté, ou a tenté de se connecter sur sa machine.

Les commandes précédées d'un # signifie qu'il faut les lancer comme étant root.

Identifier les services qui écoutent

La commande lsof liste tous les fichiers ouverts, les sockets étant considérés comme tels, ils sont également listés avec l'attribut LISTEN.

exemple avec une machine sur un réseau local sécurisé :

#lsof -i -n | egrep 'COMMAND|LISTEN'
COMMAND    PID    USER   FD   TYPE DEVICE SIZE NODE NAME
portmap   1758  daemon    4u  IPv4   2984       TCP *:sunrpc (LISTEN)
cupsd     2076     root    0u     IPv4      24733                  TCP *:ipp (LISTEN)
python    2100     root    3u     IPv4       3587                  TCP mamachine:webcache (LISTEN)
inetd     2118     root    4u     IPv4       3622                  TCP *:ftp (LISTEN)
inetd     2118     root    6u     IPv4       3624                  TCP *:auth (LISTEN)
mysqld    2172    mysql    3u     IPv4       3730                  TCP localhost:mysql (LISTEN)
ntop      2205     ntop   10u     IPv4       4010                  TCP *:3000 (LISTEN)
master    2325     root   11u     IPv4       4027                  TCP *:smtp (LISTEN)
smbd      2340     root   18u     IPv4       4176                  TCP *:microsoft-ds (LISTEN)
smbd      2340     root   19u     IPv4       4177                  TCP *:netbios-ssn (LISTEN)
snmpd     2398     root    8u     IPv4       4245                  TCP *:smux (LISTEN)
sshd      2404     root    3u     IPv4       4252                  TCP *:ssh (LISTEN)
rpc.statd 2620     root    6u     IPv4       4428                  TCP *:682 (LISTEN)
apache    3130     root   16u     IPv4       4955                  TCP *:www (LISTEN)
apache    3136 www-data   16u     IPv4       4955                  TCP *:www (LISTEN)
kopete    3377      moi   16u     IPv4       6763                  TCP *:8010 (LISTEN)
ispell    3672      moi   16u     IPv4       6763                  TCP *:8010 (LISTEN)

beaucoup de ports sont ouverts, pour des usages aussi divers que variés. Voir le chapitre "sécuriser son poste" pour en savoir plus sur les ports ouverts.

et pour une machine connectée à Internet :

#lsof | grep LISTEN
caudium     349 www-data   11u     IPv4        737                TCP *:www (LISTEN)
sshd        471     root    3u     IPv4        643                TCP *:ssh (LISTEN)
master     5322     root   11u     IPv4     134536                TCP *:smtp (LISTEN)

le minimum est ouvert (caudium est un seveur HTTP plus léger qu'Apache, master est le processus correspondant à un serveur mail, sshd est le serveur SSH).

des petites variantes :

sous Linux :

netstat -plunt

sous FreeBSD :

netstat -a -n | egrep 'Proto|LISTEN'
sockstat -4 l

Lister les connexions en cours

#netstat -an

Lister les dernières connexions

La commande last interroge les enregistrements système :

# last
moi      :0                            Tue Mar  8 08:45   still logged in
reboot   system boot  2.6.8.1          Tue Mar  8 08:44          (00:34)
moi      :0                            Mon Mar  7 08:39 - 18:35  (09:56)
root     pts/0        192.168.0.1      Mon Mar  7 09:16 - 09:21  (00:04)
reboot   system boot  2.6.8.1          Mon Mar  7 08:38          (09:57)
moi      :0                            Fri Mar  4 08:47 - 17:42  (08:55)
reboot   system boot  2.6.8.1          Fri Mar  4 08:45          (08:57)
moi      :0                            Thu Mar  3 10:26 - 18:30  (08:03)
reboot   system boot  2.6.8.1          Thu Mar  3 10:26          (08:04)
root     tty1                          Thu Mar  3 10:00 - down   (00:24)
reboot   system boot  2.6.8.1          Thu Mar  3 09:59          (00:25)
moi      :0                            Thu Mar  3 09:21 - down   (00:37)
reboot   system boot  2.6.8.1          Thu Mar  3 09:20          (00:38)
moi      :0                            Wed Mar  2 08:47 - 18:05  (09:17)
reboot   system boot  2.6.8.1          Wed Mar  2 08:46          (09:18)

(on voit que l'utilisateur se connecte tous les matins après avoir booté sa machine (normal c'est un portable). Et que root est venu se connecter en direct (pas bien !!) pendant 4 minutes.

Consulter les logs

cd /var/log

Share this post


Link to post
Share on other sites

:D Localiser un poste

Cette seconde partie vous permet, à partir d'une IP, de localiser un poste

Retrouver son nom de domaine

dig

Trouver son chemin réseau

traceroute

tracepath

Trouver qui détient l'adresse

Toutes les attributions d'IP sont enregistrées sur des bases facilement consultables.

Sur http://www.ripe.net/whois vous pouvez saisir une adresse IP, vous récupérerez plein d'informations. Si l'IP n'est pas enregistrée dans le RIPE vous venez de tomber soit sur des gens très très forts (ils est difficile de faire router des IPs non déclarées) soit des gens qui utilisent -très mal- un réseau privé.

Search for (mon IP du moment chez Neuf)
% This is the RIPE Whois query server #2.
.../...
inetnum:      84.99.169.0 - 84.99.178.255
netname:      N9UF-DYN-DSL
descr:        Dynamic pool
descr:        nantes-1
country:      FR
.../...
remarks:      * For spam & abuse issues please email to abuse@gaoland.net *
.../...
route:        84.96.0.0/13
descr:        LDCOM-NET
origin:       AS15557
.../...

et plein d'autres infos moins utiles (adresse et contacts techniques chez l'opérateur ...)

Share this post


Link to post
Share on other sites

:francais: Obtenir des infos sur le poste

Cette étape permet d'en savoir plus sur le poste en question.

/!\ A n'utiliser qu'à destination de son propre poste.

Identifier l'OS / les ports ouverts

L'outil nmap, utilisé dans Matrix, a son utilité ici ...

nmap -O -P0 <adresse.IP.cible>

nmap va sortir un rapport, avec détection de l'OS (option -O), même si la machine ne répond pas aux pings (-P0), montrant tous les ports TCP :

- ouverts : c'est-à-dire accessibles à tous

- filtrés : c'est-à-dire ouverts mais filtrés au niveau du protocole derrière, ou ouverts seulement pour certaines IP.

Tester les failles de sécurité

L'outil nessus, fonctionnant en client serveur, lance une rafale, brutale et très visible, de tests d'intrusions divers et variés sur une machine. C'est une procédure très longue, je répète facile à détecter, et pouvant planter la machine cible.

Share this post


Link to post
Share on other sites

:francais: Sécuriser le poste

Cette étape permet d'identifier les risques et de sécuriser le poste...

Par port ouvert

Evidemment il y a possibilité d'avoir des centaines de ports ouverts sur sa machine, voici quelques essentiels...

port 21 : FTP

port 22 : SSH

port 23 : Telnet

Euh, comment dire... oublier, et passer à la ligne du dessus !

port 25 : SMTP (envoi de mail)

Il faut vérifier l'anti-relaying, c'est à dire que le poste ne peut pas être utilisé comme relai de mail - pour envoyer du spam ...

port 80 : HTTP

port 110 : POP

port 137 à 139 : NetBios

port 143 : IMAP4

port 443

port 445

...

Iptables

Mon objectif n'est pas de faire un cours sur iptables, qui mérite(ra) un topic à part entière. Quelques éléments de base :

  • il faut commencer par vider (flusher) les tables
    iptables -F INPUT
    iptables -F FORWARD
    iptables -F OUTPUT
    iptables -t nat -F PREROUTING
    iptables -t nat -F POSTROUTING


  • par défaut, tout est interdit :
    iptables -P INPUT DROP
    iptables -P FORWARD DROP
    iptables -P OUTPUT DROP

    par ordre décroissant d'importance, on ferme tous les ports.

  • on ouvre ensuite seulement les ports dont on est sur :
    iptables -A INPUT -p tcp -s 0.0.0.0/0 --dport 80 -j ACCEPT
    iptables -A INPUT -p tcp -i ppp0 --dport 22 -j ACCEPT

    dans le premier cas on autorise tout le monde (0.0.0.0/0) à se connecter sur le port 80, on pourrait restreindre à des plages d'IP. Dans le second on autorise le SSH qu'en provenance d'une interface (ici ppp0).

  • on permet aux connexions déjà établies de se maintenir ...
    iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
    iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
    iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT


  • pour ce qui traverse, une petite règle de NAT ou de maquerading ...
    iptables -A FORWARD -i eth0 -o ppp0 -j MASQ


  • quant au sortant, ça dépend de ce que l'on veut faire de la machine ...

Share this post


Link to post
Share on other sites

:francais: Hacker le poste

C'te bonne blague comme si c'est le genre d'infos que j'allais mettre sur le forum :-)

Quelques astuces pour :

vérifier son niveau de sécurité

  • Utiliser tiger qui vérifie toutes les choses qui pourraient sembler suspectes sur un OS. Plein de choses concernant Linux ...
  • Vérifier la présence de rootkit. Dans le doute, booter sur une distribution LiveCD et utiliser chkrootkit.

en cas d'attaque manifeste

débrancher la machine du réseau

rebooter la machine sur un LiveCD

exporter les logs

sauvegarder les éléments "non compromettables" (documents, etc.)

reconstruire la machine de zéro

en cas de perte du password root

nécessite évidemment un accès physique à la machine.

avec lilo :

avec grub : rajouter init=/bin/bash, monter /etc (en général, /) en rw, utiliser la commande passwd

avec un disque de boot ...

Share this post


Link to post
Share on other sites

:francais: Cas particulier : le Wifi

sur le point d'accès

  • ne pas broadcaster le SSID
  • ne pas répondre aux demandes sans SSID
  • utiliser si possible le filtrage par adresses MAC
  • changer de canal de temps en temps
  • sonder son environnement Wifi de temps en temps

sur le poste

Share this post


Link to post
Share on other sites

:francais: Un peu de place

Au cas où j'aurai oublié des rubriques importantes, sinon mes modos préférés feront le nécessaire ...

Share this post


Link to post
Share on other sites

:francais: Conclusion

Voilà !

comme certaines personnes choisissent de passer sous Linux (ou d'autres OS libres) par sécurité, suite par exemple à des déconvenues Windowsiennes, voici un moyen de s'assurer qu'elles le font correctement, car aucun OS ne sera jamais plus sécurisé que son administrateur voudra bien le sécuriser...

Maintenant vous pouvez y aller pour les commentaires !

Sinon, PM pour toute prestation (payante car professionnelle) d'audit sécurité, installation de firewall, conception d'un LAN sécurisé, définition d'une politique de sécurité, etc :p

Share this post


Link to post
Share on other sites

Ce topic tombe pile poil pour mon projet.

J'aimerais savoir comment fonctionne Tiger surtout parce que je l'ai installer mais une fois lancé il fait son truc et apres tu obtiens un fichier avec un millier de ligne que je comprend pas trop a vrai dire.

Il y a pas moyen de le config pour lui dire de vérifier le plus important finalement ???

Sinon tu pourrais me donner quelques conseils pour sécuriser tout ce qui touche a PHP, parce que sur mon serveur pour le projet j'ai peur que l'on m'attaque par php et je connais pas trop a vrai dire la sécu la dessus.

Merci sinon ce post s'annonce plus que prometteur et ma donné envie de voir nessus de plus pres.

Share this post


Link to post
Share on other sites

pour tiger, je reçois un topo par mail toutes les 4 heures avec seulement les choses essentielles (ports ouverts, etc.) je regarde pourquoi dans le /etc/tiger/tigerrc.

pour PHP, intéressant. En fait comme j'explique à mes valeureux clients et prospects, la sécurité se décompose en 3 niveaux distincts :

- sécurité réseau (firewall, etc. : ce qui est traité dans ce topic) : le plus global

- sécurité système (mdp root, su ... traité dans le topic de -rem-) : plus spécifique à une machine

- sécurité applicative (assainissement des URLs PHP, blocage de l'SQL injection) : spécfiique à une application sur une machine. On est donc sur un sujet un peu différent, qui je l'espère pourra être traité par les gens plus forts que moi en dev, même si je peux donner les grands principes :

* ne jamais faire confiance en ce qui est entré par l'utilisateur !

* ne jamais faire confiance en ce qui sort des autres programmes !

* ne jamais faire confiance en la capacité de filtrer des autres programmes !

Il faut donc tout vérifier, ce qui rentre et ce qui sort.

Share this post


Link to post
Share on other sites

tu peux aussi limiter grandement les capacités de PHP dans sa conf. (genre virer tous les modules à risque - ceux qui font des I/O si je ne m'abuse comme la création d'image, etc...) :fou:

Share this post


Link to post
Share on other sites

Oki merci pour les précisions, donc pour Tiger il faut modifier le fichier tigerrc (il me semble que j'avais regardé) pour lui dire quoi vérifier.

Ca serais trop te demander que tu m'envoie ton fichier tigerrc sur mon MP ???

Ca serait super sympa histoire que je regarde comment tu la fait et finalement que j'en apprenne un peu plus.

Sinon pour le php je vais regarder ce que vous m'avez dit et je vais voir encore de mon coté.

Si d'autres personnes veulent donner des précisions qu'ils n'hésitent pas :fou:

Share this post


Link to post
Share on other sites

Pour ce qui est de PHP, il y a un "safe_mode" qui limite vachement les possibilités. C'est ce qui est utilisé chez les hébergeurs. Regarde sur php.net pour savoir ce qu'il fait.

Il y a aussi un système de sécurité assez intéressant dans Zope, dans le même genre.

P.S. Sandeman, pour lister les services qui écoutent, tu devrais ajouter de lancer le lsof | grep LISTEN en root. Sinon on a pas grand chose

Share this post


Link to post
Share on other sites
Pour ce qui est de PHP, il y a un "safe_mode" qui limite vachement les possibilités. C'est ce qui est utilisé chez les hébergeurs. Regarde sur php.net pour savoir ce qu'il fait.

Il y a aussi un système de sécurité assez intéressant dans Zope, dans le même genre.

P.S. Sandeman, pour lister les services qui écoutent, tu devrais ajouter de lancer le lsof | grep LISTEN en root. Sinon on a pas grand chose

Merci gauret pour tes précisions, je l'ai deja activé le safe_mode dans le fichier php.ini me semble t-il...

Share this post


Link to post
Share on other sites

Oui, netcraft utilise les en-têtes du serveur web. Tu peux les récupérer par la commande

lynx -head -dump www.tonsite.tld

Attention, ça ne prouve rien, on peut les modifier (la dernière fois que j'ai regardé, il fallait quand même modifier le code source d'Apache pour le faire)

Share this post


Link to post
Share on other sites

ou alors comme me le faisait justement remarquer mon gourou, un serveir IIS derrière un load-balancer Linux...

ps : :francais: maj sur les premiers chapitres

Share this post


Link to post
Share on other sites

Pour un serveur web ou je ne veux que les ports 80, 21 et 22 d'ouvert, les regles d'iptables suivante suffise ou bien il manque plein de chose ???

Sachant que je veux que les pages soit accessible depuis le reseau local et le net.

Le reste je le drop j'en ai pas besoin, je veux avoir le minimum de port ouvert.

iptables -P INPUT DROP

iptables -P FORWARD DROP

iptables -P OUTPUT DROP

iptables -A INPUT -p tcp -s 0.0.0.0/0 --dport 80 -j ACCEPT

iptables -A INPUT -p tcp -i ppp0 --dport 22 -j ACCEPT

iptables -A INPUT -p tcp -i ppp0 --dport 21 -j ACCEPT

Share this post


Link to post
Share on other sites

[*]on ouvre ensuite seulement les ports dont on est sur :

iptables -A INPUT -p tcp -s 0.0.0.0/0 --dport 80 -j ACCEPT
iptables -A INPUT -p tcp -i ppp0 --dport 22 -j ACCEPT

dans le premier cas on autorise tout le monde (0.0.0.0/0) à se connecter sur le port 80, on pourrait restreindre à des plages d'IP. Dans le second on autorise le SSH qu'en provenance d'une interface (ici ppp0).

J'ai testé sur ma machine en droppant tout puis en rajoutant tes lignes, mais ca n'a pas marché :(

Je n'arrive meme pas a acceder a mon ssh en localhost (sachant bien sur que le daemon est lancé :chinois:)

Share this post


Link to post
Share on other sites

Il manque les règles de retour. Rajoute les lignes qui contiennent -m state ESTABLISHED,RELATED

Share this post


Link to post
Share on other sites

:lol: ben moi j'ai mis que ca pour mon projet et franchement je me connecte en ftp,ssh et voir des pages web sur mon serveur...

Donc je comprend pas vraiment la...

Share this post


Link to post
Share on other sites

×
×
  • Create New...