CN110298165B - 安全访问共享内存的方法、装置以及认证代理 - Google Patents

安全访问共享内存的方法、装置以及认证代理 Download PDF

Info

Publication number
CN110298165B
CN110298165B CN201810239865.1A CN201810239865A CN110298165B CN 110298165 B CN110298165 B CN 110298165B CN 201810239865 A CN201810239865 A CN 201810239865A CN 110298165 B CN110298165 B CN 110298165B
Authority
CN
China
Prior art keywords
file
shared memory
carrier
service
hash value
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
Application number
CN201810239865.1A
Other languages
English (en)
Other versions
CN110298165A (zh
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.)
Tencent Technology Shenzhen Co Ltd
Original Assignee
Tencent Technology Shenzhen Co Ltd
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 Tencent Technology Shenzhen Co Ltd filed Critical Tencent Technology Shenzhen Co Ltd
Priority to CN201810239865.1A priority Critical patent/CN110298165B/zh
Publication of CN110298165A publication Critical patent/CN110298165A/zh
Application granted granted Critical
Publication of CN110298165B publication Critical patent/CN110298165B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

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/30Authentication, i.e. establishing the identity or authorisation of security principals
    • G06F21/44Program or device authentication
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/60Protecting data
    • G06F21/62Protecting access to data via a platform, e.g. using keys or access control rules
    • G06F21/6218Protecting access to data via a platform, e.g. using keys or access control rules to a system of files or objects, e.g. local or distributed file system or database
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/60Protecting data
    • G06F21/64Protecting data integrity, e.g. using checksums, certificates or signatures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2221/00Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/03Indexing scheme relating to G06F21/50, monitoring users, programs or devices to maintain the integrity of platforms
    • G06F2221/033Test or assess software

Abstract

本公开提供了一种安全访问共享内存的方法、装置以及认证代理。该方法包括:响应于接收到业务文件进程对载体文件描述符的请求,读取所述业务文件;获取所述业务文件的哈希值;基于所述业务文件的哈希值,对所述业务文件进行合法性认证;如果认证通过,将所述载体文件描述符传送到所述业务文件进程,以供所述业务文件进程访问共享内存。本公开进一步提高了共享内存访问的安全性。

Description

