US12401626B2 - Multi-factor network segmentation - Google Patents
Multi-factor network segmentationInfo
- Publication number
- US12401626B2 US12401626B2 US18/457,557 US202318457557A US12401626B2 US 12401626 B2 US12401626 B2 US 12401626B2 US 202318457557 A US202318457557 A US 202318457557A US 12401626 B2 US12401626 B2 US 12401626B2
- Authority
- US
- United States
- Prior art keywords
- network
- packet
- service
- higher layer
- handshake process
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active, expires
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L63/00—Network architectures or network communication protocols for network security
- H04L63/04—Network architectures or network communication protocols for network security for providing a confidential data exchange among entities communicating through data packet networks
- H04L63/0407—Network architectures or network communication protocols for network security for providing a confidential data exchange among entities communicating through data packet networks wherein the identity of one or more communicating identities is hidden
- H04L63/0414—Network architectures or network communication protocols for network security for providing a confidential data exchange among entities communicating through data packet networks wherein the identity of one or more communicating identities is hidden during transmission, i.e. party's identity is protected against eavesdropping, e.g. by using temporary identifiers, but is known to the other party or parties involved in the communication
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L63/00—Network architectures or network communication protocols for network security
- H04L63/02—Network architectures or network communication protocols for network security for separating internal from external traffic, e.g. firewalls
- H04L63/0227—Filtering policies
- H04L63/0236—Filtering by address, protocol, port number or service, e.g. IP-address or URL
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L63/00—Network architectures or network communication protocols for network security
- H04L63/08—Network architectures or network communication protocols for network security for authentication of entities
- H04L63/0823—Network architectures or network communication protocols for network security for authentication of entities using certificates
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L63/00—Network architectures or network communication protocols for network security
- H04L63/20—Network architectures or network communication protocols for network security for managing network security; network security policies in general
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L63/00—Network architectures or network communication protocols for network security
- H04L63/16—Implementing security features at a particular protocol layer
- H04L63/166—Implementing security features at a particular protocol layer at the transport layer
Definitions
- One or more implementations relate to the field of network segmentation; and more specifically, to the segmentation of services (e.g., services deployed in a cloud environment) on a network using multiple identities of each service.
- services e.g., services deployed in a cloud environment
- enforcement of such security policy(s) against inbound network packets includes first authenticating an instance of a service that sends the network packets.
- the networking address assigned to an instance of the service serves as the identity of the instance of the service for authentication purposes.
- each instance of the service may be dynamically assigned a networking address at runtime (e.g., an IP address according to the TCP/IP networking protocol, e.g., as part of assigning an IP address to a Kubernetes pod).
- FIG. 1 A is a block diagram illustrating one aspect of network segmentation using multiple identities of a service according to some example implementations.
- FIG. 1 B is a block diagram illustrating another aspect of network segmentation using multiple identities of a service according to some example implementations.
- FIG. 3 is a flow diagram illustrating one aspect of network segmentation using multiple identities of a service according to some example implementations.
- the following description describes implementations for enforcing security policies for communications between services in different segments of a network (e.g., a network used by a software provider to implement services (e.g., SaaS) in a cloud environment) where the enforcement is based on multiple identities of each service, e.g., a cryptographic identity and a networking address. For example, when an instance of a first service within a first segment of a network requests access to an instance of a second service within a second network segment, the authorization of the request is first performed successfully relative to the cryptographic identity (e.g., an identity in an X.509 certificate) of the first service.
- a network e.g., a network used by a software provider to implement services (e.g., SaaS) in a cloud environment
- identities of each service e.g., a cryptographic identity and a networking address.
- the authorization of the request is first performed successfully relative to the cryptographic identity (e.g., an identity in an X.
- the networking address assigned to the instance of the first service is added to an access control rule (e.g., a packet filtering rule) in the lower layers of the network stack (e.g., the internet and transport layers). More specifically, the access control rule is based on the same generic security policy above and authorizes future requests if they are sent using the same networking address as the networking address assigned to the instance of the first service.
- an access control rule e.g., a packet filtering rule
- Such electronic devices are part of a network (“multi-segment network”) (e.g., network 204 as described in FIG. 2 A ) of a software provider (e.g., a SaaS provider on a cloud platform), e.g., that is implemented using network virtualization (e.g., software defined network (SDN), network functions virtualization (VFN), etc.).
- Services hosted on the multi-segment network are organized in segments (also referred to as network segments) (e.g., network segments 208 , 212 , and 216 as described in FIG. 2 A ).
- the definition of which service(s) constitute a network segment may be included in a generic security policy document (e.g., the security policy document 200 A as described in FIG. 2 A ).
- the kernel space runtime environment 102 is a runtime environment where an operating system kernel of the electronic device 100 runs.
- a network stack 103 is an implementation of the abstraction layers of a networking protocol suite (e.g., a TCP/IP protocol suite).
- Lower layers 104 of the network stack 103 represent the implementation of the part of the network stack 103 that operates in the kernel space runtime environment 102 .
- the networking hardware e.g., a network interface controller, such as network interface(s) 424 shown in FIG. 4 A
- the lower layers 104 may be multiple lower layers of software implementation that implement an internet, transport, and application abstraction layer.
- a first lower layer may implement a first interface between the networking hardware and a second lower layer that implements the internet abstraction layer. Such a first lower layer is typically associated with a device driver.
- a third lower layer may implement the transport abstraction layer.
- a fourth lower layer may implement a second interface between the third lower layer and a higher layer (e.g., a higher layer 152 A) of the network stack 103 that implements the application abstraction layer.
- Such a fourth lower layer is typically a socket interface (e.g., Berkely sockets, Winsock, etc.).
- the kernel space runtime environment 102 is part of a guest operating system's kernel space. In other implementations, the kernel space runtime environment 102 is part of a network namespace in containerized environment.
- the lower layers 104 process both inbound and outbound network packets and move them through the layers and to or from a higher layer of network stack 103 , e.g., according to a networking protocol suite (e.g., TCP/IP).
- a networking protocol suite e.g., TCP/IP
- User space runtime environments 150 A-R represent one or more runtime environments where an instance of a service (also referred to as a service instance) (e.g., a service 154 A, which is an instance of a service such as service1 as described in FIG. 2 A ) runs in each.
- a service instance also referred to as a service instance
- Example implementations of such runtime environments may include a Kubernetes pod and a multi-container Docker application instance where more than one container/process run and share resources in the same runtime environment.
- Service instances (e.g., the service 154 A) in the user space runtime environments 150 A-R are instances of services that are defined as part of a first segment of the multi-segment network (e.g., service1 of the network segment 212 as described in FIG. 2 A ) according to the same generic security policy document above.
- Each service instance may be dynamically assigned a networking address at runtime (e.g., an IP address according to the TCP/IP protocol, e.g., as part of assigning an IP address to a Kubernetes pod).
- a networking address (rather than the electronic device's 100 static networking address) is included as the destination address in network packets destined for the corresponding service instance.
- Such a networking address is also included as the source networking address in network packets sent from the corresponding service instance.
- a lower-layer network segmentation engine 106 is part of the network security infrastructure implementation of the multi-segment network and may be implemented at various locations in the lower layers 104 to perform filtering of inbound network packets to either deny or authorize their further movement in the network stack. While in one implementation the lower-layer network segmentation engine 106 is implemented just before the processing of network packets at the first lower layer in the example above, in other implementations it is implemented at different locations (e.g., as part of the processing of network packets at the first lower layer, just before the processing of network packets at the second lower layer in the example above, as part of the processing of network packets at the second lower layer, etc.).
- the lower-layer network segmentation engine 106 may be implemented based on an extended Berkeley Packet Filter (eBPF), which is a technology that allows for running user space software programs in the kernel space of an operating system.
- eBPF extended Berkeley Packet Filter
- the filtering of network packets in the lower-layer network segmentation engine 106 may operate in addition to or in concert with the filtering of network packets implemented in the kernel code for the lower layers 104 (e.g., kernel modules such as ip_tables, ip6_tables, arp_tables, etc.).
- the lower-layer network segmentation engine 106 may perform one or more operations to determine whether each of the inbound network packets that are sent from outside the first segment is authorized to move further in the network stack 103 , e.g., to be processed by a higher layer of the network stack 103 . It may first enforce packet filtering rules based on the source networking address of each packet. For example, at operation 1 , a packet filtering rule enforcer 108 receives a network packet 140 (e.g., that is an inbound network packet). The network packet 140 includes a source networking address identifying the networking address of an instance of a remote service (e.g., service4 as described in FIG.
- a remote service e.g., service4 as described in FIG.
- remote service instance (“remote service instance”) that has sent the network packet 140 where the remote service instance is hosted within a second segment of the multi-segment network (e.g., the network segment 208 as described in FIG. 2 A ).
- the network packet 140 also includes a destination networking address identifying the networking address of the service 154 A.
- the packet filtering rule enforcer 108 determines the source networking address of the network packet 140 is one of the valid networking addresses (e.g., a pool/range of IP addresses that are owned by the software provider to which the multi-segment network belongs). In such a manner, using the source networking address as an identity, the packet filtering rule enforcer 108 has authenticated the remote service instance.
- the packet filtering rule enforcer 108 determines whether there is a packet filter rule in packet filtering rules 110 that accept network packets sent using the source networking address of the network packet 140 .
- the packet filtering rules 110 includes packet filtering rules that are based on security policies (e.g., the second policy that is defined by the source 236 and destination 232 as described in FIG. 2 A ) in the generic security policy document as described above.
- the packet filtering rule enforcer 108 may determine that no existing packet filtering rules accept network packets sent using the source networking address of the network packet 140 . Such a configuration alone would have caused the network packet 140 to be blocked from moving further in the network stack 103 (e.g., to be processed by a higher layer of the network stack 103 ). However, in such a situation, the lower-layer network segmentation engine 106 may perform additional operation(s) with respect to the payload of each inbound network packet.
- an encrypted connection handshake monitor 114 is invoked to determine whether the payload of the network packet 140 is associated with performing a handshake for establishing an encrypted connection (e.g., a TLS handshake), e.g., after a TCP connection has been established (e.g., with a reverse proxy 156 A in the higher layer 152 A of the network stack 103 ).
- a payload that is associated with performing a TLS handshake include a ClientHello message, a Certificate message, etc.
- the encrypted connection handshake monitor 114 may determine that the payload of the network packet 140 is associated with performing a TLS handshake between the remote service instance and the service 154 A. In such a case, at operation 4 A, the encrypted connection handshake monitor 114 forwards the network packet 140 to be processed by the higher layer 152 A of the network stack 103 , specifically, the reverse proxy 156 A. In some implementations, the network packet 140 is forwarded for additional processing by other lower layer(s) in the lower layers 104 before being forwarded to the higher layer 152 A for processing.
- the higher layer 152 A of the network stack 103 represents the logical grouping of the service 154 A, the reverse proxy 156 A, and a higher-layer network segmentation engine 158 A.
- the service 154 A alone may be deemed the higher layer 152 A of the network stack 103 .
- a reverse proxy e.g., the reverse proxy 156 A
- a higher-layer network segmentation engine e.g., the higher-layer network segmentation engine 158 A
- the reverse proxy may perform one or more functions on network traffic to/from the lower layers 104 of the network stack 103 and network traffic to/from a service instance within the same higher layer of the network stack 103 .
- These functions may include (1) performing a TLS or mutual TLS (mTLS) handshake; (2) terminating an encrypted connection (e.g., a TLS connection); and (3) forwarding data in inbound network packets (e.g., inbound application layer data) to the service instance for processing, e.g., using an unencrypted connection after an encrypted connection (e.g., a TLS connection) is terminated; and (4) determining whether data in inbound network packets is authorized to be processed by the service instance (e.g., the service 154 A).
- a higher-layer network segmentation engine (such as the higher-layer network segmentation engine 158 A) performs authorization of a service instance relative to the cryptographic identity of the service corresponding to the service instance.
- the code for such an infrastructure-level reverse proxy or higher-layer network segmentation engine is separate from the code for a service (e.g., the service 154 A). An instance of such code is deployed separately from but alongside the code for a service to each of the user space runtime environments 150 A-R. Examples of such an implementation are the side car models implemented in Kubernetes and Docker. Accordingly, each of the user space runtime environments 150 A-R respectively includes an instance of a service, an instance of the code for the infrastructure-level reverse proxy, an instance of the code for the infrastructure-level higher-layer network segmentation engine.
- the higher-layer network segmentation engine may be implemented as part of the reverse proxy.
- the reverse proxy may be implemented using software such as Nginx, Envoy, and the like.
- the reverse proxy 156 A determines the payload of the network packet 140 is associated with performing a TLS handshake and, in response, performs (e.g., on behalf of the service 154 A) one or more operations (“mutual TLS (mTLS) handshake operation(s)”) (not shown) to perform the TLS handshake between the remote service instance and service 154 A using mutual authentication.
- mTLS temporary TLS
- mTLS requires a client to prove its identity to a server in addition to requiring the server to prove its identity to the client.
- These mTLS handshake operation(s) send and receive additional TLS handshake network packet(s) (not shown) respectively to and from the remote service instance through the lower layers 104 of the network stack 103 .
- These network packets traverse the lower layers 104 of the network stack 103 in the same path of the network packet 140 , which similarly triggers operations 1 , 2 , 3 A, and 4 A. More specifically, just like for the network packet 140 , at operation 2 , it is determined that no existing packet filtering rules accept network packets sent using the source networking address of any of these network packets. And at operation 3 A, it is determined that the payload of each of these network packets is associated with performing a TLS handshake between the remote service instance and the service 154 A.
- the reverse proxy 156 A may receive (e.g., in a network packet that includes a Certificate message) from the remote service instance a cryptographic certificate (e.g., an X.509 certificate) that includes a cryptographic identity (e.g., a secure production identity framework for everyone (SPIFFE) Id) of the remote service.
- a cryptographic certificate e.g., an X.509 certificate
- a cryptographic identity e.g., a secure production identity framework for everyone (SPIFFE) Id
- Such a certificate may be issued by a certificate authority (not shown) implemented (e.g., using the SPIFFE authentication standard) by the software provider that has implemented the remote service.
- a certificate authority also referred to as a trust domain or trust boundary
- Each cryptographic certificate may include a cryptographic identity (e.g., a SPIFFE ID in the format of spiffc://trust domain/workload identifier, such as spiffe://companyA.com/system_monitoring/logging) that is a unique identifier of a service for authentication purposes.
- different instances of a service may present the same certificate that is issued to the service and may be authenticated based on the same certificate.
- different instances of different services may query the same certificate authority (e.g., by invoking its API(s)) to authenticate the identity of a service when being presented with a cryptographic certificate by an instance of the service.
- the reverse proxy 156 A may query the certificate authority associated with the cryptographic certificate and may determine that the cryptographic identity of the remote service is valid.
- a security policy enforcer 160 A in higher-layer network segmentation engine 158 A may receive a request (e.g., via API(s)) for determining whether the remote service instance is authorized to access the service 154 A based on the cryptographic identity identified in the received cryptographic certificate.
- the security policy enforcer 160 A determines whether there is a security policy in converted security policies 162 that authorizes a service with such a cryptographic identity to access the service 154 A.
- the converted security policies 162 include security policies that are converted from policies that are in the same generic security policy document as described above (i.e., from which the packet filtering rules in the packet filtering rules 110 are created). Unlike the packet filtering rules, which are based on networking addresses, the converted security policies are based on cryptographic identities (e.g., SPIFFE IDs). Such converted security policies may be created using a process similar to how a policy input (e.g., policy input 106 ) is converted (e.g., by converter 104 ) to an internal representation of the policy input as described in detail in U.S. patent application Ser. No. 16/948,399, filed Sep. 16, 2020, and titled, “Network security orchestration and management across different clouds.”
- An example cryptographic identity-based security policy may be defined as follows:
- Such a security policy is converted from the generic security policy defined by source 236 and destination 232 as described in FIG. 2 A .
- service1, service2, service3 in destination 232 are respectively converted to SPIFFE IDs “spiffe://companyA.com/data_processing/sub_processing1,” “spiffe://companyA.com/data_processing/sub_processing2,” and “spiffe://companyA.com/data_processing/sub_processing3.”
- service4, service5, service6, service7, service8 in source 236 are respectively converted to SPIFFE IDs “spiffe://companyA.com/system_monitoring/logging1,” “spiffe://companyA.com/system_monitoring/logging2,” “spiffe://companyA.com/system_monitoring/logging3,” “spiffe://companyA.com/system_monitoring/logging4,” and “spiffe://companyA.com/system_monitoring/logging5.”
- the security policy enforcer 160 A may determine, based on the converted security policy above, that the remote service instance is authorized to access the service 154 A, e.g., because SPIFFEE ID “spiffe://companyA.com/system_monitoring/logging1” is the cryptographic identity identified in the cryptographic certificate sent by the remote service instance (i.e., an instance of service4) and “spiffe://companyA.com/data_processing/sub_processing1” is cryptographic identity of the a service (i.e., service1) corresponding to the service 154 A.
- the higher-layer network segmentation engine 158 A may perform one or more operations to cause a configuration such that the network packets sent using the networking address assigned to the remote service instance are now authorized to be processed by the higher layer 152 A of the network stack 103 .
- the higher-layer network segmentation engine 158 A may send (e.g., via API(s)) the remote service instance's networking address (and, in some implementations, the remote service's the cryptographic identity) (or otherwise make it available, such as allowing for the retrieval of it via API(s)) to a packet filtering rule modifier 116 .
- packet filtering rule modifier 116 causes a packet filtering rule to be added or modified in the packet filtering rules 110 such that the network packets sent using the remote service instance's networking address are now authorized by the lower-layer network segmentation engine 106 to be processed by a higher layer of the network stack 103 .
- the remote service may be service4 as described in FIG. 2 A
- the service 154 A may be an instance of service as described in FIG. 2 A
- such a packet filtering rule may be based on the generic security policy defined by source 236 and destination 232 , as described in FIG. 2 A .
- the rule may be defined as follows:
- source IP address 10.12.12.12 is the remote service instance's assigned networking address and port 443 is the common port number on which the remote service instance and service 154 A listen for inbound network traffic.
- “Any” is the value for the destination IP address(es) that represent the service(s) identified in destination 232 that listen for inbound network traffic on port 443 (e.g., service1).
- operation 8 A may be performed only after a determination that the mTLS handshake as described above has successfully completed between the remote service instance and service 154 A.
- the packet filtering rule modifier 116 invokes the encrypted connection handshake monitor 114 to check the status of the mTLS handshake (e.g., periodically, such as according to a predefined frequency) and in response the encrypted connection handshake monitor 114 may indicate whether the mTLS handshake has successfully completed.
- the encrypted connection handshake monitor 114 may implement a state machine for the mTLS handshake to keep track of the status of each expected TLS handshake message.
- operation 8 A may be performed as described above.
- a security policy that authorizes a first service within a first network segment to access a second service within a second network segment may be implemented as a rule that stipulates that access to the port of the second service is granted for network packets sent using any IP address in a block of IP addresses that are reserved for the first network segment.
- Such a block may be part of a larger block of IP addresses that are reserved for the entire network (e.g., according to the request for comment (RFC) 1918 standards).
- RRC request for comment
- Such a solution exposes destination services to more security risk (also referred to as attack surface) than necessary.
- the rule would authorize these service(s) to access the second service at its port number.
- the higher-layer network segmentation engine 158 A is implemented and deployed as part of the network security infrastructure.
- the infrastructure-level implementation described here allows for consistent enforcement of security policies across all the services.
- FIG. 1 B is a block diagram illustrating another aspect of network segmentation using multiple identities of a service according to some example implementations.
- the lower-layer network segmentation engine 106 may determine whether inbound network packets are authorized to be processed by a higher layer of the network stack 103 based on the connection on which the network packets are transmitted. For example, illustrating using the path in which the network packet 140 traverses the lower layers 104 of the network stack 103 as described in FIG. 1 A , in response to operation 3 A, it may be determined that the payload of the network packet 140 includes the first message in the TLS handshake (e.g., a ClientHello message). In response to this determination, the encrypted connection handshake monitor 114 performs operation 4 A 1 before operation 4 A.
- the TLS handshake e.g., a ClientHello message
- the encrypted connection handshake monitor 114 may add a data record to a connection tracking data table (not shown) that records the following data: 1) the remote service instance's IP address, 2) the remote service instance's port number, 3) the service's 154 A IP address, and 4) service's 154 A port number.
- a connection tracking data table may be implemented independently from any connection tracking mechanism implemented at a different lower layer of the network stack 103 (e.g., TCP connection tracking at the transport layer).
- Such a data record (“existing connection 1 ”) represents an existing connection between these two service instances.
- the existing connection 1 may be removed from the connection tracking data table, e.g., when it is determined that the mTLS handshake has failed to complete successfully or after a predefined period of inactivity in the connection.
- operations 4 A, 5 A, 6 A, 7 A, and 8 A are performed similarly to how they are performed as described in FIG. 1 A except that the mTLS handshake operations are performed in conjunction with the connection tracker 112 .
- the network packets associated with the mTLS handshake operations that follow the network packet 140 may be authorized by the packet filtering rule enforcer 108 to be processed by the higher layer 152 A of the network stack 103 when it is determined (at operation 3 C) they are associated with an existing connection (i.e., existing connection 1 ) before being forwarded (at operation 4 C) to the higher layer 152 A.
- an existing connection i.e., existing connection 1
- network packets following such a determination may be blocked from moving further in the lower layers 104 .
- the packet filtering rules 110 may include a generic rule that stipulates that network packets sent using an existing connection are authorized by the packet filtering rule enforcer 108 to be processed by the higher layer 152 A of the network stack 103 .
- the packet filtering rule enforcer 108 performs operation 3 C only after it has determined the generic rule exists.
- FIG. 2 A shows an example of a security policy document 200 A in JSON format, in accordance with some implementations
- FIG. 2 B shows an example of a security policy document 200 B in YAML format, in accordance with some implementations.
- Security policy documents 200 A and 200 B provide two examples of many different security policy documents based on which converted security policies as described in FIG. 1 A may be created.
- a security infrastructure is declared for a network (e.g., an enterprise network) that is defined as a particular instance of a data center.
- a network e.g., an enterprise network
- segments of the network are declared as security groups for the instance of the “datacenter1” data center (also referred to as a network 204 or network datacenter1).
- the network 204 include a first security group 208 (also referred to as network segment 208 ) named “Logging_Monitoring,” a second security group 212 (also referred to as network segment 212 ) named “Processing,” and a third security group 216 (also referred to as network segment 216 ) named “Gateway.”
- the list of service4, service5, service6, service7, service8, service9, and service 10 constitutes the network segment 208 .
- the list of service1, service2, and service3 constitute the network segment 212 .
- additional security groups/network segments with other names can be included in the declared network.
- security policies are declared for the “Logging_Monitoring” group 208 .
- each policy has at least two fields: a destination, and a source.
- the destination as well as the source of a policy can specify services as well as security groups.
- specific services and/or security groups can be identified and user-customized.
- a first policy is characterized by destination 224 and source 228 .
- a service and a group are named for destination 224 , while “all” services are identified for source 228 .
- a second policy is characterized by destination 232 and source 236 .
- a different set of services is specified for destination 232 , as is the case with the services listed for source 236 .
- only the services identified in the source 236 are authorized to access the services identified in the destination 232 according to the second policy.
- a “public” field 240 has a value of false, indicating that security group 208 is a private group as opposed to a public group.
- services in the security group are not exposed on the Internet or another data network.
- a port can be opened for services in this security group to accept incoming traffic from other internal services, that is, services within the instance of the data center in this example.
- an IP subnet range is defined for security group 208 . This IP subnet range specifies that all services in the particular security group will get an IP address from the designated range of 10.0.0.0/12.
- a functionality of security group 208 is described, indicating in this example that the security group's function is logging and monitoring other services.
- FIG. 3 is a flow diagram illustrating one aspect of network segmentation using multiple identities of a service according to some example implementations.
- the exemplary operations illustrated in FIG. 3 are the operations for segmenting a network (e.g., the multi-segment network as described in FIG. 1 A-B ) using multiple identities of a service.
- the operations of FIG. 3 may be performed as described in further details with respect to FIGS. 1 A-B .
- the flow of operations moves to block 312 , at which, responsive to the determination, the lower layers are caused to be configured (e.g., with the packet filtering rule no. 1) such that packets sent using the source address are now authorized to be processed by the higher layer (see circled 7 A, 8 A 1 , 8 A in FIG. 1 A ).
- the lower layers are caused to be configured (e.g., with the packet filtering rule no. 1) such that packets sent using the source address are now authorized to be processed by the higher layer (see circled 7 A, 8 A 1 , 8 A in FIG. 1 A ).
- this can be viewed as there being: 1) a configuration (during block 306 ) that causes processing at the lower layers to block packets sent using the source address unless the packets are associated with a handshake process to establish an encrypted connection; and 2) that configuration being modified (responsive to block 312 ) such that processing at the lower layers no longer blocks, based on the modified configuration (which may be referred to as a second configuration), packets sent using the source address.
- subsequent packets e.g., a third subsequent packet such as network packet 170 sent using the source address may be received (see circled 1 P in FIG. 1 A ).
- a third subsequent packet such as network packet 170
- the software executed to operate a user device (typically a server device) as a server may be referred to as server software or server code), while the software executed to operate a user device (typically a client device) as a client may be referred to as client software or client code.
- a server provides one or more services (also referred to as serves) to one or more clients.
- an instance of the software 428 is executed within the software container 404 A on the virtualization layer 408 .
- the instance 406 on top of a host operating system is executed on the “bare metal” electronic device 400 .
- the instantiation of the instance 406 , as well as the virtualization layer 408 and software containers 404 A- 404 R if implemented, are collectively referred to as software instance(s) 402 .
- the user devices 480 A- 480 S are operated by users 484 A- 484 S, and each may be operated as a client device and/or a server device. In some implementations, one or more of the user devices 480 A- 480 S are separate ones of the electronic device 400 or include one or more features of the electronic device 400 .
- one set of tenants may be vendors providing data and another set of tenants may be customers of different ones or all of the vendors' data.
- one set of tenants may be third-party application developers providing applications/services and another set of tenants may be customers of different ones or all of the third-party application developers.
- a multi-tenant architecture may include a single software instance (e.g., a single database instance) which is shared by multiple tenants; other implementations may include a single software instance (e.g., database instance) per tenant; yet other implementations may include a mixed model; e.g., a single software instance (e.g., an application instance) per tenant and another software instance (e.g., database instance) shared by multiple tenants.
- a single software instance e.g., a single database instance
- a mixed model e.g., a single software instance (e.g., an application instance) per tenant and another software instance (e.g., database instance) shared by multiple tenants.
- the system 440 is a multi-tenant cloud computing architecture supporting multiple services, such as one or more of the following types of services: Customer relationship management (CRM); Configure, price, quote (CPQ); Business process modeling (BPM); Customer support; Marketing; External data connectivity; Productivity; Database-as-a-Service; Data-as-a-Service (DAAS or DaaS); Platform-as-a-service (PAAS or PaaS);
- CRM Customer relationship management
- CPQ Configure, price, quote
- BPM Business process modeling
- Customer support Marketing
- External data connectivity Productivity
- Database-as-a-Service Data-as-a-Service
- DAAS or DaaS Data-as-a-Service
- PAAS or PaaS Platform-as-a-service
- IAAS or laaS Infrastructure-as-a-Service
- Analytics e.g., virtual machines, servers, and/or storage
- Community Internet-of-Things
- IoT Internet-of-Things
- AI Artificial intelligence
- Application marketplace (“app store”); Data modeling; Security; and Identity and access management (IAM); internal service(s) (e.g., microservice(s)) that implement one or more of the earlier-mentioned types of services.
- IAM Identity and access management
- internal service(s) e.g., microservice(s) that implement one or more of the earlier-mentioned types of services.
- system 440 may include an application platform 444 that enables PAAS for creating, managing, and executing one or more applications developed by the provider of the application platform 444 , users accessing the system 440 via one or more of user devices 480 A- 480 S, or third-party application developers accessing the system 440 via one or more of user devices 480 A- 480 S.
- an application platform 444 that enables PAAS for creating, managing, and executing one or more applications developed by the provider of the application platform 444 , users accessing the system 440 via one or more of user devices 480 A- 480 S, or third-party application developers accessing the system 440 via one or more of user devices 480 A- 480 S.
- one or more of the service(s) 442 may use one or more multi-tenant databases 446 , as well as system data storage 450 for system data 452 accessible to system 440 .
- the system 440 includes a set of one or more servers that are running on server electronic devices and that are configured to handle requests for any authorized user associated with any tenant (there is no server affinity for a user and/or tenant to a specific server).
- the user devices 480 A- 480 S communicate with the server(s) of system 440 to request and update tenant-level data and system-level data hosted by system 440 , and in response the system 440 (e.g., one or more servers in system 440 ) automatically may generate one or more Structured Query Language (SQL) statements (e.g., one or more SQL queries) that are designed to access the desired information from the multi-tenant database(s) 446 and/or system data storage 450 .
- SQL Structured Query Language
- the service(s) 442 are implemented using virtual applications dynamically created at run time responsive to queries from the user devices 380 A- 380 S and in accordance with metadata, including: 1) metadata that describes constructs (e.g., forms, reports, workflows, user access privileges, business logic) that are common to multiple tenants; and/or 2) metadata that is tenant specific and describes tenant specific constructs (e.g., tables, reports, dashboards, interfaces, etc.) and is stored in a multi-tenant database.
- constructs e.g., forms, reports, workflows, user access privileges, business logic
- tenant specific constructs e.g., tables, reports, dashboards, interfaces, etc.
- the program code 460 may be a runtime engine that materializes application data from the metadata; that is, there is a clear separation of the compiled runtime engine (also known as the system kernel), tenant data, and the metadata, which makes it possible to independently update the system kernel and tenant-specific applications and schemas, with virtually no risk of one affecting the others.
- the application platform 444 includes an application setup mechanism that supports application developers' creation and management of applications, which may be saved as metadata by save routines. Invocations to such applications, including the service instances (e.g., service 154 A), may be coded using Procedural Language/Structured Object Query Language (PL/SOQL) that provides a programming language style interface. Invocations to applications may be detected by one or more system processes, which manages retrieving application metadata for the tenant making the invocation and executing the metadata as an application in a software container (e.g., a virtual machine).
- PL/SOQL Procedural Language/Structured Object Query Language
- Network 482 may be any one or any combination of a LAN (local area network), WAN (wide area network), telephone network, wireless network, point-to-point network, star network, token ring network, hub network, or other appropriate configuration.
- the network may comply with one or more network protocols, including an Institute of Electrical and Electronics Engineers (IEEE) protocol, a 3rd Generation Partnership Project (3GPP) protocol, a 4th generation wireless protocol (4G) (e.g., the Long Term Evolution (LTE) standard, LTE Advanced, LTE Advanced Pro), a fifth generation wireless protocol (5G), and/or similar wired and/or wireless protocols, and may include one or more intermediary devices for routing data between the system 440 and the user devices 480 A- 480 S.
- IEEE Institute of Electrical and Electronics Engineers
- 3GPP 3rd Generation Partnership Project
- 4G 4th generation wireless protocol
- LTE Long Term Evolution
- LTE Advanced Pro LTE Advanced
- 5G fifth generation wireless protocol
- 5G fifth generation wireless protocol
- Each user device 480 A- 480 S typically includes one or more user interface devices, such as a keyboard, a mouse, a trackball, a touch pad, a touch screen, a pen or the like, video or touch free user interfaces, for interacting with a graphical user interface (GUI) provided on a display (e.g., a monitor screen, a liquid crystal display (LCD), a head-up display, a head-mounted display, etc.) in conjunction with pages, forms, applications and other information provided by system 440 .
- GUI graphical user interface
- the user interface device can be used to access data and applications hosted by system 440 , and to perform searches on stored data, and otherwise allow one or more of users 484 A- 484 S to interact with various GUI pages that may be presented to the one or more of users 484 A- 484 S.
- User devices 480 A- 480 S might communicate with system 440 using TCP/IP (Transfer Control Protocol and Internet Protocol) and, at a higher network level, use other networking protocols to communicate, such as Hypertext Transfer Protocol (HTTP), File Transfer Protocol (FTP), Andrew File System (AFS), Wireless Application Protocol (WAP), Network File System (NFS), an application program interface (API) based upon protocols such as Simple Object Access Protocol (SOAP), Representational State Transfer (REST), etc.
- TCP/IP Transfer Control Protocol and Internet Protocol
- HTTP Hypertext Transfer Protocol
- FTP File Transfer Protocol
- AFS Andrew File System
- WAP Wireless Application Protocol
- NFS Network File System
- API application program interface
- SOAP Simple Object Access Protocol
- REST Re
- one or more user devices 480 A- 480 S might include an HTTP client, commonly referred to as a “browser,” for sending and receiving HTTP messages to and from server(s) of system 440 , thus allowing users 484 A- 484 S of the user devices 480 A- 480 S to access, process and view information, pages and applications available to it from system 440 over network 482 .
- HTTP HyperText Transfer Protocol
- the figure(s) illustrating flow diagrams sometimes refer to the figure(s) illustrating block diagrams, and vice versa.
- the alternative implementations discussed with reference to the figure(s) illustrating block diagrams also apply to the implementations discussed with reference to the figure(s) illustrating flow diagrams, and vice versa.
- the scope of this description includes implementations, other than those discussed with reference to the block diagrams, for performing the flow diagrams, and vice versa.
- Coupled is used to indicate that two or more elements, which may or may not be in direct physical or electrical contact with each other, co-operate or interact with each other.
Landscapes
- Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Computer Hardware Design (AREA)
- Computing Systems (AREA)
- General Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
Implementation(s) for multi-factor network segmentation are described. A plurality of packets at a higher layer of a network stack is processed, where at least one packet of the plurality of packets was previously determined, as part of processing the at least one packet at lower layers of the network stack, to be authorized to be processed by the higher layer. Specifically, responsive to successful authentication of a cryptographic certificate received during the handshake process, a second service is identified from the cryptographic certificate. It is determined, based on a security policy, that the second service is authorized to access the first service. Responsive to the determination, a configuration is caused such that packets sent using the source address are now authorized to be processed by the higher layer.
Description
This application claims the benefit of U.S. Provisional Application No. 63/516,454, filed Jul. 28, 2023, which is hereby incorporated by reference.
One or more implementations relate to the field of network segmentation; and more specifically, to the segmentation of services (e.g., services deployed in a cloud environment) on a network using multiple identities of each service.
In a service-oriented software design, each service is a discrete unit of functionality that can be accessed remotely and acted upon. Different services can operate in concert to provide the functionality of a larger application (e.g., software-as-a-service (SaaS) in a cloud environment) that end users interact with. In such a case, such services are transparent to the end users and they communicate with each other to fulfil the requests from the end users. One example architecture of the service-oriented design is the microservice architecture where each service is fine-grained, for example, to facilitate flexibility in development, deployment, scaling, etc.
Such services are typically deployed and hosted on a network of a software provider (e.g., a SaaS provider on a cloud platform) and organized in segments (e.g., logical segments) of the network (also referred to as network segments). A network segment may be defined based on the characteristics of the data handled by services. For example, the services that store sensitive customer information (e.g., personal identifiable information, credit card information, etc.) may be defined as a network segment whereas other services may be defined as different network segment(s). A network segment may be defined based on the functions performed by services. For example, the services that handle data processing may be defined as a network segment. As another example, the services that monitor system behaviors (e.g., logging) may be defined as a network segment. The definition of which service(s) make up a network segment may be included in a security policy document.
Such services may be allowed to communicate with each other with no restrictions when they are within the same network segment. On the other hand, when they are located within different network segments, they may be allowed to communicate with each other only when they comply with certain security policy(s). For example, the services within a first network segment may be authorized to access only a subset of the services within a second network segment. As another example, only a subset of the services within the first network segment may be authorized to access any service within the second network segment. As yet another example, only a first service within the first network segment may be authorized to access a second service within the second network segment. Such security policies may be included in the security policy document as described above and may be enforced during operation.
During operation, enforcement of such security policy(s) against inbound network packets includes first authenticating an instance of a service that sends the network packets. In some implementations, the networking address assigned to an instance of the service serves as the identity of the instance of the service for authentication purposes. For example, when one or more instances of a service is hosted on an electronic device in a cloud environment (e.g., an electronic device that hosts containerized services/applications (e.g., microservices)), each instance of the service may be dynamically assigned a networking address at runtime (e.g., an IP address according to the TCP/IP networking protocol, e.g., as part of assigning an IP address to a Kubernetes pod). Such a networking address (rather than the electronic device's static networking address) is included as the source networking address in the network packets and may serve as the identity of an instance of the service. Subsequently, authorization of the instance of the service may be performed relative to its assigned networking address according to networking address-based access control rule(s) (e.g., packet filtering rules) that are based on the security policy document as described above. The authorization may be performed in the lower layers of the network stack of the electronic device (e.g., internet and transport layers of the network stack that is a software implementation of the TCP/IP networking protocol suite). Such an approach provides “defense in depth” such that potential attacks on an instance of a service that is deployed in a higher layer (e.g., the application layer) of the network stack can be stopped before they reach the higher layer.
In other implementations, a cryptographic identity assigned to the service serves as the identity of instances of the service. For example, the software provider of the service may implement a certificate authority that issues a cryptographically verifiable document (e.g., an X.509 certificate or a javascript object notation (JSON) web token) for each service (e.g., a microservice). Each cryptographically verifiable document includes a unique cryptographic identity of the service. During operation, an instance of a service may be authenticated relative to the unique cryptographic identity of the service. Subsequently, authorization of the instance of the service may be performed also relative to the cryptographic identity of the service according to converted security policies(s) that are cryptographic identity-based and that are created based on the same security policy document as described above. The authorization may be performed in a higher layer (e.g., within the code for the service in the application layer) of the network stack. Such an approach is based on a zero trust architecture and provides defense from potential attacks where the service is deployed.
The following figures use like reference numbers to refer to like elements. Although the following figures depict various example implementations, alternative implementations are within the spirit and scope of the appended claims. In the drawings:
The following description describes implementations for enforcing security policies for communications between services in different segments of a network (e.g., a network used by a software provider to implement services (e.g., SaaS) in a cloud environment) where the enforcement is based on multiple identities of each service, e.g., a cryptographic identity and a networking address. For example, when an instance of a first service within a first segment of a network requests access to an instance of a second service within a second network segment, the authorization of the request is first performed successfully relative to the cryptographic identity (e.g., an identity in an X.509 certificate) of the first service. More specifically, the authorization is performed, based on a cryptographic identity-based security policy that is converted from a generic security policy, in a higher layer (e.g., the application layer that is implemented according to a higher layer protocol such as hypertext transfer protocol (HTTP), transport layer security (TLS), etc.) of a network stack (e.g., a TCP/IP network stack) that is implemented in the electronic device that hosts the second service. And the authorization is performed in a network segmentation engine in the higher layer that is separate from the implementation of the second service. Based on successful authorization of the request in the higher layer of the network stack, the networking address assigned to the instance of the first service is added to an access control rule (e.g., a packet filtering rule) in the lower layers of the network stack (e.g., the internet and transport layers). More specifically, the access control rule is based on the same generic security policy above and authorizes future requests if they are sent using the same networking address as the networking address assigned to the instance of the first service.
The electronic device 100 (e.g., an electronic service 200 shown in FIG. 4A that operates as a server device) hosts instance(s) of one or more services (e.g., microservices), such as an instance like a service 154A in a user space runtime environment 150A on the electronic device 100. Instance(s) of service(s) hosted on one or more electronic devices such as the electronic device 100 constitute an instance of a larger application (e.g., software-as-a-service (SaaS) in a cloud environment) that end user(s) interact with.
Such electronic devices are part of a network (“multi-segment network”) (e.g., network 204 as described in FIG. 2A ) of a software provider (e.g., a SaaS provider on a cloud platform), e.g., that is implemented using network virtualization (e.g., software defined network (SDN), network functions virtualization (VFN), etc.). Services hosted on the multi-segment network are organized in segments (also referred to as network segments) (e.g., network segments 208, 212, and 216 as described in FIG. 2A ). The definition of which service(s) constitute a network segment may be included in a generic security policy document (e.g., the security policy document 200A as described in FIG. 2A ).
The kernel space runtime environment 102 is a runtime environment where an operating system kernel of the electronic device 100 runs. A network stack 103 is an implementation of the abstraction layers of a networking protocol suite (e.g., a TCP/IP protocol suite). Lower layers 104 of the network stack 103 represent the implementation of the part of the network stack 103 that operates in the kernel space runtime environment 102. In the case of the network stack 103 being implemented based on TCP/IP, the networking hardware (e.g., a network interface controller, such as network interface(s) 424 shown in FIG. 4A ) is an implementation of a link layer. And the lower layers 104 may be multiple lower layers of software implementation that implement an internet, transport, and application abstraction layer. For example, a first lower layer may implement a first interface between the networking hardware and a second lower layer that implements the internet abstraction layer. Such a first lower layer is typically associated with a device driver. A third lower layer may implement the transport abstraction layer. A fourth lower layer may implement a second interface between the third lower layer and a higher layer (e.g., a higher layer 152A) of the network stack 103 that implements the application abstraction layer. Such a fourth lower layer is typically a socket interface (e.g., Berkely sockets, Winsock, etc.). In some implementations, the kernel space runtime environment 102 is part of a guest operating system's kernel space. In other implementations, the kernel space runtime environment 102 is part of a network namespace in containerized environment.
During operation, the lower layers 104 process both inbound and outbound network packets and move them through the layers and to or from a higher layer of network stack 103, e.g., according to a networking protocol suite (e.g., TCP/IP).
User space runtime environments 150A-R represent one or more runtime environments where an instance of a service (also referred to as a service instance) (e.g., a service 154A, which is an instance of a service such as service1 as described in FIG. 2A ) runs in each. Example implementations of such runtime environments may include a Kubernetes pod and a multi-container Docker application instance where more than one container/process run and share resources in the same runtime environment.
Service instances (e.g., the service 154A) in the user space runtime environments 150A-R are instances of services that are defined as part of a first segment of the multi-segment network (e.g., service1 of the network segment 212 as described in FIG. 2A ) according to the same generic security policy document above. Each service instance may be dynamically assigned a networking address at runtime (e.g., an IP address according to the TCP/IP protocol, e.g., as part of assigning an IP address to a Kubernetes pod). Such a networking address (rather than the electronic device's 100 static networking address) is included as the destination address in network packets destined for the corresponding service instance. Such a networking address is also included as the source networking address in network packets sent from the corresponding service instance.
Returning to the kernel space runtime environment 102, a lower-layer network segmentation engine 106 is part of the network security infrastructure implementation of the multi-segment network and may be implemented at various locations in the lower layers 104 to perform filtering of inbound network packets to either deny or authorize their further movement in the network stack. While in one implementation the lower-layer network segmentation engine 106 is implemented just before the processing of network packets at the first lower layer in the example above, in other implementations it is implemented at different locations (e.g., as part of the processing of network packets at the first lower layer, just before the processing of network packets at the second lower layer in the example above, as part of the processing of network packets at the second lower layer, etc.). The lower-layer network segmentation engine 106 may be implemented based on an extended Berkeley Packet Filter (eBPF), which is a technology that allows for running user space software programs in the kernel space of an operating system. The filtering of network packets in the lower-layer network segmentation engine 106 may operate in addition to or in concert with the filtering of network packets implemented in the kernel code for the lower layers 104 (e.g., kernel modules such as ip_tables, ip6_tables, arp_tables, etc.).
The lower-layer network segmentation engine 106 may perform one or more operations to determine whether each of the inbound network packets that are sent from outside the first segment is authorized to move further in the network stack 103, e.g., to be processed by a higher layer of the network stack 103. It may first enforce packet filtering rules based on the source networking address of each packet. For example, at operation 1, a packet filtering rule enforcer 108 receives a network packet 140 (e.g., that is an inbound network packet). The network packet 140 includes a source networking address identifying the networking address of an instance of a remote service (e.g., service4 as described in FIG. 2A ) (“remote service instance”) that has sent the network packet 140 where the remote service instance is hosted within a second segment of the multi-segment network (e.g., the network segment 208 as described in FIG. 2A ). The network packet 140 also includes a destination networking address identifying the networking address of the service 154A. In response, the packet filtering rule enforcer 108 determines the source networking address of the network packet 140 is one of the valid networking addresses (e.g., a pool/range of IP addresses that are owned by the software provider to which the multi-segment network belongs). In such a manner, using the source networking address as an identity, the packet filtering rule enforcer 108 has authenticated the remote service instance.
Following authentication, at operation 2, the packet filtering rule enforcer 108 determines whether there is a packet filter rule in packet filtering rules 110 that accept network packets sent using the source networking address of the network packet 140. The packet filtering rules 110 includes packet filtering rules that are based on security policies (e.g., the second policy that is defined by the source 236 and destination 232 as described in FIG. 2A ) in the generic security policy document as described above.
Continuing with operation 2, the packet filtering rule enforcer 108 may determine that no existing packet filtering rules accept network packets sent using the source networking address of the network packet 140. Such a configuration alone would have caused the network packet 140 to be blocked from moving further in the network stack 103 (e.g., to be processed by a higher layer of the network stack 103). However, in such a situation, the lower-layer network segmentation engine 106 may perform additional operation(s) with respect to the payload of each inbound network packet. For example, following the operation 2's determination above, in response, at operation 3A, an encrypted connection handshake monitor 114 is invoked to determine whether the payload of the network packet 140 is associated with performing a handshake for establishing an encrypted connection (e.g., a TLS handshake), e.g., after a TCP connection has been established (e.g., with a reverse proxy 156A in the higher layer 152A of the network stack 103). Examples of a payload that is associated with performing a TLS handshake include a ClientHello message, a Certificate message, etc.
In response to operation 3A, the encrypted connection handshake monitor 114 may determine that the payload of the network packet 140 is associated with performing a TLS handshake between the remote service instance and the service 154A. In such a case, at operation 4A, the encrypted connection handshake monitor 114 forwards the network packet 140 to be processed by the higher layer 152A of the network stack 103, specifically, the reverse proxy 156A. In some implementations, the network packet 140 is forwarded for additional processing by other lower layer(s) in the lower layers 104 before being forwarded to the higher layer 152A for processing.
As shown, the higher layer 152A of the network stack 103 represents the logical grouping of the service 154A, the reverse proxy 156A, and a higher-layer network segmentation engine 158A. As a person skilled in the art would appreciate, in some cases, the service 154A alone may be deemed the higher layer 152A of the network stack 103.
A reverse proxy (e.g., the reverse proxy 156A) and a higher-layer network segmentation engine (e.g., the higher-layer network segmentation engine 158A) are part of the network security infrastructure implementation. The reverse proxy may perform one or more functions on network traffic to/from the lower layers 104 of the network stack 103 and network traffic to/from a service instance within the same higher layer of the network stack 103. These functions may include (1) performing a TLS or mutual TLS (mTLS) handshake; (2) terminating an encrypted connection (e.g., a TLS connection); and (3) forwarding data in inbound network packets (e.g., inbound application layer data) to the service instance for processing, e.g., using an unencrypted connection after an encrypted connection (e.g., a TLS connection) is terminated; and (4) determining whether data in inbound network packets is authorized to be processed by the service instance (e.g., the service 154A). A higher-layer network segmentation engine (such as the higher-layer network segmentation engine 158A) performs authorization of a service instance relative to the cryptographic identity of the service corresponding to the service instance.
The code for such an infrastructure-level reverse proxy or higher-layer network segmentation engine is separate from the code for a service (e.g., the service 154A). An instance of such code is deployed separately from but alongside the code for a service to each of the user space runtime environments 150A-R. Examples of such an implementation are the side car models implemented in Kubernetes and Docker. Accordingly, each of the user space runtime environments 150A-R respectively includes an instance of a service, an instance of the code for the infrastructure-level reverse proxy, an instance of the code for the infrastructure-level higher-layer network segmentation engine. In some implementations, the higher-layer network segmentation engine may be implemented as part of the reverse proxy. The reverse proxy may be implemented using software such as Nginx, Envoy, and the like.
In response to operation 4A, the reverse proxy 156A determines the payload of the network packet 140 is associated with performing a TLS handshake and, in response, performs (e.g., on behalf of the service 154A) one or more operations (“mutual TLS (mTLS) handshake operation(s)”) (not shown) to perform the TLS handshake between the remote service instance and service 154A using mutual authentication. Unlike the default TLS authentication method, mTLS requires a client to prove its identity to a server in addition to requiring the server to prove its identity to the client. These mTLS handshake operation(s) send and receive additional TLS handshake network packet(s) (not shown) respectively to and from the remote service instance through the lower layers 104 of the network stack 103. These network packets traverse the lower layers 104 of the network stack 103 in the same path of the network packet 140, which similarly triggers operations 1, 2, 3A, and 4A. More specifically, just like for the network packet 140, at operation 2, it is determined that no existing packet filtering rules accept network packets sent using the source networking address of any of these network packets. And at operation 3A, it is determined that the payload of each of these network packets is associated with performing a TLS handshake between the remote service instance and the service 154A.
During the mTLS handshake operation(s), the reverse proxy 156A may receive (e.g., in a network packet that includes a Certificate message) from the remote service instance a cryptographic certificate (e.g., an X.509 certificate) that includes a cryptographic identity (e.g., a secure production identity framework for everyone (SPIFFE) Id) of the remote service.
Such a certificate may be issued by a certificate authority (not shown) implemented (e.g., using the SPIFFE authentication standard) by the software provider that has implemented the remote service. Such a certificate authority (also referred to as a trust domain or trust boundary) may issue a cryptographic certificate to services deployed in one or more networks (e.g., network 204 as described in FIG. 2A ). Each cryptographic certificate may include a cryptographic identity (e.g., a SPIFFE ID in the format of spiffc://trust domain/workload identifier, such as spiffe://companyA.com/system_monitoring/logging) that is a unique identifier of a service for authentication purposes. That is, during operation, different instances of a service may present the same certificate that is issued to the service and may be authenticated based on the same certificate. In such a manner, different instances of different services may query the same certificate authority (e.g., by invoking its API(s)) to authenticate the identity of a service when being presented with a cryptographic certificate by an instance of the service.
Continuing with the example above, in response to receiving the cryptographic certificate from the remote service instance, the reverse proxy 156A may query the certificate authority associated with the cryptographic certificate and may determine that the cryptographic identity of the remote service is valid.
Following authentication, the higher-layer network segmentation engine 158A is invoked to perform authorization of the remote service instance relative to the cryptographic identity of the remote service. Continuing with the example above, at operation 5A, a security policy enforcer 160A in higher-layer network segmentation engine 158A may receive a request (e.g., via API(s)) for determining whether the remote service instance is authorized to access the service 154A based on the cryptographic identity identified in the received cryptographic certificate. In response, at operation 6A, the security policy enforcer 160A determines whether there is a security policy in converted security policies 162 that authorizes a service with such a cryptographic identity to access the service 154A.
The converted security policies 162 include security policies that are converted from policies that are in the same generic security policy document as described above (i.e., from which the packet filtering rules in the packet filtering rules 110 are created). Unlike the packet filtering rules, which are based on networking addresses, the converted security policies are based on cryptographic identities (e.g., SPIFFE IDs). Such converted security policies may be created using a process similar to how a policy input (e.g., policy input 106) is converted (e.g., by converter 104) to an internal representation of the policy input as described in detail in U.S. patent application Ser. No. 16/948,399, filed Sep. 16, 2020, and titled, “Network security orchestration and management across different clouds.” An example cryptographic identity-based security policy may be defined as follows:
| { |
| “destination”: { |
| “services”: [ |
| “spiffe://companyA.com/data_processing/sub_processing1”, |
| “spiffe://companyA.com/data_processing/sub_processing2”, |
| “spiffe://companyA.com/data_processing/sub_processing3”, |
| ] |
| }, |
| ″source”: { |
| ″services”: [ |
| “spiffe://companyA.com/system_monitoring/logging1”, |
| “spiffe://companyA.com/system_monitoring/logging2”, |
| “spiffe://companyA.com/system_monitoring/logging3”, |
| “spiffe://companyA.com/system_monitoring/logging4”, |
| “spiffe://companyA.com/system_monitoring/logging5”, |
| ] |
| } |
Such a security policy is converted from the generic security policy defined by source 236 and destination 232 as described in FIG. 2A . Specifically, service1, service2, service3 in destination 232 are respectively converted to SPIFFE IDs “spiffe://companyA.com/data_processing/sub_processing1,” “spiffe://companyA.com/data_processing/sub_processing2,” and “spiffe://companyA.com/data_processing/sub_processing3.” Similarly, service4, service5, service6, service7, service8 in source 236 are respectively converted to SPIFFE IDs “spiffe://companyA.com/system_monitoring/logging1,” “spiffe://companyA.com/system_monitoring/logging2,” “spiffe://companyA.com/system_monitoring/logging3,” “spiffe://companyA.com/system_monitoring/logging4,” and “spiffe://companyA.com/system_monitoring/logging5.”
Continuing with operation 6A, the security policy enforcer 160A may determine, based on the converted security policy above, that the remote service instance is authorized to access the service 154A, e.g., because SPIFFEE ID “spiffe://companyA.com/system_monitoring/logging1” is the cryptographic identity identified in the cryptographic certificate sent by the remote service instance (i.e., an instance of service4) and “spiffe://companyA.com/data_processing/sub_processing1” is cryptographic identity of the a service (i.e., service1) corresponding to the service 154A.
In response to successful authorization, the higher-layer network segmentation engine 158A may perform one or more operations to cause a configuration such that the network packets sent using the networking address assigned to the remote service instance are now authorized to be processed by the higher layer 152A of the network stack 103. For example, following the operation 6A's determination, at operation 7A, the higher-layer network segmentation engine 158A may send (e.g., via API(s)) the remote service instance's networking address (and, in some implementations, the remote service's the cryptographic identity) (or otherwise make it available, such as allowing for the retrieval of it via API(s)) to a packet filtering rule modifier 116.
Continuing with operation 7A, packet filtering rule modifier 116 receives the remote service instance's networking address (or otherwise gain access to it) (e.g., via a mechanism implemented using an eBPF map, which allows for data sharing between a software program (e.g., the higher-layer network segmentation engine 158A) that executes in the user space and a software program (i.e., the lower-layer network segmentation engine 106) that executes in the kernel space).
In response, at operation 8A, based on the remote service instance's networking address (and, in some implementations, the remote service's the cryptographic identity), packet filtering rule modifier 116 causes a packet filtering rule to be added or modified in the packet filtering rules 110 such that the network packets sent using the remote service instance's networking address are now authorized by the lower-layer network segmentation engine 106 to be processed by a higher layer of the network stack 103. For example, the remote service may be service4 as described in FIG. 2A , the service 154A may be an instance of service as described in FIG. 2A , and such a packet filtering rule may be based on the generic security policy defined by source 236 and destination 232, as described in FIG. 2A . Specifically, the rule may be defined as follows:
| Source | Destination | ||||
| IP | IP | ||||
| Rule no. | Permission | Protocol | Address(es) | Address(es) | Port |
| 1 | Accept | TCP | 10.12.12.12 | Any | 443 |
In packet filtering rule no. 1 above, source IP address 10.12.12.12 is the remote service instance's assigned networking address and port 443 is the common port number on which the remote service instance and service 154A listen for inbound network traffic. Also as shown in the rule, “Any” is the value for the destination IP address(es) that represent the service(s) identified in destination 232 that listen for inbound network traffic on port 443 (e.g., service1). In some implementations, the packet filtering rules 110 may store rules that do not directly store IP address(es) (e.g., 10.12.12.12) and may only store a reference to the IP address(es) that are maintained separately from the packet filtering rules 110 (e.g., using a utility and/or kernel module, such as IP sets (also referred to as IP set or ipset). In such implementations, IP addresses that are associated with the same cryptographic identity may be used to create a set that is labeled with the cryptographic identity and may be referenced by the cryptographic identity in the packet filtering rules 110.
In some implementations, operation 8A may be performed only after a determination that the mTLS handshake as described above has successfully completed between the remote service instance and service 154A. For example, in response to receiving the remote service instance's networking address (as described above), at operation 8A1, the packet filtering rule modifier 116 invokes the encrypted connection handshake monitor 114 to check the status of the mTLS handshake (e.g., periodically, such as according to a predefined frequency) and in response the encrypted connection handshake monitor 114 may indicate whether the mTLS handshake has successfully completed. For instance, the encrypted connection handshake monitor 114 may implement a state machine for the mTLS handshake to keep track of the status of each expected TLS handshake message. In response to an indication of successful completion of the mTLS handshake, operation 8A may be performed as described above.
Being now configured with such a packet filtering rule as the packet filtering rule no. 1, the lower layers 104 of the network stack 103 authorizes future network packets sent using the remote service instance's networking address. For example, at operation 1P, the packet filtering rule enforcer 108 may receive a network packet 170 that is carried over the encrypted connection as established by the mTLS handshake above. The network packet 170 includes a source networking address identifying the networking address of the remote service instance and a destination networking address identifying the networking address of the service 154A. In response, the packet filtering rule enforcer 108 authenticates the remote service instance similarly to how the remote service instance was authenticated with respect to the network packet 140 as described above. Following authentication, operation 2P is performed to determine whether there is a configuration (e.g., a packet filter rule in packet filtering rules 110) that accepts network packets sent using the source networking address of the network packet 170. As a result, the packet filtering rule enforcer 108 determines that such a configuration (i.e., packet filtering rule no. 1 above) exists and accepts the network packet 170. In response, at operation 3B, the packet filtering rule enforcer 108 forwards the network packet 170 to be processed by the higher layer 152A of the network stack 103, specifically, the reverse proxy 156A. In response, at operation 5B, the reverse proxy 156A determines the payload of the network packet 140 includes higher layer data (e.g., application layer data) and, in response, forwards the data for processing by the service 154A.
The higher-layer network segmentation engine 158A and lower-layer network segmentation engine 106 described herein provide several advantages over the prior art. Networking address (IP)-based enforcement of security policies that controls network traffic between services in different segments of a network may result in undesirable outcomes. Specifically, each instance of the same service is typically assigned a different IP address dynamically at runtime. Also, when an existing instance of a service is terminated (e.g., as part of the termination of a Kubernetes pod), a replacement instance of the service is typically assigned a different IP address. Accordingly, network packets sent using such different IP addresses may be denied access to the destination services, e.g., if such different IP addresses are not recognized as authorized IP addresses (e.g., in internet and transport layers of a TCP/IP network stack).
One typical solution to such a problem is to enforce such security policies based on a block of IP addresses (e.g., in a format such as “10.0.0.0/12”) instead. For example, a security policy that authorizes a first service within a first network segment to access a second service within a second network segment may be implemented as a rule that stipulates that access to the port of the second service is granted for network packets sent using any IP address in a block of IP addresses that are reserved for the first network segment. Such a block may be part of a larger block of IP addresses that are reserved for the entire network (e.g., according to the request for comment (RFC) 1918 standards). However, such a solution exposes destination services to more security risk (also referred to as attack surface) than necessary. For example, continuing with the example above, there may be other service(s) within the first network segment that are unauthorized to access the second service according to the security policy. The rule would authorize these service(s) to access the second service at its port number.
Here, even when the IP address of an instance of a service is currently unauthorized based on IP address-based access control rules in the lower layers of a network stack, the lower-layer network segmentation engine 106 allows network traffic from such service instance to move through the lower layers of the network stack so that the higher-layer network segmentation engine 158A may enforce such security policies at a higher layer (e.g., the application layer) of the network stack based on an immutable cryptographic identity (e.g., a SPIFFE ID) of a service. In such a manner, the above issues that arise from the dynamic nature of the IP addresses assigned to instances of services are avoided. Specifically, different instances of the same source service with different IP addresses are authorized to access a destination service instance if the source service is authorized according to a security policy. Additionally, network traffic may be reduced due to the elimination of the retransmission of network packets that would have been rejected based on IP address-based access control rules. As a result, the processing of such retransmitted network packets may also be eliminated.
Further, the higher-layer network segmentation engine 158A is implemented and deployed as part of the network security infrastructure. In comparison to the typical implementation of enforcing security polices being within the code for the service(s) (and hence being left at the discretion of the developer(s) of the service(s)), the infrastructure-level implementation described here allows for consistent enforcement of security policies across all the services.
Even further, such authorization outcome(s) are further used to automatically create an IP address-based access control rule that is enforced by the lower-layer network segmentation engine 106 in lower layers of the network stack. Such a technique allows for defense in depth that stops potential attacks before they reach the higher layer. Additionally, such a technique eliminates the need for manually maintaining the IP address(es) of the access control rule(s) in the lower layers of a network stack as these IP address(es) are reassigned (e.g., to instances of unauthorized service(s)) or as new IP address(es) are assigned to instance(s) of an authorized service.
In some implementations, the lower-layer network segmentation engine 106 may determine whether inbound network packets are authorized to be processed by a higher layer of the network stack 103 based on the connection on which the network packets are transmitted. For example, illustrating using the path in which the network packet 140 traverses the lower layers 104 of the network stack 103 as described in FIG. 1A , in response to operation 3A, it may be determined that the payload of the network packet 140 includes the first message in the TLS handshake (e.g., a ClientHello message). In response to this determination, the encrypted connection handshake monitor 114 performs operation 4A1 before operation 4A. Specifically, the encrypted connection handshake monitor 114 may add a data record to a connection tracking data table (not shown) that records the following data: 1) the remote service instance's IP address, 2) the remote service instance's port number, 3) the service's 154A IP address, and 4) service's 154A port number. Such a connection tracking data table may be implemented independently from any connection tracking mechanism implemented at a different lower layer of the network stack 103 (e.g., TCP connection tracking at the transport layer). Such a data record (“existing connection 1”) represents an existing connection between these two service instances. The existing connection 1 may be removed from the connection tracking data table, e.g., when it is determined that the mTLS handshake has failed to complete successfully or after a predefined period of inactivity in the connection.
Following operation 4A1, operations 4A, 5A, 6A, 7A, and 8A are performed similarly to how they are performed as described in FIG. 1A except that the mTLS handshake operations are performed in conjunction with the connection tracker 112. Specifically, the network packets associated with the mTLS handshake operations that follow the network packet 140 may be authorized by the packet filtering rule enforcer 108 to be processed by the higher layer 152A of the network stack 103 when it is determined (at operation 3C) they are associated with an existing connection (i.e., existing connection 1) before being forwarded (at operation 4C) to the higher layer 152A. However, in the event it is determined that mTLS handshake has failed to complete, network packets following such a determination may be blocked from moving further in the lower layers 104.
Further in such implementations, in the event that mTLS handshake has successfully completed (i.e., existing connection 1 still exists in the connection tracking data table), when the network packet 170 as described in FIG. 1A is received, it may be accepted based on the presence of the existing connection 1 (instead of the presence of the packet filtering rule no. 1). As a person skilled in the art would appreciate, such a connection-based operation allows for faster lookups.
Yet further in such implementations, when the existing connection 1 has been removed after a predefined period of inactivity in the connection, further network packets sent by the remote service instance using a new TCP connection to establish an encrypted connection handshake may be authorized to be processed by the higher layer 152A of the network stack 103 again based on the presence of the packet filtering rule no. 1.
In some implementations, the packet filtering rules 110 may include a generic rule that stipulates that network packets sent using an existing connection are authorized by the packet filtering rule enforcer 108 to be processed by the higher layer 152A of the network stack 103. In such implementations, the packet filtering rule enforcer 108 performs operation 3C only after it has determined the generic rule exists.
At 220 of FIG. 2A , security policies are declared for the “Logging_Monitoring” group 208. There can be zero policies, one policy, or any number of policies declared for a particular security group. In the example of FIG. 2A , each policy has at least two fields: a destination, and a source. The destination as well as the source of a policy can specify services as well as security groups. Thus, specific services and/or security groups can be identified and user-customized. There can be one or many services and/or groups set for the particular policy. In this example, a first policy is characterized by destination 224 and source 228. A service and a group are named for destination 224, while “all” services are identified for source 228. Thus, there are no restrictions on which services can transmit data as a source for the first policy. A second policy is characterized by destination 232 and source 236. A different set of services is specified for destination 232, as is the case with the services listed for source 236. Thus, only the services identified in the source 236 are authorized to access the services identified in the destination 232 according to the second policy.
In the example of FIG. 2A , a “public” field 240 has a value of false, indicating that security group 208 is a private group as opposed to a public group. In other words, services in the security group are not exposed on the Internet or another data network. Thus, a port can be opened for services in this security group to accept incoming traffic from other internal services, that is, services within the instance of the data center in this example. At 242, an IP subnet range is defined for security group 208. This IP subnet range specifies that all services in the particular security group will get an IP address from the designated range of 10.0.0.0/12. At 244, a functionality of security group 208 is described, indicating in this example that the security group's function is logging and monitoring other services. A list of names of services in the security group is set forth at 248. Thus, when a security policy is looked up (e.g., during processing), the list of service names at 248 can be referenced. In this example, each service name in the list is unique, so a service can only belong to one security group.
In the example of FIG. 2B , a security group named “DC.Test. Logging_Monitoring” is identified at 250. Services in the group can draw an IP address from an IP subnet range identified at 252. For instance, when a service in security group 250 is deployed on an electronic device (e.g., a server device), the server device has to have an IP address in the designated subnet range at 252. A list of service names belonging to security group 250 is identified at 254, and a public or private designation as explained above is declared at 256.
In the example of FIG. 2B , at least two security policies are declared for the security group: a first policy described at 258, and a second policy described at 260. Each policy has a source and a destination specified, as well as services specified. For instance, a source 262, a destination 264 and a list of services 266 are specified for the policy described at 258. In this example, a different security group, “DC.Test.Logging_Monitoring,” is named for source 262, and “DC.Test.Processing” is named for destination 264. A list of services is named at 266 for policy 258. Each service named in list 266 is able to listen at a specific port or range of ports and accepts a specified protocol. For instance, the service named tcp443/service1 268 listens at a port 443, indicated at 270, and accepts only TCP traffic, as indicated at 272. Thus, each service in list 266 is characterized in terms of open ports and open protocols. The policy declared at 260 follows a similar format as the policy declared at 258.
At block 306, a plurality of packets is processed at a higher layer (e.g., higher layer 152A) of a network stack (e.g., network stack 103). At least one packet (e.g., network packet 140) of the plurality of packets may have been previously determined, as part of processing the at least one packet at lower layers (e.g., lower layers 104) of the network stack, to be authorized to be processed by the higher layer based on a determination that the at least one packet is associated with a handshake process to establish an encrypted connection (see circled 3A and 4A in FIG. 1A ). The at least one packet may be destined for a destination address associated with an instance of a first service (e.g., service 154A). The at least one packet may have been sent using a source address. Packets sent using the source address may be otherwise configured to be unauthorized to be processed by the higher layer (e.g., configured to be blocked as described at circled 2 of FIG. 1A ).
In some implementations, the determination that the at least one packet being associated with a handshake process includes determining that the at least one packet is a first packet of the handshake process (see circled 3A in FIG. 1B ). In such implementations, responsive to the determination that the at least one packet is the first packet of the handshake process, a data record may be stored for the network connection associated with the handshake process (see circled 4A1 in FIG. 1B ). In addition, responsive to receiving a first subsequent packet sent using the source address, it may be determined that the stored data record exists and, in response, the first subsequent packet may be authorized to move further in the lower layers of the network stack (see circled 3C and 4C in FIG. 1B ). Further in such implementations, responsive to determining that the handshake process fails, the stored data record is removed. In addition, responsive to receiving a second subsequent packet sent using the source address, it may be determined that there is no data record for an existing network connection associated with the handshake process and, in response, the second subsequent packet may be denied further movement in the lower layers of the network stack.
More specifically, at block 306, the processing of the plurality of packets performs one or more operations (e.g., at blocks 308 and/or 310). The flow of operations moves to block 308, at which, responsive to successful authentication of a cryptographic certificate received during the handshake process, a second service (e.g., the remote service) is identified from the cryptographic certificate. The instance of the second service (e.g., the remote service instance) may be associated with the source address.
The flow of operations moves to block 310, at which, it is determined, based on a security policy (e.g., a converted security policy in converted security policies 162) that defines the first and second service as being respectively within a first and second segment of a network (e.g., the multi-segment network), that the second service is authorized to access the first service.
The flow of operations moves to block 312, at which, responsive to the determination, the lower layers are caused to be configured (e.g., with the packet filtering rule no. 1) such that packets sent using the source address are now authorized to be processed by the higher layer (see circled 7A, 8A1, 8A in FIG. 1A ). In some implementations, this can be viewed as there being: 1) a configuration (during block 306) that causes processing at the lower layers to block packets sent using the source address unless the packets are associated with a handshake process to establish an encrypted connection; and 2) that configuration being modified (responsive to block 312) such that processing at the lower layers no longer blocks, based on the modified configuration (which may be referred to as a second configuration), packets sent using the source address. In some implementations, there may be another reason(s) one or more such packets are blocked at the lower layers, but it will not be due to this particular configuration; in other words, according to this particular second configuration the packets sent using the source address are now authorized to be processed at the higher layer, but one or more of them may be blocked during processing at lower layers due to some other configuration.
As a result of the second configuration, subsequent packets (e.g., a third subsequent packet such as network packet 170) sent using the source address may be received (see circled 1P in FIG. 1A ). During processing of the these subsequent packets at the lower layers of the network stack, it will be determined, that these subsequent packet, according to this configuration, can be provided for processing by the higher layer of the network stack even though these subsequent packets may not be associated with the handshake process (see circled 2P and 3B in FIG. 1A ). In fact, typically at least some subsequent packets that will be sent are unrelated to the handshake process (e.g., those packets that follow a successful encrypted connection handshake, which are network traffic to be carried over of the encrypted connection as opposed to network traffic associated with establishing the encrypted connection), and these subsequent packets will not be blocked from reaching the higher layer of the network stack based on the configuration.
Electronic Device and Machine-Readable Media
One or more parts of the above implementations may include software. Software is a general term whose meaning can range from part of the code and/or metadata of a single computer program to the entirety of multiple programs. A computer program (also referred to as a program) comprises code and optionally data. Code (sometimes referred to as computer program code or program code) comprises software instructions (also referred to as instructions). Instructions may be executed by hardware to perform operations. Executing software includes executing code, which includes executing instructions. The execution of a program to perform a task involves executing some or all of the instructions in that program.
An electronic device (also referred to as a device, computing device, computer, etc.) includes hardware and software. For example, an electronic device may include a set of one or more processors coupled to one or more machine-readable storage media (e.g., non-volatile memory such as magnetic disks, optical disks, read only memory (ROM), Flash memory, phase change memory, solid state drives (SSDs)) to store code and optionally data. For instance, an electronic device may include non-volatile memory (with slower read/write times) and volatile memory (e.g., dynamic random-access memory (DRAM), static random-access memory (SRAM)). Non-volatile memory persists code/data even when the electronic device is turned off or when power is otherwise removed, and the electronic device copies that part of the code that is to be executed by the set of processors of that electronic device from the non-volatile memory into the volatile memory of that electronic device during operation because volatile memory typically has faster read/write times. As another example, an electronic device may include a non-volatile memory (e.g., phase change memory) that persists code/data when the electronic device has power removed, and that has sufficiently fast read/write times such that, rather than copying the part of the code to be executed into volatile memory, the code/data may be provided directly to the set of processors (e.g., loaded into a cache of the set of processors). In other words, this non-volatile memory operates as both long term storage and main memory, and thus the electronic device may have no or only a small amount of volatile memory for main memory.
In addition to storing code and/or data on machine-readable storage media, typical electronic devices can transmit and/or receive code and/or data over one or more machine-readable transmission media (also called a carrier) (e.g., electrical, optical, radio, acoustical or other forms of propagated signals-such as carrier waves, and/or infrared signals). For instance, typical electronic devices also include a set of one or more physical network interface(s) to establish network connections (to transmit and/or receive code and/or data using propagated signals) with other electronic devices. Thus, an electronic device may store and transmit (internally and/or with other electronic devices over a network) code and/or data with one or more machine-readable media (also referred to as computer-readable media).
Software instructions (also referred to as instructions) are capable of causing (also referred to as operable to cause and configurable to cause) a set of processors to perform operations when the instructions are executed by the set of processors. The phrase “capable of causing” (and synonyms mentioned above) includes various scenarios (or combinations thereof), such as instructions that are always executed versus instructions that may be executed. For example, instructions may be executed: 1) only in certain situations when the larger program is executed (e.g., a condition is fulfilled in the larger program; an event occurs such as a software or hardware interrupt, user input (e.g., a keystroke, a mouse-click, a voice command); a message is published, etc.); or 2) when the instructions are called by another program or part thereof (whether or not executed in the same or a different process, thread, lightweight thread, etc.). These scenarios may or may not require that a larger program, of which the instructions are a part, be currently configured to use those instructions (e.g., may or may not require that a user enables a feature, the feature or instructions be unlocked or enabled, the larger program is configured using data and the program's inherent functionality, etc.). As shown by these exemplary scenarios, “capable of causing” (and synonyms mentioned above) does not require “causing” but the mere capability to cause. While the term “instructions” may be used to refer to the instructions that when executed cause the performance of the operations described herein, the term may or may not also refer to other instructions that a program may include. Thus, instructions, code, program, and software are capable of causing operations when executed, whether the operations are always performed or sometimes performed (e.g., in the scenarios described previously). The phrase “the instructions when executed” refers to at least the instructions that when executed cause the performance of the operations described herein but may or may not refer to the execution of the other instructions.
Electronic devices are designed for and/or used for a variety of purposes, and different terms may reflect those purposes (e.g., user devices, network devices). Some user devices are designed to mainly be operated as servers (sometimes referred to as server devices), while others are designed to mainly be operated as clients (sometimes referred to as client devices, client computing devices, client computers, or end user devices; examples of which include desktops, workstations, laptops, personal digital assistants, smartphones, wearables, augmented reality (AR) devices, virtual reality (VR) devices, mixed reality (MR) devices, etc.). The software executed to operate a user device (typically a server device) as a server may be referred to as server software or server code), while the software executed to operate a user device (typically a client device) as a client may be referred to as client software or client code. A server provides one or more services (also referred to as serves) to one or more clients.
The term “user” refers to an entity (e.g., an individual person) that uses an electronic device. Software and/or services may use credentials to distinguish different accounts associated with the same and/or different users. Users can have one or more roles, such as administrator, programmer/developer, and end user roles. As an administrator, a user typically uses electronic devices to administer them for other users, and thus an administrator often works directly and/or indirectly with server devices and client devices.
During operation, an instance of the software 428 (illustrated as instance 406 and referred to as a software instance; and in the more specific case of an application, as an application instance) is executed. In electronic devices that use compute virtualization, the set of one or more processor(s) 422 typically execute software to instantiate a virtualization layer 408 and one or more software container(s) 404A-404R (e.g., with operating system-level virtualization, the virtualization layer 408 may represent a container engine (such as Docker Engine by Docker, Inc. or rkt in Container Linux by Red Hat, Inc.) running on top of (or integrated into) an operating system, and it allows for the creation of multiple software containers 404A-404R (representing separate user space instances and also called virtualization engines, virtual private servers, or jails) that may each be used to execute a set of one or more applications; with full virtualization, the virtualization layer 408 represents a hypervisor (sometimes referred to as a virtual machine monitor (VMM)) or a hypervisor executing on top of a host operating system, and the software containers 404A-404R each represent a tightly isolated form of a software container called a virtual machine that is run by the hypervisor and may include a guest operating system; with para-virtualization, an operating system and/or application running with a virtual machine may be aware of the presence of virtualization for optimization purposes). Again, in electronic devices where compute virtualization is used, during operation, an instance of the software 428 is executed within the software container 404A on the virtualization layer 408. In electronic devices where compute virtualization is not used, the instance 406 on top of a host operating system is executed on the “bare metal” electronic device 400. The instantiation of the instance 406, as well as the virtualization layer 408 and software containers 404A-404R if implemented, are collectively referred to as software instance(s) 402.
Alternative implementations of an electronic device may have numerous variations from that described above. For example, customized hardware and/or accelerators might also be used in an electronic device.
The system 440 is coupled to user devices 480A-480S over a network 482. The service(s) 442 may be on-demand services that are made available to one or more of the users 484A-484S working for one or more entities other than the entity which owns and/or operates the on-demand services (those users sometimes referred to as outside users) so that those entities need not be concerned with building and/or maintaining a system, but instead may make use of the service(s) 442 when needed (e.g., when needed by the users 484A-484S). The service(s) 442 may communicate with each other and/or with one or more of the user devices 480A-480S via one or more APIs (e.g., a REST API). In some implementations, the user devices 480A-480S are operated by users 484A-484S, and each may be operated as a client device and/or a server device. In some implementations, one or more of the user devices 480A-480S are separate ones of the electronic device 400 or include one or more features of the electronic device 400.
In some implementations, the system 440 is a multi-tenant system (also known as a multi-tenant architecture). The term multi-tenant system refers to a system in which various elements of hardware and/or software of the system may be shared by one or more tenants. A multi-tenant system may be operated by a first entity (sometimes referred to a multi-tenant system provider, operator, or vendor; or simply a provider, operator, or vendor) that provides one or more services to the tenants (in which case the tenants are customers of the operator and sometimes referred to as operator customers). A tenant includes a group of users who share a common access with specific privileges. The tenants may be different entities (e.g., different companies, different departments/divisions of a company, and/or other types of entities), and some or all of these entities may be vendors that sell or otherwise provide products and/or services to their customers (sometimes referred to as tenant customers). A multi-tenant system may allow each tenant to input tenant specific data for user management, tenant-specific functionality, configuration, customizations, non-functional properties, associated applications, etc. A tenant may have one or more roles relative to a system and/or service. For example, in the context of a customer relationship management (CRM) system or service, a tenant may be a vendor using the CRM system or service to manage information the tenant has regarding one or more customers of the vendor. As another example, in the context of Data as a Service (DAAS), one set of tenants may be vendors providing data and another set of tenants may be customers of different ones or all of the vendors' data. As another example, in the context of Platform as a Service (PAAS), one set of tenants may be third-party application developers providing applications/services and another set of tenants may be customers of different ones or all of the third-party application developers.
Multi-tenancy can be implemented in different ways. In some implementations, a multi-tenant architecture may include a single software instance (e.g., a single database instance) which is shared by multiple tenants; other implementations may include a single software instance (e.g., database instance) per tenant; yet other implementations may include a mixed model; e.g., a single software instance (e.g., an application instance) per tenant and another software instance (e.g., database instance) shared by multiple tenants.
In one implementation, the system 440 is a multi-tenant cloud computing architecture supporting multiple services, such as one or more of the following types of services: Customer relationship management (CRM); Configure, price, quote (CPQ); Business process modeling (BPM); Customer support; Marketing; External data connectivity; Productivity; Database-as-a-Service; Data-as-a-Service (DAAS or DaaS); Platform-as-a-service (PAAS or PaaS);
Infrastructure-as-a-Service (IAAS or laaS) (e.g., virtual machines, servers, and/or storage); Analytics; Community; Internet-of-Things (IoT); Industry-specific; Artificial intelligence (AI); Application marketplace (“app store”); Data modeling; Security; and Identity and access management (IAM); internal service(s) (e.g., microservice(s)) that implement one or more of the earlier-mentioned types of services.
For example, system 440 may include an application platform 444 that enables PAAS for creating, managing, and executing one or more applications developed by the provider of the application platform 444, users accessing the system 440 via one or more of user devices 480A-480S, or third-party application developers accessing the system 440 via one or more of user devices 480A-480S.
In some implementations, one or more of the service(s) 442 may use one or more multi-tenant databases 446, as well as system data storage 450 for system data 452 accessible to system 440. In certain implementations, the system 440 includes a set of one or more servers that are running on server electronic devices and that are configured to handle requests for any authorized user associated with any tenant (there is no server affinity for a user and/or tenant to a specific server). The user devices 480A-480S communicate with the server(s) of system 440 to request and update tenant-level data and system-level data hosted by system 440, and in response the system 440 (e.g., one or more servers in system 440) automatically may generate one or more Structured Query Language (SQL) statements (e.g., one or more SQL queries) that are designed to access the desired information from the multi-tenant database(s) 446 and/or system data storage 450.
In some implementations, the service(s) 442 are implemented using virtual applications dynamically created at run time responsive to queries from the user devices 380A-380S and in accordance with metadata, including: 1) metadata that describes constructs (e.g., forms, reports, workflows, user access privileges, business logic) that are common to multiple tenants; and/or 2) metadata that is tenant specific and describes tenant specific constructs (e.g., tables, reports, dashboards, interfaces, etc.) and is stored in a multi-tenant database. To that end, the program code 460 may be a runtime engine that materializes application data from the metadata; that is, there is a clear separation of the compiled runtime engine (also known as the system kernel), tenant data, and the metadata, which makes it possible to independently update the system kernel and tenant-specific applications and schemas, with virtually no risk of one affecting the others. Further, in one implementation, the application platform 444 includes an application setup mechanism that supports application developers' creation and management of applications, which may be saved as metadata by save routines. Invocations to such applications, including the service instances (e.g., service 154A), may be coded using Procedural Language/Structured Object Query Language (PL/SOQL) that provides a programming language style interface. Invocations to applications may be detected by one or more system processes, which manages retrieving application metadata for the tenant making the invocation and executing the metadata as an application in a software container (e.g., a virtual machine).
Network 482 may be any one or any combination of a LAN (local area network), WAN (wide area network), telephone network, wireless network, point-to-point network, star network, token ring network, hub network, or other appropriate configuration. The network may comply with one or more network protocols, including an Institute of Electrical and Electronics Engineers (IEEE) protocol, a 3rd Generation Partnership Project (3GPP) protocol, a 4th generation wireless protocol (4G) (e.g., the Long Term Evolution (LTE) standard, LTE Advanced, LTE Advanced Pro), a fifth generation wireless protocol (5G), and/or similar wired and/or wireless protocols, and may include one or more intermediary devices for routing data between the system 440 and the user devices 480A-480S.
Each user device 480A-480S (such as a desktop personal computer, workstation, laptop, Personal Digital Assistant (PDA), smartphone, smartwatch, wearable device, augmented reality (AR) device, virtual reality (VR) device, etc.) typically includes one or more user interface devices, such as a keyboard, a mouse, a trackball, a touch pad, a touch screen, a pen or the like, video or touch free user interfaces, for interacting with a graphical user interface (GUI) provided on a display (e.g., a monitor screen, a liquid crystal display (LCD), a head-up display, a head-mounted display, etc.) in conjunction with pages, forms, applications and other information provided by system 440. For example, the user interface device can be used to access data and applications hosted by system 440, and to perform searches on stored data, and otherwise allow one or more of users 484A-484S to interact with various GUI pages that may be presented to the one or more of users 484A-484S. User devices 480A-480S might communicate with system 440 using TCP/IP (Transfer Control Protocol and Internet Protocol) and, at a higher network level, use other networking protocols to communicate, such as Hypertext Transfer Protocol (HTTP), File Transfer Protocol (FTP), Andrew File System (AFS), Wireless Application Protocol (WAP), Network File System (NFS), an application program interface (API) based upon protocols such as Simple Object Access Protocol (SOAP), Representational State Transfer (REST), etc. In an example where HTTP is used, one or more user devices 480A-480S might include an HTTP client, commonly referred to as a “browser,” for sending and receiving HTTP messages to and from server(s) of system 440, thus allowing users 484A-484S of the user devices 480A-480S to access, process and view information, pages and applications available to it from system 440 over network 482.
In the above description, numerous specific details such as resource partitioning/sharing/duplication implementations, types and interrelationships of system components, and logic partitioning/integration choices are set forth in order to provide a more thorough understanding. The invention may be practiced without such specific details, however. In other instances, control structures, logic implementations, opcodes, means to specify operands, and full software instruction sequences have not been shown in detail since those of ordinary skill in the art, with the included descriptions, will be able to implement what is described without undue experimentation.
References in the specification to “one implementation,” “an implementation,” “an example implementation,” etc., indicate that the implementation described may include a particular feature, structure, or characteristic, but every implementation may not necessarily include the particular feature, structure, or characteristic. Moreover, such phrases are not necessarily referring to the same implementation. Further, when a particular feature, structure, and/or characteristic is described in connection with an implementation, one skilled in the art would know to affect such feature, structure, and/or characteristic in connection with other implementations whether or not explicitly described.
For example, the figure(s) illustrating flow diagrams sometimes refer to the figure(s) illustrating block diagrams, and vice versa. Whether or not explicitly described, the alternative implementations discussed with reference to the figure(s) illustrating block diagrams also apply to the implementations discussed with reference to the figure(s) illustrating flow diagrams, and vice versa. At the same time, the scope of this description includes implementations, other than those discussed with reference to the block diagrams, for performing the flow diagrams, and vice versa.
Bracketed text and blocks with dashed borders (e.g., large dashes, small dashes, dot-dash, and dots) may be used herein to illustrate optional operations and/or structures that add additional features to some implementations. However, such notation should not be taken to mean that these are the only options or optional operations, and/or that blocks with solid borders are not optional in certain implementations.
The detailed description and claims may use the term “coupled,” along with its derivatives. “Coupled” is used to indicate that two or more elements, which may or may not be in direct physical or electrical contact with each other, co-operate or interact with each other.
While the flow diagrams in the figures show a particular order of operations performed by certain implementations, such order is exemplary and not limiting (e.g., alternative implementations may perform the operations in a different order, combine certain operations, perform certain operations in parallel, overlap performance of certain operations such that they are partially in parallel, etc.).
While the above description includes several example implementations, the invention is not limited to the implementations described and can be practiced with modification and alteration within the spirit and scope of the appended claims. The description is thus illustrative instead of limiting.
Claims (21)
1. A non-transitory machine-readable storage medium that provides instructions that, if executed by a set of one or more processors in one or more electronic devices, are configurable to cause the performance of operations, comprising:
processing a plurality of packets at a higher layer of a network stack,
wherein at least one packet of the plurality of packets was previously determined, as part of processing the at least one packet at lower layers of the network stack, to be authorized to be processed by the higher layer based on a determination that the at least one packet is associated with a handshake process to establish an encrypted connection, wherein the at least one packet is destined for a destination address associated with an instance of a first service, wherein the at least one packet was sent using a source address, wherein packets sent using the source address are otherwise configured to be unauthorized to be processed by the higher layer, and
wherein the processing at the higher layer includes:
responsive to successful authentication of a cryptographic certificate received during the handshake process, identifying from the cryptographic certificate a second service, wherein an instance of the second service is associated with the source address; and
determining, based on a security policy that defines the first and second service as being respectively within a first and second segment of a network, that the second service is authorized to access the first service; and
responsive to the determination, causing a configuration such that packets sent using the source address are now authorized to be processed by the higher layer.
2. The non-transitory machine-readable storage medium of claim 1 , wherein the lower layers and higher layer of the network stack are implemented on one electronic device within the first segment of the network.
3. The non-transitory machine-readable storage medium of claim 1 , wherein the lower layers of the network stack are implemented on a first electronic device within the first segment of the network, wherein a part of the higher layer of the network stack is implemented on a second electronic device within the first segment of the network, and wherein the configuration is implemented on the first electronic device.
4. The non-transitory machine-readable storage medium of claim 1 , the operations further comprising:
receiving a subsequent packet sent using the source address; and
responsive to the subsequent packet, authorizing, based on the configuration, the subsequent packet to be processed by the higher layer.
5. The non-transitory machine-readable storage medium of claim 1 , wherein the determination that the at least one packet being associated with a handshake process includes determining that the at least one packet is a first packet of the handshake process, and wherein the operations further comprising:
responsive to the determination that the at least one packet is the first packet of the handshake process, storing a data record for the network connection associated with the handshake process; and
responsive to receiving a first subsequent packet sent using the source address, determining that the stored data record exists and, in response, authorizing the first subsequent packet to move further in the lower layers of the network stack.
6. The non-transitory machine-readable storage medium of claim 5 , the operations further comprising:
responsive to determining that the handshake process fails, removing the stored data record; and
responsive to receiving a second subsequent packet sent using the source address, determining that there is no data record for an existing network connection associated with the handshake process and, in response, denying the second subsequent packet further movement in the lower layers of the network stack.
7. The non-transitory machine-readable storage medium of claim 1 , wherein the handshake process uses mutual authentication.
8. A method for network segmentation, implemented by one or more electronic devices, the method comprising:
processing a plurality of packets at a higher layer of a network stack,
wherein at least one packet of the plurality of packets was previously determined, as part of processing the at least one packet at lower layers of the network stack, to be authorized to be processed by the higher layer based on a determination that the at least one packet is associated with a handshake process to establish an encrypted connection, wherein the at least one packet is destined for a destination address associated with an instance of a first service, wherein the at least one packet was sent using a source address, wherein packets sent using the source address are otherwise configured to be unauthorized to be processed by the higher layer, and
wherein the processing at the higher layer includes:
responsive to successful authentication of a cryptographic certificate received during the handshake process, identifying from the cryptographic certificate a second service, wherein an instance of the second service is associated with the source address; and
determining, based on a security policy that defines the first and second service as being respectively within a first and second segment of a network, that the second service is authorized to access the first service; and
responsive to the determination, causing a configuration such that packets sent using the source address are now authorized to be processed by the higher layer.
9. The method of claim 8 , wherein the lower layers and higher layer of the network stack are implemented on one electronic device within the first segment of the network.
10. The method of claim 8 , wherein the lower layers of the network stack are implemented on a first electronic device within the first segment of the network, wherein a part of the higher layer of the network stack is implemented on a second electronic device within the first segment of the network, and wherein the configuration is implemented on the first electronic device.
11. The method of claim 8 , the method further comprising:
receiving a subsequent packet sent using the source address; and
responsive to the subsequent packet, authorizing, based on the configuration, the subsequent packet to be processed by the higher layer.
12. The method of claim 8 , wherein the determination that the at least one packet being associated with a handshake process includes determining that the at least one packet is a first packet of the handshake process, and wherein the method further comprising:
responsive to the determination that the at least one packet is the first packet of the handshake process, storing a data record for the network connection associated with the handshake process; and
responsive to receiving a first subsequent packet sent using the source address, determining that the stored data record exists and, in response, authorizing the first subsequent packet to move further in the lower layers of the network stack.
13. The method of claim 12 , the method further comprising:
responsive to determining that the handshake process fails, removing the stored data record; and
responsive to receiving a second subsequent packet sent using the source address, determining that there is no data record for an existing network connection associated with the handshake process and, in response, denying the second subsequent packet further movement in the lower layers of the network stack.
14. The method of claim 8 , wherein the handshake process uses mutual authentication.
15. A set of one or more electronic devices configured for network segmentation, the set of electronic devices comprising:
a set of one or more processors; and
a set of one or more non-transitory machine-readable storage mediums that provide instructions that, if executed by the set of processors, are configurable to cause the set of electronic devices to perform operations comprising:
processing a plurality of packets at a higher layer of a network stack,
wherein at least one packet of the plurality of packets was previously determined, as part of processing the at least one packet at lower layers of the network stack, to be authorized to be processed by the higher layer based on a determination that the at least one packet is associated with a handshake process to establish an encrypted connection, wherein the at least one packet is destined for a destination address associated with an instance of a first service, wherein the at least one packet was sent using a source address, wherein packets sent using the source address are otherwise configured to be unauthorized to be processed by the higher layer, and
wherein the processing at the higher layer includes:
responsive to successful authentication of a cryptographic certificate received during the handshake process, identifying from the cryptographic certificate a second service, wherein an instance of the second service is associated with the source address; and
determining, based on a security policy that defines the first and second service as being respectively within a first and second segment of a network, that the second service is authorized to access the first service; and
responsive to the determination, causing a configuration such that packets sent using the source address are now authorized to be processed by the higher layer.
16. The set of electronic devices of claim 15 , wherein the lower layers and higher layer of the network stack are implemented on one electronic device within the first segment of the network.
17. The set of electronic devices of claim 15 , wherein the lower layers of the network stack are implemented on a first electronic device within the first segment of the network, wherein a part of the higher layer of the network stack is implemented on a second electronic device within the first segment of the network, and wherein the configuration is implemented on the first electronic device.
18. The set of electronic devices of claim 15 , the operations further comprising:
receiving a subsequent packet sent using the source address; and
responsive to the subsequent packet, authorizing, based on the configuration, the subsequent packet to be processed by the higher layer.
19. The set of electronic devices of claim 15 , wherein the determination that the at least one packet being associated with a handshake process includes determining that the at least one packet is a first packet of the handshake process, and wherein the operations further comprising:
responsive to the determination that the at least one packet is the first packet of the handshake process, storing a data record for the network connection associated with the handshake process; and
responsive to receiving a first subsequent packet sent using the source address, determining that the stored data record exists and, in response, authorizing the first subsequent packet to move further in the lower layers of the network stack.
20. The set of electronic devices of claim 19 , the operations further comprising:
responsive to determining that the handshake process fails, removing the stored data record; and
responsive to receiving a second subsequent packet sent using the source address, determining that there is no data record for an existing network connection associated with the handshake process and, in response, denying the second subsequent packet further movement in the lower layers of the network stack.
21. The set of electronic devices of claim 15 , wherein the handshake process uses mutual authentication.
Priority Applications (2)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| US18/457,557 US12401626B2 (en) | 2023-07-28 | 2023-08-29 | Multi-factor network segmentation |
| US19/263,527 US20250337716A1 (en) | 2023-07-28 | 2025-07-09 | Multi-factor network segmentation |
Applications Claiming Priority (2)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| US202363516454P | 2023-07-28 | 2023-07-28 | |
| US18/457,557 US12401626B2 (en) | 2023-07-28 | 2023-08-29 | Multi-factor network segmentation |
Related Child Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| US19/263,527 Continuation US20250337716A1 (en) | 2023-07-28 | 2025-07-09 | Multi-factor network segmentation |
Publications (2)
| Publication Number | Publication Date |
|---|---|
| US20250039155A1 US20250039155A1 (en) | 2025-01-30 |
| US12401626B2 true US12401626B2 (en) | 2025-08-26 |
Family
ID=94371616
Family Applications (2)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| US18/457,557 Active 2043-11-21 US12401626B2 (en) | 2023-07-28 | 2023-08-29 | Multi-factor network segmentation |
| US19/263,527 Pending US20250337716A1 (en) | 2023-07-28 | 2025-07-09 | Multi-factor network segmentation |
Family Applications After (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| US19/263,527 Pending US20250337716A1 (en) | 2023-07-28 | 2025-07-09 | Multi-factor network segmentation |
Country Status (1)
| Country | Link |
|---|---|
| US (2) | US12401626B2 (en) |
Families Citing this family (1)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US12457244B2 (en) * | 2023-01-31 | 2025-10-28 | Salesforce, Inc. | Techniques for processing queries related to network security |
Citations (183)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US5577188A (en) | 1994-05-31 | 1996-11-19 | Future Labs, Inc. | Method to provide for virtual screen overlay |
| US5608872A (en) | 1993-03-19 | 1997-03-04 | Ncr Corporation | System for allowing all remote computers to perform annotation on an image and replicating the annotated image on the respective displays of other comuters |
| US5649104A (en) | 1993-03-19 | 1997-07-15 | Ncr Corporation | System for allowing user of any computer to draw image over that generated by the host computer and replicating the drawn image to other computers |
| US5715450A (en) | 1995-09-27 | 1998-02-03 | Siebel Systems, Inc. | Method of selecting and presenting data from a database using a query language to a user of a computer system |
| US5821937A (en) | 1996-02-23 | 1998-10-13 | Netsuite Development, L.P. | Computer method for updating a network design |
| US5831610A (en) | 1996-02-23 | 1998-11-03 | Netsuite Development L.P. | Designing networks |
| US5873096A (en) | 1997-10-08 | 1999-02-16 | Siebel Systems, Inc. | Method of maintaining a network of partially replicated database system |
| US5918159A (en) | 1997-08-04 | 1999-06-29 | Fomukong; Mundi | Location reporting satellite paging system with optional blocking of location reporting |
| US5963953A (en) | 1998-03-30 | 1999-10-05 | Siebel Systems, Inc. | Method, and system for product configuration |
| US5983227A (en) | 1997-06-12 | 1999-11-09 | Yahoo, Inc. | Dynamic page generator |
| US6092083A (en) | 1997-02-26 | 2000-07-18 | Siebel Systems, Inc. | Database management system which synchronizes an enterprise server and a workgroup user client using a docking agent |
| US6161149A (en) | 1998-03-13 | 2000-12-12 | Groupserve, Inc. | Centrifugal communication and collaboration method |
| US6169534B1 (en) | 1997-06-26 | 2001-01-02 | Upshot.Com | Graphical user interface for customer information management |
| US6178425B1 (en) | 1997-02-26 | 2001-01-23 | Siebel Systems, Inc. | Method of determining the visibility to a remote database client of a plurality of database transactions using simplified visibility rules |
| US6216133B1 (en) | 1995-06-09 | 2001-04-10 | U.S. Phi,Ips Corporation | Method for enabling a user to fetch a specific information item from a set of information items, and a system for carrying out such a method |
| US6216135B1 (en) | 1997-02-26 | 2001-04-10 | Siebel Systems, Inc. | Method of determining visibility to a remote database client of a plurality of database transactions having variable visibility strengths |
| US6233617B1 (en) | 1997-02-26 | 2001-05-15 | Siebel Systems, Inc. | Determining the visibility to a remote database client |
| US6236978B1 (en) | 1997-11-14 | 2001-05-22 | New York University | System and method for dynamic profiling of users in one-to-one applications |
| US6266669B1 (en) | 1997-02-28 | 2001-07-24 | Siebel Systems, Inc. | Partially replicated distributed database with multiple levels of remote clients |
| US6288717B1 (en) | 1999-03-19 | 2001-09-11 | Terry Dunkle | Headline posting algorithm |
| US6295530B1 (en) | 1995-05-15 | 2001-09-25 | Andrew M. Ritchie | Internet service of differently formatted viewable data signals including commands for browser execution |
| US20010044791A1 (en) | 2000-04-14 | 2001-11-22 | Richter James Neal | Automated adaptive classification system for bayesian knowledge networks |
| US6324693B1 (en) | 1997-03-12 | 2001-11-27 | Siebel Systems, Inc. | Method of synchronizing independently distributed software and database schema |
| US6324568B1 (en) | 1999-11-30 | 2001-11-27 | Siebel Systems, Inc. | Method and system for distributing objects over a network |
| US6336137B1 (en) | 2000-03-31 | 2002-01-01 | Siebel Systems, Inc. | Web client-server system and method for incompatible page markup and presentation languages |
| USD454139S1 (en) | 2001-02-20 | 2002-03-05 | Rightnow Technologies | Display screen for a computer |
| US6367077B1 (en) | 1997-02-27 | 2002-04-02 | Siebel Systems, Inc. | Method of upgrading a software application in the presence of user modifications |
| US6393605B1 (en) | 1998-11-18 | 2002-05-21 | Siebel Systems, Inc. | Apparatus and system for efficient delivery and deployment of an application |
| US20020072951A1 (en) | 1999-03-03 | 2002-06-13 | Michael Lee | Marketing support database management method, system and program product |
| US6411949B1 (en) | 1999-08-12 | 2002-06-25 | Koninklijke Philips Electronics N.V., | Customizing database information for presentation with media selections |
| US20020082892A1 (en) | 1998-08-27 | 2002-06-27 | Keith Raffel | Method and apparatus for network-based sales force management |
| US6434550B1 (en) | 2000-04-14 | 2002-08-13 | Rightnow Technologies, Inc. | Temporal updates of relevancy rating of retrieved information in an information search system |
| US6446089B1 (en) | 1997-02-26 | 2002-09-03 | Siebel Systems, Inc. | Method of using a cache to determine the visibility to a remote database client of a plurality of database transactions |
| US20020143997A1 (en) | 2001-03-28 | 2002-10-03 | Xiaofei Huang | Method and system for direct server synchronization with a computing device |
| US20020140731A1 (en) | 2001-03-28 | 2002-10-03 | Pavitra Subramaniam | Engine to present a user interface based on a logical structure, such as one for a customer relationship management system, across a web site |
| US20020162090A1 (en) | 2001-04-30 | 2002-10-31 | Parnell Karen P. | Polylingual simultaneous shipping of software |
| US20020165742A1 (en) | 2000-03-31 | 2002-11-07 | Mark Robins | Feature centric release manager method and system |
| US20030004971A1 (en) | 2001-06-29 | 2003-01-02 | Gong Wen G. | Automatic generation of data models and accompanying user interfaces |
| US20030018830A1 (en) | 2001-02-06 | 2003-01-23 | Mingte Chen | Adaptive communication application programming interface |
| US20030018705A1 (en) | 2001-03-31 | 2003-01-23 | Mingte Chen | Media-independent communication server |
| US6535909B1 (en) | 1999-11-18 | 2003-03-18 | Contigo Software, Inc. | System and method for record and playback of collaborative Web browsing session |
| US20030066031A1 (en) | 2001-09-28 | 2003-04-03 | Siebel Systems, Inc. | Method and system for supporting user navigation in a browser environment |
| US20030066032A1 (en) | 2001-09-28 | 2003-04-03 | Siebel Systems,Inc. | System and method for facilitating user interaction in a browser environment |
| US20030070005A1 (en) | 2001-09-29 | 2003-04-10 | Anil Mukundan | Method, apparatus, and system for implementing view caching in a framework to support web-based applications |
| US20030069936A1 (en) | 2001-10-09 | 2003-04-10 | Warner Douglas K. | Method for routing electronic correspondence based on the level and type of emotion contained therein |
| US20030070004A1 (en) | 2001-09-29 | 2003-04-10 | Anil Mukundan | Method, apparatus, and system for implementing a framework to support a web-based application |
| US20030070000A1 (en) | 2001-09-29 | 2003-04-10 | John Coker | Computing system and method to implicitly commit unsaved data for a World Wide Web application |
| US20030074418A1 (en) | 2001-09-29 | 2003-04-17 | John Coker | Method, apparatus and system for a mobile web client |
| US6553563B2 (en) | 1998-11-30 | 2003-04-22 | Siebel Systems, Inc. | Development tool, method, and system for client server applications |
| US6560461B1 (en) | 1997-08-04 | 2003-05-06 | Mundi Fomukong | Authorized location reporting paging system |
| US6574635B2 (en) | 1999-03-03 | 2003-06-03 | Siebel Systems, Inc. | Application instantiation based upon attributes and values stored in a meta data repository, including tiering of application layers objects and components |
| US6577726B1 (en) | 2000-03-31 | 2003-06-10 | Siebel Systems, Inc. | Computer telephony integration hotelling method and system |
| US6601087B1 (en) | 1998-11-18 | 2003-07-29 | Webex Communications, Inc. | Instant document sharing |
| US6604117B2 (en) | 1996-03-19 | 2003-08-05 | Siebel Systems, Inc. | Method of maintaining a network of partially replicated database system |
| US20030151633A1 (en) | 2002-02-13 | 2003-08-14 | David George | Method and system for enabling connectivity to a data system |
| US20030159136A1 (en) | 2001-09-28 | 2003-08-21 | Huang Xiao Fei | Method and system for server synchronization with a computing device |
| US6621834B1 (en) | 1999-11-05 | 2003-09-16 | Raindance Communications, Inc. | System and method for voice transmission over network protocols |
| US20030189600A1 (en) | 2002-03-29 | 2003-10-09 | Prasad Gune | Defining an approval process for requests for approval |
| US20030204427A1 (en) | 2002-03-29 | 2003-10-30 | Prasad Gune | User interface for processing requests for approval |
| US20030206192A1 (en) | 2001-03-31 | 2003-11-06 | Mingte Chen | Asynchronous message push to web browser |
| US6654032B1 (en) | 1999-12-23 | 2003-11-25 | Webex Communications, Inc. | Instant sharing of documents on a remote server |
| US20030225730A1 (en) | 2002-06-03 | 2003-12-04 | Rightnow Technologies, Inc. | System and method for generating a dynamic interface via a communications network |
| US6665648B2 (en) | 1998-11-30 | 2003-12-16 | Siebel Systems, Inc. | State models for monitoring process |
| US6665655B1 (en) | 2000-04-14 | 2003-12-16 | Rightnow Technologies, Inc. | Implicit rating of retrieved information in an information search system |
| US20040001092A1 (en) | 2002-06-27 | 2004-01-01 | Rothwein Thomas M. | Prototyping graphical user interfaces |
| US20040010489A1 (en) | 2002-07-12 | 2004-01-15 | Rightnow Technologies, Inc. | Method for providing search-specific web pages in a network computing environment |
| US20040015981A1 (en) | 2002-06-27 | 2004-01-22 | Coker John L. | Efficient high-interactivity user interface for client-server applications |
| US20040027388A1 (en) | 2002-06-27 | 2004-02-12 | Eric Berg | Method and apparatus to facilitate development of a customer-specific business process model |
| US6711565B1 (en) | 2001-06-18 | 2004-03-23 | Siebel Systems, Inc. | Method, apparatus, and system for previewing search results |
| US6724399B1 (en) | 2001-09-28 | 2004-04-20 | Siebel Systems, Inc. | Methods and apparatus for enabling keyboard accelerators in applications implemented via a browser |
| US6728702B1 (en) | 2001-06-18 | 2004-04-27 | Siebel Systems, Inc. | System and method to implement an integrated search center supporting a full-text search and query on a database |
| US6728960B1 (en) | 1998-11-18 | 2004-04-27 | Siebel Systems, Inc. | Techniques for managing multiple threads in a browser environment |
| US6732100B1 (en) | 2000-03-31 | 2004-05-04 | Siebel Systems, Inc. | Database access method and system for user role defined access |
| US6732111B2 (en) | 1998-03-03 | 2004-05-04 | Siebel Systems, Inc. | Method, apparatus, system, and program product for attaching files and other objects to a partially replicated database |
| US6732095B1 (en) | 2001-04-13 | 2004-05-04 | Siebel Systems, Inc. | Method and apparatus for mapping between XML and relational representations |
| US20040128001A1 (en) | 2002-08-28 | 2004-07-01 | Levin Issac Stephen | Method and apparatus for an integrated process modeller |
| US6763501B1 (en) | 2000-06-09 | 2004-07-13 | Webex Communications, Inc. | Remote document serving |
| US6763351B1 (en) | 2001-06-18 | 2004-07-13 | Siebel Systems, Inc. | Method, apparatus, and system for attaching search results |
| US6768904B2 (en) | 2000-10-11 | 2004-07-27 | Lg Electronics Inc. | Data communication method using mobile terminal |
| US6772229B1 (en) | 2000-11-13 | 2004-08-03 | Groupserve, Inc. | Centrifugal communication and collaboration method |
| US6782383B2 (en) | 2001-06-18 | 2004-08-24 | Siebel Systems, Inc. | System and method to implement a persistent and dismissible search center frame |
| US20040186860A1 (en) | 2003-03-21 | 2004-09-23 | Wen-Hsin Lee | Method and architecture for providing data-change alerts to external applications via a push service |
| US20040193510A1 (en) | 2003-03-25 | 2004-09-30 | Catahan Nardo B. | Modeling of order data |
| US20040199543A1 (en) | 2003-04-04 | 2004-10-07 | Braud Luke A. | Facilitating data manipulation in a browser-based user interface of an enterprise business application |
| US20040199489A1 (en) | 2003-03-24 | 2004-10-07 | Barnes-Leon Maria Theresa | Custom common object |
| US20040199536A1 (en) | 2003-03-24 | 2004-10-07 | Barnes Leon Maria Theresa | Product common object |
| US6804330B1 (en) | 2002-01-04 | 2004-10-12 | Siebel Systems, Inc. | Method and system for accessing CRM data via voice |
| US6826745B2 (en) | 1998-11-30 | 2004-11-30 | Siebel Systems, Inc. | System and method for smart scripting call centers and configuration thereof |
| US6826582B1 (en) | 2001-09-28 | 2004-11-30 | Emc Corporation | Method and system for using file systems for content management |
| US6829655B1 (en) | 2001-03-28 | 2004-12-07 | Siebel Systems, Inc. | Method and system for server synchronization with a computing device via a companion device |
| US20040249854A1 (en) | 2003-03-24 | 2004-12-09 | Barnes-Leon Maria Theresa | Common common object |
| US20040260659A1 (en) | 2003-06-23 | 2004-12-23 | Len Chan | Function space reservation system |
| US20040260534A1 (en) | 2003-06-19 | 2004-12-23 | Pak Wai H. | Intelligent data search |
| US20040268299A1 (en) | 2003-06-30 | 2004-12-30 | Shu Lei | Application user interface template with free-form layout |
| US6842748B1 (en) | 2000-04-14 | 2005-01-11 | Rightnow Technologies, Inc. | Usage based strength between related information in an information retrieval system |
| US6850895B2 (en) | 1998-11-30 | 2005-02-01 | Siebel Systems, Inc. | Assignment manager |
| US20050050555A1 (en) | 2003-08-28 | 2005-03-03 | Exley Richard Mark | Universal application network architecture |
| US6907566B1 (en) | 1999-04-02 | 2005-06-14 | Overture Services, Inc. | Method and system for optimum placement of advertisements on a webpage |
| US7062502B1 (en) | 2001-12-28 | 2006-06-13 | Kesler John N | Automated generation of dynamic data entry user interface for relational database management systems |
| US7069497B1 (en) | 2002-09-10 | 2006-06-27 | Oracle International Corp. | System and method for applying a partial page change |
| US7069231B1 (en) | 2000-07-20 | 2006-06-27 | Oracle International Corporation | Methods and systems for defining, applying and executing customer care relationship plans |
| US7181758B1 (en) | 1994-07-25 | 2007-02-20 | Data Innovation, L.L.C. | Information distribution and processing system |
| US7269590B2 (en) | 2004-01-29 | 2007-09-11 | Yahoo! Inc. | Method and system for customizing views of information associated with a social network user |
| US7289976B2 (en) | 2004-12-23 | 2007-10-30 | Microsoft Corporation | Easy-to-use data report specification |
| US7340411B2 (en) | 1998-02-26 | 2008-03-04 | Cook Rachael L | System and method for generating, capturing, and managing customer lead information over a computer network |
| US7356482B2 (en) | 1998-12-18 | 2008-04-08 | Alternative Systems, Inc. | Integrated change management unit |
| US7406501B2 (en) | 2003-03-24 | 2008-07-29 | Yahoo! Inc. | System and method for instant messaging using an e-mail protocol |
| US7412455B2 (en) | 2003-04-30 | 2008-08-12 | Dillon David M | Software framework that facilitates design and implementation of database applications |
| US7454509B2 (en) | 1999-11-10 | 2008-11-18 | Yahoo! Inc. | Online playback system with community bias |
| US20090063415A1 (en) | 2007-08-31 | 2009-03-05 | Business Objects, S.A. | Apparatus and method for dynamically selecting componentized executable instructions at run time |
| US7508789B2 (en) | 1994-04-07 | 2009-03-24 | Data Innovation Llc | Information distribution and processing system |
| US20090100342A1 (en) | 2007-10-12 | 2009-04-16 | Gabriel Jakobson | Method and system for presenting address and mapping information |
| US20090177744A1 (en) | 2008-01-04 | 2009-07-09 | Yahoo! Inc. | Identifying and employing social network relationships |
| US7603483B2 (en) | 2001-03-23 | 2009-10-13 | Cisco Technology, Inc. | Method and system for class-based management of dynamic content in a networked environment |
| US7620655B2 (en) | 2003-05-07 | 2009-11-17 | Enecto Ab | Method, device and computer program product for identifying visitors of websites |
| US7644122B2 (en) | 1999-11-23 | 2010-01-05 | Frank Michael Weyer | Method apparatus and business system for online communications with online and offline recipients |
| US7668861B2 (en) | 2000-02-14 | 2010-02-23 | Yahoo! Inc. | System and method to determine the validity of an interaction on a network |
| US7698160B2 (en) | 1999-05-07 | 2010-04-13 | Virtualagility, Inc | System for performing collaborative tasks |
| US7730478B2 (en) | 2006-10-04 | 2010-06-01 | Salesforce.Com, Inc. | Method and system for allowing access to developed applications via a multi-tenant on-demand database service |
| US7747648B1 (en) | 2005-02-14 | 2010-06-29 | Yahoo! Inc. | World modeling using a relationship network with communication channels to entities |
| US7779039B2 (en) | 2004-04-02 | 2010-08-17 | Salesforce.Com, Inc. | Custom entities and fields in a multi-tenant database system |
| US7779475B2 (en) | 2006-07-31 | 2010-08-17 | Petnote Llc | Software-based method for gaining privacy by affecting the screen of a computing device |
| US7827208B2 (en) | 2006-08-11 | 2010-11-02 | Facebook, Inc. | Generating a feed of stories personalized for members of a social network |
| US7853881B1 (en) | 2006-07-03 | 2010-12-14 | ISQ Online | Multi-user on-line real-time virtual social networks based upon communities of interest for entertainment, information or e-commerce purposes |
| US7945653B2 (en) | 2006-10-11 | 2011-05-17 | Facebook, Inc. | Tagging digital media |
| US8005896B2 (en) | 1998-10-13 | 2011-08-23 | Cheah Ip Llc | System for controlled distribution of user profiles over a network |
| US8014943B2 (en) | 2008-05-08 | 2011-09-06 | Gabriel Jakobson | Method and system for displaying social networking navigation information |
| US20110218958A1 (en) | 2010-03-08 | 2011-09-08 | Salesforce.Com, Inc. | System, method and computer program product for performing one or more actions utilizing a uniform resource locator |
| US8032297B2 (en) | 2008-05-08 | 2011-10-04 | Gabriel Jakobson | Method and system for displaying navigation information on an electronic map |
| US20110247051A1 (en) | 2010-04-01 | 2011-10-06 | Salesforce.Com, Inc. | System, method and computer program product for performing one or more actions based on a determined access permissions for a plurality of users |
| US8073850B1 (en) | 2007-01-19 | 2011-12-06 | Wordnetworks, Inc. | Selecting key phrases for serving contextually relevant content |
| US8082301B2 (en) | 2006-11-10 | 2011-12-20 | Virtual Agility, Inc. | System for supporting collaborative activity |
| US8095413B1 (en) | 1999-05-07 | 2012-01-10 | VirtualAgility, Inc. | Processing management information |
| US8095531B2 (en) | 2006-10-03 | 2012-01-10 | Salesforce.Com, Inc. | Methods and systems for controlling access to custom objects in a database |
| US20120042218A1 (en) | 2010-08-13 | 2012-02-16 | Salesforce.Com, Inc. | Debugging site errors by an admin as a guest user in a multi-tenant database environment |
| US8209308B2 (en) | 2006-05-01 | 2012-06-26 | Rueben Steven L | Method for presentation of revisions of an electronic document |
| US20120233137A1 (en) | 2006-05-01 | 2012-09-13 | Gabriel Jakobson | Presentation of document history in a web browsing application |
| US8490025B2 (en) | 2008-02-01 | 2013-07-16 | Gabriel Jakobson | Displaying content associated with electronic mapping systems |
| US8504945B2 (en) | 2008-02-01 | 2013-08-06 | Gabriel Jakobson | Method and system for associating content with map zoom function |
| US8510045B2 (en) | 2009-12-22 | 2013-08-13 | Steven L. Rueben | Digital maps displaying search-resulting points-of-interest in user delimited regions |
| US8510664B2 (en) | 2008-09-06 | 2013-08-13 | Steven L. Rueben | Method and system for displaying email thread information |
| US20130212497A1 (en) | 2012-02-10 | 2013-08-15 | Liveperson, Inc. | Analytics driven engagement |
| US20130218948A1 (en) | 2012-02-17 | 2013-08-22 | Gabriel Jakobson | Variable speed collaborative web browsing system |
| US20130218949A1 (en) | 2012-02-17 | 2013-08-22 | Gabriel Jakobson | Collaborative web browsing system integrated with social networks |
| US20130218966A1 (en) | 2012-02-17 | 2013-08-22 | Gabriel Jakobson | Collaborative web browsing system having document object model element interaction detection |
| US20130247216A1 (en) | 2008-11-03 | 2013-09-19 | Salesforce.Com, Inc | System, method and computer program product for publicly providing web content of a tenant using a multi-tenant on-demand database service |
| US8554793B2 (en) | 2010-04-19 | 2013-10-08 | Salesforce.Com, Inc. | Methods and systems for providing custom settings in an on-demand service environment |
| US8566301B2 (en) | 2006-05-01 | 2013-10-22 | Steven L. Rueben | Document revisions in a collaborative computing environment |
| US8583964B2 (en) | 2010-05-28 | 2013-11-12 | Salesforce.Com, Inc. | Identifying bugs in a database system environment |
| US8646103B2 (en) | 2008-06-30 | 2014-02-04 | Gabriel Jakobson | Method and system for securing online identities |
| US8707264B2 (en) | 2010-05-18 | 2014-04-22 | Salesforce.Com, Inc. | Methods and systems for testing methods in a multi-tenant database environment |
| US8726240B2 (en) | 2010-05-12 | 2014-05-13 | Salesforce.Com, Inc. | Capturing replayable information at software defect locations in a multi-tenant environment |
| US8752017B2 (en) | 2010-05-17 | 2014-06-10 | Salesforce.Com, Inc. | Method and system for remote debug protocol proxying for production debugging; selective session and user routing for debugging in multi-tenant cloud computing infrastructure |
| US8839209B2 (en) | 2010-05-12 | 2014-09-16 | Salesforce.Com, Inc. | Software performance profiling in a multi-tenant environment |
| US8893093B2 (en) | 2010-05-07 | 2014-11-18 | Salesforce.Com, Inc. | Method and system for automated performance testing in a multi-tenant environment |
| US20140359537A1 (en) | 2008-02-01 | 2014-12-04 | Gabriel Jackobson | Online advertising associated with electronic mapping systems |
| US20150007050A1 (en) | 2013-07-01 | 2015-01-01 | Gabriel Jakobson | Method and system for processing and displaying email thread information |
| US20150006289A1 (en) | 2013-07-01 | 2015-01-01 | Gabriel Jakobson | Advertising content in regions within digital maps |
| US8930327B2 (en) | 2010-05-04 | 2015-01-06 | Salesforce.Com, Inc. | Method and system for scrubbing information from heap dumps |
| US20150095162A1 (en) | 2013-09-27 | 2015-04-02 | Gabriel Jakobson | Method and systems for online advertising to users using fictitious user idetities |
| US20150142596A1 (en) | 2013-11-18 | 2015-05-21 | Gabriel Jakobson | Commercial transactions via a wearable computer with a display |
| US20150172563A1 (en) | 2013-12-18 | 2015-06-18 | Gabriel Jakobson | Incorporating advertising content into a digital video |
| US9405896B2 (en) * | 2011-04-12 | 2016-08-02 | Salesforce.Com, Inc. | Inter-application management of user credential data |
| WO2017138944A1 (en) | 2016-02-11 | 2017-08-17 | Hewlett Packard Enterprise Development Lp | Cloud access rule translation for hybrid cloud computing environments |
| CN104506487B (en) | 2014-11-21 | 2017-12-08 | 北京工业大学 | The credible execution method of privacy policy under cloud environment |
| US20180241775A1 (en) * | 2016-10-14 | 2018-08-23 | Akamai Technologies, Inc. | Systems and methods for utilizing client side authentication to select services available at a given port number |
| US20190312909A1 (en) | 2018-04-09 | 2019-10-10 | Nicira, Inc. | Method and system for applying compliance policies on private and public cloud |
| EP3611619A1 (en) | 2018-08-14 | 2020-02-19 | Juniper Networks, Inc. | Multi-cloud virtual computing environment provisioning using a high-level topology description |
| US20200097481A1 (en) | 2018-09-24 | 2020-03-26 | Salesforce.Com, Inc. | Driving application experience via configurable search-based navigation interface |
| US10810233B2 (en) | 2017-12-15 | 2020-10-20 | Salesforce.Com, Inc. | Linking records between datasets to augment query results |
| US10838962B2 (en) | 2017-11-30 | 2020-11-17 | Salesforce.Com, Inc. | Metadata driven dataset management |
| US20210234890A1 (en) | 2020-01-23 | 2021-07-29 | Salesforce.Com, Inc. | Predictive rate limiting system for cloud computing services |
| US20210241047A1 (en) | 2020-01-31 | 2021-08-05 | Salesforce.Com, Inc. | Determining rationale for a prediction of a machine learning based model |
| US20210263663A1 (en) | 2020-02-21 | 2021-08-26 | Salesforce.Com, Inc. | Predictive allocation of ephemeral containers for cloud computing services |
| US20220086193A1 (en) | 2020-09-16 | 2022-03-17 | Salesforce.Com, Inc. | Automation of cloud network security policy analysis and deployment |
| US20220086189A1 (en) | 2020-09-16 | 2022-03-17 | Salesforce.Com, Inc. | Network security orchestration and management across different clouds |
| US20220086190A1 (en) | 2020-09-16 | 2022-03-17 | Salesforce.Com, Inc. | Correlation of security policy input and output changes |
| US11392419B2 (en) | 2020-07-16 | 2022-07-19 | Salesforce.Com, Inc. | Cloud agnostic workload identity |
| US20220329584A1 (en) * | 2021-04-07 | 2022-10-13 | EMC IP Holding Company LLC | Two-Way Secure Channels Between Multiple Services Across Service Groups |
| US11552802B2 (en) | 2020-04-15 | 2023-01-10 | Salesforce, Inc. | Stateless mutual authentication between services |
| US20230039162A1 (en) | 2021-08-09 | 2023-02-09 | Salesforce.Com, Inc. | Automated external ip address discovery of services in a public cloud environment |
| US11651291B2 (en) | 2020-01-30 | 2023-05-16 | Salesforce, Inc. | Real-time predictions based on machine learning models |
| US20230244594A1 (en) | 2022-01-28 | 2023-08-03 | Salesforce.Com, Inc. | Incrementally validating security policy code using information from an infrastructure as code repository |
-
2023
- 2023-08-29 US US18/457,557 patent/US12401626B2/en active Active
-
2025
- 2025-07-09 US US19/263,527 patent/US20250337716A1/en active Pending
Patent Citations (216)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US5608872A (en) | 1993-03-19 | 1997-03-04 | Ncr Corporation | System for allowing all remote computers to perform annotation on an image and replicating the annotated image on the respective displays of other comuters |
| US5649104A (en) | 1993-03-19 | 1997-07-15 | Ncr Corporation | System for allowing user of any computer to draw image over that generated by the host computer and replicating the drawn image to other computers |
| US5761419A (en) | 1993-03-19 | 1998-06-02 | Ncr Corporation | Remote collaboration system including first program means translating user inputs into annotations and running on all computers while second program means runs on one computer |
| US5819038A (en) | 1993-03-19 | 1998-10-06 | Ncr Corporation | Collaboration system for producing copies of image generated by first program on first computer on other computers and annotating the image by second program |
| US7508789B2 (en) | 1994-04-07 | 2009-03-24 | Data Innovation Llc | Information distribution and processing system |
| US8457545B2 (en) | 1994-04-07 | 2013-06-04 | Online News Link Llc | Information distribution and processing system |
| US5577188A (en) | 1994-05-31 | 1996-11-19 | Future Labs, Inc. | Method to provide for virtual screen overlay |
| US7181758B1 (en) | 1994-07-25 | 2007-02-20 | Data Innovation, L.L.C. | Information distribution and processing system |
| US6826565B2 (en) | 1995-05-15 | 2004-11-30 | Ablaise Limited | Method and apparatus for serving files to browsing clients |
| US6295530B1 (en) | 1995-05-15 | 2001-09-25 | Andrew M. Ritchie | Internet service of differently formatted viewable data signals including commands for browser execution |
| US6216133B1 (en) | 1995-06-09 | 2001-04-10 | U.S. Phi,Ips Corporation | Method for enabling a user to fetch a specific information item from a set of information items, and a system for carrying out such a method |
| US5715450A (en) | 1995-09-27 | 1998-02-03 | Siebel Systems, Inc. | Method of selecting and presenting data from a database using a query language to a user of a computer system |
| US5831610A (en) | 1996-02-23 | 1998-11-03 | Netsuite Development L.P. | Designing networks |
| US5821937A (en) | 1996-02-23 | 1998-10-13 | Netsuite Development, L.P. | Computer method for updating a network design |
| US6604117B2 (en) | 1996-03-19 | 2003-08-05 | Siebel Systems, Inc. | Method of maintaining a network of partially replicated database system |
| US6189011B1 (en) | 1996-03-19 | 2001-02-13 | Siebel Systems, Inc. | Method of maintaining a network of partially replicated database system |
| US6216135B1 (en) | 1997-02-26 | 2001-04-10 | Siebel Systems, Inc. | Method of determining visibility to a remote database client of a plurality of database transactions having variable visibility strengths |
| US6684438B2 (en) | 1997-02-26 | 2004-02-03 | Siebel Systems, Inc. | Method of using cache to determine the visibility to a remote database client of a plurality of database transactions |
| US6446089B1 (en) | 1997-02-26 | 2002-09-03 | Siebel Systems, Inc. | Method of using a cache to determine the visibility to a remote database client of a plurality of database transactions |
| US6233617B1 (en) | 1997-02-26 | 2001-05-15 | Siebel Systems, Inc. | Determining the visibility to a remote database client |
| US6178425B1 (en) | 1997-02-26 | 2001-01-23 | Siebel Systems, Inc. | Method of determining the visibility to a remote database client of a plurality of database transactions using simplified visibility rules |
| US6092083A (en) | 1997-02-26 | 2000-07-18 | Siebel Systems, Inc. | Database management system which synchronizes an enterprise server and a workgroup user client using a docking agent |
| US20020129352A1 (en) | 1997-02-27 | 2002-09-12 | Brodersen Robert A. | Method and apparatus for upgrading a software application in the presence of user modifications |
| US6367077B1 (en) | 1997-02-27 | 2002-04-02 | Siebel Systems, Inc. | Method of upgrading a software application in the presence of user modifications |
| US6266669B1 (en) | 1997-02-28 | 2001-07-24 | Siebel Systems, Inc. | Partially replicated distributed database with multiple levels of remote clients |
| US6754681B2 (en) | 1997-02-28 | 2004-06-22 | Siebel Systems, Inc. | Partially replicated distributed database with multiple levels of remote clients |
| US6405220B1 (en) | 1997-02-28 | 2002-06-11 | Siebel Systems, Inc. | Partially replicated distributed database with multiple levels of remote clients |
| US6324693B1 (en) | 1997-03-12 | 2001-11-27 | Siebel Systems, Inc. | Method of synchronizing independently distributed software and database schema |
| US5983227A (en) | 1997-06-12 | 1999-11-09 | Yahoo, Inc. | Dynamic page generator |
| US6169534B1 (en) | 1997-06-26 | 2001-01-02 | Upshot.Com | Graphical user interface for customer information management |
| US6560461B1 (en) | 1997-08-04 | 2003-05-06 | Mundi Fomukong | Authorized location reporting paging system |
| US5918159A (en) | 1997-08-04 | 1999-06-29 | Fomukong; Mundi | Location reporting satellite paging system with optional blocking of location reporting |
| US5873096A (en) | 1997-10-08 | 1999-02-16 | Siebel Systems, Inc. | Method of maintaining a network of partially replicated database system |
| US7603331B2 (en) | 1997-11-14 | 2009-10-13 | New York University | System and method for dynamic profiling of users in one-to-one applications and for validating user rules |
| US8103611B2 (en) | 1997-11-14 | 2012-01-24 | New York University | Architectures, systems, apparatus, methods, and computer-readable medium for providing recommendations to users and applications using multidimensional data |
| US6236978B1 (en) | 1997-11-14 | 2001-05-22 | New York University | System and method for dynamic profiling of users in one-to-one applications |
| US7340411B2 (en) | 1998-02-26 | 2008-03-04 | Cook Rachael L | System and method for generating, capturing, and managing customer lead information over a computer network |
| US6732111B2 (en) | 1998-03-03 | 2004-05-04 | Siebel Systems, Inc. | Method, apparatus, system, and program product for attaching files and other objects to a partially replicated database |
| US6161149A (en) | 1998-03-13 | 2000-12-12 | Groupserve, Inc. | Centrifugal communication and collaboration method |
| US8015495B2 (en) | 1998-03-13 | 2011-09-06 | Groupserve It Trust Llc | Centrifugal communication and collaboration method |
| US5963953A (en) | 1998-03-30 | 1999-10-05 | Siebel Systems, Inc. | Method, and system for product configuration |
| US20020082892A1 (en) | 1998-08-27 | 2002-06-27 | Keith Raffel | Method and apparatus for network-based sales force management |
| US8150913B2 (en) | 1998-10-13 | 2012-04-03 | Chris Cheah | System for controlled distribution of user profiles over a network |
| US8005896B2 (en) | 1998-10-13 | 2011-08-23 | Cheah Ip Llc | System for controlled distribution of user profiles over a network |
| US6601087B1 (en) | 1998-11-18 | 2003-07-29 | Webex Communications, Inc. | Instant document sharing |
| US6549908B1 (en) | 1998-11-18 | 2003-04-15 | Siebel Systems, Inc. | Methods and apparatus for interpreting user selections in the context of a relation distributed as a set of orthogonalized sub-relations |
| US6393605B1 (en) | 1998-11-18 | 2002-05-21 | Siebel Systems, Inc. | Apparatus and system for efficient delivery and deployment of an application |
| US6728960B1 (en) | 1998-11-18 | 2004-04-27 | Siebel Systems, Inc. | Techniques for managing multiple threads in a browser environment |
| US6665648B2 (en) | 1998-11-30 | 2003-12-16 | Siebel Systems, Inc. | State models for monitoring process |
| US6850895B2 (en) | 1998-11-30 | 2005-02-01 | Siebel Systems, Inc. | Assignment manager |
| US6826745B2 (en) | 1998-11-30 | 2004-11-30 | Siebel Systems, Inc. | System and method for smart scripting call centers and configuration thereof |
| US6553563B2 (en) | 1998-11-30 | 2003-04-22 | Siebel Systems, Inc. | Development tool, method, and system for client server applications |
| US20050091098A1 (en) | 1998-11-30 | 2005-04-28 | Siebel Systems, Inc. | Assignment manager |
| US8484111B2 (en) | 1998-12-18 | 2013-07-09 | Applications In Internet Time, Llc | Integrated change management unit |
| US7356482B2 (en) | 1998-12-18 | 2008-04-08 | Alternative Systems, Inc. | Integrated change management unit |
| US20020072951A1 (en) | 1999-03-03 | 2002-06-13 | Michael Lee | Marketing support database management method, system and program product |
| US6574635B2 (en) | 1999-03-03 | 2003-06-03 | Siebel Systems, Inc. | Application instantiation based upon attributes and values stored in a meta data repository, including tiering of application layers objects and components |
| US20030120675A1 (en) | 1999-03-03 | 2003-06-26 | Siebel Systems, Inc. | Application instantiation based upon attributes and values stored in a meta data repository, including tiering of application layers, objects, and components |
| US6288717B1 (en) | 1999-03-19 | 2001-09-11 | Terry Dunkle | Headline posting algorithm |
| US7373599B2 (en) | 1999-04-02 | 2008-05-13 | Overture Services, Inc. | Method and system for optimum placement of advertisements on a webpage |
| US6907566B1 (en) | 1999-04-02 | 2005-06-14 | Overture Services, Inc. | Method and system for optimum placement of advertisements on a webpage |
| US7100111B2 (en) | 1999-04-02 | 2006-08-29 | Overture Services, Inc. | Method and system for optimum placement of advertisements on a webpage |
| US8275836B2 (en) | 1999-05-07 | 2012-09-25 | Virtualagility Inc. | System and method for supporting collaborative activity |
| US7698160B2 (en) | 1999-05-07 | 2010-04-13 | Virtualagility, Inc | System for performing collaborative tasks |
| US8095594B2 (en) | 1999-05-07 | 2012-01-10 | VirtualAgility, Inc. | System for performing collaborative tasks |
| US8095413B1 (en) | 1999-05-07 | 2012-01-10 | VirtualAgility, Inc. | Processing management information |
| US6411949B1 (en) | 1999-08-12 | 2002-06-25 | Koninklijke Philips Electronics N.V., | Customizing database information for presentation with media selections |
| US6621834B1 (en) | 1999-11-05 | 2003-09-16 | Raindance Communications, Inc. | System and method for voice transmission over network protocols |
| US7454509B2 (en) | 1999-11-10 | 2008-11-18 | Yahoo! Inc. | Online playback system with community bias |
| US6535909B1 (en) | 1999-11-18 | 2003-03-18 | Contigo Software, Inc. | System and method for record and playback of collaborative Web browsing session |
| US7644122B2 (en) | 1999-11-23 | 2010-01-05 | Frank Michael Weyer | Method apparatus and business system for online communications with online and offline recipients |
| US6324568B1 (en) | 1999-11-30 | 2001-11-27 | Siebel Systems, Inc. | Method and system for distributing objects over a network |
| US6604128B2 (en) | 1999-11-30 | 2003-08-05 | Siebel Systems, Inc. | Method and system for distributing objects over a network |
| US20030187921A1 (en) | 1999-11-30 | 2003-10-02 | Siebel Systems, Inc. | Method and system for distributing objects over a network |
| US6654032B1 (en) | 1999-12-23 | 2003-11-25 | Webex Communications, Inc. | Instant sharing of documents on a remote server |
| US7668861B2 (en) | 2000-02-14 | 2010-02-23 | Yahoo! Inc. | System and method to determine the validity of an interaction on a network |
| US6577726B1 (en) | 2000-03-31 | 2003-06-10 | Siebel Systems, Inc. | Computer telephony integration hotelling method and system |
| US6336137B1 (en) | 2000-03-31 | 2002-01-01 | Siebel Systems, Inc. | Web client-server system and method for incompatible page markup and presentation languages |
| US6609150B2 (en) | 2000-03-31 | 2003-08-19 | Siebel Systems, Inc. | Web client-server system and method for incompatible page markup and presentation languages |
| US20020165742A1 (en) | 2000-03-31 | 2002-11-07 | Mark Robins | Feature centric release manager method and system |
| US6732100B1 (en) | 2000-03-31 | 2004-05-04 | Siebel Systems, Inc. | Database access method and system for user role defined access |
| US6842748B1 (en) | 2000-04-14 | 2005-01-11 | Rightnow Technologies, Inc. | Usage based strength between related information in an information retrieval system |
| US6665655B1 (en) | 2000-04-14 | 2003-12-16 | Rightnow Technologies, Inc. | Implicit rating of retrieved information in an information search system |
| US20010044791A1 (en) | 2000-04-14 | 2001-11-22 | Richter James Neal | Automated adaptive classification system for bayesian knowledge networks |
| US6434550B1 (en) | 2000-04-14 | 2002-08-13 | Rightnow Technologies, Inc. | Temporal updates of relevancy rating of retrieved information in an information search system |
| US6763501B1 (en) | 2000-06-09 | 2004-07-13 | Webex Communications, Inc. | Remote document serving |
| US7069231B1 (en) | 2000-07-20 | 2006-06-27 | Oracle International Corporation | Methods and systems for defining, applying and executing customer care relationship plans |
| US6768904B2 (en) | 2000-10-11 | 2004-07-27 | Lg Electronics Inc. | Data communication method using mobile terminal |
| US6772229B1 (en) | 2000-11-13 | 2004-08-03 | Groupserve, Inc. | Centrifugal communication and collaboration method |
| US20030018830A1 (en) | 2001-02-06 | 2003-01-23 | Mingte Chen | Adaptive communication application programming interface |
| USD454139S1 (en) | 2001-02-20 | 2002-03-05 | Rightnow Technologies | Display screen for a computer |
| US7603483B2 (en) | 2001-03-23 | 2009-10-13 | Cisco Technology, Inc. | Method and system for class-based management of dynamic content in a networked environment |
| US20020140731A1 (en) | 2001-03-28 | 2002-10-03 | Pavitra Subramaniam | Engine to present a user interface based on a logical structure, such as one for a customer relationship management system, across a web site |
| US20020143997A1 (en) | 2001-03-28 | 2002-10-03 | Xiaofei Huang | Method and system for direct server synchronization with a computing device |
| US6829655B1 (en) | 2001-03-28 | 2004-12-07 | Siebel Systems, Inc. | Method and system for server synchronization with a computing device via a companion device |
| US20030206192A1 (en) | 2001-03-31 | 2003-11-06 | Mingte Chen | Asynchronous message push to web browser |
| US20030018705A1 (en) | 2001-03-31 | 2003-01-23 | Mingte Chen | Media-independent communication server |
| US6732095B1 (en) | 2001-04-13 | 2004-05-04 | Siebel Systems, Inc. | Method and apparatus for mapping between XML and relational representations |
| US20020162090A1 (en) | 2001-04-30 | 2002-10-31 | Parnell Karen P. | Polylingual simultaneous shipping of software |
| US6782383B2 (en) | 2001-06-18 | 2004-08-24 | Siebel Systems, Inc. | System and method to implement a persistent and dismissible search center frame |
| US6763351B1 (en) | 2001-06-18 | 2004-07-13 | Siebel Systems, Inc. | Method, apparatus, and system for attaching search results |
| US6711565B1 (en) | 2001-06-18 | 2004-03-23 | Siebel Systems, Inc. | Method, apparatus, and system for previewing search results |
| US6728702B1 (en) | 2001-06-18 | 2004-04-27 | Siebel Systems, Inc. | System and method to implement an integrated search center supporting a full-text search and query on a database |
| US20030004971A1 (en) | 2001-06-29 | 2003-01-02 | Gong Wen G. | Automatic generation of data models and accompanying user interfaces |
| US20030066031A1 (en) | 2001-09-28 | 2003-04-03 | Siebel Systems, Inc. | Method and system for supporting user navigation in a browser environment |
| US6724399B1 (en) | 2001-09-28 | 2004-04-20 | Siebel Systems, Inc. | Methods and apparatus for enabling keyboard accelerators in applications implemented via a browser |
| US6826582B1 (en) | 2001-09-28 | 2004-11-30 | Emc Corporation | Method and system for using file systems for content management |
| US20030159136A1 (en) | 2001-09-28 | 2003-08-21 | Huang Xiao Fei | Method and system for server synchronization with a computing device |
| US20030066032A1 (en) | 2001-09-28 | 2003-04-03 | Siebel Systems,Inc. | System and method for facilitating user interaction in a browser environment |
| US20030070000A1 (en) | 2001-09-29 | 2003-04-10 | John Coker | Computing system and method to implicitly commit unsaved data for a World Wide Web application |
| US20030070005A1 (en) | 2001-09-29 | 2003-04-10 | Anil Mukundan | Method, apparatus, and system for implementing view caching in a framework to support web-based applications |
| US20030070004A1 (en) | 2001-09-29 | 2003-04-10 | Anil Mukundan | Method, apparatus, and system for implementing a framework to support a web-based application |
| US20030074418A1 (en) | 2001-09-29 | 2003-04-17 | John Coker | Method, apparatus and system for a mobile web client |
| US20030069936A1 (en) | 2001-10-09 | 2003-04-10 | Warner Douglas K. | Method for routing electronic correspondence based on the level and type of emotion contained therein |
| US7401094B1 (en) | 2001-12-28 | 2008-07-15 | Kesler John N | Automated generation of dynamic data entry user interface for relational database management systems |
| US7062502B1 (en) | 2001-12-28 | 2006-06-13 | Kesler John N | Automated generation of dynamic data entry user interface for relational database management systems |
| US6804330B1 (en) | 2002-01-04 | 2004-10-12 | Siebel Systems, Inc. | Method and system for accessing CRM data via voice |
| US20030151633A1 (en) | 2002-02-13 | 2003-08-14 | David George | Method and system for enabling connectivity to a data system |
| US20030189600A1 (en) | 2002-03-29 | 2003-10-09 | Prasad Gune | Defining an approval process for requests for approval |
| US20030204427A1 (en) | 2002-03-29 | 2003-10-30 | Prasad Gune | User interface for processing requests for approval |
| US20030225730A1 (en) | 2002-06-03 | 2003-12-04 | Rightnow Technologies, Inc. | System and method for generating a dynamic interface via a communications network |
| US6850949B2 (en) | 2002-06-03 | 2005-02-01 | Right Now Technologies, Inc. | System and method for generating a dynamic interface via a communications network |
| US20040027388A1 (en) | 2002-06-27 | 2004-02-12 | Eric Berg | Method and apparatus to facilitate development of a customer-specific business process model |
| US20040015981A1 (en) | 2002-06-27 | 2004-01-22 | Coker John L. | Efficient high-interactivity user interface for client-server applications |
| US20040001092A1 (en) | 2002-06-27 | 2004-01-01 | Rothwein Thomas M. | Prototyping graphical user interfaces |
| US20040010489A1 (en) | 2002-07-12 | 2004-01-15 | Rightnow Technologies, Inc. | Method for providing search-specific web pages in a network computing environment |
| US20040128001A1 (en) | 2002-08-28 | 2004-07-01 | Levin Issac Stephen | Method and apparatus for an integrated process modeller |
| US7069497B1 (en) | 2002-09-10 | 2006-06-27 | Oracle International Corp. | System and method for applying a partial page change |
| US20040186860A1 (en) | 2003-03-21 | 2004-09-23 | Wen-Hsin Lee | Method and architecture for providing data-change alerts to external applications via a push service |
| US7406501B2 (en) | 2003-03-24 | 2008-07-29 | Yahoo! Inc. | System and method for instant messaging using an e-mail protocol |
| US20040249854A1 (en) | 2003-03-24 | 2004-12-09 | Barnes-Leon Maria Theresa | Common common object |
| US20040199489A1 (en) | 2003-03-24 | 2004-10-07 | Barnes-Leon Maria Theresa | Custom common object |
| US20040199536A1 (en) | 2003-03-24 | 2004-10-07 | Barnes Leon Maria Theresa | Product common object |
| US20040193510A1 (en) | 2003-03-25 | 2004-09-30 | Catahan Nardo B. | Modeling of order data |
| US20040199543A1 (en) | 2003-04-04 | 2004-10-07 | Braud Luke A. | Facilitating data manipulation in a browser-based user interface of an enterprise business application |
| US20080249972A1 (en) | 2003-04-30 | 2008-10-09 | Dillon David M | Software framework that facilitates design and implementation of database applications |
| US7412455B2 (en) | 2003-04-30 | 2008-08-12 | Dillon David M | Software framework that facilitates design and implementation of database applications |
| US7620655B2 (en) | 2003-05-07 | 2009-11-17 | Enecto Ab | Method, device and computer program product for identifying visitors of websites |
| US20040260534A1 (en) | 2003-06-19 | 2004-12-23 | Pak Wai H. | Intelligent data search |
| US20040260659A1 (en) | 2003-06-23 | 2004-12-23 | Len Chan | Function space reservation system |
| US20040268299A1 (en) | 2003-06-30 | 2004-12-30 | Shu Lei | Application user interface template with free-form layout |
| US20050050555A1 (en) | 2003-08-28 | 2005-03-03 | Exley Richard Mark | Universal application network architecture |
| US7269590B2 (en) | 2004-01-29 | 2007-09-11 | Yahoo! Inc. | Method and system for customizing views of information associated with a social network user |
| US7599935B2 (en) | 2004-01-29 | 2009-10-06 | Yahoo! Inc. | Control for enabling a user to preview display of selected content based on another user's authorization level |
| US7779039B2 (en) | 2004-04-02 | 2010-08-17 | Salesforce.Com, Inc. | Custom entities and fields in a multi-tenant database system |
| US7289976B2 (en) | 2004-12-23 | 2007-10-30 | Microsoft Corporation | Easy-to-use data report specification |
| US7747648B1 (en) | 2005-02-14 | 2010-06-29 | Yahoo! Inc. | World modeling using a relationship network with communication channels to entities |
| US8209308B2 (en) | 2006-05-01 | 2012-06-26 | Rueben Steven L | Method for presentation of revisions of an electronic document |
| US20120233137A1 (en) | 2006-05-01 | 2012-09-13 | Gabriel Jakobson | Presentation of document history in a web browsing application |
| US8566301B2 (en) | 2006-05-01 | 2013-10-22 | Steven L. Rueben | Document revisions in a collaborative computing environment |
| US7853881B1 (en) | 2006-07-03 | 2010-12-14 | ISQ Online | Multi-user on-line real-time virtual social networks based upon communities of interest for entertainment, information or e-commerce purposes |
| US7779475B2 (en) | 2006-07-31 | 2010-08-17 | Petnote Llc | Software-based method for gaining privacy by affecting the screen of a computing device |
| US7827208B2 (en) | 2006-08-11 | 2010-11-02 | Facebook, Inc. | Generating a feed of stories personalized for members of a social network |
| US8095531B2 (en) | 2006-10-03 | 2012-01-10 | Salesforce.Com, Inc. | Methods and systems for controlling access to custom objects in a database |
| US7730478B2 (en) | 2006-10-04 | 2010-06-01 | Salesforce.Com, Inc. | Method and system for allowing access to developed applications via a multi-tenant on-demand database service |
| US7945653B2 (en) | 2006-10-11 | 2011-05-17 | Facebook, Inc. | Tagging digital media |
| US8082301B2 (en) | 2006-11-10 | 2011-12-20 | Virtual Agility, Inc. | System for supporting collaborative activity |
| US8073850B1 (en) | 2007-01-19 | 2011-12-06 | Wordnetworks, Inc. | Selecting key phrases for serving contextually relevant content |
| US8209333B2 (en) | 2007-01-19 | 2012-06-26 | Wordnetworks, Inc. | System for using keyword phrases on a page to provide contextually relevant content to users |
| US20120290407A1 (en) | 2007-01-19 | 2012-11-15 | Hubbard Sid Ja | Selection of keyword phrases for providing contextually relevant content to users |
| US20090063415A1 (en) | 2007-08-31 | 2009-03-05 | Business Objects, S.A. | Apparatus and method for dynamically selecting componentized executable instructions at run time |
| US20090100342A1 (en) | 2007-10-12 | 2009-04-16 | Gabriel Jakobson | Method and system for presenting address and mapping information |
| US20090177744A1 (en) | 2008-01-04 | 2009-07-09 | Yahoo! Inc. | Identifying and employing social network relationships |
| US8490025B2 (en) | 2008-02-01 | 2013-07-16 | Gabriel Jakobson | Displaying content associated with electronic mapping systems |
| US8504945B2 (en) | 2008-02-01 | 2013-08-06 | Gabriel Jakobson | Method and system for associating content with map zoom function |
| US20140359537A1 (en) | 2008-02-01 | 2014-12-04 | Gabriel Jackobson | Online advertising associated with electronic mapping systems |
| US8014943B2 (en) | 2008-05-08 | 2011-09-06 | Gabriel Jakobson | Method and system for displaying social networking navigation information |
| US8032297B2 (en) | 2008-05-08 | 2011-10-04 | Gabriel Jakobson | Method and system for displaying navigation information on an electronic map |
| US8646103B2 (en) | 2008-06-30 | 2014-02-04 | Gabriel Jakobson | Method and system for securing online identities |
| US8510664B2 (en) | 2008-09-06 | 2013-08-13 | Steven L. Rueben | Method and system for displaying email thread information |
| US20130247216A1 (en) | 2008-11-03 | 2013-09-19 | Salesforce.Com, Inc | System, method and computer program product for publicly providing web content of a tenant using a multi-tenant on-demand database service |
| US8510045B2 (en) | 2009-12-22 | 2013-08-13 | Steven L. Rueben | Digital maps displaying search-resulting points-of-interest in user delimited regions |
| US20110218958A1 (en) | 2010-03-08 | 2011-09-08 | Salesforce.Com, Inc. | System, method and computer program product for performing one or more actions utilizing a uniform resource locator |
| US20110247051A1 (en) | 2010-04-01 | 2011-10-06 | Salesforce.Com, Inc. | System, method and computer program product for performing one or more actions based on a determined access permissions for a plurality of users |
| US8554793B2 (en) | 2010-04-19 | 2013-10-08 | Salesforce.Com, Inc. | Methods and systems for providing custom settings in an on-demand service environment |
| US8930327B2 (en) | 2010-05-04 | 2015-01-06 | Salesforce.Com, Inc. | Method and system for scrubbing information from heap dumps |
| US8893093B2 (en) | 2010-05-07 | 2014-11-18 | Salesforce.Com, Inc. | Method and system for automated performance testing in a multi-tenant environment |
| US8839209B2 (en) | 2010-05-12 | 2014-09-16 | Salesforce.Com, Inc. | Software performance profiling in a multi-tenant environment |
| US8726240B2 (en) | 2010-05-12 | 2014-05-13 | Salesforce.Com, Inc. | Capturing replayable information at software defect locations in a multi-tenant environment |
| US8752017B2 (en) | 2010-05-17 | 2014-06-10 | Salesforce.Com, Inc. | Method and system for remote debug protocol proxying for production debugging; selective session and user routing for debugging in multi-tenant cloud computing infrastructure |
| US8707264B2 (en) | 2010-05-18 | 2014-04-22 | Salesforce.Com, Inc. | Methods and systems for testing methods in a multi-tenant database environment |
| US8583964B2 (en) | 2010-05-28 | 2013-11-12 | Salesforce.Com, Inc. | Identifying bugs in a database system environment |
| US20120042218A1 (en) | 2010-08-13 | 2012-02-16 | Salesforce.Com, Inc. | Debugging site errors by an admin as a guest user in a multi-tenant database environment |
| US9405896B2 (en) * | 2011-04-12 | 2016-08-02 | Salesforce.Com, Inc. | Inter-application management of user credential data |
| US20130212497A1 (en) | 2012-02-10 | 2013-08-15 | Liveperson, Inc. | Analytics driven engagement |
| US20130218949A1 (en) | 2012-02-17 | 2013-08-22 | Gabriel Jakobson | Collaborative web browsing system integrated with social networks |
| US20130218948A1 (en) | 2012-02-17 | 2013-08-22 | Gabriel Jakobson | Variable speed collaborative web browsing system |
| US20130218966A1 (en) | 2012-02-17 | 2013-08-22 | Gabriel Jakobson | Collaborative web browsing system having document object model element interaction detection |
| US20150007050A1 (en) | 2013-07-01 | 2015-01-01 | Gabriel Jakobson | Method and system for processing and displaying email thread information |
| US20150006289A1 (en) | 2013-07-01 | 2015-01-01 | Gabriel Jakobson | Advertising content in regions within digital maps |
| US20150095162A1 (en) | 2013-09-27 | 2015-04-02 | Gabriel Jakobson | Method and systems for online advertising to users using fictitious user idetities |
| US20150142596A1 (en) | 2013-11-18 | 2015-05-21 | Gabriel Jakobson | Commercial transactions via a wearable computer with a display |
| US20150172563A1 (en) | 2013-12-18 | 2015-06-18 | Gabriel Jakobson | Incorporating advertising content into a digital video |
| CN104506487B (en) | 2014-11-21 | 2017-12-08 | 北京工业大学 | The credible execution method of privacy policy under cloud environment |
| WO2017138944A1 (en) | 2016-02-11 | 2017-08-17 | Hewlett Packard Enterprise Development Lp | Cloud access rule translation for hybrid cloud computing environments |
| US20180241775A1 (en) * | 2016-10-14 | 2018-08-23 | Akamai Technologies, Inc. | Systems and methods for utilizing client side authentication to select services available at a given port number |
| US10838962B2 (en) | 2017-11-30 | 2020-11-17 | Salesforce.Com, Inc. | Metadata driven dataset management |
| US10810233B2 (en) | 2017-12-15 | 2020-10-20 | Salesforce.Com, Inc. | Linking records between datasets to augment query results |
| US20190312909A1 (en) | 2018-04-09 | 2019-10-10 | Nicira, Inc. | Method and system for applying compliance policies on private and public cloud |
| EP3611619A1 (en) | 2018-08-14 | 2020-02-19 | Juniper Networks, Inc. | Multi-cloud virtual computing environment provisioning using a high-level topology description |
| US20200059420A1 (en) * | 2018-08-14 | 2020-02-20 | Juniper Networks, Inc. | Multi-cloud virtual computing environment provisioning using a high-level topology description |
| US20200097481A1 (en) | 2018-09-24 | 2020-03-26 | Salesforce.Com, Inc. | Driving application experience via configurable search-based navigation interface |
| US20210234890A1 (en) | 2020-01-23 | 2021-07-29 | Salesforce.Com, Inc. | Predictive rate limiting system for cloud computing services |
| US11651291B2 (en) | 2020-01-30 | 2023-05-16 | Salesforce, Inc. | Real-time predictions based on machine learning models |
| US20230259831A1 (en) | 2020-01-30 | 2023-08-17 | Salesforce, Inc. | Real-time predictions based on machine learning models |
| US20210241047A1 (en) | 2020-01-31 | 2021-08-05 | Salesforce.Com, Inc. | Determining rationale for a prediction of a machine learning based model |
| US20210263663A1 (en) | 2020-02-21 | 2021-08-26 | Salesforce.Com, Inc. | Predictive allocation of ephemeral containers for cloud computing services |
| US11552802B2 (en) | 2020-04-15 | 2023-01-10 | Salesforce, Inc. | Stateless mutual authentication between services |
| US11392419B2 (en) | 2020-07-16 | 2022-07-19 | Salesforce.Com, Inc. | Cloud agnostic workload identity |
| US20220086189A1 (en) | 2020-09-16 | 2022-03-17 | Salesforce.Com, Inc. | Network security orchestration and management across different clouds |
| US20220086190A1 (en) | 2020-09-16 | 2022-03-17 | Salesforce.Com, Inc. | Correlation of security policy input and output changes |
| WO2022060609A1 (en) | 2020-09-16 | 2022-03-24 | Salesforce.Com, Inc. | Network security orchestration and management across different clouds |
| US20220086193A1 (en) | 2020-09-16 | 2022-03-17 | Salesforce.Com, Inc. | Automation of cloud network security policy analysis and deployment |
| US20220329584A1 (en) * | 2021-04-07 | 2022-10-13 | EMC IP Holding Company LLC | Two-Way Secure Channels Between Multiple Services Across Service Groups |
| US20230039162A1 (en) | 2021-08-09 | 2023-02-09 | Salesforce.Com, Inc. | Automated external ip address discovery of services in a public cloud environment |
| US20230244594A1 (en) | 2022-01-28 | 2023-08-03 | Salesforce.Com, Inc. | Incrementally validating security policy code using information from an infrastructure as code repository |
Non-Patent Citations (13)
| Title |
|---|
| "All Data Breaches in 2019 & 2020—An Alarming Timeline" SelfKey Blog, Jul. 5, 2020. |
| "BPF maps", the kernel development community, available online at <http://web.archive.org/web/20230604211709/https://docs.kernel.org/bpf/maps.html>, Jun. 4, 2023, 2 pages. |
| "Google Plus Users", Google+Ripples, Oct. 31, 2011 [retrieved on Feb. 21, 2012 from Internet at http://www.googleplusers.com/google-ripples.html], 3 pages. |
| "Rightscale 2019 State of the Cloud Report" Flexera, 2019. |
| Bertrone, et al., "Toward an eBPF-based clone of Iptables", Jul. 2018, pp. 1-5. |
| Di Pietro, G., "How to observe your network with eBPF", available online at <https://isitobservable.io/observability/kubernetes/how-to-observe-your-network-with-ebpf>, Oct. 14, 2022, pp. 1-7. |
| Final Office Action, U.S. Appl. No. 16/948,399, Jul. 6, 2023, 10 pages. |
| International Preliminary Report on Patentability, PCT App. No. PCT/US21/49484, Mar. 30, 2023, 8 pages. |
| International Search Report and Written Opinion dated Dec. 3, 2021, in Application No. PCT/US2021/049484 [SLFCP322WO], 13 pages. |
| Non-Final Office Action, U.S. Appl. No. 16/948,399, Jan. 23, 2023, 12 pages. |
| Shahin, Mojtaba, Muhammad Ali Babar, and Liming Zhu. "Continuous integration, delivery and deployment: a systematic review on approaches, tools, challenges and practices." IEEE Access 5 (2017): 3909-3943. |
| Spinnaker: Cloud Native Continuous Delivery: Fast, safe, repeatable deployments for every Enterprise, Webpage, Accessed: Jan. 20, 2021. |
| Wikipedia, "Netfilter", available online at <https://en.wikipedia.org/wiki/Netfilter>, last edited Apr. 21, 2023, 8 pages. |
Also Published As
| Publication number | Publication date |
|---|---|
| US20250337716A1 (en) | 2025-10-30 |
| US20250039155A1 (en) | 2025-01-30 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| US20220224726A1 (en) | Distribution and Management of Services in Virtual Environments | |
| CN110557975B (en) | Tenant data comparison for multi-tenant identity cloud services | |
| CN110679131B (en) | Data replication conflict detection and resolution scheme for multi-tenant identity cloud service | |
| CN110622484B (en) | Local write of multi-tenant identity cloud service | |
| US11924210B2 (en) | Protected resource authorization using autogenerated aliases | |
| US10762193B2 (en) | Dynamically generating and injecting trusted root certificates | |
| CN107852417B (en) | Multi-tenant identity and data security management cloud service | |
| CN109565511B (en) | Tenant and service management for multi-tenant identity and data security management cloud services | |
| US9104672B2 (en) | Virtual security zones for data processing environments | |
| CN107046530B (en) | Coordination management system for heterogeneous agile information technology environment | |
| CN108701182B (en) | Data management for multi-tenant identity cloud services | |
| EP4018617B1 (en) | Managing permissions to cloud-based resources with session-specific attributes | |
| US10360410B2 (en) | Providing containers access to container daemon in multi-tenant environment | |
| CN112805699A (en) | Authentication integrated multi-tenant identity cloud service with on-premise deployment | |
| CN112913208A (en) | Multi-tenant identity cloud service with on-premises authentication integration and bridge high availability | |
| US11870791B2 (en) | Policy-controlled token authorization | |
| CN112166588A (en) | Tenant replication bootstrapping for multi-tenant identity cloud services | |
| US20230247006A1 (en) | Extending a trust boundary between cloud domains of the same entity | |
| WO2022066414A1 (en) | Compositional reasoning techniques for role reachability analyses in identity systems | |
| US10785056B1 (en) | Sharing a subnet of a logically isolated network between client accounts of a provider network | |
| CN116488836A (en) | Kubernetes cluster resource management method and system based on multiple tenants | |
| US20250337716A1 (en) | Multi-factor network segmentation | |
| US12432076B2 (en) | Provisioning hosts with operator accounts for use by clients to access target resources | |
| US20240187453A1 (en) | Network security for multiple functional domains | |
| US11968177B2 (en) | Systems and methods for verifying a firewall for a cloud provider |
Legal Events
| Date | Code | Title | Description |
|---|---|---|---|
| AS | Assignment |
Owner name: SALESFORCE, INC., CALIFORNIA Free format text: ASSIGNMENT OF ASSIGNORS INTEREST;ASSIGNORS:BANSAL, KAUSHAL;HOSSAIN, FIAZ;SINGH, PRABHAT;SIGNING DATES FROM 20230823 TO 20230826;REEL/FRAME:064734/0879 |
|
| FEPP | Fee payment procedure |
Free format text: ENTITY STATUS SET TO UNDISCOUNTED (ORIGINAL EVENT CODE: BIG.); ENTITY STATUS OF PATENT OWNER: LARGE ENTITY |
|
| STPP | Information on status: patent application and granting procedure in general |
Free format text: DOCKETED NEW CASE - READY FOR EXAMINATION |
|
| STPP | Information on status: patent application and granting procedure in general |
Free format text: PUBLICATIONS -- ISSUE FEE PAYMENT VERIFIED |
|
| STCF | Information on status: patent grant |
Free format text: PATENTED CASE |