The DARE Framework — A Cybersecurity Lab Methodology
A design constraint for cybersecurity training. Four stages. One learner. The same environment. No stage skipped.
Understanding is not real until it has been experienced in context.
A learner who can describe SQL injection has not understood SQL injection. A learner who has executed it, watched it fail against a patched version, and then defended against it — that learner understands it. Most training stops after the first step. DARE does not stop until all four are complete.
Each stage is necessary. None is sufficient alone.
The stages must be completed in sequence, by the same learner, in the same environment. Click any tile to expand the full explanation.
The learner builds a functional understanding of the target before anything is broken. How the protocol operates. How the application handles requests. How trust is established. Without this, an attack is a procedure that can be repeated but not adapted. Context converts instruction into understanding.
The learner performs the attack against something they can recognise — familiar structure, implied stakes, not a synthetic box. The learner does not observe the attack. They execute it. Recognition produces relevance. Relevance produces retention.
The patched version sits beside the broken one. The learner runs the same attack and watches it fail. The fix is not described — it is demonstrated. The failure of the attack is the explanation of the fix.
The learner moves from attacker to defender against the same target. Same scenario, switched. What does this look like in a log? How would you detect it? What would remove it? A practitioner who has only attacked is half-trained.
Four questions every training environment must answer yes to.
DARE is not a curriculum. It doesn't tell you which vulnerabilities to cover or which tools to teach. It's a design constraint. Evaluate your training environment — click each question it answers yes to.
If any answer is no, the environment is incomplete. It might still be useful. But it isn't producing the understanding it could.
Run this against any vulnerability you are studying.
A no answer is not a failure — it tells you exactly what you have not done yet.
SQL injection via a login form.
The same vulnerability, walked through all four stages. This is what DARE looks like in practice.
A login form sends a username and password to the server. The server builds a database query using those values — something like: find the user where the username matches and the password matches. If a matching record is found, the user is granted access.
The learner maps every input the user can send — the username field, the password field, any hidden fields — and asks: does the server check these values before putting them into the query, or does it use them directly?
SELECT * FROM users WHERE username = 'user_input' AND password = 'user_input'
The learner now understands the system before the attack begins.
The learner types a crafted value into the username field. They do not observe this — they type it themselves, submit the form, and watch what the server returns.
admin' OR '1'='1
SELECT * FROM users
WHERE username = 'admin' OR '1'='1'
AND password = ''
The condition OR '1'='1' is always true. The query returns the first user in the database — typically an admin account. The learner is now logged in without a valid password.
The learner has executed the attack and seen the actual impact — unauthorised access, not just a flag.
The patched version of the same login form is now presented. The learner types the exact same input and submits. This time, access is denied.
SELECT * FROM users WHERE username = ? AND password = ? -- The query structure is fixed first. -- User input is passed separately as data. -- It cannot change the structure of the query.
The injected value admin' OR '1'='1 is treated as a literal string — not as SQL. The database looks for a user whose username is exactly that string. No such user exists. Login fails.
The learner has seen the fix stop the attack — not read about it.
The learner has just executed a SQL injection attack. Now they take the defender's position against the same login form.
The learner has stood on both sides of the same vulnerability. That is DARE complete.
Design environments that produce real understanding.
Two tools for trainers — a build sequence for designing from scratch, and an audit checklist for reviewing environments you have already built.
Start with what you need to teach — not with the application, not with the tools. The vulnerability is the anchor. Everything else is built around it.
Be specific. "Injection attacks" is too broad to build around. "SQL injection via login form" is a starting point.
The application must come from the learner's world. A learner who recognises the environment they are attacking will engage faster and retain longer.
Before any attack is possible, the learner must be able to explain how the application works in normal operation. Prepare the materials that let them map the system — the request flow, the inputs, and what the application does with each one.
Verification is flexible. Some learners demonstrate understanding by explaining. Others demonstrate it by answering questions correctly. Both are valid. The goal is to confirm the mental model is accurate before moving forward.
The learner must execute the attack themselves — not observe it. Build an environment where the vulnerability is real and exploitable, and where the learner can see the actual impact of a successful attack.
In-person: the emotional response at the moment of execution tells you whether they understood or just got a result. Online: have them replicate the attack on a second target without guidance. Transfer is the proof of understanding.
The patched environment lives beside the vulnerable one. The learner runs the same attack and watches it fail. The trainer owns the fix — the learner's job at this stage is not to implement the fix but to experience what the fix does to the attack.
After the attack fails, explain why the fix works — not just what it is. The failure of the attack is the best moment to deliver that explanation.
The learner switches from attacker to defender. They must engage with the same scenario from the opposite position. This is the stage most training environments do not reach — design it deliberately or it will not happen.
Exchange does not require a live red/blue exercise. It can be as simple as: given what you just executed, what would you look for in logs to detect it? What alert would you write? What policy would you change? The question must be asked. It will not arise on its own.
DARE applied — three training environments.
Each project below was built around the DARE constraint. Click any card to see how each stage appears in that environment.
"A learner hasn't understood a security concept until they have broken it in context, watched it defended, and stood on both sides of it."
The argument behind the framework.
Why most cybersecurity training produces people who can pass exams and fail incidents — and what DARE does differently.
Read on Medium ↗