几个月前,我们刚刚开始在 Rackspace 上运行我们自己的 Web 服务器(它们很棒)。我使用 NewRelic(也很酷)来监控服务器使用情况,我收到的错误警报在我看来像是注入攻击?想知道是否有人可以提供一些见解或建议,如何阻止这些攻击并摆脱错误和烦人的通知。
我们确实知道这些不是我们的网站会在其上发出的呼叫或请求。我已经开始进入访问日志并阻止发出请求的 IP,但他们后来又在另一个 IP 上回来了。
以下是“MySQL 错误”的示例:
http://www.ourdomain.com/item.php?fetchitem=46'+and+999999.9)+UnIoN+All+SeLeCt+0x393133353134353632312e39,0x393133353134353632322e39,0x393133353134353632332e39,0x393133353134353632342e39,0x393133353134353632352e39,0x393133353134353632362e39,0x3931333531343536323 72e39,0x393133353134353632382e39,0x393133353134353632392e39,0x39313335313435363231302e39,0x39313335313435363231312e39,0x39313335313435363231322e39,0x39313335313435363231332e39,0x39313335313435363231342e39,0x3931333531 3435363231352e39,0x39313335313435363231362e39,0x39313335313435363231372e39,0x39313335313435363231382e39,0x39313335313435363231392e39,0x39313335313435363232302e39,0x39313335313435363232312e39,0x39313335313435363232322 e39,0x39313335313435363232332e39,0x39313335313435363232342e39,0x39313335313435363232352e39,0x39313335313435363232362e39,0x39313335313435363232372e39,0x39313335313435363232382e39,0x39313335313435363232392e39+和+'1'='1
该网址应该是 www(dot)ourdomain(dot)com/item.php?fetchitem=46
其他:
http://www.ourdomain.com/item.php?fetchitem=39'+and(%2f**%2fsElEcT+1+%2f**%2ffRoM(%2f**%2fsElEcT+count(*),%2f**%2fcOnCaT((%2f**%2fsElEcT(%2f**%2fsElEcT(%2f**%2fsElEcT+%2f**%2fcOnCaT(char(33,126,33),count(t.%2f**%2ftAbLe_nAmE),char(33,126,33))+%2f**%2ffRoM+inform ation_schema.%2f**%2fsChEmAtA+as+d+join+information_schema.%2f**%2ftAbLeS+as+t+on+t.%2f**%2ftAbLe_sChEmA+=+d.%2f**%2fsChEmA_NaMe+join+information_schema.%2f**%2fcOlUmNs+as+c+on+c.%2f**%2ftAbLe_sChEmA+=+d.%2f**%2fsChEm A_NaMe+和+c.%2f**%2ftAbLe_nAmE+=+t.%2f**%2ftAbLe_nAmE+%2f**%2fwHeRe+不+c.%2f**%2ftAbLe_sChEmA+in(0x696e666f726d6174696f6e5f736368656d61,0x6d7973716c)+和+d.%2f**%2fsChEmA_NaMe+=+%2f**%2fdAtAbAsE()+和+c.%2f**%2fcOlU mN_NaMe+like+0x25656d61696c6164647265737325))+%2f**%2ffRoM+information_schema.%2f**%2ftAbLeS+%2f**%2flImIt+0,1),floor(rand(0)*2))x+%2f**%2ffRoM+information_schema.%2f**%2ftAbLeS+%2f**%2fgRoUp%2f**%2fbY+x)a)+and+'1'='1
有人建议在 iptables 中对端口 80 进行限制,但我担心会阻塞潜在的真实用户。
非常感谢大家的想法和建议!谢谢!
答案1
对,就是那样。
我建议使用以下方法检测并阻止这些攻击ModSecurity。
ModSecurity CRS 的 SQL 注入检测示例规则(核心规则集):
可以清楚的看到包含关键词“select”、“union”、“all”等的规则
答案2
是的,这是典型的 SQL 注入攻击。您唯一真正的长期防御措施是保护应用程序,尽管您可以根据需要禁止 IP,并且有各种工具可以尝试自动执行此操作。
最终,除非发生 DOS 攻击,否则如果您的网站具有注入防护功能,它们应该相对无害。不过,这方面的情况更多是 StackOverflow。
答案3
经典的 SQLI - 扫描;忍受它或者阻止它(但不是手动的:)
如果你想要防止 SQL 注入尝试并且需要一个轻量级的解决方案,请使用nginx + naxsi ,如果你能够在 Apache 前面安装并运行反向代理(mod_security 可能会使你的网站速度变慢)
使用 naxsi 的原因
- 是很多比 mod_security 更轻量
- 核心规则集在 sqli-protection 中是稳定的
- 编写和维护规则并不像 mod_security 那样麻烦
- 可以扩展以阻止大量扫描仪、skiddos 和不必要的访问(扩展规则集)
- 学习模式 -> 在受保护的实例上运行它并为您的实时设置生成白名单规则
- 你可以拥有完整的 nginx 功能,并在同一个主机上使用 proxy_cache 和 static - 功能
什么时候不是使用 naxsi:
- 如果需要过滤传出流量(我更喜欢使用 snort)
- 如果需要多级进入过滤器(我更喜欢使用 snort)