Linux 下签名的可执行文件

2024-04-05

出于安全原因,最好在执行之前检查代码的完整性,避免软件被篡改由攻击者发起。所以,我的问题是

如何在Linux下对可执行代码进行签名并仅运行受信任的软件?

我读过范杜姆的作品et al., Linux 签名可执行文件的设计和实现,以及 IBM 的TLC http://domino.research.ibm.com/comm/research_projects.nsf/pages/gsal.TCG.html(可信 Linux 客户端)由 Safford 和 Zohar 编写。 TLC 使用 TPM 控制器,这很好,但该论文是 2005 年的,我无法找到当前的替代方案。

您知道其他选择吗?

UPDATE:其他操作系统呢?开放Solaris? BSD家族?


我意识到这是一个古老的问题,但我现在才发现它。

不久前,我为 Linux 内核(大约版本 2.4.3)编写了签名可执行文件支持,并准备好了用于签名可执行文件的整个工具链,在以下位置检查签名execve(2)时间,缓存签名验证信息(在打开文件进行写入或以其他方式修改时清除验证),将签名嵌入到任意 ELF 程序中等。它确实在每个程序的第一次执行时引入了一些性能损失(因为内核必须加载到entire文件,而不仅仅是按需分页所需的页面),但一旦系统处于稳定状态,它就会运行良好。

