我对这个问题(在任何问题上)的认识有限,这可能会使我成为一个愚蠢的问题。无论如何,恶意程序理论上能从主内存(RAM)中窃取数据吗?
设想情况:
发布于 2017-11-17 15:12:20
程序从RAM中窃取数据的威胁有多现实,理论上还是其他方面?
这很容易。有了正确的权限,有几种方法可以做到这一点。从程序的内存转储到直接读写程序。除非您已经显式地检查了机器上运行的所有代码的权限,否则您应该假设任何作为admin/root运行的代码,或者作为您担心的进程所有者的运行的用户都可以这样做。例如,在Windows中有ReadProcessMemory和WriteProcessMemoryWriteProcessMemory。
除了明显的防病毒解决方案,以减轻恶意程序,如何保护RAM?
发布于 2017-11-18 03:43:35
无论如何,恶意程序理论上能从主内存(RAM)中窃取数据吗?
绝对有足够的权限。现代计算机管理内存的方式有点复杂,但其要点却很容易理解。一台x86计算机使用两个特权“环”,称为“环0”和“环3”(它有更多的特权,但它们被任何流行的操作系统所使用)。环0具有很高的特权,几乎可以做任何事情。第3环的特权较低,必须要求运行在环0(内核)中的代码代表它执行任何特权操作(这称为系统调用)。在所有现代x86处理器上,都有一个额外的保护,称为内存管理单元( MMU )。它允许每个进程都有自己的虚拟地址空间,如果它试图访问任何其他内存,就会崩溃。
看起来所有的过程都是孤立的,对吧?不幸的是,事情并没有那么简单。内核在环0中运行,它提供了一个接口,用于进程之间的通信,甚至通过系统调用间接地访问对方的内存。是否允许系统调用取决于进程的权限。具有高权限的恶意进程只需请求内核对另一个进程的内存进行访问,内核就会乐意地执行。没有权限的恶意进程无法做到这一点。但是,需要注意的是,在许多系统上,简单地作为另一个进程作为同一个用户运行被认为是一个足够的权限。因此,作为同一用户运行的两个进程可以在某些系统上对彼此的内存进行读写。
第一个答案解释了如何在Windows上工作。在Linux上,读取另一个进程内存的等效方法是系统调用ptrace()
、process_vm_readv()
和/proc/<pid>/mem
文件。前两项检查以确保调用进程作为目标作为同一用户运行,或者具有特定的重写权限(除非在一些具有附加安全功能的系统上)。后一个文件只能由拥有它的程序读取。
虽然passwords.txt文件仅被“存储”在USB上的永久次要内存中,但它将短暂地出现在我用来挂载USB、解密数据和打开文件的计算机的内存中。正是在这里,我怀疑自己的弱点。
其实关键是不断地在记忆中,而不仅仅是短暂的。只要装置安装好,它就会留在内存中。从根本上说,这是加密/解密工作所必需的。请注意,它可能是密码的派生,而不是密码本身,但它仍然足以解密驱动器。但是,它存在于内核中,它是环0,不能被正常进程访问。
(旁白):除了明显的防病毒解决方案,以减轻恶意程序,如何保护RAM?
假设没有可利用的bug,作为不同用户运行的两个进程将无法访问对方的内存。将用户作为另一个进程运行可以提供更好的隔离。请注意,在Windows和大多数Linux上,如果不同用户的两个图形进程同时运行,他们仍然可以通过图形API进行通信。Windows试图阻止此操作,但它已多次被绕过。此外,如果内核被破坏(这需要高级的攻击),那么所有投注都会关闭,因为在正常情况下,ring 0代码可以访问任意和所有内存。
反病毒并没有那么大的帮助,因为它只会防止旧的,写得不好的,或者已经被发现和大规模生产的恶意软件。专门的恶意软件,即使是相当业余的,仍然会以很高的可能性绕过反病毒。
https://security.stackexchange.com/questions/173700
复制相似问题