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 下签名的可执行文件 的相关文章

  • 无法使用前导 ../ 在顶级目录之上退出

    我有一个 asp net 网站 我们有管理区域 其中的登录页面仅供管理员使用 并且所有网站都允许所有人使用 当我收到此错误时 我需要询问如何为其定义正确的安全配置 Cannot use a leading to exit above the
  • Linux命令列出所有可用命令和别名

    是否有一个 Linux 命令可以列出该终端会话的所有可用命令和别名 就好像您输入 a 并按下 Tab 键一样 但针对的是字母表中的每个字母 或者运行 别名 但也返回命令 为什么 我想运行以下命令并查看命令是否可用 ListAllComman
  • 在 shell 脚本中查找和替换

    是否可以使用 shell 在文件中搜索然后替换值 当我安装服务时 我希望能够在配置文件中搜索变量 然后在该值中替换 插入我自己的设置 当然 您可以使用 sed 或 awk 来完成此操作 sed 示例 sed i s Andrew James
  • 出于安全目的,您是否有理由不执行自己的算法来打乱 ID?

    我计划实现我自己的非常简单的 哈希 公式 为具有多个用户的应用程序添加一层安全性 我目前的计划如下 用户创建一个帐户 此时后端会生成一个 ID ID 通过公式运行 假设 ID 57 8926 36 7 或同样随机的东西 然后 我将新的用户
  • “grep -q”的意义是什么

    我正在阅读 grep 手册页 并遇到了 q 选项 它告诉 grep 不向标准输出写入任何内容 如果发现任何匹配 即使检测到错误 也立即以零状态退出 我不明白为什么这可能是理想或有用的行为 在一个程序中 其原因似乎是从标准输入读取 处理 写入
  • 各个平台对 SHA-2 的支持情况如何?

    我读到 SHA 1 即将从 FIPS 180 2 标准中退役 http gcn com articles 2010 03 03 rsa sha competition aspxhttp gcn com articles 2010 03 03
  • Amazon Web Services:设置 S3 策略以允许 putObject 和 getObject 但拒绝 listBucket

    我在 Amazon S3 上使用 getObject 和 putObject 请求 并在创建访问存储桶的策略时发现 如果我不允许 listBucket 则会收到 访问被拒绝 错误 这样做的问题是 listBucket 意味着用户可以列出存储
  • Symfony 5.4 Security Bundle,注册后无法登录

    我在 5 4 版本上构建空的新项目 我使用这些命令来构建项目 composer create project symfony skeleton 5 4 testapp54 cd testapp54 composer require weba
  • 无法仅在控制台中启动 androidstudio

    你好 我的问题是下一个 我下载了Android Studio如果我去 路径 android studio bin 我执行studio sh 我收到以下错误 No JDK found Please validate either STUDIO
  • Scrapy FakeUserAgentError:获取浏览器时发生错误

    我使用 Scrapy FakeUserAgent 并在我的 Linux 服务器上不断收到此错误 Traceback most recent call last File usr local lib64 python2 7 site pack
  • 如何查明 Ubuntu 上安装了哪个版本的 GTK+?

    我需要确定 Ubuntu 上安装了哪个版本的 GTK 男人似乎不帮忙 这个建议 https stackoverflow com a 126145 会告诉您安装了哪个 2 0 的次要版本 不同的主要版本将具有不同的包名称 因为它们可以在系统上
  • 警告:您的 git 版本是 1.9.3。存在严重的安全漏洞

    我在部署到 Heroku 期间收到有关 git 1 9 3 严重安全漏洞的警告 我尝试通过 homebrew 更新 git 但发现 git 最初并不是通过 homebrew 安装的 然后我通过自制程序安装了它 brew update bre
  • 如何让 clangd 转向 c++20

    当没有其他信息时 如何让 clangd 回退到 c 20 例如 在第一次构建之前 cmake 可以生成一个 这是在带有最新 LLVM 的 Arch Linux 上 这是通过 Emacs LSP 运行的 但这应该没有什么区别 你可以加 Com
  • 停止服务时单元陷入故障状态(状态=143)[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 这是我的问题 我有 CentOS 和 java 进程在上面运行 Java进程是通过启动 停止脚本来操作的 它也创建了 java 实例的 p
  • 无法安装 WWW::Curl::Easy: SZBALINT/WWW-Curl-4.17.tar.gz : make NO

    我正在尝试在我的 Fedora 26 机器上安装 WWW Curl Easy gcc c I usr include D REENTRANT D GNU SOURCE O2 g pipe Wall Werror format securit
  • Linux 中热插拔设备时检测设备是否存在

    我正在运行 SPIcode http lxr free electrons com source drivers spi spi omap2 mcspi c在熊猫板上 我想知道其中的哪个功能code http lxr free electr
  • 非加密用途的最快哈希值?

    我本质上是在准备要放入数据库的短语 它们可能格式错误 所以我想存储它们的简短散列 我将简单地比较它们是否存在 所以散列是理想的 我假设 MD5 在处理 100 000 个请求时相当慢 所以我想知道散列短语的最佳方法是什么 也许推出我自己的散
  • 在Linux中断上下文中运行用户线程

    我正在编写一些定制的应用程序 并允许更改 Linux 内核中的中断处理程序代码 我有一个用户线程正在等待中断发生 如果发生中断 那么我要做的第一件事就是执行该用户线程 有什么办法让它发挥作用吗 Thanks 创建一个字符设备 这就是内核所做
  • 为什么将 MySQL 凭据放在 www 目录之外? [复制]

    这个问题在这里已经有答案了 可能的重复 将核心类放在 Web 根目录之上 好还是坏主意 https stackoverflow com questions 3648739 putting core classes above the web
  • sleep 0 有特殊含义吗?

    我看到很多用法sleep 0在我的一个客户项目中 代码看起来像这样 while true sleep 0 end 阅读一些像这样的答案this https stackoverflow com questions 3727420 signif

随机推荐

  • {{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