安全访问共享内存的方法、装置以及认证代理
技术领域
本公开涉及计算机存储领域,具体涉及一种安全访问共享内存的方法、装置以及认证代理。
背景技术
共享内存作为一种高效的跨进程通讯手段,被广泛用于现代编程中。它的缺点是,任意业务文件进程都能简单连接到一块特定的共享内存,从而能随意获取/篡改其内容。
Linux机制下,可以通过文件映射的方式来提供对共享内存C的访问。为共享内存在内存文件系统下分配一个文件名,从而为共享内存建立了载体文件A。载体文件A是共享内存C的载体。该载体文件A直接存在于内存中,访问内存的效率比访问硬盘高得多。然后,为载体文件A分配一个文件描述符fd。业务文件进程要访问共享内存C时,获取该文件描述符fd,利用该文件描述符fd将载体文件A映射到自己的进程空间中。由于载体文件A实际上就是共享内存C的载体,因此,业务文件进程可以在载体文件A中对共享内存进行访问。
任何业务文件进程都可以获取文件描述符fd,从而通过文件映射的方式实现对共享内存的访问。如果该业务文件进程是恶意程序,可能造成共享文件的泄露或篡改。另外,恶意进程甚至可以不获取文件描述符fd,而是采用简单拷贝、读取按照上述过程在机器中创造的载体文件A的方式来篡改共享内存。共享内存的安全性得不到保证。为了提高共享文件的安全性,现有技术中采用认证业务文件进程的身份的方案。在接收到业务文件进程的共享内存访问请求后,先认证业务文件进程的身份,如身份合法,才能给业务文件进程提供文件描述符fd或让业务文件进程访问载体文件A。然而,恶意程序可能通过提交篡改的身份的方式通过认证,对共享内存访问的安全性提高有限。
发明内容
本公开的一个目的在于进一步提高共享内存访问的安全性。
根据本公开实施例的第一方面,公开了一种安全访问共享内存的方法,包括:
响应于接收到业务文件进程对载体文件描述符的请求,读取所述业务文件;
获取所述业务文件的哈希值;
基于所述业务文件的哈希值,对所述业务文件进行合法性认证;
如果认证通过,将所述载体文件描述符传送到所述业务文件进程,以供所述业务文件进程访问共享内存。
根据本公开实施例的第二方面,公开了一种安全访问共享内存的装置,包括:
读取单元,用于响应于接收到业务文件进程对载体文件描述符的请求,读取所述业务文件;
哈希值获取单元,用于获取所述业务文件的哈希值;
哈希值认证单元,用于基于所述业务文件的哈希值,对所述业务文件进行合法性认证;
传送单元,用于如果认证通过,将所述载体文件描述符传送到所述业务文件进程,以供所述业务文件进程访问共享内存。
根据本公开实施例的第三方面,公开了一种认证代理,包括:
存储器,存储有计算机可读指令;
处理器,读取存储器存储的计算机可读指令,以执行如上所述的方法。
根据本公开实施例的第四方面,公开了一种计算机程序介质,其上存储有计算机可读指令,当所述计算机可读指令被计算机的处理器执行时,使计算机执行如上所述的方法。
本公开的实施例中,不是简单地通过让需要访问共享内存的业务文件进程提交身份数据来进行认证,而且直接读取业务文件,计算业务文件的哈希值进行合法性认证。哈希值是业务文件的特征的集中体现。这样,恶意用户即使窃取了合法账号,或提交了篡改的数据,其业务文件仍然是不合法的,计算出的哈希值也是不合法的,无法通过认证。因此,进一步提高了共享内存访问的安全性。
本公开的其他特性和优点将通过下面的详细描述变得显然,或部分地通过本公开的实践而习得。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性的,并不能限制本公开。
附图说明
通过参照附图详细描述其示例实施例,本公开的上述和其它目标、特征及优点将变得更加显而易见。
图1示出根据本公开一示例实施方式的安全访问共享内存的方法使用环境的构架图。
图2示出根据本公开一示例实施方式的安全访问共享内存的方法的流程图。
图3示出根据本公开一示例实施方式的安全访问共享内存的方法的流程图。
图4示出根据本公开一示例实施方式的共享密钥访问的具体应用场景构架图。
图5A-E示出了在图4的应用场景下的共享密钥访问的具体流程图,其中图5A是生成密钥的第一业务文件进程将密钥写入共享内存的流程图,图5B是获取密钥的第二业务文件进程从共享内存中读取密钥的流程图,图5C是第一恶意程序通过以合法账号来访问密钥最终被拒绝的流程图,图5D是第二恶意程序通过替换合法路径下的业务文件,启动后再把合法业务文件覆盖回来的方式来访问密钥,最终被拒绝的流程图,图5E是第三恶意程序通过直接拷贝载体文件来访问密钥最终被拒绝的流程图。
图6示出根据本公开一示例实施方式的安全访问共享内存的装置的结构框图。
图7示出根据本公开一示例实施方式的安全访问共享内存的装置的结构框图。
图8示出根据本公开一示例实施方式的认证代理的结构框图。
具体实施方式
现在将参考附图更全面地描述示例实施方式。然而,示例实施方式能够以多种形式实施,且不应被理解为限于在此阐述的范例;相反,提供这些示例实施方式使得本公开的描述将更加全面和完整,并将示例实施方式的构思全面地传达给本领域的技术人员。附图仅为本公开的示意性图解,并非一定是按比例绘制。图中相同的附图标记表示相同或类似的部分,因而将省略对它们的重复描述。
此外,所描述的特征、结构或特性可以以任何合适的方式结合在一个或更多示例实施方式中。在下面的描述中,提供许多具体细节从而给出对本公开的示例实施方式的充分理解。然而,本领域技术人员将意识到,可以实践本公开的技术方案而省略所述特定细节中的一个或更多,或者可以采用其它的方法、组元、步骤等。在其它情况下,不详细示出或描述公知结构、方法、实现或者操作以避免喧宾夺主而使得本公开的各方面变得模糊。
附图中所示的一些方框图是功能实体,不一定必须与物理或逻辑上独立的实体相对应。可以采用软件形式来实现这些功能实体,或在一个或多个硬件模块或集成电路中实现这些功能实体,或在不同网络和/或处理器装置和/或微控制器装置中实现这些功能实体。
图1示出根据本公开一示例实施方式的安全访问共享内存的方法的使用环境构架图。如图1所示,该使用环境构架包括业务文件进程1、认证代理2、服务器3、共享内存4。
共享内存4是指内存中一块共享的区域,该区域可以被多个业务文件进程1所共享。业务文件即业务可执行文件,是指计算机为了完成一个业务而需要执行的一系列计算机程序代码。业务文件是静态的。业务文件进程1是业务文件执行的结果,即为了完成业务而动态运行的计算机程序。业务文件进程1是计算机进行资源分配和调度的基本单位。
在一个实施例中,共享内存4可以被所有业务文件进程1共享。在另一个实施例中,共享内存4只能被有权限的业务文件进程1共享,例如,仅允许企业内部团队成员的计算机上的进程共享。
共享内存4可以是一台计算机上的共享内存,也可以是多台计算机上共享内存的总和。例如,在云环境中,多台计算机联网,其内存被多台计算机共同使用和调度,此时共享内存4可以是这多台计算机的内存的总和。这里的计算机是一切具有计算机处理功能的设备的统称,包括桌面电脑、平板电脑、手机、PDA、汽车导航设备、智能手表等。
业务文件进程1可以是一台计算机上执行的业务文件进程,也可以是多台计算机上执行的业务文件进程。在云环境中,多台计算机联网,业务文件进程1所在的计算机与共享内存4所在的计算机可以是同一台计算机,也可以是不同计算机。
认证代理2是为了实现根据本公开一示例实施方式的安全访问共享内存的方法而对共享内存的访问进行认证的设备,它是根据本公开实施例的一种安全访问共享内存的方法的执行主体。它可以由一台计算机构成,也可以由多台联网的计算机构成。例如,在云环境下,由多台计算机联网,多台计算机的处理功能和存储功能都是共用的,这时多台计算机共同起到对共享内存的访问进行认证的作用,这多台计算机合起来组成认证代理3。
本公开的实施例可以应用于共享密钥的场景中,如以下结合图4所述。在共享密钥的场景中,共享密钥只在团队内的成员之间共享,不能对其他人开放,因此需要绝对杜绝被恶意程序访问。在该应用场景中,场景构架与图1一致,区别在于在该应用场景下,存储在共享内存4中的具体数据是共享密钥。共享密钥被生成并写入共享内存4中的过程在以下结合图5A的描述中详细讨论。共享密钥被从共享内存4中读取的过程在以下结合图5B的描述中详细讨论。
如图2所示,根据本公开一个实施例的一种安全访问共享内存的方法包括:
步骤110、响应于接收到业务文件进程对载体文件描述符的请求,读取所述业务文件;
步骤120、获取所述业务文件的哈希值;
步骤130、基于所述业务文件的哈希值,对所述业务文件进行合法性认证;
步骤140、如果认证通过,将所述载体文件描述符传送到所述业务文件进程,以供所述业务文件进程访问共享内存。
下面对这些步骤分别详细描述。
在步骤110中,响应于接收到业务文件进程对载体文件描述符的请求,读取所述业务文件。
载体文件描述符是预先分配的、对共享内存载体文件进行描述的字符或符号,它与载体文件一般具有一一对应关系。如上所述,在通过文件映射的方式访问共享内存的实施方式中,为共享内存在内存文件系统下分配一个文件名,从而为共享内存建立了载体文件。载体文件是共享内存的载体。然后,为载体文件分配一个文件描述符。业务文件进程要访问共享内存时,获取该文件描述符,利用该文件描述符将载体文件映射到自己的进程空间中。进程空间是指进程运行占用的内部存储空间。由于载体文件实际上就是共享内存的载体,因此,业务文件进程可以在载体文件中对共享内存进行访问。
业务文件进程对载体文件描述符的请求是指为了访问共享内存而对相应的载体文件描述符的请求。只有获取了该描述符,才能利用该描述符将载体文件映射到业务文件进程空间中进行共享内存访问。
在一个实施例中,读取所述业务文件具体包括:
利用Linux的套接字选项SO_PEERCRED获取所述业务文件进程标识号(PID);
基于所述PID,利用Linux的readlink()函数获取所述业务文件进程的路径;
在获取的路径下读取所述业务文件。
业务文件进程的路径是指业务文件进程所在的路径,例如,linux中的路径/usr/local/。
PID是指唯一标识进程的字符或符号,它与进程有一一对应关系。利用Linux的套接字选项SO_PEERCRED,就可以获取当前要访问共享内存的业务文件进程的PID,而无需业务文件进程提交任何数据。
Readlink()是Linux提供的一种内部机制,它能直接获取业务文件进程的路径。Linux在启动一个进程时,会在目录/proc下创建一个以PID命名的文件夹,在该文件夹下会有该进程的信息,其中包括一个名为exe的文件即记录了绝对路径,Readlink()函数即可获取。
上述套接字选项SO_PEERCRED和readlink()函数都是Linux固有的机制,它的特点是不需要用户提交任何数据而直接获取。套接字选项SO_PEERCRED和readlink()函数获取数据的来源都是恶意进程无法访问和更改的,如目录/proc下创建的以PID命名的文件夹。因此,即使恶意用户提交伪造的数据或篡改身份,仍然无济于事,反而更容易暴露。
在获得了业务文件进程的路径后,则可以在该路径下读取业务文件。
在步骤120,获取所述业务文件的哈希值。
哈希算法是这样一种算法,它从庞大的字符串中提取能代表庞大的字符串的特征,从而生成较短的字符串。该较短的字符串由于体现了提取出的特征,仍然能够最大限度地区分该庞大字符串。业务文件是一串庞大的字符串。将哈希算法应用于业务文件,即可得到该业务文件的哈希值,其集中体现了业务文件的特征。
在一个实施例中,哈希算法采用SHA256算法。
在步骤130中,基于所述业务文件的哈希值,对所述业务文件进行合法性认证。
在一个实施例中,步骤130包括:
将所述业务文件的哈希值与合法的哈希值列表进行比较,如匹配,则认证通过。
在一个实施例中,合法的哈希值列表可以通过预先读取多个样本合法业务文件,并对所述多个样本合法业务文件应用哈希算法得到。选取的作为样本的合法业务文件越多,应用哈希算法得到的合法的哈希值就越多,合法的哈希值列表的容量越大,认证准确率就越高。得到的合法的哈希值列表可以存储在认证代理2。
在另一个实施例中,所述合法的哈希值列表存储在服务器3。所述将得到的哈希值与合法的哈希值列表进行比较具体包括:
从服务器获取合法的哈希值列表;
如果得到的哈希值与合法的哈希值列表中的一个哈希值一致,则找到匹配。
合法的哈希值列表也可以通过上述预先获取多个样本合法业务文件,并对所述多个样本合法业务文件应用哈希算法得到。选取的作为样本的合法业务文件越多,应用哈希算法得到的合法的哈希值就越多,合法的哈希值列表的容量越大,认证准确率就越高。得到的合法的哈希值列表可以存储在服务器。当需要将得到的哈希值与合法的哈希值列表比较时,向服务器发送请求。服务器返回合法的哈希值列表。
在步骤140中,如果认证通过,将所述载体文件描述符传送到所述业务文件进程,以供所述业务文件进程访问共享内存。
在一个实施例中,步骤140包括:利用Linux的sendmsg()函数,结合SCM_RIGHTS选项,将所述载体文件描述符传送到所述业务文件进程。
sendmsg()函数的作用是发送一个特殊的消息。将这个消息做特殊处理,从而将打开的描述符传递到接收进程。SCM_RIGHTS代表文件描述符。利用Linux的sendmsg()函数,结合SCM_RIGHTS选项,就可以将文件描述符传递到接收进程。
Linux的sendmsg()函数和SCM_RIGHTS选项属于Linux的内核机制。采用它们的好处是,由于将载体文件描述符传送到业务文件进程属于跨进程的数据传输,利用计算机内核机制实现这种跨进程的数据更安全。
当业务文件进程接收到文件描述符,就可以利用该文件描述符将载体文件映射到自己的进程空间中,从而在载体文件中对共享内存进行访问。该访问包括读、写中的至少一个。
如图3所示,根据本公开的一个实施例,所述方法还包括:
步骤107、获取所述业务文件进程的路径;
步骤109、对所述业务文件进程的路径进行路径认证。
在一个实施例中,步骤107包括:
利用Linux的套接字选项SO_PEERCRED获取所述业务文件进程标识号(PID);
基于所述PID,利用Linux的readlink()函数获取所述业务文件进程的路径。
路径认证是指对业务文件进程的路径是否是合法业务文件进程应当存在于的路径进行认证。
在一个实施例中,步骤109包括:
将所述业务文件进程的路径与合法的路径列表进行比较,如匹配,则认证通过。
在一个实施例中,合法的路径列表可以预先构建出并存储在认证代理2。
在另一个实施例中,所述合法的路径列表可以预先构建出并存储在服务器3。所述将所述业务文件进程的路径与合法的路径列表进行比较具体包括:
从服务器获取合法的路径列表;
如果所述业务文件进程的路径与合法的路径列表中的一个一致,则找到匹配。
业务文件进程提交的数据是容易伪装的,而业务文件进程路径是业务文件进程存在于的路径,是不容易伪装的。即使恶意程序直接替换合法路径下的业务文件,自己启动后再把合法文件覆盖回来,由于此时获得的恶意程序的路径多了“(deleted)”,会直接被拒绝。因此,本公开的实施例在路径认证不成功的情况下直接拒绝访问,而在路径认证通过的情况下又采用业务文件内容的哈希值认证,双重认证进一步提高了共享内存访问的安全性。
如图3所示,根据本公开一个实施例,所述方法还包括:
步骤101、为所述共享内存建立所述共享内存载体文件;
步骤103、为所述共享内存载体文件分配所述载体文件描述符;
步骤105、删除建立的所述共享内存载体文件。
下面对这些步骤进行分别详细描述。
在步骤101中,为所述共享内存建立所述共享内存载体文件。
在一个实施例中,在单台计算机上,为每块共享内存,在路径/dev/shm下分配一个不同的文件名,从而为每块共享内存建立一个共享内存载体文件。/dev/shm是内存文件系统。共享内存挂在该路径下,意味着载体文件直接存在内存中,访问载体文件的效率要比从机械硬盘上访问高得多。
在步骤103中,为所述共享内存载体文件分配所述载体文件描述符。
所述载体文件描述符唯一标识所述共享内存载体文件,与所述共享内存载体文件具有一一对应关系。
在步骤105中,删除建立的所述共享内存载体文件。
删除了建立的共享内存载体文件,恶意进程就无法通过直接请求拷贝、读取、篡改共享内存载体文件的方式来攻击。由于共享内存载体文件删除后,想访问共享内存的业务文件进程就只能通过存在于认证代理中的载体文件描述符来执行映射进行访问,而想要请求到载体文件描述符,需要如步骤110-140中那样进行合法性认证,从而提高了共享内存访问的安全性。通过步骤105,阻止了恶意进程通过直接请求拷贝、读取、篡改共享内存载体文件的方式来攻击共享内存。通过步骤107、109,阻止了恶意程序通过直接替换合法路径下的业务文件,自己启动后再把合法文件覆盖回来的方式攻击共享内存。通过步骤110-140,阻止了恶意进程通过窃取合法业务文件进程的账号或伪造提交数据的方式攻击共享内存。
另外,业务文件进程通过了认证代理的认证后,对共享内存进行访问。然而,认证代理有可能重启。重启后,对共享内存进行访问的业务文件进程是否合法,实际上需要重新向认证代理进行认证。因此,在本公开的一个实施例中,让业务文件进程定期询问认证代理是否重启,如重启,则重新向认证代理发送对载体文件描述符的请求,从而重新进行认证。在该实施例中,所述方法包括:
响应于业务文件进程的询问消息,判断所述业务文件进程访问共享内存后认证代理是否发生了重启;
如果是,则向所述业务文件进程发送重启应答,以便所述业务文件进程向认证代理重发对载体文件描述符的请求。
在一个实施例中,所述询问消息可以是对载体文件描述符的请求之外的任何数据。即,只要业务文件进程向认证代理发送对载体文件描述符的请求之外的任何数据,都看作是业务文件进程发出了询问消息。
在一个实施例中,询问消息中携带业务文件进程上次向认证代理发送对载体文件描述符的请求的发送时间、或者开始访问共享内存的开始时间。认证代理重启时,会记录重启时间。如果该发送时间或开始时间早于重启时间,则认为所述业务文件进程访问共享内存后认证代理发生了重启。
重启应答是对所述询问消息的响应,表明所述业务文件进程访问共享内存后认证代理发生了重启。它可以是预先规定的特定的消息,或预先规定的在特定字段具有特定内容的消息。
业务文件进程接收到重启应答后,可以向认证代理重发业务文件进程对载体文件描述符的请求,重复图2中的认证过程。
图4示出根据本公开一示例实施方式的共享密钥访问的具体应用场景构架图。
共享密钥访问的应用场景中,密钥在不同业务文件的不同进程间分享。第一业务文件进程11生成共享的密钥41,希望将其写到共享内存4中,以供其它业务文件进程读取。于是,第一业务文件进程11向认证代理2发送对载体文件描述符的请求。认证代理2结合服务器3的数据对第一业务文件进程认证通过后,将载体文件描述符发送给第一业务文件进程,使第一业务文件进程将共享内存载体文件映射到第一业务文件进程空间,将密钥41写入共享内存4。第二业务文件进程12希望读取密钥41。于是,第二业务文件进程12向认证代理2发送对载体文件描述符的请求。认证代理2对第二业务文件进程认证通过后,将载体文件描述符发送给第二业务文件进程,使第二业务文件进程将共享内存载体文件映射到第二业务文件进程空间,读取密钥41。为了说明本公开实施例如何阻止恶意程序访问共享密钥41,图4示例了第一恶意程序13、第二恶意程序14、第三恶意程序15。第一恶意程序13窃取了合法账户,试图以此来访问密钥41,但未成功。第二恶意程序14试图通过替换合法路径下的第二业务文件,启动后再把第二业务文件拷贝回来的方式访问密钥41,但未成功。第三恶意程序15不通过认证代理2,试图通过直接拷贝或访问共享内存载体文件来访问密钥41,但也未成功。
下面对这一应用场景进行详细描述。
图5A是生成密钥的第一业务文件进程将密钥放入共享内存的过程流程图。
在步骤201,在服务器3建立合法的SHA256值列表。SHA256是哈希算法的一个特例。读取大量样本合法业务文件,分别应用SHA256算法,得到这些样本合法业务文件的SHA256值。所有这些SHA256组成了合法的SHA256值列表。
在步骤202,认证代理2为共享内存建立载体文件A。
在步骤203,认证代理2为载体文件A分配载体文件描述符fd。
在步骤204,认证代理2删除建立的载体文件A。
在步骤205,第一业务文件进程11生成共享密钥41。
在步骤206,第一业务文件进程11向认证代理2发送对载体文件描述符fd的请求。
在步骤207,认证代理2利用Linux的套接字选项SO_PEERCRED获取第一业务文件进程的PID。
在步骤208,认证代理2获取到第一业务文件进程的PID后,利用Linux的readlink()函数获取第一业务文件进程的路径。
在步骤209,认证代理2从服务器3调取合法路径列表。
在步骤210,认证代理2将第一业务文件进程的路径与合法路径列表进行比对,发现与其中的一个合法路径匹配,则认证通过。
在步骤211,认证代理2读取第一业务文件。
在步骤212,认证代理2对第一业务文件应用SHA256算法,得到SHA256值。
在步骤213,认证代理2从服务器3请求合法SHA256值列表。
在步骤214,服务器3向认证代理2返回SHA256值列表。
在步骤215,认证代理2发现计算出的SHA256值与返回的SHA256值列表中的一个SHA256值一致,认证通过。
在步骤216,认证代理2利用Linux的sendmsg()函数,结合SCM_RIGHTS选项,将所述载体文件描述符fd传送到第一业务文件进程。
在步骤217,第一业务文件进程利用载体文件描述符fd,将所述共享内存载体文件A映射到所述业务文件进程空间,从而把密钥41写入共享内存4。
图5B是读取密钥的第二业务文件进程从共享内存中读取密钥的过程流程图。
在步骤218,第二业务文件进程12希望读取存储在共享内存4中的共享密钥41。
在步骤219,第二业务文件进程12向认证代理2发送对载体文件描述符fd的请求。
在步骤220,认证代理2利用Linux的套接字选项SO_PEERCRED获取第二业务文件进程的PID。
在步骤221,认证代理2获取到第二业务文件进程的PID后,利用Linux的readlink()函数获取第二业务文件进程的路径。
在步骤222,认证代理2向服务器3调取合法路径列表。
在步骤223,认证代理2发现第二业务文件进程的路径与合法路径列表中的一个合法路径匹配,则认证通过。
在步骤224,认证代理2读取第二业务文件。
在步骤225,认证代理2对第二业务文件应用SHA256算法,得到SHA256值。
在步骤226,认证代理2从服务器3请求合法SHA256值列表。
在步骤227,服务器3向认证代理2返回SHA256值列表。
在步骤228,认证代理2发现计算出的SHA256值与返回的SHA256值列表中的一个SHA256值一致,认证通过。
在步骤229,认证代理2利用Linux的sendmsg()函数,结合SCM_RIGHTS选项,将所述载体文件描述符fd传送到第二业务文件进程。
在步骤230,第二业务文件进程12利用载体文件描述符fd,将所述共享内存载体文件A映射到第二业务文件进程空间,从而从共享内存4读共享密钥41。
图5C是第一恶意程序通过以合法账号来访问密钥最终被拒绝的过程流程图。
在步骤231,第一恶意程序13窃取合法用户账号,希望以合法用户账号伪装身份数据,访问共享密钥41。
在步骤232,第一恶意程序13以合法用户账号向认证代理2发送对载体文件描述符fd的请求,提交合法用户账号。
在步骤233,认证代理2对提交的该合法用户账号不理会,而是主动利用Linux的套接字选项SO_PEERCRED获取第一恶意程序13的PID。
在步骤234,认证代理2获取到第一恶意程序13的PID后,利用Linux的readlink()函数获取第一恶意程序13的业务文件进程路径。
在步骤235,认证代理2从服务器3调取合法路径列表。
在步骤236,由于第一恶意程序13是恶意程序,其根本不在合法的路径下面,因此,与合法路径列表中的任一个合法路径都不同。路径认证失败。
在步骤237,认证代理2向第一恶意程序发送认证失败消息。
需要说明的是,即使第一恶意程序13把自己拷贝到一个合法路径下面,通过了路径认证,在后面的对其文件内容的哈希值进行认证的过程中依然无法通过,通过这种方式,最大限度地将恶意程序从各个方面拒绝其对共享内存的访问。
图5D是第二恶意程序通过替换合法路径下的业务文件,启动后再把合法业务文件覆盖回来的方式来访问密钥,最终被拒绝的流程图。
在步骤238,第二恶意程序14直接替换合法路径下的第二业务文件,自己启动后再将第二业务文件拷贝回该路径。
在步骤239,第二恶意程序14向认证代理2发送对载体文件描述符fd的请求。
在步骤240,认证代理2利用Linux的套接字选项SO_PEERCRED获取第二恶意程序14的PID。
在步骤241,认证代理2获取到第二恶意程序14的PID后,利用Linux的readlink()函数获取第二恶意程序14的路径。
在步骤242,认证代理2从服务器3调取合法路径列表。
在步骤243,由于第二恶意程序的路径的后面多出“(deleted)”,即使与合法路径列表中的一个合法路径前面的部分一样,也认为路径认证失败。
在步骤244,认证代理2向第二恶意程序发送认证失败消息。
图5E是第三恶意程序通过直接拷贝载体文件来访问密钥最终被拒绝的过程流程图。
在步骤245中,第三恶意程序14不是向认证代理发请求,而是直接向共享内存4发送直接拷贝共享内存载体文件A的请求。
在步骤246,由于共享内存载体文件A在步骤204中已删除,共享内存载体文件A根本无法访问,请求失败。
如图6所示,根据本公开一个示例性实施例的安全访问共享内存的装置包括:
读取单元710,用于响应于接收到业务文件进程对载体文件描述符的请求,读取所述业务文件;
哈希值获取单元720,用于获取所述业务文件的哈希值;
哈希值认证单元730,用于基于所述业务文件的哈希值,对所述业务文件进行合法性认证;
传送单元740,用于如果认证通过,将所述载体文件描述符传送到所述业务文件进程,以供所述业务文件进程访问共享内存。
如图7所示,在一个实施例中,所述装置还包括:
路径获取单元707,用于获取所述业务文件进程的路径;
路径认证单元709,用于对所述业务文件进程的路径进行路径认证。
如图7所示,在一个实施例中,所述装置还包括:
建立单元701,用于为所述共享内存建立所述共享内存载体文件;
分配单元703,用于为所述共享内存载体文件分配所述载体文件描述符;
删除单元705,用于删除建立的所述共享内存载体文件。
在一个实施例中,路径获取单元707进一步配置为:
利用Linux的套接字选项SO_PEERCRED获取所述业务文件进程标识号(PID);
基于所述PID,利用Linux的readlink()函数获取所述业务文件进程的路径。
在一个实施例中,哈希值认证单元730进一步配置为:
将所述业务文件的哈希值与合法的哈希值列表进行比较,如匹配,则认证通过。
在一个实施例中,所述合法的哈希值列表存储在服务器,所述将所述业务文件的哈希值与合法的哈希值列表进行比较具体包括:
从服务器获取合法的哈希值列表;
如果得到的哈希值与合法的哈希值列表中的一个哈希值一致,则找到匹配。
在一个实施例中,所述合法的哈希值列表通过获取多个样本合法业务文件,并对所述多个样本合法业务文件计算哈希值得到。
在一个实施例中,传送单元740进一步配置为:
利用Linux的sendmsg()函数,结合SCM_RIGHTS选项,将所述载体文件描述符传送到所述业务文件进程。
下面参照图8来描述根据本公开的实施方式的认证代理2。图8显示的认证代理2仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。
如图8所示,认证代理2以通用计算设备的形式表现。认证代理2的组件可以包括但不限于:至少一个处理单元810、至少一个存储单元820、连接不同系统组件(包括存储单元820和处理单元810)的总线830。
所述存储单元存储有程序代码,所述程序代码可以被所述处理单元810执行,使得所述处理单元810执行本说明书上述示例性方法的描述部分中描述的根据本发明各种示例性实施方式的步骤。例如,所述处理单元810可以执行如图2、3中所示的各个步骤。
存储单元820可以包括易失性存储单元形式的可读介质,例如随机存取存储单元(RAM)8201和/或高速缓存存储单元8202,还可以进一步包括只读存储单元(ROM)8203。
存储单元820还可以包括具有一组(至少一个)程序模块8205的程序/实用工具8204,这样的程序模块8205包括但不限于:操作系统、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。
总线830可以为表示几类总线结构中的一种或多种,包括存储单元总线或者存储单元控制器、外围总线、图形加速端口、处理单元或者使用多种总线结构中的任意总线结构的局域总线。
认证代理2也可以与一个或多个外部设备700(例如键盘、指向设备、蓝牙设备等)通信,还可与一个或者多个使得用户能与该认证代理2交互的设备通信,和/或与使得该认证代理2能与一个或多个其它计算设备进行通信的任何设备(例如路由器、调制解调器等等)通信。这种通信可以通过输入/输出(I/O)接口650进行。并且,认证代理2还可以通过网络适配器860与一个或者多个网络(例如局域网(LAN),广域网(WAN)和/或公共网络,例如因特网)通信。如图所示,网络适配器860通过总线830与认证代理2的其它模块通信。应当明白,尽管图中未示出,认证代理2可以使用其它硬件和/或软件模块实现,包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、RAID系统、磁带驱动器以及数据备份存储系统等。
通过以上的实施方式的描述,本领域的技术人员易于理解,这里描述的示例实施方式可以通过软件实现,也可以通过软件结合必要的硬件的方式来实现。因此,根据本公开实施方式的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个非易失性存储介质(可以是CD-ROM,U盘,移动硬盘等)中或网络上,包括若干指令以使得一台计算设备(可以是个人计算机、服务器、终端装置、或者网络设备等)执行根据本公开实施方式的方法。
在本公开的示例性实施例中,还提供了一种计算机程序介质,其上存储有计算机可读指令,当所述计算机可读指令被计算机的处理器执行时,使计算机执行上述方法实施例部分描述的方法。
根据本公开的一个实施例,还提供了一种用于实现上述方法实施例中的方法的程序产品,其可以采用便携式紧凑盘只读存储器(CD-ROM)并包括程序代码,并可以在终端设备,例如个人电脑上运行。然而,本发明的程序产品不限于此,在本文件中,可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
所述程序产品可以采用一个或多个可读介质的任意组合。可读介质可以是可读信号介质或者可读存储介质。可读存储介质例如可以为但不限于电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。
计算机可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了可读程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。可读信号介质还可以是可读存储介质以外的任何可读介质,该可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。
可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于无线、有线、光缆、RF等等,或者上述的任意合适的组合。
可以以一种或多种程序设计语言的任意组合来编写用于执行本发明操作的程序代码,所述程序设计语言包括面向对象的程序设计语言—诸如Java、C++等,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算设备上执行、部分地在用户设备上执行、作为一个独立的软件包执行、部分在用户计算设备上部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。在涉及远程计算设备的情形中,远程计算设备可以通过任意种类的网络,包括局域网(LAN)或广域网(WAN),连接到用户计算设备,或者,可以连接到外部计算设备(例如利用因特网服务提供商来通过因特网连接)。
应当注意,尽管在上文详细描述中提及了用于动作执行的设备的若干模块或者单元,但是这种划分并非强制性的。实际上,根据本公开的实施方式,上文描述的两个或更多模块或者单元的特征和功能可以在一个模块或者单元中具体化。反之,上文描述的一个模块或者单元的特征和功能可以进一步划分为由多个模块或者单元来具体化。
此外,尽管在附图中以特定顺序描述了本公开中方法的各个步骤,但是,这并非要求或者暗示必须按照该特定顺序来执行这些步骤,或是必须执行全部所示的步骤才能实现期望的结果。附加的或备选的,可以省略某些步骤,将多个步骤合并为一个步骤执行,以及/或者将一个步骤分解为多个步骤执行等。
通过以上的实施方式的描述,本领域的技术人员易于理解,这里描述的示例实施方式可以通过软件实现,也可以通过软件结合必要的硬件的方式来实现。因此,根据本公开实施方式的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个非易失性存储介质(可以是CD-ROM,U盘,移动硬盘等)中或网络上,包括若干指令以使得一台计算设备(可以是个人计算机、服务器、移动终端、或者网络设备等)执行根据本公开实施方式的方法。
本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本公开的其它实施方案。本申请旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本公开的真正范围和精神由所附的权利要求指出。

