1. Courses
  2. Cybersecurity
  3. Offensive Security: Ethical Hacking and Pentesting
  4. Stop 1

35 minAdvanced

Ethics, law and scoping

A penetration test is the same actions a criminal takes, made legal by one thing: written permission for a defined target. This first lesson is the one that keeps you out of prison and out of trouble. You will learn how to get real authorisation, write a scope and rules of engagement that protect both sides, and set the hard limits you never cross, before you touch anything.

By the end you can

  • Explain why written authorisation is the only thing that separates testing from a crime, and who can sign it
  • Write a scope that lists in-scope targets, out-of-scope systems and third-party assets that need the provider's permission
  • Draft rules of engagement with test windows, rate limits, stop conditions and an incident path
  • Choose an engagement type and name the methodology you will follow
  • Handle evidence and confidentiality correctly, and test only the course's practice environment

The everyday picture

A locksmith and a burglar do the same thing: they open a lock that is not theirs. The difference is not skill. It is that the locksmith was called by the owner, agreed what to open and what to leave alone, carries something that proves it, and stops the moment the owner says stop. Take away the owner's say-so and the locksmith is just a burglar with good tools.

A penetration tester lives on exactly this line. The techniques in the rest of this course, the scanning, the broken access control, the stolen session, the escalated account, are the techniques an attacker uses. What makes your work legal and useful is the paperwork you agree before you start: who gave permission, over which systems, during which hours, with which actions off limits, and what you do if something goes wrong. Get that right and everything else in the course is a craft. Get it wrong and the best finding in the world is evidence against you.

Authorisation is everything

Accessing a computer system you have not been permitted to access is a crime in most countries. In the United States it is the (CFAA). In the United Kingdom it is the . Most other countries have their own version, and the details differ: what counts as access, whether intent matters, how damage is measured, and how heavy the penalty is. The exact law is not the point for this lesson. The point is that the default state of any system that is not yours is off limits, and that a good result does not make an unauthorised test legal.

So every engagement rests on one document: written . Testers often call it the authorisation letter or, informally, the "get out of jail free" letter, because if your activity is ever questioned, it is the proof that the owner asked for it. A real authorisation names the exact systems, the dates and times, the kinds of testing allowed, the people doing it, and a signature. Keep a copy with you during the test, including a printed or offline copy, because the moment you most need it may be the moment the network is down.

Who can sign it matters as much as the signature. It has to be someone with the authority to accept the risk of the testing for those systems: the system owner or an executive who owns the business risk, not a friendly middle manager who happens to run the team. A manager saying "sure, go ahead" in a chat message is not authorisation, and it will not protect you or them. If a third party runs part of the system, as Mangrove's Partner app is run by the outside agency Lagoon Digital, the client cannot sign away permission over the agency's servers. Someone with authority over those servers has to agree too.

NDA protects both sides sign Authorisation the risk owner signs define Scope in and out of scope agree Rules of engagement windows and limits brief Kickoff contacts on both sides go Testing begins in scope only no step is skipped
The order is not optional. Confidentiality is agreed first, then permission from someone who can grant it, then what is in scope, then how you will behave, then a kickoff that exchanges contacts. Testing starts only after all five.

Quick check

A store operations manager emails you "yes, go ahead and test the Partner app this week, I approve". Is that enough to start?

Scope: what you may touch, and what you may not

The is the fence around the engagement. It has two halves, and both matter. The in-scope list names exactly what you may test: specific applications, host names, IP address ranges, maybe a set of user roles. The out-of-scope list names what you must not touch even though it sits right next to the targets: the production database, a payments provider, the staff email system, anything belonging to another customer on shared infrastructure. Writing "out of scope: everything not listed above" is good practice, but naming the tempting neighbours explicitly stops arguments later.

Three traps catch new testers. First, third-party and cloud assets. If the client's app runs on a cloud provider, or sends traffic through a content delivery network or a payment gateway, those companies own that infrastructure. The client cannot give you permission over it, and many providers require their own notice or approval before any testing. You test the client's application, not the provider's platform. Second, data handling. The scope says what you may do with anything sensitive you find: usually, you must not copy real customer or payment data off the systems, you prove access with a redacted screenshot rather than a download, and you delete any extract when the test ends. Third, test accounts only. You use accounts the client created for the test, not a real employee's or customer's login, so you never act as a real person or touch their data.

