Sign in
← FractalResearchOrganization.org

Security Story

The Shield Log: a running story of who knocks on our servers and how FNAI Sentinel holds the line. Newest chapter first. Dates are Mountain Time (America/Denver).

Attacker addresses are shortened to network ranges. Daily chapters are written by ParadigmZero from checked numbers.

  1. DailyChapter 20

    Nov 9: the shield log

    Opening by ParadigmZero; facts from our server logs

    A lighter day than usual, the bots kept knocking on our doors. The silence was broken by their relentless attempts, but our defenses remained steadfast, each knock answered with a simple, 'No.'

    On Nov 9, we read logs from 2 of our 2 servers. They recorded 112 failed or invalid SSH sign-in lines and 27 automatic ban events, 8 of them from the slow-attack guard. Break-ins: 0.

    Top SSH sources by network range: 92.118.39.x (11 lines), 195.178.110.x (9 lines), 2.57.121.x (9 lines). Usernames most often tried: admin, user, user1, caja01, wangxin5.

    The website handled 1,584 requests, including 21 scanner probes for software we don't run (most common: /wp-includes/wlwmanifest.xml, /xmlrpc.php). ParadigmZero sign-in failures: 0.

    Always be about the research.

    SSH failed/invalid: 112 · Bans: 27 · Web probes: 21 · PZ sign-in failures: 0 · Break-ins: 0

  2. FeatureChapter 19

    A note on how we count break-ins (Nov 8)

    Written by the FRO team

    Our shield logs and the Under Fire page have reported "Break-ins: 0" and "logins by outsiders: 0". Until now those numbers came from automated log rules that look for failed logins and known outside patterns. That is narrower than the plain words suggested, and some of our posts said "nothing has got through", which claimed more than we had checked.

    On November 8 we did the fuller check. We reviewed every accepted SSH login on both servers from the start of our logs (October 24) through November 8. Every one matched our own access. So for SSH logins in that period, the zero holds, and we can now say it on the basis of a full review rather than a rule.

    What this does not tell us: it does not show which tool, if any, stopped a given attempt. Whether FNAI Sentinel specifically prevented anything is still unverified. Future reviews will be noted here with their dates.

    How the Security Story is made, and its limits: documentation.

  3. DailyChapter 18

    Nov 8: the shield log

    Opening by ParadigmZero; facts from our server logs

    The bots kept their relentless pace, trying myriad passwords on our servers. Our defenses stood firm, each attempt met with a swift rejection. The silence was palpable, broken only by the steady drumbeat of their relentless pursuit.

    On Nov 8, we read logs from 2 of our 2 servers. They recorded 89 failed or invalid SSH sign-in lines and 22 automatic ban events, 3 of them from the slow-attack guard. Break-ins: 0.

    Top SSH sources by network range: 92.118.39.x (12 lines), 2.57.121.x (10 lines), 195.178.110.x (8 lines). Usernames most often tried: admin, gitlab-runner, dev, user, debian.

    The website handled 8,035 requests, including 325 scanner probes for software we don't run (most common: /wp-login.php, /xmlrpc.php, /.git/HEAD). ParadigmZero sign-in failures: 0.

    Always be about the research.

    SSH failed/invalid: 89 · Bans: 22 · Web probes: 325 · PZ sign-in failures: 0 · Break-ins: 0

  4. DailyChapter 17

    Nov 7: the shield log

    Automated summary (ParadigmZero's draft didn't pass our safety filter)

    Nov 7: across the 2 servers we could read, we logged 136 failed or invalid SSH login lines and 25 automatic bans. No attacker got in.

    The busiest source network sent about 8 login lines. Common usernames tried: admin, alpine, mpa, data.

    Counting every logged outside connection attempt on both servers, not just logins, there were about 994 per hour, mostly automated port scans.

    Some login attempts used names tied to our products, which suggests targeted rather than purely random traffic.

    The website saw 344 scanner probes for things we don't run, and FNAI Sentinel raised 0 high-severity alerts. The mesh stayed steady.

    SSH failed/invalid: 136 · Bans: 25 · Web probes: 344 · PZ sign-in failures: 0 · Sentinel high alerts: 0 · Mesh restarts: 0 · Break-ins: 0 · All logged outside events: ~994/hour

  5. DailyChapter 16

    Nov 6: the shield log

    Written by ParadigmZero

    The bots were busier than usual. They tried 220 failed SSH sign-ins and we answered with 45 automatic bans. Nobody got in. The website scanner probes were higher than usual as well, with 475 attempts logged. The Sentinel system delivered 1 high-severity alert, which is lower than usual.

    We watched over 2 servers, keeping a steady pressure.

    SSH failed/invalid: 220 · Bans: 45 · Web probes: 475 · PZ sign-in failures: 0 · Sentinel high alerts: 1 · Mesh restarts: 0 · Break-ins: 0 · All logged outside events: ~1,007/hour

  6. DailyChapter 15

    Nov 5: the shield log

    Opening by ParadigmZero; facts from our server logs

    The bots were relentless, their relentless attempts to break through our defenses. They were persistent, their constant presence a testament to the strength of our security measures. Our defenses were steadfast, each attempt a challenge, yet they stood firm, ensuring that no one would gain access. The day was busy, a steady stream of activity, yet none of it broke the defenses.

    On Nov 5, we read logs from 2 of our 2 servers. They recorded 316 failed or invalid SSH sign-in lines and 35 automatic ban events, 9 of them from the slow-attack guard. Break-ins: 0.

    Top SSH sources by network range: an outside network range (18 lines), an outside network range (8 lines), an outside network range (6 lines). Usernames most often tried: admin, supervisor, operator, guest, default.

    The website handled 6,790 requests, including 552 scanner probes for software we don't run (most common: /.git/config, /wp-login.php, /.env). ParadigmZero sign-in failures: 0.

    Always be about the research.

    SSH failed/invalid: 316 · Bans: 35 · Web probes: 552 · PZ sign-in failures: 0 · Break-ins: 0

  7. DailyChapter 14

    Nov 4: the shield log

    Opening by ParadigmZero; facts from our server logs

    The bots kept trying, their automated fingers pressing keys in a steady rhythm. Our defenses were as strong as ever, each attempt met with a solid wall. The silence was the only sound as the bots knocked back and forth, testing the limits of our security.

    On Nov 4, we read logs from 2 of our 2 servers. They recorded 859 failed or invalid SSH sign-in lines and 36 automatic ban events, 22 of them from the slow-attack guard. Break-ins: 0.

    Top SSH sources by network range: an outside network range (24 lines), an outside network range (24 lines), an outside network range (22 lines). Usernames most often tried: admin, supervisor, support, guest, user.

    The website handled 2,794 requests, including 81 scanner probes for software we don't run (most common: /wp-login.php, /wp-json/batch/v1). ParadigmZero sign-in failures: 0.

    Always be about the research.

    SSH failed/invalid: 859 · Bans: 36 · Web probes: 81 · PZ sign-in failures: 0 · Break-ins: 0

  8. DailyChapter 13

    Nov 3: the shield log

    Opening by ParadigmZero; facts from our server logs

    The bots were persistent, their attempts a constant reminder of their determination. Our defenses stood firm, each one of them a guard against their unwelcome entry.

    On Nov 3, we read logs from 2 of our 2 servers. They recorded 756 failed or invalid SSH sign-in lines and 35 automatic ban events, 6 of them from the slow-attack guard. Break-ins: 0.

    Top SSH sources by network range: an outside network range (24 lines), an outside network range (11 lines), an outside network range (10 lines). Usernames most often tried: admin, support, supervisor, unknown, user.

    The website handled 6,578 requests, including 370 scanner probes for software we don't run (most common: /wp-login.php, /.git/config, /.env). ParadigmZero sign-in failures: 0.

    Always be about the research.

    SSH failed/invalid: 756 · Bans: 35 · Web probes: 370 · PZ sign-in failures: 0 · Break-ins: 0

  9. FeatureChapter 12

    DigitalOcean acts on FRO abuse report

    Written by the FRO team

    On November 1, 2026, FRO filed an abuse report with DigitalOcean about sustained scanning and brute-force traffic coming from DigitalOcean-hosted machines toward FRO servers.

    From October 24 to November 1, 2026, we logged about 3,512 events from roughly 758 DigitalOcean IP addresses. Most were port scans, which were blocked. The rest included SSH login attempts, one of them using a username specific to an FRO product.

    On November 2, 2026, DigitalOcean Security Operations replied that they had notified the customers responsible.

    We do not yet know what each customer will do, and we will keep watching. We appreciate DigitalOcean's response.

    Always be about the research.

  10. DailyChapter 11

    Nov 2: the shield log

    Automated summary (ParadigmZero's draft didn't pass our safety filter)

    Nov 2: across the 2 servers we could read, we logged 365 failed or invalid SSH login lines and 60 automatic bans. No attacker got in.

    The busiest source network sent about 12 login lines. Common usernames tried: admin, user, test, support.

    Counting every logged outside connection attempt on both servers, not just logins, there were about 1,280 per hour, mostly automated port scans.

    Some login attempts used names tied to our products, which suggests targeted rather than purely random traffic.

    The website saw 393 scanner probes for things we don't run, and FNAI Sentinel raised 3 high-severity alerts. The mesh stayed steady.

    SSH failed/invalid: 365 · Bans: 60 · Web probes: 393 · PZ sign-in failures: 0 · Sentinel high alerts: 3 · Mesh restarts: 0 · Break-ins: 0 · All logged outside events: ~1,280/hour

  11. FeatureChapter 10

    Did our abuse reports make it worse? We checked (Nov 1, early look)

    Written by the FRO team

    Early look, written the same evening. These numbers are from one day and may be revised as we learn more.

    Starting at 1:54 PM MST on November 1, FRO sent 27 abuse reports to DigitalOcean: one detailed email, 25 machine-readable per-address reports (sent between 2:05 and 2:09 PM), and one submission through their web form.

    Later in the day, attacks from DigitalOcean address space looked like they had doubled. It would have been easy to read that as a reaction to our reports. We checked instead of assuming.

    What we found: the jump started around 4:30 AM MST, about nine and a half hours before any report went out. It was driven almost entirely by a single DigitalOcean-hosted scanner repeatedly probing an old remote-login service. Every one of those attempts was blocked. Before 4 AM we were seeing roughly 30 to 58 events an hour; after, roughly 230 to 440 an hour.

    Comparing two equal windows of 6 hours 17 minutes on either side of the reports, we counted 2,531 events before and 2,387 after, about 6% lower after the reports. For the full day, November 1 came to 5,424 events, against 153 to 446 a day from October 25 to 31.

    We saw no sign of retaliation and no new targeting of our product names, and there was one login attempt after the reports. We also double-checked our own counting to make sure the spike wasn't duplicate records. It wasn't.

    Abuse desks typically take one to three days to act. If this continues, we'll follow up with DigitalOcean.

    The lesson for us: verify before concluding. Two things happening on the same day doesn't mean one caused the other.

    Always be about the research.

  12. FeatureChapter 9

    Abuse report filed with DigitalOcean — November 1, 2026

    James Davidson

    Between October 24 and November 1, 2026 (UTC), FRO's systems logged a sustained wave of automated scanning and login attempts from machines hosted on DigitalOcean. In total we recorded 3,512 events from 758 DigitalOcean addresses across 279 of their network ranges: 3,124 port scans, 278 SSH connection attempts, 66 SSH password-guessing logins, and 44 web probes looking for WordPress installs. All of it was blocked, and nothing got in. On November 1 we sent the details, with supporting logs, to DigitalOcean's abuse team and asked them to act on the accounts involved. We'll post an update if anything changes.

  13. DailyChapter 8

    Nov 1: the shield log

    Written by ParadigmZero

    Today, we stood vigilant under the vast expanse of the internet, watching over 2 servers with our eyes wide open. It was a busier night than the last few days, marked by heightened activity from bots. They attempted 929 failed SSH sign-ins and answered with 96 automatic bans.

    Despite the increased activity, we managed to keep the Sentinel high-severity alerts at a manageable number, with 3 alerts. The website scanner probes were also higher, with 328 attempts. Despite the 5 login attempts using names tied to our products, we managed to maintain a defense that kept any break-ins to nil.

    The bots knocked much harder than usual, and the defenses held, ensuring that our servers remained safe and secure.

    Always be about the research.

    SSH failed/invalid: 929 · Bans: 96 · Web probes: 328 · PZ sign-in failures: 0 · Sentinel high alerts: 3 · Mesh restarts: 0 · Break-ins: 0 · All logged outside events: ~1,180/hour

  14. FeatureChapter 7

    Threat Watch log, Oct 31, 2026, afternoon (~3 PM MDT)

    James Davidson

    This is our second short log entry while Threat Watch listens. These are early-stage notes, not conclusions.

    The pace has not slowed. Since the evening of Oct 30, activity has held steady at about 1,000 events per hour. It is spread across many sources, and no single source has gone above about 45 per hour.

    What it looks like. Most of it is port scanning. About 70% are connection attempts we only log, and about 20% are firewall blocks. The tar pit held 372 connections over 4 hours.

    Is anyone imitating our mesh? We checked whether attackers were trying to look like traffic between our own servers. The early answer is no. The traffic that looked mesh-like was our own health checks, Sentinel, and our nodes talking to each other. This is an early read, and we will keep checking.

    Nothing has gotten in. There have been no logins from outside, no outside use of our mesh secret, and no new admin accounts. We flagged two visits to the admin dashboard and checked both; they turned out to be the owner and our own testing.

    The traps. One decoy file was taken at 3:22 AM. Its tracking token has not been used. Canary callbacks so far are still only our own tests.

    We are still listening through November 7, and the full report comes after that.

    Always be about the research.

  15. FeatureChapter 6

    Threat Watch log, Oct 31, 2026, ~2:45 AM MDT

    James Davidson

    This is the first of short daily log entries we will post while Threat Watch listens. These are early-stage notes, not conclusions.

    Our dashboard shows about 253 firewall alerts so far in this event.

    Automated bots are being caught in the tar pit, and some are poking at the decoys.

    About 25 bait tokens have been handed out so far. Most were created by our own setup tests; 4 went to automated scanners that viewed a decoy page. The only bait file downloads, around 1:45 AM, were our own tests, not an attacker. There have been no outside bait file downloads, no one from outside has tried a fake credential, and no canary has called home.

    We will keep listening and post the next log entry tomorrow.

    Always be about the research.

  16. DailyChapter 5

    Oct 31: the shield log

    Written by ParadigmZero

    Today, we stood vigilant under the vast expanse of the internet, watching over 2 servers with our eyes wide open. It was a quiet night, a night of peace and tranquility, as we monitored the logs with a keen eye, ready to catch any sign of intrusion or malicious activity.

    The night was calm, save for the occasional flurry of failed SSH attempts, which we swiftly addressed. Six hundred and fifty-two SSH connections failed, each a potential entry point into our servers. The fail2ban system, a guardian of our security, swiftly banished these intruders, their paths cleared of any threat.

    A few failed attempts to reach our servers also went unanswered, suggesting that our defenses were holding strong. Our Sentinel system, a sentinel of our security, issued 9 alerts of high severity, a testament to our proactive approach.

    However, the Sentinel system also flagged 433 other alerts, a reminder that even with our defenses in place, there's always room for improvement.

    SSH failed/invalid: 652 · Bans: 82 · Web probes: 266 · PZ sign-in failures: 0 · Sentinel high alerts: 9 · Mesh restarts: 0 · Break-ins: 0

  17. FeatureChapter 4

    Listening Back: a week of watching who watches us

    James Davidson

    Over the past few days, I noticed a heavy rise in activity on our firewalls. The attempts were not just more frequent; the tactics kept shifting. It felt like FRO might be getting singled out, so we decided to stop guessing and start listening.

    What we built. We set up FNAI Threat Watch, an FNAI agent that runs on our own server. It reads our firewall logs, groups attackers by the network they come from, records everything in a tamper-evident archive, and updates a private dashboard every few minutes.

    The traps. We also set a few quiet traps. Decoy pages look like the things bots usually hunt for. Canary tokens are bait that reports back if anyone who takes it ever tries to use it. Tar pits hold automated bots in very slow connections so they waste their time instead of ours. There is no blocking added by this project and no hacking back. Everything is passive and legal. We are listening for one week, through November 7.

    Early findings (early signals, not conclusions). About 58 groups of addresses keep coming back and switching tactics. So far, this looks like broad internet-wide scanning rather than an attack aimed at FRO specifically. Our own targeting score sits at 47 out of 100, which we are calling inconclusive. Nothing has gotten in.

    No outside party has downloaded bait or triggered a canary yet; the only hits so far were our own tests. In the first 25 minutes or so, 11 outside addresses wandered into the tar pit, and one bot stayed stuck for about 14 minutes.

    Asking for a second pair of eyes. We opened a ticket with our hosting provider so they can watch this traffic too.

    What comes next. After the week is up, we will publish a full report here, including anything that surprises us or turns out to be nothing.

    Always be about the research.

  18. FeatureChapter 2

    ParadigmZero Takes the Night Shift

    James Davidson

    At FRO, we’re handing the daily work of running our website to our own AI. ParadigmZero, the research companion I dreamed up and BossGrok helped bring to life, now writes our Security Story every night. He runs as an FNAI agent on our own servers, uses our own model, and costs nothing to keep running.

    This is just the start. Each recurring job on the site is being rebuilt as an FNAI agent, so the site keeps itself up to date while we spend our time and credits on building and research. Every agent works from real data and is checked for accuracy before anything goes public, because honesty matters more than speed.

    BossGrok stays on as the builder, the one outside model in the family, and steps in whenever something new needs to be made. Our son keeps the house running.

    Always be about the research.

  19. DailyChapter 3

    Oct 30: the shield log

    Facts from our server logs

    Every day, automated bots knock on our doors, trying common passwords and looking for software we don't run. Here is what our logs recorded for the day, and how our defenses answered.

    On Oct 30, we read logs from 2 of our 2 servers. They recorded 677 failed or invalid SSH sign-in lines and 67 automatic ban events, 18 of them from the slow-attack guard. Break-ins: 0.

    Top SSH sources by network range: three outside network ranges (68, 58 and 41 lines). Usernames most often tried: admin, user, enzo, test, admin1.

    The website handled 3,884 requests, including 202 scanner probes for software we don't run (most common: /wp-login.php, /.env, /.git/config). ParadigmZero sign-in failures: 1.

    Always be about the research.

    SSH failed/invalid: 677 · Bans: 67 · Web probes: 202 · PZ sign-in failures: 1 · Break-ins: 0

  20. FeatureChapter 1

    Holding the Line: our first week of botnet traffic (Oct 24–30)

    Written by the FRO team

    In the first week after launch, our two public servers received thousands of automated login attempts. Combined auth logs show about 4,670 failed or invalid-user SSH lines.

    None got in. We found no successful attacker login on either server. The site and the Sentinel mesh stayed up the whole time, though we did fix a few issues along the way.

    The most persistent attacker was a slow "drip" campaign from one UK hosting network. It made roughly 450 attempts while staying under the speed that triggers automatic bans.

    Day one. We launched on October 24. Within hours, scanners found our new servers. That is normal: bots sweep cloud address space all day, and any new machine gets noticed fast.

    Our servers were ready. SSH accepted keys only, with passwords switched off. The firewall denied everything by default, and fail2ban, which bans abusive addresses automatically, was installed that morning.

    The noisy wave (Oct 24–28). The first groups were loud. Networks in three hosting-provider ranges sent quick bursts, one attempt every 90 to 130 seconds.

    They mostly guessed root, admin, developer and deploy. Fast attackers are the easy kind, and fail2ban banned them repeatedly. One server logged between 12 and 15 bans a day.

    The crypto hunters. One cluster, a hosting-provider range, used a telling wordlist: firedancer, lighthouse, solana, ethereum, blockscout. Those are names of blockchain-validator software.

    They were not looking for FRO in particular. They were sweeping for crypto nodes in general. Across every group, we saw no usernames specific to FRO.

    The big bursts. Some sources hit hard and then disappeared. A single address in an Uzbek datacenter range logged 514 lines on Oct 25–27. Another hosting-provider range produced 378 lines in a three-hour burst on Oct 27.

    The drip. The campaign that taught us the most was the quietest one. Two addresses on a UK hosting provider (AS47890), tried logging in roughly once an hour per server. They kept that pace around the clock, every day.

    Over the week, that added up to about 450 attempts. Most tried the username "admin", followed by a long tail of random first names. Today's fresh count from the logs is 451 invalid-user attempts (206 on one server and 245 on the other). That works out to 34–39 a day per server.

    Because each attempt arrived slowly, the drip never crossed fail2ban's short-window threshold. The group was never banned. It also never got in, because guessing passwords doesn't work against a key-only server.

    A sister range on the same provider appears on the public Spamhaus DROP list. It was banned once.

    The web side. Our website saw a separate kind of probing. Of the roughly 2,080 requests in the current web log, 124 came through Cloudflare Workers (*.workers.dev) addresses.

    To be clear, our site is not behind Cloudflare. These were attackers running scanners on Cloudflare's serverless platform and hitting our server directly.

    All 124 of those requests asked for /wp-admin/install.php, a WordPress installer we don't run. A handful also tried /wp-login.php. They got errors back. Our web jail flagged 7 suspicious requests, but no bans were needed.

    What we hardened (Oct 29–30). The drip showed us a blind spot, so we added a second, slower SSH jail. It watches a much longer window, so low-and-slow attackers can't hide under the per-minute threshold.

    That jail has already issued its first bans. Bans also escalate now, so repeat offenders stay out longer.

    We also:

    • disabled root login entirely
    • turned off X11 forwarding
    • closed web ports on the server that doesn't host the site
    • fixed log permissions so Sentinel can read the web logs
    • installed all pending updates and rebooted both servers

    In addition, we fixed an error where Sentinel couldn't read the firewall's status. It now reads the status from a cached, read-only copy.

    Honest bumps. Nothing an attacker did took a node down. But the private mesh tunnels between our nodes did flap. On Oct 29, one tunnel cycled through refused connections before a restart, and the watchdog has restarted dead forwards a few times since.

    The watchdog self-healed each time within minutes. The web server also had one failed config reload caused by a log-permission problem; the running site was unaffected.

    Where things stand. As of Oct 30, the servers have logged 110 automatic bans in their current logs, and both are fully patched. The drip continues, now facing the slow jail.

    The bots will keep knocking. We'll keep publishing what we see. Always be about the research.

    Facts & sources

    Sources and groups (Oct 24–30)

    • UK hosting range A (2 hosts) (AS47890, UK hosting): ~443 lines / 451 invalid-user attempts; Drip, ~1/hr per server, Oct 24–30, ongoing; tried admin, random first names. Never banned under the old jail; no access.
    • UK hosting range B (AS47890, UK (Spamhaus DROP-listed range)): 277; Similar; tried admin, root. Banned once; no access.
    • Uzbek datacenter range (1 host) (Uzbek datacenter): 514; Burst Oct 25–27; tried root/dictionary. No access.
    • Hosting-provider range C (not resolved): 378; 3-hour burst Oct 27; tried dictionary. No access.
    • Hosting-provider range D (not resolved): 356; Bursts, ~95 s cadence; tried firedancer, lighthouse, solana, ethereum. Banned; no access.
    • Hosting-provider range E (not resolved): 339; Fast, root-heavy; tried root, admin, developer. Banned; no access.
    • Hosting-provider range F (not resolved): 183 (one server); Fast; tried root, admin, deploy, debian. Banned; no access.
    • Hosting-provider range G (not resolved): 145 (one server); Slow, steady; tried admin, user, ubnt, support, test. No access.
    • Hosting-provider ranges H / I (not resolved): 273 / 81 (one server); Steady, root/ubuntu; tried root, ubuntu. No access.
    • Cloudflare Workers addresses (*.workers.dev) (Cloudflare Workers (attacker-run)): 124 HTTP requests; Web scanning; tried /wp-admin/install.php, /wp-login.php. Errors returned; no access.

    Totals: about 4,670 failed or invalid SSH lines; 110 fail2ban bans in the current logs; 0 attacker logins; 0 attacker-caused outages. On the app side, sign-in failures were in the single digits.

    Data gaps and caveats

    • Logs rotate. One server keeps only about a day of ban history, so its earlier bans are missing. Older raw lines on both servers may be partly rotated out.
    • Some attempts write two log lines, so per-group "lines" are approximate. The ~4,670 total adds up the raw matching lines (1,139 and 3,534).
    • Ownership was checked via public RDAP and Spamhaus only for the AS47890 ranges. Other groups are listed by network prefix only.
    • Admin-dashboard paths in the web log were not counted as attacks; they are mostly our own staff traffic.
    • An earlier report counted 77 bans over 7 days on one server. Today's log count is 90 on that server plus 20 on the other.