13.07.2015 Views

Durcissement du noyau Linux - OSSIR

Durcissement du noyau Linux - OSSIR

Durcissement du noyau Linux - OSSIR

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

HSC - prestationsAudits de sécuritéTests d’intrusionAudits de sources(c)01/2002 Denis Ducamp pour RESISTVeille en vulnérabilitésVeille technologique et stratégique de l’actualité en sécuritéCoursRisques TCP/IP<strong>Linux</strong> / Unix / WindowsPostfix, bind, etc.IPSecInternet/Intranetetc.Conseils en architecturesetc.Intro<strong>du</strong>ction(c)01/2002 Denis Ducamp pour RESISTLe patch grsecurityet les autres : OpenWall, Pax, etc.Quelques notionschroot / set[ug]iddébordement de tampons/proc / noms de fichiers temporaires prévisibles / fork-bombJournalisation / auditptrace() / OS-fingerprint / tpeLes options de grsecurityBuffer Overflow ProtectionAccess Control ListsFilesystem ProtectionsKernel AuditingExecutable ProtectionsNetwork ProtectionsSysctl supportMiscellaneous EnhancementsQuelques cas concretsLe serveur d’un particulier / de e-commerce / de la NSA


Le patch grsecurity(c)01/2002 Denis Ducamp pour RESISTLe patch grsecurity regroupe un grand nombre d’options de<strong>du</strong>rcissement <strong>du</strong> <strong>noyau</strong> linux.Le <strong>du</strong>rcissement <strong>noyau</strong> est l’interdictiond’appeler certains appels systèmesdans un certain nombre de casd’accéder à certaines données sensiblesCette présentation fait le tour de chacune des options en expliquantcontre quelles attaques respectives elles sont écrites pour lutteret si réellement elles sont utiles.Home Page : http://www.grsecurity.net/Version testée : Jan 21 01:34 grsecurity-1.9.3a-2.4.17.patchLes autres patches(c)01/2002 Denis Ducamp pour RESISTCe patch est basé sur de nombreux autres patches dont :Openwallhttp://www.openwall.com/linux/par Solar Designerdisponible pour 2.2.19/20 et 2.0.39fait partie <strong>du</strong> projet Openwall, voir aussi OwlPaXhttp://pageexec.virtualave.net/par The PaX Teamdisponible pour 2.2.19/20 et 2.4.16Bien d’autres qui ont été portés sous <strong>Linux</strong> 2.4ex : Trusted Path Execution, cf Phrack


Pourquoi ce patch ?(c)01/2002 Denis Ducamp pour RESISTPourquoi existe-t’il ?pour permettre à des administrateurs d’ajouter un grand nombred’options de façon simpletoutes les options sont contenues dans un seul patchce patch est mis à jour à chaque nouvelle version de <strong>noyau</strong>pour permettre d’avoir sous <strong>Linux</strong> 2.4 des patches écrits pour<strong>Linux</strong> 2.0/2.2Pourquoi est-il étudié ici ?parce que c’est le patch qui regroupe le plus grand nombred’optionsc’est l’occasion de voir ce qui est utile...Attention : cet ensemble de patches est complexecertains patches peuvent être en cours de développementdonc bugs :<strong>du</strong> dénis de services...aux contournements de protections.certains patches peuvent être supprimés d’une version à l’autreex : "stealth networking" est remplaçable par iptablesQuelques notionschroot / set[ug]iddébordement de tampons/proc / noms de fichiers temporaires prévisibles / fork-bombJournalisation / auditptrace() / OS-fingerprint / tpe(c)01/2002 Denis Ducamp pour RESIST


Quelques notions (1)(c)01/2002 Denis Ducamp pour RESISTchrootL’appel système chroot permet de limiter un processus à unesous-arborescence <strong>du</strong> disque+-et de limiter les risques si l’application est vulnérableL’accès disque <strong>du</strong> pirate est limité à cette arborescenceLa mise en cage d’un processus tournant sous root est inutilecréation de périphériques : accès direct au disquedouble chroot : évasion de la cageetc.set[ug]idL’appel système setuid (setgid) change l’utilisateur (le groupeprincipal) exécutant le processus+Seul un processus (setuid) root peut changer d’identité-Ce processus peut dans certains cas récupérer les droits rootUn programme setuid (setgid) s’exécute avec les privilèges del’utilisateur (<strong>du</strong> groupe) propriétairesi un tel programme est vulnérablealors tout utilisateur peut obtenir les privilèges <strong>du</strong> propriétaireQuelques notions (2)(c)01/2002 Denis Ducamp pour RESISTdébordement de tamponsLe programmeur a prévu un tampon de longueur fixe pour unedonnéel’utilisateur envoie une donnée de longueur bien plus grandel’exécution <strong>du</strong> programme est perturbée<strong>du</strong> déni de service...Program received signal SIGSEGV, Segmentation fault.0x41414141 in ?? ()à l’exécution contrôlée de code<strong>Linux</strong> vaio 2.4.16 #3 Sat Dec 1 23:56:11 CET 2001 i686 unknownuid=0(root) gid=0(root) groups=0(root)l’exploitation <strong>du</strong> débordement de tampon se fait parenvoie d’un shellcode (code exécutable lançant un shell)et changement de l’adresse de retour d’une fonction en cours vers le shellcodeenvoyéchangement de l’adresse de retour vers une fonction de la bibliothèque libcsystem(), strcpy(), etc.le tampon débordé peut aussi bien être placédans la pile, le tas, etc.càd des espaces mémoire en exécutionqui ne devraient être qu’en lecture / écriture