In scope: test these Practice Partner app Practice store network Lab directory domain Never touch Real production Cloud provider Real customer data the fence is the job
The practice environment for this course is the only thing you may test: a sandboxed Partner app, a small practice store network and a lab directory domain. Real production, the cloud provider's platform and any real customer data stay outside the fence.

This course gives you one scope that never changes. Every technique in every later lesson, the reconnaissance in Reconnaissance, the web attacks in the lab Partner app, the network work, the privilege escalation up to the lab directory domain, runs against a purpose-built practice environment: a sandboxed copy of the Partner app, a small practice network of store servers, and a lab directory domain. These are built to be attacked and belong to the course. They are your entire in-scope list. Real Mangrove systems, real companies, your employer, your neighbour's router and any live service on the internet are out of scope, always, with no exceptions.

Quick check

While testing the in-scope practice Partner app, you notice it loads images from a real cloud storage provider, and you wonder whether that bucket is misconfigured. What is the right move?

Rules of engagement: how you will behave

If scope is where you may go, the (RoE) are how you behave once you are there. A good RoE is written to protect the client's live business and its real people, because even a test against a practice system can spill over if you are careless. The core clauses recur in almost every engagement:

  • Allowed times and windows. When testing may run. Noisy or risky actions are often pushed to off-peak hours so that if something slows down, few people are affected.
  • Rate limits and intensity. Caps on how hard you hit a system, so a scan does not become an accidental denial of service that takes a system down.
  • No destructive tests. You demonstrate a weakness without deleting data, corrupting records or leaving the system broken. Proving you could delete a table is not the same as deleting it.
  • No social engineering of real staff unless it is explicitly authorised and separately scoped. You do not phish, call or trick real employees on a whim.
  • No touching real customer data. Test accounts and test data only, so no real person is affected.
  • Stop conditions. The situations where you pause immediately and call your contact: a system becomes unstable, you find signs of a real prior breach, or you reach anything that looks like real sensitive data.

The RoE also sets the communication path: named emergency contacts on both sides, reachable during the test window, and how fast you must report a serious problem. Two cases deserve a planned response. If you accidentally cause an outage, you stop, call the contact, and help restore service before you carry on. And if you find evidence that a real attacker got there before you, you stop testing that system at once and follow an agreed incident path to the client's security team, because you may be standing in the middle of a live crime scene. You are a tester, not the incident responder, and trampling the evidence helps no one. Real incident handling is its own discipline, covered in the defensive course lesson on the first hour of an incident.

Quick check

Your RoE says "no destructive testing". You find a flaw that lets you delete any order in the practice Partner app. What demonstrates the finding within the rules?

Engagement types, methodology and disclosure

Engagements differ in how much the tester is told up front, and the scope document should say which applies. In a black box test you start with almost nothing, like an outside attacker. In a white box test you are given source code, architecture and credentials, which finds more in the same time. A grey box test sits between, often with a normal user account. An assumed breach test skips the break-in and starts from a foothold the client grants, to answer "if one laptop is compromised, how bad does it get?" None is more correct; each answers a different question, and this course moves through several as it goes.

Professional work follows a named rather than poking at random, so that coverage is consistent and the report is defensible. You should know these by name: the Penetration Testing Execution Standard (PTES), the OSSTMM, NIST SP 800-115, the OWASP Web Security Testing Guide (WSTG) for web applications, and the PCI DSS penetration testing guidance for cardholder environments. They overlap, and you cite the one you followed in the report so the reader knows what was and was not covered.

Finally, know the difference between three things people muddle. An engagement is a scoped, paid, time-boxed test under authorisation, which is this course. A bug bounty is a standing programme where a company invites anyone to report flaws under published rules, usually for a reward. is the ethic of telling the owner privately and giving them time to fix an issue before it is made public. All three share one root: you only test what you are permitted to test, and the permission's shape is different in each. Outside a scope, a bounty's rules or a clear invitation, there is no permission, and no permission means do not touch.

Build it

