Systems and methods for locating application-specific data on a remote endpoint computer

According to one aspect, a system for locating application-specific data that includes a server, a broker, and an agent. An operator may define a command using the server, and this command may be sent to the broker. The broker may then send the command to the agent operating on an end-point system. The agent may then conduct an application-specific data search on the end-point system in respect of the user command. Search results may then be sent to the broker. The broker may then sent the search results to the server.

TECHNICAL FIELD

The embodiments disclosed herein relate to systems, methods, and computer-readable media for locating application-specific data, and in particular, to systems, methods, and computer-readable media for issuing search commands from a server and executing the search commands on an end-point system.

INTRODUCTION

With the advent of computer technology and the Internet, many people spend large amounts of time using computers for many different reasons. For example, users may use computers in the course of employment, to access social networks, communicate with other people using email or chat applications, conduct online shopping, process digital photography, research information, and so on.

Generally, applications on a computer will create application-specific user data associated with one or more users interacting with the application. For example, if a user is using an online chat program, there may be a chat history indicating contents of one or more chats between the user and various other communication partners. Similarly, an online shopping experience may leave electronic records of shopping or browsing history, for example as information stored in cookies associated with various shopping web sites.

For various reasons, a user may attempt to hide, delete, or obfuscate some of this information so that it will not be readily accessible to someone else. In particular, this obfuscation may occur where a user has undertaken some illicit or otherwise improper activity (for example using a work computer to access improper materials) and does not want to be caught.

In some cases, it may be desirable for another party to know how a particular computer has been used by a given individual (or in some cases a group of individuals). For example, law enforcement authorities may be interested to learn about the activities undertaken by a suspect on one or more computing devices, such as a laptop or smartphone. Similarly, employers may be interested to learn how their computer resources are being used by their employees.

In some cases, the computing device of interest may or may not be physically inaccessible to the party that wants to know how that computing device has been used.

SUMMARY

According to some embodiments, there is a system, method, and computer-readable medium for locating application-specific data.

The system may include a server on which an operator can define a command. The command may define the parameters for a particular application-specific data search on an end-point system.

The system may further include an agent operating on an end-point system. The agent may be used to conduct the application-specific data search on the end-point system, as specified by the command generated by the operator.

The system may further include a broker. The broker may be used to receive the command from the server, and relay this command to the agent.

For example, the agent may produce real-time search results from the search, and the search results may be sent substantially in real-time to the broker. However, this is possible only when a viable communications channel exists between the agent and the broker.

When a communications channel between the agent and broker is not currently viable, then the agent may store the search results in a data store of the data storage device of the end-point system. In some examples, the data store may be an encrypted data store.

The server may send a command using an output port on the server for which any associated inbound port may be inactive, disabled, or inaccessible.

According to some other embodiments, there is a system, method, and computer-readable medium for locating application-specific data on an end-point system using a server.

For example, an agent operating on an end-point system may receive a command from a broker or server. Based on this command, the agent may conduct an application-specific user data search on the end-point system on which the agent is operating. The particular attributes for the application-specific user data search may be specified in the command.

The agent may conduct the search, and then process the search results on the end-point system. Once search results are available, the agent may verify that a communications connection with the broker is currently available. If the communications connection is available, then the agent may send the search results from the end-point system to the broker. If the communications connection is not currently available, then the agent may store the search results on a data storage device located on the end-point system. In some examples, the search results may be stored in an encrypted data store on the computer-readable medium of the end-point system.

When the agent stores search results on the computer-readable medium of the end-point system, the application-specific data search may be suspended when the data store reaches a pre-determined size limit.

If the search results have been stored on the computer-readable medium of the end-point system, in part or in whole, then, the stored search results may be removed from the computer-readable medium of the end-point system after the stored search results have been sent from the agent to the broker.

Once stored search results have been removed from the end-point system, and the data store size has decreased below a pre-determined size limit, then the application-specific data search may be resumed. This second pre-determined size limit may be the same as, or may be different from the first pre-determined size limit (i.e. the size limit that determines when the search should be suspended).

According to some embodiments, there is a system, method, and computer-readable medium for dispatching a message from a broker to locate application-specific data on an end-point system.

The broker may receive a message from a server. The message may be addressed using a unique name for an agent or end-point system, such that the meaning of the unique name cannot be easily determined by a third party.

The broker may store the message in a buffer that corresponds to the unique name, so that the message can be retrieved by the intended recipient agent. When the broker receives a request from the appropriate agent, the broker may send the message to the agent. In some examples, the buffer may be a queue.

The broker may receive a request from the agent to send messages addressed to the unique name of the particular agent, and my subsequently send any or all corresponding messages in the buffer to the addressed agent.

