Method

How we test

The whole method, in public, so you can judge it before you buy it and audit it afterwards.

This is a Ghost Protocol penetration test as the engagement actually runs: what we agree before anything is touched, what the machine does, what the person does, what a finding has to prove before it is allowed into the report, and where the boundary of the work sits. It describes the fixed-price web and API engagement and nothing else. The format of the document it produces is on the sample report page.

Version 1.0 · last reviewed 29 August 2026 · written by Ryan Sebastian, who runs the engagements and signs the attestation

17
Phases in the automated sweep
75
Scanner modules in the fleet
6
Manual test classes after it
5–7
Days · kickoff to delivery
The shape of it

One engineer, one engine, a fixed boundary

The engagement is one engineer and one engine against a fixed scope. The engine is PhantomDragon, the scanner fleet we build and run ourselves: 50 modules across a 17-phase pipeline, 75 or more scanners, roughly 62,000 lines of Python. The engineer is Ryan Sebastian, who scopes the work, drives the manual phase, writes the report and signs the attestation letter. About four engineer-days go into an engagement. The machine buys the breadth those days would otherwise be spent enumerating.

The boundary is the external application layer. One web app plus its API, up to three hostnames and two user roles, one price, held. Authenticated authorization testing (BOLA and BFLA) is performed by the engineer. Testing is grey box: you issue credentials for both roles, because access control is where the findings are and a black-box tester spends half the window getting to the authenticated surface. Inside that boundary the work is thorough. Outside it we do nothing at all: no internal network, no segmentation testing, no social engineering, no denial of service, no physical access, no mobile client. That list is not a disclaimer at the end of a proposal. It is the shape of the product, and it is the reason the price is a single number.

Two things we do not claim. The engine does not discover zero-days, and it is not autonomous: everything it produces is a lead, and a lead becomes a finding only when a person reproduces it. And a clean report is evidence of what was tested in a defined window, not a certificate that an application is secure. The attestation letter states the scope and the dates for exactly that reason.

What follows is the method in the order the engagement runs it. It is published so that a CTO can judge the work before buying it, an auditor can see what the report is and is not evidence of, and a competitor can hold us to it.

Rules of engagement

What we agree before anything is touched

Nothing is touched without written authorisation from the owner of the asset. The engagement letter fixes the scope, the window, the contacts and the escalation path, and the attestation later covers exactly what that document named. No more, and no less.

01AuthorisationWritten authorisation from the owner of the asset, before the window opens. If the target runs on infrastructure you do not own, or holds a third party's data, their sign-off is needed too. Our terms of business commit to this: we do not test a system without it.
02ScopeOne web application and its API, up to three hostnames and two user roles. Named hosts, named roles, written down. Whatever is not in that statement is not in the test, and is not in the attestation letter afterwards.
03EnvironmentProduction or staging, your call. Staging is safer, production is more accurate. Either way the engagement runs non-destructive: no data modification beyond records you designate as test data, and no exploitation against live customer records.
04CredentialsYou seed one account per role, two roles, and tell us what each is meant to be able to reach. Grey box is the default because access control is where the findings are, and a black-box tester spends half the window getting to the authenticated surface. Black box on request.
05WindowStart and end dates, a named point of contact, and a channel we can reach within the hour. If you allowlist by source address or relax a WAF rule for the window, that is agreed in writing beforehand and recorded in the report, because it changes what the test proves.
06LoadAgreed throttles. We are testing your application, not your capacity: no load generation, no resource exhaustion, no credential brute-forcing at a rate that would degrade the service for your users. Rate limiting is tested by finding where the limit is, not by trying to exceed your infrastructure.
07EscalationOne rule that overrides the schedule: a confirmed critical stops the test. We message the point of contact within the hour and do not continue until you have confirmed. Critical findings never wait for the report.
08HandlingOne record is enough to prove impact, and that is where we stop. Evidence in the report is sanitised. Findings go to the contacts you name and nowhere else, which is what the terms of business already say.
09ExclusionsNamed in the same document, at the start. A boundary discovered at delivery is a dispute. A boundary agreed at kickoff is a scope.

