--- title: TATT - 1 tags: TATT, moemoea.fierin --- [TOC] cours: https://tatt.abcdefgh.xyz/srs/tatt.pdf # Mise en garde C'est cher et chiant d'utiliser ca sur d'autre machine que la sienne (niveau legalité) Code penal: - 323.1 - 323.3 - ... # Plan du cours - bases - reverse eng - exploit logi - buffer overflow - autre exploit logi - automatisation # Notation Exercices à rendre a la fin de certains TP Point precis de notation # Bases ## Pré-requis Linux ### Noyau **Notes:** gestion de mem, proc, matos, etc... Le noyau Linux est responsable de la gestion de la mémoire, des processus, du matériel, etc **Notes:** - appel systeme (open, read, write, nmap, ...) - appel sys privilegiés Les droits qui font que c'est privil sont découpés en "capabilities". Certains appels système sont privilégiés : ils ne peuvent être appelés que par des processus ayant suffisamment de privilèges (capability). Un processus tournant en **root** dispose par défaut de tous les privilèges. Les appels système privilégiés permettent par exemple de modifier la configuration des interfaces réseau, de gérer les identifiants des utilisateurs, de créer des fichiers représentant les périphériques ou d’effectuer des actions sensibles sur le système. La liste des appels système et leur numéro est présente dans le fichier unistd_32.h **Exercice Numéros d’appels système** > :small_red_triangle_down: Déterminer l’emplacement du fichier unistd_32.h (/usr/include/i386-linux-gnu/asm) > :small_red_triangle_down: le numéro des appels système execve, read, dup2 et socketcall. (voir fichier unistd_32.h) :small_red_triangle_down: Quel appel système permet de lire le contenu d’un répertoire ? ### Programme vs process **vs** program un fichier exec processus fichier instancier **Format** Le format des fichiers exécutables sous Linux s'appelle PE Le format des fichiers exécutables sous UNIX s’appelle ELF (executable and linkable format). Ce format définit plusieurs types de sections, notamment : — .bss : données non initialisées (uniquement une taille) — .data : données initialisées — .rodata : données en lecture seule — .got : table de pointeurs — .plt : table des fonctions des bibliothèques dynamiques — .symtab : table des symboles — .init : instructions à exécuter à l’initialisation du processus — .text : instructions du processus — .fini : instructions appelées après la fin d’un processus Le format ELF décrit également les segments qui devront être créés en mémoire, ainsi que les droits d’accès associés (exécution, écriture, etc.). **Exercice** > Exercice Format ELF :small_red_triangle_down: Avec le programme readelf, affichez la liste des sections du programme /bin/bash, :small_red_triangle_down: ainsi que la table des symboles. Un progrmme qui n'a pas de symbole ### Bibliothèques dynamiques fichier exec .so (format ELF) chargement ds l'espace d'addressage wrappers de la IBS: write => write @GLIB_2 editeur de lien ld.so (nom du symbole) **Exercice** >Quelles fonctions sont importées par le programme /bin/bash? nm /bin/bash (aucun symb) readelf -r /bin/bash ### Memoire coredump pour recup la mem **Exercice** > cat /proc/$$/maps pk plusieurs fois le meme fichier en mem? Par ce qu'il y'a plusieurs segments par fichiers. A quelle addr commence la pile sur le shell ? BF.. qqchose dump memoire shell courant Pour dumper la mémoire d’un processus, la commande gcore du programme gdb peut être utilisée. #### Page mem Bien que les pages mémoire allouées pour la pile soient demandées avec les droits rw-p, donc sans le droit d’exécution, les processeurs 32 bits sans le flag NX (ou XD selon le fabriquant) ne permettent pas d’empêcher l’exécution des pages dont la lecture est autorisée. Il est donc possible de placer du code exécutable dans la pile et de le faire exécuter par le processeur (compilation Just In Time de l’environnement Java par exemple). ## Gestion des utilisateurs ### Authentification auth n'existe que dans lesp utilisateur car le noyau ne voit que les UID il n'a aucune notion d'utilisateur pas d'assos UIS/utilisateur dans le noyau biblio qui s'aucupe de verifier l'authent des utilisateurs: PAM ### Privilèges des processus Un utilisateur est associé à un identifiant personnel (UID) et à un identifiant de groupe (GID). Dans le contexte d’un processus, il faut distinguer les identifiants réels (RUID/RGID) des identifiants effectifs (EUID/EGID). Ces derniers sont utilisés pour tester le contrôle d’accès aux ressources par le noyau. Le noyau stocke les informations liées aux autorisations dans des structures cred de la structure task_struct des tâches.