CN111460438A - 一种基于多重沙盒映射与文件分叉的多用户远程系统 - Google Patents

一种基于多重沙盒映射与文件分叉的多用户远程系统 Download PDF

Info

Publication number
CN111460438A
CN111460438A CN201910059826.8A CN201910059826A CN111460438A CN 111460438 A CN111460438 A CN 111460438A CN 201910059826 A CN201910059826 A CN 201910059826A CN 111460438 A CN111460438 A CN 111460438A
Authority
CN
China
Prior art keywords
file
sandbox
service
user
service sandbox
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.)
Pending
Application number
CN201910059826.8A
Other languages
English (en)
Inventor
张维加
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Individual
Original Assignee
Individual
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Individual filed Critical Individual
Priority to CN201910059826.8A priority Critical patent/CN111460438A/zh
Publication of CN111460438A publication Critical patent/CN111460438A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/52Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
    • G06F21/53Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow by executing in a restricted environment, e.g. sandbox or secure virtual machine

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Storage Device Security (AREA)

Abstract

本发明设计了一种基于多重沙盒映射与文件分叉的多用户远程系统,该系统在服务器上创建有多个用户,并在服务器上安装针对各个用户的多用户的全局服务沙盒,即用户A登录机器后进入服务沙盒A,以此类推。全局服务沙盒重定向程序对系统的消息与进程进行拦截与路径重定向,将客户端的文件操作、注册表操作和程序进程操作的真实路径指向对应该服务沙盒的真实存储区。远程用户进入服务沙盒后,其explorer进程等也都应用于沙盒的映射重定向关系,从而其桌面实际上在服务沙盒中,进入后通过其桌面快捷方式或菜单等打开任何程序,均通过服务沙盒打开,运行程序文件组件也实际上是创建了重定向的副本。每一个服务沙盒都有着自身独立的映射关系与重定向存储。

Description

