Lesson 153 — Hundreds of Files Were Downloaded in Eleven Minutes
Lesson 151 established unusually large pre-departure downloads. Lesson 152 added geographically inconsistent SharePoint access. Now the investigation reveals something else: the files were not collected gradually.
Hundreds of download events occurred inside an eleven-minute window. In this lesson we use KQL to measure download velocity, identify the source and workload behind the burst, compare it with the user's normal behaviour and determine whether the pattern looks like routine synchronisation, automation or suspicious data collection.

Your case file
Between 2:00 PM and 2:11 PM, alex.wilson@contoso.com generates hundreds of SharePoint and OneDrive download events.
Case briefing
Investigation objective
Use Microsoft 365 audit data in Sentinel to isolate the high-velocity download window, calculate event rates, identify the operations and client context involved, compare the burst with historical behaviour and determine what additional evidence is required before describing the activity as exfiltration.
Investigator's rule
Speed is a signal, not intent. Hundreds of events in minutes may be suspicious, but OneDrive synchronisation and other legitimate processes can also generate rapid activity. Investigate the mechanism before naming the motive.
Stage 1 — isolate the eleven-minute download burst
Start with the narrowest useful time window. Preserve operation, workload, file, site, IP and user-agent context for every download event.
let TargetUser = "alex.wilson@contoso.com";
let StartTime = datetime(2026-08-18 14:00:00);
let EndTime = StartTime + 11m;
OfficeActivity
| where TimeGenerated between (StartTime .. EndTime)
| where UserId =~ TargetUser
| where OfficeWorkload in ("SharePoint", "OneDrive")
| where Operation in ("FileDownloaded", "FileSyncDownloadedFull")
| project TimeGenerated,
UserId,
Operation,
OfficeWorkload,
Site_Url,
SourceFileName,
SourceRelativeUrl,
ClientIP,
UserAgent
| order by TimeGenerated ascNarrow windows reduce noise
When an anomaly has a known start and end time, a tightly scoped query makes the sequence easier to inspect and reduces unrelated Microsoft 365 activity in the result set.
Keep sync operations visible
Do not treat FileDownloaded and FileSyncDownloadedFull as interchangeable. A burst dominated by sync operations may require a very different explanation from repeated browser downloads.
Stage 2 — measure download velocity minute by minute
Aggregate the events into one-minute bins. This turns a long event list into a simple picture of how quickly the activity accelerated and whether it remained sustained.
let TargetUser = "alex.wilson@contoso.com";
let StartTime = datetime(2026-08-18 14:00:00);
let EndTime = StartTime + 11m;
OfficeActivity
| where TimeGenerated between (StartTime .. EndTime)
| where UserId =~ TargetUser
| where OfficeWorkload in ("SharePoint", "OneDrive")
| where Operation in ("FileDownloaded", "FileSyncDownloadedFull")
| summarize Downloads=count(),
UniqueFiles=dcount(SourceFileName),
Sites=dcount(Site_Url)
by bin(TimeGenerated, 1m)
| order by TimeGenerated ascWhy one-minute bins?
The incident window is only eleven minutes. One-minute bins preserve enough detail to reveal bursts without forcing the analyst to inspect hundreds of individual rows first.
Unique files matter
Event count and unique-file count are not always identical. Repeated operations against the same files can inflate activity, so keep both measurements visible.
Stage 3 — identify what generated the burst
Group the activity by operation, IP address, user agent and site. This helps determine whether one consistent client produced the downloads or whether several access patterns were involved.
let TargetUser = "alex.wilson@contoso.com";
let StartTime = datetime(2026-08-18 14:00:00);
let EndTime = StartTime + 11m;
OfficeActivity
| where TimeGenerated between (StartTime .. EndTime)
| where UserId =~ TargetUser
| where OfficeWorkload in ("SharePoint", "OneDrive")
| where Operation in ("FileDownloaded", "FileSyncDownloadedFull")
| summarize Downloads=count(),
UniqueFiles=dcount(SourceFileName),
FirstSeen=min(TimeGenerated),
LastSeen=max(TimeGenerated)
by Operation, ClientIP, UserAgent, Site_Url
| order by Downloads descBrowser or sync client?
User-agent and operation context can help distinguish interactive browser activity from synchronisation behaviour. Validate the actual values in your tenant rather than relying on a single string as proof.
One IP does not make it safe
A legitimate user, compromised session or automated process can all operate from a familiar source. Source consistency helps explain the activity but does not determine whether it was authorised.
Stage 4 — compare velocity with historical behaviour
Now calculate download counts in ten-minute windows across an earlier baseline period. Compare the incident burst with the user's normal short-window activity rather than only comparing daily totals.
let TargetUser = "alex.wilson@contoso.com";
OfficeActivity
| where TimeGenerated between (ago(37d) .. ago(7d))
| where UserId =~ TargetUser
| where OfficeWorkload in ("SharePoint", "OneDrive")
| where Operation in ("FileDownloaded", "FileSyncDownloadedFull")
| summarize Downloads=count() by bin(TimeGenerated, 10m)
| summarize WindowsObserved=count(),
AverageDownloadsPer10m=round(avg(Downloads), 1),
MaximumDownloadsPer10m=max(Downloads),
P95DownloadsPer10m=percentile(Downloads, 95)Daily totals can hide bursts
A user might download a similar number of files on two different days but do so very differently: gradually across eight hours or in one automated-looking burst. Velocity exposes that difference.
Use percentiles carefully
The 95th percentile can provide useful behavioural context, but a statistical outlier is not automatically malicious. Business processes can legitimately create rare high-volume windows.
Stage 5 — reconstruct the activity around the burst
Expand slightly before and after the eleven-minute window and include file access and sharing operations. This helps determine what led into the burst and what happened immediately afterwards.
let TargetUser = "alex.wilson@contoso.com";
let StartTime = datetime(2026-08-18 13:50:00);
let EndTime = datetime(2026-08-18 14:25:00);
OfficeActivity
| where TimeGenerated between (StartTime .. EndTime)
| where UserId =~ TargetUser
| where OfficeWorkload in ("SharePoint", "OneDrive")
| where Operation in ("FileAccessed", "FileDownloaded",
"FileSyncDownloadedFull", "SharingSet",
"AnonymousLinkCreated")
| project TimeGenerated,
Operation,
OfficeWorkload,
Site_Url,
SourceFileName,
ClientIP,
UserAgent
| order by TimeGenerated ascLook for preparation
Repeated file access immediately before bulk downloads may show the user browsing or selecting content. A sudden burst without preceding interaction may be more consistent with sync or automation.
Look for what happened next
External sharing or anonymous-link creation after collection would materially change the investigation. Data acquisition and data disclosure are separate questions and should be proved separately.
Agent Foskett's download-velocity timeline
Your evidence board
| Evidence | What it supports | Weight |
|---|---|---|
| Hundreds of download events in eleven minutes | Confirms high-velocity data collection. | Strong behavioural evidence |
| Many unique files across multiple sites | Supports broad rather than repetitive collection. | Strong context |
| Velocity materially exceeds historical baseline | Shows the burst was abnormal for the user. | Strong supporting evidence |
| Sync-oriented operation and familiar client | May support a legitimate synchronisation explanation. | Requires validation |
| Browser-style downloads from an unusual source | May strengthen concern about deliberate or compromised-session collection. | Strong when corroborated |
| High velocity alone | Does not prove theft, exfiltration or malicious intent. | Insufficient alone |
Write the finding like an investigator
Example: Microsoft 365 audit telemetry recorded hundreds of SharePoint and OneDrive download events associated with alex.wilson@contoso.com during an approximately eleven-minute period. The activity was analysed by minute, unique file count, workload, operation, site, client IP and user-agent context and compared with an earlier short-window behavioural baseline. The incident window materially exceeded the user's normal download velocity, supporting the conclusion that high-speed data collection occurred. The available telemetry should be used to determine whether the burst was produced by legitimate synchronisation, interactive downloading or another mechanism. High download velocity alone does not establish malicious intent or prove that organisational data was transferred outside Microsoft 365.
Lesson 153 key takeaways
- Total download volume and download velocity answer different investigation questions.
- Use narrow time windows when the suspicious burst is already known.
- Bin events into short intervals to expose the shape of high-speed activity.
- Compare event count with unique-file count.
- Keep browser and synchronisation operations distinguishable.
- Group activity by IP, user agent and site to investigate the mechanism.
- Build short-window historical baselines rather than relying only on daily totals.
- Statistical outliers identify unusual behaviour, not malicious intent.
- Investigate activity immediately before and after the burst.
- Prove data collection and data disclosure as separate parts of the investigation.
Module 13 — the cloud investigation deepens
Lesson 151 established unusual data volume. Lesson 152 added geographic inconsistency. Lesson 153 now proves that the collection occurred at unusually high speed. Next, we pivot away from file activity and investigate a different form of cloud persistence: an OAuth application granted consent.
Continue your KQL investigation training
Related Agent Foskett Investigations
🔎 KQL Academy — Module 13: Advanced Cloud & SaaS Investigation
Investigate high-volume SharePoint downloads with KQL
Lesson 153 of the Agent Foskett KQL Academy uses Microsoft Sentinel and Microsoft 365 audit data to investigate hundreds of SharePoint and OneDrive file downloads occurring within eleven minutes.
Measure Microsoft 365 download velocity with KQL
Learn how to calculate downloads per minute, compare unique files and operations, inspect source and client context, establish a short-window behavioural baseline and distinguish unusual collection from legitimate synchronisation.
