我最近将我的托管服务器切换到了 AWS。最初一切都运行良好,但最近我的服务器出现了问题,多次宕机。
我密切监视它并了解到 CPU 利用率多次达到 100%,并且每次我都需要重新启动我的实例。
所以我检查了访问日志和错误日志,似乎我的服务器上发生了一些黑客活动。请查看我的错误日志文件中的以下日志:
[Wed Sep 23 14:25:56.081268 2015] [:error] [pid 18791] [client 193.0.***.***:59940] script '/var/www/html/includes/custom.php' not found or unable to stat, referer: -1' OR 2+20-20-1=0+0+0+1 or 'Q2fRfUkq'='
[Wed Sep 23 14:25:56.122526 2015] [:error] [pid 18780] [client 193.0.***.***:59939] script '/var/www/html/includes/custom.php' not found or unable to stat, referer: @@EKtcl
[Wed Sep 23 14:25:56.365583 2015] [:error] [pid 18788] [client 193.0.***.***:59930] script '/var/www/html/includes/custom.php' not found or unable to stat, referer: -1" OR 2+392-392-1=0+0+0+1 --
[Wed Sep 23 14:25:56.663520 2015] [:error] [pid 18786] [client 193.0.***.***:59908] script '/var/www/html/includes/custom.php' not found or unable to stat, referer: if(now()=sysdate(),sleep(9),0)/*'XOR(if(now()=sysdate(),sleep(9),0))OR'"XOR(if(now()=sysdate(),sleep(9),0))OR"*/
[Wed Sep 23 14:25:56.994941 2015] [:error] [pid 18791] [client 193.0.***.***:59940] script '/var/www/html/includes/custom.php' not found or unable to stat, referer: (select(0)from(select(sleep(9)))v)/*'+(select(0)from(select(sleep(9)))v)+'"+(select(0)from(select(sleep(9)))v)+"*/
现在我可以看到它试图访问不存在的文件并添加 sql 注入,令人难以置信的是它正在工作,它使用我的 CPU 利用率达到 100%,而 mysql 服务在这里使用了 90%。
那么如何防止这种情况发生呢,请帮助我。
这里占用了 mysql 访问权限,所以才会发生这种情况?我们可以看到,没有任何可用的 custom.php,那么他们如何在服务器上运行 mysql 查询呢?
最重要的是黑客通过 curl 或 post script 进行黑客攻击,但根本没有使用我的机器。
答案1
鉴于此代码,它似乎是自动尝试 SQL 注入的常见模式。这就是为什么 CPU 的使用率很高。这并不意味着攻击在这个级别上是成功的。
您是否注意到您的数据库中的数据已损坏或者您是否注意到您的 php 应用程序有奇怪的行为?
为了避免这种情况:
检查您的 php 应用程序中 sql 是如何在 php 代码中管理的。切勿允许 php 代码直接操作 SQL 命令。使用函数,并清理您的 url 和表单 POST。如果是这种情况,您可以放心。
找到一种方法将此类活动列入黑名单。我的意思是,使用一种软件来检查您的日志并阻止 IP。例如,安装像 SNORT 这样的 IDS。
一个简单的解决方案是安装 artillery。这是一个简单的蜜罐,可以根据伪造的端口将自动尝试列入黑名单。你可以在以下网址找到一个不错的教程:https://www.digitalocean.com/community/tutorials/how-to-set-up-an-artillery-honeypot-on-an-ubuntu-vps以及位于https://github.com/trustedsec/artillery。我已经为一些客户使用了此解决方案,它有效且简单。