<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>Bitbison Blog</title>
  <subtitle>Engineering and product notes from the Bitbison team.</subtitle>
  <link href="https://bitbison.io/blog/feed.xml" rel="self" />
  <link href="https://bitbison.io/blog/" />
  <updated>2026-07-01T00:00:00Z</updated>
  <id>https://bitbison.io/blog/</id>
  <author><name>Bitbison</name></author>
  <entry>
    <title>Building a new foundation for security</title>
    <link href="https://bitbison.io/blog/hello-world/" />
    <updated>2026-07-01T00:00:00Z</updated>
    <id>https://bitbison.io/blog/hello-world/</id>
    <category term="company" />
    <summary>Our origin story</summary>
    <content type="html">&lt;p&gt;Bitbison was born from personal pain with the runtime security ecosystem and everything that touches it,
including supply chain and non-deterministic agentic workloads that are effectively insider threats. When I
started this journey, 0-day exploits were expensive, agents were on the fringe and major supply chain attacks
were uncommon. The current generation of frontier models changed that quickly. 0-days are now a commodity,
major supply chain attacks are a regular occurrence and every organization now hosts a potential insider
threat in the form of AI agents that lack sufficient security controls.&lt;/p&gt;
&lt;p&gt;We can no longer operate production systems without a significant improvement
to security observability and policy. With the support of our investors,
angels and advisors, we have brought together a world-class team to share a
modern re-imagining of security. We are now opening early access for anyone
interested in playing an active role in shaping it. This post is the story of
why we started and what we chose to build first.&lt;/p&gt;
&lt;h2&gt;The origin story&lt;/h2&gt;
&lt;h3&gt;The day we got popped&lt;/h3&gt;
&lt;p&gt;Log4Shell was disclosed in December 2021 and impacted hundreds of millions of systems. One of the
organizations I was involved with was among them. A build server had a VPN misconfiguration and was
accidentally exposed to the internet. We were running current runtime security products alongside file
integrity monitoring and malware scanners. There was no detection. A CPU utilization alert we decided not to
ignore is what brought the breach to our attention. We were not expecting a breach at all.&lt;/p&gt;
&lt;p&gt;We logged into the system and identified a Bitcoin miner. There was nothing else to go on. Aside from the
miner, no new files were present. There was no indication of further persistence and no log of what else the
attacker did with the instance. Our build and packaging environment was isolated, so we could determine that
neither our source nor our external packages were compromised. We could not determine whether anything was
exfiltrated, whether the attack was targeted or whether there were attempts at lateral movement. Leaving no
evidence behind is easy. I learned first hand during forensics that the default disposition of runtime
security products is to log almost nothing. This holds even when there is a detection. We re-imaged the instance and crossed
our fingers.&lt;/p&gt;
&lt;p&gt;This always bothered me.&lt;/p&gt;
&lt;h3&gt;The insider threat problem&lt;/h3&gt;
&lt;p&gt;Another organization I was involved with went through several rounds of lay-offs in the economic aftermath of
COVID. I inherited a severely understaffed security organization with insufficient tooling, through no fault of
its own. I had assumed that decades of improvements to systems observability for performance had been
extended to runtime security monitoring. That was not the case.&lt;/p&gt;
&lt;p&gt;Most engineers disabled or circumvented the runtime monitoring products because
of their impact on system performance. When enabled, observability was limited.
I was surprised to learn the modern approach to runtime security is still built
on whitelists. As with the Log4Shell episode, the
observability was not there to answer what did or did not happen across
thousands of endpoints and servers.&lt;/p&gt;
&lt;p&gt;Our small security team was tasked with identifying insider threats. One employee exfiltrated intellectual
property. Telemetry was minimal; aside from an anomalous increase in outbound network traffic, there was no
way to scope the exfiltration with certainty. The tooling could not observe everything all the time. The
performance trade-off meant the best you could hope for was whitelist monitoring, which is ineffective when
the monitored systems run arbitrary workloads.&lt;/p&gt;
&lt;h2&gt;Solving the observability problem&lt;/h2&gt;
&lt;p&gt;We started by revisiting the observability problem. We could not have detected activity that was never
observed. No audit is possible when nothing is logged. Existing audit systems do not meet this bar; full
capture slows workloads by 2x to 8x. The problem is logging enough to understand cause and effect, at
production scale, with minimal impact to the runtime.&lt;/p&gt;
&lt;p&gt;This is a deep problem with close to 20 years of active research behind it, known as full systems provenance.
It breaks into two parts:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Monitoring all system activity, all the time, so the cause-and-effect relationship between events is
preserved.&lt;/li&gt;
&lt;li&gt;Storing that information so an audit is always possible.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;R. Sekar, Hanke Kimm and Rohit Aich measured how existing systems handle the
first problem. Their eAudit paper at the 2024 IEEE Symposium on Security and
Privacy benchmarks the established collection systems including sysdig,
auditd and CamFlow. Under sustained workloads every one of them drops events. Complete
capture is only reached after the workload itself has been slowed down to a crawl.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/blog/img/eaudit-data-loss.png&quot; alt=&quot;Data loss against slowdown factor for existing provenance collection systems&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Figure 2 from &lt;a href=&quot;https://www.seclab.cs.sunysb.edu/seclab/pubs/eaudit.pdf&quot;&gt;eAudit: A Fast, Scalable and Deployable Audit Data Collection System&lt;/a&gt; by R. Sekar, Hanke Kimm and Rohit Aich (IEEE Symposium on Security and Privacy, 2024). The fraction of events dropped by each system, plotted against how much the benchmark had to be slowed down before capture became complete.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;We built Bitbison to remove this trade-off. Below is a full-fidelity capture of a 16-core parallel
compilation of the Ubuntu Linux kernel. The industry standard solution loses 50% of events at 100% CPU cost
and 9.2 GB of storage. Bitbison loses 0% of events at 6% CPU and 80 MB.&lt;/p&gt;
&lt;figure style=&quot;margin: 2rem 0 0&quot;&gt;
  &lt;div class=&quot;pair-card pair-card--wall&quot;&gt;
    &lt;div class=&quot;pair-work&quot;&gt;Attempted full capture&lt;/div&gt;
    &lt;div class=&quot;chart-bars&quot;&gt;
      &lt;svg viewBox=&quot;0 0 520 286&quot; role=&quot;img&quot; aria-label=&quot;Full-fidelity capture of a 16-core parallel Linux kernel compilation: Bitbison loses 0% of events at 6% CPU and 80 MB of disk; an industry-standard solution loses 50% at 100% CPU and 9.2 GB&quot;&gt;
      &lt;circle class=&quot;cbar-a&quot; cx=&quot;8&quot; cy=&quot;14&quot; r=&quot;5&quot;/&gt;&lt;text class=&quot;cl&quot; x=&quot;20&quot; y=&quot;18&quot;&gt;Industry standard&lt;/text&gt;
      &lt;circle class=&quot;cbar-b&quot; cx=&quot;238&quot; cy=&quot;14&quot; r=&quot;5&quot;/&gt;&lt;text class=&quot;cl&quot; x=&quot;250&quot; y=&quot;18&quot;&gt;Bitbison&lt;/text&gt;
      &lt;text class=&quot;cg&quot; x=&quot;0&quot; y=&quot;52&quot;&gt;EVENTS LOST&lt;/text&gt;
      &lt;circle class=&quot;cbar-a&quot; cx=&quot;6&quot; cy=&quot;68&quot; r=&quot;4.5&quot;/&gt;
      &lt;circle class=&quot;cbar-b&quot; cx=&quot;6&quot; cy=&quot;86&quot; r=&quot;4.5&quot;/&gt;
      &lt;rect class=&quot;cbar-a&quot; x=&quot;18&quot; y=&quot;60&quot; width=&quot;200&quot; height=&quot;16&quot;/&gt;
      &lt;rect class=&quot;cbar-b&quot; x=&quot;18&quot; y=&quot;78&quot; width=&quot;2&quot; height=&quot;16&quot;/&gt;
      &lt;text class=&quot;cv&quot; x=&quot;512&quot; y=&quot;73&quot; text-anchor=&quot;end&quot;&gt;50%&lt;/text&gt;
      &lt;text class=&quot;cv&quot; x=&quot;512&quot; y=&quot;91&quot; text-anchor=&quot;end&quot;&gt;0%&lt;/text&gt;
      &lt;text class=&quot;cg&quot; x=&quot;0&quot; y=&quot;134&quot;&gt;CPU COST&lt;/text&gt;
      &lt;circle class=&quot;cbar-a&quot; cx=&quot;6&quot; cy=&quot;150&quot; r=&quot;4.5&quot;/&gt;
      &lt;circle class=&quot;cbar-b&quot; cx=&quot;6&quot; cy=&quot;168&quot; r=&quot;4.5&quot;/&gt;
      &lt;rect class=&quot;cbar-a&quot; x=&quot;18&quot; y=&quot;142&quot; width=&quot;400&quot; height=&quot;16&quot;/&gt;
      &lt;rect class=&quot;cbar-b&quot; x=&quot;18&quot; y=&quot;160&quot; width=&quot;24&quot; height=&quot;16&quot;/&gt;
      &lt;text class=&quot;cv&quot; x=&quot;512&quot; y=&quot;155&quot; text-anchor=&quot;end&quot;&gt;100%&lt;/text&gt;
      &lt;text class=&quot;cv&quot; x=&quot;512&quot; y=&quot;173&quot; text-anchor=&quot;end&quot;&gt;6%&lt;/text&gt;
      &lt;text class=&quot;cg&quot; x=&quot;0&quot; y=&quot;216&quot;&gt;DISK WRITTEN&lt;/text&gt;
      &lt;circle class=&quot;cbar-a&quot; cx=&quot;6&quot; cy=&quot;232&quot; r=&quot;4.5&quot;/&gt;
      &lt;circle class=&quot;cbar-b&quot; cx=&quot;6&quot; cy=&quot;250&quot; r=&quot;4.5&quot;/&gt;
      &lt;rect class=&quot;cbar-a&quot; x=&quot;18&quot; y=&quot;224&quot; width=&quot;400&quot; height=&quot;16&quot;/&gt;
      &lt;rect class=&quot;cbar-b&quot; x=&quot;18&quot; y=&quot;242&quot; width=&quot;3.5&quot; height=&quot;16&quot;/&gt;
      &lt;text class=&quot;cv&quot; x=&quot;512&quot; y=&quot;237&quot; text-anchor=&quot;end&quot;&gt;9.2 GB&lt;/text&gt;
      &lt;text class=&quot;cv&quot; x=&quot;512&quot; y=&quot;255&quot; text-anchor=&quot;end&quot;&gt;80 MB&lt;/text&gt;
      &lt;/svg&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/figure&gt;