The addressed name of the agent (or end-point system) may be a unique code name that has been derived from information pertaining to the end-point system (or agent).

The server may select a particular output communications port for communicating with the broker, such that any corresponding inbound port is inactive, disabled, or inaccessible.

The message may contain a command that defines a search for application-specific user data to be performed by the agent on the end-point system.

DETAILED DESCRIPTION

For simplicity and clarity of illustration, elements shown in the drawings have not necessarily been drawn to scale. The dimensions of some of the elements may be exaggerated relative to other elements for clarity. It will be appreciated that for simplicity and clarity of illustration, where considered appropriate, reference numerals may be repeated among the drawings to indicate corresponding or analogous elements or steps. In addition, numerous specific details are set forth in order to provide a thorough understanding of the exemplary embodiments described herein. However, it will be understood by those of ordinary skill in the art that the embodiments described herein may be practiced without these specific details. In other instances, well-known methods, procedures and components have not been described in detail so as not to obscure the embodiments generally described herein. Furthermore, this description is not to be considered as limiting the scope of the embodiments described herein in any way, but rather as merely describing the implementation of various embodiments as described.

The embodiments of the systems and methods described herein may be implemented in hardware or software, or a combination of both. In some cases, embodiments may be implemented in one or more computer programs executing on one or more programmable computing devices comprising at least one processor, a data storage component (including volatile memory or non-volatile memory or other data storage elements or a combination thereof) and at least one communication interface.

For example and without limitation, the programmable computers (referred to below as computing devices) may be a server, network appliance, embedded device, computer expansion module, a personal computer, laptop, personal data assistant, cellular telephone, smart-phone device, tablet computer, a wireless device or any other computing device capable of being configured to carry out the methods described herein.

In some embodiments, the communication interface may be a network communication interface. In embodiments in which elements are combined, the communication interface may be a software communication interface, such as those for inter-process communication (IPC). In still other embodiments, there may be a combination of communication interfaces implemented as hardware, software, and combination thereof.

In some embodiments, each program may be implemented in a high level procedural or object-oriented programming and/or scripting language to communicate with a computer system. However, the programs can be implemented in assembly or machine language, if desired. In any case, the language may be a compiled or interpreted language.

Program code may be applied to input data to perform the functions described herein and to generate output information. The output information is applied to one or more output devices, in known fashion.

Each program may be implemented in a high level procedural or object oriented programming and/or scripting language, or both, to communicate with a computer system. However, the programs may be implemented in assembly or machine language, if desired. In any case, the language may be a compiled or interpreted language. Each such computer program may be stored on a storage media or a device (e.g. ROM, magnetic disk, optical disc) readable by a general or special purpose programmable computer, for configuring and operating the computer when the storage media or device is read by the computer to perform the procedures described herein.

In some embodiments, the systems and methods as described herein may also be implemented as a non-transitory computer-readable storage medium configured with a computer program, wherein the storage medium so configured causes a computer to operate in a specific and predefined manner to perform at least some of the functions as described herein.

Furthermore, the systems, processes and methods of the described embodiments are capable of being distributed in a computer program product comprising a computer readable medium that bears computer usable instructions for one or more processors. The medium may be provided in various forms, including one or more diskettes, compact disks, tapes, chips, wireline transmissions, satellite transmissions, internet transmission or downloadings, magnetic and electronic storage media, digital and analog signals, and the like. The computer useable instructions may also be in various forms, including compiled and non-compiled code.

Various apparatuses or processes will be described below to provide an example of one or more embodiments. No embodiment described below limits any specific claimed embodiment and any claimed embodiment may cover processes or systems that differ from those described below. The claimed embodiments are not limited to systems or processes having all of the features of any one system or process described below or to features common to multiple or all of the systems described below. It is possible that a system or process described below is not an embodiment of any claimed embodiment. Any embodiment disclosed below that is not claimed in this document may be the subject matter of another protective instrument, for example, a continuing patent application or divisional application, and the applicants, inventors or owners do not intend to abandon, disclaim or dedicate to the public any such claimed embodiment by its disclosure in this document.

Referring now toFIG. 1, illustrated therein is an example of a simplified network100comprising a server110, a broker120, and multiple end-point systems130,132, and134. The network may also include other known networking equipment, as necessary, such as wireless transmitter122. Generally speaking, network100may be implemented over the Internet, an intranet, LAN, WAN, etc.

According to some embodiments, the server110may direct communications to an end-point system, such as end-point systems130,132, and134via the broker system120. Generally, the broker may be seen as a go-between or communications dispatch buffer, the purpose of which will be explained in further detail below.

