黑客通常利用的漏洞有:软件编写存在bug、设计存在缺陷、系统配置不当、口令失窃、嗅探未加密通讯数据、系统入侵等等,因此提前做好代码审计工作,非常大的好处就是将先于黑客发现系统的安全隐患,提前部署好安全防御措施,保证系统的每个环节在未知环境下都能经得起黑客挑战,可以进一步巩固客户对企业及平台的信赖。
何为代码审计?以及审计方式有哪些?
所谓代码审计是一种以发现程序错误,安全漏洞和违反程序规范为目标的源代码分析,它被认为是安全过程中最关键的阶段之一。是白盒测试的常用方法,相较于黑盒测试,由于白盒测试能更加详细的理解业务程序逻辑,也能更全面地发现安全风险。
代码安全审计通常可以分为:自动化审计和人工审计。为了实现常态化、持续性的安全能力测试,许多企业开始大量使用自动化审计的方法,一定程度上会节省成本,但需要指出的是:目前的自动化审计方式无法准确理解开发人员的代码含义,存在误报的情况,且误报率较高。而人工审计的费用较高和耗时较长(具体费用和时间与代码量有关),但是可以做到三懂:懂代码、懂业务、懂安全,因此自动化和人工审计两种方法并不是相互对立的,而是互为补充,二者并用才是业界代码安全审计的最佳实践。
代码审计流程
1.确认的源代码审计范围、最终对象、审计方式、审计要求和时间等内容。
2.先使用源代码审计的扫描工具对源代码进行扫描,完成初步的信息收集,然后由人工的方式对源代码扫描结果进行人工的分析和确认。
3.对源代码审计发现的问题整改或加固。经整改或加固后,源代码审计服务人员进行回归检查,即二次检查。
4.根据第一次和第二次的审查结果,整理源代码审计服务输出成果,最后汇报项目领导。
代码审计常见的漏洞
1. 硬编码(密码明文存储)——是指将敏感数据(包括口令和加密密钥,部分账号的密码以及其他敏感信息等)硬编码在程序中。既不安全,也难以维护:password,pass,pwd,jdbc等
- 跨站脚本漏洞——入侵者可以利用存在XSS漏洞的Web网站浏览相关网页的用户,窃取用户会话中诸如用户名和口令(可能包含在Cookie里)等敏感信息、通过插入恶意代码对用户执行挂马、XSS漏洞还可能被入侵者用于网页篡改。
3. 短信验证码——时间限制防止可爆破,次数限制防止对手机产生入侵,可否自定义防止发送不良信息。
4. SQL注入——注入的本质,是程序把用户输入的数据当作代码执行。sql语句中出现+,append,$(),#等拼接字眼且没有配置SQL过滤文件,则存在sql漏洞。根本解决办法是预编译,也就是sql语句事先编译好了,随后传入参数填坑,不会重新再编译,也就不会有sql注入:select,update,delete,insert等
5. 跨站请求伪装漏洞——入侵者可利用跨站请求伪装 (CSRF) 漏洞假冒另一用户发出未经授权的请求,即恶意用户盗用其他用户的身份使用特定资源。
6. 调试程序残留——代码包含调试程序,如:主函数。调试程序会在应用程序中建立一些意想不到的入口点被入侵者利用。
7. 任意文件上传——未过滤用户输入文件名,导致能够上传恶意可执行文件。需注意有没有配置文件上传白名单,是否有检查后缀名,配置文件是否设置了白名单或者黑名单:upload,write,fileName,filePath等
8. 命令执行漏洞——系统中使用了一些调用操作系统函数的命令,在调用过程中,如果命令的来源不可信,系统可能执行恶意命令。如删除系统文件。
9. 缓冲区溢出——直接拷贝或*,未考虑大小:strcpy,strcat,scanf,memcpy,memmove,memeccpy,Getc(),fgetc(),getchar,read,printf等
10. XML注入——在导入配置、数据传输接口等场景,留意XML解析器是否禁用外部实体:DocumentBuilder、XMLStreamReader、SAXBuilder、SAXParser、SAXReader 、XMLReader、SAXSource 、TransformerFactory 、SAXTransformerFactory 、SchemaFactory等
11. 日志伪造漏洞——将未经验证的用户输入写入日志。入侵者可以利用该漏洞伪造日志条目或将恶意内容注入日志。
12. URL跳转——注意是否配置了url跳转白名单:sendRedirect,setHeader,forward等
13. 敏感信息泄露及错误处理——查看配置文件是否配置了统一错误页面,如果有则不存在此漏洞,如果没有则搜索定位看是否泄露敏感信息:Getmessage,exception等
14. 反序列化漏洞——当输入的反序列化的数据可被用户控制,那么入侵者即可通过构造恶意输入,让反序列化产生非预期的对象,在此过程中执行构造的任意代码:ObjectInputStream.readObject,ObjectInputStream.readUnshared,XMLDecoder.readObject,Yaml.load,XStream.fromXML,ObjectMapper.readValue,JSON.parseObject
15. 不安全的Ajax调用——系统存在不安全的Ajax调用。入侵者能够利用该漏洞绕过验证程序或直接编写脚本调用Ajax方法实现越权操作。
最后,代码审计意义重大,是整个安全保障体系中核心又最重要的工作,往往被人们忽视。天磊卫士提示大家一定不要疏忽代码审计的重要性,防备安全隐患。有助于进一步健全安全建设体系,遵循了相关安全策略、符合安全合规的要求。
标签:审计,安全,代码,哪些,用户,漏洞,源代码 From: https://blog.51cto.com/u_15899913/6081627