内核的哪些部分实际上是通过模块接口公开的,程序员可以访问哪些功能,可以用于恶作剧目的?
解决方法@H_404_6@
道格拉斯所说的完全正确,Linux是
monolithic,模块可以做任何事情.这是一个主要由Linus Thorvalds驱动的设计选择,并且符合开源理念(为什么限制,它需要性能,你可以从源头看到模块做什么 – 实际上只说真正的书呆子:-) – ).
现在也许你必须从第三方加载一些所谓的二进制模块.即使它们似乎被编译,通常也会有一个共同的目标文件作为黑盒子,并且实际上只编译它周围的接口(就像我使用的nvidia图形驱动程序一样).没有明确的答案,如果您加载这些模块,您必须信任供应商,如果没有,不要这样做…
只有root才能加载理论上正确的模块.但实际上,没有一个系统是完美的(甚至是Linux).有时会出现内核漏洞,使本地用户或远程用户(非常罕见的情况)可以将代码引入内核,以便他们可以拥有root权限,从而可以控制您的系统.拥有最新的内核是件好事……
在对此进行精确化之后,让我们进入到目前为止尚未回答的问题的第二部分:“程序员可以访问哪些功能,可以用于恶作剧目的?”.为SE-Linux做的许多事情也可用于恶意目的,例如:
>隐藏/ proc或/ sys目录中的信息,例如隐藏恶意用户进程,以便它们不会显示在top,ps等工具中.这包括隐藏恶意模块本身,因此它未在lsmod中列出.
>记录和记录击键…
>向外界发送数据.没有内核模块需要连接到站点并发送信息(原始linux代码中的网络堆栈除外),如果模块的代码确实有异味.如果某些字符串被加密和解密以进行某些操作,那就更难闻了……
> ……
列表很大,如果你想了解更多细节,你可以看看Rootkit Hunter(http://www.rootkit.nl/projects/rootkit_hunter.html).这是我不时运行的工具.它可以检测到一些广泛使用的rootkits的存在.它管理一个rootkit列表和谷歌搜索名称将使你清楚这些野兽正在遵循什么样的目标…像道格拉斯所说,可以使用的功能实际上是所有的内核中可用的函数,没有限制.因此,告诉模块是否是一个坏人并不是一件明显的事情.
现在也许你必须从第三方加载一些所谓的二进制模块.即使它们似乎被编译,通常也会有一个共同的目标文件作为黑盒子,并且实际上只编译它周围的接口(就像我使用的nvidia图形驱动程序一样).没有明确的答案,如果您加载这些模块,您必须信任供应商,如果没有,不要这样做…
只有root才能加载理论上正确的模块.但实际上,没有一个系统是完美的(甚至是Linux).有时会出现内核漏洞,使本地用户或远程用户(非常罕见的情况)可以将代码引入内核,以便他们可以拥有root权限,从而可以控制您的系统.拥有最新的内核是件好事……
在对此进行精确化之后,让我们进入到目前为止尚未回答的问题的第二部分:“程序员可以访问哪些功能,可以用于恶作剧目的?”.为SE-Linux做的许多事情也可用于恶意目的,例如:
>隐藏/ proc或/ sys目录中的信息,例如隐藏恶意用户进程,以便它们不会显示在top,ps等工具中.这包括隐藏恶意模块本身,因此它未在lsmod中列出.
>记录和记录击键…
>向外界发送数据.没有内核模块需要连接到站点并发送信息(原始linux代码中的网络堆栈除外),如果模块的代码确实有异味.如果某些字符串被加密和解密以进行某些操作,那就更难闻了……
> ……
列表很大,如果你想了解更多细节,你可以看看Rootkit Hunter(http://www.rootkit.nl/projects/rootkit_hunter.html).这是我不时运行的工具.它可以检测到一些广泛使用的rootkits的存在.它管理一个rootkit列表和谷歌搜索名称将使你清楚这些野兽正在遵循什么样的目标…像道格拉斯所说,可以使用的功能实际上是所有的内核中可用的函数,没有限制.因此,告诉模块是否是一个坏人并不是一件明显的事情.