&lt;br&gt;
&lt;p&gt;The same holds on servers. Below is a production workloads with the default
coverage of a leading runtime monitoring solution over a four hour period.
The most data-rich agent on the market spikes to 129% of a
core and records 56,587 events, 7.8% of what happened. Bitbison stays under 8%
of a single core and records all 722,683 events.&lt;/p&gt;
&lt;figure style=&quot;margin: 2rem 0 0&quot;&gt;
  &lt;div class=&quot;pair-card pair-card--wall&quot;&gt;
    &lt;div class=&quot;pair-work&quot;&gt;CPU utilization on production host&lt;/div&gt;
    &lt;div class=&quot;chart-bars&quot;&gt;
      &lt;svg viewBox=&quot;0 0 520 400&quot; role=&quot;img&quot; aria-label=&quot;Agent CPU during the same production workload on the same host: the industry-best agent spikes to 129% of a core while Bitbison stays under 8%. Below, the same agents&#39; capture: 56,587 events logged and 7.8% completeness against Bitbison&#39;s 722,683 and 100%&quot;&gt;
      &lt;circle class=&quot;cbar-a&quot; cx=&quot;8&quot; cy=&quot;14&quot; r=&quot;5&quot;/&gt;&lt;text class=&quot;cl&quot; x=&quot;20&quot; y=&quot;18&quot;&gt;Industry Standard&lt;/text&gt;
      &lt;circle class=&quot;cbar-b&quot; cx=&quot;168&quot; cy=&quot;14&quot; r=&quot;5&quot;/&gt;&lt;text class=&quot;cl&quot; x=&quot;180&quot; y=&quot;18&quot;&gt;Bitbison&lt;/text&gt;
      &lt;text class=&quot;cg&quot; x=&quot;0&quot; y=&quot;76&quot;&gt;100% CPU&lt;/text&gt;
      &lt;line class=&quot;cgrid&quot; x1=&quot;0&quot; y1=&quot;81.5&quot; x2=&quot;520&quot; y2=&quot;81.5&quot;/&gt;
      &lt;text class=&quot;cg&quot; x=&quot;0&quot; y=&quot;135&quot;&gt;50%&lt;/text&gt;
      &lt;line class=&quot;cgrid&quot; x1=&quot;0&quot; y1=&quot;140.7&quot; x2=&quot;520&quot; y2=&quot;140.7&quot;/&gt;
      &lt;line class=&quot;cgrid cgrid--base&quot; x1=&quot;0&quot; y1=&quot;200&quot; x2=&quot;520&quot; y2=&quot;200&quot;/&gt;
      &lt;path class=&quot;cline-a&quot; d=&quot;M0.0 198.8 L8.8 198.7 L17.6 196.7 L26.4 198.8 L35.3 198.6 L44.1 199.5 L52.9 184.5 L61.7 154.1 L70.5 58.4 L79.3 158.8 L88.1 94.6 L96.9 188.7 L105.8 188.9 L114.6 145.9 L123.4 135.3 L132.2 59.6 L141.0 152.3 L149.8 116.1 L158.6 169.4 L167.5 69.3 L176.3 162.3 L185.1 71.6 L193.9 184.4 L202.7 85.2 L211.5 152.7 L220.3 95.6 L229.2 160.7 L238.0 181.5 L246.8 197.0 L255.6 199.1 L264.4 196.7 L273.2 197.3 L282.0 196.2 L290.8 197.7 L299.7 198.1 L308.5 198.9 L317.3 197.0 L326.1 197.5 L334.9 197.0 L343.7 193.2 L352.5 195.1 L361.4 198.7 L370.2 197.7 L379.0 191.0 L387.8 193.3 L396.6 142.5 L405.4 47.4 L414.2 183.1 L423.1 182.3 L431.9 185.2 L440.7 163.8 L449.5 182.8 L458.3 194.7 L467.1 198.9 L475.9 199.2 L484.7 197.9 L493.6 198.1 L502.4 198.0 L511.2 198.3 L520.0 199.5&quot;/&gt;
      &lt;path class=&quot;cline-b&quot; d=&quot;M0.0 199.4 L8.8 199.3 L17.6 199.2 L26.4 199.4 L35.3 199.3 L44.1 199.4 L52.9 198.3 L61.7 196.5 L70.5 192.7 L79.3 196.4 L88.1 192.4 L96.9 198.8 L105.8 198.3 L114.6 196.0 L123.4 196.5 L132.2 193.7 L141.0 195.6 L149.8 193.1 L158.6 196.9 L167.5 192.4 L176.3 197.9 L185.1 190.7 L193.9 198.0 L202.7 194.5 L211.5 197.4 L220.3 191.8 L229.2 196.2 L238.0 198.3 L246.8 198.9 L255.6 199.3 L264.4 199.1 L273.2 199.3 L282.0 198.5 L290.8 199.3 L299.7 198.9 L308.5 199.3 L317.3 198.6 L326.1 199.1 L334.9 199.4 L343.7 198.9 L352.5 199.2 L361.4 199.0 L370.2 199.3 L379.0 198.1 L387.8 198.5 L396.6 195.8 L405.4 194.7 L414.2 197.5 L423.1 198.2 L431.9 198.4 L440.7 195.3 L449.5 198.6 L458.3 199.2 L467.1 199.4 L475.9 199.3 L484.7 199.4 L493.6 199.3 L502.4 199.3 L511.2 199.3 L520.0 199.3&quot;/&gt;
      &lt;text class=&quot;cg&quot; x=&quot;520&quot; y=&quot;220&quot; text-anchor=&quot;end&quot;&gt;Production CI/CD workload&lt;/text&gt;
      &lt;text class=&quot;cg&quot; x=&quot;0&quot; y=&quot;262&quot;&gt;EVENTS LOGGED&lt;/text&gt;
      &lt;circle class=&quot;cbar-a&quot; cx=&quot;6&quot; cy=&quot;278&quot; r=&quot;4.5&quot;/&gt;
      &lt;text class=&quot;cl&quot; x=&quot;18&quot; y=&quot;283&quot;&gt;Alternative&lt;/text&gt;
      &lt;circle class=&quot;cbar-b&quot; cx=&quot;6&quot; cy=&quot;296&quot; r=&quot;4.5&quot;/&gt;
      &lt;text class=&quot;cl&quot; x=&quot;18&quot; y=&quot;301&quot;&gt;Bitbison&lt;/text&gt;
      &lt;rect class=&quot;cbar-a&quot; x=&quot;128&quot; y=&quot;270&quot; width=&quot;25&quot; height=&quot;16&quot;/&gt;
      &lt;rect class=&quot;cbar-b&quot; x=&quot;128&quot; y=&quot;288&quot; width=&quot;320&quot; height=&quot;16&quot;/&gt;
      &lt;text class=&quot;cv&quot; x=&quot;512&quot; y=&quot;283&quot; text-anchor=&quot;end&quot;&gt;56,587&lt;/text&gt;
      &lt;text class=&quot;cv&quot; x=&quot;512&quot; y=&quot;301&quot; text-anchor=&quot;end&quot;&gt;722,683&lt;/text&gt;
      &lt;text class=&quot;cg&quot; x=&quot;0&quot; y=&quot;344&quot;&gt;COMPLETENESS&lt;/text&gt;
      &lt;circle class=&quot;cbar-a&quot; cx=&quot;6&quot; cy=&quot;360&quot; r=&quot;4.5&quot;/&gt;
      &lt;text class=&quot;cl&quot; x=&quot;18&quot; y=&quot;365&quot;&gt;Alternative&lt;/text&gt;
      &lt;circle class=&quot;cbar-b&quot; cx=&quot;6&quot; cy=&quot;378&quot; r=&quot;4.5&quot;/&gt;
      &lt;text class=&quot;cl&quot; x=&quot;18&quot; y=&quot;383&quot;&gt;Bitbison&lt;/text&gt;
      &lt;rect class=&quot;cbar-a&quot; x=&quot;128&quot; y=&quot;352&quot; width=&quot;25&quot; height=&quot;16&quot;/&gt;
      &lt;rect class=&quot;cbar-b&quot; x=&quot;128&quot; y=&quot;370&quot; width=&quot;320&quot; height=&quot;16&quot;/&gt;
      &lt;text class=&quot;cv&quot; x=&quot;512&quot; y=&quot;365&quot; text-anchor=&quot;end&quot;&gt;7.8%&lt;/text&gt;
      &lt;text class=&quot;cv&quot; x=&quot;512&quot; y=&quot;383&quot; text-anchor=&quot;end&quot;&gt;100%&lt;/text&gt;
      &lt;/svg&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/figure&gt;
