Bruno Airosa Cabrera

OSINT · Threat Intelligence · Detection Engineering

I build defences, then spend my time trying to get past them.

A working ping does not prove a tunnel is encrypted. An open port does not prove a service is healthy. Most of what I have learned came from the gap between those two things.

I work both sides on purpose. On one, OSINT and social engineering: what an organisation exposes without meaning to, and how a person becomes the way in. On the other, the detection that has to catch it, built and measured rather than described.

Neither half is worth much alone. You cannot write a detection for an attack you have never thought through, and you cannot judge whether an attack is worth running if you have never watched one arrive from the other side of the console.

Currently completing a B.S. in Cybersecurity and Information Assurance, Security+ certified, and working toward the CCNA. Based in Jacksonville, Florida, and open to relocation.

Bruno Airosa Cabrera

Lab work

Built, broken, and verified

Every project below includes the check that would have caught me if I were wrong. That is the part most portfolios leave out, and it is the part that matters.

Segmented Network & SIEM

Running

A four-VLAN network on a Cisco Catalyst, routed by a virtualized pfSense firewall on a Proxmox host. Suricata inspects the workstation segment and writes EVE JSON into Redis; Logstash drains the queue into Elasticsearch under a least-privilege role scoped to its own indices.

Redis sits in the middle for a specific reason. Elastic publishes no log shipper for FreeBSD, which is what the firewall runs, so the usual agent path is closed. The buffer also absorbs outages: during a heap resize the search cluster was down for twenty seconds and the queue drained afterward with no gap in the data.

Segmentation is enforced by default deny between segments, with each exception written deliberately. The honeypot's path to the log cluster, for example, is scoped to one host rather than the whole segment, so adding a machine to that VLAN does not silently grant it a route into the SIEM.

The full build is documented at github.com/Mentalnuk3/homelab-security, including an incident log of every failure and how it was diagnosed.

  • pfSense
  • Suricata 7.0.8
  • Elasticsearch
  • Logstash
  • Kibana
  • Redis
  • Proxmox
  • Cisco IOS
  • 802.1Q

Measured, not estimated

Suricata events indexed in one day   23,583
Alerts raised                        76
  of which explained on inspection   76  (72 were my own setup traffic)
Redis queue depth at steady state    0
Documents lost across a cluster restart  0   21,596 -> 21,836
Cluster health                       green

IDS Tuning Without Cargo Cult

Running

The standard advice for a noisy sensor is to disable whole rule categories. Before doing that I checked the actual alert record: 76 alerts against 23,583 events, and every one of them explainable.

Seventy-two fired because a browser on the trusted segment visited a dynamic DNS provider while I was configuring my own VPN endpoint. Disabling that category would have removed 6,062 rules, including nine that match specific malware families using that same provider for command and control, in order to silence traffic I generated once, by hand.

Nothing was suppressed. The one signature that genuinely repeated was traced to a game launcher holding a long-lived connection, identified by pivoting from the alert to the TLS metadata for that destination. It was rate limited rather than suppressed, because the same signature also detects real evasion through overlapping TCP segments.

  • Suricata
  • ET Open
  • JA3 fingerprinting
  • threshold.config
  • EVE JSON

The distinction that matters

# suppress deletes the signal permanently.
# a rate limit keeps it and drops only the repetition.
threshold gen_id 1, sig_id 2210050, type limit, \
          track by_src, count 1, seconds 3600

Post-Quantum VPN, Isolated and Audited

Running

A from-scratch VPN built during a DEF CON 33 workshop: a post-quantum handshake over TCP, an AES-256 key derived from it, and traffic carried over UDP through a TUN interface. Written in C++ against OpenSSL.

It runs in the isolated lab segment, and the placement is the point. This is unaudited cryptographic code that parses network packets. Software like that belongs behind a boundary that already exists and has already been tested, not one written specially for it.

Bringing it up took four separate fixes, including a diagnostic that had been checking UDP for a service listening on TCP. The command was correct, it ran cleanly, and its empty answer was worthless. I keep that one on the list because the lesson generalizes: a negative result from the wrong question proves nothing.

  • C++
  • OpenSSL
  • TUN/TAP
  • tcpdump
  • systemd
  • Debian

A working ping is not proof of encryption

# captured on the hypervisor while ICMP flowed through the tunnel
UDP 112 bytes  0a8b 49e4  5621 538c 3c1c db4a 727a c912
UDP 112 bytes  0a8b 49e4  36ce 24a8 8a6c b94d 3b71 bc9b

