Affichage des articles dont le libellé est certification. Afficher tous les articles
Affichage des articles dont le libellé est certification. Afficher tous les articles

samedi 9 avril 2016

Review: Cracking The Perimeter (CTP/OSCE)

Update: Ajout de quelques liens et références, ainsi que des vidéos Shmoocon/Defcon. Reformulation de certaines phrases. Ajout de références sur la partie réseau/cisco.

L'an dernier je vous faisais une review, en français, de ce que l'on appelle vulgairement "OSCP" (le training "Pentesting With Kali", avec la certification OSCP), cette année ça sera "OSCE". Je n'ai pas vu des masses de review en français, si ce n'est aucune.

J'ai fini par passer l'exam, à la toute dernière date possible, et si vous lisez ces lignes, c'est que je l'ai réussi.


Allez, c'est parti !

Pourquoi CTP ?

CTP, ou "Cracking The Perimeter", est le nom de la formation (OSCE est donc le nom de la certification associée).

Sur le principe on peut se demander pourquoi avoir besoin d'un training supplémentaire pour faire du test d'intrusion, une fois qu'on est certifié "OSCP". Offensive-Security apporte son élément de réponse sur la page du training "CTP" en disant, en substance, que de nos jours la barre est assez élevée pour entrer dans un réseau, et que les exploits publics/mots de passe par défaut ne suffisent plus, que l'attaquant a besoin de compétences plus poussées, et que ce training apporte ces compétences.
The bar required to “crack” the organizational perimeter is constantly being raised. Public exploits and weak passwords rarely do the job, which requires the attacker to have an expanded set of advanced hacking techniques in order to successfully complete a real-world pentest.

Le "challenge"

Chose assez inhabituelle pour pouvoir s'inscrire à ce cours, il faut faire un petit challenge en quelques étapes, fournissant des identifiants uniques à communiquer lors de l'inscription. Le but est de s'assurer que le candidat dispose d'un niveau de connaissances minimum avant de s'engager là dedans, histoire qu'il ne perde pas du temps (et surtout de l'argent). En revanche, réussir ce challenge ne garantit pas la suite :)
Il est fortement déconseillé de "tricher" en allant chercher des soluces en ligne avant de faire l'inscription (mais cela va de soi), ça ne fait que retarder la déception en se mentant à soi même. Sauf peut-être pour le "Meilleur Pentester de France 2010".
Je laisserai les curieux se rendre sur le site et résoudre le challenge afin qu'ils se fassent une idée sur les pré-requis (mais ce n'est en rien comparable au challenge du SSTIC :p)

Maintenant, une question qui revient assez souvent c'est "est-ce qu'il faut avoir fait PWK/OSCP avant ?", la réponse est non. Et quant à savoir quel est le niveau minimum à avoir, c'est difficile à dire, mais avoir déjà un peu joué avec des stack overflows est un bon début.

Le programme

Alors on ouvre le syllabus du cours pour voir en gros en quoi il consiste, En revanche, je ne peux pas trop m'étendre sur les détails du contenu :

"Web Application Angle"

Exploitation de quelques vulnérabilités "web" pour aboutir à un shell distant (XSS et LFI).
On va dire que c'est une entrée en la matière de type "pentest" pour faire la liaison avec le cours précédent. Le niveau peut sembler "bas", mais il consiste aussi à analyser du code pour y identifier une vulnérabilité.

"Backdoor Angle"

Cette section sert d'initiation à OllyDBG principalement. On ajoute du code malveillant à un binaire tout ce qu'il y a de plus normal, à la main. On prend aussi un exécutable flaggué comme malveillant par un antivirus, et on le rend indétecté (en tout cas par cet antivirus).

"Advanced Exploit Developpement"

Déjà, on va revoir où nous laissait PWK/OSCP. On exploitait un stack overflow dans un binaire ne présentant pas de protections particulières, sous Windows (et aussi sous Linux) pour sauter sur un shellcode placé sur la stack.
Ici on aborde des cas un tout petit peu plus réalistes, comme la vulnérabilité MS07-017 sous Windows Vista et son ASLR foireux. Le bypass de l'ASLR est trivial, en revanche, on découvre que parfois on saute sur du contenu sous notre contrôle, mais qu'il doit respecter certaines contraintes pour être traité. En l'occurence, on saute au début du header ANI (une chaine "RIFF"), mais on ne peut pas le remplacer par autre chose. On découvre ce qu'on peut faire pour ça.
On voit ensuite un cas où on se retrouve avec peu d'espace accessible directement, mais où on est en mesure de placer et exécuter un shellcode de premier niveau (egghunter) qui ira à la recherche d'un shellcode plus gros situé ailleurs en mémoire.