一种基于多重沙盒映射与文件分叉的多用户远程系统
技术领域
本发明属于计算机与网络架构领域,尤其是改善了云架构的效率。
背景技术
传统的多用户远程有两种方式:一种是基于windows系统RDP协议的多用户远程,即在支持多用户的windows服务器系统上设置多个用户账户,而后多个用户通过支持相关协议的设备远程到服务器,从而实现多用户共同使用该服务器。在这种模式下,用户与用户之间是不隔离的,文件和注册表都是单一版本,修改会造成对其他用户的影响。该模式下绝大部分应用程序也没有办法被多个用户同时使用。
第二种是基于虚拟机的远程,即在原服务器上创建多个虚拟机,每个虚拟机都有其自己的用户,这种情况下用户之间是彻底隔离的,但是存在虚拟化算力损耗,即虚拟化开支成本,导致办公中速度非常慢,影响工作效率。并且这种隔离是系统间隔离,完全无法共享计算性能,也无法共享操作系统或应用。
在本发明中,提供了新的一种多用户远程方式。
这种远程方式是弹性的隔离,并且能够随着用户的使用而实现数据和系统的分叉。对于多个用户,远程登录后即处于自己的沙盒环境之中,所创建的文件其他的沙盒看不到,应用程序都可以多重打开,互相不影响。
步骤中涉及的操作包括文件重定向,关键进程的hook,NTFS流的加密等,具体如下。
发明内容
本发明设计了一种基于多重沙盒映射与文件分叉的多用户远程系统,在文件和注册表层面实现用户间隔离与各自分叉,并实现了用户进程的多开,提升了整个局域网机器的多用户处理能力。
该系统包含有至少一台基础服务器,基础服务器安装有基于NT架构的操作系统,有文件系统,注册表系统,以及可安装应用程序,在服务器上创建有多个用户,并在服务器上安装针对各个用户的多用户的服务沙盒,即用户A登录机器后进入服务沙盒A,用户B登录机器后进入服务沙盒B,以此类推,每一个服务沙盒都有着自身独立的映射关系,有着自身的重定向存储,与设置。服务沙盒重定向程序对系统的消息与进程进行拦截与路径重定向,将客户端的文件操作、注册表操作和应用程序操作的真实路径都指向服务端上对应该服务沙盒的真实存储区。(在服务沙盒A下又可以创建下一级服务子沙盒A1,从而形成多层服务沙盒。而A1的文件与程序基于A的某一时刻状态开始分叉、演化。)。
服务沙盒所涉及的重定向可以包括(不一定全部包括):
1.文件重定向,假定创建时基础服务器的桌面有某文件document.doc,则A访问document.doc后,产生了属于服务沙盒A的副本document.doc(位于服务沙盒A),真实存储位置其实经重新定向,假定在Z盘A文件夹,同理,B登录系统后访问document.doc后,产生了属于服务沙盒B的副本document.doc(位于服务沙盒B),真实存储位置假定在Z盘B文件夹;
2.注册表重定向,注册表重定向是可选的,实现方式也不唯一,一种设想是也采用类似的方式,修改所要操作注册表的路径,将目标注册表键重定向到用户个人注册表树中;
3.对于不同的服务沙盒之间,可以实现进程的隔离和多开,区分不同用户进程,将每个用户启动的进程的 PID和服务沙盒的用户名联系起来,每个用户进程的操作会被服务沙盒拦截住,通过调用 GetCurrentProcessId 可以知道当前拦截的哪个进程,进而可以知道该进程属于哪个用户,通过记录进程 Pid 与用户名的方式来区分不同的用户进程,而 Pid可以在系统中复用,因此,我们在进程结束后需要及时更新 Pid 和服务沙盒的用户名的对应关系。另外Windows 提供有一个作业(job)内核对象,允许开发者将多个进程组合起来并放在一个“容器”里面,由此限制进程的行为。利用作业的特性,服务沙盒可以在以下几个方面进行相应的限制:(1) 分配该用户所能使用的最大系统资源,设置上限。根据预设策略规定了该用户享有的最大沙盒存储空间大小、进程空间大小(内存限制)、CPU 占用(调度优先级)。利用这些参数,对作业进行基本限额限制,控制作业中每个进程的运行时间、进程工作集的大小、进程的优先级类等;(2) 希望用户作业中的进程在资源访问时也能处于受控的范围,因此需要在作业的安全限制中,限制作业内的进程访问安全资源(关键文件、注册表子项等)。作业对象能强制使用或者禁止某些特定的安全标识符(security identifier,SID),由此达到限制进程访问安全资源的目的;(3) 通过将用户进程添加到用户作业中,只需要通过查询作业使用的资源信息(CPU 使用时间、当前工作集大小)就能得到该用户所有进程的资源总和。
采取上述操作后,将explorer进程、用户的各种文件夹(桌面、我的文档)等,都设置为自动进入沙盒(即hook这些进程、强制注入),从而形成一个全局化的服务沙盒。如附图1所示。
假定用户C以远程方式登录,则登录后即实际上进入了基于基础服务器安装部署的用户C服务沙盒,其所看到的桌面、文件、应用程序,实际上都是经过了重定向的虚拟化映射,真实的存储位置位于用户C专门的存储位置,如可以是Z盘下面的C文件夹。
在这种模式下,用户C打开任何程序,实际上也是通过服务沙盒C打开,相关的程序文件组件也实际上是创建了重定向的副本。
当用户B与用户C同时远程到基础服务器并登录,则也是各自进入对应的服务沙盒,用户B登录后进入服务沙盒B,而用户C登录后进入服务沙盒C,各自的服务沙盒中的内容随着访问都逐渐创建为重定向的副本,这个过程称之为分叉。(在服务沙盒A下又可以创建下一级服务子沙盒A1,从而形成多层服务沙盒。而A1的文件与程序基于A的某一时刻状态开始分叉、演化。)。
各个服务沙盒的重定向位置也有多种可能,可以将服务端机器的内存虚拟成磁盘如Ramdisk,以该内存虚拟出的磁盘中,为每个客户端设置对应的真实存储区文件夹,对该虚拟磁盘可以做透明加密。也可以创建多个虚拟磁盘,分别重定向到各自的虚拟磁盘,等等。
服务沙盒重定向程序除了对系统的消息与进程进行拦截与路径重定向,将客户端的文件操作、注册表操作和程序操作的真实路径指向对应该服务沙盒的真实存储区,还对安装在服务器上的程序代码如php程序、web程序等,以如下方式加密其代码,使其可以在服务器上正常运行而原始内容不会为远程用户所获得:
在基础服务器的内核中做了一个文件过滤系统,可以在配置文件中设置指定的进程名作为机密进程,并且可以设置需要加密处理的扩展名(也可以设置为所有文件)。机密进程能打开正常文件或被加密的文件,当机密进程输出了一个需要被加密的文件,那这个文件会被自动加密.当把加密文件复制到一个没有透明加密环境的系统中,文件从二进制级别看来就是一堆,即通常所称的“乱码”。
对于本发明的具体实例所涉及的NT架构的基础服务器,NTFS文件系统有一个特性,就是可以对文件绑定一个或多个数据流,这个数据流通常是看不到的,并且每个数据流都可以有一个名称,不受文件复制,删除,移动重命名等操作影响.加密标识正好可以作为一个NTFS流存在于文件中.在打开文件时就可以判断是否存在一个指定的数据流,不存在就是非加密的.存在的话可以读取这个数据流,获取与加密相关更多的信息。
当驱动过滤到文件打开请求时,判断请求进程是否为机密进程.若是普通进程则不需要去处理文件有没有被加密,若是机密进程则需要判断文件是否是已加密文件,未加密文件直接打开,已加密文件则将文件解密让应用层打开,并限制此文件让非机密进程打开.这样不管加密的还是非加密的文件都能被机密进程打开,而非机密进程打开加密文件得到的是加密的数据(一堆乱码)。
当驱动过滤到文件关闭请求时,若请求是机密进程,且按照设置该文件名是需要加密的类型,并且对文件任了修改,则需要把文件加密,写入加密标识到指定数据流中, 以表示此文件为已加密的文件。
作为一个具体实施案例,在上述基本架构的基础上,实施案例还做了如下的设置:
实例中我们的服务沙盒是通过依赖驱动自动注入一个应用层DLL,而在DLL中对多个底层API做了HOOK,来达到一些操作控制的目的。
1. DLL注入:
DLL的自动注入依赖于服务沙盒的驱动,在内核中使用PsSetLoadImageNotifyRoutine,即注册模块加载回调来获取进程启动时的DLL注入时机。当模块回调被调用时,这时候进程exe模块已被加载到内存中,但其所依赖的DLL尚未被加载,可以通过修改内存中的exe模块的输入表,在输入表靠前位置中额外加入一个服务沙盒DLL,这样达到了在进程启动时自动加载服务沙盒DLL的目的。
2. 多用户服务沙盒在应用层Hook时机:
当进程初次加载本服务沙盒DLL时,此时只有ntdll,user32,kernel32等少数几个DLL已完成初始化,在此时修改所需要管控的底层api入口,跳转到服务沙盒DLL中相关入口。DLL中接管的入口函数会作一些判断修改,或调用原有的底层功能,或直接作一番处理而不调用原底层功能。最终返回到用户模块,对用户来说是透明的。
3. 多用户服务沙盒在应用层Hook的函数:
文件重定向方面多用户服务沙盒hook以下函数:
NtCreateFile,NtOpenFile,NtQueryAttributesFile,NtQueryFullAttributesFile,NtQueryInformationFile,NtQueryDirectoryFile,NtSetInformationFile,NtDeleteFile,NtClose,NtQueryVolumeInformationFile,NtQueryObject,NtQuerySecurityObject
以及因文件重定向得做出一些修正的函数:
GetModuleFileNameW,GetModuleFileNameA,CreateProcessA,CreateProcessW,WinExec,CreateProcessAsUserW,ShellExecuteExW
窗口标题的修改方面多用户服务沙盒hook以下函数:
CreateDialogIndirectParamAorW,DialogBoxIndirectParamAorW,CreateWindowExA,CreateWindowExW,FindWindowA,FindWindowW,FindWindowExA,FindWindowExW
进程多开方面多用户服务沙盒hook以下函数:
NtOpenEvent,NtCreateEvent,NtOpenMutant,NtCreateMutant,NtCreateMailslotFile,NtCreatePort,NtConnectPort,NtCreateSemaphore,NtOpenSemaphore,NtOpenProcess,SendMessageA,SendMessageW,PostMessageA,PostMessageW,NtQuerySystemInformation
此外,在实例中,
1. 客户端除了重定向,还部署了屏幕监控,网管可以对客户端的屏幕进行;
2.为了防止内存泄漏,发起远程的客户端内存与服务端之间的交互进行了加密;
3.设立了严格的自我保护机制,系统的客户端沙盒进程进行自我保护,校验常驻进程的保护程序,一旦保护程序自检异常就锁闭计算机。而这个保护程序会进行对调试环境,破坏程序等的检测,一旦发现就标记异常;
4.为了一些对外工作的需要,系统客户端所有安全区域内的涉密内容要外发出去到非涉密区域,必须通过一个中转程序,如邮件系统或即时通讯系统,该中转程序经过审核且有详细日志记录,可供后续查询、问责;
5.存储上,实例所用的基础服务器不采用传统的单一存储,而是使用一个针对程序层与文件层分流,针对涉密操作与非涉密操作分流的存储架构体系,该架构包括如下部分:A.程序层存储设备;B.文件层存储设备。
说明书附图说明:
图1、本发明的部署示意图。