For the purposes of this document, the term “operator” will generally be used to refer to the user of the server110. For example, an operator may be a computer system administrator, network system administrator, investigator, or law enforcement officer, as well as others.

Various embodiments of end-point systems are contemplated. For example, end-point system130is a mobile device, such as a cellular phone, tablet, or other mobile communications device. End-point system132is a laptop computer or personal computer. End-point system134is a desktop computer, such as may be connected to a corporate or public network.

The term “end-point system user” will generally be used to refer to the a person who uses an end-point system, such as by accessing communications applications on the end-point system. The end-point system user may be an individual that the operator identifies as the subject of a search for application-specific user data. For example, an end-point system user may be an employee, a person using a public or corporate computer network, or any other individual. The end-point system user may own and operate the end-point system, or the end-point system user may be a periodic or one-time user of an end-point system that is owned and by someone else.

There may be a system administrator for the end-point system. In some cases, such as when the end-point system user owns or is responsible for the end-point system, the end-point system user may also serve the role of system administrator. In other cases, such as on a corporate or public network, a system administrator may be a distinct individual from the end-point system user.

The communications from the server110to an end-point system may involve the remote installation of an agent on the end-point system. Subsequent to an agent being installed on an end-point system, the communications from the server110may include commands issued to the agent for locating application-specific user data on the end-point system.

For cases in which the system administrator is not the same person as the end-point system user, the operator may collaborate with the system administrator in order to deploy the agent over the network100. In other cases, the operator may collaborate with the system administrator in order to install the agent directly on an end-point system. The operator may also be the same person as the system administrator, in some situations.

Once the agent is installed on the end-point system, the operator is able to send commands from the server to the agent, in order to perform specific application-specific user data location operations on the end-point system. The issuance of commands by the operator from the server to the agent will be described in further detail below. The commands may be delivered to the agent via the broker120.

According to some embodiments, the broker120may receive communications from the server110. These communications are generally intended to be delivered to the end-point system, and may include the installation of an agent on the end-point system, or commands to be received by an agent that is running on the end-point system, or other communications messages.

In one aspect, the broker120allows the server110to send communications using an outbound port only. These communications are received by the broker120, and held for delivery to the appropriate end-point system. In this case, the use of the broker120means that there is no requirement for two-way communications directly between the server110and an end-point system. The broker120may store a message from the server, so that the message can be retrieved by the appropriate end-point system.

Once a message from the server110has been stored on the broker120, the message may be retrieved by the intended end-point system for further processing. For example, the message may contain a command for the agent running on the end-point system. In this case, the agent would subsequently conduct the application-specific user data search as specified in the command.

After an agent conducts an application-specific user data search on an end-point system, search results will be collected by the agent. These search results may be stored by the agent on the end-point system; or these search results may be sent from the end-point system to the broker120. The broker120, upon receiving search results from an agent on an end-point system, may proceed to relay the search results to the server. In this way, the use of the broker120means that there is no requirement for two-way communications directly between the server110and an end-point system.

According to other embodiments, it may be possible to implement a network that does not include a broker120. For example, the server110may communicate directly with any or all of the endpoints130,132, and134. In this case, certain functionality that would otherwise be provided by the broker120may not be available.

An example of some command parameters200is provided inFIG. 2. The command parameters may be selected by the operator, for example, on a server. The command parameters may define a command that can be sent to an agent. Once a command is received by an agent, the agent may process the command in order to conduct an application-specific user data location operation on an end-point system, as specified by the operator.

For example, an operator may select one of a variety of search types210. Search types may include a quick search, a full search, an unallocated cluster search, a full sector-level search. Other search types are also possible. An operator may also choose to select a particular file/folder to search212.

According to some embodiments, the operator may select to search data pertaining to all or some of various applications types214. For example, application types might include email, chat, online, peer-to-peer, or other application types. For each application type214, there may be one or more instances on a particular end-point system. For example, an operator may select to search data pertaining to one or more particular chat programs.

Additionally, the operator may choose to direct the search towards data pertaining to a particular end-point system user or users216. In some cases, for example, for an end-point system that is part of a public or corporate network, multiple users may use one end-point system, and the operator may only be interested in the user data pertaining to one particular user. In other cases, a particular user identifier of interest may not be known at the time of the operator defines the command parameters.

According to some embodiments, the operator may be able to specify a particular date range218for which the agent should conduct a search on the end-point system. In some cases, the operator may also be able to set a strictness level220for the search. The date range218and strictness level220are further described below.

