Sandeman Posté(e) le 7 mars 2005 Partager Posté(e) le 7 mars 2005 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] Lien vers le commentaire Partager sur d’autres sites More sharing options...
Sandeman Posté(e) le 7 mars 2005 Auteur Partager Posté(e) le 7 mars 2005 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 Lien vers le commentaire Partager sur d’autres sites More sharing options...
Sandeman Posté(e) le 7 mars 2005 Auteur Partager Posté(e) le 7 mars 2005 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 ...) Lien vers le commentaire Partager sur d’autres sites More sharing options...
Sandeman Posté(e) le 7 mars 2005 Auteur Partager Posté(e) le 7 mars 2005 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. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Sandeman Posté(e) le 7 mars 2005 Auteur Partager Posté(e) le 7 mars 2005 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 tablesiptables -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 ... Lien vers le commentaire Partager sur d’autres sites More sharing options...
Sandeman Posté(e) le 7 mars 2005 Auteur Partager Posté(e) le 7 mars 2005 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 ... Lien vers le commentaire Partager sur d’autres sites More sharing options...
Sandeman Posté(e) le 7 mars 2005 Auteur Partager Posté(e) le 7 mars 2005 Divers Quelques éléments complémentaires... Lien vers le commentaire Partager sur d’autres sites More sharing options...
Sandeman Posté(e) le 7 mars 2005 Auteur Partager Posté(e) le 7 mars 2005 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 Lien vers le commentaire Partager sur d’autres sites More sharing options...
Sandeman Posté(e) le 7 mars 2005 Auteur Partager Posté(e) le 7 mars 2005 Un peu de place Au cas où j'aurai oublié des rubriques importantes, sinon mes modos préférés feront le nécessaire ... Lien vers le commentaire Partager sur d’autres sites More sharing options...
Sandeman Posté(e) le 7 mars 2005 Auteur Partager Posté(e) le 7 mars 2005 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 Lien vers le commentaire Partager sur d’autres sites More sharing options...
Soulfly_tribe90 Posté(e) le 7 mars 2005 Partager Posté(e) le 7 mars 2005 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. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Sandeman Posté(e) le 7 mars 2005 Auteur Partager Posté(e) le 7 mars 2005 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. Lien vers le commentaire Partager sur d’autres sites More sharing options...
lorinc Posté(e) le 7 mars 2005 Partager Posté(e) le 7 mars 2005 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...) Lien vers le commentaire Partager sur d’autres sites More sharing options...
Soulfly_tribe90 Posté(e) le 7 mars 2005 Partager Posté(e) le 7 mars 2005 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 Lien vers le commentaire Partager sur d’autres sites More sharing options...
gauret Posté(e) le 7 mars 2005 Partager Posté(e) le 7 mars 2005 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 Lien vers le commentaire Partager sur d’autres sites More sharing options...
Soulfly_tribe90 Posté(e) le 7 mars 2005 Partager Posté(e) le 7 mars 2005 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... Lien vers le commentaire Partager sur d’autres sites More sharing options...
neologix Posté(e) le 7 mars 2005 Partager Posté(e) le 7 mars 2005 Un autre moyen pour identifier un poste, notamment lorsque nmap -O échoue: http://uptime.netcraft.com/up/graph/?mode_...&submit=Examine et soumettre l'adresse du site en question: exemple: http://uptime.netcraft.com/up/graph?site=www.pcinpact.com neo Lien vers le commentaire Partager sur d’autres sites More sharing options...
gauret Posté(e) le 7 mars 2005 Partager Posté(e) le 7 mars 2005 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) Lien vers le commentaire Partager sur d’autres sites More sharing options...
noobietux Posté(e) le 7 mars 2005 Partager Posté(e) le 7 mars 2005 Lien vers le commentaire Partager sur d’autres sites More sharing options...
gauret Posté(e) le 7 mars 2005 Partager Posté(e) le 7 mars 2005 Ouaip, comme quoi ça prouve rien, ça peut se changer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Sandeman Posté(e) le 8 mars 2005 Auteur Partager Posté(e) le 8 mars 2005 ou alors comme me le faisait justement remarquer mon gourou, un serveir IIS derrière un load-balancer Linux... ps : maj sur les premiers chapitres Lien vers le commentaire Partager sur d’autres sites More sharing options...
Soulfly_tribe90 Posté(e) le 8 mars 2005 Partager Posté(e) le 8 mars 2005 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 Lien vers le commentaire Partager sur d’autres sites More sharing options...
16ar Posté(e) le 17 mars 2005 Partager Posté(e) le 17 mars 2005 [*]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é ) Lien vers le commentaire Partager sur d’autres sites More sharing options...
gauret Posté(e) le 17 mars 2005 Partager Posté(e) le 17 mars 2005 Il manque les règles de retour. Rajoute les lignes qui contiennent -m state ESTABLISHED,RELATED Lien vers le commentaire Partager sur d’autres sites More sharing options...
Soulfly_tribe90 Posté(e) le 17 mars 2005 Partager Posté(e) le 17 mars 2005 :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... Lien vers le commentaire Partager sur d’autres sites More sharing options...
Messages recommandés
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.