"0day Angle"

Rassurez-vous, pas de véritables 0days dans le cours, en revanche, on aborde la recherche de vulnérabilités à l'aide de fuzzers (ici, SPIKE), dans le but d'obtenir des 0dayscrashs.
On fait du fuzzing sur un serveur TFTP sous Windows, on en profite pour découvrir l'exploitation lorsque c'est le pointeur SEH qu'on écrase.
On termine la partie exploitation sur des conditions d'exploitation un peu complexes lorsque nos seuls caractères autorisés sont alphanumériques, ce qui complexifie pas mal les choses pour notre shellcode.

"Network Angle"

Ce module est instructif, mais je ne pense pas qu'il me serve réellement dans ma vie de pentester au quotidien. En mode TL;DR, on exploite le fait que le routeur (Cisco) cible ait une ACL pour l'utilisation de la communauté SNMP "private" depuis certaines IP internes uniquement, autorisant la récupération de fichiers de configuration via TFTP. On envoie donc des requêtes SNMP "private" spoofées à l'aide de Scapy pour dire au routeur de venir récupérer notre configuration custom ajoutant un tunnel GRE dont il serait une extrémité, et dont nous serions l'autre extrémité, comme ça nous sommes en mesure de sniffer le traffic passant par ce routeur. Bon en 2016 on connait le filtrage ingress, mais on sait jamais (non, je ne parle pas du jeu en réalité augmentée).
De manière générale, bien que la mise en oeuvre elle-même de l'attaque est hautement improbable de nos jours, la partie "post-exploitation" (à savoir configurer un tunnel GRE) est intéressante et peut donner des éléments de réponse à la question "que faire une fois root sur un routeur (cisco) ?". A noter qu'un vieil article de Phrack répond aussi à cette question, avec le même genre de réponses :-)
Une variante de cette attaque est expliquée dans l'article "Cisco SNMP configuration attack with a GRE tunnel". On retrouve également des explications au chapitre 9 de "Gray Hat Hacking" 4e édition ("Exploiting Cisco Routers").

Le cours

Il s'agit d'un PDF et de quelques heures de vidéo.

Le lab

Ce qui rendait PWK assez unique et en faisait une excellente expérience, c'était son "lab" d'une cinquantaine de machines à compromettre de manières plus ou moins différentes. Dans CTP...eh bien il n'y en a pas vraiment. On se retrouve avec 3 hôtes, dont un qui peut se retrouver dans une configuration IP différente (via le panel d'admin) pour le module réseau de la fin :
- un routeur de type Cisco (probablement émulé via GNS3) pour la partie réseau
- un hôte Windows Vista (pour les parties "backdoor angle" et "advanced exploit development", ainsi que "network angle")
- un hôte Windows 2003 Server (pour les parties web, et fuzzing)
On dispose au maximum de 60 jours (à 1500 USD, soit environ 1400 euros au taux de change actuel) pour profiter au maximum de ce temps de "lab".
Evidemment, offsec ne propose pas des formations où il faut passer 60 jours non-stop dessus. Il s'agit de 60 jours à raison de quelques heures par-ci par-là, comme pour OSCP, en considérant que les gens ont un emploi - parfois chronophage - à côté. Donc en 60 jours il est théoriquement largement possible de passer sur tous les modules (les reproduire dans son "lab" et les documenter allègrement). En réalité, en 30 jours, en s'y collant tous les jours, c'est faisable.

La théorie, et la pratique

Là où dans PWK les instructions pouvaient être suivies pas à pas, et reproduites à peu près exactement, pour arriver à peu près au même résultat que dans le cours, ici ce n'est pas la philosophie. En fait, on considère qu'on est assez grand pour comprendre et s'adapter. Donc les manipulations peuvent parfois ne pas être reproduites telles quelles; par exemple certaines lignes de commandes tapées dans la console sont fausses, certains outils utilisés génèrent des résultats très différents de ceux attendus car ils ont évolué depuis, et pour finir, parfois il y a très peu d'explications. Dans un sens c'est normal, la sécurité informatique est un domaine en perpétuelle évolution (au même titre que l'informatique), on doit démontrer notre capacité à apprendre, et nous adapter.

La documentation

Comme beaucoup de choses dans le domaine de la sécurité informatique, on peut se former tout seul, en autodidacte. L'intégralité des notions abordées par ce cours n'échappent pas à cette règle. Une ressource majeure sont les articles d'exploitation de corelan (en tout cas, les exploit writing tutorials jusqu'au 9e inclus).
Certains bouquins sont également très intéressants :
- The Shellcoder's Handbook
- Hacking: The Art of Exploitation (un seul chapitre en particulier)

