thebleucheese®
Developer System · MHC-1370
PROJECTS
INDEX // 09 ENTRIES
TUNER STEREO DIGITAL
PRINCIPAL ENGINEER // FULL STACK
VOL 36
POWER
Input · Select
Projects About Resume Blog
16-BIT · 44.1 kHz
Disc · Project Index ONBOARD DAC
01

MACAT

Easy to use desktop and cli tool for endpoint adversary simulation (and automation).

5:12|
2022-26
▶ OPEN MANUAL
02

Stealth Python / Proxmox

Python FastAPI project controlling 2 self-hosted Proxmox instances. Proprietary / Non-Public.

3:58|
2026
▶ OPEN MANUAL
03

Stealth Pydantic AI

A personal Python project built on Pydantic AI running a combo of agentic and deterministic flows on a FastAPI service.

4:20|
2026
▶ OPEN MANUAL
04

TAXII 2 Server

A TAXII 2 threat-intel server, started as a Node.js + MongoDB learning project, ended up being used at work.

6:45|
2017
▶ OPEN MANUAL
05

Digibuyer

Serverless Python lambda to search for specific Digimon memorabilia for my wife.

4:08|
2023
▶ OPEN MANUAL
06

Enterprise App Modernization

Long term modernization of a large enterprise app including migrations, framework, frontend architecture.

8:30|
2018-24
▶ OPEN MANUAL
07

Enterprise App New UI

New UI design and component system for a large enterprise app while continuing to ship features.

5:55|
2023
▶ OPEN MANUAL
08

Enterprise App Data Portability

Runtime import / export and migration tools allowing application data sharing.

7:22|
2019-24
▶ OPEN MANUAL
09

Yardbolt

Security event query fabric to connect to 40+ different defense tools.

6:18|
2019-21
▶ OPEN MANUAL
thebleucheese
Yardbolt Service Manual
P. 1 / 3

Yardbolt

2019-21

Yardbolt is a query fabric for security telemetry. Query gateway would be another way of describing it. The name comes from yards of fabric and bolts of cloth. The idea is to manage connectivity to different defense tools through a single system and allow you to write one generic domain language query that runs against whichever defense tools you have. It wraps stix-shifter to translate a single STIX pattern into specific vendor queries, runs searches as async jobs, and presents results through a Vue UI. This is kind of a weird use of stix-shifter since it's intended to be CTI / indicator focused, but the library handles all the connectivity with all these different tools so you can use it to write native queries as well. My thinking was I could use this to check logs after attack simulations more easily than writing a big pile of integrations. BAS control validation is typically more blind and this gives you something a bit closer to a realistic audit but not as time-consuming as manual incident response. There's some Sigma rule integration as well. This was my first python project so I was learning the language by building Yardbolt. I'd heard a little bit about FastAPI (very very new at the time) so I bought into SQLModel as well. Today, I'd probably just use SQLAlchemy directly.

Fig. 1: Primary Interface

Yardbolt incident query: STIX pattern, its stix-shifter translation, and results⤢ ZOOM
One STIX pattern, its translated query, and results in a configurable view

Yardbolt solves a problem I kept seeing with attack simulations where events were (hopefully) in the SIEM, but almost every tool has a different query language. stix-shifter does translation and SIGMA sort-of does too. Yardbolt uses those while adding on accounts and tool connections, saved queries, async execution, and result views for the queries and a UI. I picked it up as my way into Python, but I put it on the shelf for a bit when I thought SIEMs were starting to standardize around common schemas like ECS. A couple years later and this correlation process is still a bit less solved than I'd thought it would be.

Tech Detail

Fig. 2: Functional Overview

Yardbolt architecture: tech stack overview ⤢ ZOOM
BackendFastAPI + SQLModel (async)
Query layerstix-shifter
Jobsarq workers on Redis
StorePostgreSQL + Alembic
FrontendVue 3 / Vite / Pinia / PrimeVue
DetectionspySigma -> backend rules
Year2019-21
VisibilityProprietary preview
Caution
Personal project, closed source.

Notes

Queries can take a long time on prod systems and I didn't want their slowness to be a problem. I made it so the query gets written to the database, and then it hands the work to an arq worker on Redis, and returns a job id. The worker runs the search, normalizes results, and updates the record while the frontend polls for it with a backoff that starts at a few seconds and stretches out. This avoids hammering the server while SIEM or log aggregator takes its time.

This was my first Python project and I started it on async FastAPI when the framework was about a year old and async SQLAlchemy juuust starting. I hit a lot of walls with early FastAPI, and SQLModel had a ton of problems, but ORMs all have a lot of tradeoffs so I kept complex queries as separate manually-constructed prepared statements.

The Vue client is generated from the backend's OpenAPI spec, so every endpoint and model goes through a typed client instead of rando axios calls. I used CodeMirror for query authoring and Chart.js for the dashboard.

Screens & Reference

Fig. 3: Dashboard

Dashboard⤢ ZOOM

I was working on splitting query results into incidents, alerts, blocks, detections, queried logs with a recent-activity feed of submitted queries and logged incidents.

Fig. 4: Query Builder

Query Builder⤢ ZOOM

You can build queries against connected defense tool accounts, tagging them with ATT&CK techniques or other information that give you a customizable result view.

Fig. 5: Defense Tools

Defense Tools⤢ ZOOM

Stix shifter tool integrations discovered from the stix-shifter library modules installed at runtime.

Fig. 6: Result Views

Result Views⤢ ZOOM

A drag-and-drop builder for saved result views which let you configure datatable columns and row-expansion fields mapped from a tool's result schema.