# the 4-byte ID matches the client log. the ICMP structure is gone.
# two near-identical pings produce completely different ciphertext,
# which rules out ECB and static XOR.

Automated Log Enrichment Engine

Running

A Python service that ingests firewall logs, enriches each event with external IP reputation from AbuseIPDB, and passes the result through an LLM for behavioral summarization before indexing into Elasticsearch for review in Kibana.

The design constraint worth naming: an enrichment layer that hallucinates is worse than no enrichment, because it launders a guess into something that reads like a finding. Reputation data and model output are stored in separate fields so an analyst can always see which claim came from where.

  • Python
  • Gemini API
  • AbuseIPDB
  • Elasticsearch
  • Kibana

Encrypted Remote Access

Running

WireGuard on the firewall, split tunnel, with a per-peer keypair and a pre-shared key layered on the handshake. The endpoint is a dynamic DNS hostname because the ISP assigns the public address by DHCP, and a hardcoded address fails silently while you are away from home.

DNS is not a monitoring system, so a watchdog records the public address on a schedule and logs loudly when it changes. It fails independently of the thing it watches. The DNS client itself was verified by falsifying its cache with a reserved documentation address and confirming it corrected itself, rather than by trusting that a hostname resolving today means the client still works.

  • WireGuard
  • pfSense
  • Dynamic DNS
  • cron
  • PHP

Verified from a mobile network, not from the couch

handshake                        15:29:02 UTC
peer endpoint                    carrier IP, Wi-Fi disabled
dashboard requests from tunnel   13

# a completed handshake proves the tunnel came up.
# requests arriving from the tunnel address prove the
# service behind it was actually reachable.

Private Recursive DNS

Running

Pi-hole handles blocklists, unbound does the recursion and forwards upstream over TLS with DNSSEC validation. The ISP sees encrypted traffic to one address instead of every domain the house looks up.

This does not make DNS private from the resolver, and saying otherwise would be marketing. It moves trust from the ISP to a chosen provider. That was a deliberate trade, not an oversight.

  • Pi-hole
  • unbound
  • DNS-over-TLS
  • DNSSEC
  • Quad9

DNSSEC confirmed by testing a signature that should fail

dig dnssec-failed.org   ->  status: SERVFAIL   correctly rejected
dig cloudflare.com      ->  status: NOERROR   flags: qr rd ra ad

# the ad flag is authenticated data. without a deliberately
# broken control, a working lookup proves nothing.

HTTP Tarpit

Running

A tarpit that answers scanners with an endless generated stream, running in a container with a hard memory cap and a tight systemd sandbox. It presents itself as a conventional web server, because a scanner that fingerprints a honeypot simply moves on.

It replaced a full honeypot farm that wanted 16 GB of RAM to capture malware behavior I had no use for. On a residential connection the interesting question is who is scanning and for what, not what their post-exploitation tooling does. Choosing the smaller tool because it matches the threat model is the judgment worth defending.

  • Go
  • LXC
  • systemd hardening
  • Filebeat
  • Elasticsearch

Wireless Auditing & Tor Relay

Archived

A reinforcement learning agent on a Raspberry Pi Zero W that passively surveys wireless networks and captures handshakes for offline cryptanalysis, used to audit my own environment.

Separately, a Tor middle relay on a Raspberry Pi 4B with throughput monitored through Nyx. Middle relays carry traffic between nodes and never touch the open internet, so they contribute capacity without the exposure that comes with running an exit. Both are currently offline. The relay is being rebuilt inside the lab's isolated segment.

  • Raspberry Pi
  • bettercap
  • A2C / reinforcement learning
  • Tor
  • Nyx

Technical ground

What I work with, and what I do with it

Everything listed here appears in the projects above. If it is on this page, I have run it, broken it, or fixed it.

Detection & monitoring

  • Suricata rule tuning, thresholds and suppression with documented reasoning
  • Elasticsearch, Logstash, Kibana, Filebeat
  • EVE JSON, JA3 fingerprinting, TLS and DNS metadata analysis
  • Alert triage and pivoting from a signature to the flow behind it
  • Least-privilege ingest roles and index lifecycle

Network & infrastructure

  • pfSense firewall policy, NAT, and rule debugging with pfctl
  • 802.1Q VLAN segmentation on Cisco IOS
  • Proxmox virtualization, LXC and KVM
  • WireGuard, DNS-over-TLS, DNSSEC, dynamic DNS
  • Packet capture and analysis with tcpdump and Wireshark
  • Linux and FreeBSD administration, systemd hardening

