U.S. patent application number 13/790561 was filed with the patent office on 2013-09-12 for method and apparatus for securing mobile applications.
This patent application is currently assigned to RAPsphere, Inc.. The applicant listed for this patent is RAPSPHERE, INC.. Invention is credited to Ajay K. Arora, Prakash Linga.
Application Number | 20130239192 13/790561 |
Document ID | / |
Family ID | 49115277 |
Filed Date | 2013-09-12 |
United States Patent
Application |
20130239192 |
Kind Code |
A1 |
Linga; Prakash ; et
al. |
September 12, 2013 |
METHOD AND APPARATUS FOR SECURING MOBILE APPLICATIONS
Abstract
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.
Inventors: |
Linga; Prakash; (Belmont,
CA) ; Arora; Ajay K.; (Redwood City, CA) |
|
Applicant: |
Name |
City |
State |
Country |
Type |
RAPSPHERE, INC. |
Redwood |
CA |
US |
|
|
Assignee: |
RAPsphere, Inc.
Redwood
CA
|
Family ID: |
49115277 |
Appl. No.: |
13/790561 |
Filed: |
March 8, 2013 |
Related U.S. Patent Documents
|
|
|
|
|
|
Application
Number |
Filing Date |
Patent Number |
|
|
61608819 |
Mar 9, 2012 |
|
|
|
Current U.S.
Class: |
726/7 ;
726/3 |
Current CPC
Class: |
G06F 3/0482 20130101;
G06F 21/54 20130101; H04L 63/30 20130101; H04L 63/061 20130101;
G06F 21/44 20130101; H04L 63/083 20130101 |
Class at
Publication: |
726/7 ;
726/3 |
International
Class: |
G06F 21/44 20060101
G06F021/44 |
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.
Description
CROSS REFERENCE TO RELATED APPLICATION
[0001] 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.
BACKGROUND
[0002] Some embodiments described herein relate generally to
providing security for applications and data on mobile, or edge,
clients.
[0003] 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.
[0004] 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.
[0005] 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.
[0006] 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.
[0007] 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.
SUMMARY
[0008] 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.
BRIEF DESCRIPTION OF THE DRAWINGS
[0009] FIG. 1 is a schematic block diagram of a computer system in
which mobile application security functions can be performed,
according to an embodiment.
[0010] FIG. 2 is a schematic illustration of a security system,
according to an embodiment.
[0011] FIG. 3 is an illustration of sample operating system
launcher screen of a mobile device, according to an embodiment.
[0012] FIGS. 4-5 are illustrations of sample user interfaces,
according to various embodiments.
[0013] FIG. 6 is a flowchart of a process for providing mobile
application security, according to an embodiment.
DETAILED DESCRIPTION
[0014] 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.
[0015] 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.
[0016] 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.
[0017] 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.
[0018] 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.
[0019] 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).
[0020] 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.).
[0021] FIG. 1 is a schematic block diagram of a computer system in
which mobile application security functions can be performed,
according to an embodiment. A system and processes to provide
security protection on mobile devices that allow the devices to be
usable for both secure purposes and personal purposes at the same
time is described in FIG. 1. Because FIG. 1 is an architectural
diagram, certain details are intentionally omitted to improve the
clarity of the description.
[0022] The system 100 of FIG. 1 includes a security system 120,
administration clients 130, edge application providers 140, edge
clients 150 and customers 160. The security system 120 includes a
controller 121 and storage 122. Storage 122 includes tenant 124,
tenant 126, and tenant 128. The administration clients 130 include
computer 132 and tablet 134. The edge application providers 140
include provider 142 and provider 144. The edge clients 150 include
mobile device 152 and tablet device 154, where mobile device 152
includes security software 153. The customers 160 include customer
162 and customer 164.
[0023] 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.
[0024] 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.
[0025] 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.
[0026] 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.
[0027] 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.RTM. Elastic
Computer Cloud (EC2) instances, and the storage 122 can be a
storage service such as, for example, an Amazon.RTM. Simple Storage
Service (S3). Other computing-as-service platforms such as, for
example, Force.com from Salesforce.RTM., Rackspace.RTM., or
Heroku.RTM. can be used rather than implementing the security
system 120 on direct physical computers or traditional virtual
machines.
[0028] 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 FIG. 2 and integration services 260. Additionally,
for convenience of discussion, each tenant (e.g. tenants 124-128)
can be considered to be associated with one and only one customer.
Some embodiments, however, support a hierarchical tenant model to
allow for resellers and/or shared administration of policies. Thus,
both customer 162 and customer 164 can be associated with a single
tenant 124.
[0029] Additionally, while FIG. 1 is presented as primarily a
multi-tenant, cloud-delivered solution, some embodiments can be
implemented in a private environment for a single customer with a
single tenant or as a private environment for a group of customers.
In such an embodiment, the elements of FIG. 1 can be within an
organization's network/cloud versus the shown configuration with
elements spanning multiple networks.
[0030] FIG. 2 is a schematic illustration of a security system 120
of FIG. 1, according to an embodiment. Items in dotted lines in
FIG. 2 show elements of FIG. 1 that are not part of the security
system 120, specifically edge clients 150 and administration
clients 130. The non-storage elements of FIG. 2 can be associated
with the controller 121, and the storage elements can be associated
with the storage 122. The security system 120 includes filtering
and load balancing 210, application services 220, platform services
230, cloud services 240, storage services 250, integration services
260, and reporting services 270. The internal communications
between these functional blocks are not shown, and the control for
these functional blocks can be implemented in one or more
computers, including virtual computers or cloud-delivered computing
environments such as, for example, Elastic Computer Cloud (EC2),
Elastic Load Balancing (ELB), Simple Queue Service (SQS), Simple
Email Service (SES), Simple Notification Service (SNS), Elastic
Block Store (EBS), Simple Storage Service (S3), and Simple DataBase
(SimpleDB), provided by Amazon.RTM..
[0031] FIG. 3 is an illustration of sample operating system
launcher screen of a mobile device, according to an embodiment. In
the diagram of FIG. 3, items in dotted lines represent conceptual
functionality within the software blocks. FIG. 3 includes the
mobile device 152 of FIG. 1 with the computing environment
including the edge operating system 310. The existing applications
320, including applications App 322 and App 324, can make direct
calls to the edge operating system 310. In contrast, applications
in the enterprise container 330, Packaged App 332 and Packaged App
334, make their calls through the security software 153. The
security software 153 includes two primary functional components,
policy enforcement 340 and data encryption and isolation 350. A
notable difference between the applications is that App 322 can
directly interface with the edge operating system 310. In contrast,
secured applications, e.g. Packaged App 332, interface with the
edge operating system 310 via the security software 153 and cannot
directly interface with 310. The mechanisms for packaging
applications are discussed in greater detail.
[0032] In some embodiments, the packaged applications are identical
to regular applications. The applications are, however, launched in
a different manner to provide security. FIG. 3 also highlights a
limitation on applications outside the secured enterprise container
330 accessing the applications within the container. The enterprise
container 330 can also be referred to as a container. Also, the
security software 153 can support multiple different enterprise
containers on a single mobile device and multiple users of a single
container on a single device. Thus, an employee of the organization
can have both a container from the organization and a container
from another organization/company on their mobile device.
Similarly, if an employee of the organization allows another
employee access to their mobile device, that other employee can
authenticate themselves to the enterprise container 330 and be
provided distinct access to the applications provisioned for them
separate and apart from the original employee's access.
[0033] Having described the elements of FIGS. 1-3, their functions
are described in the context of an example organization O1. For
this discussion, it is assumed that the organization O1 is customer
162 which links to their server (e.g., Microsoft-compatible, Active
Directory server) for identity provisioning and management, on the
security system 120. The organization O1 is tenant 124 and O2 is
the operator of the security system 120 as a service to multiple
customers.
[0034] 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).
[0035] 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 FIG. 1). Through the
administration interface, the policies for users, groups, devices,
applications and more can be defined. For this example, the
administration clients 130 are used to link the O1's Active
Directory servers (e.g., customer 162) to the security system 120
and to define policies for users based on Active Directory groups.
For example, devices belonging to users in the executives group can
be automatically given access to the O1 internal dashboard, and
other users can be given permission to access a specific version of
an application A1 (e.g., version X.Y.Z), but not any other
versions. This policy information is maintained in security system
120 as part of the data for tenant 124. The edge clients 150 (e.g.,
mobile device 152) in the hands of the CEO of organization O1 or
tablet device 152 in the hands of a salesperson of O1, can
communicate with security system 120 to obtain the policy
information and for authorization and authentication purposes. More
generally, the high portability--and easy theft--of the edge
clients 150 opens up vulnerabilities, but the additional sensors
and location information also provide opportunities for unique
policies. For example, a policy can prevent access to corporate
documents from certain countries. Similarly, the auditing
information and data logs can identify data leakage, for example
identifying that an application is sending information to IP
addresses in a country of concern.
[0036] 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.
[0037] 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.
[0038] 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.
[0039] 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.
[0040] 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.
[0041] 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.
[0042] 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.
[0043] 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).
[0044] 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.
[0045] 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.
[0046] 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.
[0047] 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.
[0048] In some embodiments, improvements for enterprise security in
a mobile device OS-agnostic fashion can be provided. For example,
the improvements can include: [0049] Edge application security and
management: [0050] Customized application store and application
distribution are enabled, [0051] Location-aware and network-aware
policies are supported, [0052] Application isolation is provided.
[0053] Edge data security and management: [0054] Data encryption
and isolation (e.g., able to wipe corporate data vs. whole device,
rogue applications cannot access corporate data), [0055] User
profile isolation and personalization (e.g., if CEO uses
salesperson's mobile device, can get CEO's permissions and
environment), [0056] Offline application and data access, with
synchronization.
[0057] In some embodiments, various areas of security that can be
covered by policies include: [0058] Health: [0059] Device rooted,
[0060] Device infected, [0061] Application blacklist, [0062] OS
version less than/different than specified. [0063] Authentication:
[0064] Application launch authentication, [0065] Maximum
password/pin attempts, [0066] Application foregrounding
authentication. [0067] Restrictions: [0068] Application file
sharing (outbound), [0069] Application file sharing (inbound),
[0070] Application location restrictions, [0071] External
application/URL launch, [0072] Application printing permitted,
[0073] VPN used, [0074] Offline use permitted, [0075] Maximum
offline time, [0076] Bluetooth use permitted, [0077] SMS messages
permitted, [0078] iMessage, or comparable SMS messaging
alternative, permitted, [0079] Application exit upon background,
[0080] Idle timeout (minutes), [0081] Action on idle timeout.
[0082] Data: [0083] Data encryption used, [0084] Data copy
(outbound), [0085] Data paste (inbound), [0086] iCloud backup, or
comparable cloud, permitted, [0087] Zero-out application memory on
exit.
[0088] FIGS. 4-5 are illustrations of sample user interfaces,
according to various embodiments. The mobile device 152 in edge
clients 150 is shown explicitly in FIG. 4. In FIG. 5, the dotted
lines represent the device. The device used in these examples is a
prototypical current generation touch-screen mobile device, such
as, for example, an iPhone from Apple Computer; however, other
mobile devices can be used. Additionally, the user interface
depictions are intentionally sparse to focus on key elements.
[0089] FIG. 4 shows a user interface according to an embodiment of
the system. FIG. 4 includes the mobile device 152 with a display
410 and two input devices, touch-sensitive input 420 (covering the
display) and a button input 430. In some instances, an operating
system launcher is executing and displaying a launcher with icons
capable of launching applications, specifically in this case icons
for applications 322-324, enterprise container 330 (itself an
application in this embodiment), and packaged application 332.
[0090] FIG. 5 shows the display 410 after container 330 is
activated; specifically, it shows a display of container 530. The
login and/or authentication screens have not been shown. The
display of container 530 in this embodiment mimics aspects of the
edge OS native launcher with icons for packaged applications
(332-334). Note that based on policies established by the customer
and/or tenant, packaged application 332 can be available from the
operating system launcher. Additionally, there are buttons for a
user of the enterprise container to adjust settings (settings 540),
access the enterprise application store (app store 550), and
support/report a problem for connecting users to enterprise help
systems and resources (support 560). In other embodiments,
applications other than the packaged application 332 can be
available from OS launcher.
[0091] 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., FIG. 5), and the
applications can be automatically downloaded by the security
software 153 and/or the underlying operating system application
retrieval mechanisms. For user provisioned applications, the
catalog can be defined by the administrator for the customer at a
tenant level. As previously discussed, a single tenant can inherit
information from other tenants and support multiple customers. For
example, the operator of the security system 120 can provide a
baseline set of more secure enterprise applications that tenants
and/or customers inherit by default. From within the enterprise
application store, applications can be installed in a similar
point-and-click fashion to that used in existing application
marketplaces, and the installed applications can then appear in the
container home screen and/or the mobile device home screen.
[0092] 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.
[0093] 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.
[0094] 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., FIG. 5). Such
a shortcut can be overlaid into the application, a custom gesture
and/or special input, and/or an override of an existing gesture
and/or special input. For example, on an iOS device, the button
(e.g., input 430) typically returns to the main OS-provided
launcher, however, in some embodiments the functionality of that
input is modified to return to the enterprise container launch
screen (e.g., FIG. 5). In other embodiments a custom gesture,
(e.g., a four-finger swipe) can trigger a return to the enterprise
container launch screen.
[0095] 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., FIG. 4), or
by activating an enterprise container application from the edge OS
environment. Furthermore, application settings for both enterprise
and personal applications can be managed through existing edge OS
settings interfaces.
[0096] 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.
[0097] 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.
[0098] 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.
[0099] 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.
[0100] 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).
[0101] In some embodiments, on the first launch of the enterprise
container, authentication is used. This can occur between FIG. 4
and FIG. 5 conceptually in time (not shown). From the point of
authentication, the user can be considered to be in a session until
the session terminates (e.g., enterprise container closed, time
limit reached, etc.). The policies can control the boundaries of a
session and the amount of authentication used, for example, using
full/long password once a day versus short numeric Personal ID
Number (PIN) for the rest of the day, etc.
[0102] 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.
[0103] 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.
[0104] In some embodiments, as shown in FIG. 4, shortcuts to
packaged enterprise applications on the OS launcher are allowed. If
those applications are launched directly, the user would still be
prompted for authorization and/or authentication.
[0105] 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.
[0106] 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.
[0107] 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.
[0108] 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.
[0109] 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.
[0110] 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.
[0111] 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.
[0112] 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.
[0113] 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.
[0114] 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.
[0115] 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.
[0116] FIG. 6 is a flowchart of a process for providing mobile
application security, according to an embodiment. FIG. 6 includes
process 600, which starts at step 610 with obtaining the object
code of an application by the security system 120 of FIG. 1. The
object code can be obtained from a repository such as, for example,
an application store or the on-device code. In the case of the
on-device code, the obtaining can occur using an application
load/launch process that accesses the object code representation of
the application. At step 620, the security system 120 dynamically
loads intercept points into the application. As discussed above,
the intercepts can be placed both in higher level calls and low
level calls to enable prompts for authentications.
[0117] 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.
[0118] 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.
[0119] 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.
[0120] 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.
[0121] 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.
[0122] 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.
[0123] 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.
[0124] 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).
[0125] 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.
[0126] 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.
[0127] 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.
[0128] 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.
[0129] 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.
TABLE-US-00001 TABLE 1 Default Allowed Policy Type Value Values
Actions Description Allow Enumeration Allow Disable Disable This
setting specifies Bluetooth HandsFree HandsFree whether a mobile
Allow Allow phone allows Bluetooth connections. The available
options are Disable, HandsFree, and Allow. Allow Boolean True True
Allow This setting specifies browser False Do not allow whether
Pocket browser Internet Explorer is allowed on the mobile phone.
This setting doesn't affect third- party browsers installed on the
phone. Allow Boolean True True Enable/ This setting specifies
camera False Disable whether the mobile camera not phone camera can
be allow camera used. Allow Boolean True True Allow This setting
specifies consumer False personal whether the mobile mail e-mail on
phone user can device configure a personal Do not allow e-mail
account (either personal POP3 or IMAP4) on e-mail on the mobile
phone. device Allow Boolean True True Allow This setting specifies
desktop False desktop synch whether the mobile sync Do not allow
phone can desktop synch synchronize with a computer through a
cable, Bluetooth, or IrDA connection. Allow Boolean True True Allow
html This setting specifies HTML e- False format whether e-mail
mail Convert to synchronized to the plain text mobile phone can be
in HTML format. If this setting is set to false, e-mail is
converted to plain text. Allow Boolean True True Allow This setting
specifies internet False Do not allow whether the mobile sharing
phone can be used as a modem for a desktop or a portable computer.
Allow IRM Boolean True True Allow This setting specifies over False
Do not allow whether the mobile Exchange phone can read items
ActiveSync sent using IRM. AllowIrDA Boolean True True Allow This
setting specifies False Do not allow whether infrared connections
are allowed to and from the mobile phone. Allow Boolean True True
Allow This setting specifies Mobile False Do not allow whether over
the air OTA software updates are Update allowed. Allow non- Boolean
True True Allow This setting specifies provisionable False Do not
allow whether older phones devices that may not support application
of policy settings are allowed to connect to a specific server.
Allow Boolean False True Allow This setting enables or simple False
Do not allow disables the ability to password use a simple password
such as 1234. The default value is true. Allow Boolean True True
Allow This setting specifies POPIMAP False Do not allow whether the
user can Email configure a POP3 or an IMAP4 e-mail account on the
mobile phone. Allow Boolean True True Allow This setting specifies
Remote False Do not allow whether the mobile Desktop phone can
initiate a remote desktop connection. Alphanumeric Boolean False
True Allow This setting uses that password False Do not allow a
password contains used numeric and non- numeric characters. Allow
Boolean True True Allow This setting specifies S/MIME False Do not
allow whether the encryption messaging application algorithm on the
mobile phone negotiation can negotiate the encryption algorithm if
a recipient's certificate doesn't support the specified encryption
algorithm. Allow Boolean True True Allow This setting specifies
S/MIME False Do not allow whether S/MIME software software
certificates certificates are allowed on the mobile phone. Allow
Boolean True True Allow This setting specifies storage card False
Do not allow whether the mobile phone can access information that's
stored on a storage card. Allow text Boolean True True Allow This
setting specifies messaging False Do not allow whether text
messaging is allowed from the mobile phone. Allow Boolean True True
Allow This setting specifies unsigned False Do not allow whether
unsigned applications applications can be installed on the mobile
phone. Allow Boolean True True Allow This setting specifies
unsigned False Do not allow whether an unsigned installation
installation package packages can be run on the mobile phone. Allow
Wi- Boolean True True Allow This setting specifies Fi False Do not
allow whether wireless Internet access is allowed on the mobile
phone. Approved String NULL App Name Warning This setting stores a
application App Id Delete list of approved list applications that
can be run on the mobile phone. Attachments Boolean True True Allow
This setting enables enabled False Do not allow attachments to be
downloaded to the mobile phone. Device Boolean False True Enable
This setting enables encryption False Disable encryption on the
enabled mobile phone. Maximum Integer 7 days Integers Set This
setting specifies calendar synchronization the maximum range of age
filter days to calendar days that can specified be synchronized to
the value mobile phone. The value is specified in days. Password
Boolean True True Enable This setting enables enabled False Disable
the mobile phone password. Password String Unlimited Integer Set
password This setting enables expiration (days) expiration the
administrator to "Unlimited" days to configure a length of
specified time after which a value mobile phone password is
changed. Password Integer 0 Integer Set password This setting
specifies history history to the number of past value passwords
that can be stored in a user's mailbox. A user can't reuse a stored
password. Policy String Unlimited Integer Set policy This setting
defines refresh "Unlimited" refresh how frequently the interval
interval to mobile phone updates value the Exchange from the
server. Document Boolean True True Enable This setting browsing
False Disable enables/disables enabled document browsing on the
mobile phone. Maximum String Unlimited Integer Set maximum This
setting specifies attachment (kB) attachment the maximum size of
size "Unlimited" size to value attachments that are automatically
downloaded to the mobile phone. Maximum Integer 4 Integer Set max
failed This setting specifies failed attempts password how many
times an password attempts to incorrect password attempts value can
be entered before the mobile phone performs a wipe of data. Maximum
Integer 15 min Integer Set max This setting specifies inactivity
inactivity time the length of time that time lock lock to value a
mobile phone can go without user input before it locks. Minimum
Integer 4 Integer Set minimum This setting specifies password
characters password the minimum length length as password length.
value Maximum Integer 3 days Integer Set maximum This setting
specifies e-mail age e-mail age the maximum number filter filter as
value of days' worth of e- mail items to synchronize to the mobile
phone. The value is specified in days. Maximum Integer 3 kB Integer
Set maximum This setting specifies HTML e- as value the size beyond
which mail body HTML-formatted e- truncation mail messages are size
truncated when they are synchronized to the mobile phone. The value
can be specified in kilobytes (KB). Minimum Integer 0 Integer Set
minimum This setting specifies device complex as value the minimum
number password characters of complex characters complex used in a
mobile characters phone password. A complex character is any
character that is not a letter. Maximum Integer 3 kB Integer Set
maximum This setting specifies e-mail body as value the size beyond
which truncation e-mail messages are size truncated when they are
synchronized to the mobile phone. The value can be specified in
kilobytes (KB). Use device Boolean False True Enable This setting
specifies encryption False Disable whether device encryption is
used. Use Boolean False True Use This setting specifies S/MIME
False Do not use whether S/MIME messages messages are encrypted.
Use manual Boolean False True Use This setting specifies
synchronization False Do not use whether the mobile while phone
synchronizes roaming manually while roaming. Allowing automatic
synchronization while roaming can be
frequently lead to larger-than-expected data costs for the mobile
phone plan. Use storage Boolean False True Use This setting
specifies card False Do not use whether the storage encryption card
is encrypted. Unapproved String Null App Name Warning This setting
specifies InROM App Id Delete a list of applications application
that cannot be run in list ROM. Password Boolean Disabled Enabled
Allow When this setting is recovery Disabled password enabled, the
mobile recovery phone generates a Do not allow recovery password
password that's sent to the recovery server. If the user forgets
their mobile phone password, the recovery password can be used to
unlock the mobile phone and enable the user to define a new mobile
phone password. Mobile Enumeration Set update This parameter is OTA
update mode as value available for multitenant mode deployments.
The MobileOTA UpdateMode parameter specifies the Mobile OTA Update
mode. Use Boolean False True Use This setting specifies encryption
False encryption what used algorithm is S/MIME algorithm used when
encrypting algorithm Do not use a message. encryption algorithm Use
signed Boolean False True Use signed This parameter S/MIME False
algorithm specifies what algorithm Do not use algorithm is used
signed when signing a algorithm message. Use signed Boolean False
True Use signed This setting specifies S/MIME False messages
whether the mobile messages Do not use phone send signed signed
S/MIME messages. messages UNC file Boolean Enabled Enabled Allow
file access Disabled access Do not allow file access WSS file
Boolean Enabled Enabled Allow file access Disabled access Do not
allow file access Device/Device Health Policies iOS version String
Allow String Allow Take action if iOS check Warn version is less
than Block specified value. container launch Android String Allow
String Allow Take action if version Warn Android version is check
Block less than specified container value. launch Virus/Infected
Boolean False True Block Block container device False container
launch and/or launch container application Allow launch if virus
found container or device otherwise launch deemed infected.
Rooted/Compromised Boolean False True Block Block container device
False container launch and/or launch container application Allow
launch if device is container rooted or otherwise launch found
compromised. Container/ In cases where a Application policy is
defined both Policy at the container level Precedence and at the
application level, tenant admins have the option at the application
level to explicitly accept the container policy or override the
container policy and select a different policy option. Application
Boolean False True Use app If set to true for authentication False
authentication application, use Do not use authentication (using
app corporate credentials authentication or security system
credentials) prior to application launch. Key chain Boolean True
True Allow If set to false for False keychain to application, do
not cache allow device or credentials security software key Do not
allow chain to cache keychain to credentials. cache credentials
Application Boolean True True Allow If set to false for shortcut
False creation of application, do not shortcut allow creation of Do
not allow application shortcut to creation of personal home screen.
shortcut Application Enum Business Disable, Controls cut Describes
what cut- Cut-or- Apps Business and copy and-copy is allowed. Copy
Apps, All commands The clipboard from Apps secured applications can
be encrypted by default. Application Enum Business Disable,
Controls paste Describes where the Paste App Business command
clipboard can be Apps, All pasted. Apps Application String NULL App
Name Warning This setting stores a black list App Id Force delete
list of unapproved applications that, if detected on the device
(either personal space and/or within the container), can prompt a
warning on the edge device or will not allow access to the
container until the application is deleted. Application Boolean
True True Allow At runtime, the location- False access/launch
security software can based at location automatically evaluate
access Disallow application location access/launch access
conditional at location logic to allow/disallow access/launching of
applications. Container Boolean True True Allow At runtime, the
location- False container security software can based access/launch
automatically evaluate access at location the device location
Disallow and conditional logic container to allow/disallow
access/launch access/launching of at location the container. See
above. The following example is provided to demonstrate
trusted/untrusted policy set conditional logic: "Launching the CFO
App is allowed if the device launching the container is in
corporate network in New York City. In other cases, I want the CFO
App to be disallowed" .cndot. Container Enumeration 8 hr Value (hr)
Force This setting specifies authentication Never encryption when
container Always after Value authentication occurs (hr) after a
first container Never use login (first login is container auth
defined as any login Always use that occurs either container auth
upon first use; container installation; mobile device power- on).
If a value is set, then a login occurs after value hours. Container
Boolean True True Enable This setting specifies encryption False
encryption whether content Disable within the container is
encryption encrypted. Application Boolean True True Enable This
setting specifies encryption False encryption whether data for the
Disable application in encryption question is encrypted.
Application Boolean False True Enable This setting specifies
authentication False Disable whether an application uses a user to
enter authentication credentials upon each launch. Default app
authentication will prompt user for pin. If stronger auth used,
strong auth flag can be set --> this will then prompt user to
enter full corporate credentials. Container Boolean False True
Enable This setting specifies VPN used False Disable if a VPN
connection is used prior to launching the container. Application
Boolean False True Enable This setting specifies VPN used False
Disable if a VPN connection is used prior to launching the
application in question. Automatic Boolean False True Enable This
setting specifies VPN False Disable that at launch of the
connection container and/or launch of a container application, VPN
connection would be automatically established. Container Boolean
True True Allowed This setting specifies offline False Disallowed
if the container can be access launched when the allowed edge
device is offline. Application Boolean True True Allowed This
setting specifies offline False Disallowed if the application in
access question can be allowed launched when the edge device is
offline. Container Boolean True True Allowed This setting specifies
file/doc False Disallowed if applications within sharing the
container are allowed to share files/docs with other container
apps. Application Boolean True True Allowed This setting specifies
file/doc False Disallowed if the specific sharing application in
question within the container is allowed to share files/docs with
other container apps. Application/ Boolean True True Allowed This
setting specifies URL False Disallowed if an application can
launching launch another application internal to the container
(launching container apps from the personal container can be
prohibited) or an external URL. Automatic Boolean True True Enable
This setting specifies virus scan-- False Disable that prior to the
container launch of the container or container application, the
launching device executes and passes a virus scan. If the virus
scan fails, then the container and/or container application can be
prevented from launching. Automatic Boolean False True Enable This
setting specifies virus scan -- False Disable that prior to the
container launch of a container app application, the launching
device executes and passes a virus scan. If the virus scan fails,
then the container application is prevented from launching.
[0130] 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.
[0131] 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.
[0132] 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.
[0133] In some embodiments, application location can be evaluated
based on conditional logic. Various logical operators (e.g., ==,
!=, >, <, >=, <=, AND, OR, &&, .parallel.) and
wildcards can be used by tenant administrators to evaluate policy
set criteria.
[0134] 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.
[0135] In some embodiments, additional application and data
policies can be implemented that provide finer grained control over
applications.
[0136] 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.
[0137] 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.
[0138] 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.
[0139] 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.
[0140] 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.).
[0141] In some embodiments, web-based, remote tenant provisioning
can be provided to self-provision tenants and associated policies
and application catalog(s).
[0142] 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.
[0143] 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.
[0144] 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.
[0145] 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.
[0146] 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).
[0147] 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.TM., Ruby, Visual Basic.TM., 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.
[0148] 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.
[0149] 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.
* * * * *