如何放慢黑客


17

自昨晚以来,印度德里的一些脚本小子一直在试图入侵我们的网站。他编写了一个浏览器脚本,该脚本以大量嵌套循环的形式向我们的服务器发出请求,在阳光下尝试一切。

他什么都没走,甚至没有超越我们的基本防御措施(但他正在填写我们的日志文件)。

我们403 Unauthorized几乎会在收到请求后立即将a发送回给他,但是我们阻止他的请求越快,他的脚本就会运行得越快。

我们想在发送回403响应之前引入某种“延迟”。时间越长越好。

问题:如何在不影响网站其余部分的情况下延迟黑客尝试?

  • 我假设他的线程上的Sleep(15000)对其他站点访问者来说是个坏消息。
  • 仅仅给他一个新话题似乎太过分了。
  • 还有其他发送延迟响应的方法吗?
  • 我们可以迫使他的浏览器等待多长时间?我想我不太在乎他是否403 Unauthorized出错或最终超时,因此我们甚至可以进行无限期/无限期的等待。

36
您是否有理由不能仅将防火墙配置为丢弃来自其IP地址的流量?在网络级别比在应用程序级别可以更好地解决此问题。流量下降意味着他将不得不坐在那里直到连接请求超时。根本不做出响应比放弃“未经授权”的响应要有效得多,因为它实际上没有给他检查的信息。
cdhowie 2010年

3
为什么不只是阻止他的IP?
霍根2010年

2
拔下服务器。
易卜拉欣(Ibrahim Hashimi)说

看我的答案-这是一个标准的东西,我很惊讶您没有得到一个指向早期入侵检测系统的答案。
不合理

@说,拔掉服务器电源是您最糟糕的事情之一。除了自己动手,还请参阅security.stackexchange.com/q/181/33
AviD 2010年

Answers:


37

Web服务器前的某处应该有一个单独的防火墙。您要阻止从那里到达服务器的请求,以至于就他的IP而言,您的服务器已不复存在。


1
嗨,乔尔,这是“已接受”的答案,但是由于问题是从StackOverflow转移过来的,因此看来我没有实际接受此问题的权限。我给了你答案+1。这就是我要做的。
Flipster 2010年

2
@flip单击您的姓名,然后单击右侧页面中途的“帐户”链接。这样一来,您就可以将其关联回堆栈溢出帐户,并重新获得问题的所有权。
乔尔·科尔

1
但您也想自动执行-逐案处理此类问题毫无意义。(请参阅我的回答)
不合理

5

实际的入侵检测系统大小不一,将根据各种过滤器,蜜罐和其他机制自动为您执行此操作

例如,请参见fail2ban,可以将其配置为根据日志分析采取措施。

这样你可以

  • 轻松过滤来自攻击的单个IP地址,而不会影响您站点的其他用户
  • 您可以编写自己的正则表达式来分析日志
  • 您可以定义自己的操作(用油门代替禁令等)

还有其他更大的工具,请参见Wikipedia上的“另请参见”部分。

由于您的问题被标记为asp.net,因此我假设您的服务器平台是Windows。不过,如果可以选择使用Linux防火墙,则可以尝试上述操作

  • 在WAN和服务器之间放置一个Linux防火墙
  • 将对防火墙计算机的访问权授予IIS日志
  • 写正则表达式来分析它
  • 将其插入现有模板以禁止

这样的防火墙可以在极其适度的硬件上运行-即使是像linksys路由器(请参阅此处)之类的东西,也可以获得非常不错的链路带宽。


4

如果它们来自特定的IP地址或地址块,则可能要为其添加黑洞路由:

ip ro add blackhole 10.69.96.0/24
ip ro flush cache

您也可以通过使用iptables规则来完成此操作,但是要意识到iptables规则是线性遍历的,因此,如果您开始为随之而来的每一个不法之徒添加iptables规则,则可能会占用很多CPU。路由表经过优化,可以处理许多条目。例如,我的其中一个盒子的路由表中有35万个条目,没有问题。但是,如果我有3K iptables规则,那么该盒子几乎肯定会掉下来。