Quelques notions (5)(c)01/2002 Denis Ducamp pour RESISTptrace()Cet appel système permet d’effectuer <strong>du</strong> debogage de processussous Unix+pour savoir comment fonctionne un processus-pour changer l’exécution d’un processus en cours d’exécutionOS-fingerprintingUn ensemble de paquets IP non standards sont envoyés au système à analyserL’ensemble des réponses est caractéristique de chaque type desystèmedeux versions différentes d’un même système peuvent souvent être différenciésTrusted path execution (tpe)Permet de limiter l’exécution aux programmes se trouvant dans unrépertoire de confiancerépertoire appartenant à rootet n’étant en écriture que pour rootGrsecurityCONFIG_GRKERNSEC(c)01/2002 Denis Ducamp pour RESISTPermet tout simplement d’activer la sélection des groupes d’optionsprincipauxBuffer Overflow ProtectionAccess Control ListsFilesystem ProtectionsKernel AuditingExecutable ProtectionsNetwork ProtectionsSysctl supportMiscellaneous Enhancements


Gcc trampoline supportCONFIG_GRKERNSEC_STACK_GCC(c)01/2002 Denis Ducamp pour RESISTPermet d’activer le support des sauts par trampolinesUn saut par trampoline est l’exécution d’un morceau de code dansla pile pour accélérer un programmeLe patch doit différencier les sauts des exploitations de vulnérabilitésLa bibliothèque glibc 2.0 contient plusieurs sauts et nécessite donc cette optionEn théorie ceci pourrait permettre de contourner le fait que la pile estnon exécutableEn pratique aucun cas n’a été détecté.Nécessite "OpenWall Non-executable Stack" CONFIG_GRKERNSEC_STACKPaX protectionCONFIG_GRKERNSEC_PAX(c)01/2002 Denis Ducamp pour RESISTEmpêche l’exécution de code dans certaines pages mémoireNormalement sous IA-32 toute page en lecture est en exécutionIl s’agit <strong>du</strong> patch PaXProtège contre l’exécution de code dans la pile, le tas...Utilisée lors d’exploitations de vulnérabilitésIncompatible avec certains programmesceux qui exécutent <strong>du</strong> code dans des espaces mémoiresdynamiques obtenus par malloc() : XFree86, JRE, Wine...PaX est aujourd’hui contournablevoir l’article de Nergal : article 4 phrack 58mais permet généralement de se prémunir contre le tout premierprogramme d’exploitation de chaque vulnérabilitéNe peut être sélectionné si "OpenWall Non-executable Stack" l’est


Emulate trampolinesCONFIG_GRKERNSEC_PAX_EMUTRAMP(c)01/2002 Denis Ducamp pour RESISTLe patch PaX est lui aussi incompatible avec les sauts par trampolinescette option permet de les détecter pour en autoriser l’exécutionNécessite "PaX protection" CONFIG_GRKERNSEC_PAXRestrict mprotect()CONFIG_GRKERNSEC_PAX_MPROTECT(c)01/2002 Denis Ducamp pour RESISTEmpêche que le processus réactivele droit en exécution sur des pages non exécutablesle droit en écriture sur des pages en lecture seuleNécessite "PaX protection" CONFIG_GRKERNSEC_PAX


Randomize mmap() baseCONFIG_GRKERNSEC_PAX_RANDMMAP(c)01/2002 Denis Ducamp pour RESISTRend aléatoire les adresses des programmes :la pile d’exécutionles résultats de mmapdonc l’adresse de chargement des bibliothèquesl’adresse des programmes ELF dynamiquesL’attaquant doit deviner les adresses des composants à utiliserN’empèchée certainement pas :l’exploitatation de chaînes de formats par analyse distante de la pile d’exécutionNe peut être sélectionné si "OpenWall Non-executable Stack" l’estRead-only kernel memoryCONFIG_GRKERNSEC_KMEM(c)01/2002 Denis Ducamp pour RESISTEmpêche root de modifier la mémoire <strong>du</strong> <strong>noyau</strong>Empêche le chargement de root kits <strong>noyau</strong>Ne sert à rien si le support des mo<strong>du</strong>les n’est pas désactivé


Fixed mmap restrictionsCONFIG_GRKERNSEC_MMAPFIXED(c)01/2002 Denis Ducamp pour RESISTEmpêche qu’un processus appelle la fonction mmap() avecune adresse fixeet un droit en exécutionPermet d’empécher un programme de rendre inutile les résultats aléatoires de mmap()Groupe d’options 2/8(c)01/2002 Denis Ducamp pour RESISTBuffer Overflow ProtectionAccess Control ListsFilesystem ProtectionsKernel AuditingExecutable ProtectionsNetwork ProtectionsSysctl supportMiscellaneous Enhancements