Claims (10)

1.一种基于多重沙盒映射与文件分叉的多用户远程系统,该系统包含有:
a.至少一台基础服务器,基础服务器安装有基于NT架构的操作系统,有文件系统,可安装应用程序;
b.在服务器上创建有多个用户,并在服务器上部署针对各个用户的多用户的全局服务沙盒,即用户A登录机器后进入服务沙盒A,用户B登录机器后进入服务沙盒B,以此类推,全局服务沙盒重定向程序对系统的消息与进程进行拦截与路径重定向,将客户端的文件操作、注册表操作和程序进程操作的真实路径指向对应该服务沙盒的真实存储区,各个服务沙盒均设置各自对应的存储位置来存储重定向后的文件;
c.进入服务沙盒后,其explorer进程等也都应用于沙盒的映射重定向关系,从而其桌面实际上在服务沙盒中,与服务沙盒外的桌面不同,进入后通过其桌面快捷方式或开始菜单等打开任何程序,均通过服务沙盒打开,运行相关的程序文件组件也实际上是创建了重定向的副本(多副本运行架构);
d.每一个服务沙盒都有着自身独立的映射关系,有着自身的重定向存储,与其他用户的服务沙盒隔离。
2.根据权利要求1的一种系统,其特征在于,在文件和注册表层面实现用户间隔离与各自分叉:随着用户在各自的服务沙盒内对文件的调用、修改、移动等,均按照每个服务沙盒创建副本、重定向的方式,在该服务沙盒所对应的存储区域中创建副本,将真实路径重定向到新的副本,从而随着用户的使用形成数据空间的分叉(在某服务沙盒A下还可以创建下一级服务子沙盒A1,从而形成多层服务沙盒,而A1的文件与程序则基于A的某一时刻状态为初始状态开始分叉、演化)。
3.根据权利要求1的一种系统,其特征在于,所述的服务沙盒是一种全局的重定向机制,将explorer进程、用户的各种文件夹(桌面、我的文档)等,都设置为自动进入沙盒(即hook这些进程、强制注入),假定用户C以远程方式登录,则登录后即实际上进入了基于基础服务器安装部署的对应用户C的服务沙盒,其所看到的桌面、文件、应用程序,实际上都是经过了重定向的虚拟化映射,真实的存储位置位于用户C专门的存储位置,在这种模式下,用户C打开任何程序,相关的程序文件组件也实际上是创建了重定向的副本,在服务沙盒内的程序或文件夹而引申打开的程序、文件夹也自然在服务沙盒内(全局设计)。
4.根据权利要求1的一种系统,其特征在于,服务沙盒的驱动负责DLL的自动注入,在内核中使用PsSetLoadImageNotifyRoutine,即注册模块加载回调来获取进程启动时的DLL注入时机,当模块回调被调用时,这时候进程exe模块已被加载到内存中,但其所依赖的DLL尚未被加载,可以通过修改内存中的exe模块的输入表,在输入表靠前位置中额外加入一个服务沙盒DLL,这样达到了在进程启动时自动加载服务沙盒DLL的目的。
5.根据权利要求1的一种系统,其特征在于,多用户服务沙盒在应用层Hook以如下方式启动:当进程初次加载本服务沙盒DLL时,此时只有ntdll,user32,kernel32等少数几个DLL已完成初始化,在此时修改所需要管控的底层api入口,跳转到服务沙盒DLL中相关入口;DLL中接管的入口函数会作一些判断修改,或调用原有的底层功能,或直接作一番处理而不调用原底层功能,最终返回到用户模块,对用户来说是透明的。
6.根据权利要求1 的一种系统,其特征在于,每个服务沙盒所对应的真实重定向存储区域是一个个互相独立的虚拟磁盘,该虚拟磁盘还通过透明加密实现对用户进程的额外权限控制。
7.根据权利要求1 的一种系统,其特征在于,每个服务沙盒所对应的真实重定向存储区域是一个虚拟磁盘下的各个文件夹,经透明加密分配权限。
8.根据权利要求1 的一种系统,其特征在于,注入服务沙盒的dll后hook了如下函数:NtOpenEvent,NtCreateEvent,NtOpenMutant,NtCreateMutant,NtCreateMailslotFile,NtCreatePort,NtConnectPort,NtCreateSemaphore,NtOpenSemaphore,NtOpenProcess,SendMessageA,SendMessageW,PostMessageA,PostMessageW,NtQuerySystemInformation。
9.根据权利要求1 的一种系统,其特征在于, 安装在服务器上的程序代码如php程序等以如下方式处理:在基础服务器的内核中做了一个文件过滤系统,可以在配置文件中设置指定的进程名作为机密进程,并且可以设置需要加密处理的扩展名(也可以设置为所有文件),机密进程能打开正常文件或被加密的文件,当机密进程输出了一个需要被加密的文件,那这个文件会被自动加密,当把加密文件复制到一个没有透明加密环境的系统中,文件从二进制级别看来就是一堆,即通常所称的“乱码”:对于NT架构的基础服务器,加密标识以作为一个NTFS流存在于文件中.在打开文件时就可以判断是否存在一个指定的数据流,不存在就是非加密的,存在的话可以读取这个数据流,获取与加密相关更多的信息;当驱动过滤到文件打开请求时,判断请求进程是否为机密进程,若是普通进程则不需要去处理文件有没有被加密,若是机密进程则需要判断文件是否是已加密文件,未加密文件直接打开,已加密文件则将文件解密让应用层打开,并限制此文件让非机密进程打开;当驱动过滤到文件关闭请求时,若请求是机密进程,且按照设置该文件名是需要加密的类型,并且对文件任了修改,则需要把文件加密,写入加密标识到指定数据流中, 以表示此文件为已加密的文件。
10.根据权利要求1的一种系统,其特征在于,注入服务沙盒的dll后hook了如下函数:NtCreateFile,NtOpenFile,NtQueryAttributesFile,NtQueryFullAttributesFile,NtQueryInformationFile,NtQueryDirectoryFile,NtSetInformationFile,NtDeleteFile,NtClose,NtQueryVolumeInformationFile,NtQueryObject,NtQuerySecurityObject。
CN201910059826.8A 2019-01-22 2019-01-22 一种基于多重沙盒映射与文件分叉的多用户远程系统 Pending CN111460438A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910059826.8A CN111460438A (zh) 2019-01-22 2019-01-22 一种基于多重沙盒映射与文件分叉的多用户远程系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910059826.8A CN111460438A (zh) 2019-01-22 2019-01-22 一种基于多重沙盒映射与文件分叉的多用户远程系统

