Apr 29 2010

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

No Comments

No comments yet.

RSS feed for comments on this post. TrackBack URI

Leave a comment

*

WordPress Themes

Blossom Icon Set

Software Top Blogs