Sécurité et poste autologon
Nous allons voir dans ce post comment sécuriser vos postes en autologon, appelés aussi postes en mode kiosque. Ces postes sont accessibles par toutes les personnes de votre entreprise car aucun compte et mot de passe ne sont demandés pour y accéder, d’où le besoin de les sécuriser au mieux.
Le poste en mode kiosque utilise un compte de service pour ouvrir une session, la manière la plus connue pour configurer un tel poste est de passer via l’édition de clefs de registre. Cette méthode n’est pas ce qui se fait de mieux en matière de sécurité car le mot de passe du compte apparaît en clair dans le registre, le compte peut donc facilement être utilisé à d’autres fins.
Afin de cacher ce mot de passe nous allons utiliser Autologon.exe de Sysinternals. Cet outil utilise la fonction LSAStorePrivateData pour protéger le mot de passe du compte utilisé. Cette solution est beaucoup moins vulnérable que les autres, bien que pas infaillible, voir cet article qui décrit les différentes méthodes gratuites d’autologon.
Nous allons maintenant décrire comment automatiser et sécuriser la mise en place de tels postes. Voici les différentes étapes: Créer les comptes utilisateur d’autologon ainsi que les objets ordinateur associés, paramétrer les profils des comptes de service, joindre nos postes au domaine, appliquer aux ordinateurs et à nos comptes de service des GPOs restrictives et enfin activer l’autologon sur les postes.
Afin de réaliser la première tâche nous allons utiliser un script, en entrée (fichier input.txt) mettre sur chaque ligne le nom des comptes ordinateur à créer, le compte de service associé sera préfixé par “s-“ puis le nom du poste. Les variables suivantes en début de script sont à adapter à votre environnement:
- OUComputers: Le DistinguishedName de l’OU dans laquelle vous désirez créer vos objets ordinateur autologon. Mettre ces objets dans une OU particulière car nous allons lier une GPO restrictive à ces postes, à moins que vous ne désiriez mélanger ces postes avec d’autres et réaliser un filtrage de sécurité sur la GPO via un groupe d’ordinateurs.
- OUUsers: Le DistinguishedName de l’OU dans laquelle vous désirez créer vos comptes de service autologon.
- DomainFQDN: Le FQDN de votre domaine.
- DomainName: Le NetBios Name de votre domaine.
- DNGroup: Le DistinguishedName du groupe dans lequel vous désirez mettre les compte de service autologon. Vous pouvez biensur adapter le script pour mettre les comptes de service dans plusieurs groupes ou aucun. Ou bien mettre les objets ordinateur dans un groupe si vous désirez passer par une GPO avec filtrage de sécurité.
- ProfileServerPath: Les comptes de service seront avec profils itinérants que nous rendrons mandatory via GPO. Le compte de service utilisateur aura donc l’attribut ProfilePath d’édité pour le rendre itinérant, la variable à modifier est donc l’endroit ou vous désirez stocker les profils.
Voici donc le script:
'## debut script### OUComputers = "OU=Autologon-Computers,DC=ldap389,DC=info" OUUsers = "OU=Users-Autologon,DC=ldap389,DC=info" DomainFQDN = "ldap389.info" DomainName = "ldap389" DNGroup = "CN=GroupAutologon,OU=Groups,DC=ldap389,DC=info" ProfileServerPath = "\\ServerName\Profiles" Const ForReading = 1 Const ADS_PROPERTY_APPEND = 3 Const ADS_UF_DONT_EXPIRE_PASSWD = &h10000 Const ADS_ACETYPE_ACCESS_DENIED_OBJECT = &H6 Const ADS_ACEFLAG_OBJECT_TYPE_PRESENT = &H1 Const CHANGE_PASSWORD_GUID = "{ab721a53-1e2f-11d0-9819-00aa0040529b}" Const ADS_RIGHT_DS_CONTROL_ACCESS = &H100 Set fso = CreateObject("Scripting.FileSystemObject") sCurPath = fso.GetAbsolutePathName(".") Input = sCurPath&"\input.txt" Output = sCurPath&"\output.txt" Set df1 = fso.OpenTextFile(Input,ForReading,True) Set FLog = fso.CreateTextFile(Output) Do while Not df1.AtEndOfStream varLigne = df1.readline() 'Create service account to use for autologon Login = "s-"&varLigne Set objOU = GetObject("LDAP://"&OUUsers) Set objUser = objOU.Create("User", "cn="&Login) objUser.Put "sAMAccountName", ""&Login objUser.Put "UserPrincipalName", ""& Login &"@"&DomainFQDN objUser.Put "sn", ""&Login objUser.Put "givenname", ""&Login objUser.Put "description", "Autologon account: "&varLigne objUser.Put "Profilepath", ProfileServerPath&"\"&Login objUser.SetInfo 'Generate password, use function of your choice, you can use http://www.tek-tips.com/faqs.cfm?fid=5340 by Mark D. MacLachlan pwd = generatePassword(15) objuser.SetPassword ""& pwd objUser.AccountDisabled=False objUser.SetInfo 'Set password never expires intUAC = objUser.Get("userAccountControl") If ADS_UF_DONT_EXPIRE_PASSWD AND intUAC Then Wscript.Echo "Already enabled" Else objUser.Put "userAccountControl", intUAC XOR _ ADS_UF_DONT_EXPIRE_PASSWD objUser.SetInfo End If ' Set user cannot change password Set objSD = objUser.Get("ntSecurityDescriptor") Set objDACL = objSD.DiscretionaryAcl arrTrustees = array("nt authorityself", "EVERYONE") For Each strTrustee in arrTrustees Set objACE = CreateObject("AccessControlEntry") objACE.Trustee = strTrustee objACE.AceFlags = 0 objACE.AceType = ADS_ACETYPE_ACCESS_DENIED_OBJECT objACE.Flags = ADS_ACEFLAG_OBJECT_TYPE_PRESENT objACE.ObjectType = CHANGE_PASSWORD_GUID objACE.AccessMask = ADS_RIGHT_DS_CONTROL_ACCESS objDACL.AddAce objACE Next objSD.DiscretionaryAcl = objDACL objUser.Put "nTSecurityDescriptor", objSD objUser. SetInfo 'Generate command to run autogon.exe on workstation Flog.writeline("autologon.exe "&Login&" "&DomainName&" "&pwd) 'Add user created to the group DNGroup Set objGroup1 = GetObject("LDAP://"&DNGroup) objGroup1.PutEx ADS_PROPERTY_APPEND, "member", Array("cn="&Login&","&OUUsers) objGroup1.SetInfo 'Create computer account Set objOU2 = GetObject("LDAP://"&OUComputers) Set objCpu = objOU2.Create("Computer", "cn="&varLigne) objCpu.Put "sAMAccountName", varLigne & "$" objCpu.Put "userAccountControl", 4096 objCpu.Put "description", "Autologon workstation" objCpu.Setinfo Loop df1.close msgbox "OK" WScript.Quit Function generatePassword(PASSWORD_LENGTH) '...................... End Function '## fin script### |
Pour télécharger le script c’est ici:
Nous utilisons la fonction generatePassword de Mark D. MacLachlan comme dans le post précédent afin de créer un mot de passe pour nos comptes de service. Vous pouvez très bien utiliser un mot de passe fixe. Le compte est flagué “le mot de passe n’expire jamais” et “l’utilisateur ne peut pas changer de mot de passe”, en effet le mot de passe du compte de service ne doit pas changer sinon le paramétrage d’autologon du poste ne fonctionnera plus. Le fichier output.txt contient les paramètres de ligne de commande que vous aurez à lancer sur vos postes pour générer l’autologon avec l’outil de Sysinternals. Mettre ce fichier de coté nous nous en servirons plus tard.
Il vous faut maintenant paramétrer les profils itinérants de vos comptes de service en les copiant à partir d’un profil modèle existant.
Joindre ensuite vos postes de travail au domaine, les objets ordinateurs étant préalablement créés via le script ci dessus.
Créer et lier une GPO sur l’OU sur laquelle se trouvent nos postes en autologon, réaliser au besoin un filtrage par groupe, ci cette OU contient d’autres types de postes. Ce type de poste étant accessible par tout le monde un minimum de restrictions est à mettre en place par GPO. Nous devons appliquer des paramètres utilisateurs sur nos objets ordinateurs pour cela nous allons utiliser le LoopBack Processing.
Sous Active Directory 2003 certains paramètres de registre ne sont pas applicables via les paramètres fournis par défaut, pour cela nous devons créer des modèles d’administration personnalisés, je vous conseille la lecture de ce document, qui présente tout sur les fichiers ADM. Vous pouvez aussi utiliser l’outil reg2adm de la suite NUTS réalisé par Yizhar Hurwitz.
Sous Windows 2008 grâce aux Group Policy Preferences vous pouvez directement éditer n’importe quelle clef de registre (voir page 10 du document).
Nous voulons restreindre l’utilisation des périphériques USB sur ces postes en mode kiosque, ce paramétrage n’étant pas intégré dans l’édition de GPO sous 2003, nous allons utiliser ce modèle d’administration réalisé par Simon Geary, celui ci édite les clefs de registres nécessaires.
Nous allons aussi inclure dans notre GPO le fait rendre nos profils itinérants pré configurés mandatory, pour cela il suffit juste d’appliquer le paramètre “Prevent Roaming Profile changes from being propagated to the server”.
Divers paramètres restrictifs sont aussi inclus dans la GPO, vous pouvez en enlever ou en rajouter à votre guise. Voici donc la GPO appliquée:
Il ne vous reste plus qu’à activer l’autologon sur les postes, pour cela vous servir du fichier output.txt, dans lequel figurent les commandes à lancer sur chaque PC. Vous disposez maintenant de postes en mode kiosque sécurisés.
This post is also available in: Anglais