Skip to content
Back to blog
Part 2 of 3 in series
Who's Knocking at the Door

A curated collection of articles exploring this topic in depth.

5 min read

Why Toronto! and Why, Toronto?

One CloudFront edge location dominated the probe traffic by a factor of six. Pulling that thread led to Azure Canada Central and a particular kind of internet scavenger.


The security dashboard breaks down probe traffic by CloudFront edge location. When I looked at the geographic distribution, one bar dominated everything else.

Toronto: 9,727 probe requests. Paris, the next largest: 1,742. That is not a gentle skew. Toronto handled more probe traffic than the next five edge locations combined.

Edge location distribution of probe traffic over a thirty-day window, showing Toronto at roughly 9,700 requests while every other location falls below 2,000(click to enlarge)

CloudFront edge locations reflect where a request entered the CDN, not where the scanner physically sits. So the question was not "why are attackers targeting Toronto" but "why are so many scanners routing through it?"

The IPs#

The probe sources table on the security dashboard lists the top scanning IPs by volume. I started with the most active:

IP Hits Unique paths Edge location
20.48.232.178 2,151 223 Toronto
20.63.96.180 540 81 Toronto
20.151.201.236 441 99 Toronto, Montreal
20.220.232.240 396 72 Toronto
4.204.200.32 366 100 Toronto
20.63.83.113 273 47 Toronto, Montreal
20.220.210.206 249 83 Toronto
52.138.39.105 185 100 Toronto

Every one of the top eight sources sits in a 20.x.x.x, 4.x.x.x, or 52.x.x.x range. All three are Microsoft Azure allocations.

Azure Canada Central#

Microsoft publishes its Azure IP ranges and service tags(opens in a new tab) as a downloadable JSON file, updated weekly. Cross-referencing the probe source IPs against the AzureCloud.canadacentral service tag confirmed what the CloudFront edge data already suggested. Every one of the top Toronto probe sources falls within Canada Central's allocated ranges(opens in a new tab):

  • 20.48.128.0/18 through 20.48.224.0/19
  • 20.63.0.0/17
  • 20.151.0.0/16
  • 20.220.0.0/18
  • 4.204.0.0/15
  • 52.138.0.0/18

Azure Canada Central's physical infrastructure sits in the Toronto area. CloudFront's nearest point of presence is its Toronto edge. The scanners are not choosing Toronto. The geographic concentration is an artefact of infrastructure proximity, not targeting.

Scanning behaviour#

The dashboard records timing data for each probe source. Two distinct patterns are visible in the Toronto cluster.

The top source, 20.48.232.178, was active across a fifteen-day window from late March to early April, probing 223 distinct paths at roughly one request every ten minutes. A slow, methodical sweep that stays under most rate-limiting thresholds.

At the other extreme, 20.220.210.206 compressed 249 requests across 83 unique paths into 97 seconds: roughly 2.6 requests per second. A fast, noisy pass that finishes before anyone can respond.

Different approaches, same assumption: there are always more hostnames to try.

What they are looking for#

The dashboard also records the paths each source requested. The top path across the entire Toronto cluster is /wp-content/plugins/hellopress/wp_filemanager.php. Others include /wp-admin/alfa.php, /wp-admin/css/bolt.php, /wp-content/radio.php, and /wp-content/plugins/pwnd/as.php.

These are not probes for known software vulnerabilities. "HelloPress" is not a legitimate WordPress plugin with a security flaw. It is a malicious plugin(opens in a new tab) planted by attackers on already-compromised installations, providing a file manager web shell. /wp-admin/alfa.php checks for Alfa Shell(opens in a new tab), a PHP web shell created by a group known as ALFA TEaM. The remaining paths are common filenames used to disguise web shells inside WordPress directory structures.

The scanners are not trying to break in. They are checking whether someone already broke in and left a web shell(opens in a new tab) behind. This is scavenging, not hunting.

Why Azure#

Several of the probe sources in the dashboard data were active for only hours or days before disappearing. The pattern is straightforward: provision a virtual machine, run a sweep across a target list, discard the instance. Cloud platforms with free tiers and low-friction sign-up make this cheap and repeatable.

This is not unique to Azure. GreyNoise documented a coordinated scanning campaign(opens in a new tab) in May 2025 where 251 Amazon AWS IPs, all geolocated to Japan, collectively probed 75 distinct vulnerability categories in a single day. The IPs showed no activity before or after: temporary infrastructure, provisioned for a single operation and then abandoned.

The pattern in my data looks similar in shape if not in scale. A cluster of cloud-hosted IPs, concentrated in one region, scanning methodically for web shells and known exploit paths. Canada Central also offers low-latency routing to North America. The provider and region vary. The economics do not.

What this means for the dashboard#

Nothing, practically. The site is a static export served from S3. Every one of these probes returns a 403 or 404. The scanners will cycle through their target lists, receive nothing useful, and move on.

But the Toronto anomaly illustrates what the geographic distribution on the security dashboard actually represents. The edge location chart does not show where attackers are. It shows where cloud providers have data centres, and where those data centres sit relative to CloudFront's points of presence. The Toronto bar is not a threat indicator. It is a map of Azure's Canadian infrastructure and its proximity to AWS, reflected through CDN routing.