但我们决定停止追求它,因为它面临着几个太大的问题,无法证明其复杂性:

  • 我们还没有建立对签名库。签名库还需要修改ld.so装载机和dlopen(3)机制。这并非不可能,但确实使接口变得复杂:我们应该让加载程序要求内核验证签名还是应该完全在用户空间中完成计算?如何防范strace(2)d 进程如果这部分验证是在用户空间中完成的?我们会被迫禁止吗strace(2)完全依靠这样的系统吗?

    我们会做什么提供自己的加载程序的程序 http://www.catonmat.net/blog/ldd-arbitrary-code-execution/?

  • 许多程序都是用不能编译为 ELF 对象的语言编写的。我们需要提供特定于语言的的修改bash, perl, python, java, awk, sed等等,以便每个口译员能够also验证签名。由于大多数这些程序都是自由格式的纯文本,因此它们缺乏将数字签名嵌入到 ELF 目标文件中如此简单的结构。签名将存储在哪里?在脚本中?在扩展属性中?在外部签名数据库中?

  • 很多口译员都是张大关于他们允许的事情;bash(1)可以与远程系统通信完全靠自己 using echo and /dev/tcp,并且很容易被诱骗执行攻击者需要做的任何事情。无论是否签名,一旦它们受到黑客的控制,您就无法信任它们。

  • 签名可执行文件支持的主要动机来自 Rootkit 取代了系统提供的/bin/ps, /bin/ps, /bin/kill, 等等。是的,签署可执行文件还有其他有用的理由。然而,随着时间的推移,rootkit 变得更加令人印象深刻,许多人依赖于kernel黑客向管理员隐藏他们的活动。一旦内核被破解,整个游戏就结束了。由于 Rootkit 的复杂性,我们希望阻止其使用的工具在黑客社区中逐渐失宠。

  • 内核的模块加载接口是完全开放的。一旦一个进程有root特权,很容易注入内核模块而无需任何检查。我们还可以为内核模块编写另一个验证器,但围绕模块的内核基础设施非常原始。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux 下签名的可执行文件 的相关文章

  • 为什么 fopen("any_path_name",'r') 不给出 NULL 作为返回值?

    在调试一些代码时 我得到如下内容 include
  • 在设备驱动程序中传递自定义标志以“打开”

    我需要将一些自定义标志传递给open 我的设备驱动程序的调用 我在LDD3中找到了这个例子 int dev open struct inode inode struct file filp if filp gt f flags O ACCM
  • CMake 链接 glfw3 lib 错误

    我正在使用 CLion 并且正在使用 glfw3 库编写一个程序 http www glfw org docs latest http www glfw org docs latest 我安装并正确执行了库中的所有操作 我有 a 和 h 文
  • 在 Mono 上运行 .Net MVC5 应用程序

    我正在 Windows 上的 Visual Studio 2013 中开发 Net 4 5 1 MVC5 应用程序 现在我想知道 是否可以在Linux Ubuntu 12 04 上运行这个应用程序 可以使用OWIN吗 Owin 可以自托管运
  • 从 Xlib 转换为 xcb

    我目前正在将我的一个应用程序从 Xlib 移植到 libxcb 但在查找有关我有时使用的 XInput2 扩展的信息时遇到了一些麻烦 libxcb 中有 XInput2 实现吗 如果是的话 在哪里可以找到文档 目前我在使用此功能时遇到问题
  • 内核的panic()函数是否完全冻结所有其他进程?

    我想确认内核的panic 功能和其他类似kernel halt and machine halt 一旦触发 保证机器完全冻结 那么 所有的内核和用户进程都被冻结了吗 是panic 可以被调度程序中断吗 中断处理程序仍然可以执行吗 用例 如果
  • 新标签页和浏览器窗口中的 CSRF 令牌

    我通过以下方式在我的nodejs服务器上实现了CSRF攻击预防 登录时的用户会收到 CSRF 令牌和 cookie 存储在 cookie 中的基于 JWT 的令牌 CSRF 令牌将成为客户端发送的所有未来请求标头的一部分 ajaxSetup
  • 如何在 *nix 中登录时运行脚本?

    我知道我曾经知道如何做到这一点 但是 如何在 unix 中登录时运行脚本 bash 可以 From 维基百科 Bash http en wikipedia org wiki Bash 28Unix shell 29 当 Bash 启动时 它
  • 使用 gdb 调试 Linux 内核模块

    我想知道 API 在内核模块 中返回什么 从几种形式可以知道 这并不是那么简单 我们需要加载符号表来调试内核模块 所以我所做的就是 1 尝试找到内核模块的 text bss和 data段地址 2 在 gdb 中使用 add symbol f
  • 强化文件中的跨站脚本

    我在控制器中有以下代码 参数 base64String fileName 是从浏览器发送的 var fileContent Convert FromBase64String base64String return File fileCont
  • 检查已安装的软件包,如果没有找到则安装

    我需要检查已安装的软件包 如果未安装则安装它们 RHEL CentOS Fedora 示例 rpm qa grep glibc static glibc static 2 12 1 80 el6 3 5 i686 如何在 BASH 中进行检
  • 为什么同一个curl命令在windows和linux下输出不同的东西?

    为什么同样的curl o file https www link com 命令输出不同的东西 例如 如果我运行命令curl o source txt https www youtube com playlist list PLIx6Fwnp
  • Mac 应用程序商店 - 尝试让加密发挥作用。 。 。我缺少什么?

    我正在尝试使用 Alan Quartermain 的解决方案 如该问题所链接 Mac App Store 收据验证码 https stackoverflow com questions 4261348 mac app store recei
  • 复制目录内容

    我想将目录 tmp1 的内容复制到另一个目录 tmp2 tmp1 可能包含文件和其他目录 我想使用C C 复制tmp1的内容 包括模式 如果 tmp1 包含目录树 我想递归复制它们 最简单的解决方案是什么 我找到了一个解决方案来打开目录并读
  • x86-64 AMD 上 CALL 指令的操作数生成

    以下是示例程序 objdump 的输出 080483b4
  • 具有多处理功能的 Python 代码无法在 Windows 上运行

    以下简单的绝对初学者代码在 Ubuntu 14 04 Python 2 7 6 和 Cygwin Python 2 7 8 上运行 100 但在 Windows 64 位 Python 2 7 8 上挂起 我使用另一个片段观察到了同样的情况
  • 如何在shell脚本中给出密码?

    在 shell 脚本文件中 我使用一些命令 例如scp and make install要求我输入密码 我运行一个 shell 脚本来编译一个大项目 一段时间后它会要求我输入密码才能使用scp 我需要等待该过程并在此之后提供密码 我只想通过
  • 从核心转储中获取堆栈跟踪

    如何从核心转储文件中获取堆栈跟踪 该文件大约 14 mb 是在我的应用程序退出并显示 分段错误 后生成的 我使用的是红帽 5 5 gdb usr bin myapp binary corefile 然后 使用以下之一 gdb bt gdb
  • “随机数”和“GUID”有什么区别?

    这个问题here https stackoverflow com questions 1066611 what are best practices for activation registration password reset li
  • 在 C 中运行 setuid 程序的正确方法

    我有一个权限为4750的进程 我的Linux系统中存在两个用户 root 用户和 appz 用户 该进程继承以 appz 用户身份运行的进程管理器的权限 我有两个基本惯例 void do root void int status statu

