从携程事件给我们警示
你准备好了吗? 如果携程事件发生在你身上,这个问题怎么处理?有无应对方案?怎样快速找出攻击的方式,方法? 有句话说的好,常在河边走,哪有不湿鞋。
程序是一波人一波人开发的
国内软件行业人员流动还是很频繁的,程序是一波人一波人开发的,有如击鼓传球,谁最后接手烂在谁手里谁倒霉。 我们发现国内的软件业在重复做着同样的工作,一次一次推倒重来,自己开发的,心里才有底,对于上一波人开发的系统,谁也不能保证安全性。
我看到很多Q~Q ~群在转发携程事件,还有携程内部聊天纪录以及电子邮件,都在幸灾乐祸,我想问如果发生在你身上呢?
运维不能靠天吃饭
你不能期望运维不出事情,不出事,必有因果关系,种下因得到果。 很多企业的运维,不出事就不会出事,出事一定会出大事。 要你拿出预案,将事故消灭在萌芽状态。你的准备工作做得多少决定了你故障的大小以及范围。 出这样的事故一定是平时积累,爆发只是个时间问题。
应对方案
从业多年业我也被攻击过,遇到各种各样的攻击,常常是被挖到新公司,首先面临的挑战就是安全问题。 我也总结一些经验,这里篇幅有限,不可能依依详解,仅仅给你提供一个思路一个启发。详细请看我的网站相关文章http://netkiller.github.io/
携程代码被删除解决方案
WEB 服务器运行用户不能与代码所有者用户相同,因为一旦WEB服务器被攻陷将具有删除权限。 所以代码部署使用AAA用户,WEB服务器运行使用BBB用户。一旦WEB服务器被攻陷,用户拥有BBB权限,而无法删除AAA权限的文件。 这样的设置,除了防止删除文件,还能避免代码注入。攻击者更多是注入代码,下载数据库,而非破坏性攻击。 这样设置给攻击者制造了一定门槛,继续攻击,攻击者需要提升权限才能得到修改与删除权限。
携程数据被删除解决方案
-
在APP应用与数据库间增加了API服务器,应用程序通过API访问数据库,API主要采用ORM关系对象映射技术为用户提供接口。而不是让APP通过SQL直接操作数据库。APP需要提供用户认证,ACL控制(精确到方法),简单的说AAA用户只能从指定IP地址,访问指定类与方法,甚至可能精确到方法参数限制。
-
去掉Delete权限,只能通过更新状态删除,这样的缺点是会产生大量的脏数据。及时清理也问题不大。
-
控制恶意修改,通过触发器控制某些字段被恶意撰改。参考 数据库记录安全解决方案》http://netkiller.github.io/journal/mysql.security.html
自动化运维
- 自动化安装,快速将标准的服务器,部署为指定功能的服务器,参考 https://github.com/oscm/shell
- 自动化发布,这个非常重要,目前国内很多代码发布仍然采用人工方式(处在石器时代)。自动化发布能瞬间部署,这点对快速抢修非常重要。参考 https://github.com/oscm/devops
Active-Active 灾备
异地灾备是非常奢侈的,不是每个企业都能承担的起,但是双活灾备系统是必须的。
怎样快速找出攻击的方式
以PHP为例,如果代码被删除。我会第一时间在php.ini中禁用删除函数,然后 grep -r unlink /www/example.com/xxx.example.com 找出具备删除功能程序。然后在web日志中找到该程序调用的url被什么时间什么IP地址调用过,最后禁用该IP地址。 如果Java被二进制植入就比较麻烦,无法直接找出,首要做的是修改代码所有者,不能与Tomcat启动用户相同。 另外我的自动发布程序能够每次发布时,看到那些文件被修改,那些文件是新增,发布程序与版本库为基准,删除新增的文件。通过观看那些文件被删除,瞬间找到恶意脚本。
延伸阅读 《PHP 安全与性能》http://netkiller.github.io/journal/security.php.html
文件与代码监控
代码被植入,删除修改,怎样能第一时间知道。而不是亡羊补牢。延伸阅读 《植入式攻击入侵检测解决方案》http://netkiller.github.io/journal/security.implants.html
就谈到此吧!
作者:netkiller(Neo) 时间:2015-05-28