如果您尝试执行一些使应用程序在这些连接上睡眠数秒的操作,则最终可能会占用足够的资源,导致合法请求无法获得任何资源。


1
+1。在这种情况下,我喜欢您的有关路由与netfilter相对效率的信息。iptables具有ipset功能的内核上的内核可以非常有效地匹配大量IP地址,但是似乎ipset它们的内核中都没有启用主要发行版。
史蒂文

好的一点是,ipset似乎对这类事情很有用,但并不容易获得。还有另一个叫做nf-hipac的系统,它是一个更通用的iptables优化器,但是邮件列表和最新版本中的最后一个帖子来自2005
。– Sean Reifschneider 2010年

3

希望他慢下来,因为他慢下来错误地将您的网站下来,如果它是下一个DoS攻击,因为你的线程将是“忙”维护该人的请求。您想要做的是阻止他的IP并使用它来完成。没有理由诱捕这样做的人。


2

您正在寻找的是Apache模块mod_evaisve。

在基于Debian的发行版上,使用

apt-get install libapache2-mod-evasive

CentOS / RHEL

yum install mod_evasive

mod_evasive跟踪进入Apache的请求,并使用通过阈值的iptables禁止IP。当您被具有数千个不同IP的巨大僵尸网络作为目标时,它是抵御基于HTTP的DoS攻击甚至分布式DoS攻击的终极工具。

它作为运行时加载的Apache模块运行,而不是作为单独的守护程序运行。

虽然,控制一个大型僵尸网络的聪明攻击者仍可以通过定时僵尸网络中每个僵尸发送的请求来关闭您的Web服务器,从而使任何IP都不会超过阈值。

在这种情况下,您必须使用基于异常的IDS并可能自己训练系统。但是,除非您有一些真正的大敌人或拥有公司议程的人,否则这种情况极不可能发生。


0

如果您使用的是Linux,请使用iptables将家伙的延迟限制为喜欢1个字节/秒,并让他永远花费一个请求。如果是分布式的,那将无济于事。

我不确定如何在Windows上执行此操作,但是如果有的话,您可能会在路由器或硬件防火墙中找到一些类似的选项。

编辑:同意以上要求,这更像是服务器故障问题。


2
有时,攻击者会在DDoS攻击中使用此技术。在服务器上执行此操作会适得其反。<_ <
p静态

说它用于DDoS攻击不是很正确-这种效果是DDoS攻击的目标。在服务器/防火墙上执行此操作,但仅对攻击计算机执行此操作,才是真正的防御措施(AFAIK)。
不合理

0

如果此人的IP地址相当稳定,则可以创建一个自定义HttpModule,通过更改web.config文件将其插入,并在将其识别为该IP地址时对其进行延迟。或者,您可以将他发送回一些404代码,或将他重定向到其他地方。


0

你知道他们在印度。您的站点是否有大量的印度用户,可以防止在防火墙级别逐步阻止其整个IP范围,直到流量停止?当然,这不是一个坚定的解决方案,但是如果您只是与一个典型的“脚本小子”打交道,那么足以阻止他们并将其发送到另一个目标。

更好的是,如果来自一个IP,您可以使用自己的拒绝服务攻击进行回复:)


那不是一个真正的解决方案,用斧头切开果冻。B,DDOS确实不是一个很好的建议(尽管我假设您是在开玩笑),没有理由a)做伊拉杰尔b)给您的服务器增加更多的负载!
Trufa 2010年

0

除了收到的答案之外,您还需要保存文档(日志,跟踪记录)并将其提供给服务提供商。这是事件期间最有效的方法,因为您的提供者可以目睹入侵。即使您的措施成功了,减少进一步的尝试也很重要,它可以帮助您的提供者将请求升级到攻击者的服务提供者;可以说,最有效的措施是使攻击者的提供者拒绝为其确定的攻击者的客户提供服务。


0

如果您是程序员,则可以使用.net Begin_Request事件并将“睡眠”放入其中

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.