onefuzz

Telemetry

OneFuzz reports two types of telemetry, both via AppInsights.

  1. OneFuzz records fully featured attributable data is to a user-owned AppInsights instance. This goal of this information is to enable users to perform detailed analysis of their fuzzing tasks.
  2. OneFuzz reports non-attributable minimal set of runtime statistics to Microsoft via a Microsoft managed AppInsights instance. The goal is to provide insight to the efficacy of OneFuzz and fuzzing engines used in OneFuzz. Information regarding the the users of a OneFuzz instance, any applications under test, or any bug details found via fuzzing is not intended to be recorded in in this telemetry.

Who owns OneFuzz Resources

For the purposes of this document, a “OneFuzz instance” is a user-deployed install of OneFuzz in that user’s Azure Subscription.

The user owns and manages all resources used for OneFuzz, including the fuzzing nodes. OneFuzz supports both “managed” nodes, where OneFuzz orchestrates the lifecycle of the fuzzing nodes via Azure VM Scale Sets, and “unmanaged” nodes, where users provide compute however they wish (be that on-premise hardware, third-party clouds, etc).

How telemetry is collected

All telemetry is gathered from two places, the agents that run within fuzzing nodes and the service API running in the Azure Functions instance.

  1. The rust library onefuzz::telemetry provides a detailed set of telemetry types, as well as the function can_share_with_microsoft, which gates if a given telemetry field should be sent to the Microsoft central telemetry instance.
  2. The Python library onefuzzlib.telemetry provides a filtering mechanism to identify a per-object set of filtering records. Each ORM backed table provides a mechanism to identify the field should be sent to the Microsoft central telemetry instance. Example: The onefuzzlib.jobs.Job.telemetry_include implementation describes the set of fields that are to be recorded.

These mechanisms ensure that any only fields intended to be recorded are sent to the central telemetry service.

How to disable sending telemetry to Microsoft

Remove ONEFUZZ_TELEMETRY in the Application settings of the Azure Functions instance in the OneFuzz instance created during deployment.

Users are reminded of how to disable the telemetry during each OneFuzz deployment to Azure.

Data sent to Microsoft

The following describes the information sent to Microsoft if telemetry is enabled.

Definitions of common data types

The following are common data types used in multiple locations:

Data recorded by Agents

The following are AFL specific:

Data recorded by the Service

Each time the state of a job changes, the following information is recorded:

Each time the state of a task changes, the following information is recorded at the service level:

Each time the state of a scaleset changes, the following information is recorded:

Each time the state of a pool changes, the following information is recorded:

Each time the state of a fuzzing node changes, the following information is recorded:

Each time the state of a task on a node changes, the following information is recorded: