Material

Reading List

Cyber
The Phoenix Project: A Novel About IT, DevOps, and Helping Your Business Win
Gene Kim, Kevin Behr, and George Spafford
This book provides an engaging story-driven introduction to the challenges and solutions within IT and cyber operations, making complex concepts accessible for beginners.
Ghost in the Wires: My Adventures as the World's Most Wanted Hacker
Kevin Mitnick
This book offers an engaging and accessible introduction to cybersecurity concepts through the captivating real-life story of a legendary hacker, making it perfect for a beginner with low mastery.
Hacking: The Art of Exploitation, 2nd Edition
Jon Erickson
This book provides a foundational understanding of how computer systems work and how vulnerabilities are exploited, which is crucial for a student with minimal mastery in cyber.
History
A Little History of the World
E.H. Gombrich
This book provides a beautifully written and accessible overview of world history, perfect for a beginner with a low mastery level, offering a clear and engaging introduction to key historical events and figures.
A Little History of the World
E.H. Gombrich
This book provides a beautifully written and accessible overview of world history, perfect for a student just beginning their exploration of the subject.
A Little History of the World
E.H. Gombrich
This book offers a clear, engaging, and accessible overview of world history, perfect for a student with limited prior knowledge.
Poker
Poker For Dummies
Richard D. Harroch and Lou Krieger
This book offers a basic introduction to poker rules, strategies, and common variations, perfect for a beginner with limited exposure to the game.
Poker for Dummies
Richard D. Harroch and Lou Krieger
This book provides a basic and approachable introduction to the rules, strategies, and nuances of poker, perfect for a beginner with minimal experience.
Poker For Dummies
Richard D. Harroch and Lou Krieger
This book provides a basic and approachable introduction to poker, perfect for a student with very low mastery, covering rules, basic strategy, and different game types without overwhelming detail.
Politics
A Little History of the World
E.H. Gombrich
This book provides a broad and engaging overview of history, including the evolution of political systems, without being overly academic or dense, making it perfect for a beginner.
The Prince
Niccolò Machiavelli
This foundational text offers a concise yet impactful introduction to political theory, suitable for a student beginning their journey in politics due to its historical significance and straightforward prose.
Basic Economics: A Common Sense Guide to the Economy
Thomas Sowell
This book provides a clear, accessible, and comprehensive introduction to fundamental economic principles, which are essential for understanding political systems and policies, making it perfect for a student just beginning to explore politics.
Cyber · Foundation

Fundamentals of Secure Software Development Lifecycle (SDLC): Integrating Security into Design and Development

