Est-ce que mon mot de passe a été piraté?

Est-ce que mon mot de passe a été piraté ? BitWarden Report

Salut à tous, je continue ma série sur les mots de passe aujourd’hui et plus particulièrement la réponse à la question « Est-ce que mon mot de passe a été piraté ? ». Vous connaissez have i been pwned? ? Ce service compile les données issues des principales fuites d’informations de ces dernières années et vous permet de savoir, en saisissants votre adresse mail, si cette dernière a fait partie des fuites… et se savoir ce qui a fuité surtout ! Ce qui vous permet de savoir si le mot de passe associé à ces fuites a été compromis.

Et bien le site à récemment étendu son offre avec le service have my password have been pwned? Pour savoir si votre mot de passe a été piraté. Et qui vous propose donc la même chose que havebeenpwned mais pour les mot de passe.

« Bein ouais, mais si je donne mon mot de passe à une site pour qu’ils le vérifient, ils vont connaitre mon mot de passe du coup ?

PS: t’es con ou quoi ? »
— un internaute pas trop con.

Et c’est là que c’est beau, l’auteur du service détaille dans ce post (super lecture que je recommande vivement) comment il a fait.

En fait, votre mot de passe n’est jamais envoyé au site. Votre navigateur va calculer le SHA1 de votre mot de passe localement (en JavaScript) et n’envoyer que les 5 premiers caractères de ce hash au service. Le service va alors comparer ces 5 premiers caractères avec sa base de 320 millions de hash de mots de passe référencé comme compromis et vous renvoyer tous les hash en sa possession qui commencent par les 5 premiers caractères en question. Et c’est alors à votre navigateur localement de comparer la liste des hash compromis avec le SHA1 complet. Si un des hash correspond c’est que le mot de passe que vous avez saisi est pourri.

Ainsi ni votre mot de passe, ni son hash, ne sont envoyé sur le réseau et les hash renvoyés par le serveur sont des hash qui « pourrait » matcher mais sans la moindre garantie. Et dans le cas où votre mot de passe est compromis : vous êtes sensé le modifier immédiatement. Donc Ce n’est pas grave si un des hash renvoyés correspond : le temps que l’attaquant, qui l’aurait intercepté, le casse (c’est le SHA1 qui est renvoyé) et le test, le vôtre sera déjà mis à jour.

Ce n’est pas beau la paranoïa ?

Bonus : Accès API.

Et là où ça devient très, très, sympa c’est que ce service est accessible via une API. Les développeurs en herbes peuvent donc intégrer ce service lors de l’inscription des utilisateurs sur votre site, par exemple, pour vérifier que le mot de passe de vos utilisateurs n’est pas « à risque ».

D’ailleurs le gestionnaire de mot de passe BitWarden (Premium) le propose en rapport sur votre base de mots de passe comme autre exemple.

API – Have My Password have been Pwnd, en Powershell

Allez comme on ne fait confiance à personne ici, on va le faire nous même histoire d’être certain qu’on n’envoie rien de compromettant au site. Et pour changer je vous le propose en PowerShell.

Function Get-StringHash([String] $String, $HashName="MD5"){
<#
.SYNOPSIS 
    A simple script to hash a string using your chosen cryptography algorithm   
.EXAMPLES
    Get-StringHash "My String to  hash" "MD5"
    Get-StringHash "My String to hash" "RIPEMD160"
    Get-StringHash  "My String to hash" "SHA1"
    Get-StringHash "My String to hash" "SHA256" 
.SRC
    https://gallery.technet.microsoft.com/scriptcenter/Get-StringHash-aa843f71
    http:// jongurgul.com/blog/get-stringhash-get-filehash/ 
#>
    $StringBuilder = New-Object System.Text.StringBuilder 
    [System.Security.Cryptography.HashAlgorithm]::Create($HashName).ComputeHash([System.Text.Encoding]::UTF8.GetBytes($String))|%{
    [Void]$StringBuilder.Append($_.ToString("x2"))
    } 
    $StringBuilder.ToString() 
}

Function Test-IsThisPasswordHaveBeenPwnd ([String] $Password) {
<#
.SYNOPSIS 
    A Quick Proof of concept in Powershell to use the "Pwned Passwords API" of haveibeenpwned.com and check for password compromise.
.EXAMPLES
    Test-IsThisPasswordHaveBeenPwnd "Password1234"
.SRC
    https://www.troyhunt.com/ive-just-launched-pwned-passwords-version-2/#cloudflareprivacyandkanonymity
    https://haveibeenpwned.com/API/v2#PwnedPasswords
#> 
    $hash = Get-StringHash "$Password" "SHA1"

    $hash_prefix = $hash.substring(0,5)
    $matching_list = Invoke-RestMethod -Uri "https://api.pwnedpasswords.com/range/$hash_prefix"
    $matching_tab = $matching_list.Split("`n")

    foreach ($line in $matching_tab) {
        $h_suffix, $counter = $line.split(":")
        if($hash.toUpper() -eq ($hash_prefix+$h_suffix).toUpper()){
            Write-Host  "This Password Have Been Powned at least $counter time!!! Please, Change It..."
            return $true;
        }
            
    }
    Write-Host  "You're Password Seems Fine" 
    return $false; 
}

$ret = Test-IsThisPasswordHaveBeenPwnd  (Read-Host -Prompt "Please enter the password you want to check")

Démo, est-ce que mon mot de passe a été piraté ?… en Powershell !

> .\Test-IsThisPasswordHaveBeenPwnd.ps1
Please enter the password you want to check : Passw0rd123456
This Password Have Been Powned at least 20 time!!! Please, Change It…

> .\Test-IsThisPasswordHaveBeenPwnd.ps1
Please enter the password you want to check : "Correct Horse Battery Staple"
You're Password Seems Fine

Et voilà, ça faisait un bail que je ne vous avais pas écrit un bout de PowerShell, hein ? Comme d’habitude j’espère que ça vous aura intéressé et que votre mot de passe n’était pas piraté… N’hésitez pas si vous avez des questions et je vous dis à bientôt pour d’autres G33keries !

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.