我怎样才能阻止 SipVicious ('friendly-scanner') 侵袭我的 SIP 服务器?

我怎样才能阻止 SipVicious ('friendly-scanner') 侵袭我的 SIP 服务器?

我运行一个 SIP 服务器,它监听 UDP 端口 5060,并且需要接受来自公共互联网的经过身份验证的请求。

问题是,它偶尔会被扫描 SIP 服务器的人发现,然后他们整天坐在那里试图暴力破解服务器。我使用的凭证足够长,这种攻击永远不会奏效,但它很烦人,因为它占用了大量带宽。

我曾尝试设置 fail2ban 来读取 Asterisk 日志,并使用 iptables 禁止执行此操作的 IP,这样 Asterisk 在 10 次失败尝试后就无法查看传入的 SIP REGISTER 尝试(以我看到的攻击速度,这种情况在不到一秒的时间内就会发生)。但是,SipVicious 派生脚本在收到 ICMP 目标主机无法访问后不会立即停止发送 - 它们会继续用数据包攻击连接。它们停止的时间是可配置的,但不幸的是,进行此类暴力攻击的攻击者似乎通常会将超时时间设置得非常高(在看到 SIP 服务器的初始确认后,fail2ban 阻止他们获得任何 SIP 响应后,攻击仍会以高频率持续数小时)。

有没有办法让它停止向我的连接发送数据包?

答案1

许多攻击者使用的公开可用的 SipVicious 脚本会在收到没有 From: 行的无效 SIP 响应时立即停止攻击。您可以识别 SipVicious,因为它在 SIP 请求中将其 User-Agent 设置为 friendly-scanner。

使用这种技术对抗现实世界的攻击者,我能够立即阻止数据包的泛滥。您可以使用简单的脚本发送这样的数据包。例如:

cat >UnfriendlyScannerStopper.scala <<END
import java.net._

object UnfriendlyScannerStopper {
  def main(args : Array[String]) : Unit = {
    if (args.length < 2) {
      System.out.println("Usage: FriendlyScannerStopper ipAddr port")
      return
    }

    val udpSocket : DatagramSocket = new DatagramSocket();
    val packetContents : String = "SIP/2.0 400 Go Away!!!\r\n\r\n"
    udpSocket.send(new DatagramPacket(packetContents.getBytes("utf-8"), packetContents.size,
      InetAddress.getByName(args(0)), Integer.parseInt(args(1))))
  }
}
END
scala UnfriendlyScannerStopper.scala 188.138.107.179 5102

您需要将 188.138.107.179 和 5102 替换为您在攻击中发送的 SIP 数据包的 Via 标头中的地址和端口。

答案2

与上游提供商沟通。我的提供商有一个黑名单,其中包含一个 REST API,我可以向其提供 IP 地址。我设置了 fail2ban 来调用此 Web 服务,数据包在到达我的防火墙之前会在提供商网络中的某个地方被拦截。

答案3

没有人直接回答你的问题,所以:没有

您无法阻止某人向您的外围网关发送数据包。您能做的最好的事情就是阻止它们向上游发送(如上文提到的 longneck 所述),或者在防火墙处阻止它们。

Fail2ban 将根据失败攻击的次数触发(如您上面所述),因此另一种选择(或组合)是根据源 IP 的地理位置进行阻止。类似安全顾问或者一些硬件防火墙可以根据地理位置进行阻止,这将进一步减少到达服务器的数据包数量(参见www.telium.io)。

回到你最初的问题:不

答案4

这些 iptables 规则对我来说效果很好。在此类攻击期间,它们将 CPU 负载保持在 2% 以下。

http://txlab.wordpress.com/2013/06/29/protecting-a-vpbx-from-dos-attacks/

相关内容