
140
|
第
4
章
函数。比如,此输入可能是操作系统命令或
SQL
代码。如果程序员在对其操
作之前没有进行适当的输入验证,则可能会发生错误。
访问控制
访问控制的概念有一点笼统。出现该问题的一个场景是程序被赋予其函数所
需更多的权限或特权。比如,以
root
身份运行的任何程序都可能存在问题。
如果代码可以被漏洞利用,比如,验证输入不当或缓冲区溢出,攻击者就可
以通过
root
权限做任何事。
这并不严格局限于以
root
身份运行的程序。任何程序都以程序所有者的权限
运行。如果程序所有者有权访问系统中的任何资源,则利用该程序可以使得
攻击者访问上述资源。这种攻击可能导致权限升级:用户可以访问系统内正
常状态下无法访问的内容。
通过要求在应用程序内进行权限认证,至少可以在一定程度上缓解这一特定
问题。至少,这是攻击者利用程序之前需要清除的障碍,他们必须通过直接
攻击或者猜测密码来规避身份验证。有时候,最好的办法就是让访问过程变
得更繁琐。
本地漏洞
本地漏洞需要获得对系统某种程度的访问权限。本地漏洞的目标不是获得访
问权限。在利用本地漏洞之前,必须已经获得访问权限。利用本地漏洞的思
路通常是访问攻击者无法接触的内容。
本地漏洞的特点是它们可以出现在系统上的任何程序中。这包括运行在后台
而没有直接和用户打交道的服务程序,通常也称为守护程序,以及用户可以
访问的任何其他程序。用于设置用户标识符(
setuid
)的程序
passwd
就是如此,
它允许任何用户运行它并临时获得
root
权限。这是必要的,因为更改用户的
密码需要更改只有
root
用户才能写入的文件。如果我想修改密码 ...