Other parameters that define a command may be set by the operator. These include the location for search results222(both on the server and on the end-point system, as necessary), parameters224related to a search-results database on the end-point system, and agent communications parameters226that define, for example, how and when the agent may communicate with the broker (or server, as the case may be).

Referring toFIG. 3A, illustrated therein is an example of a server system300. According to some embodiments, the server system300may comprise a processor and system memory302, an outbound communications port304, an inbound communications port306, a user input device310, a display device312, and a data storage device314. The various components may be interconnected using a system bus308.

The user input device310and display device312enable the operator to interact with the server system300. For example, the operator may use the input device310to specify the attributes of a command that the operator intends to send to an agent. The operator may also use the display device312to review the results of particular search that have been sent to the server from an agent, as a result of a command.

The server system300may comprise an outbound communications port304and an inbound communications port306. The instructions executed by the processor302may specify that the outbound communications port304or inbound communications port306be open or closed (accessible or inaccessible) at certain times. For example, the inbound communications port306used by the server system300for receiving communications from an agent or a broker may be closed (inaccessible) during specific times. For example, blocking the inbound communications port306during specific times may reduce the risk that a third party will identify that a server is operating covertly to perform application-specific user data location operations on a remote end-point system, and may also improve security of the server in some situations.

An example server module350is shown inFIG. 3B. The server module350may operate with the server system300. The server module is composed of sub-systems, sub-modules, or components, including a remote install module352, a communications module354, a search results module356, and a command generation module358.

In some situations, an operator work flow may begin with the remote installation of an agent on a remote end-point system. In such a case, the remote install module352may be used to perform a remote installation of an agent. This remote installation may be accomplished by transmitting messages to an end-point system via a broker. In other some cases, the remote installation may be accomplished by transmitting messages directly to an end-point system from the server. The messages may include instructions that comprise the installation and operation of an agent.

Once an agent has been installed on an end-point system, commands can be sent to the agent in order to specify an application-specific user data search on the end-point system. An operator may use the command generation module358, along with the processor and system memory302, user input device310, and display device312, to generate a command.

For example, using the command generation module, an operator may select particular attributes such as any or all of a search type210, file/folder search212, applications214, user identifier216, date range218, strictness setting220, locations for search results222, search results database settings224, and agent communications options226.

The selected command attributes may be used by the command generation module358in order to generate a command to be sent to an agent. The agent may subsequently conduct a search on the end-point system, as specified by the command, resulting in search results. The agent may then transmit the search results.

Search results may be sent from a broker or agent, received by the communications module354, and subsequently processed by the search results module356. The search results module may process the search results, so that the search results can be provided to the operator in a meaningful form. For example, the search results may be processed by the processor302and displayed on the display device312.

The search results may also store the search results in a search results location. For example, a search results location on the data storage device314may be specified, which may be referred to as “The Case Folder”. The results located by the search could then be flagged by the agent with this location identifier, so that the search results could later be saved in the case folder on the server. Generally, the case folder should be a location on the server that has sufficient free space (e.g. a few gigabytes, or terabytes, or more, as the case may be).

An example of a broker system400is shown inFIG. 4A. In practice, the broker system400may comprise any of a variety of computer systems. In the example ofFIG. 4A, the broker system400comprises at least a processor and system memory412, a communications port414, and a data storage device416, which are all interconnected using a system bus418.

Referring now toFIG. 4B, illustrated therein is a broker module450, which may operate with the broker system400. The broker module450is composed of sub-systems, sub-modules, or components, including a name resolution module452, a communications module454, an agent message queue456, and a server message queue458.

The name resolution module452may allow the broker module450to resolve inbound messages with a particular server or agent that is the intended recipient for the message, based on a unique name for the recipient. In some cases, in order to maintain covert operations, or to conceal the identity or location of a particular server or agent (or end-point system that is running the agent), messages may not be addressed using an address that could be easily resolved by a third party.

For example, it may be possible to identify a particular server or end-point system by resolving a unique network address or device address using known standards. Each server system and end-point system may have a unique IP address, or MAC address, etc.

The name resolution module452may uniquely and/or privately correlate a known or public address, such as an IP address or MAC address with a new name. For example, a server with an IP address of 255.255.100.100 may be given the name “Server X”. Similarly, an end-point system (or agent running on the end-point system) may be given the name “Agent Y”. In this case, messages sent to and from the broker could be addressed to “Server X” or “Agent Y”, as the case may be, without the need to include an IP address. In such a case, if a message to or from the broker was intercepted by a third party, the name “Server X” or “Agent Y” would be meaningless to the third party.

