Exporter les trousseaux

23

afin de migrer vers un Ubutun, je souhaite exporter tout mon mot de passe, par exemple vers un fichier CSV.

Dans Keychain Access, j'ai trouvé le menu d'exportation, mais il est toujours désactivé, même lorsque l'accès est déverrouillé.

Que devrais-je faire?

Maïeul
la source
Voir aussi cette question / réponse: apple.stackexchange.com/a/185980/129823
Marcel Waldvogel

Réponses:

18

C'est à peu près comment je l' ai fait il y a plusieurs années, c'est la mise à jour du script pour Yosemite 10.11.5 - mais je ne l'ai pas testée.

  1. Un script qui enregistre chaque élément du trousseau en texte:

    security dump-keychain -d login.keychain > keychain.txt
    
  2. Un deuxième élément AppleScript qui clique sur le bouton "Autoriser" que le 1er script déclenche lors de la lecture de l'élément hors du KeyChain.

    [Edit: July 2016] Cela a été mis à jour vers la note 10.11.5 car certains ont signalé avoir verrouillé leur Mac avec le retard de 0,2, j'ai limité le script pour ne traiter que 200 résultats à la fois, donc si vous avez 1050 éléments de trousseau , vous devrez exécuter ce script 6 fois dans le ScriptEditor, vous devrez également autoriser le ScriptEditor à être activé dans la section Accessibilité dans les préférences de sécurité dans:

    tell application "System Events"
        set maxAttemptsToClick to 200
        repeat while exists (processes where name is "SecurityAgent")
            if maxAttemptsToClick = 0 then exit repeat
            set maxAttemptsToClick to maxAttemptsToClick - 1
            tell process "SecurityAgent"
                try
                    click button 2 of window 1
                on error
                    keystroke " "
            end try
        end tell
        delay 0.2
      end repeat
    end tell
    

Ensuite, la mise à jour du lien / yosemite ci-dessus a également une étape de conversion rubis du fichier texte en CSV, bonne chance!

ShreevatsaR souligne dans les commentaires que cette conversion rubis ne couvre que les "mots de passe Internet" et non les "mots de passe d'application". Cela est dû au fait que le script a pour but d'exporter les "mots de passe Internet" dans l'application 1Password.

Et voici une question de débordement de pile et une réponse dans le même sens

Le System.keychain est ici:

security dump-keychain -d /Library/Keychains/System.keychain > systemkeychain.txt

Pour permettre à AppleScript d'interagir avec la boîte de dialogue Préférences Système -> Préférences Sécurité et Confidentialité -> onglet Confidentialité, l'option d'accessibilité doit avoir "Script Editor.app" activé Préférences système -> Préférences de sécurité et de confidentialité -> Onglet Confidentialité, option d'accessibilité mise en évidence

MichaelStoner
la source
Merci beaucoup! Ça marche bien. Je ne sais tout simplement pas pourquoi je ne peux pas exporter mon System.keychain. Mais la plupart des porte-clés se trouvent également sur login.keychain.
Maïeul
Voir la mise à jour pour le chemin d'accès de cet élément de trousseau, mais il peut demander un nom d'utilisateur et un mot de passe pour chaque élément, ce qui peut être le script Autoriser pouvant être modifié pour fournir.
MichaelStoner
Pense. Je n'ai aucune compétence en AppleScript. J'ai juste quelques mots de passe dans ce trousseau, donc je vais taper mon mot de passe principal plusieurs fois.
Maïeul
Si vous n'obtenez aucune sortie, essayez d'exécuter la commande dans le même répertoire que le trousseau.
Rok Strniša
6
L'AppleScript ne fonctionnait pas pour moi sur OS X 10.10.3 Yosemite, prétendant que "Les événements système ont une erreur: impossible d'obtenir le groupe 1 de la fenêtre 1 du processus \" SecurityAgent \ ". Index non valide".
Marcel Waldvogel
8

