<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0"><channel><title><![CDATA[Observa Essays]]></title><description><![CDATA[Essays on startup security from Rob Picard at Observa.]]></description><link>https://essays.observa.com</link><image><url>https://substackcdn.com/image/fetch/$s_!VPNi!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc727c81a-0600-4ff8-8f08-e618dc8bf0dc_400x400.png</url><title>Observa Essays</title><link>https://essays.observa.com</link></image><generator>Substack</generator><lastBuildDate>Wed, 13 May 2026 10:52:38 GMT</lastBuildDate><atom:link href="https://essays.observa.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Observa LLC]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[observa@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[observa@substack.com]]></itunes:email><itunes:name><![CDATA[Rob Picard]]></itunes:name></itunes:owner><itunes:author><![CDATA[Rob Picard]]></itunes:author><googleplay:owner><![CDATA[observa@substack.com]]></googleplay:owner><googleplay:email><![CDATA[observa@substack.com]]></googleplay:email><googleplay:author><![CDATA[Rob Picard]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[Patch Management: Software Composition Analysis]]></title><description><![CDATA[Some more specific thoughts on patching open source software libraries]]></description><link>https://essays.observa.com/p/patch-management-software-composition</link><guid isPermaLink="false">https://essays.observa.com/p/patch-management-software-composition</guid><dc:creator><![CDATA[Rob Picard]]></dc:creator><pubDate>Tue, 05 Mar 2024 19:39:48 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!yg06!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2863e178-d4ba-47dd-86dc-044eddc91089_1024x1024.webp" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I recently <a href="https://essays.observa.com/p/patch-management-philosophy-and-soliloquy">wrote about patch management</a> and my overarching philosophy to this problem. In this essay, we&#8217;ll cover more specific thoughts on patching open source software dependencies.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!yg06!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2863e178-d4ba-47dd-86dc-044eddc91089_1024x1024.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!yg06!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2863e178-d4ba-47dd-86dc-044eddc91089_1024x1024.webp 424w, https://substackcdn.com/image/fetch/$s_!yg06!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2863e178-d4ba-47dd-86dc-044eddc91089_1024x1024.webp 848w, https://substackcdn.com/image/fetch/$s_!yg06!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2863e178-d4ba-47dd-86dc-044eddc91089_1024x1024.webp 1272w, https://substackcdn.com/image/fetch/$s_!yg06!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2863e178-d4ba-47dd-86dc-044eddc91089_1024x1024.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!yg06!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2863e178-d4ba-47dd-86dc-044eddc91089_1024x1024.webp" width="728" height="728" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2863e178-d4ba-47dd-86dc-044eddc91089_1024x1024.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;normal&quot;,&quot;height&quot;:1024,&quot;width&quot;:1024,&quot;resizeWidth&quot;:728,&quot;bytes&quot;:448240,&quot;alt&quot;:&quot;An AI generated exploded view of a cherry blossom tree.&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/webp&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="An AI generated exploded view of a cherry blossom tree." title="An AI generated exploded view of a cherry blossom tree." srcset="https://substackcdn.com/image/fetch/$s_!yg06!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2863e178-d4ba-47dd-86dc-044eddc91089_1024x1024.webp 424w, https://substackcdn.com/image/fetch/$s_!yg06!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2863e178-d4ba-47dd-86dc-044eddc91089_1024x1024.webp 848w, https://substackcdn.com/image/fetch/$s_!yg06!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2863e178-d4ba-47dd-86dc-044eddc91089_1024x1024.webp 1272w, https://substackcdn.com/image/fetch/$s_!yg06!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2863e178-d4ba-47dd-86dc-044eddc91089_1024x1024.webp 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Software composition analysis (SCA) is the capability we&#8217;re talking about here. It&#8217;s about looking at the open source components used in your application, and analyzing them for security flaws.</p><p>Specifically, in this post we&#8217;re going to focus on open source libraries, not operating system packages.</p><p>In most modern startups, open source libraries are a good place to start your patch management program. You can reliably check compliance boxes using software composition analysis<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-1" href="#footnote-1" target="_self">1</a>. Bugs in open source libraries are also more likely to affect your product than bugs in operating system packages running on servers or outdated software running locally on employee workstations.</p><p><strong>Identify</strong></p><p>The first goal of our software composition analysis program is to inventory all of the open source libraries used in our product development. We want our inventory to include the following context, or have it readily available:</p><ul><li><p>Packages</p></li><li><p>Versions</p></li><li><p>Call sites</p></li><li><p>Known vulnerabilities</p></li><li><p>Available updates</p></li><li><p>Dependency hierarchy</p></li><li><p>Development or Production</p></li></ul><p>In practice, this is a wishlist and not a checklist. The tools I&#8217;ll mention later implement some of these, but aren&#8217;t perfect and the relative lift of building something with all of my desired attributes probably just isn&#8217;t worth the lift for most companies.</p><p><strong>Protect</strong></p><p>Let&#8217;s now assume that we have a list of potential updates that we could make. This is where reasonable people can decide to take very different paths.</p><p>If we automatically update all of these libraries to their latest release, we can declare &#8220;Mission Accomplished&#8221; on software composition analysis and move on. The reason I&#8217;ve never heard of a company doing this is that updates are often liable to introduce breaking changes, leading to severe bugs in your application.</p><p>In order to automatically apply updates, we need robust detection of breakage. Strong unit test coverage, integration tests, canary deployments, and automated rollbacks could give us the confidence we need to move forward with this solution. When breakage is detected, an engineer can step in to investigate the cause and remediate.</p><p>I suspect that very soon AI tooling will be available to preemptively detect breaking changes and modify our code to prevent issues.</p><p>If you think the automated approach might be feasible for your company, I encourage you to try it. I can&#8217;t say that I have personal experience with it, and it will almost certainly lead to surprising edge case problems that will require creative solutions. Please do it, solve those problems, and share what you learn. The industry would be much better off if we could just update all of our software without fear.</p><p>If you can carve-out a portion of your application dependencies where updates can be safely automated, that will reduce the load on the rest of this program and is still worthwhile. It can be expanded over time and lead you to gradually solve for edge cases instead of taking them on all at once. Start with one package and go from there.</p><p>Solving for automated library patching all at once may be too risky, and too much of an investment to be feasible. No problem! We just need a way to prioritize and address our list of available updates.</p><p>The following attributes are worth considering in a hypothetical prioritization algorithm:</p><ul><li><p>Number and severity of known vulnerabilities</p></li><li><p>Reachability of known vulnerabilities</p></li><li><p>Number of versions between current and latest</p></li><li><p>Second-order dependencies updated in recent versions</p></li><li><p>Use in development versus production</p></li><li><p>Processing of untrusted input</p></li><li><p>Exploit prediction score of known vulnerabilities (EPSS)</p></li><li><p>Likelihood of breaking changes</p></li><li><p>Level of maintainer activity</p></li><li><p>Features and improvements added in newer versions</p></li></ul><p>I don&#8217;t know of any products on the market that use all of these inputs to help you make decisions. There are a handful that use some of them, and they&#8217;re worth looking at to implement your program.</p><p>I recommend using a product for both building your inventory and prioritizing updates. Manually implementing this stuff would be a significant lift. Even a product that doesn&#8217;t cover everything I&#8217;ve mentioned can be great for starting your program.</p><p><em>Note: I don&#8217;t have a financial interest in any of these companies, or any hidden economic incentive to recommend them over other tools</em></p><p><em>I recommend several of them to Observa clients, and want to maintain positive working relationships with these companies, so I won&#8217;t share pricing information here. In my experience, none of these are significantly out of sync with the others on pricing, though some may be less expensive for a given customer than the others depending on specifics.</em></p><p><a href="https://www.coana.tech/product">Coana</a> and <a href="https://semgrep.dev/products/semgrep-supply-chain/">Semgrep Supply Chain</a> both use static analysis to determine if a known vulnerability is reachable from your application<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-2" href="#footnote-2" target="_self">2</a>.</p><p><a href="https://edgebit.io/solutions/vulnerability-management/">EdgeBit</a> uses runtime analysis to determine reachability. An agent checks to see if specific files are loaded when the application is actually running and uses this context for vulnerability prioritization or suppression. They&#8217;re also experimenting with EPSS to include exploit prediction scores as an input to prioritization.</p><p><a href="https://socket.dev/features">Socket.dev</a> is focused on a slightly different problem<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-3" href="#footnote-3" target="_self">3</a>. They do list vulnerabilities, but their primary value proposition is looking for malware in these open source libraries. Takeovers, troll packages, typosquatting, etc. I like this product and it&#8217;s a great complement to an SCA tool with reachability analysis and other prioritization features.</p><p>A shortcoming of all of these tools is that they are solely focused on the security aspects of patch management. I&#8217;d like for a tool to consider other factors, like maintainability and improvements to make this program more holistic.</p><p>Bringing this back around to practical advice for your program:</p><ol><li><p>Consider how much of this you can automate.</p></li><li><p>Choose an SCA tool that you like, implement it, and check-in on it regularly to apply the highest priority updates.</p></li></ol><p>From there you can work with your engineering team to decide what other factors you&#8217;d like to prompt package updates. This will give you a strong foundation and let you move on to other aspects of your patch management program.</p><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-1" href="#footnote-anchor-1" class="footnote-number" contenteditable="false" target="_self">1</a><div class="footnote-content"><p>SOC 2 Common Criteria: 3.2, 3.4, 4.1, 7.1, 7.2, 7.4</p><p><strong>CC 3.2</strong></p><p><em>COSO Principle 7: The entity identifies risks to the achievement of its objectives across the entity and analyzes risks as a basis for determining how the risks should be managed.</em></p><p>Point of Focus: Identifies Vulnerability of System Components &#8212; The entity identifies the vulnerabilities of system components, including system processes, infrastructure, software, and other information assets.</p><p>Point of Focus: Assesses the Significance of the Risks &#8212; The entity assesses the significance of the identified risks, including (1) determining the criticality of system components, including information assets, in achieving the objectives; (2) assessing the susceptibility of the identified vulnerabilities to the identified threats (3) assessing the likelihood of the identified risks (4) assessing the magnitude of the effect of potential risks to the achievement of the objectives; (5) considering the potential effects of unidentified threats and vulnerabilities on the assessed risks; (6) developing risk mitigation strategies to address the assessed risks; and (7) evaluating the appropriateness of residual risk (including whether to accept, reduce, or share such risks).</p><p><strong>CC 3.4</strong></p><p><em>COSO Principle 9: The entity identifies and assesses changes that could significantly impact the system of internal control.</em></p><p>Point of Focus: Assesses Changes in Threats and Vulnerabilities &#8212; The risk identification process assesses changes in (1) internal and external threats to and vulnerabilities of the components of the entity&#8217;s systems and (2) the likelihood and magnitude of the resultant risks to the achievement of the entity&#8217;s objectives.</p><p><strong>CC 4.1</strong></p><p><em>COSO Principle 16: The entity selects, develops, and performs ongoing and/or separate evaluations to ascertain whether the components of internal control are present and functioning.</em></p><p>Point of Focus: Considers Different Types of Ongoing and Separate Evaluations &#8212; Management uses a variety of ongoing and separate risk and control evaluations to determine whether internal controls are present and functioning. Depending on the entity&#8217;s objectives, such risk and control evaluations may include first- and second-line monitoring and control testing, internal audit assessments, compliance assessments, resilience assessments, vulnerability scans, security assessment, penetration testing, and third-party assessments.</p><p><strong>CC 7.1</strong></p><p><em>To meet its objectives, the entity uses detection and monitoring procedures to identify (1) changes to configurations that result in the introduction of new vulnerabilities, and (2) susceptibilities to newly discovered vulnerabilities.</em></p><p>Point of Focus: Conducts Vulnerability Scans &#8212; The entity conducts infrastructure and software vulnerability scans designed to identify potential vulnerabilities or misconfigurations on a periodic basis and after significant changes are made to the environment. Action is taken to remediate identified deficiencies in a timely manner to support the achievement of the entity&#8217;s objectives.</p><p><strong>CC 7.2</strong></p><p><em>The entity monitors system components and the operation of those components for anomalies that are indicative of malicious acts, natural disasters, and errors affecting the entity's ability to meet its objectives; anomalies are analyzed to determine whether they represent security events.</em></p><p>Point of Focus: Implements Detection Policies, Procedures, and Tools &#8212; Detection policies, procedures, and tools are defined and implemented on infrastructure and software to identify potential intrusions, inappropriate access, and anomalies in the operation of or unusual activity on systems. Procedures may include (1) a defined governance process for security event detection and management; (2) use of intelligence sources to identify newly discovered threats and vulnerabilities; and (3) logging of unusual system activities.</p><p><strong>CC 7.4</strong></p><p><em>The entity responds to identified security incidents by executing a defined incident-response program to understand, contain, remediate, and communicate security incidents, as appropriate.</em></p><p>Point of Focus: Remediates Identified Vulnerabilities &#8212; Identified vulnerabilities are remediated through the development and execution of remediation activities.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-2" href="#footnote-anchor-2" class="footnote-number" contenteditable="false" target="_self">2</a><div class="footnote-content"><p>Here&#8217;s a blurb Coana was kind enough to share with me: </p><blockquote><p>Coana uses reachability analysis to gain a contextual understanding of the vulnerabilities in your open source components. This allows the tool to remove the approx. 90% of the vulnerabilities that a traditional SCA tool reports, since they are irrelevant false positive alerts that present no actual security risk. Coana has been built by members of a leading academic research group, and our reachability analysis technique is among the most sophisticated on the market. <a href="https://www.coana.tech/resources/article/what-is-sca-with-reachability-analysis">This blog post explains how it works</a>.</p><p>&#8212; Anders S&#248;ndergaard, Co-founder and CEO at Coana</p></blockquote></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-3" href="#footnote-anchor-3" class="footnote-number" contenteditable="false" target="_self">3</a><div class="footnote-content"><p>Socket kindly shared this blurb with me:</p><blockquote><p>In addition to catching known vulnerabilities, Socket uses LLMs to detect zero-day open source supply chain risks like malware, typosquatting, hijacked packages, obfuscated code, privileged APIs, and more. The GitHub app (which you can trial for free) enables protection on all updates and new dependencies added in PRs, blocking these risks before they land in your projects. Socket can be a full replacement to traditional SCA, or a compliment to existing tools.</p><p>&#8212; Sarah Gooding, Head of Content Marketing at Socket</p></blockquote><p></p></div></div>]]></content:encoded></item><item><title><![CDATA[Patch Management: Philosophy and Soliloquy]]></title><description><![CDATA[The first post in a series on how startups keep third-party software up-to-date and secure.]]></description><link>https://essays.observa.com/p/patch-management-philosophy-and-soliloquy</link><guid isPermaLink="false">https://essays.observa.com/p/patch-management-philosophy-and-soliloquy</guid><dc:creator><![CDATA[Rob Picard]]></dc:creator><pubDate>Thu, 22 Feb 2024 18:17:25 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/e1508431-93a7-4af6-b47e-17b1ccda45b4_1024x1024.webp" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Patch management is the process of updating software. Software developers write updates, they release patches, you apply those patches, and your software is up-to-date.</p><p>Managing updates for the apps on my own personal phone is complicated. There is no company too small to run into overwhelming complexity as they try to manage the patches to all manner of software being used across their environment.</p><p>This is the first in a series of essays diving deep on how startups keep their software up-to-date. In this post I&#8217;ll talk about my general philosophy toward patch management.</p><h1>Important, not urgent</h1><p>Patch management is often a low priority for companies, for very reasonable reasons:</p><ol><li><p>It is a complex problem with a relatively high cost to get right.</p></li><li><p>The benefit of applying a given patch is usually minimal at best.</p></li><li><p>The risk of an update breaking important software is greater than zero.</p></li></ol><p>Patch management is a typical example of a problem that is &#8220;Important, not urgent.&#8221; Those sorts of problems are hard to solve when you have plenty of &#8220;Important and urgent&#8221; problems on the list.</p><h2>Maybe a little urgency, as a treat</h2><p>These are also the sorts of problems I find really interesting, because they are great candidates for setting aside time to &#8220;solve it right, once and for all&#8221; and then forgetting that other people have such problems.</p><p>Patch management gets increasingly difficult to solve as time goes on. Systems become more complex, human behavior becomes canon, and the activation energy required to make changes only grows.</p><p>For this reason, I would argue that there is at least some urgency to solving patch management.</p><h2>Nuanced, but important</h2><p>Security vulnerabilities are sometimes among the bugs fixed by software updates. Leaving these in place can increase the risk of a successful data breach or other abuse by bad actors.</p><p>With that said, the vast majority of vulnerabilities reported in software packages for a given business are not exploitable in any meaningful way. There is an epidemic of noise coming from software composition analysis tools which provide very little actionable data.</p><p>Traditionally, you might prioritize patching areas of your IT infrastructure that are more likely to be exploitable, such as &#8220;internet-facing&#8221; systems. The typical modern cloud-based startup has an architecture that is so far removed from the previous generation of production IT that concepts such as &#8220;internet-facing&#8221; systems are barely recognizable.</p><p>If all of your traffic is run through AWS-managed load balancers to AWS-managed servers running AWS-managed virtual machines and AWS-managed Kubernetes clusters, which is finally running a Docker container with your code, do you have any &#8220;internet-facing&#8221; systems? Who knows!</p><p>Does an outdated version of Vim in the Docker container on the Kubernetes cluster run by the hypervisor, on the server behind the load balancer actually put you at any risk at all?</p><p>The best answer I have today is &#8220;No, probably not.&#8221;</p><p>The world is full of nuance though, and these are incredibly complex systems. To completely ignore the problem of patching software in these cases would leave us with no margin for error. No buffer to account for the fact that unexpected things happen all the time.</p><p>I&#8217;ve been surprised to find vulnerabilities in outdated packages lead to real exploitable issues with minimal required effort. If I had let my overconfidence run wild, I wouldn&#8217;t have even checked and the risk of an incident would have been higher.</p><p>The current state of vulnerability reporting in patch management programs is flawed. We can accept that and also accept the fact that outdated software does lead to increased risk of exploitable vulnerabilities.</p><p>It&#8217;s important to stay humble.</p><h1>Patch &#8800; Vulnerability</h1><p>Patch management as a program is sometimes viewed as a subset of vulnerability management<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-1" href="#footnote-1" target="_self">1</a>. In my experience, patch management is categorically different. It has a tangible impact on security, but it does not belong to the security practitioner. It&#8217;s a program with responsibility and rewards distributed across departments and individual members of staff.</p><p>Security doesn&#8217;t get to own the concept of &#8220;keeping software up-to-date.&#8221;</p><p>The process of updating third-party software involves a completely different risk profile, prioritization, different parts of the company, and different action items from vulnerability management.</p><p>If you get a penetration test done, and it results in a high severity cross-site scripting finding, you&#8217;ll want to ingest that into a ticket workflow, share the context with one or more engineers, help them develop a fix, and then re-test the issue to verify the fix.</p><p>You start from a vulnerability, and manage that item through a workflow according to your organization&#8217;s SLAs.</p><p>The scale and complexity of the updates available across your environment requires a different approach for patch management. You start from the strategic question of how you want to update categories of software, how each can be automated, how different inputs will impact prioritization, how decisions can be delegated, and what the process looks like for handling exceptions.</p><p>Patches are cattle, vulnerabilities are pets.</p><p>A vulnerability reported in a package that you use is unlikely to affect your security posture and it does not automatically warrant individual attention. The marginal risk of that vulnerability affecting you should be addressed wholesale alongside the many other updates you have to manage.</p><p>When you have exceptions to your usual update strategy, you can use your vulnerability management workflow to investigate and address those issues on an individual basis.</p><p>Good patch management reduces the chance that a real vulnerability is hidden in the noise. But patches aren&#8217;t vulnerabilities and managing them requires a different approach.</p><h1>A patchwork quilt</h1><p>Your overall patch management strategy should be composed of individual strategies for different kinds of updates. Some common examples:</p><ul><li><p>Production operating systems</p></li><li><p>Production operating system packages</p></li><li><p>Production infrastructure applications</p></li><li><p>Self-hosted third-party applications</p></li><li><p>Open source application dependencies</p></li><li><p>Company-owned devices</p></li><li><p>Employee-owned devices</p></li><li><p>Network devices</p></li><li><p>Desktop application extensions</p></li><li><p>Third-party CI/CD workflows</p></li></ul><p>I&#8217;ll write more about all of these next. For now though, I&#8217;ll just reiterate a few main points:</p><ol><li><p>It&#8217;s easier to solve patch management the sooner you do it.</p></li><li><p>Patch management is important, despite the low quality noise endemic to the field.</p></li><li><p>Patch management and vulnerability management are different problems.</p></li></ol><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-1" href="#footnote-anchor-1" class="footnote-number" contenteditable="false" target="_self">1</a><div class="footnote-content"><p><a href="https://www.microsoft.com/en-us/security/business/security-101/what-is-vulnerability-management">https://www.microsoft.com/en-us/security/business/security-101/what-is-vulnerability-management</a></p><p></p></div></div>]]></content:encoded></item><item><title><![CDATA[The separation of work and play]]></title><description><![CDATA[Mixing work and personal contexts can provide a better employee experience and increased security risk. Here we look at specific scenarios, risks, and available controls to help startups find balance.]]></description><link>https://essays.observa.com/p/work-and-play</link><guid isPermaLink="false">https://essays.observa.com/p/work-and-play</guid><dc:creator><![CDATA[Rob Picard]]></dc:creator><pubDate>Thu, 01 Feb 2024 17:47:16 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/bd73e37b-bc38-4f02-bf3d-42cfab305a1e_1024x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>An ever present topic in the risk assessment of a startup is some version of staff using work machines for personal things, and vis-a-versa. I want to cover some of the common manifestations of this pattern, and my approach for evaluating the risk.</p><h1>Risk scenarios</h1><h2>Personal email on work machines</h2><p>Email was the second most prevalent vector for breaches in the 2023 Verizon DBIR<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-1" href="#footnote-1" target="_self">1</a>. It is also ~necessary for everyone to have it on their work machines.</p><p>Having personal email on a work machine increases the risk of an email-based attack succeeding against a startup. It&#8217;s not obvious why this is the case, but there are some specific risks that apply.</p><p>Corporate email systems can implement detection and prevention controls for malicious emails. These same controls can&#8217;t be implemented on personal accounts. This means you have to rely on built-in spam filters, which are far from perfect for this use case.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!R23O!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb464091d-7b2f-4159-a42e-f770b034538e_1865x847.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!R23O!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb464091d-7b2f-4159-a42e-f770b034538e_1865x847.png 424w, https://substackcdn.com/image/fetch/$s_!R23O!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb464091d-7b2f-4159-a42e-f770b034538e_1865x847.png 848w, https://substackcdn.com/image/fetch/$s_!R23O!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb464091d-7b2f-4159-a42e-f770b034538e_1865x847.png 1272w, https://substackcdn.com/image/fetch/$s_!R23O!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb464091d-7b2f-4159-a42e-f770b034538e_1865x847.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!R23O!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb464091d-7b2f-4159-a42e-f770b034538e_1865x847.png" width="1456" height="661" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b464091d-7b2f-4159-a42e-f770b034538e_1865x847.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:661,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:88734,&quot;alt&quot;:&quot;Diagram illustrating the fact that personal email accounts do not have the protection of an email security platform used for the company's corporate inboxes.&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Diagram illustrating the fact that personal email accounts do not have the protection of an email security platform used for the company's corporate inboxes." title="Diagram illustrating the fact that personal email accounts do not have the protection of an email security platform used for the company's corporate inboxes." srcset="https://substackcdn.com/image/fetch/$s_!R23O!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb464091d-7b2f-4159-a42e-f770b034538e_1865x847.png 424w, https://substackcdn.com/image/fetch/$s_!R23O!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb464091d-7b2f-4159-a42e-f770b034538e_1865x847.png 848w, https://substackcdn.com/image/fetch/$s_!R23O!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb464091d-7b2f-4159-a42e-f770b034538e_1865x847.png 1272w, https://substackcdn.com/image/fetch/$s_!R23O!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb464091d-7b2f-4159-a42e-f770b034538e_1865x847.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Personal inboxes also receive different types of emails than corporate inboxes on a normal basis. This expands the range of plausible pretexts which can lead to a malicious email being acted upon from a corporate device.</p><p>Sometimes attackers will compromise one person&#8217;s email account and respond to old conversations in their inbox with attempts to compromise the counterparties. The pretext of the existing thread makes the attempts more convincing. This is called business email compromise (BEC).</p><p>Checking personal email from a work device increases the number of existing conversations and counterparties who could be compromised and used as a vector for attacking corporate accounts through BEC.</p><h2>Work email on personal machines</h2><p>When someone logs into corporate email accounts from a personal device, they expose the contents of that account to software running on their personal computer.</p><p>Malware and malicious browser extensions can compromise sensitive work emails, and this access can even be leveraged to gain access to other systems (e.g. anything using Login with Google).</p><p>Enterprise security controls like antimalware, endpoint detection and response, secure DNS, application allowlisting, and more aren&#8217;t running on personal computers and will not have any ability to detect or prevent an attack.</p><p>People typically have their personal email on their personal computers as well. This presents a direct line of attack to corporate systems which completely bypasses all detective and preventive controls.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!-Hs2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3346597f-47f1-4529-b3c3-d6a213e329f1_1865x2277.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!-Hs2!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3346597f-47f1-4529-b3c3-d6a213e329f1_1865x2277.png 424w, https://substackcdn.com/image/fetch/$s_!-Hs2!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3346597f-47f1-4529-b3c3-d6a213e329f1_1865x2277.png 848w, https://substackcdn.com/image/fetch/$s_!-Hs2!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3346597f-47f1-4529-b3c3-d6a213e329f1_1865x2277.png 1272w, https://substackcdn.com/image/fetch/$s_!-Hs2!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3346597f-47f1-4529-b3c3-d6a213e329f1_1865x2277.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!-Hs2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3346597f-47f1-4529-b3c3-d6a213e329f1_1865x2277.png" width="1456" height="1778" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3346597f-47f1-4529-b3c3-d6a213e329f1_1865x2277.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1778,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:191703,&quot;alt&quot;:&quot;A diagram extending the previous one, showing that personal devices do not have the same anti-malware protections as corporate devices.&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="A diagram extending the previous one, showing that personal devices do not have the same anti-malware protections as corporate devices." title="A diagram extending the previous one, showing that personal devices do not have the same anti-malware protections as corporate devices." srcset="https://substackcdn.com/image/fetch/$s_!-Hs2!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3346597f-47f1-4529-b3c3-d6a213e329f1_1865x2277.png 424w, https://substackcdn.com/image/fetch/$s_!-Hs2!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3346597f-47f1-4529-b3c3-d6a213e329f1_1865x2277.png 848w, https://substackcdn.com/image/fetch/$s_!-Hs2!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3346597f-47f1-4529-b3c3-d6a213e329f1_1865x2277.png 1272w, https://substackcdn.com/image/fetch/$s_!-Hs2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3346597f-47f1-4529-b3c3-d6a213e329f1_1865x2277.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2>Personal GitHub in work organizations</h2><p>When a new employee joins an organization that uses GitHub, it is common for them to have their personal GitHub account added to the organization&#8217;s account. It is less common for them to create a new GitHub account dedicated to that particular company. GitHub recommends that people have one account used for both personal and work contexts<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-2" href="#footnote-2" target="_self">2</a>.</p><h3>Bad passwords and SMS MFA</h3><p>Any account that requires a password is liable to have an insecure password. Password reuse is common, and old passwords are often leaked in major data breaches<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-3" href="#footnote-3" target="_self">3</a>.</p><p>Some accounts may not have MFA enabled, and those that do may use less secure methods such as SMS codes.</p><p>Insecure passwords and MFA configurations are risks that apply equally to personal GitHub accounts and accounts created specifically for an organization. There doesn&#8217;t seem to be anything special about personal accounts that make these risks more pressing.</p><h3>Old SSH keys</h3><p>You can also authenticate to GitHub with SSH keys. Each user has the ability to create as many SSH keys as they&#8217;d like. It&#8217;s common practice to create one per device.</p><p>The upshot here is that personal GitHub accounts have many SSH keys, including on old servers and devices that are long forgotten. It can even include servers and devices from previous employers. When this account is granted access to your organization, those keys all have access now too, with no second factor.</p><p>Requiring employees to create separate accounts for work ensures that you're starting from a clean slate and you won't have this long tail of SSH keys being granted access to your organization.</p><h3>Personal access tokens</h3><p>The third authentication scheme for GitHub is personal access tokens. There are two types: classic and fine-grained. Neither of these requires a second factor to authenticate, regardless of the normal account settings.</p><p>Classic personal access tokens grant the holder access to everything the associated user can access. When the user is added to a new organization, existing tokens now have the same permissions. These tokens are often used in scripts running in any number of places (e.g. CI/CD). Requiring new work-only accounts doesn&#8217;t carry the risk of old tokens being used to access your organization&#8217;s assets.</p><p>Fine-grained personal access tokens have the benefit of additional scope limitations and security requirements. They are limited to specific users or organizations, so adding a personal account to your organization won&#8217;t result in old fine-grained tokens having access to your organization. Any tokens will have to be created specifically for your organization, and the associated risk applies to both personal accounts and new work accounts.</p><h3>Dotfiles and Codespaces</h3><p>If your organization uses GitHub Codespaces, users can choose to automatically install their own dotfiles in Codespaces<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-4" href="#footnote-4" target="_self">4</a>. GitHub lets them choose an arbitrary repository where it will look for dotfiles to install whenever a new Codespace is created.</p><p>Dotfiles have the ability to run arbitrary scripts. Some users choose a personal repository where they keep their preferred dotfile configurations. An attacker who can modify the personal repository will have the ability to run arbitrary code in your Codespaces. Codespaces often have access to private code, and sometimes live systems. This can be used to advance the attack into the organization.</p><p>GitHub only allows selection of a repository owned by the user<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-5" href="#footnote-5" target="_self">5</a>. This means that requiring a new work account for your organization reduces the risk of a personal repository with different contributors, access patterns, etc. being used to access your resources.</p><p>Some of the controls we will discuss later in this essay apply to organization resources, but not personal repositories. Using dotfiles in this way bridges the gap and allows an attacker to pivot from the latter to the former.</p><h3>GitHub summary</h3><p>These risks are more potent when you add existing GitHub accounts versus asking new team members to create new accounts:</p><ul><li><p>Old SSH keys</p></li><li><p>Personal access tokens (classic)</p></li><li><p>Malicious dotfiles run in Codespaces</p></li></ul><p>These risks are about the same either way:</p><ul><li><p>Bad passwords and MFA</p></li><li><p>Personal access tokens (fine-grained)</p></li></ul><p>We&#8217;ll discuss the controls available through GitHub Enterprise in a bit, which can change the conclusion a bit if that&#8217;s an option for you.</p><h1>Potential controls</h1><h2>SWG and CASB</h2><p>Secure web gateways (SWG) and cloud access security brokers (CASB) can be used to enforce granular controls on which accounts staff can access from their work machines. They essentially work by proxying all web traffic and blocking attempts to access email or file-sharing accounts that are not explicitly approved.</p><p>These tools can prevent access to personal email from work machines, reducing the risk of social engineering or malware attacks which would otherwise be caught by work email filters. They can also block attempts to access malicious websites or certain content categories like illegal streaming or file-sharing sites.</p><p>The downside of an SWG is that it will be perceived as heavy-handed and intrusive by some of your colleagues. Some of these tools proxy traffic through a remote server, resulting in increased latency for web traffic.</p><h2>Conditional access</h2><p>Conditional access is a way of only allowing access to corporate resources if certain conditions regarding the attempt are true. You can restrict IP addresses, enforce that only corporate devices are used, and even that antivirus software is running or the browser and operating system are up to date.</p><p>Conditional access can be used to prevent access to company email accounts from personal devices. This requires a slightly more advanced IDP / SSO / MDM setup than many startups have, but is a great security control.</p><p>There are many benefits to conditional access with more or less friction added for end users, but for the purposes of this essay if you have the tools to set it up, it&#8217;s low friction for users to require that you come from a corporate device.</p><p>You can choose to make exceptions for mobile phones, since they aren&#8217;t typically vulnerable to the same kinds of malware as desktop / laptop workstations. With mobile phones the primary risk is that terminated employees may retain access to corporate email.</p><h2>GitHub</h2><p>Many of the security controls available to safely implement GitHub&#8217;s recommendation of granting personal accounts access to your organization require GitHub Enterprise.</p><p>The Enterprise plan costs $21 / month / user versus $4 / month / user on the Team plan at the time of writing<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-6" href="#footnote-6" target="_self">6</a>. It includes both the ability to require separate SSO login on a personal account when accessing work repositories, and the ability to enable Enterprise Managed Users, which are fully owned corporate accounts provisioned from the identity provider.</p><div><hr></div><p>It would be a better fit to have the extra login setting available on the Team plan, and reserve Enterprise Managed Users for the Enterprise plan.</p><p>See my essay on this general subject:</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;14d069db-1670-4156-a05c-22986a755b61&quot;,&quot;caption&quot;:&quot;Security people often frown upon the practice of charging extra for security features in B2B software. The most infamous example is the &#8220;SSO tax&#8221; where companies either explicitly charge extra for SSO, or they bundle it into the more expensive bespoke enterprise plans.&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;A balanced approach to premium security features&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:197078957,&quot;name&quot;:&quot;Rob Picard&quot;,&quot;bio&quot;:&quot;Startup security guy. I run Observa, a startup security consulting firm.&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/98403da4-82bf-4875-9659-36ecc6f2814b_2048x1360.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2024-01-12T17:21:53.573Z&quot;,&quot;cover_image&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0eab2f43-9960-4134-ab4d-9cb5c79bdad7_1024x1024.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://essays.observa.com/p/a-balanced-approach-to-premium-security&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:140624444,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:0,&quot;comment_count&quot;:0,&quot;publication_id&quot;:null,&quot;publication_name&quot;:&quot;Observa Essays&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc727c81a-0600-4ff8-8f08-e618dc8bf0dc_400x400.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div><hr></div><h3>Summary of available GitHub controls</h3><ul><li><p><strong>Require SSO to access corporate resources from personal accounts</strong></p><ul><li><p><em>Availability</em>: GitHub Enterprise</p></li><li><p><em>Gaps</em>: Personal repositories can be used for dotfiles on Codespaces, SSH keys, classic personal access tokens.</p></li></ul></li><li><p><strong>Enterprise Managed Users</strong></p><ul><li><p><em>Availability</em>: GitHub Enterprise</p></li><li><p><em>Gaps</em>: Stolen cookies from malware, stolen personal access tokens.</p></li></ul></li><li><p><strong>IP Allowlisting</strong></p><ul><li><p><em>Availability</em>: GitHub Enterprise</p></li><li><p><em>Gaps</em>: Malware accessing GitHub from compromised endpoints (&#8220;living off the land&#8221;)</p></li></ul></li><li><p><strong>Require MFA to be added to the organization</strong></p><ul><li><p><em>Availability</em>: All organizations</p></li><li><p><em>Gaps</em>: Insecure SMS MFA, SSH keys, classic personal access tokens</p></li></ul></li><li><p><strong>Restrict access from classic personal access tokens</strong></p><ul><li><p><em>Availability</em>: All organizations</p></li><li><p><em>Gaps</em>: SSH keys created by classic personal access tokens will still work<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-7" href="#footnote-7" target="_self">7</a>. Many organizations use classic personal access tokens out of necessity and can not disable them across the board.</p></li></ul></li></ul><p>The most secure configuration for an organization with GitHub Enterprise would be to use Enterprise Managed Users and an IP allowlist. This would require any attacker to steal session cookies or personal access tokens and execute the attack from an endpoint within the IP allowlist.</p><p>The most secure configuration for an organization without GitHub Enterprise would be:</p><ul><li><p>Require MFA</p></li><li><p>Restrict access from classic personal access tokens if possible</p></li><li><p>Ask new team members to create a new account for their work context; or</p></li><li><p>Ask new team members to review their account&#8217;s SSH keys and classic personal access tokens before being added to the organization and not to use personal dotfiles repositories for Codespaces.</p></li></ul><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-1" href="#footnote-anchor-1" class="footnote-number" contenteditable="false" target="_self">1</a><div class="footnote-content"><p>https://www.verizon.com/business/resources/reports/dbir/</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-2" href="#footnote-anchor-2" class="footnote-number" contenteditable="false" target="_self">2</a><div class="footnote-content"><p>https://web.archive.org/web/20240130175704/https://docs.github.com/en/account-and-profile/setting-up-and-managing-your-personal-account-on-github/managing-your-personal-account/merging-multiple-personal-accounts</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-3" href="#footnote-anchor-3" class="footnote-number" contenteditable="false" target="_self">3</a><div class="footnote-content"><p>https://haveibeenpwned.com/</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-4" href="#footnote-anchor-4" class="footnote-number" contenteditable="false" target="_self">4</a><div class="footnote-content"><p>https://web.archive.org/web/20240129143139/https://docs.github.com/en/codespaces/setting-your-user-preferences/personalizing-github-codespaces-for-your-account#dotfiles</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-5" href="#footnote-anchor-5" class="footnote-number" contenteditable="false" target="_self">5</a><div class="footnote-content"><p>I didn&#8217;t find this asserted in the documentation, but it appears to be the case when I tested it out in practice.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-6" href="#footnote-anchor-6" class="footnote-number" contenteditable="false" target="_self">6</a><div class="footnote-content"><p>https://web.archive.org/web/20240201110626/https://github.com/pricing</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-7" href="#footnote-anchor-7" class="footnote-number" contenteditable="false" target="_self">7</a><div class="footnote-content"><p>https://web.archive.org/web/20240120165937/https://docs.github.com/en/organizations/managing-programmatic-access-to-your-organization/setting-a-personal-access-token-policy-for-your-organization#restricting-access-by-personal-access-tokens-classic</p><p></p></div></div>]]></content:encoded></item><item><title><![CDATA[A balanced approach to premium security features]]></title><description><![CDATA[Not all SSO taxes are created equal. There's middle ground to be found. Software businesses can use some security features to segment customers as long as they have an accurate model of what's important to customers of different sizes and leave room for flexibility.]]></description><link>https://essays.observa.com/p/a-balanced-approach-to-premium-security</link><guid isPermaLink="false">https://essays.observa.com/p/a-balanced-approach-to-premium-security</guid><dc:creator><![CDATA[Rob Picard]]></dc:creator><pubDate>Fri, 12 Jan 2024 17:21:53 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/0eab2f43-9960-4134-ab4d-9cb5c79bdad7_1024x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Security people often frown upon the practice of charging extra for security features in B2B software. The most infamous example is the &#8220;SSO tax&#8221; where companies either explicitly charge extra for SSO, or they bundle it into the more expensive bespoke enterprise plans.</p><p>The objection is typically focused on guilting or shaming companies into providing a certain set of features to all of their customers. This ethical frame isn&#8217;t an effective tool for persuasion.</p><p>B2B software businesses have an interesting problem. It is often difficult to quantify the value they provide to a given customer.&nbsp;</p><p>Some customers get more value from their software than others. This means that they&#8217;d be willing to pay more, and the business selling that software would like to charge them more as a result. Fair enough.</p><p>Usage-based pricing is one way to solve this, but not every product has a measurable usage metric that directly correlates with value and willingness-to-pay.</p><p>Seat-based pricing is a classic solution. The problem is that the number of people logging into the product doesn&#8217;t always correlate to value either. Software used exclusively by the CFO might provide a lot more value to a public company than a Series B startup.</p><p>You could ask companies how much money they make, and then adjust your price based on the answer. This would be a pretty efficient solution to customer segmentation, but is typically received poorly.</p><p>The premise is that companies make money, and the more money they make the more value they get from improvements. Your tool improves them, so they should pay accordingly. This strikes me as true and reasonable.</p><p>It also subjectively feels unfair. Possibly because the same formula applied to consumer products wouldn&#8217;t support the same conclusion. Elon Musk doesn&#8217;t get more value buying chips at the supermarket than me. On the other hand, SpaceX would get more value from most B2B software than my small consulting business.</p><p>Software businesses get creative to find metrics that correlate with value provided, and feel subjectively fair to buyers. When done right, it convincingly mimics usage-based pricing even though the metric doesn&#8217;t directly measure usage per se.</p><p>In the security world, static analysis tools often charge based on some version of &#8220;number of people who contributed to any of your git repositories last month.&#8221; This feels like usage-based pricing, because git commits tend to get analyzed by static analysis tools and more contributors probably correlates to more commits.</p><p>Instead of charging by number of commits, they insert a layer of abstraction. They don&#8217;t want to charge a business with one engineer more because that engineer is committing twice as much, and causing them to run twice as many scans. They want to charge more for companies that make more money.</p><p>The number of contributors is a proxy for how much money the company makes. It&#8217;s a good proxy too, at least for the kinds of companies that buy static analysis tools<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-1" href="#footnote-1" target="_self">1</a>. Clever!</p><p>What happens if you don&#8217;t have a clever proxy that feels fair and correlates to how much money your customer makes?</p><p>Alternatively, what happens if you do have a metric like number of users, but it&#8217;s only one dimension of the value you provide. Some customers with 100 users actually make more money than other customers with 100 users.</p><p>You&#8217;ll probably turn to Good, Better, Best pricing. You segment your customers based on how much money they&#8217;re willing to pay you, and identify which features are important to each group, and less important to the groups with less buying power.</p><p>This is not a very elegant solution. Even so, it can solve the dual problem of correlating to value provided and feeling subjectively fair; the bigger company is paying more, but they have a longer feature list.</p><p>The cost of providing that longer feature list to everyone is usually negligible, but it would remove the feeling of fairness that enables you to close the bigger deals. The art is in finding features that smaller customers don&#8217;t really care about, so that you can make the bigger customers feel good without degrading your product for everyone else.</p><p>There are at least two ways this can go wrong:</p><ol><li><p>The most valuable features for customers of any size are intentionally paywalled, meaning everyone but the enterprise customers has an artificially degraded product experience (and knows it).</p></li><li><p>The company is wrong about what smaller customers care about and unintentionally withholds important features, resulting in the same negative outcome for most of their customers.</p></li></ol><p>These failure modes are at the core of the SSO tax debate. Software companies often believe that only enterprise customers care about security features like SSO. Security people at smaller companies believe SSO is important and don&#8217;t like important features being artificially withheld<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-2" href="#footnote-2" target="_self">2</a>.</p><p>These companies aren&#8217;t intentionally withholding important security measures from smaller companies. They aren&#8217;t saying things like &#8220;passwords are only hashed if you&#8217;re on the Best plan, don&#8217;t forget to upgrade to the salted hash add-on.&#8221; There&#8217;s a discrepancy between their model of the world and that of the security people.</p><p>This isn&#8217;t an ethical issue, it&#8217;s a matter of recalibrating our models. We can find some security features that are valuable to customers of any size, and some that really only provide value to certain groups.</p><p>Keep in mind, the goal here is to make the companies paying more feel like they&#8217;re getting a fair shake. The goal is not to generate revenue directly from these features.</p><p>Here I&#8217;ll provide a bunch of specific examples, and my personal perspective on how they fit into this conversation.</p><p><em>Sign-in With Google</em></p><p>Everyone finds this valuable. It&#8217;s amazing for security as well. Google is highly configurable, and even if it&#8217;s slightly inconvenient to have some tools on a different provider like Okta and some using Google, it&#8217;s a reasonable level of holistic security.</p><p><em>Sign in with Slack, GitHub, etc.</em></p><p>These tools have SSO and similar taxes themselves, so they aren&#8217;t as secure as the ability to sign-in with Google. If supported, they should be optional alongside Google.</p><p><em>SAML SSO</em></p><p>Many companies put this behind the Best plan but the customers in Better want it too. It&#8217;s reasonable not to include it in the Good tier though.</p><p><em>Configure available login methods</em></p><p>Any time you support multiple login methods, you should give administrators the ability to enable or disable them. Otherwise it negates the benefits of having secure options, because the bad options are still available to attackers. This isn&#8217;t a good candidate for gating behind higher tiers.</p><p><em>SCIM Provisioning</em></p><p>Fewer companies in Better want this than SAML SSO. You can probably get away with gating it in the Best tier, and privately granting any Better company&#8217;s request for this feature to be turned on. Nothing wrong with providing it to both tiers explicitly though.</p><p><em>Single Logout</em></p><p>This is a feature that isn&#8217;t as commonly implemented. Any tier with SAML SSO should include this as well if you do build it. Make sure to list it as a separate, adjacent feature to capitalize on your work.</p><p><em>Audit Trail</em></p><p>Companies in the Better and Best tiers may care about this during purchasing. Companies in the Good tier will care about this if something unusual happens to their account.</p><p>You could leave this off of the Good tier, but still record all of the events. You probably want to do this anyway so that someone upgrading can see historical data as well. If a customer suspects an issue and writes in, support should have the ability to enable the feature for a month.</p><p>A stronger way to segment within this feature is to increase the retention period for each successive tier. One week for Good, two months for Better, three years for Best. Those numbers are arbitrary, but you get the idea.</p><p><em>Audit Trail Export to SIEM</em></p><p>This is a great candidate for Best-only customers. Customers below Best have a SIEM, but they&#8217;re far less likely to be in a position to use the data from all of their SaaS apps. This is just lower on their priority list than other SIEM tasks.</p><p><em>IP Allowlisting</em></p><p>If you offer the ability for customers to set an IP allowlist, it&#8217;s possible to gate this behind Better or Best, but it&#8217;s another one you should flex on if a company requests it. It does risk generating some negative feelings though, so the safe move would be to offer it to everyone.</p><p><em>Role Based Access Control (RBAC)</em></p><p>Your application should have some concept of roles in all tiers. This depends on the specifics of how people typically use your application. Generally though, not everyone should be able to do everything.</p><p>You can allow enterprise customers in the Best tier to build their own roles with customizable permissions.</p><p><em>Passwordless (WebAuthn)</em></p><p>WebAuthn provides phishing-resistant multi-factor authentication. It also lets customers login without passwords (or magic links).</p><p>This is just a far better login experience in addition to being much more secure. This should be the standard for all products, everywhere.</p><p>Okay, with all of those examples, what do our tiers look like?</p><p><em>Good</em></p><ul><li><p>Sign-in With Google, Slack, GitHub</p></li><li><p>Configure available login methods</p></li><li><p>Audit trail with 7 days of history</p></li><li><p>IP allowlisting</p></li><li><p>Passwordless WebAuthn</p></li><li><p>RBAC with built-in roles</p></li></ul><p><em>Better</em></p><ul><li><p>Everything in Good</p></li><li><p>SAML SSO (Single Sign On)</p></li><li><p>SAML SLO (Single Logout)</p></li><li><p>Audit trail with 60 days of history</p></li></ul><p><em>Best</em></p><ul><li><p>Everything in Better</p></li><li><p>SCIM Provisioning</p></li><li><p>Audit trail with 3 years of history</p></li><li><p>Export audit trail to SIEM</p></li><li><p>Customizable RBAC</p></li></ul><p>Reasonable!</p><p>If you listen to feedback from customers and adjust over time, you&#8217;ll maintain a segmentation that roughly approximates your customers' mental models.</p><p>There will always be edge cases. Some small companies care a lot more about security than companies an order of magnitude larger. Since these features are being withheld arbitrarily, it&#8217;s understandable that they may be frustrated with you.</p><p>You can bundle advanced security features together as a separate line item in your sales process and make them available to anyone who wants it for an additional fee. Then you can offer it as included for the higher tiers.</p><p>For example:</p><p><em>Advanced Access Security</em></p><ul><li><p>SAML SSO (Single Sign On)</p></li><li><p>SAML SLO (Single Logout)</p></li><li><p>Audit trail with 60 days of history</p></li><li><p>SCIM Provisioning<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-3" href="#footnote-3" target="_self">3</a></p></li></ul><p>Now, the Better and Best plans can have a big line item that says Advanced Access Security is included.</p><p>The shelf price of this package should be high enough that Better and Best companies feel like they&#8217;re getting a fair deal by having it included. It doesn&#8217;t have to be high in practice for the Good companies though.</p><p>You can aggressively discount the Advanced Access Security product for smaller companies that care a lot about security, while maintaining a sense of fairness among all of your customers. You could even have a note on your pricing page saying small businesses are eligible for large discounts on the package.</p><p>The risk is that some customers will see all of this math as advanced tomfoolery and be wary of your pricing model. You can&#8217;t please everyone.</p><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-1" href="#footnote-anchor-1" class="footnote-number" contenteditable="false" target="_self">1</a><div class="footnote-content"><p>I wonder if an increase in AI generated commits will break the assumptions of this model.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-2" href="#footnote-anchor-2" class="footnote-number" contenteditable="false" target="_self">2</a><div class="footnote-content"><p>I&#8217;ve said &#8220;security people&#8221; a couple of times now. In the context of this essay it can mean someone who is responsible for security full-time, or security-minded people in general.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-3" href="#footnote-anchor-3" class="footnote-number" contenteditable="false" target="_self">3</a><div class="footnote-content"><p>In this example I&#8217;ve included SCIM provisioning in the package, but I didn&#8217;t include it in the Better plan earlier. Ultimately where you choose to include it depends on what makes the holistic pricing model feel subjectively fair to your particular customers and prospects.</p><p></p></div></div>]]></content:encoded></item></channel></rss>