安全典型问题

认证绕过

认证鉴权是所有安全机制的基础,如果认证逻辑被绕过了,系统毫无安全可言。认证是重中之重,一旦出问题了,毫无疑问是红线。
导致认证绕过主要有三种原因:

  • 设计上不合理,敏感操作存在不鉴权接口
  • 利用不鉴权接口来执行需要鉴权的接口
  • 代码逻辑存在漏洞,通过特殊报文绕过鉴权动作

防范措施

  • 开发人员对应安全高风险点输出代码处理逻辑,由安全专家和安全白盒测试进行评审,确保无漏洞。
  • 安全测试人员要深入掌握渗透技术,学会白盒分析方法,走读关键代码

命令注入

操作系统命令注入简称命令注入,是指用户输入的数据(命令)被程序拼接并传递给执行操作系统命令的函数来执行。编程语言如C/C++/Python/Rust等,都支持执行系统命令,都存在命令注入的可能。下面以C语言为例解释命令注入的成因、分类和防范措施。
C/C++有三种常用的方式来执行系统命令,分别是system(vos_system)、popen、exec家族函数(vos_system_s)

  1. 具体执行的系统命令又可以分成2类:

    • 执行解释器程序:如 system(“/bin/bash –c touch /tmp/sample”)
    • 执行非解释器程序: 如
     gchar* argv[3] = {“/tmp/src”, “/tmp/dest”, NULL};
     vos_system_s(“/bin/cp”,  argv);
    
  2. 按照注入方式又可以分成两类:

    • 在shell命令后拼接新命令来注入:如 system(“/bin/cp src dest && touch /tmp/sample”)
    • 从命令的特殊参数来注入: 如system(find . -name “*.log” -exec rm {})

防范措施

  • 尽量通过通用接口/库函数/系统调用来实现功能,而不是使用系统命令
  • 指定具体的命令程序,而不执行解释器程序,例如拷贝文件的时候,使用cp命令而不是/bin/bash –c cp命令
  • 只在需要获取命令的结果反馈时使用popen,其余场景都用vos_system_s
  • 使用popen函数时,如果存在命令拼接,先校验拼接后的命令是否有特殊字符或恶意命令
  • 外部输入作为tar、find等特殊命令的参数时,需要校验参数中是否包括-exec

软链接攻击

又称符号链接,类似windows上的“快捷方式”。由于软链接可以指向任意文件,因此创建一个与普通文件同名的软链接,可以欺骗业务程序,造成原先无法访问的文件被读取或修改,或者被修改属主或者权限,进而导致提权、任意命令执行、沙箱逃逸等。

受软链接影响的操作 原理 危害 防范措施
open / fopen 默认打开的是软链接指向的目标文件,后续读写操作均作用于目标文件 - 信息泄露(如泄露 /etc/shadow 文件)
- 任意文件写入(如篡改 /etc/passwd 文件)
- 使用 open 时设置 O_NOFOLLOW 标志位,禁止跟随软链接
- 使用 fopen 前先通过 lstat() 获取文件信息,判断是否为软链接
chmod / chown / chgrp 默认修改的是软链接所指向的文件的权限/属主/属组 - 权限提升(例如:将指向 /etc/passwd 的软链接 test.csr 的权限改为 666,导致任意用户可读写 passwd 文件) - 使用 -h 参数:仅修改软链接本身,不修改目标文件
- 使用 -P 参数:跳过软链接,不进行任何操作(等同于不跟随)
cp 若源(src)或目标(dest)为软链接,则默认会从软链接指向的路径拷贝数据或拷贝到目标路径 - 文件被意外覆盖
- 敏感信息泄露(如将系统关键文件拷贝到非预期位置)
- 使用 -P 参数:强制不跟随软链接,将软链接当作普通文件处理
1 个赞