Automation & analysis

  • Python for log enrichment and threat automation
  • Bash and shell scripting, cron-driven operational checks
  • API enrichment: IP reputation, LLM-assisted summarization
  • Docker, Redis, PHP for firewall configuration work
  • NIST Cybersecurity Framework, vulnerability prioritization

Competition

Two results someone else scored

Lab work is graded by whoever built the lab. These two were not. Both were scored by other people, against a field, on a clock.

Aug 2023

DEF CON 31, Red Team Village

OSINT capture-the-flag · 100 of 120 points

Red Team Village is DEF CON's offensive security track. An OSINT competition there scores what you can establish about a target from public sources alone: pivoting from a thin seed, a username or a photograph or a domain, to something verified, without ever touching the target.

100 of the 120 points on the board. It is the closest thing I have to an outside opinion on the skill I rate highest in myself, which is the only reason it belongs on this page rather than in a list of conferences I attended.

2025

AT&T Cybersecurity CTF

OSINT and cryptography · 88th of more than 200

Run by AT&T's cybersecurity department and open across the business. I entered from a field sales role, not from that department, and worked the entire event from a tablet against a VM they provisioned, with no local tooling and no real keyboard.

The placing is mid-table and I am not going to dress it up. What I would defend is finishing at all under those two constraints.

Published

Byteproof Parenting

Peers kept asking him the same question: "Can you hack my son's Facebook?"

Two things were wrong with it. Most of those sons had not opened Facebook in years, so the parents were policing a place their children had already left. And the question asked for a way to spy instead of a way to talk. Both are symptoms of the same gap.

The book is the long answer, and the answer is not a technique. It argues that fear-based parenting fails online for a structural reason: restriction and surveillance produce children who hide things, not children who are safe. It runs from home network segmentation, MFA and passkeys through to the psychology of variable reward schedules and how to hold the conversation.

The same argument holds at work, which is why it sits on this page. Security awareness programmes built on catching people fail the way fear-based parenting fails: they produce compliance in front of you and workarounds behind you.

The book has its own home at byteproofparenting.com, written for parents rather than for engineers.

Professional context

Where this work has been paid work

Two places where the security substance was real. My full employment history, titles and dates included, is on my resume. This page is about the work.

Sep 2025 – present

Outview IT Solutions

Managed security service provider

I evaluate client security postures and threat models, and advise engineering teams and executives on managed SOC capability, SIEM integration, and incident response readiness. Day to day that means sitting between Tier 2 and 3 engineering and the client, turning vulnerability findings and incident telemetry into mitigation plans people will actually carry out, and scoping control baselines against recognized frameworks.

The part that transfers most directly to an operations role is the translation. A finding nobody acts on is indistinguishable from a finding nobody made.

2023 – 2025

AT&T

Cyber Threat Intelligence lab program, across two field roles

Selected for a forty-hour experiential program working directly with AT&T's Cyber Threat Intelligence unit.

The field work underneath it was diagnosing hardware, firmware, and connectivity faults inside customer environments, where the fault is almost never where the customer says it is. That habit is the same one the lab work runs on.

Credentials

Certifications, education, and competition

Certifications

  • CompTIA Security+ active
  • Certified in Cybersecurity (CC) ISC2
  • JNCIA-Junos Juniper
  • Google Cybersecurity & IT Support
  • Cisco CCNA in progress

Education

  • B.S. Cybersecurity & Information Assurance Western Governors University, expected 2027
  • B.S. Physical Education Centro Universitário Celso Lisboa

Community

  • DEF CON 34 volunteer staff
  • BSides Orlando and Jacksonville
  • DC904 / 2600, PyJax, JaxLUG
At DEF CON holding a printed copy of Byteproof Parenting
DEF CON 34 · volunteer staff, with a printed copy of the book. Faces other than my own are blurred, and location metadata was stripped before publishing.

Contact

Open to security operations roles

Looking for SOC analyst, detection engineering, or threat intelligence work. Based in Jacksonville, Florida, open to relocation and travel.

All human connections should be TCP, not UDP.

UDP sends and never looks back. TCP shakes hands, waits for acknowledgement, and retransmits when the other side goes quiet. It is the same reason I would rather write down the four things that broke than the one that worked.