26/02/16
La SSI (Sécurité des Systèmes d’Information), c’est l’ensemble des mesures prises pour assurer la confidentialité, l’intégrité et l’ accessibilité des données.
confidentialité : Garantir que les données ne sont accessibles qu’aux personnes autorisées ;
intégrité : Garantir que les données n’ont pas été modifiées par un tiers non autorisé ;
disponibilité ou accessibilité : Garantir l’accès à un service ou à des ressources.
Un sinistre (incendie, dégât des eaux)
Un utilisateur du système dont le comportement favorise le danger (“rm -fr *”) ;
Personne ou organisation malveillante (DDoS, installation de malware, virus, rootkit, fuite d’information, etc.).
Article (attaques IT)

Figure 1: Accessibilité
Article (attaques IT)

Article (attaques IT)

Figure 3: Confidentialité
Article (APT : Advanced Persistent Threat)
![ref6]
Article (APT : Advanced Persistent Threat)
![ref6]
Article (APT : Advanced Persistent Threat)
![ref6]
Article (APT : Advanced Persistent Threat)
![ref7]
Article (attaques IoT)
![ref7]
Article (attaques IoT)
![ref7]
Article (attaques IoT)
![ref7]
Article (attaques IoT)
![ref7]
Article (attaques IoT)
![ref7]
Corruption de mémoire (buffer overflow, format string, null pointer dereference, etc.) ;
Mauvaise conception d’une application (PATH, file race condition, etc.) ;
Problème de permissions sur des fichiers “sensibles” (clés ssh, DB, backup système, etc.) ;
Négligence de l’administrateur (confiances ssh, sudo trop permissif, etc.).
Corruption de mémoire (service réseau, stack IP kernel, etc.) ; Mauvaise conception d’une application (Hearbleed, Shellshock, etc.) ;
Vulnérabilité Web (iSQL, XSS, XSRF, injections, etc.) ;
Brute force (login/password, user enumeration, etc.) ;
Social engineering (fishing, spam, etc.) ;
MITM (empoisonnement de table ARP, DHCP Exhaustion, etc.) ;
(D)DoS (SYN flood, ping of death, etc.).

Figure 4: Source: http://www.cvedetails.com

Figure 5: Source: http://www.cvedetails.com
Exemple 1 (Buffer overflow)
void copy(char \*input) { char buf[8];
strcpy(buf, input); [...]
}
int main(int argc, char \*\*argv) {
copy(argv[1]);
}
Exemple 2 (Buffer overflow)
int main() {
char buf[1024]; gets(buf);
}
Exemple 3 (Integer Overflow) Extrait de OpenSSH 3.3 :
int nresp;
nresp = packet\_get\_int();
if (nresp > 0) {
response = xmalloc(nresp\*sizeof(char\*)); for (i = 0; i < nresp; i++)
response[i] = packet\_get\_string(NULL); }
Exemple 3 (Integer Overflow)
Si nresp = 1073741824,
nresp \* sizeof(char\*) = 4294967296
En binaire : 1 00000000 00000000 00000000 00000000 L opération xmalloc(0) est exécutée !
Exemple 4 (File race condition) :
$ cat -n /etc/init.d/x11-common [...] SOCKET\_DIR="/tmp/.X11-unix" set -e if [ -e $SOCKET\_DIR ] && [ ! -d $SOCKET\_DIR ]; then mv $SOCKET\_DIR $SOCKET\_DIR.$$ fi mkdir -p $SOCKET\_DIR chown root:root $SOCKET\_DIR chmod 1777 $SOCKET\_DIR:
Approche “script kiddie”![ref10]
Approche “script kiddie”![ref10]
Le but est de supprimer tous les éléments logiciels superflus pour réduire la surface d’attaque (tout ce qui est inutile aux utilisateurs légitimes peut servir à un attaquant).
Ce principe de minimisation de la surface d’attaque s’applique :
à la couche utilisateur (“userland”), au noyau (“kernel-land”).
Le Userland correspond aux action qui peuvent être faite sur un système déjà en fonctionnement
Désinstaller tous les programmes qui ne sont pas utiles Désactiver les services inutiles
qui sont en écoute sur le réseau qui s’exécutent sous le compte root
Limiter l’ensemble des programmes privilégiés
les programmes setuid (préférer les capacités de fichiers) en arrière plan par un cron
Inventorier les comptes, les groupes (supprimer les obsolescences)
Le Kernel-land correspond aux modification précédent l’installation d’un système
Mettre en œuvre un noyau sur mesure
vis-à-vis des périphériques matériels (support bluetooth, wifi, joystick, etc. ?)
des fonctions logiques dont aura besoin le système (CONFIG_FTRACE ?)
Préférer un noyau non modulaire
ou n’autoriser que le chargement de modules signés

