10大Web应用程序安全风险
2021年top10中有三个新类别、四个类别的命名和范围变化,以及一些合并。
A03:2021-注入
Injection从第一的位置滑落至第三位置。94% 的应用程序针对某种形式的注入进行了测试,最大发生率为 19%,平均发生率为 3%,发生次数为 274,000 次。常见弱点枚举 (CWE) 包括 CWE-79:跨站点脚本、CWE-89:SQL 注入和CWE-73:文件名或路径的外部控制。
已映射的CWE | 最大发生率 | 平均发生率 | 平均加权漏洞利用 | 平均加权影响 | 最大覆盖范围 | 平均覆盖率 | 总发生次数 | CVE 总数 |
---|---|---|---|---|---|---|---|---|
33 | 19% | 3.37% | 7.25 | 7.15 | 94.04% | 47.9% 274,228 | 32,078 |
什么是注入?
代码注入:是因处理无效数据的而引发的程序错误。代码注入可被攻击者用来导入代码到某特定的计算机程序,以改变程序的执行进程或目的。代码注入攻击的结果可以是灾难性的。例如说:代码注入可作为许多电脑蠕虫繁殖的温床。常见有:SQL 注入、PHP注入、Shell注入、HTML注入、ASP注入等。
恶意用途的代码注入可包括:
透过SQL注入(见下文)随意修改数据库中的值。影响所及可从某网站外观损毁,到对敏感资料严重的破坏。常见的有:数字类型的注入、字串类型的注入、post注入、cookie注入、http注入等
当用户拜访恶意网站时,透过网页浏览器或其插件的漏洞安全隐患,进行代码注入,以便安装流氓软件到用户机器上。
透过PHP或者ASP注入安装流氓软件或者执行恶意代码于服务端。
于UNIX系统利用Shell注入安全隐患对setuid root二进制资料作修改,达成提权到root使用权限的目的。
于视窗系统利用Shell注入安全隐患对系统服务做手脚,达成提权到本地端系统使用权限的目的。
从网页浏览器利用HTML/脚本注入(跨网站脚本)进行联机窃取 / cookies窃取进而冒充他人,获取他人个人敏感资料。
预防
要避免代码注入的种种问题,得充分发挥输入输出处理保全,例如:
- 输入确认。
- 更换危险字符。例如在PHP透过addslashes()函数保护SQL注入。
- 输入编码。
- 输出编码。
- 采用其他没有饱受代码注入漏洞困扰的编程实现,例如“参数化SQL查询” (“parameterized SQL queries” 又名 “prepared statements” 亦有时称 “bind variables”) 。
对非受信的用户输入数据进行净化,删除不安全的字符。创建一份安全字符串列表,限制用户只能输入该列表的数据。不要让用户直接控制eval()、eser()、readObject()等函数的参数。使用源代码静态分析工具,进行自动化的检测,可以有效的发现源代码中的命令注入问题。不要使用管理员权限的数据库连接,为每个应用使用单独的权限有限的数据库连接。不要把机密信息明文存放,请加密或者hash掉密码和敏感的信息。应用的异常信息应该给出尽可能少的提示,最好使用自定义的错误信息对原始错误信息进行包装,把异常信息存放在独立的表中。做好更多的输入输出处理保全,更好的保护你的程序是每个代码审计专员的责任。
A01:2021-访问控制中断
A02:A02:2021-加密机制失效
A03:2021-注入
A04:2021-不安全设计
A05:2021-安全配置错误