In the above example, the name resolution module452would allow the broker to resolve the name “Server X” with the IP address 255.255.100.100 (or other network or device address, as the case may be) so that the broker could properly relay messages from an agent to the server associated with the name “Server X”.

The communications module454may be implemented in association with the communications port414. The communications module454may be operable to send and receive messages to and from the broker. In some cases, communications module may be operable to use a resolved address from the name resolution module452in order to address outbound communications.

According to some embodiments, broker module450may receive instructions from a server or agent in order to define the timing of communications sent by communications module454, or other attributes of the communications sent by communications module454.

The agent messaging queue456, which may be implemented with the data storage device416and operable with the processor and system memory412, can server as a message storage and retrieval module, or mailbox. For example, the broker module450may create a unique instance of an agent message queue456for each agent with which the broker module450communicates.

In some embodiments, when a message is received by the broker module450from a server, and the message is intended for a particular agent or end-point system, the broker module450will place the message in the appropriate agent message queue456.

Subsequently, a particular agent may send an enquiry to the broker module450, which may be received by communications module454, and which might enquire as to whether there are any pending messages for the agent. In this case, the broker module450may deliver the message from the agent message queue456to the enquiring agent, using the communications module454.

Similarly, the broker module450may create a unique instance of a server messaging queue458for each agent with which the broker module450communicates. Messages intended for a particular server may be placed in the appropriate server message queue458for future retrieval.

Other embodiments of the agent message queue456and server message queue458do not necessarily require that messages be arranged in a queue. Other embodiments for a message storage and retrieval, or mailbox structure may be used as well.

Referring now toFIG. 5A, illustrated therein is an end-point system500on which application-specific data may be located, according to some embodiments. The end-point system500includes a processor and system memory510, a first data storage device512, an outbound communications port514, and inbound communications port516, and a second data storage device518. In this embodiment, the various components510,512,514,516of the system500are operatively coupled using a system bus520.

The end-point system500may be various electronic devices such as personal computers, networked computers, portable computers, portable electronic devices, personal digital assistants, laptops, desktops, mobile phones, smart phones, tablets, digital televisions, digital video recorders, onboard vehicle computer or communications systems, etc.

In some examples, the first data storage device512may be a hard disk drive, a solid-state drive or any other form of suitable data storage device and/or memory that may be used in various electronic devices. The data storage device512may have various application-specific user data associated with various applications stored thereon. The application-specific data may be generated when the user is interacting with one or more applications.

The applications that may have application-specific data associated therewith, for example, may include various instant chat messaging applications provided by various online social networks, email clients which may be located locally or accessed using an online interface, peer-to-peer file sharing applications, various web based applications such as social networks, websites, etc.

In many cases, some of the data associated with these applications may be deleted automatically. In some cases the data may be deleted upon command from the user using the application. For example, many Internet browser applications may delete browsing history automatically after a certain period of time (e.g. 1 hr, 24 hr, 1 week, 1 month). Similarly, in some cases cached data may be deleted for various websites automatically. The browser applications may also provide the user with an option to delete cache data or browsing history. However, when such data are deleted, the deleted data may not in fact be physically deleted from the data storage device14as explained below.

In particular, many operating systems and/or device driver software may not physically delete the data from the data storage device512immediately when a command to delete such data is received. Instead, the addresses on the data storage device512that stores such data may simply be marked as “unallocated” or “available”. Such indications inform the operating system or other applications that these addresses are now available to store other data. The old data may subsequently be overwritten and thereby deleted when there are new data stored in such addresses.

Accordingly, it is possible that the data flagged to be deleted may remain physically undeleted from the data storage device512for an extended period of time even though a request had been made to delete these data by the application or the user (or both).

It may be desirable to locate application-specific user data in the data storage device512even after such data have been “deleted” (but not physically deleted from the data storage device512).

In the embodiment as shown, another data storage device is provided, in addition to the first data storage device512, namely the second data storage device518. The first data storage device512and the second data storage device518may be physically-separate data storage device, or may be different parts of the same physically data storage device. The distinction between first data storage device512and second data storage device518is made, in part, to assist in the description of the end-point system500.

The second data storage device518may be used to store computer-executable instructions that can be executed by the processor510to configure the processor510to locate application-specific user data in the data storage device512. The computer-executable instructions may be derived from the commands sent to the agent.

Additionally, the second data storage device518may be used to store the application-specific user data that has been located on the first storage device512. For example, once application-specific user data have been located on the first data storage device512by the processor510, the processor510may compile the located application-specific user data into a database on the second data storage device518. A database on the second data storage device518may be encrypted, for example, so that if a user of the end-point system identifies that the database has been stored on the second data storage device518, the second user will not be able to compromise the integrity of the located application-specific user data.