Oblivion ACL SystemCONFIG_GRKERNSEC_ACL(c)01/2002 Denis Ducamp pour RESISTPermet d’activer le support <strong>du</strong> système des ACL OblivionCe système est basé sur le démon obvadm à récupérer séparémenthttp://www.grsecurity.net/obvadm-1.1a.tar.gzPermet de spécifier des ACLde façon absolue sur tous les fichiers : file.aclde façon relative à certains programmes : proc.aclhttp://www.grsecurity.net/obvdoc.tar.gzUn fichier / une arborescence peuvent être :en lectureen exécutionen écritureen ajout seulementcachéOblivion ACL System : options...Ces options ne sont pas documentées...(c)01/2002 Denis Ducamp pour RESISTet nécessitent "Enable grsecurity ACL system" CONFIG_GRKERNSEC_ACLMaximum Number of Rulesets for Files, ProcessesCONFIG_GR_MAX_RULESET 256Seconds in between log messages(minimum)CONFIG_GR_FLOODTIME 3Default ruleset for programs without aclsDeny CONFIG_GR_DEF_DENYAllow CONFIG_GR_DEF_ALLOW (défaut)Deny_if_running_as_root CONFIG_GR_DEF_DENY_ROOTEnable ACL Debugging MessagesCONFIG_GR_DEBUGPath to gradmCONFIG_GRADM_PATH "/sbin/gradm"Maximum tries before password lockoutCONFIG_GR_MAXTRIES 3Time to wait after max password tries, in secondsCONFIG_GR_TIMEOUT 30


Groupe d’options 3/8(c)01/2002 Denis Ducamp pour RESISTBuffer Overflow ProtectionAccess Control ListsFilesystem ProtectionsKernel AuditingExecutable ProtectionsNetwork ProtectionsSysctl supportMiscellaneous EnhancementsProc RestrictionsCONFIG_GRKERNSEC_PROC(c)01/2002 Denis Ducamp pour RESISTRestreint l’accès à /proc aux utilisateursqui ne peuvent consulter que leurs propres processusqui ne peuvent accéderni à dmesg(8)ni aux symboles <strong>noyau</strong>x et mo<strong>du</strong>lesLes restrictions effectives dépendent des options sélectionnéesPermet de maintenir une bonne confidentialitésur des systèmes partagés par des personnes étrangères (FAI...)sur des systèmes très sensibles


Restrict to user onlyCONFIG_GRKERNSEC_PROC_USER(c)01/2002 Denis Ducamp pour RESISTRestreint l’accès à /proc à tous les utilisateurs non-rootNécessite "Proc restrictions" CONFIG_GRKERNSEC_PROCAllow special groupCONFIG_GRKERNSEC_PROC_USERGROUP(c)01/2002 Denis Ducamp pour RESISTPermet à un groupe d’accéder de façon normale à /procLe groupe principal actuel <strong>du</strong> processus n’est plus consultableNécessite "Proc restrictions" CONFIG_GRKERNSEC_PROCNe peut être sélectionné si "Restrict to user only" l’est


GID for special groupCONFIG_GRKERNSEC_PROC_GID 1001(c)01/2002 Denis Ducamp pour RESISTLe groupe pour lequel l’accès à /proc n’est pas restreintNécessite "Allow special group" CONFIG_GRKERNSEC_PROC_USERGROUPLinking restrictionsCONFIG_GRKERNSEC_LINK(c)01/2002 Denis Ducamp pour RESISTEmpêche un processus de suivre un lien symboliquedans un répertoire en +t (comme /tmp)qui appartient à un autre utilisateur non-rootPermet de lutter de façon efficace contre les attaquesutilisant des noms de fichiers temporaires prévisiblesCes attaques peuvent être de différents typesdes dénis de servicesdestruction de fichiers systèmes sensiblespar ex. /etc/shadowdes escalades de privilègesmodification contrôlée de fichiers systèmes sensiblespar ex. /etc/passwd - /.rhosts


FIFO restrictionsCONFIG_GRKERNSEC_FIFO(c)01/2002 Denis Ducamp pour RESISTEmpêche un processus de suivre un lien symboliquedans un répertoire en +t (comme /tmp)qui appartient à un autre utilisateur non-rootPermet de lutter de façon efficace contreles attaques utilisant des noms de fichiers temporaires prévisiblesCes attaques peuvent être de différents typesdes vols d’informations sensiblespar ex. obtention d’informations après déchiffrementde modifications de données au volpar ex. insertion de backdoor dans main()Secure file descriptorsCONFIG_GRKERNSEC_FD(c)01/2002 Denis Ducamp pour RESISTAssure que tout programme possède stdin, stdout et stderr ouvertsrespectivement les fichiers 0, 1 et 2 en Centrée et sortie standards, sortie d’erreursPermet de lutter de façon efficace contredes dénis de servicedestruction de fichiers systèmes sensiblespar ex. /etc/shadowdes escalades de privilègesmodification contrôlée de fichiers systèmes sensiblespar ex. /etc/passwd - /.rhostsdes vols d’informations sensiblespar ex. /etc/shadow