随机推荐

  • {{action}} 与使用关系 id 的transitionTo 链接

    给定一个具有如下上下文的视图 id 1 form id 5 我想创建一个 action 使用链接到表格form id 我的视图代码如下所示 我的路由器中的操作如下所示 showForm function router event var f
  • UnicodeDecodeError:“ascii”编解码器无法解码字节 0xc5

    UnicodeDecodeError ascii codec can t decode byte 0xc5 in position 537 ordinal not in range 128 referer 当我尝试用字符 输出整个网站时 我
  • 我可以在 Honeycomb 的操作栏中隐藏应用程序图标吗?

    我目前正在计划对我的应用程序进行蜂窝更新 我想知道如何正确使用操作栏 我的第一个问题是是否可以从操作栏中隐藏应用程序图标和标题 Honeycomb UI 是否有任何设计指南 是的 您可以隐藏应用程序图标和标题 您还可以将应用程序图标替换为适
  • 仅在 WCF Web 服务中的某些方法需要凭据

    我有一个具有不同方法的 UserAccountService 其中一些方法需要对用户进行身份验证 例如 ChangePassword ChangeUserData 而另一些则不需要 RegisterUser 然而 我似乎无法让它工作 因此只
  • 低级鼠标钩子 - 鼠标在断点处冻结

    我想自己绘制和移动我的窗口 使用 chromium 嵌入式框架 为此 当鼠标移动到窗口之外时 我需要一个全局回调 所以我安装了一个低级别的鼠标钩子 hMouseLLHook SetWindowsHookEx WH MOUSE LL HOOK
  • 如何在PIL中减少png图像文件大小

    我已经使用 PIL 将 JPG BMP 文件转换并调整大小为 PNG 格式 我可以轻松调整大小并将其转换为 PNG 但新图像的文件大小太大 im Image open input jpg im resize im resize 400 40
  • 如何将 Mongoose 文档转换为普通对象?

    我有一个来自猫鼬的文档 我想在 JSON 编码并作为响应发送之前进行扩展 如果我尝试向文档添加属性 它将被忽略 该属性未出现在Object getOwnPropertyNames doc 无法正常延长 奇怪的是JSON parse JSON
  • 收到“线程 1:EXC_BAD_ACCESS”错误?

    我正在使用 WKWebView 和 Swift 语言创建一个简单的 Web 查看器 这是我的代码 import Cocoa import WebKit NSApplicationMain class AppDelegate NSObject
  • NSMutableDictionary 以 UIButton* 作为键 - iPhone 开发

    我是 iPhone 开发新手 我有一个问题 可能有一个非常简单的答案 我正在尝试向视图添加按钮 这些按钮与我定义的自定义类相关联 当我将按钮添加到视图中时 我想知道这些按钮对应什么类 这是因为当我按下按钮时 我需要获取有关该类的一些信息 但
  • VKDefault - 三角器未能完全三角化多边形 MapKit

    我遇到了收到警告的问题 VKDefault Triangulator failed to fully triangulate polygon MapKit放大和缩小地图上的特定区域时 我正在从 json 数据创建多边形 该数据可以包含 MK
  • Scikit-learn 的 LabelBinarizer 与 OneHotEncoder

    两者有什么区别 似乎两者都创建了新列 其数量等于特征中唯一类别的数量 然后 他们根据数据点所属的类别将 0 和 1 分配给数据点 下面显示了使用 LabelEncoder OneHotEncoder LabelBinarizer 对数组进行
  • 如何从数据库中获取可为空的 DateTime

    我的 SQL Server 数据库包含可为空的 DateTime 值 如何将它们转换为 C 应用程序中可为 null 的 DateTime 对象 这就是我认为的样子 但事实并非如此 DateTime dt DateTime sqldatar
  • Android:在异步任务期间处理后退按钮

    我有一个显示列表视图的活动 单击项目时 将启动第二个活动 该活动运行一个 AsyncTask 根据单击的项目获取远程 URL 解析结果 然后将这些结果显示到另一个列表视图中 当异步任务运行时 我有一个 正在加载 视图 仅显示图像和文本 问题
  • 如何检测浏览器是否支持flash?

    我的网站只有两个版本 一种是针对支持 Flash 的设计 如桌面设备 另一种是针对移动设备的设计 我只是想知道我是否可以检测到 如果是真的 支持 他们将保持相同的网站假设是http mywebsite com但链接会显示http myweb
  • Java 浮点意外圆角化

    我正在使用浮点常量并将对象私有浮点变量设置为下面的浮点常量 但是当对象输出它设置的值时 它会四舍五入浮点中的最后一位数字 private final float RF FREQUENCY 956 35625f Object o new Ob
  • 如何检查一个控件是否是另一个控件的子控件? “Control.IsChildOf”

    我有 3 个面板
  • 蜡染:Linux 上的 svg 到 pdf(无 X 服务器)

    类似于中的方法将 SVG 转换为 PDF https stackoverflow com questions 6875807 convert svg to pdfsvg2pdf 转换在 Windows 下成功运行 并且可以在生成的 pdf
  • 如何在 ExtJs 中添加复制到剪贴板功能?

    如何在 ExtJs 中添加复制到剪贴板功能 它在 IE 浏览器中工作正常 但在 Firefox 中不行 还需要进行哪些更改才能使其在 FF 浏览器中工作 Code function selectCopy txt txtId Ext getC
  • 为什么 Android Studio 说“未收到测试事件”?

    我正在尝试在我的 Android 应用程序中进行单元测试 这是我正在做的简单测试教程 import static org junit Assert import org junit Test import org junit runner
  • Linux 下签名的可执行文件

    出于安全原因 最好在执行之前检查代码的完整性 避免软件被篡改由攻击者发起 所以 我的问题是 如何在Linux下对可执行代码进行签名并仅运行受信任的软件 我读过范杜姆的作品et al Linux 签名可执行文件的设计和实现 以及 IBM 的T