共享库如何避免被利用?

时间:2017-03-26 17:21:08

标签: c++ c linker operating-system exploit

我正在尝试了解共享/动态库的工作原理。我认为我有一个普遍的把握,但我很难理解它们如何受到保护以免受攻击。

如果程序使用共享库,我理解它在执行时链接。因此,链接器将所有缺少的符号解析为各自的库。

当实际调用共享库的函数时,我理解执行会跳转到共享库的可执行文件中。

这是我的困惑所在。难道只能通过“猜测”来指定要跳转到的地址,以便调用库中的私有方法并可能获得升级的权限吗?

我感谢任何有助于更好地理解这一点的人。感谢

4 个答案:

答案 0 :(得分:1)

  

无法通过"猜测"来指定要跳转的地址。在   为了调用私有方法

是。但是,如果你不相信该计划,它可以做的事情要糟糕得多。简单的解决方案:不要执行你不信任的程序。

  

并可能获得升级的特权?

没有。流程使用的库没有比流程本身更多的权限。

答案 1 :(得分:1)

简而言之,是的。启动进程的程序拥有地址空间,可以随心所欲。如果您的库与另一个具有可能导致升级的特权的进程发生危险的交互,则另一个进程需要自己的防御。没有什么能阻止某人在你的库中调用私有方法或静态函数,并且任何可能做的方法都可以被规避。

答案 2 :(得分:-1)

当然这是可能的,但是像ASLR这样的机制阻碍了任何猜测方法。此外,如果您正在讨论操作系统范围内的权限提升,则存在分页,其禁止用户代码操纵和执行内核的数据和代码。

答案 3 :(得分:-1)

在太监和windoze世界中长大的人们错过了设计更好的系统。有些系统明确地管理共享库,以减少他们的利用。这样的共享库将由系统安装。实际上,相同的安装将用于具有提升权限的程序。例如,像需要访问内核数据的进程监视器这样的良性程序可以安装用户自己没有的权限。