Chroot jail restrictionsCONFIG_GRKERNSEC_CHROOT(c)01/2002 Denis Ducamp pour RESISTPermet d’accéder à certaines options de restriction des programmesmis en cageRestricted signalsDeny mountsDeny double-chrootsEnforce chdir("/") on all chrootsDeny (f)chmod +sDeny mknodDeny ptracesRestrict priority changesEmpêche les processus restreints d’accéder à certaines fonctionsnormalement sans utilité pour euxsauf pour s’évader de la cageou attaquer d’autres processus hors de la cageNormalement il est futile de restreindre des processus rootUtile dans le cas d’applications mal conçues ou d’origine douteuseRestricted signalsCONFIG_GRKERNSEC_CHROOT_SIG(c)01/2002 Denis Ducamp pour RESISTLes processus en cage ne peuvent envoyer des signaux qu’auxprocessus dans la même cagePermet d’empécher les attaquescontre les programmes sensibles aux attaques par signauxen dénis de service en tuant (aléatoirement) les autres processusNécessite "Chroot jail restrictions" CONFIG_GRKERNSEC_CHROOT


Deny mountsCONFIG_GRKERNSEC_CHROOT_MOUNT(c)01/2002 Denis Ducamp pour RESISTLes processus en cage ne peuvent monter ou démonter des partitionsEmpêche l’évasion de la cage en montant des partitions inaccessiblesdepuis la cageNécessite "Chroot jail restrictions" CONFIG_GRKERNSEC_CHROOTDeny double-chrootsCONFIG_GRKERNSEC_CHROOT_DOUBLE(c)01/2002 Denis Ducamp pour RESISTLes processus en cage ne peuvent pas se mettre en cage eux mêmeEmpêche l’évasion de la cage par double chroothttp://www.bpfh.net/simes/computing/chroot-break.htmlNécessite "Chroot jail restrictions" CONFIG_GRKERNSEC_CHROOT


Enforce chdir("/") on all chrootsCONFIG_GRKERNSEC_CHROOT_CHDIR(c)01/2002 Denis Ducamp pour RESISTLa fonction chroot() force que le répertoire <strong>du</strong> processus soit la racinede la cageEmpêche l’évasion de la cage par getcwd / fchdiren forçant le répertoire de travail à être la racine de la cageNécessite "Chroot jail restrictions" CONFIG_GRKERNSEC_CHROOTDeny (f)chmod +sCONFIG_GRKERNSEC_CHROOT_CHMOD(c)01/2002 Denis Ducamp pour RESISTLes processus en cage ne peuvent pas ajouter un bit suid/sgid viachmod() ou fchmod()Les bits suid/sgid n’ont pas de raison d’être dans un environnementrestreintPour empécher les escalades de privilèges par des processusrestreintsou qu’un processus non privilégié et non restreintobtienne des privilèges de la part d’un processus privilégié mais restreintNécessite "Chroot jail restrictions" CONFIG_GRKERNSEC_CHROOT


Deny mknodCONFIG_GRKERNSEC_CHROOT_MKNOD(c)01/2002 Denis Ducamp pour RESISTLes processus en cage ne peuvent pas appeler mknod()Empêche l’évasion de la cage par accès direct à des périphériquesvia création de fichiers spéciaux en mode block ou caractèreNécessite "Chroot jail restrictions" CONFIG_GRKERNSEC_CHROOTDeny ptracesCONFIG_GRKERNSEC_CHROOT_PTRACE(c)01/2002 Denis Ducamp pour RESISTLes processus en cage ne peuvent pas appeler ptrace()Empêche l’évasion de la cage par débogage de processus hors de lacageLes processus dans des environnements restreints n’ont pas deraison de déboguer d’autres processussurtout si ces derniers ne sont pas restreintsNécessite "Chroot jail restrictions" CONFIG_GRKERNSEC_CHROOT


Restrict priority changesCONFIG_GRKERNSEC_CHROOT_NICE(c)01/2002 Denis Ducamp pour RESISTLes processus en cage ne peuvent pas appeler nice() pour augmenterleur prioritéEmpêche les dénis de service par consommation de ressourcesprocesseurNécessite "Chroot jail restrictions" CONFIG_GRKERNSEC_CHROOTCapability restrictions within chrootCONFIG_GRKERNSEC_CHROOT_CAPS(c)01/2002 Denis Ducamp pour RESISTLimite les privilèges des processus mis en cage pour leur interdired’insérer des mo<strong>du</strong>les : CAP_SYS_MODULEd’ouvrir des périphériques raw : CAP_SYS_RAWIOd’effectuer des tâches d’administration système et réseau :CAP_SYS_ADMINde transférer des privilèges : CAP_SETPCAPet de configurer des tty : CAP_SYS_TTY_CONFIGLes processus dans des environnements restreints n’ont pas deraison d’effectuer ce type de tâches