Il est également possible de s'entrainer un peu. Le programme vulnserver.exe trouvable assez facilement fera une très bonne cible d'entrainement.

L'ancêtre du cours était à l'origine une présentation faite par muts à Shmoocon, "Backtrack to the Max", dont il existe une vidéo en ligne, présentant le bypass d'antivirus et l'exploitation de ms07-017. Un des modules (shellcoding en conditions extrèmes) a également fait l'objet d'une présentation à Defcon 16 :

De manière générale, chaque domaine abordé dans le cours apporte quelques éléments. Le fait que la vidéo et/ou le support pdf soient parfois volontairement erronés va pousser à aller se documenter sur Internet, pour parfois tomber sur des informations qui sont à l'état de l'art, contrairement au cours lui même, qui date un peu. Forcément, on ne leurre plus un antivirus avec un bête xor en 2016, et le fuzzing avec SPIKE, on a fait mieux depuis :-)


L'exam

A l'instar de l'exam OSCP, à l'heure à laquelle notre exam est programmé on reçoit un kit de connexion à un VPN nous donnant accès à un certain nombre de machines et un panel, et on dispose de 48 heures pour faire ce qui nous est demandé. Evidemment, vous vous doutez que ça tourne autour de la compromission de machines. Par contre, ici il faut oublier exploit-db ou metasploit :-) (qui seront totalement inutiles)
Il faudra mettre en application la quasi totalité des compétences abordées dans le contenu du cours, voire même peut-être un peu plus. C'est sur cet aspect là que se différencient les "geeks" qui iront creuser plus loin que le contenu du cours, et les autres :) parce qu'après tout, c'est cela la sécurité informatique, quelque chose que l'on apprend majoritairement par soi-même. On peut être guidé/accompagné sur certains aspects, mais c'est à nous de continuer seul. On ne peut pas se permettre de rester sur nos acquis.
Evidemment, c'est pas parce qu'on dispose de 48 heures que ça prendra forcément 48 heures. Ca peut prendre moins.
On dispose ensuite de 24 heures supplémentaires pour soumettre un rapport. Là encore, faire le rapport prend une poignée d'heures. C'est juste qu'on dispose de 24 heures maximum pour le rendre.

Je ne vais pas rédiger ici un compte rendu heure par heure de mon organisation pendant l'exam, chacun ayant un mode de fonctionnement différent.

Et la suite ?

Il n'y a pas vraiment de suite à proprement parler. Je pourrais continuer de jouer avec l'exploitation logicielle (et système) et envisager de poursuivre par le cours Advanced Windows Exploitation (aboutissant à la certification OSEE), mais il reste à voir si c'est là encore bien pertinent avec une activité de pentester qui doit plier un pentest en 5 jours rapport compris. Il y a également le cours "Advanced Web Attacks and Exploitation" aboutissant à la certification OSWE, qui parait déjà plus crédible pour un pentester de nos jours.

Conclusion

Je n'irais pas jusqu'à dire que ce training est complémentaire à PWK/OSCP. Certaines notions abordées ayant déjà été abordées, parfois même mieux, par PWK :
- la partie web xss/lfi : on voyait déjà le vol de cookies et la redirection vers un exploit browser pour les xss, et l'injection de code dans les logs pour la partie LFI;
- la partie backdooring/evasion d'antivirus est intéressante pour savoir comment faire ce genre de choses à la main, mais on obtenait limite de meilleurs résultats avec Hyperion dans le cours PWK ;
Ca nous donne 4 modules sur 9 qui mériteraient d'être profondément remaniés. En revanche, rien à dire sur les 5 autres, même si la partie exploitation tourne exclusivement autour de stack overflows.
Maintenant, est-ce qu'en tant que pentester, cette formation est réellement utile ? Je suis assez mitigé. En 2017 j'ai le sentiment qu'un pentester ne dispose plus que d'une poignée de jours - se comptant sur les doits d'une main - pour mener à bien un pentest, dans des conditions ne reflétant absolument pas l'état des menaces. De plus, le temps pouvant s'écouler entre le début de la recherche d'une nouvelle vulnérabilité, et la mise au point d'un code d'exploitation à peu près stable peut prendre des mois (je n'ai plus la source, mais j'ai cru lire 6 mois pour la plupart des gros logiciels bien répandus). Donc clairement, pour étoffer son set de compétences en pentest, clairement, c'est pas la peine. Par contre, pour faire de l'évaluation de sécurité de produit en labo, pourquoi pas.

mercredi 24 décembre 2014

Try Harder (review PWK/OSCP)