Publications (1)

Publication Number Publication Date
CN111460438A true CN111460438A (zh) 2020-07-28

Family

ID=71683129

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910059826.8A Pending CN111460438A (zh) 2019-01-22 2019-01-22 一种基于多重沙盒映射与文件分叉的多用户远程系统

Country Status (1)

Country Link
CN (1) CN111460438A (zh)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113139177A (zh) * 2021-05-17 2021-07-20 杭州天宽科技有限公司 一种安卓应用虚拟化环境中的文件隔离优化增强方法
CN115065729A (zh) * 2022-05-24 2022-09-16 亚太卫星宽带通信(深圳)有限公司 一种基于Kubernetes的边缘应用沙盒移植方法
CN115329389A (zh) * 2022-10-17 2022-11-11 中安网脉(北京)技术股份有限公司 一种基于数据沙箱的文件保护系统及方法

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113139177A (zh) * 2021-05-17 2021-07-20 杭州天宽科技有限公司 一种安卓应用虚拟化环境中的文件隔离优化增强方法
CN113139177B (zh) * 2021-05-17 2022-07-22 杭州天宽科技有限公司 一种安卓应用虚拟化环境中的文件隔离优化增强方法
CN115065729A (zh) * 2022-05-24 2022-09-16 亚太卫星宽带通信(深圳)有限公司 一种基于Kubernetes的边缘应用沙盒移植方法
CN115065729B (zh) * 2022-05-24 2023-10-17 亚太卫星宽带通信(深圳)有限公司 一种基于Kubernetes的边缘应用沙盒移植方法
CN115329389A (zh) * 2022-10-17 2022-11-11 中安网脉(北京)技术股份有限公司 一种基于数据沙箱的文件保护系统及方法

