让我首先描述我想做什么,然后是我能做什么,最后是我的问题。
目标:用C实现flush+flush缓存攻击
我正在尝试用 C 语言实现flush+flush缓存攻击(https://gruss.cc/files/flushflush.pdf)。基本上,它利用了两个不同进程在使用共享库时可能共享相同内存页的事实。这导致缓存的“共享使用”。
假设我们有一个受害者进程,它不断运行并且有时执行func从共享库导入的函数。
同时,我们假设我们有一个间谍进程,与受害者在同一台计算机上运行,其目标是在受害者调用 时进行监视func。间谍还可以访问同一个共享库。间谍进程伪代码如下:
i=0;
for (i = 0; i < trace_length ; i++)
{
trace[i] = flush_time( address of function "func");
i++;
}
Run Code Online (Sandbox Code Playgroud)
其中是一个函数,返回 CPU 刷新所有缓存级别所指向的内存所需的时间。在Intel处理器上,这可以通过汇编指令来实现。可以观察到,当高速缓存中不存在该地址时,执行速度会更快。因此,刷新内存地址所需的时序可以直接转换为内存地址存在(或不存在)在高速缓存内。flush_time(<address>)addressclflushclflush
间谍进程返回一个跟踪向量,其中包含一段时间内的flush_time结果。根据之前的观察,当受害者也调用该函数时,该跟踪将表现出更高的计时func。因此,间谍将推断受害者何时打电话func。
我设法做的:使攻击针对 GSL 共享库
我实现了上述攻击,其中共享库是GSL。我随意选择gsl_stats_mean(在 中定义gsl_statistics_double)作为func我愿意监视的函数。
在这种情况下,间谍活动可以完美地工作,因为当受害者程序调用时,我可以清楚地看到时间差异gsl_stats_mean
我的问题:该攻击不适用于自制共享库
我现在想创建自己的共享库并将其用于间谍/受害者测试。假设表示 my和files.所在的文件夹。我在一个文件夹中创建了两个文件和,它们分别包含 的描述和它的声明。与之前一样,我的间谍的目标是检测受害者的使用情况。spy.cvictim.cmyl.cmyl.h./src/mylfuncfunc
和 都spy.c包含 …
我有 768 MB RAM。通常情况下,MySQL 使用 100-180 mb 的 RAM,而 MySQL 交换了 80-120 mb。我有 50-60 mb 的可用内存。
所以我想我应该升级。然后我将 RAM 升级到 1 GB。之后,我有 200-350 mb 的可用内存。但是 MySQL 使用相同数量的 RAM 但仍然交换 40-60 mb。
这就是我的free -m结果。
total used free shared buffers cached
Mem: 996 796 200 0 73 97
-/+ buffers/cache: 625 371
Swap: 2047 92 1955
Run Code Online (Sandbox Code Playgroud)
这是我的最佳结果
top - 22:11:23 up 13:35, 1 user, load average: 0.26, 0.33, 0.35
Tasks: 143 total, 1 running, 142 sleeping, 0 stopped, 0 zombie
Cpu(s): …Run Code Online (Sandbox Code Playgroud) 我想让 dig 总是忘记 DNS 记录。我的意思是,如果我这样做了,dig yahoo.com那么我会在 ttl 中重新记录 1790 秒。即使我没有安装缓存服务,下次我执行相同的命令时,ttl 也会降低。一些如何,挖做记住答案。是否有可能清除这一点,所以我总是得到一个新的答案?
如何暂时停止将脏数据与磁盘同步,而只是将其保留在内存中。
澄清:我想稍后同步。
我有一个服务器有很多我想检查的域重定向。
我不相信浏览器缓存域的方式,所以我不确定我是实时看到它还是从缓存中看到重定向。
有没有办法从终端测试重定向并在没有任何缓存的情况下看到真实的东西?
我试过了
curl -I http://example.com
Run Code Online (Sandbox Code Playgroud)
正如其他帖子所述,但它没有在我的 Mac 上提供任何重要信息。
它给了我这个:
HTTP/1.1 406 Not Acceptable
Date: Mon, 29 Jan 2018 18:26:50 GMT
Server: Apache
Content-Type: text/html; charset=iso-8859-1
Run Code Online (Sandbox Code Playgroud) 我在一些关于 NFS 和 Sprite 的论文中读到,当客户端向服务器写入内容时,系统可以使用延迟写入。
我想知道这种技术的目的是什么?
当我用命令检查我的 CPU 缓存时dmidecode,我得到缓存配置为Not Socketed. 这意味着什么?
prayag@prayag:~/hacker_/draobkcalb$ sudo dmidecode -t cache
# dmidecode 2.11
SMBIOS 2.5 present.
Handle 0x000A, DMI type 7, 19 bytes
Cache Information
Socket Designation: Internal Cache
Configuration: Enabled, Not Socketed, Level 1
Operational Mode: Write Back
Location: Internal
Installed Size: 32 kB
Maximum Size: 32 kB
Supported SRAM Types:
Synchronous
Installed SRAM Type: Synchronous
Speed: Unknown
Error Correction Type: Unknown
System Type: Unknown
Associativity: Unknown
Handle 0x000B, DMI type 7, 19 bytes
Cache …Run Code Online (Sandbox Code Playgroud) 我在这里问这个是因为我很确定这是一个 Linux 问题。
我在 Ubuntu Server 12.10 上本地运行 Apache 服务器,它在 Windows 7 上的虚拟机 (VirtualBox) 内运行。“www”目录在 Ubuntu VM 和我的 Windows 操作系统之间共享,使用 VirtualBox 的“共享文件夹”工具。
注意:它基本上是 Windows 中的本地目录。在 Ubuntu 中,它会在启动时自动挂载。
服务器也可以通过像http://192.168.56.101/website1.
问题是来自该 URL 的图像似乎已被缓存,直到我重新启动虚拟机。
例如:
http://192.168.56.101/website1/images/bg.png在 Ubuntu 上运行的 Apache 服务器上的 URL指向c:\www\website1\images\bg.pngWindows 共享上的这个文件。在 Ubuntu VM 中,它存在于/var/www/website1/images/bg.png.
如果我在 Windows 主机中的 Photoshop 中修改此文件,则在 Ubuntu 服务器中看不到更改。我怀疑 Linux 缓存了文件什么的,因为在重新启动 VM 后我会看到更新的图像。
有什么办法可以禁用/var/www目录下任何内容的缓存吗?这会降低性能还是什么?
我安装并设置了 ccache 并用它构建了内核。以下是统计数据:
cache directory /home/marcin/.ccache
cache hit (direct) 1
cache hit (preprocessed) 0
cache miss 15878
called for link 31
called for preprocessing 2655
unsupported source language 102
no input file 4733
files in cache 35882
cache size 2.7 Gbytes
max cache size 3.0 Gbytes
Run Code Online (Sandbox Code Playgroud)
为什么 ccache 对我来说如此低效?为什么我错过了这么多?
cache ×10
linux ×3
filesystems ×2
apache-httpd ×1
centos ×1
command-line ×1
curl ×1
dig ×1
dmidecode ×1
dns ×1
io ×1
kernel ×1
linux-kernel ×1
memory ×1
nfs ×1
ram ×1
swap ×1
system-calls ×1
top ×1
ubuntu ×1
virtualbox ×1