新闻中心

教你黑客技术 ,抵御3亿次攻击!

2018-08-31

    

  8月18日,马来西亚总理马哈蒂尔到访阿里巴巴杭州总部时,马云自信满满的表示:阿里巴巴每天会遭到来自全球超过三亿次的黑客攻击。(此处省略若干字)


  此刻的你一定和小编一样,想知道阿里巴巴究竟是如何抵御黑客攻击的?

黑客对于小编来说就是

一身黑衣

长相神秘

技术666


2014120816014139d6a.jpg


在科技大片里盗取国家机密

黑保险库

是江湖大盗的最佳帮手



当然,这些都是小编之前的想法

从参加了一次技术交流后

更正了自己对黑客的认识


  8月22日晚,应清华-得意声纹处理联合实验室邀请,恒丰银行安全专家李顺达来到清华大学FIT楼,以《软件的攻击方式和安全保障》为题做了一场深入的技术交流。


  李顺达先生曾在阿里云负责安全保障,对软件的攻防有着丰富的实战经验和独到见解。演讲中他结合阿里等的攻防实践,让大家对软件安全保障机制有了更深入的了解。



微信图片_20180824145527.png


  会后小编整理了以下黑客的攻击手段:


划一划


根据对软件的占有程度分类:


类型一:不拥有软件体,只能调用软件的接口。


攻击方式:

1.调用软件的公开接口(包括API和HTTP RESTful接口),注入恶意数据(包括但不限于命令注入、命令参数注入、SQL注入、JavaScript和CSS注入、随机二进制数据)。调用软件未公开的接口,操纵软件的执行。(根据命名方式探测隐含接口和参数,一般为高权限接口。)

2.整数溢出:包括数值溢出后造成符号错误,改变执行逻辑,利用代码中INT和UINT的互转,产生未预期的数值。

3.协议攻击:很多协议中命令和数据是混杂一个信道内的,通过篡改命令或控制数据,可使服务器端的行为发生改变。

4.条件竞争攻击:一个进程写文件,另一个进程读出文件中的标记,可利用时间差篡改文件内容,从而改变执行逻辑。

5.不正确的密码学使用

6.重放攻击

 

类型二:不拥有软件体,可控制软件的运行环境并调用软件的接口。


很多共享软件提供给客户时,是以硬件的形式提供的,用户一般通过受限的shell来控制硬件,包括执行命令和调整环境变量。当软件在运行时,需要读取并使用环境变量时,如果环境变量被篡改,可能产生未预期的结果。例如读取JAVA_HOME,当此变量被指向恶意路径或程序时,可能导致恶意代码执行。黑客一般通过提权的方式来脱离受限的shell,进而获得软件体。

 

很多软件运行在中间件和操作系统之上,攻陷中间件(MW)或OS,就可以拿到软件的控制权。


攻击方式:

① 首先识别MW和OS的具体版本

② 查询NVD(国家漏洞库)中关于此版本的具体漏洞,或通过漏洞扫 描工具

③ 利用漏洞拿到权限

④ 提权获得OS的控制权

⑤ 读取软件载体,进行逆向和分析

举个栗子

中间件的漏洞:MW在解析HTTP协议时,当content-length超长或实际发送的长度与 HTTP包头中声明的长度不符时,会产生异常。MW对于空字符阶段的处理方式,会导致检测机制失效。MW的反序列化漏洞导致代码执行;OS的漏洞:开放了多余的端口,导致通过端口进入系统,端口所对应的服务存在漏洞,导致代码执行。

 

类型三:拥有软件体,可完全控制和修改软件。


当软件卖给客户时,客户即可拥有全部的二进制软件体。此形式下,破坏力最强。


攻击方式:

1.根据文件名推测此文件的功能和作用,分析软件的目录结构。

2.找到关键配置文件,通过配置恶意数据,改变软件的行为。

3.对软件逆向(通过IDA),破解和抄袭核心算法。

4.破解软件的license授权,制作破解软件(此方式对软件商破坏力巨大)

 

类型四:拥有软件源码。

 

外部拥有软件源码的方式有多种:

1.主动开源。意外上传的代码网站,被别人下载。2.内部人员拷走代码。内部被黑,代码被窃走。一旦拥有源码,危害无穷。


攻击方式:对黑客来说省去了逆向的过程。可直接分析代码中的漏洞,确定输入校验中的瑕疵,直接绕过。寻找代码中硬编码的口令和秘钥,可远程登录或对敏感数据解密。因此,一定要保护源码的安全。








  从以上黑客对软件的攻击手段可以看出:攻击的本质是通过精心构造的数据,使程序进入了未预期的状态,可导致代码执行、程序逻辑更改和绕过、拒绝服务(DOS)、信息泄露,破坏了软件和数据的机密性、完整性、可用性。

 

  那么如何防止受到黑客的攻击,有效地保护软件安全呢?

  接下来就展示一下小编的学习成果:


对于软件的对外接口


  首先要确认信任边界,明确哪些接口可能遭受不可信的输入。此类接口上,要严格进行输入检查。检查字段类型、长度、取值方位,是否含有 | & -- #等敏感字符,建议使用白名单的方式。如果使用私有协议,一定要仔细review,防范控制字段被篡改导致后台逻辑异常,重要接口增加log和审计,在接口中增加输入检查,会增加成本,在资源有限时可适当权衡。对于内部可信的接口,可适当减少校验。

软件自身的防护


  如果是java的代码,需要做混淆;如果是检查license的代码,建议增加垃圾代码和干扰代码;如果是C、C++的代码,在编译时可适当增加堆栈保护功能;开启操作系统ASLR(地址空间随机化)功能,防范缓冲区溢出;要和gcc的编译选项相配合才能发挥真正的作用;要增加代码自身的完整性检验机制,防范软件被恶意篡改;重要的程序或dll、jar等类库要增加数字签名;核心算法部分可增加反调试能力。

威胁建模


    进行风险评估:主要就是确定资产、威胁和脆弱性。

  需要设计消减风险的策略和措施,如:能不暴露的接口就不暴露;合理使用加密、hash和签名;风险转嫁,购买相关保险;风险规避不安全的功能不上线。

安全编码的最佳实践


  禁用没有边界检查的函数,如strcpy;使用OWASP ESAPI;有符号和无符号数不要随意转换;位于信任边界处的接口,要严格进行输入检查,包括类型、长度、 数值范围;不要轻易使用外部环境变量;对于输入的检查,尽量用白名单,少用黑名单(易存在疏漏和绕过) ;开启安全编译选项。

软件载体的加固


  主要是对中间件和OS的加固。查询特定版本的CVE漏洞,修复已知漏洞;OS开启防暴力破解机制;OS开启ASLR;OS只开放需要的端口,如果使用lookback接口,listen 127.0.0.1, 而不是listen 0.0.0.0。



技术分享就到这里

这次交流会让小编受益匪浅

回家给自己的电脑系统编个防火墙

可能还需要再学习几次 

不过

对安全技术感兴趣的小伙伴可以继续关注我们

之后还会举办多次的技术交流活动

希望对程序猿朋友有所帮助

下次再见


微信截图_20180831111409.png

地址:北京市海淀区双清路77号院4号楼9层
邮编:100084
电话:+86-10-8289-3532
传真:+86-10-8289-6692

版权所有@北京得意音通技术有限责任公司 2002-2017. 京ICP备 05032314号 京公网安备