1.前言
一些渗透测试关注点,供查看。
2.略
略
3.略
略
4.某通信大厂《产品安全通用防护手册》的目录要求细则
4.1 WEB部署
4.1.1 遵循最小权限原则,WEB服务应避免直接在高等权限下部署和运行。
4.1.2 WEB站点的根目录建议安装在非系统卷中。
4.1.3 WEB服务部署时,应与其他核心应用或数据库隔离部署。
4.1.4 如果WEB应用对Internet开放,WEB服务器应该属于DMZ区,在WEB服务器与Internet之间,WEB服务器和内网之间应有防火墙隔离,并设置合理的策略。
4.1.5 如果WEB应用系统存在不同的访问等级(如个人账号使用、客户服务、管理),那么应该通过不同的WEB服务器来处理来自不同访问等级的请求,而且WEB应用应该鉴别请求是否来自正确的WEB服务器。
4.1.6 用户Portal和管理Portal分离,防止相互影响,防止来自用户面的攻击影响管理面。
4.2 身份认证
4.2.1 应用程序必须有认证和授权的机制并确保有效执行。只有在认证和授权成功后,用户才可以访问数据。没有成功的认证和授权,系统应禁止任何活动。
4.2.2 所有能对系统进行管理的逻辑通信端口以及协议都需具备接入认证机制(协议标准定义中无认证机制的除外)。如果产品支持关闭认证机制,应在产品资料中提示风险。
4.2.3 所有在设备外部可见的能对系统进行管理的物理接口(如串口、USB接口、管理网口等)应具备接入认证机制,以防止非授权访问。如果产品支持关闭认证机制,应在产品资料中提示风险。
4.2.4 对于管理系统的账户,必须都可以让用户知晓并管理,禁止存在用户未知的账户(如超级账号和口令),并在产品资料中提供所有账号以及管理操作说明。
4.2.5 所有登录页面的认证处理模块必须统一。
4.2.6 对用户的最终认证处理过程必须放到应用服务器端进行。
4.2.7 认证处理模块必须对提交的参数进行合法性检查。
4.2.8 提示信息不能存在差异化的状态,引入枚举风险。
4.2.9 认证模块必须具有防暴力破解机制。
4.2.10 对于网管系统,当同一个账号在不同位置同事登录时应该有告警或提示,或禁止使用。
4.2.11 用户名、密码和验证码必须在同一个请求中提交给服务器,必须先判断验证码是否正确,只有当验证码检验通过后才进行用户名和密码的校验,否则直接提示验证码错误。
4.2.12 应保证图片验证码安全
4.2.13 应保证短信验证码安全。
4.2.14 SSH公钥认证场景下,设备默认出厂设置或工程维护结束后,必须确保没有认证公钥存在于服务端,即默认路径下不应存在authorized_keys文件或该文件为空。
4.2.15 SSH认证场景下,要求服务端的公钥具有唯一性,不能存在两个设备生成公钥重复的场景。
4.2.16 管理台的访问应增加额外的访问限制。
4.2.17 对于重要的管理事务或重要的交易事务要进行重新认证,以防范会话劫持和跨站请求伪造给客户带来损失。
4.3 口令安全
4.3.1 口令复杂度要求
4.3.2 密码复杂性必须可以由管理员配置。
4.3.3 对于出厂时缺省设置的账号/口令,口令应符合复杂度要求,必须提供客户修改机制。再首次登录成功后建议用户修改密码,产品资料中应提醒用户定期更新密码,并提示风险。
4.3.4 口令不能明文显示,如登录密码、修改密码的原密码、新密码等,操作界面中的输入口令可不显示或者用*代替。
4.3.5 口令输入框不支持拷贝功能。
4.3.6 密码不能明文存储。当对接外部系统或第三方组件(如数据库)必须要用到密码明文场景下,需采用可逆加密的方式存储,其他场景都需采用不可逆加密存储方式,且强度不低于
SHA256加盐。盐最小长度32比特,应避免不同用户盐值相同的情况。
4.3.7 不得存在用户无法修改的口令。
4.3.8 口令的用途应具有唯一性,禁止多个场景共有同以口令。
4.3.9 必须修改第三方组件或操作系统中涉及的默认对接参数或口令。
4.3.10 公司自研的应用程序或软件不得支持任何“密码保存”功能。
4.4 权限管理
4.4.1 应遵循授权最小化原则。
4.4.2 产品不得具有未记录再产品手册中的功能,尤其时不得具有违背运营商安全和隐私利益的功能(包括且不限与恶意软件、间谍软件、隐藏功能或任何其他未经批准或不需要的功能,如未经授权的数据转发)。
4.4.3 授权和用户角色数据必须存放在服务器端,不能存放在客户端,鉴权处理在服务端完成。
4.4.4 对于管理系统的账户,必须使用独立的账户,不存在匿名账户之类的公共账户。
4.4.5 日志文件不能被篡改。
4.4.6 对于所有操作和资源,必须进行访问权限控制,仅特定的用户或角色才能访问。
4.4.7 对于所有用户和角色,必须禁止提升用户权限的方法,或者访问超过自身权限之外的操作或资源的方法。
4.4.8 文件系统权限配置的限制,遵循权限最小化原则,不能设置为777等大权限。
4.4.9 禁止将敏感文件(日志文件、配置文件、数据库文件)存放在WEB内容目录下。
4.4.10 文件上传场景下需对文件的可执行权限进行必要的限制。
4.4.11 系统开放的所有端口都必须在用户手册中有记录。
4.4.12 需保证所有对外开放的端口都是系统运行和维护所必须的,且描述正确。
4.4.13 对于仅支持带外管理的设备,必须保证管理面与用户名隔离,并在产品资料中描述相关隔离机制,以确保用户面使用nmap等工具进行端口扫描都无法扫描到管理平面的地址以及端口。
4.4.14 对于带内管理模式且有独立管理面IP的产品,需通过ACL或VLAN等机制来保证带内管理面的隔离,并在产品资料中需描述相关隔离机制。
4.4.15 系统的管理平面和近端维护终端(如LMT)、网关维护终端间,支持使用合适的安全协议进行通信。
4.4.16 对于不安全的协议(如FTP、TELNET),支持关闭,建议缺省关闭。产品资料中应该建议用户使用安全协议,如需使用不安全协议,应提示风险。
4.4.17 应用服务的账号不能用于交互式登录。
4.5 会话管理
4.5.1 会话标识具有随机性,不能被猜测。
4.5.2 对于每一个需要授权访问的页面和请求,必须合适用户的会话标识是否合法。
4.5.3 必须设置空闲超时机制,在超时过后必须要清楚会话信息。
4.5.4 当WEB应用跟踪到非法会话,则必须记录日志、清除会话并返回到认证界面。
4.5.5 禁止使用客户端提交的未经审核的信息来给会话信息赋值,防止会话信息被篡改,如恶意用户通过URL篡改手机号码等。
4.5.6 用户通过认证之后建立的会话,必须具备防御会话固定攻击能力。
4.5.7 增加Cookie安全性,添加“HttpOnly”和“secure”属性。
4.5.8 在服务端对业务流程进行必要的流程安全控制,保证流程衔接正确,防止关键鉴别步骤被绕过、重复、乱序。
4.5.9 具备防御CSRF攻击的能力。
4.5.10 当采用Token防御CSRF时,要求token由安全随机数生成,长度24字节以上。
4.5.11 系统必须具备logout功能,当用户logout后,session必须立即失效。
4.5.12 当采用cookie维持会话时,使用Cookie维持会话。
4.5.13 建议限制管理台访问的并发用户数量。
4.6 数据保护和加密安全
4.6.1 在系统设计时,需识别出产品敏感数据。对于敏感数据,产品应支持安全传输通道或者将数据加密后再传输的机制,有标准协议规定除外。
4.6.2 禁止以明文形式存储敏感数据。
4.6.3 带有敏感数据的WEB页面都应该禁止缓存。
4.6.4 带有敏感数据的表单必须使用POST方式提交。
4.6.5 URL参数中不得携带敏感数据。
4.6.6 密钥的用途应具有唯一性,禁止出现多个场景共用同以密钥。
4.6.7 应用程序出现异常时,禁止向客户端暴露不必要的信息,只能向客户端返回一般性的错误提示消息。
4.6.8 对敏感数据的访问要有必要的访问控制措施。
4.6.9 注释信息禁止包含敏感信息,包括:路径信息、数据库连接信息、SQL语句、源代码信息等。
4.6.10 系统只能使用公开的加密,同时应保证现有技术下这种加密算法以及密钥长度时安全的。
4.6.11 禁止使用私有的密码算法。
4.6.12 用于加密数据场景的密钥,不能再代码中硬编码,应提供密钥管理或密钥协商的机制。
4.6.13 密钥必须采用安全的密钥生成方式,并安全地进行存储。
4.6.14 加密算法的实现必须基于成熟的加密库来完成,以避免实现相关功能时引入的风险。
4.6.15 应保证TLS密码套件安全。
4.6.16 涉及个人信息采集时,必须对产品涉及用户隐私的功能进行描述和生命。
4.6.17 涉及个人信息采集、处理时,相关操作必须得到用户的授权,禁止进行超出用户授权范围的任何操作。
4.6.18 当涉及个人数据存储场景时,应未用户提供修改,删除个人信息的功能。
4.6.19 正常响应返回的数据,不得包含不必要的敏感信息。
4.7 日志审计
4.7.1 管理用户活动,操作指令的日志至少应该包含下列内容:
事件发生的时间
用户的ID(包括关联终端、端口、网络地址或通信设备)
时间类型
被访问的资源名称
事件的结果
4.7.2 所有非查询类的用户操作(含处于隐藏模式下的命令、参数、生产调测命令等)必须有日志记录。
4.7.3 严格限制对安全日志的访问。
4.7.4 管理面所有对系统产生影响的用户活动,操作指令必须记录日志。
4.7.5 对个人数据的访问行为,应有相应的日志记录。
4.7.6 应保证产品具有日志写满保护机制。
4.7.7 标准日志的最小存储期推荐为6个月,关键事件和安全日志最小存储期推荐为12个月。
4.8 输入校验
4.8.1 必须对所有用户产生的输入进行校验。
4.8.2 禁止将HTTP标题中任何未加密信息作为安全决策依据。
4.8.3 请求体中的参数、URL参数等不能依赖于客户端的校验,必须在服务端对输入进行最终校验。
4.8.4 必须有SQL注入防御机制。
4.8.5 禁止动态构建XPath语句。
4.8.6 在JavaBean中禁止使用property="*"进行参数赋值。
4.8.7 用于重定向的输入参数不能包含回车和换行字符,以防止HTTP相应拆分攻击。
4.8.8 必须有重定向攻击的防御机制,严格校验来自重定向输入的数据。
4.8.9 当上传压缩包文件时,必须有防压缩包炸弹机制。
4.8.10 文件上传过程中的临时文件,使用完毕应及时删除。
4.8.11 文件包含场景下的参数禁止外部可控。
4.8.12 必须有相应的XSS防御机制
4.8.13 使用.innerHtml时,如果只是要显示文本内容,必须在innerHtml取得内容后,去除HTML标签。
4.8.14 必须有命令执行漏洞的防御机制。
4.8.15 必须有XML注入防御机制。
4.8.16 禁止以用户提交的数据作为读/写/上传/下载的路径或文件名,以防止目录跨越和不安全直接对象的引用攻击。
4.8.17 如果输入只允许包含某些特定的字符或字符组合,则使用白名单进行输入校验。
4.8.18 限制文件上传频率(如一分钟一次),防止攻击者用工具恶意上传。
4.9 数据库安全
4.9.0.1 使用单独的操作系统账号来运行数据库。
4.9.0.2 数据库中的敏感文件需要严格控制访问权限,只能被数据库进程运行账户和管理员账户读写。
4.9.0.3 数据库如果开启了监听器功能,必须设置监听器口令且口令符合复杂度要求或者设置为本地操作系统验证,在产品资料中提示客户更新口令,并提示风险。
4.9.0.4 对于应用程序连接数据库服务器的数据库账号,在满足业务需求的前提下,必须使用低级别的数据库账号。
4.9.0.5 数据库口令禁止使用数据库厂商的缺省口令,若数据库存在多个默认账号,须将不使用的账号禁用或删除。
4.9.0.6 大文件、图片不存储在数据库中。
4.9.0.7 应将数据库数据放在非系统分区。
4.9.0.8 应默认启用加密传输,避免通过抓包分析截获数据库登录用户名、密码和传输的数据。
4.9.0.9 数据库如果开启了监听器功能,建议修改默认的监听端口并限定仅在本机监听。
4.9.1 MYSQL数据库安全
4.9.1.1 禁止非授权用户通过数据库访问本地文件。
4.9.1.2 基于最小权限原则,应对MYSQL用户进行相应的权限分配。
4.9.1.3 禁止在配置文件或者环境变量中以明文形式存储MYSQL密码,实现免密登录。
4.9.1.4 建议特权用户仅支持本地登录,降低账号被攻击的风险。
4.9.2 POSTGRESQL数据库安全
4.9.2.1 必须具有严格的客户端访问限制。
4.9.2.2 对普通用户仅设置必须使用的最小权限,回收不必要的或危险的授权。
4.9.2.3 必须具备防暴力破解机制。
4.10 LINUX操作系统安全
4.10.1 关闭不必要的文件类型的支持,系统内核默认不加载不必要的文件系统驱动。
4.10.2 系统必须具备基本的网络防御能力。
4.10.3 禁止管理员账号直接远程登录系统。
4.10.4 SSH服务必须具备防爆破功能。
4.10.5 SSH服务默认使用安全的加密算法。
4.10.6 LINUX操作系统用户密码采用SHA512加盐加密保存。
4.10.7 对于系统关键文件的权限,必须最小化配置,禁止出现所有用户可写的文件,无属主(属组)文件,合理配置日志文件读写属性。
4.10.8 系统应具备地址随机化功能,提高溢出攻击难度。
4.10.9 存储临时文件、上传文件目录、日志文件的目录设置独立分区,且分区内文件默认不可执行。
4.11 WEB中间件安全
4.11.1 NIGINX安全
4.11.1.1 禁止泄露LINUX服务器敏感信息,包括但不限于版本号信息、服务器类型、默认的调试信息等。
4.11.1.2 禁用或删除不需要的NGINX模块。
4.11.1.3 禁止NGINX服务账户拥有可用的操作系统shell。
4.11.1.4 应启动缓解DOS攻击相关功能。
4.11.2 TOMCAT安全
4.11.2.1 删除不需要的默认应用、文档以及其他不用于生产用途的目录和文件等。
4.11.2.2 禁止TOMCAT服务器敏感信息,如服务器的类型、版本号信息、TOMCAT默认的调试信息等。
4.11.2.3 具备防御目录遍历的功能。
4.11.2.4 禁用非需求之内的管理后台或控制台,如启用,应该做好安全防护。
4.11.2.5 默认禁用自动部署和启动时自动部署功能。
4.12 其他
4.12.1 必须有点击劫持防御机制。
4.12.2 版本归档时,必须删除开发过程中的临时文件、备份文件、无用目录等。
4.12.3 版本对外发布时,禁止保留调试用的代码。
4.12.4 对于JSP语言,所有servlet必须进行静态映射,不允许通过绝对路径访问。
4.12.5 禁止使用过期或停止维护的组件。
4.12.6 产品完整的系统以及所有组件,必须在发布前完成已知中高危漏洞的修复。
4.12.7 禁止安装客户不需要的功能。
4.12.8 系统应提供广泛接受的标准系统时间,并有可能与外部时间源同步,以实现系统时间到秒的精确性。
4.12.9 必须使用安全随机数的方法生成随机数。
4.12.10 产品必须禁止自动运行任何移动多媒体介质。
4.12.11 禁用不需要的不安全的HTTP方法。
4.12.12 产品应删除所有默认文档的内容,并禁止使用文件夹列表或文件夹浏览器。
4.12.13 对于版本(含补丁、固件、BOOT、操作系统等)的启动、安装、升级,必须采用密码学手段对版本进行完整性和合法性验证。
5. 某乙方安全公司渗透测试的基本覆盖面
测试大类 | 测试项 | 测试目的 |
身份验证类 | 用户注册 | 检查用户注册功能可能涉及的安全问题 |
用户登录 | 检查用户登录功能可能涉及的安全问题 | |
修改密码 | 检查用户修改密码功能可能涉及的安全问题 | |
密码重置 | 检查忘记密码、找回密码、密码重置功能可能涉及的安全问题 | |
验证码绕过 | 检测验证码机制是否合理,是否可以被绕过 | |
用户锁定功能 | 测试用户锁定功能相关的安全问题 | |
会话管理类 | Cookie重放攻击 | 检测目标系统是否仅依靠cookie来确认会话身份,从而易受到cookie回放攻击 |
会话令牌分析 | Cookie具有明显含义,或可被预测、可逆向,可被攻击者分析出cookie结构 | |
会话令牌泄露 | 测试会话令牌是否存在泄露的可能 | |
会话固定攻击 | 测试目标系统是否存在固定会话的缺陷 | |
跨站请求伪造 | 检测目标系统是否存在CSRF漏洞 | |
访问控制类 | 功能滥用 | 测试目标系统是否由于设计不当,导致合法功能非法利用 |
垂直权限提升 | 测试可能出现垂直权限提升的情况 | |
水平权限提升 | 测试可能出现水平权限提升的情况 | |
输入处理类 | SQL注入 | 检测目标系统是否存在SQL注入漏洞 |
文件上传 | 检测目标系统的文件上传功能是否存在缺陷 ,导致可以上传非预期类型和内容的文件 | |
任意文件下载 | 检测目标系统加载/下载文件功能是否可以造成任意文件下载问题 | |
XML注入 | 测试目标系统-是否存在XML注入漏洞 | |
目录穿越 | 测试目标系统是否存在目录穿越漏洞 | |
SSRF | 检测目标系统是否存在服务端跨站请求伪造漏洞 | |
本地文件包含 | 测试目标站点是否存在LFI漏洞 | |
远程文件包含 | 测试目标站点是否存在RFI漏洞 | |
远程命令/代码执行 | 测试目标系统是否存在命令/代码注入漏洞 | |
反射型跨站脚本 | 检测目标系统是否存在反射型跨站脚本漏洞 | |
存储型跨站脚本 | 检测目标系统是否存在存储型跨站脚本漏洞 | |
DOM-based跨站脚本 | 检测目标系统是否存在DOM-based跨站脚本漏洞 | |
服务端URL重定向 | 检查目标系统是否存在服务端URL重定向漏洞 | |
信息泄露类 | error code | 测试目标系统的错误处理能力,是否会输出详尽的错误信息 |
Stack Traces | 测试目标系统是否开启了Stack Traces 调试信息 | |
敏感信息 | 尽量收集目标系统的敏感信息 | |
第三方应用类 | 中间件 | 测试目标系统是否存在jboss、weblogic、tomcat等中间件 |
CMS | 测试目标系统是否存在dedecms、phpcms等CMS |
6.最后