← All summaries

Coding for Security with Chris Ayers

.NET Rocks · Carl Franklin, Richard Campbell — Chris Ayers · March 26, 2026 · Original

Most important take away

Developers need to move beyond basic security training (SQL injection, XSS) and adopt an attacker’s mindset using frameworks like MITRE ATT&CK. Security is not just about preventing initial access — it requires defense in depth including behavioral monitoring, anomaly detection, supply chain validation, and robust logging to detect and respond to lateral movement once attackers are inside your systems.

Chapter Summaries

Year 1995 Retrospective

Carl and Richard walk through the major events of 1995, covering cultural milestones (OJ Simpson trial, Oklahoma City bombing, Toy Story), music (Alanis Morissette’s Jagged Little Pill topped charts), and space history including the first Shuttle-Mir docking missions and American astronaut Norman Thagard learning Russian to fly on Soyuz.

1995 in Computing

A landmark year in technology: Netscape IPO’d in August, Windows 95 launched days later with IE1, JavaScript was prototyped by Brendan Eich, Visual Basic 4.0 shipped with 32-bit support, Java 1.0 and Ruby debuted, Microsoft Bob was introduced (and failed), Bill Gates wrote the “Internet Tidal Wave” memo pivoting Microsoft to the web, and GeoCities went online.

Better Know a Framework: Auto Localize

Peter Morris’s “Auto Localize” tool is highlighted — a Fody IL weaver that automatically fills in error message resource types and names for validation attributes at the project level, eliminating repetitive per-class localization boilerplate.

Listener Feedback: CLI-First Development

Discussion of a previous episode with Kathleen Dollard about CLI-first application design. Listener David Cameron notes how CLI and config files are easier to document and share than GUI-driven configurations. The hosts discuss the resurgence of text-based UIs and the desire for AI agents embedded in every application.

Security and MITRE ATT&CK with Chris Ayers

Chris Ayers, who works on Azure reliability at Microsoft, discusses how developers should think about security beyond OWASP basics. MITRE ATT&CK (Adversarial Tactics, Techniques, and Common Knowledge) catalogs real attacker behaviors across approximately 40 tactics and 200 techniques. The conversation covers how attackers move laterally after initial access, the importance of behavioral anomaly detection, and why state actors using AI make patching urgently critical.

Practical Security for Developers

Chris and the hosts discuss actionable security practices: monitoring authentication patterns, detecting data exfiltration through query volume anomalies, session fingerprinting, short token expiration times, and conditional access policies. They highlight the OWASP Cornucopia card game as a way to integrate security thinking into feature planning sessions.

Supply Chain Security and Defense in Depth

The conversation turns to supply chain attacks (referencing the XZ Utils backdoor and SolarWinds), the importance of Software Bills of Materials (SBOMs), signed container images, controlled artifact feeds, and not depending directly on public package registries. Microsoft’s internal practices of proxying and scanning all dependencies are discussed as a model.

Modern Tooling and the Path Forward

Chris highlights how modern tools like .NET Aspire help developers “fall into the pit of success” by building in managed identities, RBAC, OpenTelemetry metrics and logging, and centralized build pipelines with scanning capabilities. Aspire now supports Python, Java, Go, and React in addition to .NET.

Summary

  • Adopt an attacker’s mindset: Move beyond checkbox security training. Use MITRE ATT&CK to understand how attackers actually operate — initial access is just step one; lateral movement, persistence, and data exfiltration are where the real damage happens.

  • Invest in detection and logging first: The most impactful thing developers can do is ensure proper logging and behavioral monitoring. Ask your security team what they need surfaced from your application to distinguish normal from abnormal behavior.

  • Behavioral anomaly detection matters more than you think: Monitor for patterns like one IP hitting many accounts, one account accessed from unusual locations, or abnormal data export volumes. These signals catch attacks that pass through authentication successfully.

  • Secure your supply chain: Generate SBOMs, sign your container images, use controlled artifact feeds rather than pulling directly from public registries, and pay attention to Dependabot/CVE alerts. The XZ Utils attack showed how social engineering can compromise even open source maintainership.

  • Defense in depth is non-negotiable: Do not rely on a single perimeter (DMZ, firewall). Internal applications need the same security rigor as public-facing ones. Once an attacker is past the perimeter, unprotected internal apps become easy targets.

  • Use modern frameworks that build security in: Tools like .NET Aspire include managed identities, RBAC, and OpenTelemetry observability by default. Lean on these “pit of success” patterns rather than trying to bolt security on after the fact.

  • Career advice: Security knowledge is increasingly expected of developers, not just sysadmins. Understanding frameworks like MITRE ATT&CK and OWASP differentiates you. Security and reliability are deeply intertwined — DDoS is both a security and availability problem.

  • Architecture pattern — integrate security into the development lifecycle: Add S-bomb generation, dependency scanning, container signing, and vulnerability checks into your CI/CD pipeline. Use card games like OWASP Cornucopia during sprint planning to surface security considerations for new features before code is written.

  • Be cautious with AI autonomy in security contexts: While AI tools are valuable for development, giving agents open-ended system access (like running autonomous code or auto-applying patches) creates new attack surfaces. A poisoned CVE fed to an autonomous agent could become an attack vector itself.