It should be noted that it is not necessary to provide a second data storage device, and in other embodiments, the instructions may be stored in the first data storage device512or any other data storage device. However, it may be desirable for the instructions to be stored in a data storage device other than the data storage device512such that any “deleted” data stored thereon will not be unintentionally overwritten by the computer-executable instructions to configure the processor512. Since the operator may not be able to determine the structure of the end-point system, a second data storage device might not be available.

The end-point system500may comprise an outbound communications port514and an inbound communications port516. In some embodiments, the instructions executed by the processor510may specify that the outbound communications port514or inbound communications port516be open or closed (accessible or inaccessible) at certain times. For example, the outbound communications port514used by the end-point system500for transmitting located application-specific user data may be closed (inaccessible) during specific times. For example, blocking the outbound communications port514during specific times may reduce the risk that a user of the end-point system514will identify that a covert application-specific user data location operation has occurred.

Referring toFIG. 5B, illustrated therein is an example embodiment of an agent550that may be operable, for example, on end-point system500. In some cases the “agent” may be embodied by a set of computer-executable instructions, such as may be stored on a non-transitory computer-readable medium. The agent550may also be embodied in other forms, and may be a component of, subsystem of, or run on the end-point system500.

The agent may include an install module560. Prior to operation of the agent550, the agent550should be installed on an end-point system. The installation may occur in various ways. For example, the agent550may be installed by a local end-point system administrator, or the agent may be installed by an operator, using a remotely-located computer system, such as a server510or a broker system520acting between a server and an end-point system.

For example, a local installation may be conducted by a system administrator in a corporate or public network environment, so that the operator is able to operate the agent550with respect to application-specific user data pertaining to employees, public, or anonymous users.

In cases when the agent550has been installed with the knowledge of the end-point system administrator, the operation of the agent550on the end-point system may nonetheless be concealed from users of the end-point system, and the agent550may operate in a covert manner.

In some situations, a local installation of the agent550may be preferred due to the nature of the end-point system, even though the searching of the end-point system for application-specific user data without the agent550would not be precluded due to remote location or the need for covert operation. For example, certain hardware devices may be constructed in such a way as to make their hard drives or other data storage devices difficult to physically access, even when the device itself, is in the physical possession of an operator. In such a case, the installation of the agent550may preclude the need to physically access the hard drive of the device.

The agent550may also be installed using a remotely-located server. For example, it may be desirable to install an agent550on an end-point system that is locally inaccessible (e.g. due to geographical remoteness). It may also be desirable to install an agent550on an end-point system that is not in the possession of the operator who desire to install the agent. In some cases, the covert installation of the agent550, achieved through an installation that is transparent to the end-point system user, may be necessary in order to maintain the integrity of the application-specific user data that are to be located. If end-point system users know or are suspicious that their application-specific user data are going to be search, the users may take further measures to destroy the data before they can be searched.

According to some embodiments, the agent550may be installed on an end-point system from a remote server. According to other embodiments, the agent550may be installed using a broker system between a server and the end-point system.

Once the agent550has been installed on the end-point system, then the agent550is able to receive commands in order to conduct specific operations related to the location of application-specific user data.

The communications module562may operate to enquire whether any new commands have been issued for the agent550. The communications module562may make periodic, scheduled or random enquiries to a server or broker system.

For example, the communications module562may be configured to enquire on a daily, hourly, weekly, or other periodic basis to determine if commands have been issued for a new search. According to some embodiments, it is possible for the communications module562to determine when the end-point system has been idle (e.g. free from other user activity) for a certain period of time, and to enquire for new commands only during such idle periods. It may also be possible to configure the communications module562to be operable only during certain hours of the day, week, or month.

The communications module562may be configured so that communications between the agent550and server, or agent550and broker, as the case may be, are conducted in a way that is not readily apparent to a user of the end-point system. The prudent timing of communications may assist in making the communications less apparent to a user.

The communications module562may also be operable to independently control inbound communications ports and outbound communications ports. For example, the communications module562may receive communications from a server or broker on an inbound communications port during a specific time interval, but may prevent communications from the agent to the server or broker during the same specific time interval, and vice-versa.

The communications received by the communications module562may include commands that specify an operation of locating application-specific user data on the end-point system. Commands may specify the parameters for the agent550to conduct a search on the end-point system, such as parameters relating to timing of the search, type of search, applications to search, users to search, the size of the stored search results database, etc.