&lt;br&gt;
&lt;p&gt;Even without attempting audit-grade capture, existing systems carry
workload-impacting CPU and memory costs while providing near 0%
runtime observability.&lt;/p&gt;
&lt;h3&gt;Detection built on deep observability&lt;/h3&gt;
&lt;p&gt;Bitbison now runs on dozens of production systems and developer laptops and is actively processing billions
of events. It is already deployed in production at a leading semiconductor company. It provides complete causal
coverage of all activity on the systems it runs on, at a fraction of the CPU and memory of alternatives.
Going back to the origin story, this solves the first major pain point. We are no longer blind. Had Bitbison
existed then, one query would have told us exactly what happened during the Log4Shell breach. The insider
exfiltration would have been scoped the same way.&lt;/p&gt;
&lt;h4&gt;What a detection looked like before Bitbison&lt;/h4&gt;
&lt;p&gt;In one of our red team scenarios an account was compromised. The attacker
logged into the system, established a reverse shell with &lt;code&gt;netcat&lt;/code&gt;, then
downloaded and executed malware. We purposefully chose a sequence we knew
would be detectable, to measure the visibility we would be given.&lt;/p&gt;
&lt;p&gt;Below is what the existing EDR (endpoint detection and response) solution
surfaced to us.&lt;/p&gt;
&lt;figure style=&quot;margin: 2rem 0 0&quot;&gt;
  &lt;div class=&quot;pair-card&quot; data-panzoom&gt;
    &lt;div class=&quot;pair-work&quot;&gt;A threat graph&lt;/div&gt;
    &lt;div class=&quot;chart-bars&quot;&gt;
      &lt;svg viewBox=&quot;0 40 1980 1050&quot; role=&quot;img&quot; aria-label=&quot;an AWS Systems Manager session becomes a root shell through sudo su, netcat attaches /bin/bash to a remote endpoint on port 80, and the resulting shell downloads backup.py and runs it under Python 3.12, which reads through the dpkg package database&quot;&gt;
      &lt;g stroke=&quot;rgba(78,201,214,0.35)&quot; stroke-width=&quot;2&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;line x1=&quot;81.5&quot; y1=&quot;313&quot; x2=&quot;208.5&quot; y2=&quot;313&quot;/&gt;
      &lt;line x1=&quot;231.5&quot; y1=&quot;313&quot; x2=&quot;358.5&quot; y2=&quot;313&quot;/&gt;
      &lt;line x1=&quot;381.5&quot; y1=&quot;313&quot; x2=&quot;508.5&quot; y2=&quot;313&quot;/&gt;
      &lt;line x1=&quot;531.5&quot; y1=&quot;313&quot; x2=&quot;658.5&quot; y2=&quot;313&quot;/&gt;
      &lt;line x1=&quot;681.5&quot; y1=&quot;313&quot; x2=&quot;808.5&quot; y2=&quot;313&quot;/&gt;
      &lt;line x1=&quot;831.5&quot; y1=&quot;313&quot; x2=&quot;958.5&quot; y2=&quot;313&quot;/&gt;
      &lt;path d=&quot;M 981.5 313 H 1090 V 109 H 1118.5&quot; fill=&quot;none&quot;/&gt;
      &lt;path d=&quot;M 981.5 313 H 1090 V 191 H 1118.5&quot; fill=&quot;none&quot;/&gt;
      &lt;path d=&quot;M 981.5 313 H 1090 V 272 H 1118.5&quot; fill=&quot;none&quot;/&gt;
      &lt;path d=&quot;M 981.5 313 H 1090 V 354 H 1118.5&quot; fill=&quot;none&quot;/&gt;
      &lt;path d=&quot;M 981.5 313 H 1090 V 435 H 1118.5&quot; fill=&quot;none&quot;/&gt;
      &lt;path d=&quot;M 981.5 313 H 1090 V 517 H 1118.5&quot; fill=&quot;none&quot;/&gt;
      &lt;line x1=&quot;1141.5&quot; y1=&quot;517&quot; x2=&quot;1288.5&quot; y2=&quot;517&quot;/&gt;
      &lt;path d=&quot;M 1311.5 517 H 1420 V 313 H 1458.5&quot; fill=&quot;none&quot;/&gt;
      &lt;path d=&quot;M 1311.5 517 H 1420 V 394 H 1458.5&quot; fill=&quot;none&quot;/&gt;
      &lt;path d=&quot;M 1311.5 517 H 1420 V 476 H 1458.5&quot; fill=&quot;none&quot;/&gt;
      &lt;path d=&quot;M 1311.5 517 H 1420 V 557 H 1458.5&quot; fill=&quot;none&quot;/&gt;
      &lt;path d=&quot;M 1311.5 517 H 1420 V 638 H 1458.5&quot; fill=&quot;none&quot;/&gt;
      &lt;path d=&quot;M 1311.5 517 H 1420 V 720 H 1458.5&quot; fill=&quot;none&quot;/&gt;
      &lt;line x1=&quot;1481.5&quot; y1=&quot;720&quot; x2=&quot;1628.5&quot; y2=&quot;720&quot;/&gt;
      &lt;path d=&quot;M 1651.5 720 H 1770 V 394 H 1798.5&quot; fill=&quot;none&quot;/&gt;
      &lt;path d=&quot;M 1651.5 720 H 1770 V 476 H 1798.5&quot; fill=&quot;none&quot;/&gt;
      &lt;path d=&quot;M 1651.5 720 H 1770 V 557 H 1798.5&quot; fill=&quot;none&quot;/&gt;
      &lt;path d=&quot;M 1651.5 720 H 1770 V 638 H 1798.5&quot; fill=&quot;none&quot;/&gt;
      &lt;path d=&quot;M 1651.5 720 H 1770 V 720 H 1798.5&quot; fill=&quot;none&quot;/&gt;
      &lt;path d=&quot;M 1651.5 720 H 1770 V 801 H 1798.5&quot; fill=&quot;none&quot;/&gt;
      &lt;path d=&quot;M 1651.5 720 H 1770 V 882 H 1798.5&quot; fill=&quot;none&quot;/&gt;
      &lt;path d=&quot;M 1651.5 720 H 1770 V 964 H 1798.5&quot; fill=&quot;none&quot;/&gt;
      &lt;path d=&quot;M 1651.5 720 H 1770 V 1045 H 1798.5&quot; fill=&quot;none&quot;/&gt;&lt;/g&gt;
      &lt;circle cx=&quot;70&quot; cy=&quot;313&quot; r=&quot;10.5&quot; fill=&quot;#4ec9d6&quot;/&gt;
      &lt;text x=&quot;90&quot; y=&quot;288&quot; font-size=&quot;14&quot; font-weight=&quot;600&quot; fill=&quot;#e8ebf2&quot;&gt;ssm-agent&lt;/text&gt;
      &lt;text x=&quot;90&quot; y=&quot;302&quot; font-size=&quot;12.5&quot; fill=&quot;#a0a6b4&quot;&gt;ssm-agent&lt;/text&gt;
      &lt;circle cx=&quot;220&quot; cy=&quot;313&quot; r=&quot;10.5&quot; fill=&quot;#4ec9d6&quot;/&gt;
      &lt;text x=&quot;240&quot; y=&quot;288&quot; font-size=&quot;14&quot; font-weight=&quot;600&quot; fill=&quot;#e8ebf2&quot;&gt;ssm-agent-worker&lt;/text&gt;
      &lt;text x=&quot;240&quot; y=&quot;302&quot; font-size=&quot;12.5&quot; fill=&quot;#a0a6b4&quot;&gt;…sm-agent-worker&lt;/text&gt;
      &lt;circle cx=&quot;370&quot; cy=&quot;313&quot; r=&quot;10.5&quot; fill=&quot;#4ec9d6&quot;/&gt;
      &lt;text x=&quot;390&quot; y=&quot;288&quot; font-size=&quot;14&quot; font-weight=&quot;600&quot; fill=&quot;#e8ebf2&quot;&gt;ssm-session-worker&lt;/text&gt;
      &lt;text x=&quot;390&quot; y=&quot;302&quot; font-size=&quot;12.5&quot; fill=&quot;#a0a6b4&quot;&gt;…xhazruazbxktl3q&lt;/text&gt;
      &lt;circle cx=&quot;520&quot; cy=&quot;313&quot; r=&quot;10.5&quot; fill=&quot;#4ec9d6&quot;/&gt;
      &lt;text x=&quot;540&quot; y=&quot;288&quot; font-size=&quot;14&quot; font-weight=&quot;600&quot; fill=&quot;#e8ebf2&quot;&gt;dash&lt;/text&gt;
      &lt;text x=&quot;540&quot; y=&quot;302&quot; font-size=&quot;12.5&quot; fill=&quot;#a0a6b4&quot;&gt;sh&lt;/text&gt;
      &lt;circle cx=&quot;670&quot; cy=&quot;313&quot; r=&quot;10.5&quot; fill=&quot;#4ec9d6&quot;/&gt;
      &lt;circle cx=&quot;700&quot; cy=&quot;270&quot; r=&quot;6&quot; fill=&quot;none&quot; stroke=&quot;#e0a458&quot; stroke-width=&quot;2&quot;/&gt;
      &lt;circle cx=&quot;700&quot; cy=&quot;270&quot; r=&quot;2&quot; fill=&quot;#e0a458&quot;/&gt;
      &lt;text x=&quot;690&quot; y=&quot;288&quot; font-size=&quot;14&quot; font-weight=&quot;600&quot; fill=&quot;#e8ebf2&quot;&gt;sudo&lt;/text&gt;
      &lt;text x=&quot;690&quot; y=&quot;302&quot; font-size=&quot;12.5&quot; fill=&quot;#a0a6b4&quot;&gt;sudo su&lt;/text&gt;
      &lt;circle cx=&quot;820&quot; cy=&quot;313&quot; r=&quot;10.5&quot; fill=&quot;#4ec9d6&quot;/&gt;
      &lt;circle cx=&quot;850&quot; cy=&quot;270&quot; r=&quot;6&quot; fill=&quot;none&quot; stroke=&quot;#e0a458&quot; stroke-width=&quot;2&quot;/&gt;
      &lt;circle cx=&quot;850&quot; cy=&quot;270&quot; r=&quot;2&quot; fill=&quot;#e0a458&quot;/&gt;
      &lt;text x=&quot;840&quot; y=&quot;288&quot; font-size=&quot;14&quot; font-weight=&quot;600&quot; fill=&quot;#e8ebf2&quot;&gt;su&lt;/text&gt;
      &lt;text x=&quot;840&quot; y=&quot;302&quot; font-size=&quot;12.5&quot; fill=&quot;#a0a6b4&quot;&gt;su&lt;/text&gt;
      &lt;circle cx=&quot;970&quot; cy=&quot;313&quot; r=&quot;10.5&quot; fill=&quot;#4ec9d6&quot;/&gt;
      &lt;text x=&quot;990&quot; y=&quot;288&quot; font-size=&quot;14&quot; font-weight=&quot;600&quot; fill=&quot;#e8ebf2&quot;&gt;bash&lt;/text&gt;
      &lt;text x=&quot;990&quot; y=&quot;302&quot; font-size=&quot;12.5&quot; fill=&quot;#a0a6b4&quot;&gt;bash&lt;/text&gt;
      &lt;circle cx=&quot;1130&quot; cy=&quot;109&quot; r=&quot;10.5&quot; fill=&quot;#4ec9d6&quot;/&gt;
      &lt;text x=&quot;1150&quot; y=&quot;84&quot; font-size=&quot;14&quot; font-weight=&quot;600&quot; fill=&quot;#e8ebf2&quot;&gt;groups&lt;/text&gt;
      &lt;text x=&quot;1150&quot; y=&quot;98&quot; font-size=&quot;12.5&quot; fill=&quot;#a0a6b4&quot;&gt;groups&lt;/text&gt;
      &lt;circle cx=&quot;1130&quot; cy=&quot;191&quot; r=&quot;10.5&quot; fill=&quot;#4ec9d6&quot;/&gt;
      &lt;text x=&quot;1150&quot; y=&quot;166&quot; font-size=&quot;14&quot; font-weight=&quot;600&quot; fill=&quot;#e8ebf2&quot;&gt;dash&lt;/text&gt;
      &lt;text x=&quot;1150&quot; y=&quot;180&quot; font-size=&quot;12.5&quot; fill=&quot;#a0a6b4&quot;&gt;…sr/bin/lesspipe&lt;/text&gt;
      &lt;circle cx=&quot;1130&quot; cy=&quot;272&quot; r=&quot;10.5&quot; fill=&quot;#4ec9d6&quot;/&gt;
      &lt;text x=&quot;1150&quot; y=&quot;247&quot; font-size=&quot;14&quot; font-weight=&quot;600&quot; fill=&quot;#e8ebf2&quot;&gt;dircolors&lt;/text&gt;
      &lt;text x=&quot;1150&quot; y=&quot;261&quot; font-size=&quot;12.5&quot; fill=&quot;#a0a6b4&quot;&gt;dircolors -b&lt;/text&gt;
      &lt;circle cx=&quot;1130&quot; cy=&quot;354&quot; r=&quot;10.5&quot; fill=&quot;#4ec9d6&quot;/&gt;
      &lt;text x=&quot;1150&quot; y=&quot;329&quot; font-size=&quot;14&quot; font-weight=&quot;600&quot; fill=&quot;#e8ebf2&quot;&gt;nc.openbsd&lt;/text&gt;
      &lt;text x=&quot;1150&quot; y=&quot;343&quot; font-size=&quot;12.5&quot; fill=&quot;#a0a6b4&quot;&gt;…80 -e /bin/bash&lt;/text&gt;
      &lt;circle cx=&quot;1130&quot; cy=&quot;435&quot; r=&quot;10.5&quot; fill=&quot;#4ec9d6&quot;/&gt;
      &lt;text x=&quot;1150&quot; y=&quot;410&quot; font-size=&quot;14&quot; font-weight=&quot;600&quot; fill=&quot;#e8ebf2&quot;&gt;nc.openbsd&lt;/text&gt;
      &lt;text x=&quot;1150&quot; y=&quot;424&quot; font-size=&quot;12.5&quot; fill=&quot;#a0a6b4&quot;&gt;…80 -e /bin/bash&lt;/text&gt;
      &lt;polygon points=&quot;1130,503 1143.5,527 1116.5,527&quot; fill=&quot;#e94e42&quot;/&gt;
      &lt;text x=&quot;1150&quot; y=&quot;492&quot; font-size=&quot;14&quot; font-weight=&quot;600&quot; fill=&quot;#e8ebf2&quot;&gt;ncat&lt;/text&gt;
      &lt;text x=&quot;1150&quot; y=&quot;506&quot; font-size=&quot;12.5&quot; fill=&quot;#a0a6b4&quot;&gt;…80 -e /bin/bash&lt;/text&gt;
      &lt;circle cx=&quot;1300&quot; cy=&quot;517&quot; r=&quot;10.5&quot; fill=&quot;#4ec9d6&quot;/&gt;
      &lt;text x=&quot;1320&quot; y=&quot;492&quot; font-size=&quot;14&quot; font-weight=&quot;600&quot; fill=&quot;#e8ebf2&quot;&gt;bash&lt;/text&gt;
      &lt;text x=&quot;1320&quot; y=&quot;506&quot; font-size=&quot;12.5&quot; fill=&quot;#a0a6b4&quot;&gt;/bin/bash&lt;/text&gt;
      &lt;circle cx=&quot;1470&quot; cy=&quot;313&quot; r=&quot;10.5&quot; fill=&quot;#4ec9d6&quot;/&gt;
      &lt;text x=&quot;1490&quot; y=&quot;288&quot; font-size=&quot;14&quot; font-weight=&quot;600&quot; fill=&quot;#e8ebf2&quot;&gt;ls&lt;/text&gt;
      &lt;text x=&quot;1490&quot; y=&quot;302&quot; font-size=&quot;12.5&quot; fill=&quot;#a0a6b4&quot;&gt;ls&lt;/text&gt;
      &lt;circle cx=&quot;1470&quot; cy=&quot;394&quot; r=&quot;10.5&quot; fill=&quot;#4ec9d6&quot;/&gt;
      &lt;text x=&quot;1490&quot; y=&quot;369&quot; font-size=&quot;14&quot; font-weight=&quot;600&quot; fill=&quot;#e8ebf2&quot;&gt;ls&lt;/text&gt;
      &lt;text x=&quot;1490&quot; y=&quot;383&quot; font-size=&quot;12.5&quot; fill=&quot;#a0a6b4&quot;&gt;ls -a&lt;/text&gt;
      &lt;circle cx=&quot;1470&quot; cy=&quot;476&quot; r=&quot;10.5&quot; fill=&quot;#4ec9d6&quot;/&gt;
      &lt;text x=&quot;1490&quot; y=&quot;451&quot; font-size=&quot;14&quot; font-weight=&quot;600&quot; fill=&quot;#e8ebf2&quot;&gt;curl&lt;/text&gt;
      &lt;text x=&quot;1490&quot; y=&quot;465&quot; font-size=&quot;12.5&quot; fill=&quot;#a0a6b4&quot;&gt;…xt -o backup.py&lt;/text&gt;
      &lt;circle cx=&quot;1470&quot; cy=&quot;557&quot; r=&quot;10.5&quot; fill=&quot;#4ec9d6&quot;/&gt;
      &lt;text x=&quot;1490&quot; y=&quot;532&quot; font-size=&quot;14&quot; font-weight=&quot;600&quot; fill=&quot;#e8ebf2&quot;&gt;cat&lt;/text&gt;
      &lt;text x=&quot;1490&quot; y=&quot;546&quot; font-size=&quot;12.5&quot; fill=&quot;#a0a6b4&quot;&gt;cat backup.py&lt;/text&gt;
      &lt;circle cx=&quot;1470&quot; cy=&quot;638&quot; r=&quot;10.5&quot; fill=&quot;#4ec9d6&quot;/&gt;
      &lt;text x=&quot;1490&quot; y=&quot;613&quot; font-size=&quot;14&quot; font-weight=&quot;600&quot; fill=&quot;#e8ebf2&quot;&gt;chmod&lt;/text&gt;
      &lt;text x=&quot;1490&quot; y=&quot;627&quot; font-size=&quot;12.5&quot; fill=&quot;#a0a6b4&quot;&gt;…od +x backup.py&lt;/text&gt;
      &lt;circle cx=&quot;1470&quot; cy=&quot;720&quot; r=&quot;10.5&quot; fill=&quot;#4ec9d6&quot;/&gt;
      &lt;text x=&quot;1490&quot; y=&quot;695&quot; font-size=&quot;14&quot; font-weight=&quot;600&quot; fill=&quot;#e8ebf2&quot;&gt;env&lt;/text&gt;
      &lt;text x=&quot;1490&quot; y=&quot;709&quot; font-size=&quot;12.5&quot; fill=&quot;#a0a6b4&quot;&gt;…on3 ./backup.py&lt;/text&gt;
      &lt;circle cx=&quot;1640&quot; cy=&quot;720&quot; r=&quot;10.5&quot; fill=&quot;#4ec9d6&quot;/&gt;
      &lt;text x=&quot;1660&quot; y=&quot;695&quot; font-size=&quot;14&quot; font-weight=&quot;600&quot; fill=&quot;#e8ebf2&quot;&gt;python3.12&lt;/text&gt;
      &lt;text x=&quot;1660&quot; y=&quot;709&quot; font-size=&quot;12.5&quot; fill=&quot;#a0a6b4&quot;&gt;…on3 ./backup.py&lt;/text&gt;
      &lt;circle cx=&quot;1810&quot; cy=&quot;394&quot; r=&quot;10.5&quot; fill=&quot;#4ec9d6&quot;/&gt;
      &lt;text x=&quot;1830&quot; y=&quot;369&quot; font-size=&quot;14&quot; font-weight=&quot;600&quot; fill=&quot;#e8ebf2&quot;&gt;dpkg-divert&lt;/text&gt;
      &lt;text x=&quot;1830&quot; y=&quot;383&quot; font-size=&quot;12.5&quot; fill=&quot;#a0a6b4&quot;&gt;…13349/backup.py&lt;/text&gt;
      &lt;circle cx=&quot;1810&quot; cy=&quot;476&quot; r=&quot;10.5&quot; fill=&quot;#4ec9d6&quot;/&gt;
      &lt;text x=&quot;1830&quot; y=&quot;451&quot; font-size=&quot;14&quot; font-weight=&quot;600&quot; fill=&quot;#e8ebf2&quot;&gt;dash&lt;/text&gt;
      &lt;text x=&quot;1830&quot; y=&quot;465&quot; font-size=&quot;12.5&quot; fill=&quot;#a0a6b4&quot;&gt;…groff-base.list&lt;/text&gt;
      &lt;circle cx=&quot;1810&quot; cy=&quot;557&quot; r=&quot;10.5&quot; fill=&quot;#4ec9d6&quot;/&gt;
      &lt;text x=&quot;1830&quot; y=&quot;532&quot; font-size=&quot;14&quot; font-weight=&quot;600&quot; fill=&quot;#e8ebf2&quot;&gt;dash&lt;/text&gt;
      &lt;text x=&quot;1830&quot; y=&quot;546&quot; font-size=&quot;12.5&quot; fill=&quot;#a0a6b4&quot;&gt;…/e2fsprogs.list&lt;/text&gt;
      &lt;circle cx=&quot;1810&quot; cy=&quot;638&quot; r=&quot;10.5&quot; fill=&quot;#4ec9d6&quot;/&gt;
      &lt;text x=&quot;1830&quot; y=&quot;613&quot; font-size=&quot;14&quot; font-weight=&quot;600&quot; fill=&quot;#e8ebf2&quot;&gt;dash&lt;/text&gt;
      &lt;text x=&quot;1830&quot; y=&quot;627&quot; font-size=&quot;12.5&quot; fill=&quot;#a0a6b4&quot;&gt;…info/libsigsegv&lt;/text&gt;
      &lt;circle cx=&quot;1810&quot; cy=&quot;720&quot; r=&quot;10.5&quot; fill=&quot;#4ec9d6&quot;/&gt;
      &lt;text x=&quot;1830&quot; y=&quot;695&quot; font-size=&quot;14&quot; font-weight=&quot;600&quot; fill=&quot;#e8ebf2&quot;&gt;dash&lt;/text&gt;
      &lt;text x=&quot;1830&quot; y=&quot;709&quot; font-size=&quot;12.5&quot; fill=&quot;#a0a6b4&quot;&gt;… /var/lib/dpkg/&lt;/text&gt;
      &lt;circle cx=&quot;1810&quot; cy=&quot;801&quot; r=&quot;10.5&quot; fill=&quot;#4ec9d6&quot;/&gt;
      &lt;text x=&quot;1830&quot; y=&quot;776&quot; font-size=&quot;14&quot; font-weight=&quot;600&quot; fill=&quot;#e8ebf2&quot;&gt;dash&lt;/text&gt;
      &lt;text x=&quot;1830&quot; y=&quot;790&quot; font-size=&quot;12.5&quot; fill=&quot;#a0a6b4&quot;&gt;…try-curses.list&lt;/text&gt;
      &lt;circle cx=&quot;1810&quot; cy=&quot;882&quot; r=&quot;10.5&quot; fill=&quot;#4ec9d6&quot;/&gt;
      &lt;text x=&quot;1830&quot; y=&quot;857&quot; font-size=&quot;14&quot; font-weight=&quot;600&quot; fill=&quot;#e8ebf2&quot;&gt;dash&lt;/text&gt;
      &lt;text x=&quot;1830&quot; y=&quot;871&quot; font-size=&quot;12.5&quot; fill=&quot;#a0a6b4&quot;&gt;…64.list /var/li&lt;/text&gt;
      &lt;circle cx=&quot;1810&quot; cy=&quot;964&quot; r=&quot;10.5&quot; fill=&quot;#4ec9d6&quot;/&gt;
      &lt;text x=&quot;1830&quot; y=&quot;939&quot; font-size=&quot;14&quot; font-weight=&quot;600&quot; fill=&quot;#e8ebf2&quot;&gt;dash&lt;/text&gt;
      &lt;text x=&quot;1830&quot; y=&quot;953&quot; font-size=&quot;12.5&quot; fill=&quot;#a0a6b4&quot;&gt;…rtificates.list&lt;/text&gt;
      &lt;circle cx=&quot;1810&quot; cy=&quot;1045&quot; r=&quot;10.5&quot; fill=&quot;#4ec9d6&quot;/&gt;
      &lt;text x=&quot;1830&quot; y=&quot;1020&quot; font-size=&quot;14&quot; font-weight=&quot;600&quot; fill=&quot;#e8ebf2&quot;&gt;dash&lt;/text&gt;
      &lt;text x=&quot;1830&quot; y=&quot;1034&quot; font-size=&quot;12.5&quot; fill=&quot;#a0a6b4&quot;&gt;…libheif1:amd64.&lt;/text&gt;
      &lt;/svg&gt;
    &lt;/div&gt;
  &lt;/div&gt;
  &lt;p class=&quot;pair-note&quot;&gt;A breach scenario as surfaced by a modern EDR. Click to zoom and pan.&lt;/p&gt;