Claims (12)

1.一种安全访问共享内存的方法,其特征在于,包括:
为共享内存建立共享内存载体文件;其中,所述共享内存载体文件是所述共享内存的载体;
为所述共享内存载体文件分配载体文件描述符;
删除建立的所述共享内存载体文件;
响应于接收到业务文件进程对载体文件描述符的请求,获取所述业务文件进程的路径,如果对所述业务文件进程的路径进行路径认证通过,则从所述业务文件进程的路径下读取业务文件;其中,所述业务文件是为完成业务而需要执行的程序代码;
获取所述业务文件的哈希值;
将所述业务文件的哈希值与合法的哈希值列表进行比较,如匹配,则判定对所述业务文件的认证通过;
如果认证通过,将所述载体文件描述符传送到所述业务文件进程,以供所述业务文件进程将所述载体文件描述符对应的共享内存载体文件映射到自己的进程空间中访问共享内存获取共享密钥。
2.根据权利要求1所述的方法,其特征在于,所述获取所述业务文件进程的路径,具体包括:
利用Linux的套接字选项SO_PEERCRED获取所述业务文件进程的标识号(PID);
基于所述PID,利用Linux的readlink()函数获取所述业务文件进程的路径。
3.根据权利要求1所述的方法,其特征在于,所述合法的哈希值列表存储在服务器,所述将所述业务文件的哈希值与合法的哈希值列表进行比较,具体包括:
从服务器获取合法的哈希值列表;
如果得到的哈希值与合法的哈希值列表中的一个哈希值一致,则找到匹配。
4.根据权利要求1所述的方法,其特征在于,所述合法的哈希值列表通过获取多个样本合法业务文件,并对所述多个样本合法业务文件计算哈希值得到。
5.根据权利要求1所述的方法,其特征在于,所述将所述载体文件描述符传送到所述业务文件进程,具体包括:
利用Linux的sendmsg()函数,结合SCM_RIGHTS选项,将所述载体文件描述符传送到所述业务文件进程。
6.一种安全访问共享内存的装置,其特征在于,包括:
建立单元,用于为共享内存建立共享内存载体文件;其中,所述共享内存载体文件是所述共享内存的载体;
分配单元,用于为所述共享内存载体文件分配载体文件描述符;
删除单元,用于删除建立的所述共享内存载体文件;
读取单元,用于响应于接收到业务文件进程对载体文件描述符的请求,获取所述业务文件进程的路径,如果对所述业务文件进程的路径进行路径认证通过,则从所述业务文件进程的路径下读取所述业务文件;其中,所述业务文件是为完成业务而需要执行的程序代码;
哈希值获取单元,用于获取所述业务文件的哈希值;
哈希值认证单元,用于将所述业务文件的哈希值与合法的哈希值列表进行比较,如匹配,则判定对所述业务文件的认证通过;
传送单元,用于如果认证通过,将所述载体文件描述符传送到所述业务文件进程,以供所述业务文件进程将所述载体文件描述符对应的共享内存载体文件映射到自己的进程空间中访问共享内存获取共享密钥。
7.根据权利要求6所述的装置,其特征在于,所述读取单元,具体用于:
利用Linux的套接字选项SO_PEERCRED获取所述业务文件进程的标识号(PID);
基于所述PID,利用Linux的readlink()函数获取所述业务文件进程的路径。
8.根据权利要求6所述的装置,其特征在于,所述合法的哈希值列表存储在服务器,所述将所述业务文件的哈希值与合法的哈希值列表进行比较,具体包括:
从服务器获取合法的哈希值列表;
如果得到的哈希值与合法的哈希值列表中的一个哈希值一致,则找到匹配。
9.根据权利要求6所述的装置,其特征在于,所述合法的哈希值列表通过获取多个样本合法业务文件,并对所述多个样本合法业务文件计算哈希值得到。
10.根据权利要求6所述的装置,其特征在于,所述传送单元,具体用于:
利用Linux的sendmsg()函数,结合SCM_RIGHTS选项,将所述载体文件描述符传送到所述业务文件进程。
11.一种认证代理,其特征在于,包括:
存储器,存储有计算机可读指令;
处理器,读取存储器存储的计算机可读指令,以执行权利要求1-5中的任一个所述的方法。
12.一种计算机程序介质,其上存储有计算机可读指令,当所述计算机可读指令被计算机的处理器执行时,使计算机执行权利要求1-5中的任一个所述的方法。
CN201810239865.1A 2018-03-22 2018-03-22 安全访问共享内存的方法、装置以及认证代理 Active CN110298165B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201810239865.1A CN110298165B (zh) 2018-03-22 2018-03-22 安全访问共享内存的方法、装置以及认证代理

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201810239865.1A CN110298165B (zh) 2018-03-22 2018-03-22 安全访问共享内存的方法、装置以及认证代理

