使用Python3和受害者机器上已有的类似软件的原始恶意软件(如果不能使用PyInstaller/pycom也可以编译)能够在用户的进程运行时覆盖内存中的进程。
甚至还有一个图书馆。当然,您甚至可以使用来自Python3的集成标准库命令来进行类似的操作,但在我看来,pymem
使它更容易实现。引证:"Python可以调用任何Microsoft并使用经典的VirtualAlloc()、CreateRemoteThreat()等执行流程注入。“
因此,这个攻击向量似乎是进程注入的一个子类别,称为过程空化。这个问题似乎只出现在Windows上,因为它是防病毒等的一个设计选择,可以注入进程。
所以我的问题是:
发布于 2022-09-18 06:49:24
Windows和Linux都允许进程注入,区别是Linux在检查权限时更加严格。
实际上,在Linux下,它等同于PTRACE_ATTACH
检查,默认情况下,该检查只授予根进程(通过CAP_SYS_PTRACE
)或父进程。
在Windows下,默认情况下,进程可以在相同的完整性级别上访问同一用户的另一个(无保护的)进程。
这个攻击向量是进程注入,其中,进程空洞化是一种特定的类型。
如果允许,恶意软件可以读取/写入目标进程的任何读/可重写页,但为了获得执行,它必须小心地这样做。
通常,分配一个全新的缓冲区,并创建一个新线程来执行外壳代码。
另一种可能是劫持,这可以通过更改函数指针(例如,vtable中的条目)、返回地址或简单地更改目标线程的上下文来实现。当然,劫持会损害目标进程的功能。
检查进程的完整性在一般情况下是昂贵的(因此不能实时完成),而从进程本身进行则类似于白盒加密。
这也是很困难的。原则上,您只需要度量进程的代码和数据,虽然这对于代码和只读数据来说很容易,但是对于堆栈或堆内存之类的东西来说,这是很困难的,在这样的情况下,来自外部(输入)的值会慢慢出现,并且没有一组已确定的允许值和不允许值(比如带有vtable的C++对象数组)。
实际上所做的是正确地设置流程对象的DACL,以拒绝其他进程访问它。另一种可能是提高流程的完整性。
这首先防止了任何修改,并避免了检查进程内存中任何更改的值的需要。如果您也不信任更高权限的进程(例如,系统服务或操作系统),那么您需要一个完整的远程认证框架,比如SGX飞地。
进程只处理虚拟内存(它们可以通过抽象间接地处理物理内存),因此询问虚拟内存还是物理内存是没有意义的。
https://security.stackexchange.com/questions/264888
复制相似问题