Various types of searches that can be specified in the command, and performed by the agent may include a quick search. The quick search is generally configured so that it can be executed quickly but not all relevant data stored in the first data storage device512may be located by the search. The quick search, in some examples, will perform the search for application-specific data at common folder and/or file locations on the end-point system, the pagefile.sys file, a filesystem file called $Logfile, and files that are stored in the Master File Table (MFT). This allows the quick search to focus on locations where relevant data may be usually found. However, any application-specific data stored in other locations on the end-point system that are not searched will not be located by the quick search.

In other cases, a full search may be performed. The full search may be more comprehensive than the quick search and, for example, may search all areas of a hard drive on the end-point system that may contain application-specific user data. The full search, in some examples, searches all the areas the quick search searches, and in addition searches Volume Shadow Copy files, the hiberfil.sys file, unallocated/free space, and/or file “slack” space.

In some cases, another type of search limited to unallocated clusters may be performed. This search may only search those locations in the data storage device512that are identified as unallocated or free. This may recover data that had been marked as “deleted” but has not yet been physically deleted from the data storage device512. This search also searches file “slack” space, which essentially is unused, unallocated space at the end of a file.

In some other cases, a full sector-level search at the sector level may be specified in the command sent to the command module562. When conducting the full sector-level search, the processor510may be configured to conduct a search at the sector level without any reference to the file system. In some cases, the data storage device512stores data in blocks of predetermined size called “sectors”. The full sector-level search searches the data stored in the data storage device on a sector-by-sector basis without regards to how the data may be logically connected at higher levels. For example, the search may read the raw data from every sector on the device, starting at the first sector, and ending at the last sector. The entire storage device is read by reading the raw data at the sector level, instead of reading individual files.

In some cases, a file/folder search that is limited to specified locations may be performed. In such cases, only the files and/or folders specified by the operator will be searched on the end-point system.

In some embodiments, the operator may specify one of the search options in the command, in order to proceed with a particular search on the end-point system. In other embodiments, more than one of the options or other search options may be specified, such as to perform multiple searches on the end-point system.

For example, after specifying the desired search option in the command, the operator may be presented with specific applications (e.g. email, chat, online, peer-to-peer, etc.) for which the operator wishes to search for associated application-specific data on the end-point system.

The operator may be presented with options to select various functions and options pertaining to the search to be performed on the end-point system. For example, the operator may be allowed to select specific applications to search for application user data. In some cases, the operator may select one or more of chat applications, one or more of email applications, one or more of web-related applications and/or one or more of peer-to-peer file sharing applications.

In some embodiments, a user identifier associated with a particular application on the end-point system may be specified in the command, in order to search for application-specific data.

A user identifier pertaining to a user of the end-point system may be specified in the command sent to the command module564. The user identifier may be used to decrypt data logs associated with one or more applications. In some embodiments, the processor510may automatically generate one or more user identifiers without a user identifier being included in the command sent to the command module564. For example, the processor may look for and use one or more user identifiers associated with one or more applications that are stored in the data storage device512, such as user identifiers for the operating system, other chat applications, and so on.

The operator is also able to select a date range within the command that is sent to the command module564. The date range allows the operator to modify the search on the end-point system so as to focus the search to a desired range. Specifying a date range may reduce false positives results located by the search. For example, if the computer was first used by the user on Jan. 1, 2011, any results that seem to have a date before Jan. 1, 2011 may be disregarded as being false positives. The command sent to the command module564may also be configured to provide a default date, for example, the date that the associated application was first used.

The command sent to the command module564may also include a “strictness” setting that may help reduce false positives. The possible settings may include, for example, “Least Strict”, “Medium Strictness”, and “Most Strict”. Generally the higher the strictness setting, the more aggressive the agent's search results module566will be in filtering out hits that do not appear to be valid. This could be done, for example, by taking the size of the recovered message text and comparing the percentage of that text that is null characters (e.g. hex 0x00)

In some cases, the strictness setting may determine the percentage of null characters of a result that should be accepted as valid.

Generally, the strictness setting allows the operator to indicate how much error he or she is willing to tolerate. For example, a high strictness setting may reduce the number of false-positive results (i.e. the results located by the search module566that do not contain application-specific data), but it also increases the chance of erroneously discarding actual application-specific data. In contrast, a low strictness setting will generally provide more results and reduce the chance of erroneously discarding valid results; though there may be a chance that more of the results are false-positive results.

According to some embodiments, the operator may also be able to select a location on the end-point system where the search is to be conducted, by specifying this location in the command to be sent to the command module564. Various locations for the search may be available on the end-point system. An attached data storage device, for example, the data storage device512or518, or a virtual drive mounted from forensic image files on the end-point system may be available as search locations.