Secure keymap loadingCONFIG_GRKERNSEC_KBMAP(c)01/2002 Denis Ducamp pour RESISTLimite à root le changement des touches et des touches de fonctions<strong>du</strong> clavierGroupe d’options 4/8(c)01/2002 Denis Ducamp pour RESISTBuffer Overflow ProtectionAccess Control ListsFilesystem ProtectionsKernel AuditingExecutable ProtectionsNetwork ProtectionsSysctl supportMiscellaneous Enhancements


Single group for auditingCONFIG_GRKERNSEC_AUDIT_GROUP(c)01/2002 Denis Ducamp pour RESISTLimite la journalisation des appels exec, chdir, (un)mount, et ipc à ungroupeEmpêche des possibilités de dénis de services via consommation deressources par le système de journalisationNécessite que les processus et utilisateurs à surveiller soient dansun même groupe à spécifierGID for auditingCONFIG_GRKERNSEC_AUDIT_GID 1007(c)01/2002 Denis Ducamp pour RESISTLe groupe pour lequel les appels exec, chdir, (un)mount, et ipc sontjournalisésNécessite "Single group for auditing" CONFIG_GRKERNSEC_AUDIT_GROUP


Exec loggingCONFIG_GRKERNSEC_EXECLOG(c)01/2002 Denis Ducamp pour RESISTActive la journalisation des appels à execve()Limité à un groupe si "Single group for auditing"CONFIG_GRKERNSEC_AUDIT_GROUP est activéLog execs within chrootCONFIG_GRKERNSEC_CHROOT_EXECLOG(c)01/2002 Denis Ducamp pour RESISTJournalise tous les appels à execve() effectués par les processus misen cage


Chdir loggingCONFIG_GRKERNSEC_AUDIT_CHDIR(c)01/2002 Denis Ducamp pour RESISTActive la journalisation des appels à chdir()Limité à un groupe si "Single group for auditing"CONFIG_GRKERNSEC_AUDIT_GROUP est activé(Un)Mount loggingCONFIG_GRKERNSEC_AUDIT_MOUNT(c)01/2002 Denis Ducamp pour RESISTActive la journalisation des mountages et démontages de partitionsLimité à un groupe si "Single group for auditing"CONFIG_GRKERNSEC_AUDIT_GROUP est activé


IPC loggingCONFIG_GRKERNSEC_AUDIT_IPC(c)01/2002 Denis Ducamp pour RESISTActive la journalisation des créations et destructionsdes queues de messagesdes sémaphoresdes segments de mémoire partagésLimité à un groupe si "Single group for auditing"CONFIG_GRKERNSEC_AUDIT_GROUP est activéSignal loggingCONFIG_GRKERNSEC_SIGNAL(c)01/2002 Denis Ducamp pour RESISTJournalise certains signaux importants comme SIGSEGVceci indique quand un programme fonctionne malceci peut indiquer des tentatives infructueuses d’exploitation d’unevulnérabilité


Fork failure loggingCONFIG_GRKERNSEC_FORKFAIL(c)01/2002 Denis Ducamp pour RESISTJournalise les appels à fork() qui ont échouéCeci peut indiquer une tentativede déni de service contre le système par fork-bombingde dépassement de quotaSet*id loggingCONFIG_GRKERNSEC_SUID(c)01/2002 Denis Ducamp pour RESISTActive la journalisation des appels à set*id()Peut générer beaucoup d’évènements sur certains systèmes chargésCela dépend <strong>du</strong> comportement normal des applicationsNe peut être sélectionné si "Log set*ids to root" l’est


Log set*ids to rootCONFIG_GRKERNSEC_SUID_ROOT(c)01/2002 Denis Ducamp pour RESISTNe journalise que les appels à set*id() ou un utilisateur demande unchangement vers l’utilisateur ou le groupe rootPeut indiquer une exploitation de vulnérabilitéles shellcode commencent généralement par setreuid()car /bin/bash2 se débarasse de ses privilègessi le groupe et/ou l’utilisateur effectifs sont différents <strong>du</strong> groupe et/ou del’utilisateur réelvoir l’option -p de bash(1) v2.xcar tcsh refuse de s’exécuter dans le même casNe peut être sélectionné si "Set*id logging" l’estTime change loggingCONFIG_GRKERNSEC_TIME(c)01/2002 Denis Ducamp pour RESISTJournalise tous les changements de l’horloge système


Groupe d’options 5/8(c)01/2002 Denis Ducamp pour RESISTBuffer Overflow ProtectionAccess Control ListsFilesystem ProtectionsKernel AuditingExecutable ProtectionsNetwork ProtectionsSysctl supportMiscellaneous EnhancementsExec process limitingCONFIG_GRKERNSEC_EXECVE(c)01/2002 Denis Ducamp pour RESISTLes limites en ressources sont également vérifiées lors de execve()Normalement ceci n’est fait que lors de fork()Permet d’empécher des contournements de limitations de ressources


