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.