&lt;/figure&gt;
&lt;p&gt;An analyst left to investigate this detection has nothing beyond this graph to go on. Note that the attack
sequence had to be modified to be detectable in the first place. Even with a detection, all we know is:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A legitimate session was started.&lt;/li&gt;
&lt;li&gt;A reverse shell was probably launched through the &lt;code&gt;ncat&lt;/code&gt; command listening on port 80.&lt;/li&gt;
&lt;li&gt;The reverse shell launched a shell.&lt;/li&gt;
&lt;li&gt;The shell then executed curl to download a Python script.&lt;/li&gt;
&lt;li&gt;That Python script was probably executed.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The story is incomplete. The graph cannot say what connected to the reverse shell, what files were touched
or whether anything left the host. In this scenario Bitbison ingests signals from third party runtime
products and augments them with its own causally complete system capture.&lt;/p&gt;
&lt;h4&gt;What a detection looks like with Bitbison&lt;/h4&gt;
&lt;p&gt;Below is the same detection in Bitbison.&lt;/p&gt;
&lt;figure style=&quot;margin: 2rem 0 0&quot;&gt;
  &lt;div class=&quot;pair-card&quot; data-panzoom&gt;
    &lt;svg viewBox=&quot;0 0 1356 1973&quot; role=&quot;img&quot; aria-label=&quot;Bitbison signal analysis report: true positive, root bind shell, exfil-tool download and C2 beacon confirmed, with summary, data exposure, entry points, artifacts, persistence and a 21-event timeline&quot; style=&quot;display: block; width: 100%; height: auto&quot;&gt;
      &lt;image href=&quot;/blog/img/signal-analysis.png&quot; width=&quot;1356&quot; height=&quot;1973&quot;/&gt;
    &lt;/svg&gt;
  &lt;/div&gt;
  &lt;p class=&quot;pair-note&quot;&gt;Bitbison&amp;rsquo;s signal analysis of the session above. Click to zoom and pan.&lt;/p&gt;