Publications (2)

Publication Number Publication Date
CN110298165A CN110298165A (zh) 2019-10-01
CN110298165B true CN110298165B (zh) 2023-05-23

Family

ID=68025638

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201810239865.1A Active CN110298165B (zh) 2018-03-22 2018-03-22 安全访问共享内存的方法、装置以及认证代理

Country Status (1)

Country Link
CN (1) CN110298165B (zh)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114912103A (zh) * 2021-02-09 2022-08-16 华为技术有限公司 一种访问控制方法及相关装置
CN113779545A (zh) * 2021-08-27 2021-12-10 深圳市优必选科技股份有限公司 数据跨进程共享的方法、终端设备及计算机可读存储介质

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105978985A (zh) * 2016-06-07 2016-09-28 华中科技大学 一种用户态RPC over RDMA的内存管理方法
CN106778245A (zh) * 2016-11-29 2017-05-31 北京元心科技有限公司 移动终端及其文件共享方法

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20050149529A1 (en) * 2004-01-02 2005-07-07 Andi Gutmans Efficient handling of download requests
CN101819525B (zh) * 2009-02-27 2013-11-27 国际商业机器公司 用于查找系统中应用的配置文件的方法和设备
CN101527819A (zh) * 2009-03-31 2009-09-09 深圳创维-Rgb电子有限公司 一种电视机与服务器的数据共享方法、系统及电视机
CN102014133B (zh) * 2010-11-26 2013-08-21 清华大学 在云存储环境下一种安全存储系统的实现方法
CN102394894B (zh) * 2011-11-28 2014-01-15 武汉大学 一种基于云计算的网络虚拟磁盘文件安全管理方法
CN103970737B (zh) * 2013-01-24 2018-06-22 腾讯科技(深圳)有限公司 一种数据构造方法和装置
EP3179398B1 (en) * 2015-12-10 2018-06-27 Alcatel Lucent Ensuring usb attack protection
CN106302422B (zh) * 2016-08-08 2019-08-16 腾讯科技(深圳)有限公司 业务加密、解密方法和装置

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105978985A (zh) * 2016-06-07 2016-09-28 华中科技大学 一种用户态RPC over RDMA的内存管理方法
CN106778245A (zh) * 2016-11-29 2017-05-31 北京元心科技有限公司 移动终端及其文件共享方法