Quality 7.0/10 Aug 20, 2026 ~20 min read ⬇ Download audio
Imagine you are building a house. You hire a team of builders who work quickly and skillfully. The walls go up, the roof is fitted, the floors are laid, and the windows are installed. The house looks beautiful. Then, on the final day, someone asks: "But how do we keep burglars out?" Now the builders must tear open walls to install alarm wiring, cut holes in doors for stronger locks, and dig up the garden for external lighting cables. It costs far more than if security had been part of the plan from the beginning. It also looks messy, and some parts of the house are now weaker because of the changes made late in the process. This is exactly what happens when software is built without thinking about security from the start. And this problem has caused some of the most damaging and expensive disasters in the history of technology. Today, we are going to explore how to build software the right way, by making security part of every single step of the building process. This approach has a name: the Secure Software Development Lifecycle, or Secure SDLC. Let us begin by understanding what we mean by a few key terms. A Software Development Lifecycle, or SDLC, is simply the series of steps a team follows when creating software. Think of it like a recipe. You do not just throw ingredients into a pan randomly. You follow steps: gather your ingredients, prepare them, cook in the right order, and taste as you go. An SDLC gives developers a structured recipe for building software, from the first idea all the way to the finished product and beyond. The "Secure" part means that at every step of that recipe, you are also thinking about how to protect the software from attackers and mistakes. The reason this matters so much comes down to a simple but powerful truth: the later you discover a problem, the more it costs to fix. Researchers at the National Institute of Standards and Technology, which is the American government body responsible for setting technology standards, have studied this carefully. Their findings show that a security flaw found during the early planning stage might cost almost nothing to correct, perhaps just a short conversation between colleagues. The same flaw, if not discovered until the software is already being used by customers in the real world, can cost thousands or even millions of dollars to fix, not counting the damage done to real people whose data may have been stolen or exposed. This is why the philosophy of the Secure SDLC is sometimes described as shifting security to the left, meaning moving it earlier in the timeline, rather than treating it as a final check before release. Now let us walk through the lifecycle itself, phase by phase, understanding what security means at each stage. The first phase is Requirements and Planning. This is where a project begins. In traditional software development, this stage is about deciding what the software should do. A banking app should allow users to check their balance, transfer money, and pay bills. But in a Secure SDLC, this stage also asks a deeper question: what must the software protect? This means identifying sensitive data, which is any information that could cause harm if it were exposed or stolen. Personal Identifiable Information, often called PII, is a term for data that can identify a specific person, such as their name, address, date of birth, or national identity number. Financial data, such as credit card numbers and bank account details, is another category. Health records are another. Before a single line of code is written, the team must list every type of sensitive data the software will handle. This stage also involves looking at legal obligations. In Europe, the General Data Protection Regulation, known as GDPR, is a law that sets strict rules about how companies must protect personal data. In the United States, a law called HIPAA governs the protection of medical records. A company that fails to meet these legal standards can face enormous fines. Identifying these obligations at the planning stage ensures the team builds the software correctly from the beginning, rather than scrambling to comply with the law at the last minute. Think of a team building a new mobile banking application. During the requirements stage, they would write down explicit security requirements, not just functional ones. A functional requirement might say: "The user must be able to transfer money to another account." A security requirement sitting alongside it would say: "All communication between the phone and the bank's servers must be encrypted using a strong standard called TLS version 1.2 or higher." TLS, which stands for Transport Layer Security, is a technology that scrambles data as it travels across the internet so that anyone who intercepts it cannot read it. Think of it like sending a letter in a locked box rather than on an open postcard. Another security requirement would state that users must verify their identity using more than just a password, through a system called Multi-Factor Authentication, or MFA. You experience MFA when a website sends a code to your phone after you enter your password. This means an attacker who steals your password alone still cannot access your account. The second phase is Design and Architecture. This is where engineers draw the blueprint of the software. Just as an architect decides where the walls, doors, and windows go before builders start working, software architects decide how the different parts of the system will connect and communicate. This is the most critical phase for building security into the foundation. The most important security activity at this stage is something called Threat Modeling. This term might sound technical, but the concept is simple and almost natural. Threat modeling means sitting down before you build anything and asking: "How could someone attack this? Who would want to? What damage could they do?" It is the process of thinking like a criminal before the criminal has a chance to act. A popular method for threat modeling was developed by Microsoft, one of the largest software companies in the world. It uses the word STRIDE, where each letter stands for a different type of threat. Let us walk through each one with a real example, because understanding these categories helps you think systematically about danger rather than randomly. S is for Spoofing. Spoofing means pretending to be someone you are not. An attacker who logs into a banking website using stolen credentials is spoofing a legitimate customer. A computer pretending to be a trusted server is spoofing that server. S is for Tampering. Tampering means secretly changing data. An attacker who intercepts a message saying "transfer 100 dollars to Account A" and changes it to "transfer 100 dollars to Account B" before it arrives is tampering with data. R is for Repudiation, which means denying that you did something. If a user transfers money and then claims they never did it, the system needs records to prove otherwise. I is for Information Disclosure, which means exposing data to people who should not see it. D is for Denial of Service, which means making a system so busy that it stops working for legitimate users. When a website is flooded with millions of fake requests until it crashes, that is a denial of service attack. E is for Elevation of Privilege, which means gaining more power or access than you are supposed to have. Imagine a regular employee at a company somehow gaining the access rights of a system administrator. That is elevation of privilege. How does threat modeling work in practice? Let us use a simple example. A team is designing a password reset feature for their application. This is a very common feature that also happens to be a frequent target for attackers. During threat modeling, someone might point out an Information Disclosure threat: "What if the system emails the user their new password in plain text?" This would be dangerous because emails can be intercepted, stored insecurely, and read by the wrong people. The team identifies this threat before any code is written and changes the design immediately. Instead of emailing a password, the system will send a temporary link that expires after one hour and can only be used once. This eliminates the threat entirely, and because the decision was made during design, it costs almost nothing to implement. Had this flaw been discovered after the software was already in use, fixing it would have required changing existing code, testing everything again, notifying users, and potentially dealing with legal consequences if any accounts were compromised. Two other important ideas come from the Design phase. The first is called Defense in Depth. This principle comes from military strategy. It means do not rely on a single line of defense. A medieval castle did not rely only on its outer wall. It had a moat, then a wall, then a courtyard with guards, then inner walls, then a final keep. If one layer was breached, attackers faced another. In software, this means multiple security controls working together. Even if an attacker bypasses the login system, they should still be blocked by the network firewall. Even if they bypass the firewall, they should still face encrypted data they cannot read. Layers upon layers. The second principle is called Least Privilege. This means every part of a system, whether it is a user, a program, or an automated process, should have the absolute minimum access required to do its job and nothing more. A customer service representative at a bank needs to see your account balance and recent transactions. They do not need the ability to wire money internationally. Limiting what each part of the system can do limits the damage an attacker can cause if they manage to take control of that part. The third phase is Development, which is where the actual code is written. Security in this phase focuses on two goals: preventing developers from accidentally introducing vulnerabilities as they write, and catching any that sneak in as quickly as possible. The first tool is Secure Coding Standards. These are written guidelines that tell developers what to do and what never to do when writing code. Organizations like OWASP, the Open Web Application Security Project, which is a nonprofit foundation dedicated to improving software security, publish lists of the most common and dangerous vulnerabilities. Their most famous publication is the OWASP Top 10, a regularly updated list of the ten most critical security risks to web applications. Two of the most well-known vulnerabilities on this list are SQL Injection and Cross-Site Scripting, often abbreviated as XSS. SQL Injection is worth understanding because it illustrates how a seemingly small coding mistake can lead to catastrophic consequences. SQL is the language used to communicate with most databases. When a user types their username into a login form, the application typically sends a message to the database that says something like: "Find me the user whose username is John and whose password is [whatever was entered]." A developer writing this carelessly might construct that message by simply combining the user's typed input directly into the database instruction. An attacker knows this and instead of typing a normal username, types a specially crafted string of characters that, when combined into the database instruction, completely changes what the instruction means. The instruction might end up saying: "Find me the user whose username is anything, and ignore the password check entirely." The database obeys this instruction, and the attacker is suddenly logged in as any user they choose, perhaps as an administrator with access to everything. A secure coding standard would instruct the developer to never combine user input directly into database instructions, but instead to use a technique called parameterized queries, which treats the user's input strictly as data and never as part of the instruction itself. The second tool in the development phase is called Static Application Security Testing, or SAST. Static means the code is not running while it is being checked. SAST tools are software programs that read through your code looking for patterns that indicate potential security flaws, similar to how a spell-checker reads through a document looking for misspelled words. These tools can be built directly into the software application a developer uses to write code, so they receive immediate warnings as they type. A developer writes a function that handles a password, and the SAST tool immediately flags: "This function stores the password without encrypting it. This is a security risk." The developer fixes it right then, before anyone else has even seen the code. This immediate feedback loop is enormously valuable because it educates developers over time, training them to avoid the same mistakes repeatedly. The third tool is called Software Composition Analysis, or SCA. Modern software is rarely built entirely from scratch. Developers rely heavily on pre-written collections of code called libraries or frameworks, the majority of which are open-source, meaning they are free to use and their code is publicly visible. This is efficient and powerful, but it introduces a risk. If one of those third-party libraries contains a security vulnerability, every application built using that library is also vulnerable. SCA tools automatically scan all the external libraries an application uses and compare them against databases of known vulnerabilities. If a library with a known weakness is found, the tool alerts the team immediately so they can update to a safer version. The fourth phase is Testing and Verification. Once the code is written, it must be thoroughly tested, and in a Secure SDLC, security testing is as important as checking whether the features work correctly. Here we encounter a tool called Dynamic Application Security Testing, or DAST. Unlike SAST, which reads code while it stands still, DAST works on a running application, meaning the software is actually operating when the tests are run. DAST tools attack the application from the outside, the way a real attacker would, probing for weaknesses without any knowledge of what is happening inside the code. Think of it this way: SAST is like a building inspector reading architectural blueprints looking for structural problems. DAST is like a security tester physically trying to push down walls, rattle locked doors, and climb through windows to find weaknesses the blueprints might not have revealed. Together, SAST and DAST cover different angles of vulnerability detection, which is exactly why both are valuable. The most thorough form of security testing is called Penetration Testing, commonly known as Pen Testing. Where SAST and DAST are automated tools, pen testing involves real human beings, specifically ethical hackers, who are security professionals paid to attack the software using the same techniques a real attacker would use. The crucial difference is that they have permission to do so and are working to help the organization, not harm it. Automated tools are excellent at finding known, common vulnerabilities. But creative human attackers can find complex, unusual chains of flaws, where one small weakness is combined with another small weakness to create a large vulnerability. Automated tools generally cannot replicate this kind of creative, lateral thinking. Pen testing is typically performed on major new releases or on systems that handle especially sensitive data, because it is thorough but also time-consuming and costly. The fifth phase is Deployment and Release. The software is finished and ready to be made available to users. But this phase has its own security responsibilities. A crucial activity here is Secure Configuration. When software is installed on a server, whether that server is a physical machine in a data center or a virtual machine in a cloud service like Amazon Web Services or Microsoft Azure, it comes with default settings. These defaults are designed for ease of use and broad compatibility, not security. Default administrator accounts often have simple, widely known passwords. Unused services may be left running, creating additional pathways for attackers. A process called hardening involves going through every configuration setting and adjusting it to the most secure option, disabling what is not needed, changing default credentials, and following established best practices. Skipping this step is like building a perfect secure house and then leaving the front door unlocked because it came that way from the factory. The sixth and final phase is Maintenance and Response, and this is a phase that many organizations underestimate. People sometimes think that once software is deployed, the security work is done. This is a dangerous misunderstanding. Software lives in a constantly changing environment. New vulnerabilities are discovered every single day. Attackers invent new techniques. The world around the software changes even when the software itself does not. This phase requires Continuous Monitoring. A logging system keeps detailed records of everything that happens inside an application: who logged in, from what location, what actions they performed, what data they accessed, what errors occurred. These logs are the digital equivalent of security camera footage. When something suspicious happens, security teams can review the logs to understand what occurred and when it began. Without logs, a company has no visibility into its own systems. Vulnerability Management is the ongoing process of scanning production systems for newly discovered weaknesses and applying fixes, called patches, in a timely manner. A patch is an update that corrects a specific flaw in software. When a vulnerability is found in a commonly used piece of software, the creators typically release a patch quickly. The danger comes from organizations that delay applying these patches. This brings us to one of the most instructive real-world examples of Secure SDLC failure in recent history. In 2017, a major American company called Equifax suffered one of the largest data breaches ever recorded. Equifax is a credit reporting agency, which means it collects and stores detailed financial information about hundreds of millions of people. In the breach, personal information belonging to nearly 150 million people was stolen. Names, Social Security numbers, birth dates, addresses, and credit card details were all exposed. The cause of the breach was a known vulnerability in a piece of open-source software called Apache Struts, which is a framework widely used to build web applications. This vulnerability had been publicly identified and announced in March 2017. The creators of Apache Struts immediately released a patch to fix it. The breach at Equifax happened in May 2017, more than two months after the fix was already available. The attackers did not discover a new or clever flaw. They simply used a publicly known vulnerability against a company that had not applied the available fix. Looking at this through the lens of the Secure SDLC, the failures are clear at multiple stages. In the Development and Maintenance phases, Equifax's Software Composition Analysis process failed to identify all systems running the vulnerable version of Apache Struts. A working SCA system would have automatically flagged every instance of the vulnerable library across the entire organization. In the Maintenance phase, the Vulnerability Management process failed because even where the vulnerable software was identified, the patch was not applied within a reasonable time. And in the Monitoring activity, the attackers were able to quietly copy and remove enormous quantities of data for 76 days before anyone noticed. For more than two months, sensitive data belonging to 150 million people was being stolen, and no alarm was triggered. Proper monitoring of outbound network traffic, meaning data leaving the company's systems, would likely have detected the unusual and massive data transfers far sooner. The eventual cost to Equifax was enormous: a settlement with the United States Federal Trade Commission of up to 700 million dollars, plus immense damage to the company's reputation. Now it is worth acknowledging that implementing a Secure SDLC is not without its challenges. One of the most significant is cultural. Development teams are typically rewarded for writing features quickly and shipping software on time. Security teams exist to slow things down and say no. This creates friction, and it is real friction that has caused many security programs to fail. The solution lies in creating shared goals and making security tools developer-friendly. When a SAST tool alerts a developer instantly and explains how to fix the problem in plain language, that developer learns and improves. When security is presented as an obstacle that blocks releases with unexplained technical demands, developers find ways around it. Another challenge, especially for smaller organizations with limited resources, is deciding where to focus. A small startup building its first product cannot implement every security practice simultaneously. The wisest approach is to prioritize by risk. What data does the application handle? Who could be harmed if it were compromised? For most web applications, starting with the OWASP Top 10 as a coding guide, implementing a basic threat modeling exercise during design, using a free or low-cost SAST tool in the development environment, and establishing a clear patching process for third-party libraries would provide substantial security value at relatively low cost. A newer and increasingly important evolution of the Secure SDLC is called DevSecOps. DevOps is a way of working where development teams and operations teams, the people who manage running systems, work very closely together with heavy automation, allowing software to be updated and released rapidly, sometimes dozens of times per day. DevSecOps adds security into this continuous flow, automating as many security checks as possible within the automated pipeline that takes code from a developer's computer all the way to production. The idea is not a separate security review that happens at fixed points but a continuous stream of security checks happening automatically every time any change is made. This is the direction in which the field is moving, and it represents the closest possible realization of the original ideal: security not bolted on at the end, but woven into the very fabric of how software is created. There is also the ongoing challenge of alert fatigue. When organizations use multiple automated security tools, those tools collectively can generate thousands of alerts every day. Many of these are false positives, warnings about things that turn out not to be genuine threats. When security teams and developers are buried in thousands of low-quality alerts, the genuinely dangerous ones can be missed simply because they are lost in the noise. A significant area of ongoing work in the industry involves using intelligent prioritization, sometimes powered by artificial intelligence, to sort through alerts and surface the most critical issues clearly and quickly. Finally, let us consider a question that is both practical and ethical. Who is responsible when software has a security vulnerability? The developer who wrote the flawed code? The tester who did not catch it? The security team that approved the release? The manager who prioritized speed? The honest answer is that responsibility is shared across the entire team and the entire organization. This is precisely why the Secure SDLC exists: to create a systematic process where responsibility is distributed rather than left to one individual, and where the structure itself catches problems before any single person's mistake becomes a catastrophe. To bring everything together, let us briefly summarize the key ideas covered in this lesson. Security in software development must be built in from the very beginning, not added as an afterthought. The cost of fixing a security flaw grows dramatically the later it is discovered. The Secure SDLC is an approach that adds security-focused activities to every phase of software development. In the Planning phase, teams identify sensitive data and define clear security requirements alongside functional ones. In the Design phase, Threat Modeling using frameworks like STRIDE allows teams to anticipate attacks before writing a single line of code, while principles like Defense in Depth and Least Privilege shape safer architecture. In the Development phase, Secure Coding Standards prevent common vulnerabilities like SQL Injection, while SAST tools catch flaws instantly and SCA tools protect against vulnerabilities in third-party libraries. In the Testing phase, DAST tools probe running applications from the outside while ethical hackers in Pen Testing exercises find complex flaws that automated tools miss. In Deployment, Secure Configuration ensures the environment itself is hardened against attack. In Maintenance, continuous monitoring provides visibility, and active vulnerability management ensures that known flaws like the one that caused the Equifax breach are patched promptly. Finally, culture matters enormously: security and development teams must work together, and tools must be designed to help rather than obstruct developers. The evolution toward DevSecOps represents the future of this field, embedding security as a continuous, automated, and collaborative practice rather than a checkpoint or a gate. The second castle was not harder to build than the first. It was just built with greater wisdom and foresight. That is what a Secure SDLC asks of us: not more effort, but better thinking, earlier.
Test Your Understanding
1. The lesson uses a house-building analogy to explain why integrating security early in the SDLC is crucial. If a team building a new banking application discovered a critical vulnerability (e.g., sensitive customer data being exposed) during the 'Maintenance and Response' phase, how would this compare to finding it during the 'Requirements and Planning' phase, both in terms of cost and the necessary actions to fix it? Provide specific examples from the text to support your explanation.
Guide the System
Tell the system what to focus on or where to go deeper.