2
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @@ -8,3 +8,5 @@ Boxes/* | |||||||
| *.tfstate | *.tfstate | ||||||
| *.tfstate.* | *.tfstate.* | ||||||
| *.tfvars | *.tfvars | ||||||
|  | Azure/Ansible/inventory.yml | ||||||
|  | Azure/Ansible/inventory.yml.bak | ||||||
|   | |||||||
| @@ -1,5 +1,5 @@ | |||||||
| ansible_user: vagrant | ansible_user: ansible | ||||||
| ansible_password: Vagrant123 | ansible_password: Ansible123 | ||||||
| ansible_port: 5985 | ansible_port: 5985 | ||||||
| ansible_connection: winrm | ansible_connection: winrm | ||||||
| ansible_winrm_transport: basic | ansible_winrm_transport: basic | ||||||
|   | |||||||
| @@ -1,4 +0,0 @@ | |||||||
| ansible_user: vagrant |  | ||||||
| ansible_password: vagrant |  | ||||||
| ansible_port: 22 |  | ||||||
| ansible_connection: ssh |  | ||||||
| @@ -1,5 +1,4 @@ | |||||||
| --- | --- | ||||||
|  |  | ||||||
| # This needs to be made idempodent | # This needs to be made idempodent | ||||||
| - name: Set HostOnly DNS Address | - name: Set HostOnly DNS Address | ||||||
|   win_shell: "Set-DnsClientServerAddress -InterfaceAlias Ethernet -ServerAddresses 192.168.38.102,8.8.8.8" |   win_shell: "Set-DnsClientServerAddress -InterfaceAlias Ethernet -ServerAddresses 192.168.38.102,8.8.8.8" | ||||||
| @@ -108,29 +107,4 @@ | |||||||
|     - "wevtutil el | Select-String -notmatch \"Microsoft-Windows-LiveId\" | Foreach-Object {wevtutil cl \"$_\"}" |     - "wevtutil el | Select-String -notmatch \"Microsoft-Windows-LiveId\" | Foreach-Object {wevtutil cl \"$_\"}" | ||||||
|     - "Set-SmbServerConfiguration -AuditSmb1Access $true -Force" |     - "Set-SmbServerConfiguration -AuditSmb1Access $true -Force" | ||||||
|  |  | ||||||
| - name: Disable password complexity policy |  | ||||||
|   win_shell: | |  | ||||||
|       secedit /export /cfg C:\secpol.cfg |  | ||||||
|       (gc C:\secpol.cfg).replace("PasswordComplexity = 1", "PasswordComplexity = 0") | Out-File C:\secpol.cfg |  | ||||||
|       secedit /configure /db C:\Windows\security\local.sdb /cfg C:\secpol.cfg /areas SECURITYPOLICY |  | ||||||
|       rm -force C:\secpol.cfg -confirm:$false |  | ||||||
|   become: yes |  | ||||||
|   become_method: enable |  | ||||||
|  |  | ||||||
| - name: Add Ansible user |  | ||||||
|   win_user: |  | ||||||
|     name: ansible |  | ||||||
|     password: Ansible123 |  | ||||||
|     groups: |  | ||||||
|       - Administrators |  | ||||||
|  |  | ||||||
| - name: Switch to Ansible user |  | ||||||
|   set_fact: |  | ||||||
|     ansible_user: ansible |  | ||||||
|     ansible_password: Ansible123 |  | ||||||
|  |  | ||||||
| - name: Change password for vagrant account back to vagrant |  | ||||||
|   win_user: |  | ||||||
|     name: vagrant |  | ||||||
|     password: vagrant |  | ||||||
|  |  | ||||||
|   | |||||||
| @@ -51,36 +51,11 @@ | |||||||
|     state: present |     state: present | ||||||
|     install_args: "ADDLOCAL=ClassicStartMenu" |     install_args: "ADDLOCAL=ClassicStartMenu" | ||||||
|  |  | ||||||
| - name: DetectionLab Menu | - name: Import ClassicShell config | ||||||
|   win_shell: | |   win_shell: | | ||||||
|       "\"C:\\Program Files\\Classic Shell\\ClassicStartMenu.exe -xml c:\\vagrant\\resources\\windows\\MenuSettings.xml\"" |       "C:\Program Files\Classic Shell\ClassicStartMenu.exe -xml c:\vagrant\resources\windows\MenuSettings.xml" | ||||||
|       regedit /s c:\vagrant\resources\windows\MenuStyle_Default_Win7.reg |       regedit /s c:\vagrant\resources\windows\MenuStyle_Default_Win7.reg | ||||||
|  |  | ||||||
| - name: Disable password complexity policy |  | ||||||
|   win_shell: | |  | ||||||
|       secedit /export /cfg C:\secpol.cfg |  | ||||||
|       (gc C:\secpol.cfg).replace("PasswordComplexity = 1", "PasswordComplexity = 0") | Out-File C:\secpol.cfg |  | ||||||
|       secedit /configure /db C:\Windows\security\local.sdb /cfg C:\secpol.cfg /areas SECURITYPOLICY |  | ||||||
|       rm -force C:\secpol.cfg -confirm:$false |  | ||||||
|   become: yes |  | ||||||
|   become_method: enable |  | ||||||
|  |  | ||||||
| - name: Add Ansible user |  | ||||||
|   win_user: |  | ||||||
|     name: ansible |  | ||||||
|     password: Ansible123 |  | ||||||
|     groups: |  | ||||||
|       - Administrators |  | ||||||
|  |  | ||||||
| - name: Switch to Ansible user |  | ||||||
|   set_fact: |  | ||||||
|     ansible_user: ansible |  | ||||||
|     ansible_password: Ansible123 |  | ||||||
|  |  | ||||||
| - name: Change password for vagrant account back to vagrant |  | ||||||
|   win_user: |  | ||||||
|     name: vagrant |  | ||||||
|     password: vagrant |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|   | |||||||
| @@ -62,6 +62,7 @@ We're going to use Ansible to fininsh provisioning the rest of the Windows hosts | |||||||
| 1. **(5 Minutes)** - Configure the `inventory.yml` file | 1. **(5 Minutes)** - Configure the `inventory.yml` file | ||||||
|    1. Navigate to `Azure/Ansible` and open `inventory.yml` for editing.  |    1. Navigate to `Azure/Ansible` and open `inventory.yml` for editing.  | ||||||
|    2. Take the `public_ip` values from `terraform output` and replace the `x.x.x.x` values with the public IP of each host |    2. Take the `public_ip` values from `terraform output` and replace the `x.x.x.x` values with the public IP of each host | ||||||
|  |    NOTE: I've added a script at `DetectionLab/Azure/build_ansible_inventory.sh` to help automate this. | ||||||
|  |  | ||||||
| Now that Ansible is configured for provisioning, there are two ways to go about this: | Now that Ansible is configured for provisioning, there are two ways to go about this: | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,3 +1,10 @@ | |||||||
|  |  secedit /export /cfg C:\secpol.cfg | ||||||
|  | (gc C:\secpol.cfg).replace("PasswordComplexity = 1", "PasswordComplexity = 0") | Out-File C:\secpol.cfg | ||||||
|  | secedit /configure /db C:\Windows\security\local.sdb /cfg C:\secpol.cfg /areas SECURITYPOLICY | ||||||
|  | rm -force C:\secpol.cfg -confirm:$false | ||||||
|  | net user ansible Ansible123 /add /y | ||||||
|  | net localgroup administrators ansible /add | ||||||
|  | net user vagrant vagrant  | ||||||
| powershell.exe -c "Set-NetConnectionProfile -InterfaceAlias Ethernet -NetworkCategory Private" | powershell.exe -c "Set-NetConnectionProfile -InterfaceAlias Ethernet -NetworkCategory Private" | ||||||
| Enable-PSRemoting -Force | Enable-PSRemoting -Force | ||||||
| winrm quickconfig -q | winrm quickconfig -q | ||||||
|   | |||||||
| @@ -2,5 +2,5 @@ locals { | |||||||
|   fleet_url  = "https://${azurerm_public_ip.logger-publicip.ip_address}:8412" |   fleet_url  = "https://${azurerm_public_ip.logger-publicip.ip_address}:8412" | ||||||
|   splunk_url = "https://${azurerm_public_ip.logger-publicip.ip_address}:8000" |   splunk_url = "https://${azurerm_public_ip.logger-publicip.ip_address}:8000" | ||||||
|   ata_url    = "https://${azurerm_public_ip.wef-publicip.ip_address}" |   ata_url    = "https://${azurerm_public_ip.wef-publicip.ip_address}" | ||||||
|   guacamole_url = "https://${azurerm_public_ip.wef-publicip.ip_address}:8080/guacamole" |   guacamole_url = "http://${azurerm_public_ip.logger-publicip.ip_address}:8080/guacamole" | ||||||
| } | } | ||||||
							
								
								
									
										41
									
								
								Azure/build_ansible_inventory.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										41
									
								
								Azure/build_ansible_inventory.sh
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,41 @@ | |||||||
|  | #! /bin/bash | ||||||
|  |  | ||||||
|  | # This script is used to populate the Azure Ansible inventory.yml with  | ||||||
|  | # the results of "terraform output" | ||||||
|  |  | ||||||
|  | if [ ! -d "./Terraform" ]; then | ||||||
|  |   echo "This script needs to be run from the DetectionLab/Azure folder" | ||||||
|  |   exit 1 | ||||||
|  | fi | ||||||
|  |  | ||||||
|  | if [ ! -d "./Ansible" ]; then | ||||||
|  |   echo "This script needs to be run from the DetectionLab/Azure folder" | ||||||
|  |   exit 1 | ||||||
|  | fi | ||||||
|  |  | ||||||
|  | if ! which terraform >/dev/null; then | ||||||
|  |   echo "Terraform needs to be accessible from PATH." | ||||||
|  |   exit 1 | ||||||
|  | fi | ||||||
|  |  | ||||||
|  | cd ./Terraform | ||||||
|  | TF_OUTPUT=$(terraform output) | ||||||
|  |  | ||||||
|  | DC_IP=$(echo $TF_OUTPUT | egrep -o "dc_public_ip = ([0-9]{1,3}[\.]){3}[0-9]{1,3}" | cut -d '=' -f 2 | tr -d ' ') | ||||||
|  | WEF_IP=$(echo $TF_OUTPUT | egrep -o "wef_public_ip = ([0-9]{1,3}[\.]){3}[0-9]{1,3}" | cut -d '=' -f 2 | tr -d ' ') | ||||||
|  | WIN10_IP=$(echo $TF_OUTPUT | egrep -o "win10_public_ip = ([0-9]{1,3}[\.]){3}[0-9]{1,3}" | cut -d '=' -f 2 | tr -d ' ') | ||||||
|  |  | ||||||
|  | # Don't update unless there's default values in inventory.yml | ||||||
|  | GREP_COUNT=$(egrep -c 'x\.x\.x\.x|y\.y\.y\.y|z\.z\.z\.z' ../Ansible/inventory.yml) | ||||||
|  | if [ $GREP_COUNT -ne 3 ]; then | ||||||
|  |   echo "This script is expecting the default values of x.x.x.x, y.y.y.y, and z.z.z.z for the dc, wef, and win10 hosts respectively in Ansible/inventory.yml." | ||||||
|  |   echo "You can restore the file to this state by running 'git checkout -- Ansible/inventory.yml'" | ||||||
|  |   echo "Rerun this script once that is complete." | ||||||
|  |   exit 1 | ||||||
|  | fi | ||||||
|  |  | ||||||
|  | echo "Replacing the default values in DetectionLab/Azure/Ansible/inventory.yml..." | ||||||
|  | sed -i.bak "s/x.x.x.x/$DC_IP/g; s/y.y.y.y/$WEF_IP/g; s/z.z.z.z/$WIN10_IP/g" ../Ansible/inventory.yml | ||||||
|  |  | ||||||
|  | echo "Displaying the updated inventory.yml below!" | ||||||
|  | cat ../Ansible/inventory.yml | ||||||
		Reference in New Issue
	
	Block a user
	 Chris Long
					Chris Long