Poste de travail vs. serveur
Besoin d’un environnement graphique sur un serveur ? Besoin d’un compilateur, déboguer sur un serveur ? Besoin d’un serveur SSH sur un poste de travail ? Noyau sur-mesure pour un poste de travail ?
etc.
Partitionnement rationnel
Créer une partition distincte pour tout répertoire susceptible d’être rempli à la suite d’actions extérieures (journaux, “spool” d’impression, etc.)
Appliquer des options de montages nécessaires et suffisantes (ro , nodev, noexec et nosuid )
Analyse fine des droits et permissions
Supprimer les fichiers orphelins
Ne jamais utiliser “chmod 777
Eviter “chmod u+s
Le principe de cloisonnement permet d’isoler un service du reste de la machine. Limite l’impact d’une attaque réussie.
lxc-create -t debian -n vm1 lxc-start -n vm1 -d lxc-console -n vm1 /etc/init.d/apache2 start
LXC repose sur les fonctionnalités cgroups et namespaces du noyau Linux et permet de faire fonctionner des environnements Linux isolés les uns des autres.
lxc-create -t debian -n vm2
cp malware /var/lib/lxc/vm2/rootfs/tmp/ lxc-execute -n vm2 – strace /tmp/malware
Iptables permet d’interdire/autoriser des communications réseaux. Le filtrage est mis en place sur trois chaînes ( INPUT, OUTPUTet FORWARD) selon les critères suivants:
L’interface réseau
Adresse IP source, IP dst
Port(s) source, port(s) destination Protocole (TCP, UDP)
Par exemple, pour n’autoriser que l’accès au service SSH :
Exemple 1 :
Désactivation d’un service réseau Et mise en place d’un pare-feu
Exemple 2 :
Sécurisation d’un service
Et cloisonnement du service
Permet de garder un historique et d’envoyer des alertes (mail, SMS).
Les ressources systèmes (SNMP, Cacti )
Les activités réseaux (mrtg , ntop )
Les journaux systèmes (/var/log/* , syslog , logwatch ) On peut utiliser des détecteurs d’intrusion IDS ( snort , suricata )
Auditer régulièrement
Les processus en cours d’exécution (ps, top , etc.) Les ports réseaux ouverts (nmap, netstat )
Les modules kernel chargés (lsmod)
La dureté des mots de passe du système ( john ) L’intégrité des fichiers systèmes (AIDE, Samhain)
Faire des mises à jour régulièrement
Chiffrer les données (sauvegardes, fichiers sensibles, etc.) Utilisation de contrôle d’accès obligatoires (Tomoyo)
Utiliser un patch de durcissement noyau ( PaX, Grsecurity ) Penser à la sécurité physique
Appliquer les guides de sécurisation
L’ANSSI (https://www.ssi.gouv.fr), propose via leur site des guides pour sécuriser des systèmes :
Recommandations de sécurité relatives à un système GNU/Linux
Recommandations pour le déploiement sécurisé du navigateur Google Chrome sous Windows
Guide des bonnes pratiques de l’informatique
Sécurité des mots de passe
Sécuriser son ordiphone
Partir en mission avec son téléphone, sa tablette ou son ordinateur portable
Sécuriser les accès Wi-Fi