BrightTALK the obnoxious spammer
BrightTALK is an organization that is supposed to be a media company providing technology webinars you can watch. The problem is they are one of the most obnoxious spammers on the planet. If your email addresse gets on one of their lists, you are screwed! Their unsubscribe options do not work and seem to actually sign you up for more SPAM from them. The only way to deal with them is to reject their email and protect everyone in your organization. I do this by creating a rule in Exchange online.
I highly recommend everyone to add this rule to their mail server settings. After an hour of creating this rule, I have already blocked over a dozen emails from these bastards.
Hide installed application in Windows
There may be a time when you need to hide an installed application so that it will not be uninstalled. An easy way to keep an application from being uninstalled is to just hide it from appearing in Windows add/remove programs. This is easily achieved by adding the SystemComponent value DWORD in the uninstall section of the registry for that specific application.
Let’s say I want to hide the Zoom application from appearing in Windows. Currently, you can see it listed in the control panel
I can run the following powershell command to add the SystemComponent entry to the registry and set the value to 1 to hide the application:
New-ItemProperty -Path 'HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{57D6B477-1B0C-4C4B-8479-A89ACFDFD875}' -Name SystemComponent -Value 1
Now the application will no longer appear in the installed Applications section of Control panel.
To make the item visible again, just delete the SystemComponent from the registry.
We all feel this way about .webp
Powershell .ToString()
I’m posting this as I spent too much time on figuring out how to convert the current IP of a machine and turn the IP address into an array. I needed this so I can change the last octet to a couple of other values that I would set later in the script. Powershell has an odd way of outputting data into different types such as objects. Objects can be frustrating when you just want a string output, but objects do give you all types of other possible information from the data you are querying.
I mean there is quite a bit of data to choose from, but I just wanted the IP address. So, after digging around, I realized I needed to pass a PSObject .ToString() to my variable which will return the string representation for this object.
Now that I can get the actual string value I need, I can then use split(‘.’) to split the string at each period character to an array. For some reason, getting just the string value on this one stumped me longer than it should have. So, here it is for anyone that ever needs this (Or myself for future reference). Splitting your IP address into an array.
$ipV4 = (Test-Connection -ComputerName (hostname) -Count 1).IPV4Address
$ipArray = ($ipV4.ToString()).Split(".")
Write-Host("IPV4 Output :" + $ipV4)
Write-Host("Octect1 [0] :" + $ipArray[0])
Write-Host("Octect2 [1] :" + $ipArray[1])
Write-Host("Octect3 [2] :" + $ipArray[2])
Write-Host("Octect4 [3] :" + $ipArray[3])
Replacing apt with Nala
Nala is an improved front-end for the apt package manager in Ubuntu/Debian Linux. It adds many features and a better visual representation to the activity of the command. A really good article about Nala can be found here at ItsFoss. There are many more features and arguments to nala than the normal apt command offers.
I’ve decided to create an alias to stop me from using the apt command to using nala. To make sure the alias is persistent after every session or login, I needed to add the following alias commands to the bottom of my .bashrc file.
# Added alias for nala to be used instead of apt.
alias apt='\nala'
alias dapt='\apt'
# For aliases to work with sudo:
alias sudo='sudo '
Now save and exit the shell. Enter back into your terminal and when I run sudo apt update, I get nala running instead.
Monthly patching schedule
I am often asked how I perform security and third-party patching for an entire company. Below, I have outlined the basic strategy I use, and this has not varied much in the past 15 years from every company where I have been responsible for maintaining the patching in regard to Windows servers and workstations. First off, I always test patching before roll-out. Period! I never assume every update installs without issue. Patching processes these days are much more reliable than they used to be, but sometimes a patch or an updated application can cause issues. Testing first doesn’t hurt anything and ensures the patching doesn’t have any conflicts with applications and operations, which could save you a major headaches in the long run.
To explain my reason for testing is to ensure no disruption to business. For example, if many of the endpoints that you are patching are located in restaurants, such as the point-of-sale system or other critical machines required for business to operate, you will want to make sure those endpoints are always available, and that a patch or update does not cause problems for those devices to operate. If those endpoints are not running, that can cause an immediate loss of business to a location(s) financially. You don’t want to find out a patch or an updated application doesn’t play nice until too late.
I’ve been using Action1 as my patching platform for the past couple of years and have been impressed with the flexibility and ease of keeping the entire company up to date. The below details will be shown from the Action1 configuration I use, but the scheduling will match to my normal overall strategy.
With all that I mentioned about testing updates before deployment, I do have a small handful of application updates that I will deploy as soon as they are available. These are mostly workstation applications for users and not OS security or production applications for business-critical needs.
Workstations – Automated patching. Daily. 6am. No reboot. Low risk to workstation users.
- 1Password
- Adobe Acrobat Reader*
- Microsoft Edge*
- Microsoft Teams*
- Teams Machine-Wide Installer*
- VLC*
- *Webex*
- XNView*
- Zoom*
Workstations and Servers – Automated patching. Daily. 6:15am. No reboot.
- *Defender Antivirus*
- Windows Malicious Software Removal Tool*
Monthly Patching – Servers and workstations.
All updates are manually approved. Reboots allowed. Patching is done manually, no automated schedules.
- Updates deployed to lab/dev/qa system endpoints first. Verify no issues with functionality for 24 hours.
- If no issues from lab endpoint patching. Update to pilot group of live sites for 24 hours. Pilot workstation group includes IT department workstations.
- If no issues from pilot group. Deploy to all workstation endpoints.
- If multiple endpoints at remote sites, do not deploy to all endpoints, break up patching into groups to ensure not all endpoints will be affected at same time during patching/reboots.
Server considerations
- Do not deploy to a master domain controller first. Apply to a secondary domain controllers, then patch master domain controller on following day.
- Server patching done outside business hours. Must have IT staff monitoring patching to ensure all servers operational after patching.
- Snapshot all VM’s before patching or patch after backup routines to ensure quick rollback if needed.
I hope this provides some visibility into my patching strategy and helps you with coming up with your own patching cycle. Every patching cycle should be strict and consistent to minimize risk to any organization, but yet flexible to work around business needs.
Reformatting a flash drive formatted as ISO
Typically, when a flash drive is formatted from an ISO image, the flash drive will be formatted as an ISO9660 type and not want to be re-formatted or erased easily. Take a look at Gparted showing a flash drive below with the Linux Mint ISO on it.
When I attempt to delete the Partition in GParted, it is greyed out. If you try to format it, you will also get an error. The proper method is to use a command like:
sudo dd status=progress if=/dev/zero of=/dev/sde bs=4k && sync
The problem is this takes forever to run and zero out the entire flash drive. What I do is probably considered some hillbilly method but it works and works fairly quickly. I only seem to need to use this method when I want to reformat a flash drive shown as an ISO format. I run the shred -v command and let it run for about 10% to 15% (Which takes only a couple of minutes typically). I then hit CTRL C to cancel the operation.
Remove the flash drive and re-insert it. Now go into Gparted and create a partition table and format the flash drive any way you want.
Now I format the flash drive however I want. In this case, I formatted it as a Fat32.
Maybe I’ll post a more proper method later, but the above is down and really dirty but works quickly.
Using Powershell to read registry HKEY_USERS
This is a small example I put together on how to quickly loop through each user SID in HKEY_USERS and find the value that shows what the wallpaper is set to for each user. This little script is a decent reference to use for finding (And with a little modification, setting) registry value(s) in the HKEY_USERS section.
<#
.DESCRIPTION
Example to show how you can go through each user branch in registry
HKEY_USERS and retrieve the wallpaper file path key.
#>
$hkUsers = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('USERS', $env:COMPUTERNAME)
$hkUsersSubkeys = $hkUsers.GetSubKeyNames()
$hkUsersSubkeys | % {
$hkeyuserpath = "$_\Control Panel\Desktop"
$hkeyuserpath = "REGISTRY::HKEY_USERS\$hkeyuserpath"
Write-Host "`nUSER: $_"
$wallpaperfile = (Get-ItemProperty -Path $hkeyuserpath -ErrorAction SilentlyContinue).Wallpaper
Write-Host "WALLPAPER: $wallpaperfile`n`n===================="
}
Download files from website via Powershell
A simple method I like to use when I want to quickly run a powershell script to download a file from a webserver. I use this when endpoints are not on an internal network so a network share is not always available, but since I am usually remotely calling the powershell script, Internet access is established.
The commandlet I use is Invoke-RestMethod. I provide the source url for the file on a webserver to download and the destination, and I’m done. Extremely simple and extremely effective. There are so many ways to do this, but this is the method I personally use the most.
The below example is what I have used to download the CleanZoom utility from Zoom that will remove any installed versions of Zoom on an endpoint, save the file in a temporary directory and then execute the utility.
<# --------------------------------------------------------------------------------
Uninstall all traces of Zoom from an endpoint.
Script downloads the CleanZoom.zip file from Zoom.com and then extracts it and
runs the utility.
----------------------------------------------------------------------------------- #>
$src = 'https://assets.zoom.us/docs/msi-templates/CleanZoom.zip'
$dst = "$env:TEMP\CleanZoom.zip"
Invoke-RestMethod -Uri $src -OutFile $dst
Expand-Archive -Path $dst -DestinationPath $env:TEMP -Force
Start-Process $env:TEMP\CleanZoom.exe -ArgumentList "/s"