Randomized PIDsCONFIG_GRKERNSEC_RANDPID(c)01/2002 Denis Ducamp pour RESISTPermet de rendre aléatoire la génération des numéros de processusPermet de rendre plus complexes les attaquespar signauxpar débogageles numéros de processus des démons lancés au démarrage étant aléatoiresAltered default IPC permissionsCONFIG_GRKERNSEC_IPC(c)01/2002 Denis Ducamp pour RESISTRestreint les permissions par défaut à la création des segments de mémoire partagésd’après le masque de l’utilisateur (umask)quand l’utilisateur ne les spécifie pasLes droits d’accès par défaut sont ugo+rwx sous linux


Limit uid/gid changes to rootCONFIG_GRKERNSEC_TTYROOT(c)01/2002 Denis Ducamp pour RESISTPermet d’accéder à des options de limitation d’accès de root sur différents types de consolesDeny physical consoles (tty)CONFIG_GRKERNSEC_TTYROOT_PHYSInterdit l’accès de root sur les consoles physiques(c)01/2002 Denis Ducamp pour RESISTNécessite "Limit uid/gid changes to root" CONFIG_GRKERNSEC_TTYROOT


Deny serial consoles (ttyS)CONFIG_GRKERNSEC_TTYROOT_SERIAL(c)01/2002 Denis Ducamp pour RESISTInterdit l’accès de root sur les consoles sériesNécessite "Limit uid/gid changes to root" CONFIG_GRKERNSEC_TTYROOTDeny pseudo consoles (pty)CONFIG_GRKERNSEC_TTYROOT_PSEUDOInterdit l’accès de root sur les pseudo consoles(c)01/2002 Denis Ducamp pour RESISTNécessite "Limit uid/gid changes to root" CONFIG_GRKERNSEC_TTYROOT


Fork-bomb protectionCONFIG_GRKERNSEC_FORKBOMB(c)01/2002 Denis Ducamp pour RESISTLimite pour les utilisateurs <strong>du</strong> groupe spécifiéLe nombre total de processus autorisésLe nombre de nouveaux processus par seconde autoriséEmpêche les attaques en déni de service par fork-bombingGID for restricted usersCONFIG_GRKERNSEC_FORKBOMB_GID 1006(c)01/2002 Denis Ducamp pour RESISTLe groupe auquel appartiennent les utilisateurs limitésNécessite "Fork-bomb protection" CONFIG_GRKERNSEC_FORKBOMB


Forks allowed per secondCONFIG_GRKERNSEC_FORKBOMB_SEC 40(c)01/2002 Denis Ducamp pour RESISTNombre maximal de fork() par seconde pour un utilisateur limitéNécessite "Fork-bomb protection" CONFIG_GRKERNSEC_FORKBOMBMaximum processes allowedCONFIG_GRKERNSEC_FORKBOMB_MAX 20Nombre maximal de processus pour un utilisateur limité(c)01/2002 Denis Ducamp pour RESISTNécessite "Fork-bomb protection" CONFIG_GRKERNSEC_FORKBOMB


Trusted path executionCONFIG_GRKERNSEC_TPE(c)01/2002 Denis Ducamp pour RESISTPermet d’interdire l’exécution de programmes qui ne se trouvent pasdans un répertoire de confiancePermet d’interdire l’exécution de tout programme importé par unutilisateurEmpêche l’exécution d’exploitations de vulnérabilités localesInutile si un interpréteur comme perl est présentcar il est alors toujours possible de porter l’exploit en perlGlibc protectionCONFIG_GRKERNSEC_TPE_GLIBC(c)01/2002 Denis Ducamp pour RESISTEmpêche l’exécution de programme lorsque certaines variablesd’environnement sont définiesLD_PRELOAD/lib/ld-2.*Ces variables changent le comportement <strong>du</strong> programme /lib/ld-2.*ce programme est utilisé par tous les programmes liésdynamiquement pour charger les bibliothèques dynamiquesces variables permettent donc de contourner la protection par répertoire de confianceNécessite "Trusted path execution" CONFIG_GRKERNSEC_TPE


Partially restrict non-root usersCONFIG_GRKERNSEC_TPE_ALL(c)01/2002 Denis Ducamp pour RESISTPermet d’autoriser aux autres utilisateurs d’exécuter des programmessices programmes sont dans des répertoires qui appartiennent àl’utilisateurce répertoire n’est en écriture que pour l’utilisateurAutorise un utilisateur à exécuter ses propres programmesEmpèche un attaquant de faire exécuter à un utilisateur victime unprogramme potentiellement malveillantNécessite "Trusted path execution" CONFIG_GRKERNSEC_TPEGID for untrusted usersCONFIG_GRKERNSEC_TPE_GID 1005(c)01/2002 Denis Ducamp pour RESISTPermet de limiter l’interdiction d’exécuter un programme qui ne setrouve pas dans un répertoire de confiance à un groupe donnéNécessite "Trusted path execution" CONFIG_GRKERNSEC_TPE