&lt;/figure&gt;
&lt;p&gt;This signal is confirmed as a true positive: a root bind shell on TCP/80 driven
by an external operator, a credential-stealing script fetched from an external
host and a beacon out over HTTPS. The report also states what did not happen;
no SSH key reads, no &lt;code&gt;/etc/shadow&lt;/code&gt; reads and no persistence survived the
session. Every conclusion links back to recorded events. The analysis is
backed by a formal verification framework built on an in-house model checker
to ensure consistent coverage of the investigation.&lt;/p&gt;
&lt;p&gt;The scope is both complete and exact.&lt;/p&gt;
&lt;h2&gt;Evolving policy&lt;/h2&gt;
&lt;h3&gt;The past&lt;/h3&gt;
&lt;p&gt;The birth of the EDR and runtime security category is attributed to a shift from the signature matching of
antivirus products to what is now called &amp;quot;behavioral analysis&amp;quot;. In practice, behavioral analysis is
pattern matching on process names and system call arguments over an already incomplete stream of data;
runtime monitoring&#39;s performance bottleneck limits it to coarse-grained events. Some machine learning approaches have made it to production but they:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Are limited by the fundamental observability problem; you cannot write rules against things never observed.&lt;/li&gt;
&lt;li&gt;Are high latency and unable to detect breaches in real time.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For example, a policy today to alert on an untrusted executable may be dozens of rules that look similar to this:&lt;/p&gt;
&lt;pre class=&quot;language-yaml&quot;&gt;&lt;code class=&quot;language-yaml&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;token key atrule&quot;&gt;rule&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; Execution from Temp Directory
  &lt;span class=&quot;token key atrule&quot;&gt;desc&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;span class=&quot;token scalar string&quot;&gt;
    Detect a binary being executed from /tmp or /var/tmp,
    a common pattern for dropped payloads and post-exploitation tooling.&lt;/span&gt;
  &lt;span class=&quot;token key atrule&quot;&gt;condition&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;span class=&quot;token scalar string&quot;&gt;
    spawned_process
    and (proc.exepath startswith /tmp/
         or proc.exepath startswith /var/tmp/)&lt;/span&gt;
  &lt;span class=&quot;token key atrule&quot;&gt;output&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;span class=&quot;token scalar string&quot;&gt;
    Program executed from temp directory
    (user=%user.name command=%proc.cmdline exe=%proc.exepath
    parent=%proc.pname container_id=%container.id image=%container.image.repository)&lt;/span&gt;
  &lt;span class=&quot;token key atrule&quot;&gt;priority&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; WARNING
  &lt;span class=&quot;token key atrule&quot;&gt;tags&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;mitre_execution&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; T1059&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; filesystem&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;In other words, if a process is spawned and its executable begins with /tmp or /var/tmp, trigger an alert.