Ce week-end, j'ai (enfin) terminé mon cycle PWK en obtenant la certification OSCP, par conséquent j'en profite pour faire un post pour les francophones qui voudraient en savoir plus, ou qui ne connaissaient juste pas et cherchent une formation en sécurité informatique (ou alors pour les managers qui cherchent quelle formation payer à leurs employés, mais je pense qu'on peut rêver).

PWK (Pentesting With Kali)

C'est la formation de base d'Offensive-Security permettant de se familiariser avec le monde fabuleux de la sécurité informatique. Dans mon cas, je pense être déjà pas mal familiarisé avec ce domaine, dans la mesure où ça fait 15 ans que je m'y intéresse (et pas loin de 8 ans que je bosse dedans), mais j'aime bien l'idée de potasser sur des sujets sur lesquels je ne m'étais jamais trop attardé avec un objectif intéressant (la certification).

La formation

La formation en elle même est intéressante. On se retrouve avec un fichier .PDF de 350 pages accompagné d'un .rar contenant des vidéos reprenant les manipulations détaillées dans le pdf (enfin presque toutes). Le tout est watermarké avec nom/prénom/adresse, au cas où les documents fuiteraient sur internet. Vous pouvez retrouver le sommaire du cours sur le site Offensive-Security. Alors ne rêvez pas non plus, pas de techniques über eleet là dedans non plus, mais assez de contenu pour débuter dans le pentest réseau, exploiter des vulnérabilités avec metasploit ou utiliser des exploits de exploit-db (et les adapter quand ils en ont besoin), ou pivoter d'un réseau à l'autre via des tunnels et port forwards, en passant par l'exploitation de stack overflows (et juste ça) de base dans des conditions réelles (ASLR, DEP) de type appli avec au moins une dll sans ASLR sous Windows 7 avec DEP désactivé.

Lab

Jusque là, rien de trop différent d'une formation du SANS (en l'occurence, SANS 560) en mode e-learning. Sauf que là où une formation SANS se déroule en 5-6 jours (parfois avec un prof), la formation PWK se déroule généralement entièrement chez soi (enfin, là où on veut), et on a un accès VPN à un réseau comportant une cinquantaine de machines pouvant toutes être compromises, à la difficulté variable. Alors ici, pas de scénarios trop tordus comme dans un CTF : c'est une formation qui se veut pratique, basée sur des cas concrets et généralement inspirés de cas réels. En vrac, et en évitant de trop sploiler, voici quelques scénarios de machines pouvant être rootées sur ce lab :
- Du "remote root" (dans divers services)
- Des creds par défaut sur des applications diverses dont on peut tirer parti de diverses manières (ça va du ftp anonyme nous permettant de récupérer des infos intéressantes, à l'outil de ticketing qui tourne en admin et qui peut être détourné pour exécuter du code sur le système)
- Des applications web trouées (applications réelles, dont du wordpress)
- Des fausses pistes (injection SQL un peu tricky à exploiter sur une machine vulnérable à un "remote root" du système)
- La nécessité de fouiller les machines permettant d'obtenir des pistes (passwords.txt, analyse de logs http à la recherche de postes clients à compromettre, ...)
- Etc.

J'insiste sur le fait que toutes les machines sont rootables. Si on bloque, c'est qu'il nous manque une information, et qu'on a pas fait suffisamment de "reconnaissance" ("Try Harder").

Le réseau accessible via le VPN est un réseau à plusieurs niveaux. Sur le site d'offsec on retrouve un schéma réseau qui ressemble à celui auquel on a accès :
http://www.offensive-security.com/wp-content/uploads/2012/01/offsec-playground-thumb-21.jpg

- Le "starting network" qui est le réseau "public" accessible directement depuis le VPN;
- Le "starfleet network" qui correspond à un réseau "dev", accessible depuis une poignée de machines du réseau "public";
- Le "middle earth network" correspondant au réseau "IT", accessible depuis une poignée de machines du réseau "public";
- Le "grey network" correspondant au réseau "admin", accessible uniquement en passant par certaines machines du réseau "IT"

Le but de tout ça étant de se familiariser avec la notion de "rebond", car même si lors de pentests internes, on se retrouve trèèèèès souvent avec des réseaux "à plat" ou avec des erreurs de configuration qui permettent du "any to any", il est intéressant de pouvoir s'entrainer pour les quelques cas où ça ne sera pas le cas.

On dispose d'un temps allant de 1 à 3 mois pour se balader sur le réseau (le bundle 3 mois + passage de certification revient à environ 850 euros, ce qui n'est pas excessif, à comparer à 4000 euros pour une formation du SANS, surtout pour une certification qui commence doucement à être reconnue).