Also Published As

Publication number Publication date
CN110298165A (zh) 2019-10-01

Similar Documents

Publication Publication Date Title
CN108810006B (zh) 资源访问方法、装置、设备及存储介质
CN110414268B (zh) 访问控制方法、装置、设备及存储介质
CN108369622B (zh) 软件容器注册表服务
US9667426B2 (en) Information processing apparatus, program, storage medium and information processing system
US9769266B2 (en) Controlling access to resources on a network
JP5516821B2 (ja) 仮想化及び認証を用いた電子ネットワークにおける複数のクライアントの遠隔保守のためのシステム及び方法
US20180013747A1 (en) Controlling Access to Resources on a Network
JP5704518B2 (ja) 機密情報漏洩防止システム、機密情報漏洩防止方法及び機密情報漏洩防止プログラム
JP4916136B2 (ja) アプリケーションにセキュリティを提供するシステムおよび方法
US20130332575A1 (en) Efficient data transfer for cloud storage by centralized management of access tokens
CN102404314A (zh) 远程资源单点登录
US8656494B2 (en) System and method for optimization of antivirus processing of disk files
CN110839014B (zh) 一种认证方法、装置、计算机设备及可读存储介质
US11804958B2 (en) Method and system for initial secret delivery for scalable and restart-able collocated containers with shared resources
CN112204548B (zh) 应用特定客户端证书的自动生成
CN110298165B (zh) 安全访问共享内存的方法、装置以及认证代理
CN114598520A (zh) 资源访问控制的方法、装置、设备及存储介质
CN111988292B (zh) 一种内网终端访问互联网的方法、装置及系统
US8806203B2 (en) Server-side security for untrusted clients using directory hiding
CN111382425A (zh) 多签名机制下的应用安装管理方法、智能终端及存储介质
CN111259371B (zh) 物联网设备认证方法、电子装置及存储介质
CN112637167A (zh) 系统登录方法、装置、计算机设备和存储介质
CN111158857A (zh) 数据加密方法、装置、设备及存储介质
CN111538566A (zh) 镜像文件处理方法、装置、系统、电子设备及存储介质
CN115278671A (zh) 网元鉴权方法、装置、存储介质和电子设备

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
GR01 Patent grant
GR01 Patent grant