Write a scope and rules-of-engagement section you could put in front of a client, using a reusable template. Fill it for the course's practice environment.

  1. Start from a template with both halves of the scope

    Keep in-scope and out-of-scope side by side so a reader can see the fence at a glance. Name the tempting neighbours in the out-of-scope list, not just "everything else".

    Markdown
    # Engagement: practice Partner app and store network
    Authorised by: (name, role that owns the risk) ______  Signature/date: ______
    Also authorised by (third party): Lagoon Digital (runs the servers) ______
    
    ## Scope
    In scope:
    - Practice Partner app and its API
    - Practice store network: 10.20.0.0/16
    - Lab directory domain: lab.example
    
    Out of scope (do not touch):
    - Real production systems and real Mangrove data
    - Cloud provider platform, CDN, payments gateway (third parties)
    - Real customer, shop or staff accounts and their data
  2. Write the rules of engagement

    Set the window, the intensity, the forbidden actions, and the stop conditions. Every clause should map to a real risk it prevents.

    Markdown
    ## Rules of engagement
    - Window: weekdays 20:00 to 01:00 local time
    - Intensity: rate-limited scanning; no action that could take a service down
    - Not allowed: destructive tests, social engineering of real staff,
      use of any real account, touching real data
    - Evidence: redacted screenshots only; no real data copied off systems;
      delete any extract at the end
    - Stop conditions: instability, signs of a real prior breach, or any real
      data reached. On a stop: pause, call the contact, do not continue.
  3. List emergency contacts and the incident path

    Name a person on each side, reachable during the window, and say what happens if you cause an outage or find a real breach.

    Markdown
    ## Contacts and incidents
    - Client contact: Ken (engineering manager) — phone, backup phone
    - Security escalation: Mangrove security lead — phone
    - Tester lead: (you) — phone
    - If I cause an outage: stop, call Ken, help restore before continuing
    - If I find a real prior breach: stop on that system, notify the security
      lead immediately, preserve evidence, do not investigate further
  4. State the methodology and engagement type

    One line that tells the reader how the test was run and what it therefore did and did not cover.

    Output
    Type: grey box (a normal Partner app user account is provided)
    Methodology: PTES, with OWASP WSTG for the web application
    Deliverable: a report with findings, evidence, impact and fixes

Bring it to your team

Ask these before any test starts, whether you are the tester or the client reviewing a proposal.

  • Who signed the authorisation, and do they actually own the risk for these systems?
  • Does any target run on a third party's platform, and has that party agreed too?
  • What is explicitly out of scope, and are the tempting neighbours named?
  • What are the test window, the rate limits and the exact stop conditions?
  • Who do we call if a system goes down or we find a real breach, and how fast?
  • How is evidence handled, and are we certain no real customer data will be touched?

Red flags

  • Authorisation that is only a chat message, or signed by someone who does not own the risk.
  • A scope with no out-of-scope list, or that includes a third party's cloud without their permission.
  • Rules of engagement that allow destructive tests or social engineering with no limits.
  • No named emergency contact reachable during the test window.
  • A plan to test against production with real customer data "to make it realistic".

Practice

Write a scope and rules of engagement

Mangrove asks you to test the practice Partner app and the practice store network (10.20.0.0/16), but not the lab directory domain this time. The practice store servers are busiest at midday. Write a short scope (in-scope and out-of-scope lists) and five rules of engagement for this engagement. Then name the one third-party dependency you would raise before signing.

  • Your in-scope list names the practice Partner app and the store network range, and excludes the lab directory domain this time
  • Your out-of-scope list names real production, real data and at least one third party such as the cloud provider or payments gateway
  • Your rules include a test window away from the midday peak, a rate or intensity limit, no destructive tests, test accounts only, and a stop condition
  • You identify a third-party dependency (for example the cloud storage the app uses) and say it needs the provider's permission before testing
Show a model answer

In scope: the practice Partner app and its API, and the practice store network 10.20.0.0/16. Out of scope: the lab directory domain this time, all real production and real Mangrove data, real shop and customer accounts, and any third-party platform including the cloud provider, the CDN and the payments gateway.

Rules of engagement: (1) test only in the evening window, since the store servers peak at midday; (2) rate-limit scans so they cannot take a service down; (3) no destructive tests, prove impact with redacted screenshots; (4) use only the test accounts provided, never a real login or real data; (5) stop and call the named contact on any instability, any real data, or any sign of a prior breach. The third-party dependency to raise before signing is the cloud storage the Partner app reads from: it belongs to the provider, so the client cannot authorise testing it, and the provider's own permission would be needed.

Spot the problems in a flawed authorisation email