Restricted ptraceCONFIG_GRKERNSEC_PTRACE(c)01/2002 Denis Ducamp pour RESISTLimite l’appel à ptrace() à rootle traçage des appels systèmes dans le <strong>noyau</strong> est aussi désactivéles appels ptrace() autorisés sont journalisésL’appel ptrace() est inutilisé sur de très nombreux systèmeEmpêchele vol d’informations dans d’autres processusle changement de l’exécution d’autres processusAllow ptrace for groupCONFIG_GRKERNSEC_PTRACE_GROUP(c)01/2002 Denis Ducamp pour RESISTPermet d’autoriser un groupe à appeler ptrace()Nécessite "Restricted ptrace" CONFIG_GRKERNSEC_PTRACE


GID for ptraceCONFIG_GRKERNSEC_PTRACE_GID 1008(c)01/2002 Denis Ducamp pour RESISTPermet de spécifier le groupe autorisé à appeler ptrace()Nécessite "Restricted ptrace" CONFIG_GRKERNSEC_PTRACEGroupe d’options 6/8(c)01/2002 Denis Ducamp pour RESISTBuffer Overflow ProtectionAccess Control ListsFilesystem ProtectionsKernel AuditingExecutable ProtectionsNetwork ProtectionsSysctl supportMiscellaneous Enhancements


Randomized IP IDsCONFIG_GRKERNSEC_RANDID(c)01/2002 Denis Ducamp pour RESISTPermet de rendre totalement aléatoire la génération des numéros iddes paquets ipC’est le portage de la fonction de génération de OpenBSDPas très utilela fonction par défaut initialise à zéro le champ IDpour les paquets avec le bit DFdonc pour les paquets syn/ack et rst tcp, udp courtsRandomized TCP source portsCONFIG_GRKERNSEC_RANDSRC(c)01/2002 Denis Ducamp pour RESISTPermet de rendre totalement aléatoire le numéro de port source généré par le <strong>noyau</strong>Permet de rendre plus complexe des attaques de vols de donnéescontre des protocoles comme ftp passif


Altered Ping IDsCONFIG_GRKERNSEC_RANDPING(c)01/2002 Denis Ducamp pour RESISTLe champ icmp.id des paquets icmp echo reply générés est identiqueau champ icmp.id des paquets icmp echo request reçusPermet de rendre plus complexe l’identification à distance de la pile IPRandomized TTLCONFIG_GRKERNSEC_RANDTTL(c)01/2002 Denis Ducamp pour RESISTPermet de rendre totalement aléatoire le champ TTL des paquets IP générésPermet de rendre plus complexe l’identification à distance de la pile IPRedessiner l’architecture d’accès n’est pas complexifié


TTL starting pointCONFIG_GRKERNSEC_RANDTTL_THRESH 64(c)01/2002 Denis Ducamp pour RESISTPermet de choisir la plus petite valeur de champ TTL à générerNécessite "Randomized TTL" CONFIG_GRKERNSEC_RANDTTLSocket restrictionsCONFIG_GRKERNSEC_SOCKET(c)01/2002 Denis Ducamp pour RESISTPermet d’accéder à des options de limitation des sockets Internet


Deny any sockets to groupCONFIG_GRKERNSEC_SOCKET_ALL(c)01/2002 Denis Ducamp pour RESISTInterdit à un groupe donné d’ouvrir des sockets clientes et serveursNécessite "Socket restrictions" CONFIG_GRKERNSEC_SOCKETGID to deny all sockets forCONFIG_GRKERNSEC_SOCKET_ALL_GID 1004(c)01/2002 Denis Ducamp pour RESISTSpécifie le groupe interdit d’ouvrir des sockets clientes et serveursNécessite "Deny any sockets to group" CONFIG_GRKERNSEC_SOCKET_ALL


Deny client sockets to groupCONFIG_GRKERNSEC_SOCKET_CLIENTInterdit à un groupe donné d’ouvrir des sockets clientes(c)01/2002 Denis Ducamp pour RESISTNécessite "Socket restrictions" CONFIG_GRKERNSEC_SOCKETGID to deny client sockets forCONFIG_GRKERNSEC_SOCKET_CLIENT_GID 1003Spécifie le groupe interdit d’ouvrir des sockets clientesNécessite "Deny client sockets to group"CONFIG_GRKERNSEC_SOCKET_CLIENT(c)01/2002 Denis Ducamp pour RESIST


Deny server sockets to groupCONFIG_GRKERNSEC_SOCKET_SERVERInterdit à un groupe donné d’ouvrir des sockets serveurs(c)01/2002 Denis Ducamp pour RESISTNécessite "Socket restrictions" CONFIG_GRKERNSEC_SOCKETGID to deny server sockets forCONFIG_GRKERNSEC_SOCKET_SERVER_GID 1002Spécifie le groupe interdit d’ouvrir des sockets serveursNécessite "Deny server sockets to group"CONFIG_GRKERNSEC_SOCKET_SERVER(c)01/2002 Denis Ducamp pour RESIST


