这里有几个问题。您在问如何避免检测,如何避免归因以及如何避免利用。尽管您确实详细说明了您的目标,但我仍然不知道您的具体威胁模型。我可以猜测一些可能的可能性,我的回答是基于我对您想要完成的目标的最佳理解。我将根据问题更新编辑我的答案。
你的目标
避免引起目标网站管理员和其他人的注意。
是否发生这种情况取决于目标网站的配置方式。可以对各种蜘蛛进行指纹识别,因此即使它们使用普通的用户代理,它们仍然会显示一些它们独有的行为。例如,客户端 HTTP 标头的发送顺序,甚至它们的大小写。如果网站管理员决定这样做或拥有专为此类检测而设计的软件,则无法阻止网站管理员知道您使用的是 wget 而不是常规的 Web 浏览器。不过,您的技术可能足以避免被典型的 IDS 绊倒。
无法追踪到我的实际 IP。
既然你说你使用的是 torsocks,我想我应该添加一些关于它是如何工作的信息。torsocks 提供 Tor 连接的方式是使用LD_PRELOAD
挂钩网络相关功能。调用这些函数时,将执行 torsocks 库中的函数,并将连接重定向到 SOCKS5 代理。这对于不支持 SOCKS 协议的应用程序很有用,但它很容易被意外或恶意绕过。如果应用程序使用原始程序集直接调用系统调用,它将绕过 torsocks。由于最新版本的 wget 使用 libc 网络功能而不是直接调用系统调用,这对它来说应该不是问题。不过,假设一个受感染的 wget 可以轻松绕过 torsocks。解决方案是在拒绝所有非 Tor 流量的用户下运行它。这可以通过在自己的用户下运行 Tor 的系统实例(通常是默认用户)并使用iptables
阻止所有来自 UID 的传出连接,而不是 Tor 进程的连接。
我假设您也知道影响 Tor 和任何其他低延迟匿名网络的流量分析攻击。从你的目标来看,这可能不是问题,因为需要一个非常大的 AS 级别的对手才能以任何准确度实现这一目标。
避免留下痕迹,使网络管理员或任何人能够检测到不同的作业是由同一个人(我)执行的。例如,我可能大致每月镜像一次网站,但会有一些变化;如果尽管我努力更改标题并从不同的 Tor 出口节点出来,我会很不高兴,但对方很清楚这是同一个人。这一点不如一般可追溯性重要。
很有可能,任何查看日志的人都能够分辨出它是同一个人。其他人使用 Tor并更改标头(这不是自然行为)并且大约每月执行一次并且拥有蜘蛛指纹的可能性极低。虽然这不允许目标知道谁您是,他们可能仍然能够分辨出该活动来自同一个人。老实说,使用没有任何更改的常规旧 wget(或者可能是避免触发洪水检测等所需的基本必要的)可能会更好。人们和机器人一直都在使用 wget,即使是 Tor,这意味着随机化你的标题会使你甚至无法与在该站点上使用 wget 和 Tor 的(已经很少的)人融为一体.
不要让自己容易受到没有高水平技术技能的恶意行为者可以实施的攻击。
过去有多个针对 wget 的远程攻击实例。这从相当复杂的(如缓冲区溢出)到更简单的(如提供 301 重定向到覆盖本地文件的 FTP 链接)不等。您可以以非特权、隔离用户的身份运行以缓解这种情况,也可以使用 AppArmor 等强制访问控制将其限制为仅访问某些目录。
您的注意事项
关于您的一些预防措施的一些评论:
为每个作业提供随机选择的 HTTP 标头
无论它们的顺序或大小写如何,都会解释 HTTP 标头。因此,每个使用该协议的实用程序可能会使用不同的标头顺序或不同的情况,而不仅仅是不同的标头。例如,curl 在主机头之前给出用户代理头,而 wget 则相反。即使使用相同的标题设置,它们仍然可以被区分。
对于 wget:
GET / HTTP/1.1
User-Agent: Wget/1.19.1 (linux-gnu)
Accept: */*
Accept-Encoding: identity
Host: example.com
对于卷曲:
GET / HTTP/1.1
Host: example.com
User-Agent: curl/7.57.0
Accept: */*
对于火狐:
GET / HTTP/1.1
Host: example.com
User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:52.0) Gecko/20100101 Firefox/52.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
Upgrade-Insecure-Requests: 1
那么,如果您将 wget 设置为使用 Firefox 用户代理会发生什么?可以专门配置一些 IDS 以检测报告的用户代理和任何给定连接的行为之间的差异。差异可能让 IDS 知道实际使用的是什么软件,或者它可能只是提醒它客户端故意谎报他们是谁,导致 IDS 大声警告系统管理员。使用以下 wget 命令,在欺骗用户代理的同时从网站下载单个页面:
wget -U "Mozilla/5.0 (Windows NT 6.1; rv:52.0) Gecko/20100101 Firefox/52.0" "http://example.com/secretpage.html"
您会认为这与直接连接到 的 Firefox 用户没有区别example.com/secretpage.html
,对吧?IDS 将能够很快注意到它实际上是 wget 而不是 Firefox,因为它会看到从客户端发送以下内容:
GET /secretpage.html HTTP/1.1
User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:52.0) Gecko/20100101 Firefox/52.0
Accept: */*
Accept-Encoding: identity
Host: example.com
现在将此与前面的 Firefox 标头示例进行比较。这显然不是真正的 Firefox,尽管用户代理声称它是。与简单地保留原始 wget 用户代理相比,这更有可能引发 IDS 警报(毕竟,用于检索网页的命令行工具通常对系统管理员来说没什么大不了的)。
此外,应用程序访问资源的模式可用于确定应用程序的身份。当 Wget 用作网络蜘蛛时,Wget 具有非常独特的行为,它访问资源的顺序和速度,以及它忽略哪些资源。Curl 不支持成为蜘蛛,因此没有任何行为。Firefox 有一些非常复杂的行为,涉及资源加载的顺序以及给定资源是否被 ping 或预加载。如您所见,如果进行任何深入分析,通常总是可以知道您正在使用 wget,并且由于大多数 wget 用户不会更改其标题,这使您与众不同。
0 到 600 秒之间的随机等待
只有在需要绕过自动检测或避免网站泛滥时才应该这样做。虽然它是随机的,但查看日志的管理员仍然会看到每个连接都在等待 0 到 600 秒之间。这本身就是独一无二的。不应该尝试表现得不那么“蜘蛛式”。
让自动蜘蛛表现得像一个真正的互联网用户是非常困难的。已经写了许多关于它的研究论文,并且已经写了许多研究论文来展示如何检测它。鉴于垃圾邮件发送者大量投资于他们的机器人表现得像人类,并且反垃圾邮件解决方案大量投资于区分此类机器人与人类,因此您提出的任何解决方案(例如使用随机延迟)都无法接近常数垃圾邮件发送者和反垃圾邮件解决方案之间的军备竞赛。这就像试图向大联盟的击球手投球。考虑到大联盟投手和击球手使用的不断升级的技术,任何你能想到的投球“聪明”技巧都将完全无效。不要试图让你的蜘蛛表现得像人一样。你不会赢得那场比赛。唯一获胜的举措是不玩。
所有链接都转换为本地引用
这仅在您要离线浏览网站时才重要。如果您怀疑该网站是恶意的,我不会依赖它,因为可能有很多方法可以嵌入指向 wget 未检测和转换但在标准浏览器中检测和访问的网站的链接。如果您担心离线镜像试图打电话回家,您应该只从无法直接访问内容的用户连接到它。看来您已经根据#8 执行此操作。
威胁建模
尽管您确实添加了更多细节,但您仍然应该多考虑一下您的威胁模型。通过阻止他们意识到每个月的抓取活动是相关的或者这不是自然流量,您到底想达到什么目的?我只能想到这可能是可取的几个原因:
- 您需要网站内容进行侦察以供以后利用。
- 您不希望网站注意到并阻止 Tor 流量或引入验证码或延迟。
- 您不希望网站为您提供自定义(恶意或虚拟)内容。
- 您正在抓取网站的一个意外暴露的私人区域,并且对您的流量的存在引起任何注意都会导致意外访问被关闭。
- 知道某人正在抓取它就足以让管理员意识到谁可能是它的幕后黑手(例如,如果您正在抓取朋友的个人网站或您活跃的论坛)。
根据其中哪些(如果有)适用于您的情况,您无需花费太多精力来避免归因。除非事件响应需要,否则大多数网站访问日志都不会手动详细分析。大多数甚至以足够低的分辨率记录特定标题之类的内容。您可以通过使用私有代理(使用 Tor,如果您需要匿名)并将所有标头设置为使用 wget 的流行网络蜘蛛的标头来避免大多数形式的限制和阻塞。对您自己的连接进行节流和速率限制,以避免损害服务器并迫使它们采取防御措施。还记得亚伦·斯沃茨(Aaron Swartz)吗,那个在麻省理工学院下载大量科学期刊后被捕并随后自杀的人?他用wget,并且只是因为他使用了如此多的流量甚至逃避了阻止尝试而被抓到,以至于 JSTOR 最终禁止了整个 MIT 地址范围并向他们抱怨滥用行为。如果他使用了速率限制,他就不会被抓到,也不会死,而且 Sci-Hub 会大很多。
如果网站不是由至少具有中等程度的攻击性安全知识和“反击”动机的人操作的,那么您不应该担心利用 wget。虽然这当然是可能的,但有时比其他时候更容易,但网站管理员可能不会做出回应。至少我个人从未见过它发生在野外。例如,如果您要访问一个复杂的安全承包商的意外暴露的后端,这将是一个更大的风险。如果您尝试下载 Raytheon SI 的内部 wiki,而您所做的只是使用带有 torsocks 的普通 wget,那么您做错了,应该停止。
如果没有至少一点关于您要达到的目标的详细信息,就很难给您一个单一的、令人满意的答案。最有可能的完整解决方案?使用 VPS。匿名购买 VPS(如果您的威胁模型需要这样做),然后使用 Tor 连接到 VPS。使用一些基本的节流和速率限制配置 wget 以避免被阻止。这不仅不会因为 Tor 的使用而引发危险信号,而且还会在 wget 被入侵的情况下隔离它。