According to some embodiments, the operator may also be able to indicate search result output options for the results of the search, and specify these output options in the command to be sent to the command module564. These output options may affect how the search results module566returns search results, via the communications module562, to the server or broker system. The output options may also affect how the search results module566provides search results to the database module568.

A search results location on the end-point system may be specified, which may be referred to as “The Agent Folder”. In some cases, the operator may determine that the particular location of the agent folder, for example, on data storage device518of the end-point system, should be transparent to a user of the end-point system. For example, the operator may choose to specify a hidden folder as the agent folder so that the agent folder is not easily apparent to a user of the end-point system. Generally, the agent folder should be a location on the end-point system that has sufficient free space (e.g. a few gigabytes, or more) and is accessible while the search is being conducted.

According to some embodiments, the database module568may receive the search results from the search results module566prior to the search results being stored in the agent folder. For example, in certain situations, the search results module566may provide search results in real time, or periodically, or in increments, to the communications module562so that the search results can be delivered to the server or broker system in real time, or periodically, or in increments.

In other situations, such as when the communications module562determines that communications with the server or broker are unavailable, the search results module566may provide search results to the database module568.

Various search results database criteria may have been specified in the command sent from the server to the agent. For example, database encryption parameters, and maximum database size may be included in the command. In some cases, the operator may choose a maximum database size so that the database is not easily apparent to a user of the end-point system.

According to some embodiments, when the database module568determines that the database has reached the maximum size, such as may have been specified in the command, the database module568may report to the search module570that the search operation should be temporarily suspended. For example, the search module570may temporarily suspend the search operation until such time as the communications module562has established communications with the server or broker system, and some of the search results stored in the database have been sent to the server or broker system. Once search results have been sent to the server or broker system via the communications module562, and more space has therefore been made available to store the database, the database module568may report to the search module570that the temporarily-suspended search operation should resume.

Referring toFIG. 6, there is provided an example of a method for sending a message from a server to broker, relaying the message from the broker to an agent, executing an application-specific user data search on the agent, and returning the search results from the agent to the broker.

In this particular example, it is assumed that an operator has generated a command that specifies an application-specific user data search that the operator intends to conduct with an agent on an end-point system.

At step610, the operator sends a message from the server to a broker. For example, the message may contain the command as well as the name of the agent for which the command is intended. Other information may be present in the message as well.

At step612, the broker receives the message from the server, and stores the message in an agent message queue, or other message buffer. In some cases, the agent message queue may be unique to the particular agent for which the command is intended. In other cases, there may be one message buffer shared by multiple agents.

If the message includes the name of an agent, then the broker may allocate the message to a message queue assigned to the named agent.

At step614, an agent may enquire with the broker, to determine if there are any new messages for the agent. For example, the broker may resolve the name of the enquiring agent, and may check the agent messaging queue corresponding to the agent's name for any new messages.

In this example, it is assumed that there is at least one new message on the broker for the enquiring agent. As a result, the broker may send the new message(s) to the agent.

At step614, the agent receives the message from the broker, and deciphers the message for a command that is included in the message.

At step618, the agent begins executing a search for application-specific user data on the end-point system, pursuant to the command. According to some embodiments, the agent may produce real-time search results while the search is being conducted. In other embodiments, the search results may become available periodically, in increments, or once the search is completed.

At step620, the agent processes the search results. This may include filtering, sorting, or otherwise organizing the search results.

At step622, the agent enquires as to whether it currently has an available communications link with the broker. For example, the agent may not be currently communicating with the broker because the end-point system is not connected to a communications network, or because operator has selected to limit communications from the agent to the broker, or for other reasons.

If, at step622, the agent determines that it is not currently communicating with the broker, then, at624, the agent stores the current search results a data storage device of the end-point system.

According to some embodiments, and/or according to the parameters of the command, the agent may create a database on the data storage device of the end-point system, in which to store the search results. The database may be defined according an encryption format, a maximum size, and other parameters. The agent may store the search results in a hidden or otherwise inaccessible portion of the data storage device.

If, at step622, the agent determines that it is currently communicating with the broker, then, at626, the agent sends the search results to the broker. In this case, search results may be send from the agent in real time (as soon as they become available, for example, after step620). Additionally, the search results send may be search results that were previously stored on the data storage device of the end-point system, such as when the agent determined that it was not communicating with the broker.

At step628, the agent enquires as to whether the search has been completed.

In some embodiments, if a maximum database size has been specified for use in step624, the agent may temporarily suspend the search operation when the database reaches the specified maximum size. In this case, the agent may continue to suspend the search operation until the agent is able to send the stored search results to broker, such as at step626.

Once the search has been completed, then the agent may report the completion to the broker at step630.