A colleague forwards this as the whole approval for a test: "Hi, this is Sam from the ops team. You're good to test any of our systems whenever works for you this month, go as hard as you like to be thorough, and use the admin login admin / Summer2026 so you can see everything. Thanks!" List at least four problems with using this as authorisation, and say what a correct authorisation would include instead.

  • You note the signer may not own the risk: "Sam from the ops team" is not shown to have authority to authorise testing of all systems
  • You note the scope is unbounded ("any of our systems", "whenever") with no in-scope or out-of-scope list and no window
  • You note "go as hard as you like" invites a denial of service, with no rate limit or no-destructive-tests rule
  • You note using a real admin account is wrong: testing should use provided test accounts, and a password should never be shared this way
  • You say a correct authorisation is a signed letter from the risk owner, with named in-scope and out-of-scope systems, a window, rules of engagement and emergency contacts
Show a model answer

The problems: the authority is unclear, because a member of the ops team is not shown to own the risk for "all our systems"; the scope is unbounded, with no in-scope or out-of-scope lists, no addresses and no dates; "go as hard as you like" has no rate limit and no ban on destructive tests, so a scan could cause an outage; and it hands over what looks like a real admin account, when testing should use purpose-made test accounts and credentials should never be emailed in plain text. There is also no confidentiality agreement, no emergency contact and no stop conditions.

A correct authorisation would be a signed letter from the person who owns the business risk (or an executive who does), naming the exact in-scope systems and the explicit out-of-scope ones, the test window, the rules of engagement including rate limits and forbidden actions, the test accounts to use, and named emergency contacts on both sides.

Code a scope gate: isInScope(target, scope)

Before any tool runs, a tester checks a target against the agreed scope. Write isInScope(target, scope) where scope is { allow: [...], deny: [...] } and each entry is either an exact host name or an IPv4 CIDR range like "10.20.0.0/16". Return { allowed, reason }. A deny match always wins, then an allow match lets it through, and anything not matched is denied by default. The reason is a short string.

JavaScript exerciseRuns in your browser with tests
function isInScope(target, scope) {
  // Return { allowed, reason }.
  // A scope entry is an exact host name or an IPv4 CIDR like "10.20.0.0/16".
  // Rules: a deny match wins; then an allow match is allowed;
  // anything not matched is denied by default.
}
Ctrl + Enter runs
Show a solution
JavaScript
function ipToInt(ip) {
  const p = ip.split('.');
  if (p.length !== 4) return null;
  let n = 0;
  for (const part of p) {
    const b = Number(part);
    if (!Number.isInteger(b) || b < 0 || b > 255) return null;
    n = n * 256 + b;
  }
  return n;
}

function matches(target, entry) {
  if (entry.includes('/')) {
    const [range, bitsStr] = entry.split('/');
    const bits = Number(bitsStr);
    const ip = ipToInt(target), base = ipToInt(range);
    if (ip === null || base === null) return false;
    const mask = bits === 0 ? 0 : (0xFFFFFFFF << (32 - bits)) >>> 0;
    return (ip & mask) === (base & mask);
  }
  return target === entry;
}

function isInScope(target, scope) {
  for (const e of scope.deny || []) {
    if (matches(target, e)) return { allowed: false, reason: 'matches deny rule ' + e };
  }
  for (const e of scope.allow || []) {
    if (matches(target, e)) return { allowed: true, reason: 'matches allow rule ' + e };
  }
  return { allowed: false, reason: 'not in scope: denied by default' };
}

Deny is checked first so it always wins, then allow, then the fall-through returns a denial. The CIDR check compares the target and the range after masking off the host bits, so any address inside the range matches. A host name that is not a valid IPv4 address simply fails the CIDR check and falls through to deny by default.

Pass the exercise to finish this task.

Check yourself

A client's chief technology officer signs a detailed authorisation for a test of the practice Partner app, which runs on servers managed by the agency Lagoon Digital. What is still missing before you can test those servers?

Mid-test you discover log entries that strongly suggest a real attacker compromised a practice-adjacent system weeks ago. Your rules of engagement list this as a stop condition. What should you do?

Which statement best captures the difference between a bug bounty and a penetration test engagement?

Flashcards

Open my review

