<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Branden R. Williams, Business Security Specialist</title>
	<atom:link href="http://www.brandenwilliams.com/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.brandenwilliams.com</link>
	<description>Transformational Security</description>
	<lastBuildDate>Sat, 24 Jan 2026 19:03:36 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>
<site xmlns="com-wordpress:feed-additions:1">102445656</site>	<item>
		<title>A Nerdy Quest, Puzzle Wednesday!</title>
		<link>https://www.brandenwilliams.com/blog/2026/01/28/a-nerdy-quest-puzzle-wednesday/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=a-nerdy-quest-puzzle-wednesday</link>
					<comments>https://www.brandenwilliams.com/blog/2026/01/28/a-nerdy-quest-puzzle-wednesday/#respond</comments>
		
		<dc:creator><![CDATA[Branden Williams]]></dc:creator>
		<pubDate>Wed, 28 Jan 2026 16:04:00 +0000</pubDate>
				<category><![CDATA[Diversions]]></category>
		<category><![CDATA[crossword]]></category>
		<category><![CDATA[puzzles]]></category>
		<category><![CDATA[sudoku]]></category>
		<guid isPermaLink="false">https://www.brandenwilliams.com/?p=7290</guid>

					<description><![CDATA[When I was a traveling consultant, one of my favorite little games was grabbing the USA Today puzzle section from the Admirals Club and trying to finish the Sudoku before the wheels of the jet left the ground. I got better over time, though I still didn’t finish it before every takeoff. Eventually, I added [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>When I was a traveling consultant, one of my favorite little games was grabbing the USA Today puzzle section from the Admirals Club and trying to finish the Sudoku before the wheels of the jet left the ground. I got better over time, though I still didn’t finish it before every takeoff.</p>


<div class="wp-block-image">
<figure class="alignright size-full is-resized"><a href="https://i0.wp.com/www.brandenwilliams.com/wp-content/uploads/2026/01/66190623494__9F9263AC-A889-4B51-98D7-58945D266D06-crop.jpeg?ssl=1"><img data-recalc-dims="1" fetchpriority="high" decoding="async" width="479" height="328" src="https://i0.wp.com/www.brandenwilliams.com/wp-content/uploads/2026/01/66190623494__9F9263AC-A889-4B51-98D7-58945D266D06-crop.jpeg?resize=479%2C328&#038;ssl=1" alt="" class="wp-image-7293" style="width:344px;height:auto" srcset="https://i0.wp.com/www.brandenwilliams.com/wp-content/uploads/2026/01/66190623494__9F9263AC-A889-4B51-98D7-58945D266D06-crop.jpeg?w=479&amp;ssl=1 479w, https://i0.wp.com/www.brandenwilliams.com/wp-content/uploads/2026/01/66190623494__9F9263AC-A889-4B51-98D7-58945D266D06-crop.jpeg?resize=300%2C205&amp;ssl=1 300w" sizes="(max-width: 479px) 100vw, 479px" /></a></figure>
</div>


<p>Eventually, I added crossword puzzles to the mix, largely due to the influence of my friend James. I watched him work through them and wanted to learn the tricks myself. On Sundays—usually parked on the couch watching NFL games—I’d have the Sunday crossword nearby (mostly unfilled). But week by week, I improved. One unexpected perk of getting the Sunday paper delivered (at least on our route) is that you also get a Wednesday edition.</p>



<p>A few years ago I suggested to James that we put these free Wednesday puzzle sections to good use instead of tossing them in the bin. What began as a casual, nerdy side quest quickly turned into a standing weekly ritual religiously observed every Wednesday—or as close to it as schedules allowed. Each session follows the same order: Sudoku first, then the New York Times crossword, and finally the United Media Daily Commuter crossword.</p>



<p>Then I had a silly idea: what if we timed ourselves every week and tracked it? At first it was just for fun. We documented dates, completion times, and a few notes about the puzzle. We ran some basic stats (mean, median, standard deviation) and made a simple graph.</p>



<p>At some point, <a href="https://www.brandenwilliams.com/Puzzle_Wednesday_Report.html">this stopped being a joke spreadsheet</a>.</p>



<p>Once the dataset got large enough to feel real—157 data points representing three years of Puzzle Wednesdays—I treated it like any other analysis problem: clean the data, normalize what needed normalizing, and then start asking questions without strong prior beliefs about the answers. The core dataset is intentionally simple—date, total completion time, and a handful of notes—which made it easier to experiment.</p>


<div class="wp-block-image">
<figure class="alignleft size-full is-resized"><a href="https://i0.wp.com/www.brandenwilliams.com/wp-content/uploads/2026/01/image.webp?ssl=1"><img data-recalc-dims="1" decoding="async" width="1024" height="1024" src="https://i0.wp.com/www.brandenwilliams.com/wp-content/uploads/2026/01/image.webp?resize=1024%2C1024&#038;ssl=1" alt="" class="wp-image-7298" style="width:268px;height:auto" srcset="https://i0.wp.com/www.brandenwilliams.com/wp-content/uploads/2026/01/image.webp?w=1024&amp;ssl=1 1024w, https://i0.wp.com/www.brandenwilliams.com/wp-content/uploads/2026/01/image.webp?resize=300%2C300&amp;ssl=1 300w, https://i0.wp.com/www.brandenwilliams.com/wp-content/uploads/2026/01/image.webp?resize=150%2C150&amp;ssl=1 150w, https://i0.wp.com/www.brandenwilliams.com/wp-content/uploads/2026/01/image.webp?resize=768%2C768&amp;ssl=1 768w" sizes="(max-width: 1000px) 100vw, 1000px" /></a></figure>
</div>


<p>From there, I started merging in external data sources aligned to the same dates. Weather data came first, followed by broader environmental variables, market data, and a few intentionally absurd dimensions. The goal wasn’t to prove a hypothesis so much as to see whether anything showed a meaningful relationship with how fast we solved puzzles on a given Wednesday.</p>



<p>Most things didn’t.</p>



<p>This is exploratory analysis, not an attempt to publish a paper or claim causality. But it is a real dataset, collected consistently over three years, which makes it a surprisingly rich sandbox for asking questions you wouldn’t normally bother asking. If you think I missed an obvious (or ridiculous) data source to include, I’m open to suggestions.</p>



<p>The funniest result by adding in weather data: higher wind speeds correlate with slower completion times. Not rain. Not temperature. Wind.</p>



<p>I don’t have a theory for this. Maybe it’s noise. Maybe windy days are subtly distracting. Maybe it’s a proxy for something else entirely. Or maybe it’s just a reminder that humans are weird, rituals matter, and patterns will emerge whether we fully understand them or not.</p>


<div class="wp-block-image">
<figure class="alignright size-large is-resized"><a href="https://i0.wp.com/www.brandenwilliams.com/wp-content/uploads/2026/01/IMG_7491.jpg?ssl=1"><img data-recalc-dims="1" decoding="async" width="1024" height="1024" src="https://i0.wp.com/www.brandenwilliams.com/wp-content/uploads/2026/01/IMG_7491.jpg?resize=1024%2C1024&#038;ssl=1" alt="Branden &amp; James standing at the Forbidden City" class="wp-image-7297" style="width:284px;height:auto" srcset="https://i0.wp.com/www.brandenwilliams.com/wp-content/uploads/2026/01/IMG_7491.jpg?resize=1024%2C1024&amp;ssl=1 1024w, https://i0.wp.com/www.brandenwilliams.com/wp-content/uploads/2026/01/IMG_7491.jpg?resize=300%2C300&amp;ssl=1 300w, https://i0.wp.com/www.brandenwilliams.com/wp-content/uploads/2026/01/IMG_7491.jpg?resize=150%2C150&amp;ssl=1 150w, https://i0.wp.com/www.brandenwilliams.com/wp-content/uploads/2026/01/IMG_7491.jpg?resize=768%2C768&amp;ssl=1 768w, https://i0.wp.com/www.brandenwilliams.com/wp-content/uploads/2026/01/IMG_7491.jpg?resize=1536%2C1536&amp;ssl=1 1536w, https://i0.wp.com/www.brandenwilliams.com/wp-content/uploads/2026/01/IMG_7491.jpg?resize=2048%2C2048&amp;ssl=1 2048w" sizes="(max-width: 1000px) 100vw, 1000px" /></a></figure>
</div>


<p>That’s really the point of this whole exercise. This started as two friends doing puzzles to keep their skills sharp. It turned into a weekly ritual. Then it quietly became a three-year dataset. The analysis is fun, but the consistency is the interesting part—the discipline of showing up every Wednesday, starting the clock, and doing the work.</p>



<p>I now present to you the data, the methodology, and the charts—because of course there are charts. <a href="https://brandenwilliams.com/Puzzle_Wednesday_Report.html">Here&#8217;s the analysis of our Puzzle Wednesday</a> quests for the last three years (yes we will keep tracking and yes I will post updates!). </p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.brandenwilliams.com/blog/2026/01/28/a-nerdy-quest-puzzle-wednesday/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">7290</post-id>	</item>
		<item>
		<title>SSH Proxy, Using a Jumphost</title>
		<link>https://www.brandenwilliams.com/blog/2025/10/14/ssh-proxy-using-a-jumphost/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=ssh-proxy-using-a-jumphost</link>
					<comments>https://www.brandenwilliams.com/blog/2025/10/14/ssh-proxy-using-a-jumphost/#respond</comments>
		
		<dc:creator><![CDATA[Branden Williams]]></dc:creator>
		<pubDate>Tue, 14 Oct 2025 13:14:17 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<guid isPermaLink="false">https://www.brandenwilliams.com/?p=7254</guid>

					<description><![CDATA[Those who know me know about my love of the Raspberry Pi. I&#8217;ve got tons of them stashed around various places to provide a variety of services. One thing I use them for is to allow me access into remote networks via Twingate for troubleshooting or maintenance purposes. Usually these networks are less sophisticated with [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>Those who know me know about my love of the <a href="https://www.raspberrypi.com/">Raspberry Pi</a>. I&#8217;ve got tons of them stashed around various places to provide a variety of services. One thing I use them for is to allow me access into remote networks via <a href="https://www.twingate.com/">Twingate</a> for troubleshooting or maintenance purposes. Usually these networks are less sophisticated with consumer-grade tech enabling them, and Twingate provides a nice way to be able to access specific hosts easily over their technology. It does like to have two connectors per network, so in order to keep the portal green, I will put normally a <a href="https://www.raspberrypi.com/products/raspberry-pi-5/">Raspberry Pi</a> and a <a href="https://www.raspberrypi.com/products/raspberry-pi-zero-2-w/">Pi Zero</a> on that network and have them connect back to Twingate.</p>



<p>In my world, Twingate is used more in the &#8220;I need to access this resource at this time&#8221; mode, and not &#8220;All on, all the time.&#8221; I&#8217;ve had some issues with leaving Twingate open all the time (be it connected or not) as it sometimes plays with route tables in ways that prevent traffic from flowing. This is especially true in situations of IP conflict. </p>


<div class="wp-block-image">
<figure class="alignright size-full is-resized"><a href="https://i0.wp.com/www.brandenwilliams.com/wp-content/uploads/2025/10/SCR-20251014-hixy.png?ssl=1"><img data-recalc-dims="1" loading="lazy" decoding="async" width="757" height="366" src="https://i0.wp.com/www.brandenwilliams.com/wp-content/uploads/2025/10/SCR-20251014-hixy.png?resize=757%2C366&#038;ssl=1" alt="" class="wp-image-7255" style="width:559px;height:auto" srcset="https://i0.wp.com/www.brandenwilliams.com/wp-content/uploads/2025/10/SCR-20251014-hixy.png?w=757&amp;ssl=1 757w, https://i0.wp.com/www.brandenwilliams.com/wp-content/uploads/2025/10/SCR-20251014-hixy.png?resize=300%2C145&amp;ssl=1 300w" sizes="auto, (max-width: 757px) 100vw, 757px" /></a></figure>
</div>


<p>In order to have an always-on setup for the main Raspberry Pi, I have it VPN back into my network so I can see it just on the LAN like it&#8217;s hidden somewhere in my house (this happened once, but rest assured I found the rogue RPi). This way I can do maintenance without firing up Twingate, but it creates a small issue. I don&#8217;t want to have BOTH devices VPN back in, just one. This means that if I want to say update the Pi Zero, I need to first jump on the Pi, then ssh from the Pi to the Pi Zero. </p>



<p>A bit of a hassle, especially when I&#8217;m trying to automate things with Ansible.</p>



<p>I wanted a way to be able to touch the Pi Zero &#8220;directly&#8221; from hosts on my LAN. Thankfully, ssh provides a jump host proxy function natively, and I got it set up in less than a minute! Look below for config if you are in a similar situation, be it for work or pleasure.</p>



<p>To enable this functionality, you need to define both hosts in your <code>~/.ssh/config</code> file. It will look like this:</p>



<pre class="wp-block-code"><code># Define the proxy host first.
Host remotepi
    HostName remotepi.example.com
    User username               # replace with your username
    IdentityFile ~/.ssh/id_rsa  # replace with your key

# Now define the Pi Zero attached to that same network.
Host pizero
    HostName 192.168.1.234
    User username
    IdentityFile ~/.ssh/id_rsa
    ProxyJump remotepi</code></pre>



<p>This setup assumes you have ssh access from your LAN (via VPN) to <code>remotepi</code>. You can replace that hostname with a local IP on your network, or in my case, I just use a local DNS server to define the name. As long as you can ssh to <code>remotepi</code> then the next step going to the <code>pizero</code> is available to you. You need the IP on the remote network of <code>pizero</code>, but the magic happens with the &#8220;ProxyJump&#8221; config line under the <code>pizero</code> definition. This tells SSH to first go to <code>remotepi</code>, then seamlessly launch into <code>pizero</code>.</p>



<p>So there ya go! Seamless proxying of ssh via a jump host</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.brandenwilliams.com/blog/2025/10/14/ssh-proxy-using-a-jumphost/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">7254</post-id>	</item>
		<item>
		<title>Level Up Cybersecurity with Kasm Workspaces</title>
		<link>https://www.brandenwilliams.com/blog/2025/01/23/level-up-cybersecurity-with-kasm-workspaces/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=level-up-cybersecurity-with-kasm-workspaces</link>
		
		<dc:creator><![CDATA[Branden Williams]]></dc:creator>
		<pubDate>Thu, 23 Jan 2025 16:44:00 +0000</pubDate>
				<category><![CDATA[Consumer Security]]></category>
		<category><![CDATA[Enterprise Security]]></category>
		<category><![CDATA[Security Tools]]></category>
		<guid isPermaLink="false">https://www.brandenwilliams.com/?p=7141</guid>

					<description><![CDATA[Ever look at plethora of browser tabs staring back at you with &#8220;I&#8217;ll check this out later&#8221; vibes and feel the urge to mercy-close the ones that just wont get done anytime soon? Browser tabs are now another subtle, nagging to-do list that gets neglected or ignored. I&#8217;m specifically referring to the tabs in the [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>Ever look at plethora of browser tabs staring back at you with &#8220;I&#8217;ll check this out later&#8221; vibes and feel the urge to mercy-close the ones that just wont get done anytime soon? Browser tabs are now another subtle, nagging to-do list that gets neglected or ignored. I&#8217;m specifically referring to the tabs in the middle of your window that you pinky-promised you would revisit. They are reminders of things that you <em><strong>might</strong></em> do without making an <em><strong>actual</strong></em> to-do list.</p>



<p>I had one of those purge moments last week and remembered I had a tab open to check out <a href="https://www.kasmweb.com/">Kasm Workspaces</a>. This was an instance where I was glad I left that nagging to-do item waiting for me to revisit it.</p>



<p>Kasm is a disposable desktop infrastructure platform that is available for you on-demand when you need to perform tasks that you may not want on your primary, persistent machines. If you are a technology or security person, think of it as a way to spin up a containerized Linux distribution to run a few tests or an isolated Chrome to detonate a suspicious link. There are commercial and community versions available for use. You can test it out right on the website with a five minute timer to see how it works. The <a href="https://registry.kasmweb.com/1.0/">sheer number of tools</a> you can provision with just a click is impressive!</p>



<figure class="wp-block-image size-large"><a href="https://i0.wp.com/www.brandenwilliams.com/wp-content/uploads/2025/01/SCR-20250119-jcrb.jpeg?ssl=1"><img data-recalc-dims="1" loading="lazy" decoding="async" width="1024" height="634" src="https://i0.wp.com/www.brandenwilliams.com/wp-content/uploads/2025/01/SCR-20250119-jcrb.jpeg?resize=1024%2C634&#038;ssl=1" alt="" class="wp-image-7142" srcset="https://i0.wp.com/www.brandenwilliams.com/wp-content/uploads/2025/01/SCR-20250119-jcrb.jpeg?resize=1024%2C634&amp;ssl=1 1024w, https://i0.wp.com/www.brandenwilliams.com/wp-content/uploads/2025/01/SCR-20250119-jcrb.jpeg?resize=300%2C186&amp;ssl=1 300w, https://i0.wp.com/www.brandenwilliams.com/wp-content/uploads/2025/01/SCR-20250119-jcrb.jpeg?resize=768%2C476&amp;ssl=1 768w, https://i0.wp.com/www.brandenwilliams.com/wp-content/uploads/2025/01/SCR-20250119-jcrb.jpeg?w=1340&amp;ssl=1 1340w" sizes="auto, (max-width: 1000px) 100vw, 1000px" /></a><figcaption class="wp-element-caption"><em>Here&#8217;s a screenshot of my installation of Kasm Workspaces and the available tiles I provisioned.</em></figcaption></figure>



<p>I&#8217;ll leave some technical notes for those of you who want to try this in your own lab below documenting some minor issues I ran into and solved so you can get going faster.</p>



<p>The first thing I did once I got mine up and running was hit the Firefox Browser tile and detonate a phishing link that was reported to me. I was able to safely interact with the malicious webpage, see exactly what it was attempting to do (standard cred/token theft), download the malicious javascript (and subsequently beautifying it because you know it was all on one line with no spaces), and get the nitty-gritty of where things were being sent. It took less than a minute to do all of that.</p>



<p>After that, I started playing around with some of the tiles. Parrot OS was one of my new favorites and after a small configuration adjustment (noted below) I was able to launch a few scans against targets I was interested in without having to fire up a separate VM on my machine using these on-demand containers. The Alpine experience is super snappy, and even trying out other browsers like Vivaldi in a low-risk way was a good use of time.</p>



<p>Kasm has a ton of practical uses as well. On-demand desktops or jump hosts if you deploy it in a secured area, browser isolation (as I did above) to visit sites that may cause your machine harm, research, compliance, exploit testing, and even threat hunting (again, as I did above). If you are a security or technology professional, Kasm is a tool that should be deployed and ready for use in your toolbox. </p>



<p>If you are convinced and ready to get started, keep reading to get some tips and tricks that will speed your way to using Kasm!</p>



<h2 class="wp-block-heading">The Technical Mumbo-Jumbo</h2>


<div class="wp-block-image">
<figure class="alignright size-full"><a href="https://i0.wp.com/www.brandenwilliams.com/wp-content/uploads/2011/12/5012665222_447cd84dcf_m.jpg?ssl=1"><img data-recalc-dims="1" loading="lazy" decoding="async" width="161" height="240" src="https://i0.wp.com/www.brandenwilliams.com/wp-content/uploads/2011/12/5012665222_447cd84dcf_m.jpg?resize=161%2C240&#038;ssl=1" alt="" class="wp-image-3318"/></a><figcaption class="wp-element-caption">Ski Mask, by Dave Wasson</figcaption></figure>
</div>


<p>Here are some tips and tricks that I used to get things going.</p>



<p><strong><span style="text-decoration: underline;">Base OS Choice:</span></strong> If you are ready to move from the cloud version to something on-prem, you need a new machine for the <a href="https://kasmweb.com/docs/latest/install/single_server_install.html">Kasm installer</a> to set up your environment. My first failed try was with Ubuntu Noble Numbat (24.04). I have a faint memory of discovering that Kasm was only compatible up to Jammy Jellyfish (22.04), so that was completely on me for doing that. I switched to installing a minimalist Debian 12 (bookworm) server that was super stripped down and the installer worked perfectly.</p>



<p>When you are putting hardware specs on the machine, pay close attention to the amount of storage you will need. These containers are not small, so a 20G footprint won&#8217;t get you very far. You will also need to ensure you have enough memory for the number of simultaneous users who will be launching workloads.</p>



<p>If you are running Debian, you will need to ensure you have <code>curl</code>, <code>tar</code>, and <code>sudo</code> (properly configured for your account to elevate its privileges) before you run the four commands in the installation instructions at the link above.</p>



<p><strong><span style="text-decoration: underline;">Elevated Privileges:</span></strong> One thing you will notice quickly if you deploy a linux distribution, such as Alma or Parrot, is that you are running the OS as a user called <code>kasm-user</code>. This is intentional. The <code>kasm-user</code> (and <code>root</code> user) does not have a password, so if you want to elevate to root to run <code>nmap</code> as an example, you need to do a couple of things.</p>



<p>Most modern Linux operating systems that would have a desktop element have <code>sudo</code> pre-installed, but by default the <code>kasm-user</code> is not in the <code>/etc/sudoers</code> file. In the Kasm admin portal, go to your installed workspace list and select the tile you want to modify (Alma in my case). Select the pencil icon to edit, and scroll down to &#8220;Docker Exec Config.&#8221; In that box, you want to drop in some JSON configuration that will add <code>kasm-user</code> to the <code>/etc/sudoers</code> file.</p>



<pre class="wp-block-code"><code>{
 "first_launch":{
      "user":"root",
      "cmd":"bash -c 'echo \"kasm-user  ALL=(ALL) NOPASSWD: ALL\" &gt;&gt; /etc/sudoers'"
  }
}</code></pre>



<p>Click Save. Now for most *NIX workspaces you deploy, this will be sufficient (provided <code>sudo</code> is installed) to allow <code>kasm-user</code> elevate to root. Keep in mind, this may break some of the isolation controls (I have not tested all of this) so do this with care. You could also add commands here to create a password for the <code>kasm-user</code> account, and then you could remove the <code>NOPASSWD: ALL</code> section of the JSON above for a traditional <code>sudo</code> experience.</p>



<p><strong><span style="text-decoration: underline;">Running Privileged Workloads:</span></strong> Parrot OS requires additional config to be passed to the Docker subsystem to allow tools like <code>nmap</code> to run—even without root privileges. All you need to do is edit the workspace again like above, and go to the Docker Run Config Override section. You will want to add the following there and click Save.</p>



<pre class="wp-block-code"><code>{
  "privileged": true
}</code></pre>



<p>If you also want to elevate to root, you will need to make the Docker Exec Config update above as well.</p>



<p><strong><span style="text-decoration: underline;">Problems with Tiles:</span></strong> As of this writing, the default Kali tile will not install. I&#8217;ve <a href="https://github.com/kasmtech/workspaces-issues/issues/679">filed a bug</a> on this but I&#8217;m guessing this will work itself out based on the errors I am getting. Be sure to check the logs when things are not working, and refer to this <a href="https://kasmweb.com/docs/latest/guide/troubleshooting.html">Troubleshooting Guide</a> to get things resolved.</p>



<p><strong><em>Edit, Jan 26:</em></strong> If you look at that bug report above, one user suggested just using the rolling-weekly image until the normal one is fixed. This works fine for me in what I&#8217;m doing, so that&#8217;s how I solved that one tile. If you are in a similar situation and don&#8217;t mind a little bit of volatility, do that to get your tiles working (Kali is up and running nicely!).</p>



<p><strong><span style="text-decoration: underline;">Additional Kasm Registries:</span></strong> There are third party registries you can add to your Kasm setup to bring in other tools. I was able to get a Kali tile to work by doing that, but be intentional about adding those registries and do your due diligence.</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">7141</post-id>	</item>
		<item>
		<title>pgMail 1.5 Released!</title>
		<link>https://www.brandenwilliams.com/blog/2024/12/10/pgmail-1-5-released/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=pgmail-1-5-released</link>
		
		<dc:creator><![CDATA[Branden Williams]]></dc:creator>
		<pubDate>Tue, 10 Dec 2024 16:26:08 +0000</pubDate>
				<category><![CDATA[Diversions]]></category>
		<guid isPermaLink="false">https://www.brandenwilliams.com/?p=7133</guid>

					<description><![CDATA[Well, it&#8217;s pretty rare that I get anyone talking about my old PostgreSQL email stored procedure, but here we are. I wrote this thing almost 25 years ago to essentially replicate the functionality of xp_sendmail into PostgreSQL. I released it to the world, because I knew other people would have this issue. And as it [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>Well, it&#8217;s pretty rare that I get anyone talking about my old PostgreSQL email stored procedure, but here we are. I wrote this thing almost 25 years ago to essentially replicate the functionality of xp_sendmail into PostgreSQL. I released it to the world, because I knew other people would have this issue. And as it turned out, they absolutely do.</p>


<div class="wp-block-image">
<figure class="alignright size-large is-resized"><img data-recalc-dims="1" decoding="async" src="https://i0.wp.com/www.brandolabs.com/assets/images/mail.jpg?ssl=1" alt="" style="width:300px"/></figure>
</div>


<p>Thus, <a href="https://www.brandolabs.com/pgmail/" data-type="link" data-id="https://www.brandolabs.com/pgmail/">pgMail</a> was born.</p>



<p>The history is all on <a href="https://github.com/captbrando" data-type="link" data-id="https://github.com/captbrando">Github</a> now, and it&#8217;s generally been stable over the years. There were some bugs that needed to get fixed over time such as issues with SMTP Pipelining, adding support for MIME Multipart emails that would offer HTML formats as are the norm these days. But today I had someone request to turn on utf-8 encoding to ensure the expanded character set is processed properly. Surprised that had not been requested yet, but here we are.</p>



<p>That&#8217;s been released today with some additional updates to the README and sample code that reflects PostgreSQL v15+ installations. You can get <a href="https://github.com/captbrando/pgMail/compare/v1.4...v1.5">all the details here</a>. </p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">7133</post-id>	</item>
		<item>
		<title>Let&#8217;s Encrypt for non-webservers</title>
		<link>https://www.brandenwilliams.com/blog/2024/11/27/lets-encrypt-for-non-webservers/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=lets-encrypt-for-non-webservers</link>
		
		<dc:creator><![CDATA[Branden Williams]]></dc:creator>
		<pubDate>Wed, 27 Nov 2024 16:49:00 +0000</pubDate>
				<category><![CDATA[Diversions]]></category>
		<category><![CDATA[Enterprise Security]]></category>
		<guid isPermaLink="false">https://www.brandenwilliams.com/?p=7121</guid>

					<description><![CDATA[Let&#8217;s say you want to use Let&#8217;s Encrypt for something that isn&#8217;t a website. So you download certbot, you get things going with your manual cert, and you realize that when it goes to rotate you will need to restart some services. When you go look through the docs, it&#8217;s not very clear on how [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>Let&#8217;s say you want to use Let&#8217;s Encrypt for something that isn&#8217;t a website. So you download <code>certbot</code>, you get things going with your manual cert, and you realize that when it goes to rotate you will need to restart some services. When you go look through the docs, it&#8217;s not very clear on how to do this exactly. So here&#8217;s my post to remind myself what I did (and if it helps you as well, then hooray!).</p>


<div class="wp-block-image">
<figure class="alignright size-full"><a href="https://i0.wp.com/www.brandenwilliams.com/wp-content/uploads/2011/11/2478514667_c11f906e33_m.jpg?ssl=1"><img data-recalc-dims="1" loading="lazy" decoding="async" width="240" height="180" src="https://i0.wp.com/www.brandenwilliams.com/wp-content/uploads/2011/11/2478514667_c11f906e33_m.jpg?resize=240%2C180&#038;ssl=1" alt="" class="wp-image-3249"/></a><figcaption class="wp-element-caption">Doctor Tom Saves the Day, by Murray Barnes</figcaption></figure>
</div>


<p>What you want to do is configure a hook. They come in three varieties: pre-hooks (commands to run prior to running the re-issue), deploy-hooks (commands to run immediately after the cert is issued but prior to deployment), and post-hooks (commands to be run after deployment). You can find command line options pretty easily, but there is another trick if your system has all the automation built in (say, via the SNAP subsystem). </p>



<p>You will find some options in the <code>/etc/letsencrypt/renewal-hooks</code> directory if you have global commands you want to run. This is an easy way to script actions when your machine is single use. But if you have a web server on the same machine you are running email on, you might not want to run global commands when every certificate renews, just commands for unique to that one certificate.</p>



<p>The way to accomplish this is via the <code>/etc/letsencrypt/renewal/your.cert.name.conf</code> config file. At the bottom of the <code>[renewalparams]</code> section, you want to add the following lines:</p>



<pre class="wp-block-code"><code># Add this to the /etc/letsencrypt/renewal/your.cert.here.conf
pre_hook = /bin/systemctl stop &lt;ONE OR MORE SERVICES TO STOP, such as 'apache' to ensure you can do the renew>
post_hook = /bin/systemtl start &lt;ONE OR MORE SERVICES TO START, such as 'apache'>; /bin/systemctl restart &lt;ONE OR MORE SERVICES TO RESTART, such as 'dovecot postfix'></code></pre>



<p>So there you go. Now if you wanted to use letsencrypt certs for email or stunnel, it&#8217;s easily accomplished with these options.</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">7121</post-id>	</item>
		<item>
		<title>When Man Pages Go Weird</title>
		<link>https://www.brandenwilliams.com/blog/2024/04/05/when-man-pages-go-weird/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=when-man-pages-go-weird</link>
		
		<dc:creator><![CDATA[Branden Williams]]></dc:creator>
		<pubDate>Fri, 05 Apr 2024 15:32:51 +0000</pubDate>
				<category><![CDATA[Diversions]]></category>
		<category><![CDATA[coreutils]]></category>
		<category><![CDATA[linux]]></category>
		<guid isPermaLink="false">https://www.brandenwilliams.com/?p=6993</guid>

					<description><![CDATA[You may not realize that I got my start in the technology world in the early 1990s learning Unix. From my first Netcom account to my high school allowing me, A JUNIOR, to have and run a Slackware machine directly connected to the Internet. My first Linux kernel was a 1.2.8 kernel, and I vividly [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>You may not realize that I got my start in the technology world in the early 1990s learning Unix. From my first Netcom account to my high school allowing me, A JUNIOR, to have and run a Slackware machine directly connected to the Internet. My first Linux kernel was a 1.2.8 kernel, and I vividly remember someone trolling me on IRC to fix some strange problem the best bet was to <code>rm -rf /*</code> as root.</p>



<p>He got me good. </p>



<p>Working through *nix in those days was made easier (and still is today) through Manual Pages, or manpages for short. It&#8217;s the thing that people would expect you to go do when they replied &#8220;RTFM&#8221; when you asked a question that was clearly pointed out in the manpage. You type man &lt;command&gt; and you get a fully formatted text usage guide. Some can be <a href="https://man.archlinux.org/man/Image::ExifTool::TagNames.3pm.en">long</a>, some are quite <a href="https://linux.die.net/man/2/sbrk">short</a>. By reading the manpage, you should have a good idea on how to use that particular piece of software on your *nix machine.</p>


<div class="wp-block-image">
<figure class="alignright size-full"><a href="https://i0.wp.com/www.brandenwilliams.com/wp-content/uploads/2012/10/4952847207_96b4a9d62a_m.jpg?ssl=1"><img data-recalc-dims="1" loading="lazy" decoding="async" width="240" height="181" src="https://i0.wp.com/www.brandenwilliams.com/wp-content/uploads/2012/10/4952847207_96b4a9d62a_m.jpg?resize=240%2C181&#038;ssl=1" alt="" class="wp-image-3869"/></a><figcaption class="wp-element-caption">Its a patch!</figcaption></figure>
</div>


<p>I recently worked to <a href="https://github.com/ianharrier/synology-scripts/pull/30">contribute to an open source package</a> to address and issue I&#8217;m having with a remote server and how it phones home. Specifically, when internet connections would go down, sometimes it would get stuck in a loop until it was rebooted, emailing me faithfully—EVERY HOUR—that the task of reconnecting failed because there was already a reconnection in process. </p>



<p>It was stuck.</p>



<p>So I started poking around. Was there a way in a BASH script to put a time limit on the execution of a command so that it could be killed if that time limit exceeded? Why yes, a tool that is part of the GNU CoreUtils package will do exactly this. The tool is called <a href="https://man7.org/linux/man-pages/man1/timeout.1.html">timeout</a>.</p>



<p>So what do I do first? Pull up the manpage. This looks like it will work perfectly! But upon trying it, I got an error message. It was not working. I was attempting to pass the -k flag with a 10 second limit, but no joy. After banging my head on the desk a little bit and honing my Google-fu, I realized that the manpage does not accurately represent the functionality of the tool. When using the -k flag, you must immediately pass a timeout duration for that signal. The tool will first send SIGINT, and if the process does not quit, after the duration you pass into -k, it will send a SIGKILL. This is trying to gracefully shut down the process before killing it. You can also send in other signals with -s.</p>



<p>According to my read of the docs, this should work: <code>timeout -k 10s ping <a href="http://example.com/">example.com</a></code></p>



<p>But in order to send a SIGKILL to the command, you have to also send a second timeout for sending SIGKILL: <code>timeout -k 10s 10s ping <a href="http://example.com/">example.com</a></code></p>



<p>Otherwise, timeout will give you this error: <code>timeout: invalid time interval 'ping‘</code></p>



<p>You can obviously replace <code>ping</code> with the actual command you are trying to run.</p>



<p>I&#8217;m posting this not only for my own documentation so I can refer back if I get stuck here again, but also for others who are trying to use that tool and realizing the help docs don&#8217;t match the functionality of the tool. <strong><em>Edit</em></strong>: Also yes, I did <a href="https://debbugs.gnu.org/cgi/bugreport.cgi?bug=70219">file a bug report</a>, and it was closed because the code is doing what it is supposed to, but the manpage is a little ambiguous.</p>



<p><em><strong>Edit 2: </strong></em>As it turns out after some back and forth on the bug report, <em>it&#8217;s just my poor understanding on how the tool actually works</em> combined with a lack of examples and some ambiguous language in the manpage. </p>



<p>I.e., my bad. Not a bug.</p>



<p>After looking at the code again and hearing back from the maintainers, <strong><em>there isn&#8217;t a logic bug</em></strong> but more confusion on my part between -s, -k, and the order of steps in what timeout is actually doing. In the <a href="https://github.com/ianharrier/synology-scripts/pull/30">pull request to the synology-scripts repo</a>, the maintainer suggested a couple of other options and I think we&#8217;re in a good place as far as what the go-forward plan is. In retrospect, clarification on the manpage and usage is probably the best thing to do, plus adding in examples at the bottom of the manpage. They would be something like this:</p>



<pre class="wp-block-code"><code>EXAMPLES
       timeout 2s sleep 10
              Send SIGTERM to sleep after 2 seconds.

       timeout -s 9 2s sleep 10
              Send SIGKILL to sleep after 2 seconds.

       timeout -k 10s 1d ping -i 60 example.com
              Send SIGTERM to ping after one day of data, and if the process 
              does not end within 10 seconds, send SIGKILL.

       timeout --preserve-status 15m &lt;some_process_that_may_get_stuck&gt;
              Send SIGTERM to a some process after 15 minutes, but preserve 
              the exit code of that process.</code></pre>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">6993</post-id>	</item>
		<item>
		<title>Ten Things Companies Get Wrong About CIAM</title>
		<link>https://www.brandenwilliams.com/blog/2024/01/23/ten-things-companies-get-wrong-about-ciam/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=ten-things-companies-get-wrong-about-ciam</link>
		
		<dc:creator><![CDATA[Branden Williams]]></dc:creator>
		<pubDate>Tue, 23 Jan 2024 16:15:57 +0000</pubDate>
				<category><![CDATA[Consumer Security]]></category>
		<category><![CDATA[Identity]]></category>
		<guid isPermaLink="false">https://www.brandenwilliams.com/?p=6973</guid>

					<description><![CDATA[Customer Identity and Access Management (CIAM) is a core component of creating your digital user experience. If you are unfamiliar with Customer Identity and Access Management, it is the process by which companies grant access to their digital assets (like websites, mobile apps, and even chatbots) to their customers, as well as controlling what those [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>Customer Identity and Access Management (CIAM) is a core component of creating your digital user experience. If you are unfamiliar with Customer Identity and Access Management, it is the process by which companies grant access to their digital assets (like websites, mobile apps, and even chatbots) to their customers, as well as controlling what those customers can access. The idea is to ensure the right person or process has access to the right applications and information at the right time while being risk and context aware.</p>


<div class="wp-block-image">
<figure class="alignright size-full"><a href="https://i0.wp.com/www.brandenwilliams.com/wp-content/uploads/2011/01/5007008029_b681eea458_m.jpg?ssl=1"><img data-recalc-dims="1" loading="lazy" decoding="async" width="240" height="212" src="https://i0.wp.com/www.brandenwilliams.com/wp-content/uploads/2011/01/5007008029_b681eea458_m.jpg?resize=240%2C212&#038;ssl=1" alt="" class="wp-image-2649"/></a><figcaption class="wp-element-caption">E se fossero i Social Media ad usare Voi?, by Simone Lovati</figcaption></figure>
</div>


<p>In a previous role, I was responsible for a complete CIAM modernization at a large bank. More recently, I modernized an entire IAM system for a premier identity company. In both cases, my guiding principle was making the user experience easier while generating more data to create usable telemetry for risk engines and blue teamers (your internal cybersecurity defenders). Over the last seven years, I&#8217;ve learned a few things about how customer identity <em>should</em> be done.</p>



<p>In 2024, here are ten things that companies get wrong about customer identity and access management (workforce is a whole other basket of grasshoppers):</p>



<ol class="wp-block-list">
<li><strong>Relying on username/password for security.</strong> It&#8217;s 2024. Using usernames and passwords as your sole method to identify something coming in from the Internet is irresponsible and risky. It&#8217;s especially terrible if you are forcing a password policy with complexity requirements for your customers. It&#8217;s been seven years since Bill Burr (not the angry comic) apologized for creating password complexity rules. You will be spending too many resources fighting bots and credential stuffing attacks.</li>



<li><strong>Using Email or SMS-based One Time Passwords (OTP).</strong> I had someone tell me once that &#8220;Well SMS or Email OTP is better than nothing.&#8221; No. No it is not, Billy. If you think that Sally Smith&#8217;s password hygiene is bad enough that you want to add in an OTP, do you think their email or phone security is somehow better? It&#8217;s not, and we saw lots of Account TakeOver (ATO) events happen specifically due to Email- or SMS-based OTP (some with multi-million dollar losses). SMS-based OTP is also punitive to people who are unable to receive one (for example, if they are traveling internationally or on an airplane). Don&#8217;t waste money investing here.</li>



<li><strong>One Channel thinking.</strong> Chances are you will have multiple ways customers might interact with you (Multi/Omni-Channel). Your CIAM experience should be seamless across all methods of customer interaction. As a bonus, high adoption of your mobile app enables push notification for MFA&#8212;an excellent way to step your authentication game up.</li>



<li><strong>Ignoring risk signals.</strong> Not all login attempts are equal, just like not all account actions are equal. Financial Services firms capabilities outpace nearly all other industries because they need to evaluate the risk related to the movement of money at scale. Your user experience will be better if you use a risk-based engine to streamline authentication. Remove friction on harmless actions if they fit within your risk profile. There is a certain hotel brand is driving me absolutely bananas right now as every time I log in I am required to have an Email or SMS OTP. Not only are those terrible authenticators, but the company is not consuming any risk signals on this activity. If I&#8217;m using the same browser, logging in from the same IP, and using the same machine, a basic login should happen without a step up. I can&#8217;t imagine how much this company is wasting on unnecessary SMS delivery right now.</li>



<li><strong>Ignoring context.</strong> This is where authorization comes in and that&#8217;s a distinct difference from your authentication, but it is a part of the CIAM user experience. Viewing information is low risk and should not have the same level of attention or protection as moving money or redeeming stored account value.</li>



<li><strong>Not using Passkeys.</strong> Passkeys are a fantastic option for MFA step up that fix the biggest weakness associated with Time-Based OTP (TOTP, a.k.a, Google Authenticator) and also give you a pathway to a passwordless experience.</li>



<li><strong>Not having a passwordless path and strategy.</strong> Passkeys can be used for MFA, or they could be used as a 100% passwordless experience. No username, no password, just presenting the passkey (which is considered a strong authentication on its own). A passkey is far superior to a username and password combination as it is a stronger, phishing resistant factor (unlike a password).</li>



<li><strong>Not providing risk-appropriate options for MFA.</strong> Not all people are mega authentication nerds like me and carry hardware keys around with them, and not all websites or actions should require that kind of MFA. But adding options for customers to use factors you have already performed risk evaluations on and deem acceptable is a must. At the Bank, my vision was to roll out &#8220;Bring Your Own Authenticator.&#8221;</li>



<li><strong>Trying to roll your own authentication engine.</strong> Are there open source options to avoid paying third parties for CIAM services? Yes. Should you use them? Absolutely not. Unless you are a company providing CIAM services, you don&#8217;t make money by writing and maintaining CIAM solutions. Direct your precious development resources toward revenue-generating code.</li>



<li><strong>Ignoring high-assurance account recovery.</strong> Your accounts are only as secure as their recovery methods. Using ID Verification technology is an option to consider for high-assurance account recovery that scales and can be done in real time with minimal human intervention (combined with other items to resist ATO).</li>
</ol>



<p>Every CIAM strategy must at a minimum cover these ten points to be high functioning, low cost, and business enabling.</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">6973</post-id>	</item>
		<item>
		<title>Protect Yourself and Freeze Your Credit</title>
		<link>https://www.brandenwilliams.com/blog/2024/01/19/protect-yourself-and-freeze-your-credit/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=protect-yourself-and-freeze-your-credit</link>
					<comments>https://www.brandenwilliams.com/blog/2024/01/19/protect-yourself-and-freeze-your-credit/#comments</comments>
		
		<dc:creator><![CDATA[Branden Williams]]></dc:creator>
		<pubDate>Fri, 19 Jan 2024 19:19:34 +0000</pubDate>
				<category><![CDATA[Consumer Security]]></category>
		<category><![CDATA[credit report]]></category>
		<guid isPermaLink="false">https://www.brandenwilliams.com/?p=6975</guid>

					<description><![CDATA[Breaches are never ending, and if you have not already put freezes on your credit reports, make a late New Year&#8217;s resolution and do it now. There are a couple of steps you will need to take for each of the four bureaus (yes four). Before you freeze, get in a habit of requesting your [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>Breaches are never ending, and if you have not already put freezes on your credit reports, make a late New Year&#8217;s resolution and do it now. There are a couple of steps you will need to take for each of the four bureaus (yes four).</p>


<div class="wp-block-image">
<figure class="alignleft size-full"><a href="https://i0.wp.com/www.brandenwilliams.com/wp-content/uploads/2009/09/3027534098_f568868b9e_m.jpg?ssl=1"><img data-recalc-dims="1" loading="lazy" decoding="async" width="240" height="180" src="https://i0.wp.com/www.brandenwilliams.com/wp-content/uploads/2009/09/3027534098_f568868b9e_m.jpg?resize=240%2C180&#038;ssl=1" alt="" class="wp-image-1461"/></a><figcaption class="wp-element-caption">Credit Cards, by Andres Rueda</figcaption></figure>
</div>


<p>Before you freeze, get in a habit of requesting your report annually. Some bureaus partner with apps you can use as well (such as Credit Karma, Credit Sesame) that are free to download and set up. You want to make sure nobody opened a line of credit in your name without you knowing. </p>



<p>One thing you need to know about freezing your credit report is anytime you take an action that requires a hard inquiry, you will have to temporarily unfreeze the report at the credit bureau the company you are working with uses. So if I apply for a new credit card, I need to ask the bank which bureau they use (such as, Experian) so I can unfreeze it for the day. Just remember that when you apply for something and it denies you because it can’t get your credit report.</p>



<p>On to the instructions! There are <strong>four</strong> bureaus and you need to freeze <strong>both your report and your spouse/partner/parent/child at each one</strong>. If you are asked to create an account, be sure you are using a unique password and storing that in your <a href="https://www.brandenwilliams.com/blog/2012/05/03/fun-with-password-managers/?highlight=password%20manager">password manager</a> (with a PIN as well if it asks for one).</p>



<ul class="wp-block-list">
<li><a href="https://www.experian.com/freeze/center.html">Experian Freeze</a> &lt;— Sign up for an account and freeze.</li>



<li><a href="https://www.transunion.com/credit-freeze">TransUnion</a> &lt;— Add a freeze.</li>



<li><a href="https://www.equifax.com/personal/credit-report-services/credit-freeze/">Equifax</a> &lt;— Place a security freeze.</li>



<li><a href="https://www.innovis.com/securityFreeze/index">Innovis</a> &lt;— the credit bureau everyone forgets. Request security freeze.</li>
</ul>



<p>There ya go! I actually thought I wrote this blog post years ago. Better late than never!</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.brandenwilliams.com/blog/2024/01/19/protect-yourself-and-freeze-your-credit/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">6975</post-id>	</item>
		<item>
		<title>Selective Domain Filtering with Postfix and a SPAM Filtering Service</title>
		<link>https://www.brandenwilliams.com/blog/2023/10/17/selective-domain-filtering-with-postfix-and-a-spam-filtering-service/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=selective-domain-filtering-with-postfix-and-a-spam-filtering-service</link>
		
		<dc:creator><![CDATA[Branden Williams]]></dc:creator>
		<pubDate>Tue, 17 Oct 2023 15:36:00 +0000</pubDate>
				<category><![CDATA[Enterprise Security]]></category>
		<guid isPermaLink="false">https://www.brandenwilliams.com/?p=6931</guid>

					<description><![CDATA[Yes, that title was a mouthful, but I&#8217;m trying to make sure I&#8217;m descriptive enough for the next guy who is in this situation. I was facing something interesting lately. There is a spambot network that is ignoring whatever you put in the MX record, and trying to send emails to other IPs associated with [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>Yes, that title was a mouthful, but I&#8217;m trying to make sure I&#8217;m descriptive enough for the next guy who is in this situation. I was facing something interesting lately. There is a spambot network that is ignoring whatever you put in the MX record, and trying to send emails to other IPs associated with the domain.</p>


<div class="wp-block-image">
<figure class="alignright size-full"><a href="https://i0.wp.com/www.brandenwilliams.com/wp-content/uploads/2011/12/5012665222_447cd84dcf_m.jpg?ssl=1"><img data-recalc-dims="1" loading="lazy" decoding="async" width="161" height="240" src="https://i0.wp.com/www.brandenwilliams.com/wp-content/uploads/2011/12/5012665222_447cd84dcf_m.jpg?resize=161%2C240&#038;ssl=1" alt="" class="wp-image-3318"/></a><figcaption class="wp-element-caption">Ski Mask, by Dave Wasson</figcaption></figure>
</div>


<p>Yep, rookie mistake on my part. Should have set things up so that domains forwarding to my spam filtering service can only be delivered locally if they come FROM that service. So I turned to the extremely helpful Postfix Users group.</p>



<p>Essentially, they suggested leveraging access(5) rules to define this in main.cf. You could throw the domains into a hash table as well, but since my config isn&#8217;t really changing that much at all I did not go that route. </p>



<p>The first part of the config is to set up the CIDR blocks in question that you want to allow mail from:</p>



<pre class="wp-block-code"><code>    smtpd_restriction_classes = reject_unfiltered

    # Allow the filtering service IPv4/IPv6 CIDR blocks and reject
    # everything else.
    reject_unfiltered =
        check_client_access cidr:{
            {192.168.2.0/24               permit_auth_destination},
            {2001:dead:beef:cafe::/64    permit_auth_destination},
            {0.0.0.0/0                  REJECT 5.7.1 MX bypass attempt},
            {::/0                       REJECT 5.7.1 MX bypass attempt}
        }</code></pre>



<p>Then, you need to add to your existing smtpd_client_restrictions block a check to make sure email destined for the domains you wish come from your provider.</p>



<pre class="wp-block-code"><code>    smtpd_client_restrictions =
        check_recipient_access inline:{
            {filtereddomain.com = reject_unfiltered},
            {filtereddomain.net = reject_unfiltered}
        }, 
    # Just insert this at the top of your list of client
    # restrictions and you can keep processing/restricting
    # after that.</code></pre>



<p>That&#8217;s all there is to it. Worked instantly and does not affect mail delivery for domains that are not listed in the second config block. Thank you to Viktor Dukhovni for helping!</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">6931</post-id>	</item>
		<item>
		<title>PCI DSS 4.0 and TLS</title>
		<link>https://www.brandenwilliams.com/blog/2023/06/28/pci-dss-4-0-and-tls/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=pci-dss-4-0-and-tls</link>
		
		<dc:creator><![CDATA[Branden Williams]]></dc:creator>
		<pubDate>Wed, 28 Jun 2023 15:41:30 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<guid isPermaLink="false">https://www.brandenwilliams.com/?p=6901</guid>

					<description><![CDATA[In 2015, I published an addendum to our PCI DSS 4th Ed. book that covered version 3.1. I titled it, &#8220;PCI DSS 3.1: The Standard that Killed SSL&#8221; because that version removed the ability to use old and outdated versions of the standard in favor of the improved TLS standard originally released in January 1999. [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>In 2015, I published an addendum to our PCI DSS 4th Ed. book that covered version 3.1. I titled it, &#8220;PCI DSS 3.1: The Standard that Killed SSL&#8221; because that version removed the ability to use old and outdated versions of the standard in favor of the improved TLS standard originally released in January 1999. Now eight years later, we&#8217;re still struggling with moving past version 1.0 of TLS, something that the Council required after June 2018. Outdated versions of these protocols still exist in certain embedded devices, and are only allowed in limited scenarios.</p>


<div class="wp-block-image">
<figure class="alignright size-full"><a href="https://i0.wp.com/www.brandenwilliams.com/wp-content/uploads/2010/03/427180864_363a521a3f_m.jpg?ssl=1"><img data-recalc-dims="1" loading="lazy" decoding="async" width="161" height="240" src="https://i0.wp.com/www.brandenwilliams.com/wp-content/uploads/2010/03/427180864_363a521a3f_m.jpg?resize=161%2C240&#038;ssl=1" alt="" class="wp-image-1899"/></a><figcaption class="wp-element-caption">Freedom, by Dazzie D</figcaption></figure>
</div>


<p>Version 4 of the standard pushed the remainder of TLS version requirements to your routine vulnerability scans—prioritized by the resulting CVSS score. You will find only a single reference in the twelve requirements (it&#8217;s in the guidance section of 4.2.1) and specific guidance on outdated TLS in Appendix A2 to be used in extremely limited scenarios. Encryption is all over the standard (found on more than 40 pages), but the specifics are pushed out to a more real-time threat landscape.</p>



<p>PCI DSS requires that scan vendors properly scan for and identify vulnerable versions of SSL and TLS while coding them properly for remediation. Specifically<sup class="modern-footnotes-footnote ">1</sup>, ASVs must:</p>



<ul class="wp-block-list">
<li>Catalog protocol versions, encryption algorithms, signature signing algorithms, and key strengths,</li>



<li>Report on certificate elements like validity, authenticity, and expiration date, and</li>



<li>Check for common name mismatches (a valid certificate installed on the wrong domain/URL). </li>
</ul>


<div class="wp-block-image">
<figure class="alignleft size-full"><a href="https://i0.wp.com/www.brandenwilliams.com/wp-content/uploads/2009/11/3387985048_436dcb9375_m.jpg?ssl=1"><img data-recalc-dims="1" loading="lazy" decoding="async" width="240" height="208" src="https://i0.wp.com/www.brandenwilliams.com/wp-content/uploads/2009/11/3387985048_436dcb9375_m.jpg?resize=240%2C208&#038;ssl=1" alt="" class="wp-image-1636"/></a><figcaption class="wp-element-caption">Swiss Army Knife, by xjara69</figcaption></figure>
</div>


<p>What this means for someone complying with PCI DSS is you must be on top of your configurations, library versions, customer usage (so you don&#8217;t turn off a customer by changing an algorithm or version), internal defenses (such as proxying via TLS Peeking), and certificate validity. Small shops may be able to manage this manually, but larger shops (such as <a href="https://www.digicert.com/trust-lifecycle-manager" data-type="URL" data-id="https://www.digicert.com/trust-lifecycle-manager">DigiCert</a>) can benefit from a third party vendor to manage trust for them<sup class="modern-footnotes-footnote ">2</sup>.</p>



<p>TLS management is an IT function that is backed and checked through security policies and procedures. Operationalizing it as such will ensure you maintain high security (confidentiality/integrity) while keeping systems up and running (availability).</p>



<p>Enterprises who need to manage TLS should look for (at a minimum) vendors that can do the following:</p>



<ul class="wp-block-list">
<li>Manage the lifecycle of certificates (issuance, production, revocation), and provide guidance on re-issue where required,</li>



<li>Discover certificates that do not meet enterprise requirements (non-internal CAs, self-signed certificates, or certificates that come from public CAs you do not use) and provide automated reporting to first responders,</li>



<li>Automate installation,</li>



<li>Ensure certificates are not on the verge of expiration which may cause an outage, and</li>



<li>Cover more than just websites, but anywhere you might want to secure communication using TLS (like with VPNs or eMail).</li>
</ul>



<p>Following this guidance will ensure you do not run into challenges with your QSA over encryption, and elevating a rapid response team to address issues found in ASV scans will maintain your compliance with PCI DSS.</p>
<div>1&nbsp;&nbsp;&nbsp;&nbsp;See the <a href="https://docs-prv.pcisecuritystandards.org/Programs%20and%20Certification/Approved%20Scanning%20Vendor%20(ASV)/ASV-Program-Guide-v4.0r2.pdf">ASV Program Guide</a>.</div><div>2&nbsp;&nbsp;&nbsp;&nbsp;DigiCert provides a TLS Cert for this blog.</div>]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">6901</post-id>	</item>
	</channel>
</rss>