Explicitly out of scope

Internal corporate networks, and anything that needs a position inside your perimeter
Network segmentation testing, including the segmentation requirements under PCI DSS 11.4
Social engineering: phishing, vishing, or pretexting your staff
Denial of service, and any load or resource-exhaustion testing
Mobile applications, iOS and Android clients
Physical security and on-site access
Third-party services we do not control (Stripe, Auth0, your cloud provider's own control plane)
Source-code review: the engagement is grey box against a running system
Red-team exercises and adversary simulation

Several of these are available as separate work, quoted separately. None of them is quietly absorbed into a fixed price, because a scope that stretches is a scope that stops meaning anything on the attestation.

Phase one

Reconnaissance and mapping

Before any payload, a map. The point of this phase is that nothing inside the scope is tested by accident, and nothing is missed because it was not on the sitemap.

  1. Hostname and certificate inventory

    The hostnames in scope, plus what DNS and certificate transparency say about them: names that still resolve, records pointing at hosts that no longer answer, staging names nobody took down. Anything outside the scope statement is reported as an observation and not tested.

  2. Technology fingerprint

    Server, framework, application platform, CDN and WAF, client-side libraries and their versions. This decides which scanners and which payload families are worth running at all. A Rails injection set fired at a Django application is noise, and noise costs a day of the report.

  3. Route and parameter inventory

    Every route the application serves to each role, crawled authenticated and unauthenticated, plus the routes it does not advertise: sitemaps, JavaScript bundles, source maps where they ship, historical paths, and directory discovery aimed by the fingerprint rather than by a generic wordlist.

  1. The API shape

    Endpoints, methods, parameters, and the object identifiers they take. Where an OpenAPI document or GraphQL introspection is available we use it and then check it against reality, because the endpoints missing from the documentation are usually the ones worth the most.

  2. The role matrix

    What each of the two roles is supposed to reach, written down as a matrix before anything is tested against it. This is the artefact the access-control phase works from. Without it, IDOR testing is guesswork with a good vocabulary.

  3. The state map

    The flows that change state: signup, login and reset, purchase and refund, invitation and role change, export and delete. Business-logic abuse happens inside these flows, so they are drawn before they are attacked.

Phase two

The automated sweep

PhantomDragon runs its seventeen phases under manual oversight, in the order below. The sweep averages three to six hours. It is the cheapest part of the engagement and the least interesting part of the report.

01–02ReconnaissanceDNS, subdomains, WHOIS, technology fingerprinting.
03–04ServicesTCP and UDP scanning, service version detection.
05–06FingerprintPlatform detection, framework identification, WAF behaviour.
07–08TLSCertificate auditing, cipher suite testing, protocol checks.
09–10DiscoveryDirectory discovery, hidden endpoint enumeration.
11–12VulnerabilitiesOWASP Top 10 classes, CVE matching, injection testing.
13–14AuthenticationBrute-force resistance, session management, token analysis.
15–16APIAPI endpoint testing, header auditing, CORS validation.
17CorrelationCross-phase analysis, false-positive filtering, risk scoring.

Why a fleet rather than a scanner. In our own testing, any two scanners agree on a given issue only 30 to 40 percent of the time, so most of what each tool reports is unique to that tool. One scanner is a sample. The fleet is coverage, and coverage is the part of the work a machine is genuinely better at. We published the run we did against our own application, including what it found.

Earlier phases decide later ones. The fingerprint chooses which payload families are worth firing; content discovery is aimed by what the fingerprint found. The final phase correlates across all of them and applies seven validation strategies before a person sees anything: deterministic replay, differential analysis, timing correlation, pattern confidence, semantic context, technology-stack veto, and model reasoning. The engine is documented separately.

That is a triage layer, not a verdict. Nothing ships on scanner output alone. Everything the sweep produces is a lead, every lead is reproduced by hand or dropped, and the report prints which of the two happened for every finding in it.

Phase three

The manual phase

This is what the days are for. Every class below asks a question about your application’s own rules rather than about HTTP, which is why pattern matching cannot begin it.

  1. Authentication and session

    Registration, login, password reset, MFA enrolment and recovery, and the session that follows. What the reset token is derived from and how long it lives; whether a reset invalidates the sessions that existed before it; whether logout revokes server-side or only clears a cookie; whether the session identifier survives a privilege change; and what a JSON Web Token is actually verified against, algorithm, signature, audience and expiry included. Rate limiting is measured on the endpoints that matter rather than assumed absent.

  2. Access control and IDOR

    The role matrix, pair by pair. Every state-changing request from one role is replayed against the other role's object identifiers, and what the server does is recorded: a 200 where a 403 belongs is the entire class. Vertical escalation, a user reaching an administrative route. Horizontal escalation, one tenant reaching another tenant's object. And the quiet version, where the interface hides a control but the endpoint behind it does not. Where identifiers are opaque we test whether they are unguessable or merely long, and whether some other endpoint leaks them.

  3. Business-logic abuse

    Requests that are individually legal and illegal in sequence or in quantity. Price and quantity tampering on the way to checkout, negative and fractional amounts, currency substitution, discount and referral codes replayed or stacked, refund paths that credit before they debit, a state machine driven out of order, and races on anything holding a balance or a single-use token. A scanner has no model of your business rules, so this is work it cannot begin, and it is where the findings that matter usually are.

  1. Injection classes

    Wherever input reaches an interpreter. SQL and NoSQL injection including blind and time-based variants; command and template injection; server-side request forgery in every place the server fetches a URL you supplied, which in practice means webhooks, avatar imports, document renderers and link previews, with cloud metadata endpoints and internal ranges as the targets that decide severity; XML external entities where XML is parsed; unsafe deserialisation where objects come off the wire; and cross-site scripting judged by whether it executes in a real browser session, not by whether a string came back reflected.

  2. The API surface

    REST and GraphQL, tested against the OWASP API Security Top 10 rather than the web Top 10, because the failure modes are different. Object-level and property-level authorisation on every endpoint that takes an identifier; mass assignment wherever a request body binds to a model; unrestricted resource consumption through pagination limits, expensive filters, and GraphQL depth and aliasing; undocumented endpoints; and version drift, where an older path outlived the access-control rewrite that fixed the newer one.

  3. The infrastructure edges

    The perimeter that belongs to the application. TLS configuration, certificate chain and expiry, HSTS. DNS records pointing at infrastructure you no longer control, which is how subdomain takeover happens. CORS policy, and specifically whether it reflects an arbitrary origin with credentials. Cookie flags and cookie scope across subdomains. Security headers judged by exploitability rather than by presence. Storage buckets and CDN paths reachable without authentication. And webhook endpoints that accept an unsigned body, payment webhooks included, tested for signature verification and replay.

Findings from this phase are usually the ones that matter, and they are the reason the engagement is a penetration test rather than a scan. They are also the ones a fixed price makes people suspicious of, so the report tags every finding with where it came from and totals the split. You can see exactly what the engineer’s days produced.

Evidence

The bar a finding has to clear

A finding is a claim about your system, and a claim needs proof. A candidate that cannot meet all six of these is not reported as a finding. It is dropped, or written down as an observation, which is a different word on purpose.

  1. A reproduction from a clean session

    The steps replay in order from a fresh session, with no state left over from the run that found it. If it happens once and not again, it is not yet a finding.

  2. The request and the response

    The exact request that does it and the response that proves it, sanitised. Not a version banner, not a scanner's confidence score, not an inference from a header.

  3. The identity it was run as

    Which role, which account, authenticated or not. An access-control finding without the identity attached is an anecdote.

  1. Impact in one sentence

    What an attacker gets. If that sentence cannot be written without the words could potentially, the impact has not been demonstrated and the rating has nothing to stand on.

  2. A rating with its reasoning

    Likelihood and impact, aligned with the OWASP Risk Rating Methodology, with the reasoning printed beside the rating rather than implied by it.

  3. Provenance

    Scanner-detected and engineer-verified, or engineer-found. Every finding carries which, and the report's appendix totals the split.

What does not become a finding: a missing header with no exploit path, a version-banner guess, a self-inflicted script injection, a rate limit that exists but is generous. Those appear as observations and are not counted in the severity totals. Padding a count is the easiest way to make a report look thorough on page one and the fastest way to make it untrustworthy by page twelve.

Severity

How findings are rated

Likelihood and impact, aligned with the OWASP Risk Rating Methodology, with the rationale printed next to the rating rather than left implied. Severity inflation is the quiet fraud of this industry, and it is easy to spot once you know to look.

01CriticalA direct path to data exposure or account takeover that is exploitable now. You hear about it within an hour of confirmation, mid-engagement. It is never held for the report.
02HighAn exploitable weakness with serious impact. This sprint. The re-test expects it fixed.
03MediumReal, but it needs preconditions, chaining, or an authenticated position first. Schedule it deliberately.
04LowHardening and defence in depth. Batch it into normal maintenance.
05InfoWorth knowing, not a risk. Never inflated into a finding to pad a count.

Chains are rated as chains. A low-severity leak plus a medium-severity request forgery that together reach an internal service is one critical finding with two components, not three separate rows scored in isolation. The chain is what an attacker uses, so the chain is what carries the rating. Scoring findings one at a time is the main reason automated output under-rates the worst thing in an application.

Deliverable

What lands in the report

Two documents and two machine-readable files, 5 to 7 days after kickoff. The report is ordered so that the first two pages work for a CFO and the rest works for the engineer who has to fix things.

01ScopeWhat was tested, the exact dates, what was excluded, and the constraints we tested under. If something is not in this section, the attestation letter does not cover it.
02SummaryOne page, plain English: the risk posture, the severity counts, and the two or three decisions the company should make this week. Written for a reader with no security background.
03SeverityFindings grouped by severity, with the rating method stated on the page rather than implied, and each finding mapped to its OWASP category.
04FindingsOne page each: evidence, reproduction steps, and remediation written for your stack. A developer should be able to act on a page without asking us anything.
05ProvenanceWhich findings came from scanner modules and which came from manual testing, with the split totalled. Most vendors do not print this, because it would show how much of the deliverable was a tool run.
06AddendumAppended after you fix. Every finding takes a final status, and the attestation letter is reissued to match.

Every finding page carries

Finding ID and title, stable, so the re-test addendum can reference it
Severity, with the printed rationale behind it
Affected asset: the exact endpoint, parameter or component
Evidence: sanitised request and response, or a screenshot
Reproduction steps your engineer can replay in staging
Remediation written for your stack, not pasted from a scanner knowledge base
References: the OWASP category, for your compliance crosswalk
Provenance tag: the named scanner module, or manual testing

Formats: PDF for the report and for the attestation letter, JSON and SARIF for the findings so that remediation becomes tickets rather than screenshots of a PDF. A thirty-minute walkthrough call covers every high-severity finding, and the Q&A inbox stays open for thirty days after delivery. The page-by-page anatomy, including how to judge anyone else’s report, is on the sample report page.

Closure

The re-test, and the letter

The engagement does not end at the report. It ends when the findings have a final status and the letter says so.

After you patch, we re-test the findings at no extra charge and append an addendum. Every finding takes one of three final statuses: fixed, still open, or risk accepted. Risk accepted is yours to declare, and the addendum records in writing that it was your call. The attestation letter is then reissued to match, so the document that ends up circulating is the post-fix one rather than the alarming one.

Re-running the pipeline costs us compute rather than a second engagement, which is why the re-test is included rather than sold. For PCI DSS the addendum is what closes the 11.4.4 loop with dated evidence. For ISO 27001 it is the retest evidence a certification auditor samples first, and the artefact most often missing from the folders we are shown.

The attestation letter states

Who performed the test, with the engagement dates
The scope statement: the exact applications, APIs and hostnames covered
The methodology: OWASP-aligned testing plus NIST SP 800-115
Results at severity-count level, with no exploit detail
Re-test status after your fixes
Signature and date

Share the letter, not the report. The letter carries no technical detail and exists to be handed to auditors, enterprise reviewers and investors. The full report contains reproduction steps for live weaknesses and should stay with your team, your auditor, and reviewers under an NDA.

Standards

The standards this maps to

Naming a methodology is the minimum an auditor should accept from anyone. Here is what each name covers in this engagement, and the row at the bottom is where our coverage stops.

How the method maps to OWASP, NIST, SOC 2, ISO 27001 and PCI DSS
Standard or controlWhat it asks forWhat answers it here
OWASP Top 10The consensus list of web application risk categories.The web application phases test against it, and every finding page names the category it maps to.
OWASP API Security Top 10The API-specific list, where broken object-level authorisation and broken authentication live.The API surface is tested against this list rather than the web one, because the failure modes differ.
NIST SP 800-115The technical guide to information security testing and assessment: planning, discovery, attack, reporting.The shape of the engagement and the shape of the report. It is the methodology the attestation letter names.
SOC 2, CC4.1Ongoing or separate evaluations confirming internal controls are present and functioning.An independent, dated test with a named methodology is the separate evaluation. SOC 2 never says the words penetration test; auditors expect one and commonly map it here.
ISO 27001, A.8.8Management of technical vulnerabilities: timely identification, evaluated exposure, action taken.The report evidences identification and evaluation; the re-test addendum evidences action. It does not replace your patching records, which sit inside the same control.
ISO 27001, A.8.29Security testing in development and acceptance.The change-triggered engagement: a new application, a new API surface or an authentication rework, tested before it carries scoped data.
PCI DSS 11.4.3External penetration testing, at least annually and after significant change.The external application layer, which is the whole of our scope.
PCI DSS 11.4.4Exploitable vulnerabilities corrected, and testing repeated to verify the correction.The free re-test and the dated addendum that follows it.
PCI DSS, internal and segmentationInternal penetration testing and segmentation testing.Not covered. You will need a second provider for that work, and we say so at scoping rather than at delivery.

One engagement can serve a SOC 2 audit and an ISO 27001 certification at the same time when the scope and the dates line up: the technical work is identical and only the paperwork around it differs. The two framework-specific guides go further, on SOC 2 timing and evidence and on what an A.8.8 auditor samples.

Limits

The limits

The honest boundary of this method, collected in one place, so that you can decide whether it is the right instrument before you buy it rather than after.

One engineer and one engine. Not a team and not a red cell: about four engineer-days of senior attention, plus a scanner fleet, against a fixed scope.
A fixed scope. One web application and its API, three hostnames, two roles. Past those caps the fixed price stops holding and the engagement is quoted instead.
The external application layer only. Nothing that needs a position inside your network, and no segmentation testing.
No social engineering, no physical access, no denial of service. Your people and your capacity are not targets here.
Grey box, not source review. We test the running system with credentials you issue, not the repository behind it.
No zero-day claims. The engine orchestrates known tools and known techniques at a breadth a person cannot match. Novel flaws come from research, and we do not sell research as though a pipeline produced it.
A window, not a warranty. The report describes what was found in a defined period against a defined scope. It is evidence of testing, not a certificate that an application is secure.
Not compliance preparation. The engagement evidences a testing control. Policies, control evidence and audit readiness are a separate piece of work.

If your scope is larger than the caps, the fixed number stops holding and the engagement is quoted instead. The intake page works that out on its own, before anyone gets on a call. The engagement itself is $2,999, or LKR 600,000 for companies registered in Sri Lanka, with the full price book on the pricing page.

Where to go next

Not ready for an engagement yet? The free surface scan takes about a minute, with no card and no signup, and it is the honest place to start when a report does not matter yet. Questions about the method itself, including the parts you think are wrong, go to ryan@ghosts.lk. This page is versioned and dated at the top, and it changes when the method changes.