J'ai écrit un script python qui convertit le vidage du trousseau en un fichier Excel et j'ai pensé le partager avec vous. J'ai choisi Excel plutôt que CSV ou TSV parce que beaucoup de gens l'ont installé et cela fonctionne simplement en double-cliquant sur le fichier. Vous pouvez bien sûr modifier le script pour imprimer tout autre format. J'ai fait cela sur OS X 10.11 El Capitan, mais je devrais aussi travailler sur des OS plus anciens.

  1. Étant donné que je n'aime pas stocker mes mots de passe en clair sur mon disque dur, j'ai créé un conteneur chiffré à l'aide de l'application Utilitaire de disque. Ouvrez simplement l'Utilitaire de disque (appuyez sur cmd+ Space, tapez "disque"). Dans l'application, appuyez sur cmd+ Npour une nouvelle image, changez le nom en SEC, changez le cryptage en AES 256 bits et enregistrez-le sous SEC dans un répertoire de votre choix. Montez ensuite le volume en double-cliquant sur le fichier (ou en utilisant l'Utilitaire de disque).

  2. Créez un nouveau fichier nommé keychain.py dans le conteneur sécurisé et collez le code ci-dessous.

  3. Ouvrez maintenant Terminal.app et changez de répertoire pour le volume chiffré monté: cd /Volumes/SEC

  4. Nous avons besoin du gestionnaire de paquets python pour installer le module Excel (vous serez invité à entrer votre mot de passe): sudo easy_install pip

  5. Nous devons installer le module Python Excel: sudo pip install xlwt

  6. Exportez maintenant les mots de passe en utilisant l'une des autres réponses à cette question. Je viens de le faire security dump-keychain -d > keychain.txtet le spam a cliqué sur le bouton Autoriser tout en maintenant la souris avec mon autre main.

  7. La dernière étape consiste à convertir le fichier txt en une feuille Excel lisible à l'aide du script python: python keychain.py keychain.txt keychain.xls

.

#!/usr/bin/env python

import sys
import os
import re
import xlwt

# Regex to match both generic and internet passwords from a keychain dump
regex = re.compile(
    r"""
    keychain:\s"(?P<kchn>[^"]+)"\n                  # absolute path and file of keychain
    version:\s(\d\d\d)\n                            # version
    class:\s"(?P<clss>(genp|inet))"\n               # generic password or internet password
    attributes:\n
    (\s*?0x00000007\s<blob>=(?P<name>[^\n]+)\n)?    # name
    (\s*?0x00000008\s<blob>=(?P<hex8>[^\n]+)\n)?    # ? only used at certificates
    (\s*?"acct"<blob>=(?P<acct>[^\n]+)\n)?          # account
    (\s*?"atyp"<blob>=(?P<atyp>[^\n]+)\n)?          # account type ("form"), sometimes int
    (\s*?"cdat"<timedate>=[^"]*(?P<cdat>[^\n]+)\n)? # datetime created
    (\s*?"crtr"<uint32>=(?P<crtr>[^\n]+)\n)?        # vendor key with four chars like "aapl"
    (\s*?"cusi"<sint32>=(?P<cusi>[^\n]+)\n)?        # ? always null
    (\s*?"desc"<blob>=(?P<desc>[^\n]+)\n)?          # description
    (\s*?"gena"<blob>=(?P<gena>[^\n]+)\n)?          # ? always null except one rare cases
    (\s*?"icmt"<blob>=(?P<icmt>[^\n]+)\n)?          # ? some sort of description
    (\s*?"invi"<sint32>=(?P<invi>[^\n]+)\n)?        # ? always null
    (\s*?"mdat"<timedate>=[^"]*(?P<mdat>[^\n]+)\n)? # datetime last modified
    (\s*?"nega"<sint32>=(?P<nega>[^\n]+)\n)?        # ? always null
    (\s*?"path"<blob>=(?P<path>[^\n]+)\n)?          # path
    (\s*?"port"<uint32>=(?P<port>[^\n]+)\n)?        # port number in hex
    (\s*?"prot"<blob>=(?P<prot>[^\n]+)\n)?          # ? always null
    (\s*?"ptcl"<uint32>=(?P<ptcl>[^\n]+)\n)?        # protocol but is blob ("http", "https")
    (\s*?"scrp"<sint32>=(?P<scrp>[^\n]+)\n)?        # ? always null except one rare cases
    (\s*?"sdmn"<blob>=(?P<sdmn>[^\n]+)\n)?          # used for htaccess AuthName
    (\s*?"srvr"<blob>=(?P<srvr>[^\n]+)\n)?          # server
    (\s*?"svce"<blob>=(?P<svce>[^\n]+)\n)?          # ? some sort of description
    (\s*?"type"<uint32>=(?P<type>[^\n]+)\n)?        # some blob: "iprf", "note"
    data:\n
    "(?P<data>[^"]*)"                               # password
    """, re.MULTILINE | re.VERBOSE)

# Dictionary used by the clean function (Apple is not always right about the
# types of the field)
field2type = { 
    "name": "blob",
    "hex8": "blob",
    "acct": "blob",
    "atyp": "simple",
    "cdat": "timedate",
    "crtr": "uint32",
    "cusi": "sint32",
    "desc": "blob", 
    "gena": "blob",
    "icmt": "blob",
    "invi": "sint32",
    "mdat": "timedate",
    "nega": "sint32",
    "path": "blob",
    "port": "uint32",
    "prot": "blob",
    "ptcl": "blob",
    "scrp": "sint32",
    "sdmn": "blob",
    "srvr": "blob", 
    "svce": "blob",
    "type": "blob",
    "data": "simple",
    "kchn": "simple",
    "clss": "simple"
}

def clean(field, match):
    value = match.group(field)
    if not value or value == "<NULL>":
        # print null values as empty strings
        return ""
    if field2type[field] == "blob":
        # strip " at beginning and end
        return value[1:-1]
    elif field2type[field] == "timedate":
        # convert timedate to the iso standard
        value = value[1:-1]
        return value[0:4] + "-" + value[4:6] + "-" + value[6:8] + "T" + \
            value[8:10] + ":" + value[10:12] + ":" + value[12:14] + "Z" + value[16:19]
    elif field2type[field] == "uint32":
        # if it really is a hex int, convert it to decimal
        value = value.strip()
        if re.match("^0x[0-9a-fA-F]+$", value):
            return int(value, 16)
        else:
            return value
    else:
        # do nothing, just print it as it is
        return value

def print_help():
    print "Usage: python keychain.py INPUTFILE OUTPUTFILE"
    print "Example: python keychain.py keychain.txt keychain.xls"
    print "  where keychain.txt was created by `security dump-keychain -d > keychain.txt`"
    print "  When dumping the keychain, you have to click 'Allow' for each entry in your"
    print "  keychain. Position you mouse over the button and go clicking like crazy."




print "Keychain 0.1: convert an Apple Keychain dump to an Excel (XLS) spreadsheet."

# Check for correct parameters
if len(sys.argv) != 3:
    print_help()
    sys.exit(1)
elif len(sys.argv) == 3:
    if not os.path.isfile(sys.argv[1]):
        print "Error: no such file '{0}'".format(sys.argv[1])
        print_help()
        exit(1)

# Read keychain file
buffer = open(sys.argv[1], "r").read()
print "Read {0} bytes from '{1}'".format(len(buffer), sys.argv[1])

# Create excel workbook and header
wb = xlwt.Workbook()
ws = wb.add_sheet("Keychain")
ws.write(0, 0, "Name")
ws.write(0, 1, "Account")
ws.write(0, 2, "Password")
ws.write(0, 3, "Protocol")
ws.write(0, 4, "Server")
ws.write(0, 5, "Port")
ws.write(0, 6, "Path")
ws.write(0, 7, "Description")
ws.write(0, 8, "Created")
ws.write(0, 9, "Modified")
ws.write(0, 10, "AuthName")
ws.write(0, 11, "AccountType")
ws.write(0, 12, "Type")
ws.write(0, 13, "Keychain")

# Find passwords and add them to the excel spreadsheet
i = 1
for match in regex.finditer(buffer):
    ws.write(i, 0, clean("name", match))
    ws.write(i, 1, clean("acct", match))
    ws.write(i, 2, clean("data", match))
    ws.write(i, 3, clean("ptcl", match))
    ws.write(i, 4, clean("srvr", match))
    ws.write(i, 5, clean("port", match))
    ws.write(i, 6, clean("path", match))
    ws.write(i, 7, clean("desc", match))
    ws.write(i, 8, clean("cdat", match))
    ws.write(i, 9, clean("mdat", match))
    ws.write(i, 10, clean("sdmn", match))
    ws.write(i, 11, clean("atyp", match))
    ws.write(i, 12, clean("clss", match))
    ws.write(i, 13, clean("kchn", match))
    i += 1
wb.save(sys.argv[2])

print "Saved {0} passwords to '{1}'".format(i-1, sys.argv[2])
valyron
la source
Wow, cela semble vraiment approfondi. Je vais
essayer
Trouvé cette excellente ventilation des notes sécurisées: stackoverflow.com/questions/22370552/…
hepcat72
Maintenant, j'ai juste besoin de comprendre comment créer une exportation d'un rtfd qui inclut une image intégrée. J'ai quelques notes avec des mots de passe en majuscules d'écran.
hepcat72
Ajout génial à cela, plus un et thx
ehime
5

Depuis OSX 10.10.3, il existe une nouvelle façon d'accepter automatiquement (j'ai rencontré des problèmes lors d'un chemin de mise à niveau)

Fonctions Bash (ajoutées à l'un .profileou aux .bash_rcfichiers)

## At the terminal when you start getting the prompts, type `Accepts` and press enter
function Accepts () {
osascript <<EOF
  tell application "System Events"
    repeat while exists (processes where name is "SecurityAgent")
      tell process "SecurityAgent" to click button "Allow" of window 1
      delay 0.2
    end repeat
  end tell
EOF
}

## At the terminal when you start getting the prompts, type `Accepts YourUsername YourPassword` and press enter
function AcceptWithCreds () {
username="$1"
password="$2"

[ -z "${password}" ] && return 1

osascript 2>/dev/null <<EOF
    set appName to "${username}"
    set appPass to "${password}"
    tell application "System Events"
        repeat while exists (processes where name is "SecurityAgent")
            tell process "SecurityAgent"
                if exists (text field 1 of window 1) then
                    set value of text field 1 of window 1 to appName
                    set value of text field 2 of window 1 to appPass
                end if
            end tell
      tell process "SecurityAgent" to click button "Allow" of window 1
            delay 0.2
        end repeat
    end tell
EOF
echo 'Finished...'
}

Et utilisez ce script pour vider votre trousseau de clés ( sudo ./dump.sh)

#!/bin/bash
# Run above script in another window

security dump-keychain -d login.keychain > keychain-login.txt
security dump-keychain -d /Library/Keychains/System.keychain > keychain-system.txt
ehime
la source
C'est bien! Quand je l'ai exécuté, je suis arrivé execution error: System Events got an error: osascript is not allowed assistive access.à la ligne de commande. Le moyen le plus simple que j'ai trouvé pour résoudre ce problème était de coller le code AppleScript dans l'application Script Editor et de l'exécuter à partir de là.
Evan
AppleScripts ne fonctionne pas sur 10.10.5
oarfish
1
Cela a fonctionné pour moi sous OS X El Capitan 10.11.6. Assurez-vous de ne pas copier le dernier caractère (backtick) du script. L' osascript is not allowed assistive accesserreur peut être évitée en autorisant votre application Terminal dans Préférences Système => Sécurité et confidentialité => Accessibilité.
neon1
Cela ne fonctionne pas sur Mojave. AcceptWithCreds se termine simplement, sans rien faire.
oarfish
4

@ La réponse de MichaelStoner est un bon début, mais elle échoue sur OS X 10.10.3 Yosemite, avec son rapport de code AppleScript System Events got an error: Can’t get group 1 of window 1 of process "SecurityAgent". Invalid index.

Après avoir joué un peu, la solution suivante a fonctionné pour moi:

tell application "System Events"
    repeat while exists (processes where name is "SecurityAgent")
        tell process "SecurityAgent"
            keystroke " "
        end tell
        delay 1
    end repeat
end tell

Vous devrez cliquer sur la boîte de dialogue "Autoriser" après avoir démarré cela. Ce code prendra un certain temps, mais je déconseille de baisser le délai ("delay 0.2" m'a obligé à éteindre mon Mac). Prenez juste une tasse de café.

Marcel Waldvogel
la source
1
L'espace -> frappe "" ne fonctionne que si vous avez Préférences Système -> Préférences Clavier -> onglet Raccourcis, option du bas "Accès complet au clavier" et ensuite sélectionné "Tous les contrôles"
MichaelStoner
3

La fonction d'exportation de trousseau est destinée aux articles, pas à l'ensemble du trousseau. Il ne vous permettra pas non plus d'exporter la plupart des articles - c'est à ce moment que vous verrez la fonction d'exportation grisée.

Pour copier le trousseau d'un Mac vers un autre, utilisez l' application Migration Assistant .

Ou faites-le manuellement en copiant le fichier de porte-clés situé dans le dossier ~ / Library / Keychains /.

Ouvrez l' application Keychain Access sur un nouvel ordinateur et choisissez File> Add Keychain….

Ruskes
la source
1
merci, mais j'ai dit "à un autre OS" ... je veux quitter OS X ...
Maïeul
Merci pour l'édition et la clarté. L'autre os était trompeur. Vous le voulez donc sous forme de fichier texte (CSV)?
Ruskes
1
oui, un csv tout va bien ...
Maïeul
1

Le securitybinaire récupérera les éléments du trousseau à partir de la ligne de commande, vous pouvez donc l' écrire en python pour vider le contenu systématiquement. Cela dépend vraiment du format que vous souhaitez utiliser et de la façon dont vous les utiliserez à l'avenir.

Le copier / coller est également une option décente si vous savez combien de temps vous souhaitez mettre en œuvre une nouvelle solution et si vous devez apprendre / rechercher un programme ou une bibliothèque existant qui videra le contenu dans le format choisi.

Le menu des éléments d'exportation est destiné à l'exportation de clés publiques et / ou privées pour lesquelles il existe des formats de fichiers standard pour coder et protéger les données, le cas échéant, lorsqu'elles sont stockées dans le système de fichiers pour échange et transport. Cette fonction est brièvement décrite dans l'aide de Keychain Assistant.

bmike
la source
Il n'y a pas d'autre moyen que de l'écrire? Ok, je vais regarder ce binaire, mais ... un besoin tellement fondamental, juste pour avoir quelque chose comme un CSV ...
Maïeul
1
Si vous pouvez modifier votre message pour spécifier quel nouveau système d'exploitation et que cvs est un format que vous aimez, j'aurais peut-être d'autres idées pour vous. Comme demandé, c'est très vague ...
bmike
0

Il existe un outil appelé KeychaindumpPro https://hackforums.net/showthread.php?tid=5803486 .

Pour extraire la phrase secrète / compte / paiement / note sécurisée / PublicKey / PrivateKey / SymmetricKey / certificat et ainsi de suite du trousseau en silence.

inconnue
la source
2
Vous ne devez pas insérer de liens qui obligent un utilisateur à créer un compte pour afficher le contenu. Il serait préférable que vous reformuliez le contenu du lien.
David Anderson