Groupe d’options 7/8(c)01/2002 Denis Ducamp pour RESISTBuffer Overflow ProtectionAccess Control ListsFilesystem ProtectionsKernel AuditingExecutable ProtectionsNetwork ProtectionsSysctl supportMiscellaneous EnhancementsSysctl supportCONFIG_GRKERNSEC_SYSCTL(c)01/2002 Denis Ducamp pour RESISTPermet d’activer le support de la configuration dynamique des optionsgrsecurity présentesUne arborescence /proc/sys/kernel/grsecurity est créée et un pseudofichier par option est présentSi cette option est activée alors toutes les options sont désactivéespar défautUne entrée grsec_lock permet de rendre non modifiables toutes lesentréesÀ modifier après configuration des autres entrées


Groupe d’options 8/8(c)01/2002 Denis Ducamp pour RESISTBuffer Overflow ProtectionAccess Control ListsFilesystem ProtectionsKernel AuditingExecutable ProtectionsNetwork ProtectionsSysctl supportMiscellaneous EnhancementsBSD-style core<strong>du</strong>mpsCONFIG_GRKERNSEC_COREDUMP(c)01/2002 Denis Ducamp pour RESISTChange le nom des fichiers core<strong>du</strong>mpsous <strong>Linux</strong> tout fichier core<strong>du</strong>mp s’appelle coresous *BSD tout fichier core<strong>du</strong>mp s’appelle core.nomDuProcessusAvec cette option les fichiers core<strong>du</strong>mp s’appellecore.nomDuProcessusLes fichiers core sont générés dans le répertoire courant del’applicationCette option peut permettre de récupérer les fichiers core<strong>du</strong>mp deplusieurs applications différentes s’exécutant dans le même répertoire


Quelques cas concretsLe serveur d’un particulierLe serveur de e-commerceLe serveur de la NSA(c)01/2002 Denis Ducamp pour RESISTLe serveur d’un particulier+ Buffer Overflow Protection- Access Control Lists+ Filesystem Protections- Kernel Auditing- Executable Protections- Network Protections- Sysctl support- Miscellaneous Enhancements(c)01/2002 Denis Ducamp pour RESISTBuffer Overflow Protection :PaX est à choisircar la protection mmap est absente <strong>du</strong> portage <strong>du</strong> patch openwallEn fait ici le patch openwall est recommendable car il comportela protection contre la pile exécutableavec émulation des sauts par trampolinela protection mmapla protection des fichiers temporairesla protection des entrées/sorties


Le serveur de e-commerce+ Buffer Overflow Protection- Access Control Lists+ Filesystem Protections+ Kernel Auditinglimité à un groupe bien précis- Executable Protections+ Trusted path execution- Network Protections+ Socket restrictions (ou ceci est applicable)- Sysctl support+ Miscellaneous Enhancements(c)01/2002 Denis Ducamp pour RESISTAttention :rien ne protège contre les scripts perl/aspécrits rapidement au fond d’un garage...ici les seules protections sont :la conception sécurisée dès le début <strong>du</strong> projetl’audit de code tout au long <strong>du</strong> projetLe serveur de la NSA+ Buffer Overflow Protection+ Access Control Lists+ Filesystem Protections+ Kernel Auditingnon limité à un groupe+ Executable Protections+ Network ProtectionsSauf Randomized IP IDs, TTL et Altered Ping IDs- Sysctl support+ Miscellaneous Enhancements(c)01/2002 Denis Ducamp pour RESISTC’est une blague : la NSA préfère utiliser Windowscar c’est plus mieux bien certifié... ;-)disons que c’est un serveur avec des informations ultra sensibles"Sauf Randomized IP IDs, TTL et Altered Ping IDs"car il ne s’agit que de rendre plus difficile l’identification <strong>du</strong> système, ce qui est obtenable via bien d’autres moyens..."Sysctl support" :une fois les bonnes choisies elles n’ont pas à être modifiées


ConclusionIl y a des choses utilespour se protégertemporairement de failles non connuesle temps de la mise à jourpour rendre plus complexe la tâche des piratespour permettre la détection de comportements anormaux(c)01/2002 Denis Ducamp pour RESISTSuivant le niveau requis, le nombre d’options à activer variecertaines options ne peuvent être appliquées sur des systèmestrop complexesun indivi<strong>du</strong> seul ne peut pas gérer correctement toute lajournalisation générée par l’auditCela ne dispense pasde démons bien choisis et bien configurésle <strong>du</strong>rcissement <strong>du</strong> système est un pré-requis obligatoirebastille linux peut être un bon début : http://www.bastille-linux.org/sinon il sera possible de passer root localementet de contourner bien des protectionsde mises à jour aussi rapides que possibledès la connaissance de toute vulnérabilitéMerci de votre attention(c)01/2002 Denis Ducamp pour RESISTVous pouvez poser vos questions...et faire connaître vos remarques...même par messagerie électronique.puis réveiller discrètement ceux qui dorment ;-)Bye, bye...(c) 01/2002 Denis Ducamp / HSC pour RÉSIST 2002

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!