Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/134.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 保护应用程序';防止篡改内存_C++_Memory_Memory Management_Windows Xp_Protection - Fatal编程技术网

C++ 保护应用程序';防止篡改内存

C++ 保护应用程序';防止篡改内存,c++,memory,memory-management,windows-xp,protection,C++,Memory,Memory Management,Windows Xp,Protection,我们正在向服务器和客户端应用程序添加AES 256位加密,用于加密包含敏感信息的TCP/IP流量。我们将每天轮换钥匙。因此,密钥将与应用程序一起存储在内存中 密钥分发过程: 每个服务器和客户端每天都会有一个初始密钥加密密钥(KEK)列表 如果客户端刚刚启动或服务器刚刚启动,客户端将使用初始密钥从服务器请求每日密钥。服务器将使用使用初始密钥加密的每日密钥进行响应。每日键是随机生成的一组字母数字字符。我们使用的是AES 256位加密 所有后续通信都将使用该每日密钥进行加密 每夜,客户端将使用当前每日

我们正在向服务器和客户端应用程序添加AES 256位加密,用于加密包含敏感信息的TCP/IP流量。我们将每天轮换钥匙。因此,密钥将与应用程序一起存储在内存中

密钥分发过程:

  • 每个服务器和客户端每天都会有一个初始密钥加密密钥(KEK)列表

  • 如果客户端刚刚启动或服务器刚刚启动,客户端将使用初始密钥从服务器请求每日密钥。服务器将使用使用初始密钥加密的每日密钥进行响应。每日键是随机生成的一组字母数字字符。我们使用的是AES 256位加密

  • 所有后续通信都将使用该每日密钥进行加密

  • 每夜,客户端将使用当前每日密钥作为当前KEK从服务器请求新的每日密钥。客户端获得新密钥后,新的每日密钥将替换旧的每日密钥

  • 另一个坏的应用程序是否可能非法访问此内存,或者此内存是否在Windows中受到保护?密钥不会写入文件,只存储在内存中的变量中

    如果应用程序可以非法访问内存,如何保护内存免受篡改


    我们使用C++和XP(Vista/5月7日是未来的选择,所以我不知道这是否改变了答案)。

    < P>我认为你可能有一个更基本的问题在你的手上。p> 如果这台机器抓住rootkit的机会微乎其微,那么你所有的钥匙都是我们的,可以说

    在Windows上,如果满足以下任一条件,进程A可以读取进程B的内存:

  • 它具有打开内存设备的权限
  • 它具有打开进程B的虚拟内存的权限
  • 它在内核中有一个朋友
  • 如果你能完全控制机器上运行的东西,并且完全相信没有人能带来任何惊喜,那么你就是黄金


    当然,这不是Windows独有的。Windows的独特之处在于rootkit恶意软件的数量。

    我认为您可能有一个更根本的问题

    如果这台机器抓住rootkit的机会微乎其微,那么你所有的钥匙都是我们的,可以说

    在Windows上,如果满足以下任一条件,进程A可以读取进程B的内存:

  • 它具有打开内存设备的权限
  • 它具有打开进程B的虚拟内存的权限
  • 它在内核中有一个朋友
  • 如果你能完全控制机器上运行的东西,并且完全相信没有人能带来任何惊喜,那么你就是黄金


    当然,这不是Windows独有的。Windows的独特之处在于rootkit恶意软件的数量。

    您的密钥分发过程不安全:如果有人获得了初始密钥集,一切都结束了


    是的,其他应用程序可以使用调试器钩子访问Windows上的进程内存,几乎没有办法阻止它。基本上,如果盒子以任何方式被破坏,你对此无能为力。

    你的密钥分发过程是不安全的:如果有人得到了初始密钥集,一切都结束了


    是的,其他应用程序可以使用调试器钩子访问Windows上的进程内存,几乎没有办法阻止它。从本质上讲,如果这个盒子以任何方式被破坏,你几乎无能为力。

    还有一点信息是,即使你不亲自将密钥写入磁盘,它也很可能最终被破坏。虚拟内存系统所需要的只是将持有密钥的内存分页出来


    正如其他人所指出的,如果你不能相信你身上的盒子,你无论如何都是完蛋了。有一些方法可以使用一些额外的硬件使这类事情更加安全,基本上是将加密任务转移到您可以更好地控制的子卡上。这是一些金融机构和一些政府实体使用的技术。不过,这可能超出了您的预算。

    还有一点信息是,即使您不亲自将密钥写入磁盘,它也很可能最终出现在磁盘上。虚拟内存系统所需要的只是将持有密钥的内存分页出来


    正如其他人所指出的,如果你不能相信你身上的盒子,你无论如何都是完蛋了。有一些方法可以使用一些额外的硬件使这类事情更加安全,基本上是将加密任务转移到您可以更好地控制的子卡上。这是一些金融机构和一些政府实体使用的技术。不过,这可能超出了您的预算。

    确实没有办法阻止其他进程读取您进程的内存

    <>为了使事情更能抵抗一个不受攻击的攻击,你可以考虑使用一个随机生成的密钥来加密真正的密钥而不使用它。您可以在程序每次运行时生成一个新的随机KEK,甚至在程序每隔几秒钟运行时进行更改。只有在您实际需要使用“真实”密钥时才对其进行解密,然后在完成时立即将密钥所在的内存归零


    当然,如果你在不断的交流中,这不会真正起作用。但是,如果您的通信大部分时间处于空闲状态,并且只看到偶尔的流量峰值,那么这种方法可能会起作用。

    实际上没有办法阻止其他进程读取您进程的内存

    <>为了使事情更能抵抗一个不受攻击的攻击,你可以考虑使用一个随机生成的密钥来加密真正的密钥而不使用它。每次都可以生成一个新的随机桶