Similar Documents

Publication Publication Date Title
US11868795B1 (en) Selective virtualization for security threat detection
US20180307860A1 (en) Managing configurations of computing terminals
US9396326B2 (en) User transparent virtualization method for protecting computer programs and data from hostile code
US7698713B2 (en) Altered states of software component behavior
Backes et al. Boxify: Full-fledged app sandboxing for stock android
KR101152227B1 (ko) 클라이언트 및 서버의 보안방법
US7694328B2 (en) Systems and methods for secure client applications
US20160196449A1 (en) Apparatus for and Method of Preventing Unsecured Data Access
KR101308859B1 (ko) 임시 관리자 권한 부여 기능을 가진 단말기 및 이를 이용한 임시 관리자 권한 부여 방법
US10171502B2 (en) Managed applications
CN111460438A (zh) 一种基于多重沙盒映射与文件分叉的多用户远程系统
US11074323B2 (en) Method and system for persisting files
US10223526B2 (en) Generating packages for managed applications
EP3298534B1 (en) Creating multiple workspaces in a device
Sabanal et al. Playing in the Reader X sandbox
EP2750068B1 (en) System and method for protecting computer resources from unauthorized access using isolated environment
Vaclavik Einschränken von Applikationen mittels verfügbarer Werkzeuge für Windows Systeme

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
WD01 Invention patent application deemed withdrawn after publication
WD01 Invention patent application deemed withdrawn after publication

Application publication date: 20200728