Welcome.
Thanks for finding your way to my personal site. I'm Craig, and I've been passionate about learning and building my knowledge in cybersecurity for several years now. That curiosity is what led me to pursue a second bachelor's degree in Information Assurance & Cyber Defense at Northern Michigan University — I wanted to understand how systems actually fail, and how to design and defend against that failure before it happens.
Two areas hold my attention right now. The first is cloud security — so much of modern infrastructure now lives in shared, externally-managed environments where the perimeter isn't a wall anymore, it's a set of permissions and configurations, and getting those wrong is how breaches happen. The second is AI automation risk — the same tools accelerating security work are introducing attack surfaces we're only beginning to understand, and a poorly-scoped AI agent can become as much of a liability as an unpatched server.
My coursework spans database systems and secure data architecture, cloud security fundamentals, incident response, and network defense — each one another angle on the same question: where does trust break down, and how do you catch it early? Beyond my background below, this site also holds notes, projects, and tools I've built while learning — worth a look if you're in the field too.
Security operations
A SOC analyst's job is pattern recognition under time pressure: watch the alerts a SIEM surfaces, work out which ones matter, and follow a defined process to contain and document what's actually happening. It's less about heroics and more about not missing the quiet signal in a noisy feed.
The gap that actually matters isn't "an alert fired" — it's between that and "here's what happened and what we did about it." A tool can surface an anomaly; only a process turns that anomaly into a documented, defensible response. That's why the boring parts of SOC work — clear escalation paths, consistent documentation, knowing which playbook applies before you need it — end up mattering more than any single piece of threat intelligence. Speed without structure just means panicking faster. I've written more on what that process actually looks like in the incident response lifecycle.
Networking
Almost everything in security eventually comes back to how traffic actually moves — addressing, routing, what a firewall is really deciding when it drops a packet, what an IDS/IPS is watching for versus what it acts on.
Most security problems are network problems wearing a different hat — a "compromised account" is really a set of connections that shouldn't have been possible in the first place. Understanding how traffic is supposed to move is what makes it obvious when it isn't. That's the real value of network fundamentals: not memorizing port numbers, but building the instinct to look at a topology and immediately spot where trust is assumed instead of enforced. Reading actual packets is where that instinct gets tested.
Cloud
More infrastructure lives in someone else's data center every year, which means more of the job is understanding shared responsibility: what AWS secures, what you secure, and where the seams are.
Shared responsibility sounds simple until something goes wrong, and then it becomes the whole question: was this a provider failure or a misconfigured bucket someone left open? Most cloud breaches trace back to the second kind — not a flaw in the platform, but a permission that was broader than it needed to be. Treating the cloud as "someone else's problem" is exactly the assumption that causes the incident. It's also the thinking behind zero trust: rather than assuming anything inside a network boundary is safe, every request gets verified on its own merits, every time, regardless of where it's coming from. In an environment with no real perimeter left, that's less a new idea than an honest description of how things already work.
Risk & governance
A vulnerability isn't automatically a priority — risk assessment is the discipline of deciding what actually needs fixing first, and being able to explain that decision to people who don't speak in CVSS scores.
A hundred-page vulnerability scan is useless if nobody can tell which ten items on it actually matter. Good risk assessment isn't about finding more problems — scanners already do that — it's about triage: separating theoretical exposure from what a realistic attacker would actually exploit, and then explaining that distinction clearly enough that a non-technical decision-maker can act on it. The technical skill and the communication skill aren't separate parts of the job; a risk assessment nobody understands doesn't reduce any risk at all. The CIA triad is usually the fastest way to explain what's actually at stake.
Teaching & training
Security awareness training is only as good as the instructional design behind it — most people don't ignore phishing warnings because they're careless, they ignore them because the training was forgettable.
Most breaches don't start with a brilliant exploit — they start with someone clicking a link, reusing a password, or plugging in a USB drive they found in a parking lot. No firewall fixes that. The only real defense is people who've actually internalized why it matters, and that only happens through training that's designed well, not just delivered. A slide deck people click through once a year changes nothing; a habit changes everything. That's the gap good instructional design is built to close, and it's why I think security awareness deserves the same rigor as any technical control — because the human layer is the one attackers target first, precisely because it's usually the least defended.
Education & credentials
B.S., Information Assurance & Cyber Defense
Northern Michigan University · expected December 2026 · GPA 3.82
B.Sc., Sociology, minors in Psychology & Criminology
University of the West Indies
M.Sc., Sociology of Development
University of the West Indies
Certifications
CCNA
AWS Certified Cloud Practitioner
Affiliations & honors
Member, NMU Student Cybersecurity Association
Undergraduate Research Fellowship, 2026–2027
Core concepts in cybersecurity & IT
Short primers on ideas that come up constantly in cybersecurity and IT, written for anyone getting started — no prior background assumed. Ordered roughly from foundational to specialized: each one covers what the concept is, why it matters, and where to see it in action.
Deep dive: Active Directory
A longer look at domains, Group Policy, and the attack techniques that target enterprise identity
→
Deep dive: AWS cloud security
Shared responsibility made concrete — IAM, CloudTrail, GuardDuty, and incident response on AWS
→
Reference: Linux command cheat sheet
Navigation, permissions, processes, and networking commands in one place
→
Want to practice the commands, not just read them?
Bashcrawl is a free, open-source dungeon crawler played entirely with real Linux commands — the dungeon is just folders on your computer
↗
Foundations
The CIA triad
Almost every security control, policy, and incident ultimately traces back to one of three properties: Confidentiality (only the people who should see the data can see it), Integrity (the data hasn't been altered in a way that wasn't authorized, and you can verify that), and Availability (the systems and data are actually reachable when someone legitimately needs them). It's the first framework taught in nearly every entry-level security course, not because it's simple, but because it gives you a fast way to categorize what's actually at stake in any given incident.
Mapping real incidents onto the triad makes it click. A stolen customer database is a confidentiality failure. A ransomware attack that encrypts files without stealing them is primarily an availability failure — the data still exists, but no one can use it. A tampered financial record that changes a number without anyone noticing is an integrity failure, often the hardest of the three to detect precisely because nothing looks obviously wrong. Most real breaches touch more than one leg of the triad at once, which is part of why they're expensive to clean up.
Identity & access
Authentication vs. authorization
These two words get used almost interchangeably in casual conversation, but they answer different questions. Authentication answers "are you who you say you are?" — a password, a fingerprint, a code from an authenticator app. Authorization answers a separate question that only makes sense once identity is established: "now that we know who you are, what are you allowed to do?" A logged-in employee is authenticated; whether that employee can access the payroll database is a matter of authorization.
Multi-factor authentication (MFA) strengthens the first question by requiring more than one type of proof — something you know (a password), something you have (a phone or hardware key), or something you are (a fingerprint) — so that a stolen password alone isn't enough to get in. On the authorization side, the guiding principle is usually least privilege: give an account only the access it actually needs to do its job, nothing more, so that if it's ever compromised, the blast radius is as small as possible. Most access-related breaches trace back to one of these two principles being skipped, not to some exotic technical flaw.
Cryptography
Encryption and hashing, without the math
Encryption comes in two main flavors. Symmetric encryption uses the same key to lock and unlock data — fast, but it creates a hard problem: how do you get that key to the other person without someone intercepting it along the way? Asymmetric encryption solves that by using a mathematically linked pair of keys — a public key anyone can use to encrypt a message, and a private key, kept secret, that's the only thing that can decrypt it. This pairing is what makes HTTPS possible: your browser and a website can agree on a secure connection without ever having met before.
Hashing is a different tool entirely, and one of the most commonly confused with encryption. A hash function takes data of any size and produces a fixed-length string that's effectively impossible to reverse back into the original — it's a one-way street, not a lock-and-key. That makes it useful for exactly the situations where you never want to get the original data back: storing passwords (a website should never be able to see your actual password, only its hash) and verifying that a downloaded file hasn't been tampered with, since changing even one byte produces a completely different hash.
Infrastructure
IP addressing, the ten-minute version
Every device on a network needs a unique address to be reachable — the digital equivalent of a street number. An IPv4 address, written as four numbers separated by dots (for example, 192.168.1.24), is that address. Alongside it travels a subnet mask, typically something like 255.255.255.0, which tells the network which portion of the address identifies the network itself and which portion identifies the individual device sitting on it.
There are two ways a device gets its address. Static configuration means someone types the address in by hand — common for servers, printers, and networking equipment that need a predictable, unchanging address. DHCP (Dynamic Host Configuration Protocol) means a server on the network assigns the address automatically when a device connects, which is why most laptops, phones, and home devices never need manual setup at all.
The fastest way to see any of this in practice is the command line. Running ipconfig on Windows (or ifconfig / ip addr on Linux and macOS) shows the address, subnet mask, and default gateway a device is actually using right now — usually the first thing worth checking any time something on a network isn't behaving the way it should.
Based on a Cisco Packet Tracer networking lab, "Basic Network Information."
Investigation
Reading packets with Wireshark
Every other topic on this page describes traffic in the abstract — an IP address, a TCP handshake, an encrypted session. A packet analyzer like Wireshark is what makes all of that literal: it captures every frame crossing a network interface and lets you open one up to see exactly what's inside, header by header. It's the tool that turns "the network is slow" or "something looks suspicious" from a guess into something you can actually verify.
The clearest place to see this is the TCP three-way handshake, the exchange that opens every TCP connection: a SYN packet from the client, a SYN-ACK back from the server, and a final ACK from the client confirming the connection is open. Below is a real capture of that exchange — the highlighted row is the initial SYN, and the pattern repeats for every TCP session on the network. If the SYN-ACK never comes back, that's usually the first sign a server is unreachable rather than just slow.
A single minute of ordinary browsing can generate thousands of packets, which is where display filters earn their keep — typing http, dns, or tcp.port==443 narrows that flood down to exactly the conversation that matters, and filters can be combined with AND/OR/NOT to get specific fast. The other thing that becomes viscerally clear the first time you use one of these tools: unencrypted protocols like HTTP and FTP are completely readable in plain text, usernames and passwords included, while HTTPS traffic shows up as unreadable ciphertext. It's the difference between a postcard and a sealed envelope, and seeing it firsthand makes the case for encryption better than any lecture does.
Based on a personal Wireshark lab exercise, "Tech Exploration Reflection."
Operations
The incident response lifecycle
When something goes wrong, "figure it out as you go" is how a bad day turns into a bad week. The standard framework, drawn from NIST guidance, breaks response into six phases: Preparation (having playbooks, contact lists, and tools ready before anything happens — the phase most often skipped, and the one that matters most), Detection & Analysis (noticing something is wrong and figuring out what it actually is), Containment (stopping it from getting worse, often by isolating affected systems), Eradication (removing the actual cause, not just the symptom), Recovery (safely restoring normal operations), and Lessons Learned (documenting what happened so the same gap doesn't get exploited twice).
The order matters more than it looks. Skipping straight to eradication before containment can tip off an attacker and cause them to accelerate or destroy evidence. Skipping the final phase means the organization pays the same cost again the next time a similar incident happens — and post-incident reviews consistently show that most breaches exploit a gap that a previous incident should have already closed.
Threats
Malware, and what actually separates the types
"Malware" is an umbrella term, and the differences between its categories usually come down to two questions: how does it spread, and does it need a person to help it along? A virus attaches itself to a legitimate file and needs that file to actually be opened or run before it activates and spreads — it depends on human action. A worm does away with that requirement entirely, self-replicating and spreading across a network on its own, which is why worm outbreaks can escalate far faster than viruses. A trojan doesn't self-replicate at all; it disguises itself as legitimate software and relies purely on deception to get installed in the first place, at which point it can open a backdoor or deliver something else.
Ransomware and spyware describe what the malware does rather than how it spreads, which is why either one can arrive via a trojan, a worm, or a phishing attachment. Ransomware encrypts a victim's files and demands payment for the key; spyware quietly monitors activity and exfiltrates data without the victim ever noticing anything changed. Knowing the category matters operationally — a worm outbreak calls for immediate network segmentation, while a trojan calls for figuring out how it got permission to install in the first place.
The human layer
Social engineering: attacking the person, not the system
Not every attack targets a machine. Social engineering targets the person operating it, using the same psychological levers that work in any con: urgency ("your account will be locked in 10 minutes"), authority ("this is IT, we need your password to fix an issue"), and trust ("click here, it's from your manager"). It works because it routes around technical defenses entirely — a perfectly patched, perfectly firewalled system is still vulnerable if someone with legitimate access can be talked into handing over a credential.
Phishing (email), vishing (voice calls), and smishing (text messages) are the same underlying tactic delivered through different channels. Spear phishing narrows the target to one specific, researched individual — often using details pulled from exactly the kind of OSINT covered further down this page — which makes it far more convincing than a generic mass email. Technical filters catch a meaningful share of these attempts, but the last line of defense is always a person recognizing that something feels off, which is precisely why security awareness training matters as much as any firewall rule. More on that line of thinking is in the Teaching & Training section of the main site.
Reconnaissance
What is OSINT?
OSINT stands for open-source intelligence — the practice of building a picture of a person or organization using only information that's already public. That includes social media profiles, code repositories, domain registration records, indexes of previously leaked data, and metadata quietly left inside ordinary files. No single piece needs to be sensitive on its own. The value comes from connecting many small, public details until a pattern emerges: a username reused across a professional profile and an old forum account, or a subdomain nobody remembered was still running.
Security professionals use OSINT in two directions. On the offensive side, it's the first phase of a penetration test — mapping an organization's exposure before anything active ever touches its systems, because acting on public information alone is far less likely to trigger alarms or cause damage. On the defensive side, organizations run OSINT against themselves to find out what an attacker would already know for free, and fix what shouldn't be visible.
A few tools worth knowing by name: SpiderFoot, which automates queries across more than a thousand open data sources and organizes results by data type; and Recon-ng, a modular framework where individual reconnaissance tasks are loaded as separate modules inside their own workspace, keeping different investigations cleanly separated. Both reflect the same underlying discipline — passive gathering first, always.
Based on a Cisco Networking Academy lab, "Using OSINT Tools."
Digital forensics
How steganography hides data in plain sight
Cryptography and steganography solve different problems. Cryptography scrambles a message so it can't be read without a key — an observer can see that something secret exists, just not what it says. Steganography instead hides the message so no one suspects it's there at all. The name comes from Greek: "covered writing." The practice is ancient, but the digital version is very much a live concern in modern security work.
The most common digital technique is called Least Significant Bit (LSB) substitution. A digital image stores each pixel's color as numbers — in a standard image, three values per pixel, one each for red, green, and blue, ranging from 0 to 255. The last binary digit of each of those numbers — the "least significant bit" — barely affects the visible color at all; changing it shifts the value by just 1 out of 255. Replace that invisible bit, across millions of pixels, with the bits of a secret message, and you can hide a surprising amount of data with zero visible change to the image.
This matters beyond novelty. Malware authors use steganographic techniques to smuggle command-and-control instructions inside innocent-looking images, slipping past filters that only inspect file types and obvious signatures. Digital forensics investigators, in turn, need tools to detect and reverse it: steghide embeds and extracts hidden data in JPEG and BMP files, zsteg scans PNG and BMP files for LSB-encoded data, binwalk detects entire files concatenated inside other files, and exiftool checks a completely different hiding spot — the metadata layer, where a hidden message can sit in a comment field or GPS tag with no bit-level manipulation at all.
Adapted from a steganography tutorial written for hands-on practice with these tools.
Active Directory, the enterprise identity backbone
A deeper look at the technology that controls authentication, authorization, and security policy across most enterprise networks — built hands-on in a lab environment, explained here for anyone starting from zero.
Foundations
What Active Directory actually is
Active Directory is, at its core, a directory service — a structured database of every user, computer, and resource on a network, along with the rules governing who can do what. The server that hosts this database is called a domain controller, and the network of accounts and machines it governs is a domain (something like lab.local in a small lab setup, or a company's real internal domain in production).
The detail that surprises most people learning this for the first time: Active Directory cannot function without DNS. It isn't an optional add-on — a domain controller automatically becomes a DNS server, because AD uses DNS to locate other domain controllers, authenticate users, and let computers find network services in the first place. Promote a server to a domain controller and DNS configuration happens automatically alongside it, precisely because one is meaningless without the other.
Structure
Organizational Units and security groups
An Organizational Unit (OU) is a container — typically mapped to something real, like a department (IT, HR, Finance) — used to organize users and computers logically and to apply policy to a specific slice of the organization rather than everyone at once. A security group solves a different problem: rather than granting permissions to individual people one at a time, you grant permissions to a group, then add or remove members from that group as their role changes.
This is role-based access control (RBAC) in practice. Instead of an administrator manually tracking which of two hundred employees can access the finance server, they grant that access once to a "Finance_Team" group — adding someone to the team automatically grants the access, and removing them automatically revokes it. The permission logic lives in one place instead of being scattered across two hundred individual decisions.
Enforcement
Group Policy: configuration at scale
A Group Policy Object (GPO) is a set of configuration rules that gets applied automatically to every user or computer within the OU it's linked to — password complexity requirements, account lockout thresholds, who's allowed to log on locally, which software runs, which USB ports are disabled. Once a GPO is linked to a domain or OU, it applies to everything underneath it without anyone touching an individual machine.
The part that takes some getting used to is inheritance: policies flow downward from domain to OU to sub-OU, and a more specific policy can override a broader one further up the chain. This is powerful — a global password policy for the whole company, with a stricter one layered on top just for IT admins — but it also means OU structure has to be planned before it's built, since reorganizing afterward can quietly change which policies apply to whom.
Defense in depth
The Protected Users group, as a case study
Active Directory ships with a built-in security group called Protected Users, and it's a genuinely useful example of what "defense in depth" means in practice rather than as a buzzword. Adding a privileged account to this group changes several things about how that account behaves at once: it can no longer authenticate using weaker legacy protocols like NTLM, its credentials are never cached locally on the machines it logs into, and it becomes resistant to delegation-based attacks.
That combination directly closes off pass-the-hash, a technique where an attacker steals a password's cached hash from memory and uses it to authenticate without ever knowing the actual password. No single setting here is exotic — it's the layering of several unglamorous restrictions that makes a privileged account meaningfully harder to compromise, which is the actual definition of defense in depth.
The attacker's view
Why Active Directory is the top target
Compromise a single laptop and you get that laptop. Compromise Active Directory and you potentially control every account, every machine, and every permission in the entire organization — which is exactly why it's consistently the top target in enterprise breaches rather than a side detail. A few named techniques come up constantly in this space: Pass-the-Hash (reusing a stolen credential hash instead of a real password), Kerberoasting (requesting service tickets for accounts with weak passwords and cracking them offline, away from any lockout policy), and Golden Ticket attacks (forging a ticket-granting ticket using a stolen key that lets an attacker impersonate any user, indefinitely).
What connects all three is that none of them require a flaw in Active Directory's code — they exploit how trust and authentication are designed to work by default. That's the real argument for treating AD security as its own discipline rather than an afterthought: privilege escalation and lateral movement, the two phrases that show up in almost every serious breach report, usually describe an attacker moving through exactly the trust relationships AD was built to provide.
Based on a personal Active Directory lab exercise, "Tech Exploration Reflection," researched using the MITRE ATT&CK framework.
AWS cloud security, from the ground up
The shared responsibility argument on the main site's Cloud section, made concrete: the actual services involved, what they do, and how they fit together — built from hands-on AWS coursework and the AWS Certified Cloud Practitioner curriculum.
Foundations
What "the cloud" actually means
Strip away the marketing and cloud computing is a simple trade: instead of buying, racking, and maintaining physical servers, you rent computing capacity from someone who already has it running at enormous scale — and you only pay for what you actually use. AWS's version of this rests on a handful of properties that all point the same direction: on-demand access (spin resources up when you need them, stop paying when you don't), elasticity (capacity adjusts automatically as load changes), and global reach (the same infrastructure is available from data centers around the world without you building any of it).
The practical effect is that a two-person startup and a Fortune 500 company can rent the exact same underlying infrastructure — the difference is how much of it they use and how they configure it. That last part, configuration, is where nearly all of cloud security actually lives.
Building blocks
The core building blocks: compute, storage, and databases
EC2 (Elastic Compute Cloud) is a virtual server — you choose the operating system, the hardware profile, and what runs on it, and AWS handles the physical machine underneath. S3 (Simple Storage Service) is object storage built for durability and scale, commonly used for backups, static websites, and data lakes; by default, everything in it is private, and staying that way requires an active decision to open it up rather than an active decision to lock it down. RDS (Relational Database Service) takes a familiar relational database engine — PostgreSQL, MySQL, SQL Server, and others — and manages the tedious parts for you: backups, patching, failover, and scaling.
What ties these together is VPC (Virtual Private Cloud) — a logically isolated network you define yourself, with its own subnets, IP ranges, and routing rules, that closely mirrors how a traditional data center network is laid out. Every EC2 instance and RDS database lives inside a VPC, which is what makes network-level access control possible in the first place.
Access control
Security groups and the principle of least privilege
A security group acts as a virtual firewall attached to individual resources, controlling exactly what traffic is allowed in and out — by default, everything is denied, and access is granted explicitly rather than assumed. A common real pattern: a database's security group is configured to accept connections only from the specific application server's security group, not from "the internet" or even "the VPC" broadly — so a database instance can be completely unreachable directly, even though the application that talks to it works fine.
Underneath all of this sits IAM (Identity and Access Management), which defines who — which person, service, or application — is allowed to do what, without ever having to share a password or a permanent key. AWS STS (Security Token Service) extends this with temporary credentials that expire automatically, and CloudHSM handles encryption key management in dedicated hardware for organizations with strict compliance requirements. All three are different angles on the same principle covered elsewhere on this site: grant the minimum access actually needed, nothing more, by default.
Visibility & auditability
You can't secure what you can't see
Two AWS services answer two different but related questions. AWS Config answers "what exists, and how is it configured right now?" — a continuously updated inventory of every resource and its settings, which matters enormously when trying to spot a misconfiguration before it becomes a breach. AWS CloudTrail answers a different question: "who did what, and when?" — logging every API call made against the account, which is exactly the record an investigator needs after an incident to reconstruct what actually happened.
Neither tool prevents anything by itself. Their value is entirely in making the invisible visible — turning "we think this is how our infrastructure is configured" into "here is the actual, current, auditable state of it."
Built-in defenses
AWS's own security tooling
AWS ships several purpose-built services that map directly onto specific threats. GuardDuty is a threat detection service that continuously analyzes account activity and network traffic for signs of compromise. Shield defends against distributed denial-of-service (DDoS) attacks — the kind that try to knock a service offline through sheer traffic volume rather than exploiting a flaw. Inspector automatically scans for software vulnerabilities and unintended network exposure. Trusted Advisor checks an account's configuration against AWS's own best-practice recommendations and flags where it falls short.
None of these replace the fundamentals covered elsewhere on this page — they're what those fundamentals look like automated and running continuously, rather than checked manually once and forgotten.
Operations
Incident response, when the infrastructure is someone else's
The incident response lifecycle covered earlier on this page still applies in the cloud — preparation, detection, containment, eradication, recovery, lessons learned — but the tools change. Good cloud incident response starts before any incident: identifying key personnel in advance, pre-provisioning the access and tools responders will actually need, and running "game days" — deliberate simulated incidents — so the team has already made the hard decisions once before a real one forces them to.
When something does happen, automation is what makes containment fast rather than manual: AWS Systems Manager can isolate or reconfigure resources at scale, AWS Lambda runs response code automatically the moment a trigger fires, CloudFormation can redeploy a known-clean environment from a template rather than trying to manually clean a compromised one, and Step Functions and SNS chain these pieces together and make sure the right people are notified at the right point in the process. The throughline is the same idea that shows up everywhere in cloud security: anything done manually under pressure is done slower and less reliably than the same thing automated in advance.
Based on personal AWS Cloud Security and Cloud Foundations coursework, and the AWS Certified Cloud Practitioner curriculum.
Project: a three-tier AWS VPC from scratch
A segmented cloud environment built end to end in AWS — networking, a domain controller, a working web application, and a monitored honeypot layered on top. Below is the architecture and the reasoning behind it.
Architecture
The design
The network splits into three subnets, each with a distinct job. The Screened Subnet is the only one exposed to the internet — it holds a NAT instance (so private resources can reach the internet without being reachable from it) and a Windows Bastion host, the single controlled entry point for administrative access. The Production Subnet holds the domain controller, database server, and file share — the resources that need protecting most, and that never talk to the internet directly. The Userspace Subnet holds the actual web-facing application. Every arrow on the diagram is a deliberate decision about what's allowed to reach what.
Access control happens at two layers simultaneously: route tables decide which subnets can reach the internet at all, and security groups decide which specific resources can talk to which other specific resources, by name rather than by broad IP range. The Windows Bastion accepts RDP only — nothing else gets an inbound rule to it — and every other service's security group is scoped to allow traffic only from the specific resource that legitimately needs it, not from "the VPC" generally.
The diagram above is the design; this is the AWS console confirming it was actually built — the same subnets and route tables, live.
The application layer
A working site, not just infrastructure
The Userspace Subnet's EC2 instance runs Docker with a WordPress deployment behind it, backed by the MariaDB database sitting in the Production Subnet — proof that the network segmentation actually works end to end, not just on paper. Separately, three static websites were deployed to S3, each demonstrating a different access-control configuration (a bucket with a policy, a bucket with an ACL, and one behind CloudFront).
Going further
Adding a honeypot as an extra layer
Beyond the assignment's requirements, a dedicated security group and EC2 instance were added in the Screened Subnet running Cowrie, an SSH honeypot that logs every login attempt, command, and credential an attacker tries against it — deliberately exposed so it attracts exactly that traffic while everything real stays isolated behind it. A small Flask dashboard was built on top to visualize the results, since raw log files are far less useful than a summary a non-technical reader can glance at.
The value of a honeypot isn't stopping an attack — it's intelligence. Which usernames get tried the most (unsurprisingly: admin, root, ubuntu) and which IPs keep coming back both feed directly into tightening firewall rules and password policy elsewhere in the environment. It's a small-scale version of exactly the "visibility before defense" principle covered earlier on this page.
Reflection
Should companies adopt the cloud?
"Companies should adopt the cloud with caution — it's important to evaluate things like vendor lock-in, migration complexity, and what happens if the cloud provider itself goes down, alongside the overall cost of operating there." The technology is genuinely powerful, but "powerful" and "the right default choice for every situation" aren't the same claim, and treating cloud adoption as a considered decision rather than an obvious one is itself a security-minded habit worth keeping.
Based on a personal AWS cloud project (CIS 336), built as a three-tier VPC with a live application and monitoring layer.
Linux command cheat sheet
The commands that come up constantly — navigation, files, permissions, processes, and networking. Not exhaustive, just the ones worth having memorized. Want to actually practice these instead of just reading them? Bashcrawl is a free dungeon-crawler game played entirely with real Linux commands.
Navigation & files
pwd | Print the full path of the directory you're currently in. |
ls -la | List everything in the current directory, including hidden files, in long format (permissions, owner, size, date). |
cd path/ | Change directory. cd .. goes up one level, cd ~ goes home, cd - returns to the previous directory. |
mkdir -p a/b/c | Create a directory. The -p flag creates any missing parent directories along the way instead of erroring out. |
touch file | Create an empty file, or update its modified timestamp if it already exists. |
cp -r src dest | Copy a file (or, with -r, an entire directory recursively) from source to destination. |
mv old new | Move or rename a file or directory — Linux treats renaming as just a move to a new name. |
rm -rf dir/ | Delete a file, or with -rf, a directory and its contents without confirmation. There's no undo — treat this one carefully. |
find . -name "*.log" | Search for files matching a pattern, starting from the given directory and searching recursively. |
Viewing & searching file contents
cat file | Print an entire file's contents to the screen. Best for short files. |
less file | Page through a file interactively — better than cat for anything long. Press q to quit. |
head -n 20 file | Show the first 20 lines of a file. tail -n 20 shows the last 20. |
tail -f file | Follow a file as it grows in real time — the standard way to watch a live log file. |
grep -ri "text" file | Search for a pattern inside a file. -r searches recursively through a directory, -i ignores case. |
wc -l file | Count the number of lines in a file (or words with -w, characters with -c). |
Permissions & ownership
chmod 755 file | Set permissions numerically: owner gets read/write/execute (7), group and others get read/execute (5). chmod +x file just adds execute permission. |
chown user:group file | Change which user and group own a file. |
sudo command | Run a single command with elevated (root) privileges. Prefer this over logging in as root directly. |
reading ls -l output | -rwxr-xr-- breaks down as: file type, then three permission triads (owner / group / others), each read (r), write (w), execute (x). |
Processes & system info
ps aux | List every running process on the system, including who owns it and how much CPU/memory it's using. |
top | Live, continuously updating view of running processes and resource usage. htop is a friendlier alternative if it's installed. |
kill -9 PID | Force-terminate a process by its process ID (found via ps or top). -9 is the "stop immediately, no cleanup" signal. |
command & | Run a command in the background so the terminal is free to keep using while it runs. |
df -h | Show disk space usage across mounted filesystems, in human-readable sizes (GB/MB rather than raw bytes). |
uname -a | Print system information — kernel version, hostname, and architecture. |
Networking
ip a | Show network interfaces and their assigned IP addresses. The modern replacement for the older ifconfig. |
ping host | Send test packets to a host to check basic connectivity and measure round-trip time. |
ss -tulwn | Show listening ports and active network connections. The modern replacement for the older netstat. |
curl -I url | Fetch just the HTTP headers from a URL — a fast way to check if a web service is responding without downloading the page. |
ssh user@host | Open a secure encrypted shell session on a remote machine. |
scp file user@host:path | Copy a file to (or from) a remote machine over an encrypted SSH connection. |
Redirection & pipes
cmd > file | Send a command's output to a file, overwriting anything already there. |
cmd >> file | Append a command's output to the end of a file instead of overwriting it. |
cmd1 | cmd2 | Pipe the output of one command directly into another as its input — the core idea that makes chaining small Linux tools together so powerful. |
cmd1 && cmd2 | Run the second command only if the first one succeeds. |
Security+ practice quiz
25 questions drawn at random from a larger bank each time, with answer choices reshuffled on every attempt — so running through it more than once is real practice, not memorization. Spans general security concepts, threats, architecture, and operations. Free, no sign-up, no affiliation with CompTIA — just practice aligned with the kind of thing the exam tests.
On my radar: from the field
Short notes on breaches and incidents making the rounds — mostly so I keep the habit of reading past the headline. Updated periodically, not a live feed.
September 2026
A state DMV becomes the latest ShinyHunters target
The State of Florida DMV disclosed a breach attributed to the ShinyHunters group, with roughly 52GB of compressed data reportedly taken. It's part of a pattern this group has run for months — government and large-institution targets, high-volume exfiltration, and public claims of responsibility rather than quiet ransom notes. For anyone doing GRC or incident response work, it's a reminder that "who's the target" has shifted from just banks and retailers to any organization holding large, centralized citizen or customer databases.
Source: Bitsight breach tracker
2026
When the attacker doesn't need to hack anything — they just ask the AI
One of the more unsettling incidents this year involved thousands of Instagram accounts being hijacked not through a technical exploit, but by abusing Meta's AI support chatbot: attackers impersonated the account owner in a chat, claimed to be locked out, and asked the bot to send a password reset code to an address of their choosing. No malware, no phishing link — just a conversational interface that trusted the wrong claim. This is exactly the category of "AI automation risk" worth watching: the vulnerability wasn't in the code, it was in how much authority the automation was quietly given.
Source: TechCrunch
2026
A single vendor breach, felt by a dozen companies
A breach at Salesforce-connected vendor Klue rippled outward to affect customers including LastPass, HackerOne, Tanium, and several other security-focused companies — a good illustration of how supply-chain exposure works in practice. The initial access point isn't always the organization that ends up in the headline; it's whichever integration had more trust than it needed. Worth remembering next time "we don't handle that data directly" feels like a reason not to worry about a vendor's security posture.
Source: BrightDefense breach roundup
May 2026
Foxconn, and the leak that never touched the real targets
When the Nitrogen ransomware group claimed to have pulled roughly 8 terabytes of data from Foxconn's North American factories, the headline wasn't really about Foxconn — it was about who else showed up in the stolen files. The extortion claim reportedly involved schematics, project details, and customer documents tied to Apple, Dell, Google, and Nvidia, none of whom were breached directly. That's the uncomfortable part of manufacturing and supply-chain security: a company can run a tight ship internally and still end up exposed because a contractor three steps removed from it wasn't as careful. Vendor risk assessment exists precisely for this scenario, and it's usually the first thing cut when budgets get tight.
Source: BrightDefense breach roundup
January 2026
149 million records, and the breach that wasn't really a hack
Early in the year, researchers discovered a publicly exposed database containing roughly 149 million records — nearly 100GB of sensitive data — sitting in plain reach because of a misconfigured cloud environment. No exploit, no phishing email, no zero-day; just a storage bucket or database instance left open to the internet, the digital equivalent of a filing cabinet with no lock. This is the pattern worth sitting with: the cloud platform itself almost certainly wasn't the point of failure. Someone's permission settings were. It's the exact argument made elsewhere on this site about shared responsibility — the provider secures the infrastructure, but the configuration is always someone's job, and "nobody's" is not an acceptable answer to whose.
Source: ACI Learning breach roundup
Social engineering: attacking the person, not the system
Not every attack targets a machine. Social engineering targets the person operating it, using the same psychological levers that work in any con: urgency ("your account will be locked in 10 minutes"), authority ("this is IT, we need your password to fix an issue"), and trust ("click here, it's from your manager"). It works because it routes around technical defenses entirely — a perfectly patched, perfectly firewalled system is still vulnerable if someone with legitimate access can be talked into handing over a credential.
Phishing (email), vishing (voice calls), and smishing (text messages) are the same underlying tactic delivered through different channels. Spear phishing narrows the target to one specific, researched individual — often using details pulled from exactly the kind of OSINT covered further down this page — which makes it far more convincing than a generic mass email. Technical filters catch a meaningful share of these attempts, but the last line of defense is always a person recognizing that something feels off, which is precisely why security awareness training matters as much as any firewall rule. More on that line of thinking is in the Teaching & Training section of the main site.