Platform Module · In Development

Your IIS server is still negotiating TLS 1.1. When was that last reviewed?

IIS does not configure TLS through a config file. It uses registry keys under HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL. These keys are rarely documented, rarely checked, and often never explicitly set. No browser breaks, no error message appears, but the PCI-DSS auditor or NIS2 assessor will find it.

What auditors find in standard IIS environments

These vulnerabilities show up in PCI-DSS and NIS2 audits on a regular basis. None of them require an exploit. It is enough that nobody has touched the TLS configuration in the past three years.

TLS
TLS 1.0 and 1.1 still active

SchChannel registry keys for TLS 1.0 and TLS 1.1 are not set to disabled. Connections succeed. No browser error. PCI-DSS requires a minimum of TLS 1.2.

CIPHER
Weak cipher suites active

RC4, 3DES, and NULL ciphers are not disabled in the Windows default configuration. Cipher suite ordering via GPO or registry is absent in most environments.

HEADER
Server version in response headers

X-Powered-By: ASP.NET and Server: Microsoft-IIS/10.0 appear in every HTTP response by default. Version disclosure is a standalone audit finding.

HEADER
Security headers missing entirely

X-Frame-Options, X-Content-Type-Options, Strict-Transport-Security, and Content-Security-Policy are absent from the IIS default configuration. None are set automatically.

APP-POOL
No app pool isolation

Multiple applications running under the same app pool identity or service account. A compromised application directory has access to all others sharing that account.

FILTER
Request filtering rules missing

HTTP methods such as TRACE and CONNECT are not restricted. URL lengths, file extensions, and double-encoded requests are not filtered.

CONFIG
Directory browsing enabled

Directory browsing is active by default in many IIS instances and was never explicitly disabled. Directory listings are not a feature that should be exposed.

METHOD
TRACE method not disabled

HTTP TRACE is active by default and enables Cross-Site Tracing attacks. A single web.config entry or request filter closes this. It is rarely set.

Why IIS is different from Apache or Nginx

The critical difference is not in the feature set. It is in the configuration model for TLS. This is exactly why legacy protocols remain active and undetected for years.

Apache / Nginx
TLS via config file

TLS protocols and cipher suites live in a text file. A package update can set safer defaults. Changes are diffable, versionable in Git, and the configuration state is readable without system access.

SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
SSLCipherSuite HIGH:!RC4:!3DES:!NULL
IIS
TLS via Windows Registry (SchChannel)

TLS configuration lives in the SchChannel registry hive. No package update sets these keys automatically. Not setting them explicitly means legacy protocols remain active. The state is only readable from the registry, not from logs or config files.

HKLM\...\SCHANNEL\Protocols\TLS 1.0\Server
  Enabled           = 0x00000000
  DisabledByDefault = 0x00000001

The same pattern applies to cipher suite ordering (GPO or registry), security headers (web.config or IIS Manager), and app pool identities (IIS configuration, not an OS package). Everything is IIS-specific, everything must be set explicitly, and nothing comes from an update.

What this module will address

Four technical areas that are consistently open in grown IIS environments and that this module will cover as an automated, documented target state.

01

TLS and Cipher Hardening

SchChannel registry keys for TLS 1.0, 1.1, 1.2, and 1.3 explicitly configured. Cipher suite ordering set via GPO or registry. RC4, 3DES, and NULL ciphers disabled. Documented configuration state as evidence for PCI-DSS TLS minimum requirements.

02

Security Headers via web.config

Strict-Transport-Security, Content-Security-Policy, X-Frame-Options, X-Content-Type-Options, and Referrer-Policy as a versioned web.config standard. Server version removed from response headers. Consistent across all IIS sites, no manual per-instance intervention.

03

App Pool Isolation

Each application gets a dedicated app pool identity. Access separation enforced at OS level. App pool configuration as a versioned target state, not as a manually grown structure with no visibility into permissions and dependencies.

04

Request Filtering and HTTP Methods

Allowed HTTP methods restricted to GET, POST, and HEAD. TRACE blocked. URL lengths bounded. File extensions filtered. Directory browsing disabled. Request filtering as a declarative configuration state with compliance evidence.

IIS hardening requires OS hardening

IIS is not a standalone platform. It runs on Windows, is configured through Windows mechanisms (registry, GPO, Active Directory), and its security depends directly on the underlying OS foundation.

A carefully configured IIS on a neglected Windows Server closes only part of the attack surface. Outdated Windows versions, missing OS hardening, and GPO sprawl undermine IIS-specific controls at the system level. OS hardening and IIS hardening are deployed as a single automation logic, not as separate silos.

When this module becomes relevant

01

PCI-DSS audit reveals TLS problem

The assessor finds TLS 1.0 or 1.1 active. Nobody knows for how long. No config file to check, no diff history. SchChannel registry keys were never explicitly set. The follow-up question is how many other IIS instances in the organization are in the same state.

02

Security headers absent from the default configuration

No HSTS, no Content-Security-Policy, no X-Frame-Options. Every new IIS instance starts without these headers because no organizational target state for web.config configuration exists. Every instance is a deviation.

03

App pool sprawl with one service account for everything

Five applications, one app pool, one identity. Applications that should be processing separate data share the same account. Isolation is not implemented because no process exists for it and nobody has an overview.

What is possible today, what is in development

Today

IIS hardening through Engineering as a Service

SchChannel configuration, security headers, app pool isolation, request filtering: this is actionable implementation work, not a product release gate. IIS hardening projects are delivered today through Engineering as a Service (EaaS).

Platform Check (15 min.)
In Development

Automated IIS module as part of SPAS

Automated assessment of SchChannel configuration state, cipher suite analysis, app pool isolation report, security header compliance evidence. As a reproducible module with a versioned target state, not as a one-time audit.

IIS in scope of an audit? We can quickly assess what is actually configured in SchChannel and web.config.

No commitment · No sales pitch · Confidential

lennlay – Secure Platforms. Automated. Auditable.