{"id":165,"date":"2018-07-17T12:50:58","date_gmt":"2018-07-17T12:50:58","guid":{"rendered":"https:\/\/int64software.com\/blog\/?p=165"},"modified":"2019-10-11T09:56:23","modified_gmt":"2019-10-11T09:56:23","slug":"installing-and-configuring-microsoft-laps-a-complete-guide","status":"publish","type":"post","link":"https:\/\/int64software.com\/blog\/2018\/07\/17\/installing-and-configuring-microsoft-laps-a-complete-guide\/","title":{"rendered":"Installing and Configuring Microsoft LAPS: A Complete Guide &#8211; Part 1"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Microsoft LAPS (Local Administrator Password Solution) is making a big splash in the Active Directory community by providing a simple, secure, and free solution to the age-old question of how to secure your Local Administrator accounts.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\"><p>For occasions when login is required without domain credentials, password management can become complex. LAPS simplifies password management while helping customers implement recommended defenses against cyberattacks. In particular, it mitigates the risk of lateral escalation that results when customers have the same administrative local account and password combination on many computers<em>.<\/em><\/p><cite>Microsoft LAPS &#8211; Technet<br><\/cite><\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">Today we&#8217;re going to take a look at Microsoft LAPS while doing a fresh install and configuration in our internal development Active Directory environment, taking a look at any gotchas or unanswered questions along the way.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">What is the Local Administrator Password Solution?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Simply put, Microsoft LAPS generates cryptographically secure passwords for the local administrator account on each computer and stores the new password on the computer object in Active Directory.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Specifically, part of the installation process extends your Active Directory schema to include two new values:<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><a href=\"https:\/\/int64software.com\/blog\/wp-content\/uploads\/2018\/07\/15.pwd-now-set.png\"><img loading=\"lazy\" decoding=\"async\" width=\"305\" height=\"34\" src=\"https:\/\/int64software.com\/blog\/wp-content\/uploads\/2018\/07\/15.pwd-now-set.png\" alt=\"Example Microsoft LAPS Password and Timestamp\" class=\"wp-image-167\"\/><\/a><figcaption>Example Active Directory fields for LAPS<\/figcaption><\/figure><\/div>\n\n\n\n<h5 class=\"wp-block-heading\"><strong>ms-Mcs-AdmPwd<\/strong><\/h5>\n\n\n\n<p class=\"wp-block-paragraph\">Stores the current Administrator password.<\/p>\n\n\n\n<h5 class=\"wp-block-heading\">ms-Mcs-AdmPwdExpirationTime<\/h5>\n\n\n\n<p class=\"wp-block-paragraph\">Stores the timestamp (measured in 100-nanosecond chunks that have elapsed since 1st January 1601 (GMT)).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A DLL (AdmPwd.dll) is installed on each client which runs a check against the timstamp when a Group Policy refresh occurs to see if the password needs to be refreshed.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Installing LAPS<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">We&#8217;ll now go over the (relatively) simple installation process for LAPS. Note that we&#8217;ve brought up a development domain specifically for this purpose, <em><strong>and would strongly recommend anyone following this do the same before making schema changes to your live Active Directory instance<\/strong><\/em>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Step 1: Prerequisites<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The current version of LAPS is 6.2 and is available from Microsoft&#8217;s website <a href=\"https:\/\/www.microsoft.com\/en-us\/download\/details.aspx?id=46899\" target=\"_blank\" rel=\"noopener noreferrer\">here.<\/a><\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><a href=\"https:\/\/int64software.com\/blog\/wp-content\/uploads\/2018\/07\/1.installers.png\"><img loading=\"lazy\" decoding=\"async\" width=\"197\" height=\"112\" src=\"https:\/\/int64software.com\/blog\/wp-content\/uploads\/2018\/07\/1.installers.png\" alt=\"LAPS and OverLAPS Installers\" class=\"wp-image-168\"\/><\/a><figcaption>LAPS and OverLAPS Installers<\/figcaption><\/figure><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><em>(Note:\u00a0 <a rel=\"noreferrer noopener\" aria-label=\"Part 2 of this tutorial (opens in a new tab)\" href=\"https:\/\/int64software.com\/blog\/2019\/08\/22\/installing-and-configuring-microsoft-laps-a-complete-guide-part-2\/\" target=\"_blank\">Part 2 of this tutorial<\/a> will also be going over the OverLAPS installation and configuration procedure as it provides a much more intuitive interface to LAPS, so we&#8217;ve grabbed the installer for that as well, to download the free trial go <a href=\"https:\/\/int64software.com\/overlaps\/\">here<\/a>)<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">You&#8217;ll also need a Domain Administrator or other account with permissions to modify the AD schema. The installation can be run from any domain joined computer or server.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Step 2: Installation<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Launch LAPS.x64.msi (or LAPS.x32.msi if you&#8217;re in a 32bit OS).<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"502\" height=\"396\" src=\"https:\/\/int64software.com\/blog\/wp-content\/uploads\/2018\/07\/2.install.png\" alt=\"LAPS Install - Welcome\" class=\"wp-image-169\"\/><figcaption>Launching the LAPS installer<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"506\" height=\"395\" src=\"https:\/\/int64software.com\/blog\/wp-content\/uploads\/2018\/07\/2c.features.png\" alt=\"LAPS Install - Features\" class=\"wp-image-171\"\/><figcaption>LAPS Feature Configuration<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">The features we&#8217;ve opted to install here are:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>AdmPwd GPO Extension<\/strong><br>Installs the LAPS client for managing this devices password (as a Group Policy Object extension so that it can run during GPO update).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>PowerShell module<\/strong><br>LAPS includes a series of PowerShell commands contained in a custom module. This component is required for extending the Active Directory schema, getting and setting Active Directory permissions on the LAPS attributes, and for the initial configuration of LAPS. It also offers functionality for getting the current administrator password for a device and triggering a refresh.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>GPO Editor templates<\/strong><br>Installs the ADMX for enabling and configuring LAPS through Group Policy.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">We have opted not to install the &#8220;Fat Client UI&#8221; because we&#8217;ll be using OverLAPS as a user interface instead.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"503\" height=\"393\" src=\"https:\/\/int64software.com\/blog\/wp-content\/uploads\/2018\/07\/2d.install.png\" alt=\"LAPS Install - Ready\" class=\"wp-image-172\"\/><figcaption>LAPS Installation Process Ready<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"500\" height=\"392\" src=\"https:\/\/int64software.com\/blog\/wp-content\/uploads\/2018\/07\/2e.installcomplete.png\" alt=\"LAPS Install - Complete\" class=\"wp-image-173\"\/><figcaption>LAPS Install Completed<\/figcaption><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Step 3: Active Directory Schema<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The next step is to extend the AD schema with the two new computer object properties. To do this, we&#8217;ll need PowerShell (running as a Domain Administrator or another user with the rights to modify the schema).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Start by importing the LAPS AdmPwd.PS module, which contains all the PowerShell commands we&#8217;ll need.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Next, run the command to update the AD schema. If everything goes to plan, you should see &#8220;Success&#8221; all the way down the Status column.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"869\" height=\"113\" src=\"https:\/\/int64software.com\/blog\/wp-content\/uploads\/2018\/07\/3.ps-importmodule.png\" alt=\"Import AdmPwd.PS module\" class=\"wp-image-179\"\/><figcaption>Import AdmPwd.PS module<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"867\" height=\"213\" src=\"https:\/\/int64software.com\/blog\/wp-content\/uploads\/2018\/07\/4.ps-updateschema.png\" alt=\"LAPS Powershell - Update Active Directory Schema\" class=\"wp-image-180\"\/><figcaption>Update the Active Directory Schema<\/figcaption><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Step 4: Check Existing Permissions<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Now before we do anything else we need to secure Active Directory to make sure only people\/services we allow can access the new properties. We can do this from within PowerShell by using the command &#8220;Find-AdmPwdExtendedRights&#8221; with the root OU for your computer objects (in our case a container called &#8220;ManagedDevices&#8221;).<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"865\" height=\"160\" src=\"https:\/\/int64software.com\/blog\/wp-content\/uploads\/2018\/07\/7.confirm-permissions.png\" alt=\"LAPS Extended Rights Permissions\" class=\"wp-image-175\"\/><figcaption>LAPS Extended Rights Permissions<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">We can see from this that only SYSTEM and Domain Admins have access to these OUs, but if you notice any groups you don&#8217;t want here (for example &#8220;Authenticated Users&#8221;, which would indicate all logged in users have access), load ADSI Edit and find the root OU for your computer objects.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><img loading=\"lazy\" decoding=\"async\" width=\"262\" height=\"305\" src=\"https:\/\/int64software.com\/blog\/wp-content\/uploads\/2018\/07\/5.adsi-edit.png\" alt=\"ADSI Root Computer Device OU\" class=\"wp-image-181\"\/><figcaption>ADSI Root Computer Device OU<\/figcaption><\/figure><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Right click this and go to Properties -&gt; Security, then click the Advanced button. Select the &#8220;Authenticated Users&#8221; (in this example) principal and click Edit.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"630\" height=\"489\" src=\"https:\/\/int64software.com\/blog\/wp-content\/uploads\/2018\/07\/6.adsi-edit-permissions.png\" alt=\"ADSI Edit Permissions for LAPS\" class=\"wp-image-182\"\/><figcaption>ADSI Edit Permissions for LAPS<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Make sure that &#8220;All extended rights&#8221; is <strong>unchecked<\/strong>. Then click OK to apply the change.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Step 5: Allow Computers to Record their Password Changes<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Now your computers will need to the rights to change the password and expiry values from the LOCAL SYSTEM account. Back in PowerShell, use the Set-AdmPwdComputerSelfPermission command to apply this permission to computers in your root computer OU.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"860\" height=\"111\" src=\"https:\/\/int64software.com\/blog\/wp-content\/uploads\/2018\/07\/7b.add-machine-permissions.png\" alt=\"LAPS Add Computer Self Permissions\" class=\"wp-image-176\"\/><figcaption>LAPS Add Computer Self Permissions<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">This will add two new ACLs to the container for the &#8220;SELF&#8221; account, one for writing a new password, and another for reading\/writing the expiration timestamp. Note that the account does not have read access to the password.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"260\" height=\"140\" src=\"https:\/\/int64software.com\/blog\/wp-content\/uploads\/2018\/07\/7c.self-write-password.png\" alt=\"LAPS SELF Account Write Password Permission\" class=\"wp-image-183\"\/><figcaption>LAPS SELF Account Write Password Permission<\/figcaption><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Step 6: Configure LAPS Group Policy<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">We go into greater detail on the individual policy settings in our post <a href=\"https:\/\/int64software.com\/blog\/2018\/06\/28\/a-look-at-the-microsoft-laps-group-policy-settings\/\">A Look at the Microsoft LAPS Group Policy Settings<\/a>, but a brief overview of these are included below.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"1120\" height=\"573\" src=\"https:\/\/int64software.com\/blog\/wp-content\/uploads\/2018\/07\/8.laps-gpo-pre.png\" alt=\"LAPS Group Policy Settings\" class=\"wp-image-185\"\/><figcaption>LAPS Group Policy Settings<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Define a new Group Policy Object linked to the root Computer container and navigate to <em>Computer Configuration -&gt; Policies -&gt; Administrative Templates -&gt; LAPS<\/em>.<\/p>\n\n\n\n<h5 class=\"wp-block-heading\">Password Settings<\/h5>\n\n\n\n<p class=\"wp-block-paragraph\">Allows you to configure the compexity, length and maximum age of LAPS managed passwords.<\/p>\n\n\n\n<h5 class=\"wp-block-heading\">Name of administrator account to manage<\/h5>\n\n\n\n<p class=\"wp-block-paragraph\">If you&#8217;ve renamed your Local Administrator accounts, you can use this setting to specify the new name. (Take a look at our article <a href=\"https:\/\/int64software.com\/blog\/2018\/06\/27\/local-administrator-to-rename-or-not-to-rename\/\">Local Administrator: To Rename or not to Rename<\/a> for our views on this).<\/p>\n\n\n\n<h5 class=\"wp-block-heading\">Do not allow password expiration time longer than required by policy<\/h5>\n\n\n\n<p class=\"wp-block-paragraph\">Setting this tells LAPS that a password expiry longer than the one defined in &#8220;Password Settings&#8221; is not allowed (if being set manually). This prevents users with write access to the timestamp from setting it to a year in the future (for example) when the password policy clearly dictates it should reset every 7 days.<\/p>\n\n\n\n<h5 class=\"wp-block-heading\">Enable local admin password management<\/h5>\n\n\n\n<p class=\"wp-block-paragraph\">The master switch for LAPS. Enabling this enables Local Administrator password management.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Step 7: Distributing the LAPS &#8220;Client&#8221;<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The LAPS AdmPwd.dll CSE (Client-Side Extension) must now be distributed to all managed computers and registered. You have a number of options for achieving this, but we&#8217;ll concentrate on the two most common ways.<\/p>\n\n\n\n<h5 class=\"wp-block-heading\">1. Group Policy<\/h5>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"809\" height=\"53\" src=\"https:\/\/int64software.com\/blog\/wp-content\/uploads\/2018\/07\/12.gpo-admpwd-dll.png\" alt=\"LAPS GPO Copy AdmPwd.dll\" class=\"wp-image-188\"\/><figcaption>LAPS GPO Copy AdmPwd.dll<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">One simple method is to place the DLL on a share and have Group Policy copy the file to each computer, and use a startup script to register it.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><img loading=\"lazy\" decoding=\"async\" width=\"406\" height=\"460\" src=\"https:\/\/int64software.com\/blog\/wp-content\/uploads\/2018\/07\/13.gpo-regsvr32.png\" alt=\"LAPS GPO Startup Script\" class=\"wp-image-189\"\/><figcaption>LAPS GPO Startup Script<\/figcaption><\/figure><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">I&#8217;ve worked in environments before where the proliferation of complex GPOs caused massive slow-downs however; and as the DLL really doesn&#8217;t need to be registered on every system startup, this may not be the best solution.<\/p>\n\n\n\n<h5 class=\"wp-block-heading\">2. MSI<\/h5>\n\n\n\n<p class=\"wp-block-paragraph\">You can also simply run the Microsoft LAPS .msi installer on your clients with the &#8220;\/quiet&#8221; parameter. By default only the CSE is installed.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Your choice of how to do this depends very much on your environment: maybe you&#8217;d use SCCM or a similar technology. We opted to use <a href=\"https:\/\/overcee.com\" target=\"_blank\" rel=\"noopener noreferrer\">our own Overcee suite<\/a> though as I suppose you could say we&#8217;re experts in that technology.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"1097\" height=\"644\" src=\"https:\/\/int64software.com\/blog\/wp-content\/uploads\/2018\/07\/35.overcee-tool.png\" alt=\"New Overcee Tool for LAPS Install\" class=\"wp-image-190\"\/><figcaption>New Overcee Tool for LAPS Install<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"775\" height=\"526\" src=\"https:\/\/int64software.com\/blog\/wp-content\/uploads\/2018\/07\/36.command-line.png\" alt=\"Overcee LAPS Command Line\" class=\"wp-image-191\"\/><figcaption>Overcee LAPS Command Line<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"780\" height=\"530\" src=\"https:\/\/int64software.com\/blog\/wp-content\/uploads\/2018\/07\/37.parameters.png\" alt=\"Overcee LAPS Parameters\" class=\"wp-image-192\"\/><figcaption>Overcee LAPS Parameters<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">For a more detailed look at setting up a custom tool like this in Overcee, please see our post titled &#8220;<a href=\"https:\/\/int64software.com\/blog\/2018\/07\/10\/tutorial-privilege-escalation-vulnerability-scan-tool-and-overcee\/\" target=\"_blank\" rel=\"noopener noreferrer\">Tutorial: Privilege Escalation Vulnerability Scan Tool and Overcee<\/a>&#8220;.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Installation Complete<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">That&#8217;s it for Microsoft LAPS. Your computer&#8217;s administrator accounts may not change right away, but pretty soon you should see them starting to update.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">What&#8217;s Next?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><a rel=\"noreferrer noopener\" aria-label=\"Continue to Part 2 (opens in a new tab)\" href=\"https:\/\/int64software.com\/blog\/2019\/08\/22\/installing-and-configuring-microsoft-laps-a-complete-guide-part-2\/\" target=\"_blank\">Continue to Part 2<\/a> of this tutorial where we look at setting up the OVERLAPS web interface for LAPS which offers the benefits of mobile friendly, simpler management, and features such as Self Service.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Microsoft LAPS (Local Administrator Password Solution) is making a big splash in the Active Directory community by providing a simple, secure, and free solution to the age-old question of how to secure your Local Administrator accounts.<\/p>\n","protected":false},"author":1,"featured_media":476,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_crdt_document":"","footnotes":""},"categories":[13,47,4,16,7],"tags":[85,49,48,5,20,23,9,8],"class_list":["post-165","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-blog","category-microsoft-laps","category-overcee","category-overlaps","category-tutorial","tag-laps-powershell-commands","tag-local-administrator","tag-microsoft-laps","tag-overcee","tag-overlaps","tag-password","tag-security","tag-tutorial"],"_links":{"self":[{"href":"https:\/\/int64software.com\/blog\/wp-json\/wp\/v2\/posts\/165","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/int64software.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/int64software.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/int64software.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/int64software.com\/blog\/wp-json\/wp\/v2\/comments?post=165"}],"version-history":[{"count":11,"href":"https:\/\/int64software.com\/blog\/wp-json\/wp\/v2\/posts\/165\/revisions"}],"predecessor-version":[{"id":646,"href":"https:\/\/int64software.com\/blog\/wp-json\/wp\/v2\/posts\/165\/revisions\/646"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/int64software.com\/blog\/wp-json\/wp\/v2\/media\/476"}],"wp:attachment":[{"href":"https:\/\/int64software.com\/blog\/wp-json\/wp\/v2\/media?parent=165"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/int64software.com\/blog\/wp-json\/wp\/v2\/categories?post=165"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/int64software.com\/blog\/wp-json\/wp\/v2\/tags?post=165"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}