Keepass improve: Difference between revisions
Jump to navigation
Jump to search
No edit summary |
|||
(One intermediate revision by the same user not shown) | |||
Line 113: | Line 113: | ||
<pre> | <pre> | ||
// Version history: | // Version history: | ||
// 2013-05-26 Antonio DA SILVA PACHECO (ynotopec | // 2013-05-26 Antonio DA SILVA PACHECO (ynotopec at gmail.com) | ||
// Modification from static directory to dynamic | // Modification from static directory to dynamic | ||
// Defines added | // Defines added |
Latest revision as of 13:22, 31 January 2023
Ce document décrit la mise en place d'un gestionnaire de mots de passes crypté et sécurisé par contrôle d'accès.
Prérequis
Configuration d'Active Directory
- un compte "ServiceKeepass" de type utilisateur restreint
- un groupe <UserGroup> en lecture seule sur les mots de passes
- un groupe <ManagerGroup> de gestion des mots de passes
Attention!: le groupe <AdminGroup> qui va gérer les mots de passes ne doit pas contenir des personnes que l'on veut limiter en lecture seule (* optionnel: un groupe d'administration de l'outil Attention!: le groupe qui va administrer l'outil ne doit pas contenir de personnes non autorisés à modifier l'outil)
Autre
- un partage SMB au moins ouvert aux groupes qui vont accéder à l'outil
- KeePass 2 dernière version portable
- plugin KeeAutoExec.plgx pour ouvrir plusieurs bases simultanément
Plateforme de dévellopement
- un pc sécurisé (préco:crypté et hors réseau)
- KeePass 2.x déjà installé dans le pc sécurisé
- compilateur win32 dans le pc sécurisé (préco: Microsoft Visual CPP)
Actions sur la plateforme de dev
Variables à définir
- Pour chaque groupe définir le triplet:
- GroupName:AccessType:Password
- GroupName = Nom du groupe dans l'AD
- AccessType = "users" pour lecture seulement des mots de passes ou "managers" pour la gestion en écriture aussi
- Password = Mot de passe d'accès à l'outil
- Définir ServicePassword = le mot de passe du compte ServiceKeepass
Actions
- créer un répertoire keepass\bases
- créer un répertoire keepass\keys
- créer un répertoire keepass\start
- créer un répertoire keepass\appli\users
- copier les fichiers du "KeePass portable" dans le répertoire
- ajouter le plugin KeeAutoExec.plgx
- dupliquer keepass\appli\users vers keepass\appli\managers
- ou créer des liens physiques sauf pour le fichier de configuration KeePass.config.xml qui doit être dupliqué obligatoirement!
- Modifier la politique de sécurité dans le fichier keepass\appli\users\KeePass.config.xml:
<Policy> <Plugins>true</Plugins> <Export>false</Export> <ExportNoKey>false</ExportNoKey> <Import>false</Import> <Print>false</Print> <NewFile>false</NewFile> <SaveFile>false</SaveFile> <AutoType>true</AutoType> <AutoTypeWithoutContext>true</AutoTypeWithoutContext> <CopyToClipboard>true</CopyToClipboard> <CopyWholeEntries>false</CopyWholeEntries> <DragDrop>true</DragDrop> <UnhidePasswords>true</UnhidePasswords> <ChangeMasterKey>false</ChangeMasterKey> <ChangeMasterKeyNoKey>false</ChangeMasterKeyNoKey> <EditTriggers>true</EditTriggers> </Policy>
- Modifier le champs CheckForUpdate s'il existe dans les 2 fichiers KeePass.config.xml:
<Start> <CheckForUpdate>false</CheckForUpdate> <CheckForUpdateConfigured>true</CheckForUpdateConfigured> </Start>
Création des bases
- lancer KeePass
- pour chaque groupe:
- créer une nouvelle base nommée GroupName - créer une clé et la nommer comme cette base - entrer le mot de passe d'accès défini pour ce groupe - configurer le plugin KeeAutoExec.plgx pour intégrer d'autres bases
Création des lanceurs
- pour chaque base créée
- créer un fichier <GroupName>.cpp avec le source CPP fourni ci-joint - éditer - compiler
- déplacer les fichiers <GroupName>.exe dans keepass\start
Configuration des droits
- keepass\appli |autoriser ServiceKeepass en lecture et exécution et refuser le reste|autoriser le goupe administrateur de l'outil en modification
- keepass\bases |autoriser ServiceKeepass en modification et refuser le reste|autoriser le goupe administrateur de l'outil en modification
- keepass\keys |autoriser le goupe administrateur de l'outil en modification
- keepass\keys et sous répertoires |autoriser ServiceKeepass à traverser le répertoire et refuser le reste
- keepass\keys fichiers |autoriser ServiceKeepass à lire et refuser le reste
- keepass\start |autoriser le goupe administrateur en modification
- keepass\start et sous répertoire |autoriser le groupe utilisateurs en lecture et refuser le reste|autoriser les groupes managers keepass en lecture et refuser le reste
- Pour chaque fichier <GroupName>.exe |ajouter le groupe <GroupName> associé en exécution et refuser le reste
Finalisation
- Créer les raccourcis du ou des lanceurs associés au poste sur le bureau et dans le menu démarrer
Propositions/Options
- préco: ajouter le decryptage dans les sources et utiliser un mot de passe crypté
- préco: prévoir un mécanisme de redondance spaciale avec un pc portable en local et crypté
- préco: la modification des clés et mots de passes d'accès aux bases ne doit être possible que par deux personnes en même temps (de confiances et sans conflits d'intérêts!)
- préco: prévoir un backup régulier des bases
- préco: prévoir ajout des clés avec compte ServiceKeepass
Source CPP
// Version history: // 2013-05-26 Antonio DA SILVA PACHECO (ynotopec at gmail.com) // Modification from static directory to dynamic // Defines added // Change these parameters #define GroupName L"users" // User name or group name for this database #define AccessType L"managers" // L"managers" for manage the database or L"users" for read only #define ServicePassword L"*" // Show ESS_Supervision_Encadrement database. Do not archive with password! // Not necessary to change #define ServiceName L"ServiceKeepass" // default=L"ServiceKeepass" #define DOMAIN L"<domain>" // default=L"<domain>", L"." to use local account database only #define ROOT_DEPTH L".." // default=L".." // Keepass root directory relative to start directory #define APPLI L"appli\\" AccessType L"\\KeePass.exe" // default=L"appli\\" AccessType L"\\KeePass.exe" #define DB L"bases\\" GroupName L".kdbx" // default=L"bases\\" DB_NAME L".kdbx" #define KEY L"keys\\" GroupName L".key" // default=L"keys\\" DB_NAME L".key" #define COMMAND_LINE APPLI L" " DB L" -preselect:" KEY // default=APPLI L" " DB L" -preselect:" KEY #include <direct.h> #include <windows.h> #include <stdio.h> #include <ntsecapi.h> int main() { // Store root directory _wchdir(ROOT_DEPTH); wchar_t RootPath[_MAX_PATH]; _wgetcwd(RootPath, _MAX_PATH); // Launch application with another account STARTUPINFOW su_info; ZeroMemory(&su_info, sizeof(STARTUPINFOW)); su_info.cb = sizeof(STARTUPINFOW); PROCESS_INFORMATION pi; ZeroMemory(&pi, sizeof(PROCESS_INFORMATION)); CreateProcessWithLogonW(ServiceName, DOMAIN, ServicePassword, LOGON_WITH_PROFILE, NULL, COMMAND_LINE, 0, NULL, RootPath, &su_info, &pi); return 0; } //ref http://forums.codeguru.com/showthread.php?493062-c-createProcessWithLogonW
Exemple de fichiers *.config.xml
Users
<?xml version="1.0" encoding="utf-8"?> <Configuration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <Meta> <PreferUserConfiguration>false</PreferUserConfiguration> <OmitItemsWithDefaultValues>true</OmitItemsWithDefaultValues> </Meta> <Application> <LastUsedFile> <Path></Path> <CredProtMode>Obf</CredProtMode> <CredSaveMode>NoSave</CredSaveMode> </LastUsedFile> <MostRecentlyUsed> <MaxItemCount>12</MaxItemCount> <Items> <ConnectionInfo> <Path></Path> <CredProtMode>Obf</CredProtMode> <CredSaveMode>NoSave</CredSaveMode> </ConnectionInfo> </Items> </MostRecentlyUsed> <WorkingDirectories /> <Start> <CheckForUpdate>false</CheckForUpdate> <CheckForUpdateConfigured>true</CheckForUpdateConfigured> </Start> <FileOpening /> <FileClosing /> <TriggerSystem> <Triggers /> </TriggerSystem> </Application> <Logging /> <MainWindow> <X>259</X> <Y>45</Y> <Width>662</Width> <Height>513</Height> <Maximized>true</Maximized> <SplitterHorizontalFrac>0.8303835</SplitterHorizontalFrac> <SplitterVerticalFrac>0.250366032</SplitterVerticalFrac> <Layout>Default</Layout> <MinimizeAfterLocking>false</MinimizeAfterLocking> <ToolBar /> <EntryView /> <TanView /> <EntryListColumnCollection> <Column> <Type>Title</Type> <Width>348</Width> </Column> <Column> <Type>UserName</Type> <Width>237</Width> </Column> <Column> <Type>Password</Type> <Width>120</Width> <HideWithAsterisks>true</HideWithAsterisks> </Column> <Column> <Type>Url</Type> <Width>90</Width> </Column> <Column> <Type>Notes</Type> <Width>90</Width> </Column> </EntryListColumnCollection> <EntryListColumnDisplayOrder>0 1 2 3 4</EntryListColumnDisplayOrder> <ListSorting> <Order>Ascending</Order> </ListSorting> </MainWindow> <UI> <TrayIcon /> <Hiding /> <StandardFont> <Family>Microsoft Sans Serif</Family> <Size>8.25</Size> <GraphicsUnit>Point</GraphicsUnit> <Style>Regular</Style> <OverrideUIDefault>false</OverrideUIDefault> </StandardFont> <PasswordFont> <Family>Courier New</Family> <Size>8.25</Size> <GraphicsUnit>Point</GraphicsUnit> <Style>Regular</Style> <OverrideUIDefault>false</OverrideUIDefault> </PasswordFont> <BannerStyle>WinVistaBlack</BannerStyle> <DataEditorFont> <Family>Microsoft Sans Serif</Family> <Size>8.25</Size> <GraphicsUnit>Point</GraphicsUnit> <Style>Regular</Style> <OverrideUIDefault>false</OverrideUIDefault> </DataEditorFont> <UIFlags>0</UIFlags> <KeyCreationFlags>0</KeyCreationFlags> <KeyPromptFlags>0</KeyPromptFlags> </UI> <Security> <WorkspaceLocking> <LockAfterTime>0</LockAfterTime> <LockAfterGlobalTime>0</LockAfterGlobalTime> </WorkspaceLocking> <Policy> <Export>false</Export> <ExportNoKey>false</ExportNoKey> <Import>false</Import> <Print>false</Print> <NewFile>false</NewFile> <SaveFile>false</SaveFile> <CopyWholeEntries>false</CopyWholeEntries> <ChangeMasterKey>false</ChangeMasterKey> <ChangeMasterKeyNoKey>false</ChangeMasterKeyNoKey> </Policy> <MasterPassword> <MinimumLength>0</MinimumLength> <MinimumQuality>0</MinimumQuality> </MasterPassword> </Security> <Native /> <PasswordGenerator> <AutoGeneratedPasswordsProfile> <GeneratorType>CharSet</GeneratorType> <Length>20</Length> <CharSetRanges>ULD_______</CharSetRanges> </AutoGeneratedPasswordsProfile> <LastUsedProfile> <GeneratorType>CharSet</GeneratorType> <Length>20</Length> <CharSetRanges>ULD_______</CharSetRanges> </LastUsedProfile> <UserProfiles /> </PasswordGenerator> <Defaults> <OptionsTabIndex>1</OptionsTabIndex> <SearchParameters> <ComparisonMode>InvariantCultureIgnoreCase</ComparisonMode> </SearchParameters> <KeySources> <Association> <DatabasePath></DatabasePath> <KeyFilePath></KeyFilePath> </Association> </KeySources> </Defaults> <Integration> <HotKeyGlobalAutoType>393281</HotKeyGlobalAutoType> <HotKeySelectedAutoType>0</HotKeySelectedAutoType> <HotKeyShowWindow>393291</HotKeyShowWindow> <HotKeyEntryMenu>1</HotKeyEntryMenu> <UrlSchemeOverrides> <BuiltInOverridesEnabled>1</BuiltInOverridesEnabled> <CustomOverrides /> </UrlSchemeOverrides> <ProxyType>System</ProxyType> </Integration> <Custom /> </Configuration>
Manager
<?xml version="1.0" encoding="utf-8"?> <Configuration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <Meta> <PreferUserConfiguration>false</PreferUserConfiguration> <OmitItemsWithDefaultValues>true</OmitItemsWithDefaultValues> </Meta> <Application> <LastUsedFile> <Path>..\..\bases\ESS.kdbx</Path> <CredProtMode>Obf</CredProtMode> <CredSaveMode>NoSave</CredSaveMode> </LastUsedFile> <MostRecentlyUsed> <MaxItemCount>12</MaxItemCount> <Items> <ConnectionInfo> <Path></Path> <CredProtMode>Obf</CredProtMode> <CredSaveMode>NoSave</CredSaveMode> </ConnectionInfo> </Items> </MostRecentlyUsed> <WorkingDirectories /> <Start> <CheckForUpdate>false</CheckForUpdate> <CheckForUpdateConfigured>true</CheckForUpdateConfigured> </Start> <FileOpening /> <FileClosing /> <TriggerSystem> <Triggers /> </TriggerSystem> </Application> <Logging /> <MainWindow> <X>259</X> <Y>45</Y> <Width>662</Width> <Height>513</Height> <Maximized>true</Maximized> <SplitterHorizontalFrac>0.8303835</SplitterHorizontalFrac> <SplitterVerticalFrac>0.250366032</SplitterVerticalFrac> <Layout>Default</Layout> <MinimizeAfterLocking>false</MinimizeAfterLocking> <ToolBar /> <EntryView /> <TanView /> <EntryListColumnCollection> <Column> <Type>Title</Type> <Width>348</Width> </Column> <Column> <Type>UserName</Type> <Width>237</Width> </Column> <Column> <Type>Password</Type> <Width>120</Width> <HideWithAsterisks>true</HideWithAsterisks> </Column> <Column> <Type>Url</Type> <Width>90</Width> </Column> <Column> <Type>Notes</Type> <Width>90</Width> </Column> </EntryListColumnCollection> <EntryListColumnDisplayOrder>0 1 2 3 4</EntryListColumnDisplayOrder> <ListSorting> <Order>Ascending</Order> </ListSorting> </MainWindow> <UI> <TrayIcon /> <Hiding /> <StandardFont> <Family>Microsoft Sans Serif</Family> <Size>8.25</Size> <GraphicsUnit>Point</GraphicsUnit> <Style>Regular</Style> <OverrideUIDefault>false</OverrideUIDefault> </StandardFont> <PasswordFont> <Family>Courier New</Family> <Size>8.25</Size> <GraphicsUnit>Point</GraphicsUnit> <Style>Regular</Style> <OverrideUIDefault>false</OverrideUIDefault> </PasswordFont> <BannerStyle>WinVistaBlack</BannerStyle> <DataEditorFont> <Family>Microsoft Sans Serif</Family> <Size>8.25</Size> <GraphicsUnit>Point</GraphicsUnit> <Style>Regular</Style> <OverrideUIDefault>false</OverrideUIDefault> </DataEditorFont> <UIFlags>0</UIFlags> <KeyCreationFlags>0</KeyCreationFlags> <KeyPromptFlags>0</KeyPromptFlags> </UI> <Security> <WorkspaceLocking> <LockAfterTime>0</LockAfterTime> <LockAfterGlobalTime>0</LockAfterGlobalTime> </WorkspaceLocking> <Policy /> <MasterPassword> <MinimumLength>0</MinimumLength> <MinimumQuality>0</MinimumQuality> </MasterPassword> </Security> <Native /> <PasswordGenerator> <AutoGeneratedPasswordsProfile> <GeneratorType>CharSet</GeneratorType> <Length>20</Length> <CharSetRanges>ULD_______</CharSetRanges> </AutoGeneratedPasswordsProfile> <LastUsedProfile> <GeneratorType>CharSet</GeneratorType> <Length>20</Length> <CharSetRanges>ULD_______</CharSetRanges> </LastUsedProfile> <UserProfiles /> </PasswordGenerator> <Defaults> <OptionsTabIndex>0</OptionsTabIndex> <SearchParameters> <ComparisonMode>InvariantCultureIgnoreCase</ComparisonMode> </SearchParameters> <KeySources> <Association> <DatabasePath></DatabasePath> <KeyFilePath></KeyFilePath> </Association> </KeySources> </Defaults> <Integration> <HotKeyGlobalAutoType>393281</HotKeyGlobalAutoType> <HotKeySelectedAutoType>0</HotKeySelectedAutoType> <HotKeyShowWindow>393291</HotKeyShowWindow> <HotKeyEntryMenu>1</HotKeyEntryMenu> <UrlSchemeOverrides> <BuiltInOverridesEnabled>1</BuiltInOverridesEnabled> <CustomOverrides /> </UrlSchemeOverrides> <ProxyType>System</ProxyType> </Integration> <Custom /> </Configuration>