Embodiments described herein relate generally to methods and systems for managing data transmissions and more specifically to securely routing data transmissions.
“Firewalls” are technological measures used to prevent unauthorized communications between computers on different computer networks. Some firewalls require configuration to permit communications between computers on different computer networks; these configurations are colloquially referred to as “holes” in the firewall, continuing the analogy.
Organizations typically want to minimize the number of holes they create in their firewalls—each hole reduces organizational security, requires administrator time and effort, etc. However, the introduction of certain services or vendor products to a network may require reconfiguring the firewall to allow for multiple endpoints or services. This problem is magnified when the services or products are controlled by the third party, who typically does not have permission to manage their customer's firewall.
This at the very least inconveniences the service provider or vendor, as they have to take the time to instruct their client to modify their firewall. The client then has to expend resources to make the required modifications to allow for subsequent data transmissions, assuming they agree to do so. In some cases, the client may have to seek and obtain internal and/or regulatory approval to make the required change.
A need exists, therefore, for more effective systems and methods for managing data transmissions.
This summary is provided to introduce a selection of concepts in a simplified form that are further described below in the Detailed Description section. This summary is not intended to identify or exclude key features or essential features of the claimed subject matter, nor is it intended to be used as an aid in determining the scope of the claimed subject matter.
In one aspect, embodiments relate to a method of managing data transmissions. The method includes receiving a request for a first service at a router, wherein the request for the first service originates inside a firewall and the first service executes outside the firewall; receiving a request for a second service at the router, wherein the request for the second service originates inside the firewall and the second service executes outside the firewall; and routing, using the router, communications with the second service through the first service without requiring the firewall to be reconfigured to allow the communications with the second service.
In some embodiments, communications for the first service and the communications for the second service are transport layer security (TLS) communications. In some embodiments, each communication comprises a server name indication (SNI) field, and the SNI field of each communication specifies the second service.
In some embodiments, the router is a load balancer.
In some embodiments, the communications for the second service are routed without decryption.
In some embodiments, the second service is a cloud storage service. In some embodiments, the cloud storage service is specified in either a host header or a URL associated with the request for the second service.
According to another aspect, embodiments relate to a system for managing data transmissions. The system includes an interface for at least receiving: a request for a first service at a router, wherein the request for the first service originates inside a firewall and the first service executes outside the firewall, and a request for a second service at the router, wherein the request for the second service originates inside the firewall and the second service executes outside the firewall; and a router configured to route communications with the second service through the first service without requiring the firewall to be configured to allow the communications with the second service.
In some embodiments, the communications for the first service and the communications for the second service are transport layer security (TLS) communications. In some embodiments, each communication comprises a server name indication (SNI) field, and the SNI field of each communication specifies the second service.
In some embodiments, the router is a load balancer.
In some embodiments, the communications for the second service are routed without decryption.
In some embodiments, the second service is a cloud storage service. In some embodiments, the cloud storage service is specified in either a host header or a URL associated with the request for the second service.
According to yet another aspect, embodiments relate to a method for routing communications without requiring firewall configuration. The method includes receiving a transport layer security (TLS) communication at a router, the communication comprising a server name indication (SNI) field, wherein the TLS communication originates inside a firewall and the router is outside the firewall; and routing, using the router, the TLS communication to a destination specified in the SNI field.
In some embodiments, the destination specified refers to a backend service.
In some embodiments, the SNI field multiplexes a plurality of platform services via the router.
In some embodiments, the TLS communication is routed without decryption.
In some embodiments, the destination refers to a cloud storage service.
In some embodiments, receiving the TLS communication includes intercepting the TLS communication, and the method further includes validating the cloud storage service.
Non-limiting and non-exhaustive embodiments of this disclosure are described with reference to the following figures, wherein like reference numerals refer to like parts throughout the various views unless otherwise specified.
Various embodiments are described more fully below with reference to the accompanying drawings, which form a part hereof, and which show specific exemplary embodiments. However, the concepts of the present disclosure may be implemented in many different forms and should not be construed as limited to the embodiments set forth herein; rather, these embodiments are provided as part of a thorough and complete disclosure, to fully convey the scope of the concepts, techniques and implementations of the present disclosure to those skilled in the art. Embodiments may be practiced as methods, systems or devices. Accordingly, embodiments may take the form of a hardware implementation, an entirely software implementation or an implementation combining software and hardware aspects. The following detailed description is, therefore, not to be taken in a limiting sense.
Reference in the specification to “one embodiment” or to “an embodiment” means that a particular feature, structure, or characteristic described in connection with the embodiments is included in at least one example implementation or technique in accordance with the present disclosure. The appearances of the phrase “in one embodiment” in various places in the specification are not necessarily all referring to the same embodiment. The appearances of the phrase “in some embodiments” in various places in the specification are not necessarily all referring to the same embodiments.
Some portions of the description that follow are presented in terms of symbolic representations of operations on non-transient signals stored within a computer memory. These descriptions and representations are used by those skilled in the data processing arts to most effectively convey the substance of their work to others skilled in the art. Such operations typically require physical manipulations of physical quantities. Usually, though not necessarily, these quantities take the form of electrical, magnetic or optical signals capable of being stored, transferred, combined, compared and otherwise manipulated. It is convenient at times, principally for reasons of common usage, to refer to these signals as bits, values, elements, symbols, characters, terms, numbers, or the like. Furthermore, it is also convenient at times, to refer to certain arrangements of steps requiring physical manipulations of physical quantities as modules or code devices, without loss of generality.
However, all of these and similar terms are to be associated with the appropriate physical quantities and are merely convenient labels applied to these quantities. Unless specifically stated otherwise as apparent from the following discussion, it is appreciated that throughout the description, discussions utilizing terms such as “processing” or “computing” or “calculating” or “determining” or “displaying” or the like, refer to the action and processes of a computer system, or similar electronic computing device, that manipulates and transforms data represented as physical (electronic) quantities within the computer system memories or registers or other such information storage, transmission or display devices. Portions of the present disclosure include processes and instructions that may be embodied in software, firmware or hardware, and when embodied in software, may be downloaded to reside on and be operated from different platforms used by a variety of operating systems.
The present disclosure also relates to an apparatus for performing the operations herein. This apparatus may be specially constructed for the required purposes, or it may comprise a general-purpose computer selectively activated or reconfigured by a computer program stored in the computer. Such a computer program may be stored in a computer readable storage medium, such as, but is not limited to, any type of disk including floppy disks, optical disks, CD-ROMs, magnetic-optical disks, read-only memories (ROMs), random access memories (RAMs), EPROMs, EEPROMs, magnetic or optical cards, application specific integrated circuits (ASICs), or any type of media suitable for storing electronic instructions, and each may be coupled to a computer system bus. Furthermore, the computers referred to in the specification may include a single processor or may be architectures employing multiple processor designs for increased computing capability.
The processes and displays presented herein are not inherently related to any particular computer or other apparatus. Various general-purpose systems may also be used with programs in accordance with the teachings herein, or it may prove convenient to construct more specialized apparatus to perform one or more method steps. The structure for a variety of these systems is discussed in the description below. In addition, any particular programming language that is sufficient for achieving the techniques and implementations of the present disclosure may be used. A variety of programming languages may be used to implement the present disclosure as discussed herein.
In addition, the language used in the specification has been principally selected for readability and instructional purposes and may not have been selected to delineate or circumscribe the disclosed subject matter. Accordingly, the present disclosure is intended to be illustrative, and not limiting, of the scope of the concepts discussed herein.
Even though servers are typically designated by a single IP address, they may actually be hosting thousands of different domain names. To address this problem, website queries in the 1990s added a host field that tells a server which of the domains that it hosts is the intended recipient for the query. This proved to be an important advance for HTTP.
In 2003, Server Name Indication (SNI) was introduced as an extension to the Transport Layer Security (TLS) protocol to allow clients to identify the host they are attempting to connect to as part of the handshake process. Specifically, SNI is a header in the TLS protocol that allows a TLS request to specify the desired host's name. This enables a server to host several websites or services on the same network address or port, akin to a web server that that hosts multiple domains at the same IP address.
In order to provide the name of the server of interest, clients could use an extension of type “server_name” in the initial step of the handshake process. In fact, RFC 3546 recommended that clients include an extension of type “server_name” in the “Client Hello” message whenever they attempt to locate a server by a supported name type. A server that receives a message containing the “server_name” extension may use the data contained in the extension to select the appropriate SSL certificate to return to the client.
As discussed above, clients are at the very least inconvenienced when required by service providers or vendors to reconfigure their firewall. These clients may need to modify their firewall to allow for new or otherwise previously non-allowed endpoints, which are typically defined by a combination of a host name and an IP address. Occasionally, an endpoint is further defined by a port such as a TCP port.
To address this problem, Applicant has implemented SNI routing techniques in the realm of data transmission to multiplex multiple platform services via a single routing service. The results are systems and methods that can route new or otherwise previously unconfigured services via an existing backend service.
Embodiments of the present invention achieve another benefit in that the systems and methods described herein know which endpoint (e.g., an API endpoint) is of interest without requiring any decryption of the messages intended for that endpoint. This improves connection security and transmission speed, as the messages can be routed on, e.g., a byte-by-byte basis, without decrypting the messages prior to routing.
Accordingly, the systems and methods described herein may multiplex a plurality of services to multiple endpoints from a single backend service. These techniques may be used for transmitting data to various virtual machines hosted in cloud storage services such as AMAZON S3 and other types of services whether available now or created hereafter.
In a typical client-vendor scenario, a client may be given the following documentation when setting up a vendor product to use some vendor service:
The “Agent messages and beacons” data type represent vendor command and control protocols. This data type may specify that an agent beacons periodically, essentially as a check-in. The messages aspect specifies that small messages (e.g., less than 256 KB) can go through this pipeline to specify events, such as when a user logs into their laptop.
The “Agent file uploads for collection and update downloads” data type concern larger collections. These may relate to, for example, collecting data specifying applications installed on a device.
Table 1 also includes a list of domain names, where each domain name may be backed by several IP addresses, as well as the involved ports. This data may be relevant for clients when configuring their firewalls to enable them to use the service(s) specified in the “Destination” column. However, a client would therefore have to reconfigure their firewall to open the specified port (i.e., port 443) to allow the service.
The “Agent file upload . . . ” portion of Table 1 may relate to exemplary cloud storage services (e.g., AMAZON S3). These are endpoints that clients may be hesitant to permit through their firewalls as these hosts may be associated with malware or other malicious software in addition to legitimate software applications and services.
As discussed previously, this may inconvenience both the vendor and the client 102. The vendor would have to, for example, call or email the client 102 to instruct them to update their firewall 104. This is time consuming for the vendor, as the vendor may have to communicate instructions to potentially hundreds of clients.
Additionally, there is no guarantee that the client 102 would receive or actually even read this email, much less follow the instructions. If they fail to review the instructions (or fail to act on the instructions), future services may fail.
Even if the client 102 intended to comply with the instructions, they may have to follow certain internal procedures such as submitting a request to their IT department to configure the firewall 104. The client 102 may also have to ensure they comply with any regulatory requirements in adjusting their firewall 104.
Accordingly, the systems and methods described herein overcome these problems by using SNI-based routing techniques to transparently route to a variety of endpoints without modifying any existing code or services. That is, the systems and methods herein do not need to add a particular service to, for example, perform file transfer procedures. Rather, agents can use the SNI header to communicate with the desired service through an SNI-based router.
The endpoint-ingress.app 212 may execute on SNI router 210 and process inbound communications. The self-directing arrow indicates that this endpoint 212 can service requests to “endpoint.ingress” and that no routing has to occur. In other words, any SNI extension or header addressing “endpoint.ingress” is received and serviced by this endpoint 212.
The LB then establishes a TCP connection to endpoint-ingress-app, which consults a map file to determine how to direct the inbound communication. For example, the map file may specify a service for receiving the message given a particular designated domain. This routing may utilize DNS.
As seen in
As discussed above, clients are often hesitant to allow their firewalls to accommodate third party cloud storage services without restrictions. This often is because cloud storage services are associated with or otherwise enable the spread of malware or other malicious software. Specifically, cloud storage services are often leveraged by threat actors as a data storage medium, thereby allowing the cheap and fast uploading of sensitive user data from compromised computers.
Some product vendors may be invested in the use of these cloud storage services, however, and are therefore hesitant to stop using them entirely. These product vendors ensure that only their designated buckets can be leveraged and then rely on the buckets' access control lists to ensure proper security.
This potential security problem is illustrated in
If a customer wanted to use the agent 404, they would have to whitelist the cloud storage service 408. Having done so, malware 402 could also access the cloud storage service 408 through the customer's firewall and other measures, storing information for later retrieval by the attacker 412.
The systems and methods described herein overcome this problem by intercepting client-side requests to the cloud storage service, validating (or rejecting) the requested bucket within the cloud storage service, and thus ensuring that only pre-approved buckets can be requested. The systems and methods described herein may use a host header or URL segment to specify the bucket and an intermediary to decode the request before routing and thereby facilitating the connection.
From the client's perspective, they issue a request to https://storage.endpoint.ingress.vendor.com. That is, they would not issue a request to https://s3.amazonaws.com. Therefore, the client 502 would not observe or need to permit traffic to the S3 service 514. After handling by the load balancer 508, the SNI router 510 receives the request and parses the SNI header in the request to identify that the client 502 wants to communicate with storage.endpoint.ingress.vendor.com, and maps this domain to endpoint-ingress.app 512. Endpoint-ingress app 512 in turn routes this communication to S3 service 514 for storage after validating the bucket.
Endpoint-ingress.app receives these transmissions from the client via the load balancer, and then performs the bucket validation step to ensure that only vendor-approved buckets are requested. The S3 service can respond and provide the appropriate certificate for s3.amazonaws.com) which is used by endpoint-ingress.app to store data in S3.
The user device 702 may be any hardware device capable of executing the user interface 704. The user device 702 may be configured as a laptop, PC, tablet, mobile device, or the like. The exact configuration of the user device 702 may vary as long as it can execute and present the user interface 704 to the user 706. The user interface 704 may allow the user 706 to request services and associated functionality, as well as review associated services and functionality provided by the requested services.
The user 706 may include an employee of a client tasked with managing an organization's network. This management may require the user 706 to access certain services associated with one or more vendors.
The user device 702 may be in operable communication with one or more processors 708. The processor(s) 708 may be any hardware device capable of executing instructions stored on memory 710 to accomplish the objectives of the various embodiments described herein. The processor(s) 708 may be implemented as software executing on a microprocessor, a field programmable gate array (FPGA), an application-specific integrated circuit (ASIC), or another similar device whether available now or invented hereafter.
In some embodiments, such as those relying on one or more ASICs, the functionality described as being provided in part via software may instead be configured into the design of the ASICs and, as such, the associated software may be omitted. The processor(s) 708 may be configured as part of the user device 702 on which the user interface 704 executes, such as a laptop, or may be located on a different computing device, perhaps at some remote location.
The processor 708 may execute instructions stored on memory 710 to provide various modules to accomplish the objectives of the various embodiments described herein. Specifically, the processor 708 may execute or otherwise include an interface 712 and a pre-processing module 714.
The memory 710 may be L1, L2, or L3 cache or RAM memory configurations. The memory 710 may include non-volatile memory such as flash memory, EPROM, EEPROM, ROM, and PROM, or volatile memory such as static or dynamic RAM, as discussed above. The exact configuration/type of memory 710 may of course vary as long as instructions for managing data transmissions or routing communications without requiring firewall configuration can be executed by the processor 708 to accomplish the objectives of various embodiments described herein.
The interface 712 may be in communication with or otherwise receive service requests from the user 706. The interface 712 may also receive any appropriate information from the requested services, such as certificates.
The pre-processing module 714 may perform any required pre-processing steps on the received requests. For example, these steps may include parsing any data associated with the service requests, as well as analyzing the headers or URLs associated with the received service request(s). In performing these steps, the processor 708 may rely on any appropriate data stored in one or more database(s) 716. This may include data associated with the requested services, for example.
The router 718 may implement the SNI routing techniques discussed above to handle received requests. For example, the interface 712 may receive at least a request for a first service and a request for a second service. These requests may be passed to the router 718. Accordingly, and in accordance with the above discussions, the requests for the first and second services originate inside a firewall and the first and second services execute outside the firewall.
The first and second services 720 and 722 may be accessible over one or more networks 724. The network(s) 724 may link the various assets and organizations with various types of network connections. The network(s) 724 may be comprised of, or may interface to, any one or more of the Internet, an intranet, a Personal Area Network (PAN), a Local Area Network (LAN), a Wide Area Network (WAN), a Metropolitan Area Network (MAN), a storage area network (SAN), a frame relay connection, an Advanced Intelligent Network (AIN) connection, a synchronous optical network (SONET) connection, a digital T1, T3, E1, or E3 line, a Digital Data Service (DDS) connection, a Digital Subscriber Line (DSL) connection, an Ethernet connection, an Integrated Services Digital Network (ISDN) line, a dial-up port such as a V.90, a V.34, or a V.34analog modem connection, a cable modem, an Asynchronous Transfer Mode (ATM) connection, a Fiber Distributed Data Interface (FDDI) connection, a Copper Distributed Data Interface (CDDI) connection, or an optical/DWDM network.
The network(s) 724 may also comprise, include, or interface to any one or more of a Wireless Application Protocol (WAP) link, a Wi-Fi link, a microwave link, a General Packet Radio Service (GPRS) link, a Global System for Mobile Communication G(SM) link, a Code Division Multiple Access (CDMA) link, or a Time Division Multiple access (TDMA) link such as a cellular phone channel, a Global Positioning System (GPS) link, a cellular digital packet data (CDPD) link, a Research in Motion, Limited (RIM) duplex paging type device, a Bluetooth radio link, or an IEEE 802.11-based link.
In accordance with the above discussions, the router 718 may route communications with the second service through the first service. Accordingly, clients are not required to reconfigure their firewall (not shown).
Step 804 involves receiving a request for a second service at the router, wherein the request for the second service originates inside the firewall and the second service executes outside the firewall.
In some embodiments, the second service may be a cloud storage service. The cloud storage may be specified in either a host header or a URL associated with the request for the second service.
Step 806 involves routing, using the router, communications with the second service through the first service without requiring the firewall to be reconfigured to allow the communications with the second service. The communications for the first service and the communications for the second service may be transport layer security communications, for example. As discussed above, each of these communications may comprise an SNI field, and the SNI field of each communication may specify the second service although the communications themselves are addressed to the first service.
The routing may include byte-by-byte routing. That is, the routing may be done without decryption.
In some embodiments, receiving the TLS communication may involve intercepting the TLS communication. In these situations, the method may further include validating the service (e.g., a cloud storage service).
Step 904 involves routing, using the router, the TLS communication to a destination specified in the SNI field. The specified destination may refer to a backend service or a cloud storage service, for example. In some embodiments, the SM field may multiplex a plurality of platform services via the router.
As in method 800, the TLS communication may be routed using byte-by-byte routing. That is, the TLS communication may be routed without decryption.
The methods, systems, and devices discussed above are examples. Various configurations may omit, substitute, or add various procedures or components as appropriate. For instance, in alternative configurations, the methods may be performed in an order different from that described, and that various steps may be added, omitted, or combined. Also, features described with respect to certain configurations may be combined in various other configurations. Different aspects and elements of the configurations may be combined in a similar manner. Also, technology evolves and, thus, many of the elements are examples and do not limit the scope of the disclosure or claims.
Embodiments of the present disclosure, for example, are described above with reference to block diagrams and/or operational illustrations of methods, systems, and computer program products according to embodiments of the present disclosure. The functions/acts noted in the blocks may occur out of the order as shown in any flowchart. For example, two blocks shown in succession may in fact be executed substantially concurrent or the blocks may sometimes be executed in the reverse order, depending upon the functionality/acts involved. Additionally, or alternatively, not all of the blocks shown in any flowchart need to be performed and/or executed. For example, if a given flowchart has five blocks containing functions/acts, it may be the case that only three of the five blocks are performed and/or executed. In this example, any of the three of the five blocks may be performed and/or executed.
A statement that a value exceeds (or is more than) a first threshold value is equivalent to a statement that the value meets or exceeds a second threshold value that is slightly greater than the first threshold value, e.g., the second threshold value being one value higher than the first threshold value in the resolution of a relevant system. A statement that a value is less than (or is within) a first threshold value is equivalent to a statement that the value is less than or equal to a second threshold value that is slightly lower than the first threshold value, e.g., the second threshold value being one value lower than the first threshold value in the resolution of the relevant system.
Specific details are given in the description to provide a thorough understanding of example configurations (including implementations). However, configurations may be practiced without these specific details. For example, well-known circuits, processes, algorithms, structures, and techniques have been shown without unnecessary detail in order to avoid obscuring the configurations. This description provides example configurations only, and does not limit the scope, applicability, or configurations of the claims. Rather, the preceding description of the configurations will provide those skilled in the art with an enabling description for implementing described techniques. Various changes may be made in the function and arrangement of elements without departing from the spirit or scope of the disclosure.
Having described several example configurations, various modifications, alternative constructions, and equivalents may be used without departing from the spirit of the disclosure. For example, the above elements may be components of a larger system, wherein other rules may take precedence over or otherwise modify the application of various implementations or techniques of the present disclosure. Also, a number of steps may be undertaken before, during, or after the above elements are considered.
Having been provided with the description and illustration of the present application, one skilled in the art may envision variations, modifications, and alternate embodiments falling within the general inventive concept discussed in this application that do not depart from the scope of the following claims.
This application is a continuation of U.S. patent application Ser. No. 16/558,485, filed Sep. 3, 2019, which is hereby incorporated by reference herein its entirety.
Number | Name | Date | Kind |
---|---|---|---|
10015205 | Cohen et al. | Jul 2018 | B1 |
10122748 | Currie | Nov 2018 | B1 |
10193864 | Toy | Jan 2019 | B2 |
10382401 | Lee | Aug 2019 | B1 |
10430263 | Polar Seminario | Oct 2019 | B2 |
10462057 | Kachmarck et al. | Oct 2019 | B1 |
10484334 | Lee et al. | Nov 2019 | B1 |
10484337 | Subbarayan | Nov 2019 | B2 |
10492102 | Raleigh et al. | Nov 2019 | B2 |
10542097 | Agarwal et al. | Jan 2020 | B2 |
10623390 | Rosenhouse | Apr 2020 | B1 |
10645172 | Hussain | May 2020 | B1 |
10666666 | Saurabh | May 2020 | B1 |
10671726 | Paithane et al. | Jun 2020 | B1 |
10680945 | Ye et al. | Jun 2020 | B1 |
10708233 | Goyal et al. | Jul 2020 | B2 |
10721214 | Bhat et al. | Jul 2020 | B2 |
10728288 | Miriyala | Jul 2020 | B2 |
10742557 | Miriyala et al. | Aug 2020 | B1 |
10771351 | Douglas et al. | Sep 2020 | B2 |
10778684 | Gupta et al. | Sep 2020 | B2 |
10791118 | Konda et al. | Sep 2020 | B2 |
10805104 | Chen et al. | Oct 2020 | B2 |
10805352 | Ithal et al. | Oct 2020 | B2 |
10826905 | Gujarathi | Nov 2020 | B2 |
10831454 | Pathak et al. | Nov 2020 | B2 |
10841336 | Cahana et al. | Nov 2020 | B2 |
10848974 | Bachmutsky et al. | Nov 2020 | B2 |
10887380 | Pahwa et al. | Jan 2021 | B2 |
10904342 | Tollet et al. | Jan 2021 | B2 |
10911409 | Wang et al. | Feb 2021 | B2 |
10944836 | Olds et al. | Mar 2021 | B2 |
10951589 | Neystadt et al. | Mar 2021 | B2 |
10958625 | Thornewell et al. | Mar 2021 | B1 |
10958649 | Delcourt et al. | Mar 2021 | B2 |
10963565 | Xu et al. | Mar 2021 | B1 |
10977140 | Hu et al. | Apr 2021 | B2 |
10997303 | Kraft | May 2021 | B2 |
11005732 | Quevedo | May 2021 | B1 |
11159569 | Janakiraman et al. | Oct 2021 | B2 |
11171950 | Zhuravlev et al. | Nov 2021 | B1 |
11184398 | Narayanaswamy et al. | Nov 2021 | B2 |
11201897 | Miseiko | Dec 2021 | B1 |
11245729 | Monni | Feb 2022 | B2 |
20180115514 | Chou | Apr 2018 | A1 |
20180270257 | Haelion | Oct 2018 | A1 |
20190058709 | Kempf | Feb 2019 | A1 |
20190149538 | Friel et al. | May 2019 | A1 |
20190245894 | Epple et al. | Aug 2019 | A1 |
20190268270 | Fattah | Aug 2019 | A1 |
20190278922 | Levin | Sep 2019 | A1 |
20190312838 | Grimm et al. | Oct 2019 | A1 |
20190312843 | Grimm et al. | Oct 2019 | A1 |
20190318100 | Bhatia et al. | Oct 2019 | A1 |
20190319969 | Rodniansky | Oct 2019 | A1 |
20190325135 | David et al. | Oct 2019 | A1 |
20190342315 | Smelov et al. | Nov 2019 | A1 |
20190349356 | McElwee et al. | Nov 2019 | A1 |
20190349426 | Smith et al. | Nov 2019 | A1 |
20190356693 | Cahana | Nov 2019 | A1 |
20200004966 | Mohinder et al. | Jan 2020 | A1 |
20200053129 | Neystadt | Feb 2020 | A1 |
20200057737 | Chidambaram Nachiappan et al. | Feb 2020 | A1 |
20200059492 | Janakiraman et al. | Feb 2020 | A1 |
20200065405 | Gandenberger et al. | Feb 2020 | A1 |
20200067935 | Carnes, III et al. | Feb 2020 | A1 |
20200076770 | Biran | Mar 2020 | A1 |
20200076902 | Huang | Mar 2020 | A1 |
20200076910 | Kuperman et al. | Mar 2020 | A1 |
20200089881 | Graun | Mar 2020 | A1 |
20200099687 | Parekh | Mar 2020 | A1 |
20200127975 | Burgess | Apr 2020 | A1 |
20200162432 | Ludin et al. | May 2020 | A1 |
20200186600 | Dawani et al. | Jun 2020 | A1 |
20200204485 | Singh | Jun 2020 | A1 |
20200235990 | Janakiraman et al. | Jul 2020 | A1 |
20200236114 | Patil et al. | Jul 2020 | A1 |
20200236187 | Tal | Jul 2020 | A1 |
20200314128 | Hild | Oct 2020 | A1 |
20200329117 | Arbatti et al. | Oct 2020 | A1 |
20200366717 | Chaubey | Nov 2020 | A1 |
20200389429 | Shribman | Dec 2020 | A1 |
20200389469 | Litichever | Dec 2020 | A1 |
20210021641 | Anderson | Jan 2021 | A1 |
20210029170 | Gupta et al. | Jan 2021 | A1 |
20210149957 | Grossman | May 2021 | A1 |
Number | Date | Country | |
---|---|---|---|
20220060506 A1 | Feb 2022 | US |
Number | Date | Country | |
---|---|---|---|
Parent | 16558485 | Sep 2019 | US |
Child | 17520998 | US |