On doit documenter la méthode de compromission des machines dans un rapport, en essayant de fournir le plus de détails possibles (screenshots, copies de term, exploits, etc). A titre personnel, je me suis organisé en prenant des notes et des screenshots à chaque étape. Je me retrouve à la fin avec un rapport "de lab" d'une centaine de pages.

Exam / challenge

Vient ensuite l'épreuve ultime: passer l'exam OSCP. Il est un peu spécial, et généralement ça impressionne les gens comme la "piscine epitech", dans le sens où il est annoncé comme un examen de 2x24 heures consécutives. A noter que le staff d'offensive security y fait référence comme le "challenge OSCP".

- 24 heures d'examen à proprement parler où on accède à un réseau comprenant 5 serveurs rapportant entre 10 et 25 points (10, 2x20 et 2x25), totalisant 100 points (70 sont requis pour obtenir la certification). Seule une partie des points est obtenue en cas de compromission partielle (on a tous les points si on lit un fichier accessible au root/admin, sinon un autre fichier, accessible avec un compte non-privilégié rapporte qu'une partie des points en gros)
- 24 heures pour rédiger un rapport de pentest, en anglais, relatif à ces 5 machines.

Si on se retrouve avec un peu moins de 70 points, le rapport des 3 mois de "lab" sera évalué par le staff d'offensive-security, et en fonction de sa qualité, ils accorderont (ou pas) les quelques points manquants.

Il existe un certain nombre de restrictions durant le "challenge" :
- l'utilisation de Metasploit est fortement réglementée. Concrètement il est possible de l'utiliser pour compromettre UNE machine, parmi TROIS sur lesquelles c'est permis (si ensuite il n'existe qu'un exploit Metasploit pour compromettre une machine, c'est que c'est ici qu'il sera le plus judicieux de l'utiliser). Cela est valable aussi bien pour les exploits en remote, que pour les élévations de privilèges locales au travers de Meterpreter.
- l'utilisation de Meterpreter est autorisée en tant que payload/outil de prise de contrôle à distance, mais pas les fonctions telles que "getsystem".
- les scanners de vulnérabilités un peu bourrins à la Nessus/OpenVAS, NeXpose, w3af, ... ainsi que les outils un peu trop automatisés (genre sqlmap) ne sont pas non plus autorisés. En revanche, il est parfaitement possible d'utiliser nmap et tous ses plugins, ainsi que burp.

Le pool de machines choisies est assez hétérogène, et il y a même une machine disposant d'un logiciel pour lequel il existe une vulnérabilité publique (un stack overflow basique exploitable à distance) nécessitant le développement d'un exploit en partant d'un poc provoquant un crash (la génération du shellcode ainsi que la recherche d'un eip pointant sur ce dernier étant donc à la charge du challenger).

Evidemment, tout doit être documenté dans un rapport "d'exam" à remettre au staff d'offsec par e-mail, avec des screenshots prouvant la compromission des machines (en gros un id/ifconfig/cat flag.txt ou son équivalent Windows).

Ensuite on reçoit un mail au bout de quelques jours, avec le verdict. On ne connait pas le nombre de points qu'on a obtenu, on sait juste si on passe ou pas. J'ai envoyé mon rapport Lundi dans la journée, mardi à 15h j'avais une réponse.

Quoi étudier en attendant ?

J'anticipe, au niveau de la littérature recommandée avant de s'engager là dedans :
- Le support de cours PWK fourni par Offensive-Security
De plus, la connaissance préalable d'au moins un langage de programmation est fortement recommandée, ne serait-ce que pour être capable de comprendre comment modifier un exploit qui ne fonctionne pas (avec un bonus pour le C dans le cas d'exploits de 1865 qui ne compilent plus sur un gcc récent).

Concernant l'investissement personnel...il faut être prêt à sacrifier quelques soirées, mais pas toutes. Cela dit, passer une dizaine d'heures par semaine sur cette formation n'est pas insurmontable. Tout dépend de là où on part, et de l'objectif que l'on se fixe. Pour l'exam, 24 heures c'est largement suffisant, n'imaginez pas qu'il faille préparer un stock de redbull. Il est faisable en beaucoup moins.

Conclusion

Globalement, si d'un point de vue technique je n'ai pas appris grand chose, ça m'a au moins motivé à persévérer (le fameux "try harder"), dans la mesure où chaque machine est pwnable. Si on y arrive pas, c'est qu'il nous manque une info pour continuer. Ca force donc à élargir le champ de recherche, ce qui sera forcément bénéfique dans le cadre de véritables pentests.