从 “漏洞” 及 “攻击” 上看安全建设

安全建设 2019-11-10

在这个中秋期间,大家都在团圆过中秋,而我们团队的小伙伴在忙碌加班搞比赛,从构思到题目开发完成仅仅用了一天的时间,有的甚至加班到凌晨两点,下图是设计师完成海报发给我的时间:

img

这是个题外话,为了这个比赛,团队的小伙伴都付出了很多,也很辛苦,出题不易,且做且珍惜,总共五关,现在已经更新了两关的通过秘籍,第四关是有关应急响应的题目,目前还无人突破,现在已经更新了一个小提示,欢迎大家继续测试。

由于时间紧任务重,我们的前端小组组长,开发的前端题目,题目的目标是考察 xss+csrf 的组合攻击方式,具体想法可以看《原创 前端题目怎么就成了一个 sql 注入的题》,在完成题目,复现成功之后,就直接上线,我认为这个考点还是比较难的,但是上线没一会,就被秒杀了,我还在想,小伙伴们的实力好强,后来通过反馈才知道,是存在万能密码漏洞。

随后我查看了源代码,登录函数如下:

functionlogin($username,$password)
{
 //登录
 $config=config();
 $conn=newMMysql($config);
 $password=md5($password);
 $sql="select * from user where `username`='$username' and `password`='$password'";
 $res=$conn->doSql($sql);
 return$res;
}

这是一个典型的造成万能密码漏洞的代码,也就是我们的前端小组长在开发过程中为了赶时间赶进度,没有考虑 sql 注入的问题,所有功能均未考虑 sql 注入的问题,所以原本是考察前端安全的题目,变成了最简单的 SQL 注入题,被秒杀也是正常。

所以漏洞怎么来的?

这是一个典型的案例,第一个原因是时间紧任务重,为了完成功能根本来不及考虑安全问题。第二点是前端小组长可能对于 SQL 注入漏洞研究不深,没有考虑这方面的威胁。

后续我们对代码做了简单的处理,增加了一点防御措施,对输入的用户名进行了过滤,函数如下:

functionsec($string)
{
   $keyword="or|select| |and|union|'"; 
   $arr=explode( '|', $keyword); 
   $result=str_ireplace( $arr, '', strtolower($string) ); 
   return$result;
}

使用上面的函数对用户的输入进行过滤,虽然不能完全解决注入问题,但是已经增加了注入的难度了,已经可以让大家的注意力到其他的地方而不是注入,过了不久,有人说可以通过越权拿到 key,解决了一个问题,又来一个,权限控制不严格,存在越权问题。

这就是一个典型的救火过程,在设计开发之初没有考虑安全问题,开发出来的系统,出现安全问题然后解决问题,新的问题出现,继续解决新的问题,问题层出不穷,救火不断。所以在系统开发之初,就把安全考虑进去,一定程度上可以解决一直处于被动的局面。

漏洞原本是不存在的,如果系统开发出来,所有用户都按照规定情境在使用,那么也不会有任何安全问题,但事与愿违,就是有那么一票人不愿意遵守规则,喜欢挑刺,找麻烦,让正常使用的系统不正常,让原本安全的系统不安全,所以能让系统处于不安全状态的因素都可以被叫做漏洞。

那么,攻击又是怎么回事?

我们的系统本身是一个 ctf 题目,生产出来就是让大家来攻击的,所以这个系统的所有安全问题就一一暴露出来,如果这个系统无人问津,我们也不会知道还存在预留之外的漏洞,所以攻击可以让安全问题浮现,这个前提是攻击者会主动把他发现的安全问题告诉你。国内各大 SRC 平台的作用就是吸引更多的白帽子对自己的系统进行安全测试,找出可能对系统造成威胁的漏洞,让自己的系统更安全。

对于企业安全来说,很多企业自我感觉良好,觉得没出过事,自己很安全,其实这是一个假象,因为没有人去攻击你,所以你没有出事,并不是因为企业安全做的好,只能说攻击你的价值不大,不值得攻击而已,如果攻击你所获得的价值足够大,你所面临的攻击水平也足够强,攻击和防御是相辅相成的。如果可以用低级的攻击手段突破你的防御,那么攻击者也不会使用核武器来搞你,杀鸡焉用牛刀!

当然,我们想要的攻击是来自一群靠谱的人,而不是那些别有用心的人。白帽子的攻击可以让你的系统更安全,因为他会把安全问题提交给你,让你即使修复;黑客的攻击能让你的企业蒙受损失,因为他的攻击是有目的性的,比如盗取数据、安装勒索病毒、利用系统资源挖矿等。所以我们要通过白帽子的攻击提升防御力来抵制黑客的攻击。

总结

通过这次小比赛有了一些小感想,在系统开发之初就把所有可能存在的安全问题考虑进去,那么就可以在一定程度上避免一直处于救火的被动局面,也就是企业推行 S-SDLC 的必要性,而且在上线之前一定要做全面的安全测试,不能因为赶时间着急上线而把带病的系统发布出去,从而导致不可挽回的损失。

对于建设 SRC ,可以让广大白帽子来对企业的外围系统做安全测试,这样会带来很多攻击者和攻击行为,但是攻击可以增强我们的防御力,让看得见的人攻击你总比在背地里攻击你的更安全吧。有些人可能会认为,原来系统没啥事,搞了 SRC 之后被搞了怎么办?所以在建设 SRC 的之前也需要做很多事情,比如别人攻击之后的所有操作是否有记录,是否在可控范围之内,在白帽子提交完漏洞之后能够及时修复,如果自己内部提交的漏洞都无法及时修复,建设 SRC 的效果也达不到。

考虑的可能比较片面,欢迎大家留言拍砖。目前比赛还没有结束,还请大家继续玩玩,应急响应小组长的题目还是挺有意思的,不要浪费小伙伴的苦心。想要加入应急响应小组的朋友突破这个题目就可以加入了,通过技术会友不是你想要的吗?

应急响应的题目增加了一个提示如下:

http://zuohaoyingjixiangyinghennan.xazlsec.com/Remind.html


本文由 信安之路 创作,采用 知识共享署名 3.0,可自由转载、引用,但需署名作者且注明文章出处。

楼主残忍的关闭了评论