首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >可以从使用中的RAM中窃取数据吗?

可以从使用中的RAM中窃取数据吗?
EN

Security用户
提问于 2017-11-17 15:01:15
回答 2查看 1.4K关注 0票数 4

我对这个问题(在任何问题上)的认识有限,这可能会使我成为一个愚蠢的问题。无论如何,恶意程序理论上能从主内存(RAM)中窃取数据吗?

设想情况:

  • 目前,我将密码数据存储在一个加密程度很高的USB上,而目前层层加密是不可行的。在这个USB被偷的情况下,尽管加密的实际安全性,我确切地知道要快速更改密码的帐户。
  • 虽然passwords.txt文件仅被“存储”在USB上的永久次要内存中,但它将短暂地出现在我用来挂载USB、解密数据和打开文件的计算机的内存中。正是在这里,我怀疑自己的弱点。
  • 为了澄清:当然,这个“恶意程序”在安装USB并对其内容进行解密之后,只读取文件,这是比较现实的,但是我专门问的是如何通过RAM来破坏这些数据。

概述:

  • 程序从RAM中窃取数据的威胁有多现实,理论上还是其他方面?
  • (旁白):除了明显的防病毒解决方案,以减轻恶意程序,如何保护RAM?
EN

回答 2

Security用户

回答已采纳

发布于 2017-11-17 15:12:20

程序从RAM中窃取数据的威胁有多现实,理论上还是其他方面?

这很容易。有了正确的权限,有几种方法可以做到这一点。从程序的内存转储到直接读写程序。除非您已经显式地检查了机器上运行的所有代码的权限,否则您应该假设任何作为admin/root运行的代码,或者作为您担心的进程所有者的运行的用户都可以这样做。例如,在Windows中有ReadProcessMemoryWriteProcessMemoryWriteProcessMemory

除了明显的防病毒解决方案,以减轻恶意程序,如何保护RAM?

  • 不要运行任何你不信任的代码。
  • 将代码作为单独的用户运行,在该用户下,除admin之外,任何其他用户都没有访问权限。
  • 使用地址空间布局随机化和内存加密等方法可以使识别数据的位置变得更加困难(尽管有了完全的内存访问,它仍然可以完成--毕竟,您的程序必须知道它在哪里)。
票数 5
EN

Security用户

发布于 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代码可以访问任意和所有内存。

反病毒并没有那么大的帮助,因为它只会防止旧的,写得不好的,或者已经被发现和大规模生产的恶意软件。专门的恶意软件,即使是相当业余的,仍然会以很高的可能性绕过反病毒。

票数 1
EN
页面原文内容由Security提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://security.stackexchange.com/questions/173700

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档