This rule is typically evaded. Even commodity bots and exploits will avoid such directories. In the
Log4Shell breach described earlier, detection was evaded because the attacker executed malware from a
service directory.&lt;/p&gt;
&lt;p&gt;Fundamentally, modern policies are little more than allow and deny lists.&lt;/p&gt;
&lt;h3&gt;A better approach&lt;/h3&gt;
&lt;p&gt;Pattern matching has a place but a stronger approach can replace most of its use cases. Bitbison makes
full causal logging practical. This means it can reason statefully over the system and its history,
including provenance: how things came to be on the system. Once questions like &amp;quot;who created this file?&amp;quot;
and &amp;quot;which network endpoints influenced its creation?&amp;quot; can be answered in near real time, policies can be
defined against the state of the system and flows of behavior, much closer to their true intention. In the
example above, the intention is to only permit trusted programs to execute. Trust is defined by the
provenance of the file: who installed it and from where. Bitbison can specify this directly.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;alert on $e:fspath →[execute] _ unless (
 pkgmgr →[proc] $i:thd, $i →[write] $e, conns($i) ⊆ repos );
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;In other words, the policy directly specifies &amp;quot;alert on any executable whose origin and contents cannot be
exclusively traced back to the package manager installing from an official repository.&lt;/p&gt;
&lt;p&gt;There are no false positives here and there is no list to evade. The origin of everything is always available
to query against.&lt;/p&gt;
&lt;h2&gt;What made this possible&lt;/h2&gt;
&lt;p&gt;It was not easy. We went back to fundamentals and rethought the observability
data model itself: data structures, memory management, allocation and data
representation both in memory and on disk. Bitbison pairs several novel
approaches to that data model with current techniques in vectorization,
concurrent data structures and storage representation. It is the result of the
collective experience of our whole careers.&lt;/p&gt;
&lt;h2&gt;What comes next&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;/servers.html&quot;&gt;Bitbison for Servers&lt;/a&gt; and &lt;a href=&quot;/builds.html&quot;&gt;Bitbison for Builds&lt;/a&gt; are available today for design partners, all under
the umbrella of a holistic security platform that begins by securing your most important assets and the workloads they run on.&lt;/p&gt;
&lt;p&gt;You will work closely with our team and have a direct impact on our capabilities
and supported use cases. The surface area is broad. As the team scales out, we
imagine a single platform covering endpoints, servers, agents, developer
workstations and more. The more complete the provenance graph, the stronger
the security guarantees that can be made.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;/index.html#access&quot;&gt;Sign up for early access&lt;/a&gt; or request a demo.&lt;/p&gt;
</content>
  </entry>
</feed>