Key takeaways

  • Written authorisation from the risk owner is the only thing that makes testing legal; a good result never excuses an unauthorised test.
  • Scope has two halves: what you may test and what you must not, including third-party and cloud assets the client cannot authorise.
  • Rules of engagement set windows, rate limits, forbidden actions, evidence handling and stop conditions to protect the live business.
  • Name your engagement type and methodology, and keep emergency contacts and an incident path for outages or a real prior breach.
  • In this course, the practice environment is the only thing you may ever test; real systems are always out of scope.

Sources and further reading

Episode transcriptThe letter that keeps you out of jail · about 10 minutes · tap any line to play from there
  1. NadiaImran, here is a question. A locksmith and a burglar do the exact same thing. They open a lock that is not theirs. What makes one of them legal?
  2. ImranThe owner called the locksmith. They agreed what to open, and the locksmith can prove it.
  3. NadiaThat is the whole of today. A penetration tester does the same actions a criminal does. The thing that makes it legal is permission for a defined target.
  4. ImranSo before any clever hacking, there is paperwork.
  5. NadiaRight. And the paperwork is the lesson that keeps you out of prison. Let me start with the hard part. The law.
  6. NadiaIn most countries, touching a computer system that is not yours, without permission, is a crime. In the United States there is the Computer Fraud and Abuse Act. In the United Kingdom, the Computer Misuse Act. Many countries have their own version.
  7. ImranAnd the details differ country by country?
  8. NadiaThey do. What counts as access, whether intent matters, how damage is measured. But the one rule that never changes is this. Any system that is not yours is off limits by default. A good finding does not make an unauthorised test legal.
  9. ImranSo how do you get on the right side of that line?
  10. NadiaOne document. Written authorisation. Testers call it the get out of jail letter. If anyone ever questions what you did, it is your proof that the owner asked for it.
  11. ImranWhat has to be in it?
  12. NadiaThe exact systems, the dates and times, the kinds of testing allowed, the people doing it, and a signature. And you keep a copy with you, even an offline copy, because the night you need it may be the night the network is down.
  13. ImranHere is my guess. Anyone senior enough at the client can sign it.
  14. NadiaThat is the trap. It has to be someone who owns the risk for those systems. The system owner, or an executive who owns the business risk. Not a friendly middle manager who says sure, go ahead in a chat message.
  15. ImranWhy not the manager? They run the team.
  16. NadiaBecause they cannot accept the risk for the whole business. And it gets sharper. Take Mangrove Market, the grocery company we use for examples. Their Partner app is run by an outside agency.
  17. ImranSo the client cannot give permission over servers the agency owns.
  18. NadiaExactly. Someone with authority over those servers has to sign too. Permission can only come from whoever owns the thing.
  19. NadiaIf you can see the screen, the first diagram is a ladder of documents. If not, picture five steps you climb in order before you start.
  20. ImranWalk me up it.
  21. NadiaFirst, a confidentiality agreement, both ways. Then authorisation, signed by the risk owner. Then scope. Then the rules of engagement. Then a kickoff where both sides swap contacts. Only after all five does testing begin.
  22. ImranAnd no step gets skipped.
  23. NadiaNo step gets skipped. Let me take scope next, because it has two halves and people forget one.
  24. ImranIn scope and out of scope.
  25. NadiaYes. In scope is exactly what you may test. Named apps, host names, address ranges, maybe some user roles. Out of scope is what you must not touch even though it sits right next door. The production database, a payments provider, staff email.
  26. ImranWhy name the neighbours if you already said everything else is off limits?
  27. NadiaBecause naming them stops arguments later. And there are three traps for new testers. The first is third party and cloud assets.
  28. ImranMeaning the app runs on someone else's platform.
  29. NadiaRight. A cloud provider, a content delivery network, a payment gateway. Those companies own that infrastructure. The client cannot give you permission over it, and many providers want their own notice first. You test the client application, not the provider platform.
  30. ImranAnd the other two traps?
  31. NadiaData handling. You do not copy real customer or payment data off the systems. You prove access with a redacted screenshot, not a download, and you delete any extract at the end. And test accounts only. You use accounts the client made for the test, never a real person login.
  32. NadiaThe second diagram is a map. A green zone at the top, a red zone below.
  33. ImranWhat is in green?
  34. NadiaThe only things you may test on this course. A sandboxed practice Partner app, a small practice store network, and a lab directory domain. All built to be attacked, all belonging to the course.
  35. ImranAnd red?
  36. NadiaNever touch. Real production, the cloud provider, real customer data. That zone is permanent. Real systems are always out of scope. No exceptions, ever.
  37. ImranGood. So scope is where I may go. What about how I behave once I am there?
  38. NadiaThat is the rules of engagement. Written to protect the live business and its real people. Let me give you the clauses that show up almost every time.
  39. ImranGo.
  40. NadiaAllowed times and windows, so noisy work runs off peak. Rate limits, so a scan does not become an accidental outage. No destructive tests. No social engineering of real staff unless it is separately authorised. No touching real data. And stop conditions.
  41. ImranDefine a stop condition for me.
  42. NadiaThe moment you pause and call your contact. A system goes unstable. You reach anything that looks like real sensitive data. Or you find signs that a real attacker was there before you.
  43. ImranLet me try the Mangrove example. The tester is on the practice Partner app. On night two they find a login that reaches a cloud storage bucket full of files. Tempting.
  44. NadiaVery tempting. What should they do?
  45. ImranThe bucket belongs to the provider, so it is out of scope. They do not probe it. They note it and flag it to Ken, the engineering manager, who raises it with the provider.
  46. NadiaPerfect. The finding is recorded, nobody real is harmed, and the authorisation still holds. That restraint is the skill.
  47. ImranNow say I find the real breach. The signs that someone got there weeks ago.
  48. NadiaYou stop testing that system at once. You notify the client security contact through the agreed path. You preserve the evidence, and you do not investigate further. You are a tester standing in a crime scene, not the detective.
  49. ImranSo I do not quietly keep going to learn more.
  50. NadiaNo. And you never delete the logs to be helpful. That destroys the evidence their responders need. Incident handling is its own job.
  51. ImranBefore we build it, one quick thing. People mix up engagement, bug bounty and responsible disclosure.
  52. NadiaThey do. An engagement is a scoped, paid, time boxed test under one authorisation. That is this course. A bug bounty is a standing invitation, where a company lets anyone report flaws under published rules. Responsible disclosure is the ethic of telling the owner privately first.
  53. ImranAnd the common root?
  54. NadiaYou only test what you are permitted to. The shape of the permission differs. Outside a scope, a bounty rule, or a clear invitation, there is no permission. And no permission means do not touch.
  55. NadiaSo what would you actually write? Start from a template with both halves of the scope side by side. In scope on one side, out of scope on the other, with the tempting neighbours named.
  56. ImranThen the rules of engagement.
  57. NadiaYes. The window, the rate limits, the forbidden actions, how evidence is handled, and the stop conditions. Then a short section of emergency contacts, a named person each side, reachable during the window.
  58. ImranAnd one line on type and method.
  59. NadiaOne line. Is it black box, grey box, white box, or assumed breach. And which methodology you followed, like the execution standard or the web testing guide. That tells the reader what was and was not covered.
  60. ImranQuestions for the next planning meeting then. Who signed, and do they really own the risk. Does any target run on a third party, and did they agree too.
  61. NadiaAnd two more. What are the window, the rate limits and the stop conditions. And who do we call if something goes down or we find a real breach.
  62. NadiaHere is one to try later. A colleague forwards an email as the whole approval. It says, test any of our systems whenever, go as hard as you like, and here is the admin login. Take a second. How many problems can you count?
  63. ImranA lot. The signer may not own the risk. The scope is unbounded. Go as hard as you like invites an outage. And a real admin password should never be shared that way.
  64. NadiaExactly four, and there are more. No confidentiality agreement, no contact, no stop conditions. That email is not authorisation.
  65. ImranLet me sum up. One, written authorisation from the risk owner is the only thing that makes testing legal. Two, scope has two halves, and third party assets are not yours to authorise. Three, rules of engagement protect the live business.
  66. NadiaGood. I would add one more. On this course, the practice environment is the only thing you may ever test. Real systems stay out of scope, always.
  67. ImranWhich is the perfect base for next time.
  68. NadiaNext time. Reconnaissance. How you map the attack surface of that practice environment before you touch a thing.
Finished reading?Mark it complete to fill in its stop on your course line.

Use it at work

Threat model checklist

STRIDE questions for one feature as data, with tests that every threat has an owner and a mitigation.

Open in the Security Lab
Next stopReconnaissance
Was this lesson helpful?
Questions and discussion

Loading the discussion…