开发与渗透
矛盾
开发工程师与渗透工程师之间是很微妙的关系。
开发的目的:
- 开发应用,增添新的功能。
渗透的目的:
- 在应用中的功能点中找到有漏洞的地方。
某种程度来说,开发与渗透在工作内容上是相生相克的。哈哈
如果开发的水平很较高,能写出健壮性较高的代码的话,即考虑了多种异常情况,包括各种用户的异常输入情况,这样会让一个渗透工程师在开始测试的时候感到很棘手。
如果渗透工程师的水平很高,会让开发者的网站满目疮痍,丑态尽出哈哈。。
挖洞过程:
渗透视角:
之前做过一小段时间的渗透,经常要对一些准备上线的Web应用进行渗透测试,运气比较好的话,总能找出一堆的漏洞。
几个搞渗透经常找到一些漏洞,都会高兴地分享出来这个功能点是是通过哪些步骤、姿势绕过验证。
大家经常有一种感觉,每找出一个漏洞,便会
- 觉得这个开发水平不怎么样,哈哈哈。。。
- 怎么连这这种情况都没有考虑到。。
- 这样都给我绕过了。。哈哈
之前我也是这么觉得的,但是做了几个月的开发之后,又有新的理解。
开发视角:
开发的工作环境是与渗透完全不同的,从一首打油诗中可见一斑。
十年编程两茫茫,工期短,需求长。千行代码,bug何处藏。纵使上线又如何,新版本,继续忙。
黑白颠倒没商量,睡地铺,吃食堂。夜半惊醒,无人在身旁。最怕灯火阑珊时,手机响,心里慌。
这种赶需求的节奏,时间短,需求多,需要大量的开发人员,赶着开发,是很难写出健壮性的代码的。
有时候在规定的时间内,连上头的需求都写不完,哪有时间来考虑代码安全性方面的问题。
除了开发节奏过快之外,还有一个造成出现漏洞的原因似乎是 无法避免的。
应用的阿喀琉斯之踵???
出现漏洞的原因:
如果从代码层面来看待Web应用为何会出现安全漏洞,简单地可以笼统地归结为一句话:代码健壮性不够,即异常处理不够全面。
要想写出健壮性的代码,换句话说就是要考虑多种异常情况。
但是一个开发者,或者一个开发团队,再有经验都很难在应用上线前就考虑完所有异常情况,几乎是不可能的。
所以很多异常情况是需要测试,或者上线后才能知道的,而渗透也属于测试的这个过程,可以说是充当着一个找Bug的角色。
渗透并不是全部。
总结:
要求开发者在短时间内写出安全性很高的代码,有种缘木求鱼的感觉。
从现实情况来看:
- 应用几乎没可能不出现漏洞,这是个多因素造成的问题,似乎没有解决方案。
所以渗透过程中遇到任何应用出现漏洞应该觉得很正常,应该处之泰然,没必要diss开发哈哈
每当你觉得想要批评什么人的时候,你切要记着,这个世界上的人并非都具备你禀有的条件。
Whenever you feel like criticizing any one, just remember that all the people in this world haven’t had the advantages that you’ve had.—–《了不起的盖茨比》菲茨杰拉德
- 瞄一瞄软件开发平面图:
换个更大的视角去看,渗透测试只是软件开发的一个小插曲,并不是全部,not the all。
启示:
- 开发者应该尝试去渗透测试的角度去看待、理解问题
- 渗透测试工程师应该尝试从开发者角度去看待、理解问题
好像说了两句废话。。哈哈哈
自由在于用进一步的理解取代考虑不周全的思想。—斯宾诺莎