METHOD AND APPARATUS FOR SECURING MOBILE APPLICATIONS
A non-transitory processor-readable medium stores code that represents instructions to be executed by a processor. The code includes code to receive an object code of a first application. The first application is defined by an author different from an author of a second application. The code also includes code to dynamically load at least two intercept points into the object code of the first application, using the second application. The code further includes code to, responsive to a read request for data by the first application, intercept the read request by at least one of the two intercept points. The code further includes code to determine, in response to intercepting the read request, whether or not access to read the data is authenticated. The code further includes code to send a signal to provide the data to the first application, based on the determining.
This application claims priority to and the benefit of U.S. Provisional Patent Application No. 61/608,819, entitled “Method and Apparatus for Securing Mobile Applications”, filed on Mar. 9, 2012, which is incorporated herein by reference in its entirety.
BACKGROUNDSome embodiments described herein relate generally to providing security for applications and data on mobile, or edge, clients.
Organizations such as, for example, financial institutions have various data protection and security requirements. Some employees and customers of such organizations would like to be able to use their personal mobile devices (e.g., iOS and Android) for business purposes and for accessing services provided by the organizations. In order to provide such capabilities to the users, the organizations need solutions that provide for device, application, and data security and management.
Some currently known solutions for securing mobile devices, such as, for example, Smartphones and tablets, lack comprehensive capabilities for managing applications, services, policies, devices, and data. Some organizations rely on the basic security policies of their mobile operating system (OS) provider. These policies tend to be quite coarse, thus wipe or delete the phone's entire memory or use a certain length password, etc. Similarly, some third party solutions provide a separate walled garden that does not allow arbitrary applications to be run or support fine-grain customization based on corporate policies and user preferences.
For example, some mobile operating system (OS) providers tend to provide limited device security, for example, to password protect a device, encrypt a device, wipe (erase data and reset) a device remotely, etc. If, however, system users can access their emails through a built-in mail client, they may be able to download attachments and save the attachments to unsecured locations. Storage of data in unsecured locations can be particularly problematic for financial and medical information. Similarly, a malicious application installed on the user's personal device can be running on the mobile device and be watching the clipboard, or accessing another application's cached or persistently stored data.
Furthermore, there is a range of existing security solutions on traditional enterprise clients (e.g. desktops and laptops) including the use of a variety of software to verify the computer, virtualize a work environment, and the like. Such solutions are not well suited for mobile devices, which have specialized operating systems and less computing power. Such mobile devices have more recently been targeted as highly personal, as opposed to corporate, devices. For example, some solutions manage and house, bring-your-own-PC solutions that provide a centrally managed virtual computing environment to laptops and desktops. In addition, some companies have defined self-contained application suites to provide a secure environment. This approach, however, does not enable users to access the full range of native applications available for the mobile device in a secure fashion.
Therefore, a need exists for solutions that provide for enterprise type security protection on mobile devices that allow for the devices to remain highly usable as both enterprise and personal mobile devices. Enterprises need systems to provide secure application distribution (including lifecycle management), location and networking environment awareness (e.g., to provide different access permissions inside the corporate network vs. outside), isolation of applications (corporate vs. personal), data encryption and isolation (e.g., application A cannot access application B's data without permission), user profile isolation/personalization, offline application data access and synchronization in an edge operating system agnostic fashion, etc.
SUMMARYIn some embodiments, a non-transitory processor-readable medium stores code that represents instructions to be executed by a processor. The code includes code to cause the processor to receive an object code of a first application. The first application is defined by an author different from an author of a second application. The code also includes code to cause the processor to dynamically load at least two intercept points into the object code of the first application, using the second application. The code further includes code to cause the processor to, responsive to a read request for data by the first application, intercept the read request by at least one of the two intercept points. The code further includes code to cause the processor to determine, in response to intercepting the read request, whether or not access to read the data is authenticated. The code further includes code to cause the processor to send a signal to provide the data to the first application, based on the determining.
In some embodiments, a non-transitory processor-readable medium stores code that represents instructions to be executed by a processor. The code includes code to cause the processor to receive an object code of a first application. The first application is defined by an author different from an author of a second application. The code also includes code to cause the processor to dynamically load at least two intercept points into the object code of the first application, using the second application. The code further includes code to cause the processor to, responsive to a read request for data by the first application, intercept the read request by at least one of the two intercept points. The code further includes code to cause the processor to determine, in response to intercepting the read request, whether or not access to read the data is authenticated. The code further includes code to cause the processor to send a signal to provide the data to the first application, based on the determining.
In some embodiments, a non-transitory processor-readable medium stores code that represents instructions to be executed by a processor. The code includes code to cause the processor to receive an object code of a first application provided by a first party. The code also includes code to cause the processor to remove a digital signature from the object code of the first application. The code further includes code to cause the processor to install at least two intercept points into the object code of the first application. The code further includes code to cause the processor to sign the object code of the first application with a digital signature of a second party to produce a modified object code. The second party can be different from the first party. The code also includes code to cause the processor to execute the modified object code of the first application on a mobile device associated with the first application. The code also includes code to cause the processor to, responsive to a read request for data by the modified object code of the first application, intercept the read request by at least one of the two intercept points. The code also includes code to cause the processor to determine, in response to intercepting the read request, whether or not access to read the data is authenticated and to send a signal to provide the data to the first application, based on the determining.
In some embodiments, a method includes executing a first application from a set of applications on a mobile device. The method also includes receiving a request to share, with a second application from the set of applications on the mobile device, data associated with the first application. The method further includes sending a signal to provide the data to the second application, while executing the first application, and in response to the request to share data with the second application. The method further includes receiving a request to share, with a third application, the third application not from the set of applications on the mobile device, data associated with the first application. The method further includes sending a signal to prevent the data from being provided to the third application, while executing the first application, and in response to the request to share data with the third application.
In some embodiments, an apparatus includes a controller module implemented in at least one of a memory or processing device, configured to be communicatively coupled with a network interface and a storage device. The controller module is configured to receive an object code of a first application. The first application is defined by an author different from an author of a second application. The controller module is also configured to dynamically load at least two intercept points into the object code of the first application, using the second application. The controller module is also configured to, responsive to a read request for data by the first application, intercept the read request by at least one of the two intercept points. The controller module is also configured to determine, in response to intercepting the read request, whether or not access to read the data is authenticated. The controller module is also configured to send a signal to provide the data to the first application, based on the determining.
As used herein, a mobile device is a portable electronic device such as, for example, a mobile phone, Smartphone, tablet, managed laptop or the like. Mobile devices differ from general purpose computing devices in that the operating system (OS) provides a more secure initial environment, (e.g., digital signing of applications, an application store (and policies on what can be in the application store), restrictions on certain applications operating in the background, and restrictions on modifying the operating system). These restrictions generally impede the use of existing software and OS modification techniques used on general purpose computers to provide enterprise security. Current exemplary mobile devices include iOS devices such as, for example, the iPhone and iPad; Android devices such as, for example, the Nexus Smartphone and Samsung Galaxy tablet; Windows mobile devices; Chrome laptops; Android wrist watches; and some netbooks with mobile-style operating systems. Generally, embodiments are targeted at small, handheld devices that a user can easily transport. Additionally, the mobile device can have a display and user input capabilities. Mobile devices are sometimes also referred to as edge clients.
As used herein, a policy is a rule (or group of rules) together with associated actions that govern specific attributes, conditions and actions of end users, devices and/or applications. Depending on the context, policy can also refer to a collection of multiple individual policies or policy sets set by a customer (or predefined by a supplier for a customer). In some embodiments, policy sets group policies into a logical grouping for management and application. In some embodiment, a policy set has a defined policy for each policy supported by the system, see exemplary policy list infra Further, in some embodiments, each user group has at least two policy sets assigned, one for trusted locations/networks/timeout intervals and another for untrusted locations/networks/timeout intervals. In these embodiments, the simplest policy for the corporation could be placing users in a single group that is assigned two policy sets (one trusted and one untrusted).
As used herein, the singular forms “a,” “an” and “the” include plural referents unless the context clearly dictates otherwise. Thus, for example, the term “a “mobile device” is intended to mean a single mobile device or a combination of mobile devices (e.g., mobile devices with access to a certain network, etc.).
The system 100 of
In some embodiments, the security system 120, the administration clients 130, the edge application providers 140, the edge clients 150 and the customers 160 are coupled in communication (indicated by double-headed line with arrows at end). Although shown as communication with the security system 120, the communication path can be point-to-point over public and/or private networks. For example applications on mobile device 152 can be delivered directly from provider 142, or via a third party application store (not shown). Any of the communications can occur over a variety of networks, e.g. private networks, Virtual Private Network (VPN), Multiprotocol Label Switching (MPLS) circuit, or internet, and may use appropriate Application Programming Interface (API)s and data interchange formats, (e.g., Representational State Transfer (REST), JavaScript Object Notation (JSON), Extensible Markup Language (XML), Simple Object Access Protocol (SOAP), and/or Java Message Service (JMS)). The communications can be encrypted.
In some embodiments, communication can be over a network such as, for example, the internet, inclusive of the mobile internet, via protocols such as, for example, Enhanced Data rates for GSM Evolution (EDGE), Third Generation (3G), Long-Term Evolution (LTE), Wireless Fidelity (WiFi), and Worldwide Interoperability for Microwave Access (WiMax). Additionally, a variety of authorization and authentication techniques, such as, for example, username/password, OAuth, Kerberos, SecurelD, digital certificates, and more, can be used to secure the communications.
A network connection can be a wireless network connection such as, for example, a Wi-Fi or wireless local area network (“WLAN”) connection, a wireless wide area network (“WWAN”) connection, and/or a cellular connection. A network connection can be a wired connection such as, for example, an Ethernet connection, a digital subscription line (“DSL”) connection, a broadband coaxial connection, and/or a fiber-optic connection.
In some instances, the communication can include multiple networks operatively coupled to one another by, for example, network bridges, routers, switches and/or gateways. For example, the administration clients 130 can be operatively coupled to a cellular network and/or the security system 120 and/or the edge application providers 140 can be operatively coupled to a fiber-optic network. The cellular network and fiber-optic network can each be operatively coupled to one another via one or more network bridges, routers, switches, and/or gateways such that the cellular network and the fiber-optic network are operatively coupled to form a communication network. Alternatively, the cellular network and fiber-optic network can each be operatively coupled to one another via one or more additional networks. For example, the cellular network and the fiber-optic network can each be operatively coupled to the Internet such that the cellular network, the fiber-optic network and the Internet are operatively coupled to form a communication network.
In some embodiments, the controller 121 and the storage 122 can include one or more computers and computer systems coupled in communication with one another. The controller 121 and the storage 122 can also be one or more virtual computing and/or storage resources. For example, controller 121 can be one or more cloud computing platforms such as for example, Amazon® Elastic Computer Cloud (EC2) instances, and the storage 122 can be a storage service such as, for example, an Amazon® Simple Storage Service (S3). Other computing-as-service platforms such as, for example, Force.com from Salesforce®, Rackspace®, or Heroku® can be used rather than implementing the security system 120 on direct physical computers or traditional virtual machines.
In some embodiments, each of the customers 160 can be a single legal entity. For example, an enterprise can be considered a single customer. Thus, the box for customer 162 corresponds to one or more computer systems operated by, or on behalf of, that customer that can provide information to the security system 120. In some embodiments, customer 162 and customer 164 can include systems providing identity information, enterprise applications (e.g., an internal application of the enterprise), and policies, as well as storage and backup systems. The interconnection of these customer systems with the security system 120 is described in connection with
Additionally, while
In some embodiments, the packaged applications are identical to regular applications. The applications are, however, launched in a different manner to provide security.
Having described the elements of
In some instances, starting from the corporate perspective, O1 signs up with O2 to use the security system 120 to secure the edge clients 150 of its employees and contractors. The edge clients 150 include a variety of mobile devices such as, for example, tablets and Smartphones from a variety of operating system vendors (e.g., Apple, Microsoft, Google, RIM, etc.). The users of the mobile devices may want to be able to access both their personal information (e.g., Facebook application), as well as corporate information (e.g., O1 internal dashboard applications and/or secure websites).
In some instances, one or more authorized individuals acting on behalf of O1 can use administration clients 130 to define a corporate security policy in the tenant 124 for O1. In some embodiments, the security system 120 provides a web-based administration client. Therefore, any web-device can be used as an administration client 130, for example, computer 132, tablet 134, or even mobile device 152 (not shown in
In some instances, the corporate policies are defined via administration clients 130 and maintained in storage services 250. Filtering and load balancing 210 ensures compartmentalization of the information as well as security. For example, in some embodiments, tenant 124 cannot access data belonging to tenant 126 and vice versa. Similarly, the rate limiting mechanisms can protect against a variety of attacks. At the application services 220 the primary policy definition takes place (a detailed list of policies is described in Table 1). Conceptually the policies can be categorized into several primary categories such as, for example, user policies or group policies, application policies (authorized vs. unauthorized application), authentication mechanisms for users, device management policies (similar to some existing OS-features such as, for example, wipe the device, lock the device, etc.), as well as other policy and compliance elements. In some embodiments, administration interface features for web-based definition of policies are associated with these settings. Additionally, integration services 260 supports receipt of some of these settings from existing enterprise solutions, for example, identity provision/management, application lifecycle and change management, compliance and control systems, enterprise back and storage systems, etc. For instance, a policy can cause encrypted enterprise data from the mobile device to be backed up to the existing enterprise storage services. Similarly, logs maintained by platform services 230 can be sent to existing enterprise notification systems.
Some embodiments include adapters in the integration services 260 for Active Directory, generic Lightweight Directory Access protocol (LDAP), Security Assertion Markup Language (SAML), or other application user authentications (e.g., Force.com). Notably, this can provide some unique advantages over other systems such as, for example, allowing a partial wipe (enterprise containers only) of a device in situations such as, for example, when an employee's employment is terminated or the device is stolen, or partial locks after a certain number of failed password attempts. This system provides for fine-grained controls focused on protecting enterprise data. In some instances, policies can be dynamically modified in substantially real-time without the need for reloading the device, container, or applications. Furthermore, policies can be easily layered allowing control to set policies for users crossed with devices, containers (group of applications), and individual applications. In addition, specific data protection policies allow for a highly flexible security environment to be defined.
In some instances, the application services 220 can function as one or more data files provided to edge clients 150 for use by the security software 153. In such instances, the policy for the mobile device 152 can be delivered to the device over, for example, the Hypertext Transfer Protocol Secure (HTTPS) and interpreted and acted on by the security software 153. In some instances, the application services 220 can include application packaging and delivery to the device, including re-signing the application after any modifications, to define new statically linked packages.
In some instances, the platform services 230 provide functionality for services provided to administration clients 130 by the administration interface, such as, for example, cloud-to-device messaging, management of tenants, especially in environments with hierarchical tenancy where one tenant is inheriting some of the policies of another, management and heartbeat (e.g., status of systems and network connectivity) for the cloud environment, data management (e.g., of storage services 250), and interaction across integration services 260 with customers 160. Additionally, event and log management is supported, including integration back out to customer systems, views through the administration interface on administration clients 130, and/or reporting via reporting services 270 to third party reporting services, for example, via a defined SOAP/REST API. The audit capabilities allow the tenant administrator to get a better understanding of what applications do (e.g. sending data to unauthorized locations) as well as to perform compliance audits.
The cloud services 240 can be associated with basic cloud services available on many platforms, such as, for example, queues, emails, and other notifications. Also storage services 250 can be associated with one or more stores used by the security system 120, such as, for example, databases, key-value data stores, and/or local and network file storage. For example, in some embodiments some of the Active Directory data can be securely cached in the storage services 250 to provide faster response times, while other portions are cached more permanently to support customized policy development on the security system 120.
In some instances, some additional administrative interface actions (some features available to individual end users) can include register device, revoke/selective wipe/lock device, revoke/selective wipe application, revoke/selective wipe data, encrypt data, revoke/selective wipe container, send message/alert/notification to device, find device, send client logs, force device check-in, lost device, found device, take backup snapshot, turn on the camera (for a lost device), switch cellular networks, enforce secure data communication usage, screen sharing, etc.
Referring back to the user-side of the example of organization O1, considering that the CEO and the salesperson of organization O1 use mobile device 152 and tablet device 152 respectively. In some embodiments, both devices are registered with the security system 120, and the security software 153 is installed on both devices, for example as an application. In some embodiments, the enterprise container 330 is launched as a distinct application (for example as application 322) via the edge operating system 310 user interface (for example on an iOS device, from a button on the home screen that the administrator has named “O1 Container”). The container can prompt the user for full, simple, or no authentication (depending on the authentication policy) to, in turn, present an interface that according to some embodiments mimics the general User Interface (UI) appearance of the edge operating system 310 application launch interface. Additionally, depending on policies, the packaged applications for the enterprise container can have shortcuts outside this dedicated enterprise container environment in the main edge operating system 310 launch. Additionally, configuration of various settings such as, for example, Virtual Private Network (VPN) configuration, WiFi access points and passwords, email configuration, etc. can be pre-loaded. When using the packaged applications (e.g., packaged applications 332 or packaged applications 334), their data open/read/write/define calls, network accept/open/connect/listen/read/write/define calls, application calls, and system calls can be reviewed by the security software 153 for compliance with policies.
In some instances, from a user-experience perspective, even if the secure applications are on the launch interface of the edge operating system 310, they are isolated from the other applications. As a practical matter this can (depending on the policies defined by the provider of enterprise container 330) limit common actions by end users. For example, if packaged application 334 is the application A1, and if the user uses the edge operating system selection and clipboard to copy an email address, access to paste that email address from the clipboard can be limited to secured applications (applications in enterprise container 330). Thus, if application 322 is the built-in mail application, and the clipboard is restricted to the enterprise container 330, then if the user attempts to paste the clipboard into application 322, they cannot have access to the plain, or clear, text they originally copied. Further examples of security restrictions defined by policy can include modifying the results of clicking on links (e.g., open a different browser than OS standard) and the results of file open actions (e.g., attachments open in secure file viewer vs. OS standard handler for PDF or PowerPoint).
In some instances, the application isolation can protect against rogue applications. For example, to comply with policies set by marketplaces of edge operating system providers for mobile devices, often applications are supposed to store their data within a designated folder hierarchy. By default, this data is not encrypted. A rogue application can, however, access data outside of its designated folder hierarchy and retrieve sensitive corporate data. Thus, the security software 153 provides protection for the edge persistent data, edge cached data, and data exchange, both inter- and intra-edge.
In some embodiments, location-based and network-aware policies can be defined. Access to certain applications and/or data within the enterprise container 330 can be restricted by location and network. For example, if a salesperson is in the “inside sales” group, he/she can be restricted to accessing data associated with a sales application from within the corporate network. In contrast, the CEO who is in the “executive” group can be permitted to access data associated with the sales application on any network. In some embodiments, the policy decisions can be made by the customers 160 and defined in the security system 120.
In some embodiments, the operator of the security system 120 can enable customers 160 to provide a customized, enterprise application store to edge clients 150. The catalog can be exposed in the application providing the enterprise container 330 launcher, and can allow download directly from the security system 120 and/or the edge application providers 140. The marketplace can be a supplement to existing vendor/OS marketplaces. In contrast to the marketplaces, there can be stricter version control, and in many cases, the application is cryptographically signed with the customer or tenant provider key, as opposed to the general signing key used by the provider for that application. For example, a custom version of a secure mail program that is also sold in the OS marketplace can be re-signed by the customer after customization (new icon, application title, pre-loaded settings, and packaging for the security software) for distribution to edge clients 150. In some instances, no manual re-compilation/preparation is used to prepare applications for packaging in the enterprise application store.
Some embodiments provide support for offline access to the secure container. The policies set by the customer (or the tenant which the customer is using) can define the range of activities and possible uses offline, as well as how long the container can be used without connection to the security system 120. For example, in some embodiments, if the policy allows a container to be used for a week without access to the security system 120, then at the end of a week without a network connection, the container and the data can become inaccessible to the user. Once devices return to online mode, the system can force a synchronization and/or communication with the security system 120 (based on policies) to assure data synchronization, backup, log transfer, policy updates, and/or device/container disabling.
In some embodiments, improvements for enterprise security in a mobile device OS-agnostic fashion can be provided. For example, the improvements can include:
-
- Edge application security and management:
- Customized application store and application distribution are enabled,
- Location-aware and network-aware policies are supported,
- Application isolation is provided.
- Edge data security and management:
- Data encryption and isolation (e.g., able to wipe corporate data vs. whole device, rogue applications cannot access corporate data),
- User profile isolation and personalization (e.g., if CEO uses salesperson's mobile device, can get CEO's permissions and environment),
- Offline application and data access, with synchronization.
- Edge application security and management:
In some embodiments, various areas of security that can be covered by policies include:
-
- Health:
- Device rooted,
- Device infected,
- Application blacklist,
- OS version less than/different than specified.
- Authentication:
- Application launch authentication,
- Maximum password/pin attempts,
- Application foregrounding authentication.
- Restrictions:
- Application file sharing (outbound),
- Application file sharing (inbound),
- Application location restrictions,
- External application/URL launch,
- Application printing permitted,
- VPN used,
- Offline use permitted,
- Maximum offline time,
- Bluetooth use permitted,
- SMS messages permitted,
- iMessage, or comparable SMS messaging alternative, permitted,
- Application exit upon background,
- Idle timeout (minutes),
- Action on idle timeout.
- Data:
- Data encryption used,
- Data copy (outbound),
- Data paste (inbound),
- iCloud backup, or comparable cloud, permitted,
- Zero-out application memory on exit.
- Health:
In some instances, administrator provisioned (“pushed”) applications as well as user provisioned (e.g., via enterprise application store) applications are supported. For administrator-provisioned applications, an icon (or other similar representation) for the application can be shown in the Remote Application Platform (RAP) home screen (e.g.,
In some embodiments, a user can request applications not listed in the catalog for administrator approval. Thus, for example, if an application such as, for example, “Remember the Milk” is available for the mobile device's OS, but not corporate approved for secure data access, the user can use the application store 550 to make requests for that application to the administrator.
In some embodiments, applications within the enterprise container 330 can be launched through an approach similar to that used by the OS. Because packaged applications are themselves “native” applications, they can also be accessible via multi-tasking and/or other launch mechanisms provided by the OS. Such accessibility can be subject to any policies limiting the application ability to run in the background, or the like.
In some embodiments, applications can be launched by a touch, click, activation signal and/or other input that launches the application and/or resumes the application. In some embodiments, the packaged application can include a shortcut to return to the enterprise container home screen (e.g.,
In some embodiments, the standard edge OS home action (e.g., input, gesture, etc.) can be retained to switch from the enterprise container context to the personal, or general/baseline OS, environment. The user can return to the enterprise container by activating the container 330 in the OS launcher (e.g.,
In some embodiments, customers and/or tenants can define offline usage policies for the enterprise containers they administrate. In one embodiment, there is no notification for each offline-online status change unless the policy prohibits offline usage. Instead, in some embodiments, users are notified as they approach the limit of their remaining allowed offline time. For example, if the CEO has been traveling for a week without connecting his/her mobile device to a network, and the policy allows seven days of offline access, then at several intervals approaching the deadline, the security software 153 and/or the enterprise container 330 can present prompts, notifications, and/or other warnings to the CEO. For example, in some embodiments, warnings are given at one day (for policies allowing more than one day of offline access), three hours, fifteen minutes, ten minutes, five minutes, one minute, etc. Other notification schedules are possible, and in some embodiments, they can be customized by policies set by the customer and/or the tenant.
In some embodiments, access to the enterprise container and packaged applications can be disabled if battery power is lower than a predetermined amount, (e.g., T %). This can be designed to ensure sufficient battery power to encrypt data and/or secure the device in case the battery runs out.
As previously discussed, in some embodiments, the security system 120 can be administered using a web browser on computers and/or mobile devices, such as, for example, administration clients 130. Similarly, users can be authorized to administer aspects of their enterprise container 330 from a web interface. In such embodiments, the user can be able to, for example, access the enterprise application store, take certain remote actions to self-secure and/or locate their device, review reports of their usage and/or those of individuals within their corporate organization, etc.
In some embodiments, the security software 153 and/or enterprise container 330 on the mobile device can be maintained and updated automatically using underlying edge OS features and functionality. In some embodiments, the policies set by a customer and/or a tenant can serve to push and/or force the user to perform an update prior to use. Similarly, packaged applications from the enterprise application store, which are version-managed (e.g., version X.Y.Z of application A1 is approved until the administrator approves new updates) can be maintained by the enterprise container 330 and/or the underlying edge OS functionality.
In some embodiments, the security system 120 provides for customized branding of the enterprise container 330 as displayed on the edge device (e.g., logos, colors, and fonts, superimposing logos on packaged application icons).
In some embodiments, on the first launch of the enterprise container, authentication is used. This can occur between
In some embodiments, both offline and online out-of-band password reset processes are supported. For example, in offline mode, the user can use a recovery password to unlock the container for a fixed period of time. In online mode, the user can be prompted for a password reset. Additionally, in-band password reset handling can be supported for first login password changes, active directory password reset policies, etc. The user interface for these changes is not shown, but can be implemented with one or more dialog boxes. Additionally, a variety of authorization and authentication schemes such as, for example, use of two factor authentication, can be supported.
In some embodiments multiple concepts of idle time and/or inactivity can be linked to different policies. For example, the screen might be blanked but no password/PIN used after a very short time without providing user input in some applications. In contrast if there is no user input for a more extended period, a PIN might be used. After a lengthier period of time, a fuller password can be used. The specific requirements of the user can be determined by the entity establishing the policy.
In some embodiments, as shown in
In some embodiments, there is a mechanism (e.g., support button 560) within the enterprise container 330 to contact the customer's support systems. In some embodiments, the system is directly provided by the security system 120. In other embodiments, the security system 120 transparently interfaces to the customer trouble-ticket and help desk systems (e.g., customer 162-164). In some embodiments, the system can offer the user an option to contact the organization's live support desk via voice, video and/or text chat.
In some embodiments, the first time the user wishes to access an enterprise container, he/she is guided through a self-install process as follows. In other embodiments, the device can be partially and/or fully provisioned to omit some of these steps using OS-based features for installing applications to managed devices. In the self-install embodiment, the user receives instructions from the administrator to download an application from the OS marketplace and the tenant name to use during installation (e.g. “example.com” tenant). Subsequently, the user can download and launch the application. The user can enter a corporate username and login, together with the tenant name (if different from domain name of email address) to connect the downloaded application to the corporate policies. This can cause the downloaded application to behave similar to the enterprise container 330 as discussed herein. Additionally, administrator-pushed, packaged applications can be downloaded automatically.
In some embodiments, a container of a single application can be represented as a single icon (e.g., directly on the OS-launcher) without the container metaphor use. Thus, the container can behave like a single application, however, the discussed security capabilities and policies can be applied. Additionally, some embodiments can provide access to an enterprise application store to download additional applications approved by the organization managing the container.
In some embodiments, packaging applications for the secure environment is performed. The selected embodiment depends on the source of the application (edge application providers 140) whether the provider pre-modify the application to be packaged, the policies of the edge operating system 310, and the operator of an online marketplace for application delivery for the edge operating system 310. For example, Apple has relatively restrictive policies for applications running on iOS. Apple can not accept dynamically linked applications on the public-facing App Store (to libraries outside of those provided by Apple). Thus, even if application providers want to provide applications in support for the security software 153, it can be challenging to deliver a single application to the public-facing App Store that can support both general customers and customers using the secure container.
In some embodiments, the primary packaging approaches used can include: (i) dynamic linking of applications with a library relevant for the security software 153 before distribution to the edge client; (ii) static linking with a library of specialized calls for the security software 153 before distribution to the edge client; (iii) decrypting a generally provided application, modifying the headers to use a library provided by the security software 153, and re-signing the application with a customer or tenant signing key for delivery to the edge client; and (iv) modifying the launch process for packaged applications to change the call table (“shimming”). The approaches can be divided into two categories, approaches (i) and (ii) can be generally performed by an application developer, while approaches (iii) and (iv) can be performed by the operator of the security system 120, or someone packaging applications therefore. While the four approaches can be used simultaneously, approaches (i) and (ii) can include greater cooperation of application developers for deployment of applications while approaches (iii) and (iv) can occur without the developers' direct involvement.
The approaches can use modification to at least two levels of calls made by applications to libraries, specifically both the higher-level APIs provided to developers (e.g., Cocoa APIs for iOS or Android APIs for Android), and the lower-level libraries such as, for example, the underlying C library (e.g., libc). In some embodiments, at least two levels of modifications can be used, because if the low-level calls are modified, then it may not be possible to prompt users for authentication and/or surface notifications. In the most general terms, the dynamic modification approach of (iv) can be described as adding two or more intercept points to an application by a second application.
In some instances, a low-level intercept is context free and therefore can be implemented by intercepting code in libraries that are responsible for handing off control to the kernel. These methods are typically in a few libraries (e.g., libc, libSystem, etc.). A high-level intercept, however, is context sensitive and can be implemented in high-level programming languages.
In some embodiments, a low-level intercept can be used to implement policies that do not use higher level application contexts. For example, a low-level intercept can be used when, for example, encrypting data at rest, encrypting data over a network, application level VPN tunneling, within network access control, protecting data in memory by wiping and/or erasing unused data, removing data in memory on termination of an application, etc.
In some instances, a low-level intercept can be, for example, implemented by modifying symbol resolutions in an application to point to and/or reference an implementation of a script (e.g., an authentication procedure). Various techniques can be used, in combination, to patch a symbol table for the symbol resolutions to be modified. In some instances, for example, an executable header of a symbol table is modified to insert a library/symbols. Such a modification can affect the load order of libraries and how symbols are resolved. In other instances, the symbol table is patched in memory at run time before the application code is executed.
In some embodiments, a high-level intercept can be used to implement policies that have a user interface (UI) component, policies that employ authentication, policies that are tied to APIs associated with Software Development Kits (SDKs) (e.g., copy and paste policies) and/or the like. In some instances, a high-level intercept can intercept a code in a class. High level dynamic languages such as, for example, Java (for Android) and Objective-C (for iOS) can modify code at runtime (e.g., swizzling). In some instances, an intercept can swizzle the codes at run time before the application code is executed. In some embodiments, a combination of the header modification and swizzling is used to 1) patch data structures in memory, and 2) use some runtime routines (e.g., method_exchangeImplementations in iOS) to change method implementations.
For example, if the Library (libc) reads calls are dynamically modified, as opposed to high-level Cocoa/Android/Windows/RIM APIs for reading files, then the security software can deny reads but may not be able to present authentication prompts, explanations, etc. Instead, by also modifying the higher-level API calls, requests to read files can trigger policy-defined authentication on a per-item basis. For example, when the CEO attempts to access an internal dashboard using an iOS application, the Cocoa API read request by the packaged application for the data from the network can trigger a policy using detailed, full-password authentication. In contrast, the salesperson accessing a packaged application inside the enterprise container 330 may trigger a lower, PIN authentication requirement. Or the policy may not use authentication if the salesperson has recently entered a password or PIN.
At step 630, the application is executed and issues a request to read data to the underlying operating system. Although not explicitly shown, in some embodiments, the steps 610-620 can occur once per launch of an application in process 600 while steps 650-660 can be repeated multiple times. Additionally, while process 600 is shown in the read context, the same basic approach can be used for intercepting other calls discussed above. The read request for data can be intercepted by the library loaded by the security software at step 640 and authorization can be verified. In some embodiments, this can include prompting the user to authenticate to the device (e.g., enter password/PIN). If the intercept is able to verify the user's authorization, then the application is allowed to perform the read at step 650, including decrypting the data. If the user authentication is not verified, the read is declined at step 660. Note that in some embodiments, a declined read can return one or more of garbage data, encrypted data, an error code, and/or an exception.
In some instances, the intercept at the higher-level API can be omitted to improve performance. For example, with encryption, obtaining the password, and thus the key, a high-level intercept can be used. The ongoing encryption of packets, however, can use intercepts at the lower-level libraries that perform encryption and not the higher level intercept. Similarly, for some actions such as, for example, securely wiping freed memory a low-level library intercept can be used without a high-level intercept. Accordingly, for those calls where there is no need for human intervention/notification, the higher-level intercept can be omitted to improve performance.
Additionally, in some embodiments, the intercepts can modify the behavior of other OS-functionality to comply with policy and secure data. For example, in some embodiments, a PDF accessed from a secure email program can be openable in a secure PDF reader, as opposed to the OS provided PDF reader.
Some embodiments include additional features to handle pre-installed applications. Pre-installed applications include applications that are provisioned upon OS installation or update (e.g., iOS). Examples of these applications can include Mail, Contacts, Calendar, Notes, Browsers (e.g., Safari), etc. In some embodiments, these application binaries are not redistributed and/or copied. Thus several of the aforementioned application packaging approaches of (i), (ii) and (iii), described above, are not directly applicable. The fundamental concept of adding two intercepts, however, still remains and thus this is an embodiment of approach (iv), as described above.
Some embodiments provide policy enforcement, data encryption/isolation and other controls for pre-installed applications using a generic application launcher that has the ability to load an application binary, patch the binary (e.g., using two layers of added intercepts), and execute the patched, or modified, binary. Applications launched using this launcher can in substantially real-time, without any pre-wrapping, be able to enforce the set of application policies, controls and encryption that have been described above.
The following is an example of one such embodiment. Upon installation of a business container, additional icons are added for the container context for the key functions supplied by pre-installed applications, (e.g. Mail, Contacts, Calendar and Browser). Each of these icons corresponds to an application launcher that is programmed to load, patch and execute the respective pre-installed application. In the case of mail, a user can click the business mail icon that can then execute the installed launcher that in turn causes the Mail application binary to load, be patched, and executed. Although the pre-installed Mail executable is executed, the data (e.g., user accounts and mail messages) can be separate and distinct from any personal Apple Mail accounts that can be configured on the same device due to the patching. Thus, the same application is launched, but the data is separate and distinct from the generally available data outside the container. If the Mail application was launched by a specific launcher, the same interception techniques described above can be implemented dynamically (e.g., in real-time), to enforce policy restrictions, change what data the Mail application accesses and to provide the other features described such as, for example, encryption and data isolation.
Some embodiments can use the dynamic launching approach described for pre-installed applications with arbitrary applications, such as, for example, those from the iTunes store, as described herein. One difference between the pre-installed applications and other application-store obtained applications on current iOS implementations is that the pre-installed iOS applications can be loaded from the installed versions. In contrast, the executable code for other applications can be sandboxed differently and cannot be easily loaded once installed. This is not a technical limitation per se; but rather also a licensing compliance constraint. Since the application has already been paid for, or there has been a redemption code that has been entered to source the application, the binary of the application can be obtained and installed. In this example, the binary can be installed by the container, then that binary can be downloaded by or included in a launcher that launches, applies the two layers of intercepts, and executes the binary. Additionally, if desired, the icon for the original application loaded via the OS can be hidden.
In some instances (scenario 1), an application X can be installed prior to installation of the container. During (or after) installation of a container, application X can be detected and a signal received to indicate whether to install a business version of the application. This can be either a tenant or user directed decision, (e.g., IT policy vs. user prompt). For each business version, the executables for the application (e.g. a binary file) can be downloaded from the marketplace and a customized business launcher can be installed to launch the binary version of the application (this new launcher can employ approach (iv) described above).
In some instances (scenario 2), an application X can be installed after the installation of the container. In this instance, application X can be detected upon next container launch. Similar to scenario 1, the user prompted/IT preference can be enforced and a launcher can be defined that behaves as discussed in scenario 1, including obtaining and installing the executable for the application.
In some instances (scenario 3), an application X can be requested to be installed from tenant application catalog, but installed from OS marketplace. A user can select one or more applications for installation from a tenant application catalog. Despite the fact that the applications appear to be purchased/requested from the tenant application catalog, the actual applications can be purchased via the OS marketplace (e.g., iTunes store). In some embodiments, this is done transparently without the user directly seeing a launch of the marketplace application. As discussed above with respect to scenarios 1 and 2, the executable binary can be obtained and a launcher can be defined for each application. One difference can include (depending on the policy set for the user of the container) hiding the default application icon(s). Hiding the default application icons can have the effect of providing access to the application for business purposes and not allowing general and container uses.
In various instances, the discussed approach can be extended to various operating systems such as, for example, Android, RIM, Windows Mobile, etc. Additionally, while an emphasis has been placed on creating a launcher that downloads or invokes a binary using approach (iv), other types of launchers can be used for dynamically loading two layers of intercepts into a binary file.
In some embodiments, policies and their associated actions can be set and remotely enforced and/or invoked by tenant administrators at the user, application, application attribute, device, and/or device attribute levels. As noted previously, in some embodiments a policy set is a collection of one value for the listed policies, and each user is assigned to one or more groups having one or more applicable policy sets. In one embodiment each group can have at least two policy sets, one for trusted users and another for untrusted users. The policy sets and policy values can be stored in the storage 122 (e.g. in tenant 124-128) and delivered to edge clients 150 for use in implementing the policy by the security software 153.
In some embodiments, some of the policies can be closely aligned with existing Microsoft ActiveSync policies and can in some embodiments directly inherit the values assigned for that policy in ActiveSync. Table 1, shows a list of example policies.
In some embodiments, evaluation of policy criteria can be triggered by specific events such as, for example, change in network or geolocation, download or attempted download of an application, or other specified edge-user initiated or edge device initiated action. The evaluation of policy can also be triggered by expiration of tenant specified time period (e.g., policy expiration token), polling event with polling interval set by tenant and/or administrator, or remotely on-demand by tenant and/or administrator.
In some embodiments, application location-based access rules can be determined based on location variables and criteria (e.g., geographical or physical location of a device at time of evaluation to the granularity of city). Administrators may specify city, state and/or country. The security software and/or security system can implement logic to identify a device location and determine if geolocation criteria is satisfied. Geolocation values can be pre-seeded by an operator of the security system and be available for selection.
In some embodiments, a network can be the network connectivity protocol that a device is invoking at time of policy condition evaluation. Network can be specified or identified as and network values pre-seeded by the operator of the system and available for selection (e.g., 3G/4G, SSID, etc.). Other commonly used network protocols and protocol identifiers such as, for example, Internet Protocol (IP) or IP ranges can also be used.
In some embodiments, application location can be evaluated based on conditional logic. Various logical operators (e.g., ==, !=, >, <, >=, <=, AND, OR, &&, ∥) and wildcards can be used by tenant administrators to evaluate policy set criteria.
In some embodiments, the approach provided can be used in exam/test taking contexts. In such embodiments, a secure test taking container can be installed on a baseline device with a policy restricting network usage outside the container. This can facilitate secure use of the test taking application without access to the internet from the general browser.
In some embodiments, additional application and data policies can be implemented that provide finer grained control over applications.
In some embodiments, a Software Development Kit (SDK) and/or library can be provided for application developers to enable hooks for custom policies in applications that embodiments of the system can enforce. For example, if an email application wants to declare custom policy hooks for forwarding messages with attachments as opposed to replying to emails, the application can insert a call to the SDK in conjunction with the forward command and then the provider's policy, when set, can be triggered.
In some embodiments, the security system 120 can provide alternative billing/licensing/pricing models for applications that are distributed to managed devices. For example, instead of paying a one time fee for an application installation, the system can enable a company to pay the application developer based on overall usage levels.
In some embodiments, the system can provide a mechanism for distributing secure containers to consumers from businesses for carrying out tasks. This can provide protected access to sensitive financial and/or medical records in a manner that protects the information from device and malicious applications. For example, a bank can distribute a container with a single application (that looks like a native application) but which implements the policy and security mechanisms described herein. This application can then maintain its data separate from other applications and can be protected as described herein.
In some embodiments, the system can provide over-the-air, one-click provisioning for mobile users. This can include installing both a vendor-provided security profile, (e.g., Mobile Device Management for iOS) and application level policies.
In some embodiments, user provisioning can include pre-configuring applications and devices. For example, application and device configuration profiles, or bundles, can be defined and then pushed to users' devices to automatically configure device settings (e.g., applications, WiFi, Virtual Private Network (VPN), email configuration, etc.).
In some embodiments, web-based, remote tenant provisioning can be provided to self-provision tenants and associated policies and application catalog(s).
Some embodiments can include a multi-sourced application catalog with applications from multiple parties and aggregation of those applications into a single catalog. The individual tenants can subscribe and inherit individual applications and/or full categories of applications from the master catalog, optionally with associated policies.
Some embodiments can provide in-memory data controls and protection including one or more of wipe or delete data on freeing data operation, wipe or delete data on application backgrounding, wipe or delete data on application closing, and/or wipe or delete data on application inactivity timeout interval.
In some embodiments, the security system 120 can provide protection for data at rest, for data in memory and/or for data in motion. For example, the provided protection can include encryption of one or more of data at rest with unique per-application keys. The protection of data in memory can be provided by minimizing window of attack by limiting the life time of the data in memory (e.g., based on policy). In such embodiments, data in motion can be protected by using application VPN.
Some embodiments support viewing and editing data in remote locations (e.g., network folders). Such embodiments can allow a mobile user to securely access files from a remote server/cloud and perform one or more of pulling the file(s) over the air to the device, providing the file(s) to an application for viewing and/or editing, and/or enabling updated and/or modified versions of the file(s) to be sent to the server/cloud. In such embodiments, each application can have its own sandboxed copy.
Some embodiments provide application VPNs and per-application VPNs. Some embodiments provide application and data analytics and event logs (e.g., detailed application, device and data analytics).
It is intended that the methods and apparatus described herein can be performed by software (executed on hardware), hardware, or a combination thereof. Hardware modules can include, for example, a general-purpose processor, a field programmable gate array (FPGA), and/or an application specific integrated circuit (ASIC). Software modules (executed on hardware) can be expressed in a variety of software languages (e.g., computer code), including C, C++, Java™, Ruby, Visual Basic™, and other object-oriented, procedural, or other programming language and development tools. Examples of computer code include, but are not limited to, micro-code or micro-instructions, machine instructions, such as, for example, produced by a compiler, code used to produce a web service, and files containing higher-level instructions that are executed by a computer using an interpreter. Additional examples of computer code include, but are not limited to, control signals, encrypted code, and compressed code.
Some embodiments described herein relate to a computer storage product with a non-transitory computer-readable medium (also can be referred to as a non-transitory processor-readable medium) having instructions or computer code thereon for performing various computer-implemented operations. The computer-readable medium (or processor-readable medium) is non-transitory in the sense that it does not include transitory propagating signals per se (e.g., a propagating electromagnetic wave carrying information on a transmission medium such as, for example, space or a cable). The media and computer code (also can be referred to as code) can be those designed and constructed for the specific purpose or purposes. Examples of non-transitory computer-readable media include, but are not limited to, magnetic storage media such as, for example, hard disks, floppy disks, and magnetic tape; optical storage media such as, for example, Compact Disc/Digital Video Discs (CD/DVDs), Compact Disc-Read Only Memories (CD-ROMs), and holographic devices; magneto-optical storage media such as, for example, optical disks; carrier wave signal processing modules; and hardware devices that are specially configured to store and execute program code, such as, for example, Application-Specific Integrated Circuits (ASICs), Programmable Logic Devices (PLDs), Read-Only Memory (ROM) and Random-Access Memory (RAM) devices. Other embodiments described herein relate to a computer program product, which can include, for example, the instructions and/or computer code discussed herein.
While various embodiments have been described above, it should be understood that they have been presented by way of example only, and not limitation. Where methods and steps described above indicate certain events occurring in certain order, the ordering of certain steps can be modified. Additionally, certain steps can be performed concurrently in a parallel process when possible, as well as performed sequentially as described above. Although various embodiments have been described as having particular features and/or combinations of components, other embodiments are possible having any combination or sub-combination of any features and/or components from any of the embodiments described herein.
Claims
1. A non-transitory processor-readable medium storing code representing instructions to be executed by a processor, the code comprising code to cause the processor to:
- receive an object code of a first application, the first application defined by an author different from an author of a second application;
- dynamically load at least two intercept points into the object code of the first application, using the second application;
- responsive to a read request for data by the first application, intercept the read request by at least one of the two intercept points;
- determine, in response to intercepting the read request, whether or not access to read the data is authenticated; and
- send a signal to provide the data to the first application, based on the determining.
2. The non-transitory processor-readable medium of claim 1, the code further comprising code to cause the processor to:
- define a password input on a mobile device associated with the first application;
- receive a password signal associated with the password input, the password signal having authentication information; and
- analyze the password signal to determine whether or not access to read the data is authenticated.
3. The non-transitory processor-readable medium of claim 1, the code further comprising code to cause the processor to:
- decrypt the data prior to sending the signal to provide the data to the first application.
4. The non-transitory processor-readable medium of claim 1, wherein the read request includes a read request for at least one of access to a file, access to a network source, or access to a clipboard.
5. The non-transitory processor-readable medium of claim 1, wherein the read request is at least one of a file open request, a file read request, a file write request, a file create request, a network accept request, a network open request, a network connect request, a network listen request, a network read request, a network write request, a network create request, a clipboard copy request, or a clipboard paste request.
6. The non-transitory processor-readable medium of claim 1, wherein the code to cause the processor to determine includes code to cause the processor to erase the data if access is not authenticated.
7. A non-transitory processor-readable medium storing code representing instructions to be executed by a processor, the code comprising code to cause the processor to:
- receive an object code of a first application provided by a first party;
- remove a digital signature from the object code of the first application;
- install at least two intercept points into the object code of the first application;
- sign the object code of the first application with a digital signature of a second party to produce a modified object code, the second party is different from the first party;
- execute the modified object code of the first application on a mobile device associated with the first application;
- responsive to a read request for data by the modified object code of the first application, intercept the read request by at least one of the two intercept points;
- determine, in response to intercepting the read request, whether or not access to read the data is authenticated; and
- send a signal to provide the data to the first application, based on the determining.
8. The non-transitory processor-readable medium of claim 7, the code further comprising code to cause the processor to:
- define a password input on the mobile device associated with the first application;
- receive a password signal associated with the password input, the password signal having authentication information;
- analyze the password signal to determine whether or not access to read the data is authenticated.
9. The non-transitory processor-readable medium of claim 7, the code further comprising code to cause the processor to:
- decrypt the data prior to sending the signal to provide the data to the first application.
10. The non-transitory processor-readable medium of claim 7, wherein the read request includes a read request for at least one of access to a file, access to a network source, or access to a clipboard.
11. The non-transitory processor-readable medium of claim 7, wherein the read request is at least one of a file open request, a file read request, a file write request, a file create request, a network accept request, a network open request, a network connect request, a network listen request, a network read request, a network write request, a network create request, a clipboard copy request, or a clipboard paste request.
12. The non-transitory processor-readable medium of claim 7, wherein the code to cause the processor to determine includes code to cause the processor to erase the data if access is not authenticated.
13. The non-transitory processor-readable medium of claim 7, wherein the first application and the data are stored in a container on the mobile device, the code further comprising code to cause the processor to:
- receive a delete request signal for remotely wiping the container, the container including a plurality of applications and a plurality of data associated with the plurality of applications;
- delete the container, in response to the delete request signal, wherein remaining applications and remaining data on the mobile device are unaffected by the remotely wiping of the container; and
- produce a confirmation signal indicative of the deletion of the container.
14. A method, comprising:
- executing a first application on a mobile device;
- receiving a request to share, with a second application, data associated with the first application;
- sending a signal to provide the data to the second application, while executing the first application, in response to the request to share data with the second application;
- receiving a request to share, with a third application, the third application not from the set of applications on the mobile device, data associated with the first application; and
- sending a signal to prevent the data from being provided to the third application, while executing the first application, in response to the request to share data with the third application.
15. The method of claim 14, wherein the sending the signal to prevent includes at least one of:
- sending the signal to provide garbage data to the third application;
- sending the signal to provide encrypted data to the third application;
- sending the signal to produce an error code in the first application and stop the data from being provided to the third application; or
- sending the signal to produce an exception in the first application and stop the data from being provided to the third application.
16. The method of claim 14, further comprising:
- producing an audit trail message on the mobile device, the audit trail message including a message indicative of preventing the data from being provided to the third application.
17. An apparatus comprising:
- a controller module implemented in at least one of a memory or a processing device, the controller module configured to be communicatively coupled with a network interface and a storage device, the controller module further configured to:
- receive an object code of a first application, the first application defined by an author different from an author of a second application;
- dynamically load at least two intercept points into the object code of the first application, using the second application;
- responsive to a read request for data by the first application, intercept the read request by at least one of the two intercept points;
- determine, in response to intercepting the read request, whether or not access to read the data is authenticated; and
- send a signal to provide the data to the first application, based on the determining.
18. The apparatus of claim 17, wherein the controller module is configured to:
- define a password input on a mobile device associated with the first application;
- receive a password signal associated with the password input, the password signal having authentication information; and
- analyze the password signal to determine whether or not access to read the data is authenticated.
19. The apparatus of claim 17, wherein the first application and the data are stored in a container on a mobile device, the controller module configured to:
- receive a delete request signal for remotely deleting the container, the container including a plurality of applications and a plurality of data associated with the plurality of applications;
- delete the container, in response to the delete request signal, applications and data on the mobile device and not within the container being unaffected by deleting the container; and
- produce a confirmation signal indicative of the deletion of the container.
20. The apparatus of claim 17, wherein the read request is at least one of a file open request, a file read request, a file write request, a file create request, a network accept request, a network open request, a network connect request, a network listen request, a network read request, a network write request, a network create request, a clipboard copy request, or a clipboard paste request.
Type: Application
Filed: Mar 8, 2013
Publication Date: Sep 12, 2013
Applicant: RAPsphere, Inc. (Redwood, CA)
Inventors: Prakash Linga (Belmont, CA), Ajay K. Arora (Redwood City, CA)
Application Number: 13/790,561
International Classification: G06F 21/44 (20060101);