Keepass improve: Difference between revisions
Jump to navigation
Jump to search
(Created page with "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 =...") |
|||
Line 118: | Line 118: | ||
// Change these parameters | // Change these parameters | ||
#define GroupName L" | #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 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! | #define ServicePassword L"*" // Show ESS_Supervision_Encadrement database. Do not archive with password! |
Revision as of 10:04, 27 February 2022
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@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>