A non-transitory computer-readable storage medium storing computer-readable instructions, which when executed, cause a first computing device to: store, in memory, a device state of the first computing device, the device state to vary between states comprising trusted, untrusted, and unknown; store data for a plurality of applications, the data comprising a respective application state and a respective source identifier for each of the applications; determine, by at least one processor of the first computing device, whether a first source identifier of a first application matches a first list of source identifiers; in response to determining that the first source identifier does not match the first list: set a first application state for the first application to unknown, change the device state from trusted to unknown, and send, by the at least one processor, over a network to a second computing device, at least one message comprising the first source identifier and a first application identifier for the first application; receive, over the network, a first message from the second computing device, the first message comprising a value of a first state designation for the first application, wherein the first state designation can be set to values including trusted and untrusted, and the second computing device is configured to set the value for the first state designation; and in response to receiving the first message, change the first application state from unknown to the value of the first state designation received in the first message, and change, in the memory, the device state from unknown to the value of the first state designation received in the first message. store, in memory, a device state of the first computing device, the device state to vary between states comprising trusted, untrusted, and unknown; store data for a plurality of applications, the data comprising a respective application state and a respective source identifier for each of the applications; determine, by at least one processor of the first computing device, whether a first source identifier of a first application matches a first list of source identifiers; in response to determining that the first source identifier does not match the first list: set a first application state for the first application to unknown, change the device state from trusted to unknown, and send, by the at least one processor, over a network to a second computing device, at least one message comprising the first source identifier and a first application identifier for the first application; receive, over the network, a first message from the second computing device, the first message comprising a value of a first state designation for the first application, wherein the first state designation can be set to values including trusted and untrusted, and the second computing device is configured to set the value for the first state designation; and in response to receiving the first message, change the first application state from unknown to the value of the first state designation received in the first message, and change, in the memory, the device state from unknown to the value of the first state designation received in the first message.