重磅消息:OpenBSD 将会在每次重启后都使用和之前不同的内核
来源:互联网 发布:淘宝网男手提包 编辑:程序博客网 时间:2024/05/22 00:11
KARL 由 Theo de Raadt 开发。KARL 会在安装、升级和重启时生成一个新的内核二进制文件。当用户启动、升级和重启机器时,最新生成的内核会替换已有的内核二进制,而操作系统会生成一个新的内核,其将用于下次启动、升级和重启,周而复始。
不要将 KARL 和 ASLR(地址空间布局随机化)相混淆,ASLR 是一种用于随机化应用代码执行的内存地址的技术,以防止知道应用或内核运行的特定区域而被针对性利用。
de Raadt 说,“它仍然装载在 KVA(内核虚拟地址空间)中的同样位置,这不是内核的 ASLR!”
相反,KARL 以随机的内部结构生成内核二进制,这样漏洞利用程序就不能泄露或攻击内核内部函数、指针或对象。技术性的解释参见下面内容。
一个独特的内核是这样链接的,启动汇编代码仍放在原处,接着是随机大小的空隙,然后是随机重组的其它 .o 文件。这样的结果就是函数和变量之间的距离是全新的。一个指针的信息泄露将不会暴露其它指针或对象。这或许会减少可变体系架构的组件,因为指令流的多态性被嵌套偏移的改变所破坏。
“因此,每次的新内核都是独特的。”de Raadt 说。
该功能的开发始于五月份,首次讨论出现于六月中旬的 OpenBSD 技术邮件列表中。KARL 最近出现于OpenBSD 6.1 的快照版本中。
“当今的情况是许多人从 OpenBSD 安装内核二进制,然后这个相同的内核二进制将运行六个月以上。当然,如果你重复地引导这个相同的内核二进制,其内存布局也是一样的。这就是现在我们所提交的代码解决的问题。”de Raadt 说,“然而, -current 快照包含了一些我正在和 Robert Peichaer 开发的将来的变化。那个变化将可以使你每次重启都启动到一个新链接的内核上。”
一个销售针对隐私的硬件产品的初创企业 Technoethical 的创始人 Tiberiu C. Turbureanu 对 Bleeping Computer 说,这是一个 OpenBSD 独有的功能。
“在 Linux 中没有实现它,”Turbureanu 说,“看起来很棒的想法”,估计有可能该功能会移植到 Linux 内核中。
不过,Linux 刚刚增加了对 KASLR(内核地址空间布局随机化)的支持,该功能是将 KSLR 移植到了内核本身,它会将内核加载到随机的内存地址。
该功能在上周发布的 Linux 4.12 中默认启用。这两者的不同是 KARL 是装载不同的内核到同一个位置,而 KASLR 则是装载相同的二进制到随机的位置。目标相同,做法不同。
在 Windows 中没有支持 KARL,但是微软使用 KASLR 已经很多年了。反病毒创客公司 Emsisoft 的 CTO Fabian Wosar 正在全力将 KARL 增加到 Windows 内核中。
“OpenBSD 的这个思路需要进一步发扬到(当前的 Windows 内核防护中),这样大家都可以有一个独特内核二进制了,”Wosar 在和 Bleeping Computer 的私人谈话中说到。
“即便是你知道了(随机的)内核起始点,你也不能用它来找到要定位的特定函数,函数相对于内核起始点的位置是随系统不同而不同的,”Wosar 补充说。
其它的操作系统平台,如 Windows 和 Linux ,如果拥有 KARL 将极大的改善其用户的安全性。
本文转载自:http://www.linuxprobe.com/openbsd-changge.html
免费提供最新Linux技术教程书籍,为开源技术爱好者努力做得更多更好,开源站点:http://www.linuxprobe.com/
- 重磅消息:OpenBSD 将会在每次重启后都使用和之前不同的内核
- OpenBSD内核编译和优化
- 王艾辉:重磅消息出来之前切勿操之过急(白银价格)
- HTML5中使用不同type的属性将会呈现不同的键盘样式
- Listview如何在每次加载前先清除之前的列表信息
- MySQL将会像BSD、Linux那样弄出不同的分支和发行版?
- Excel2007之前的和Excel2003连接字符串的不同
- ROS中节点在每次接收到消息之后都发布一条消息的反馈topic
- 对象在使用之前的初始化
- 父子窗口分属不同消息循环在WinXP和WinCE的差异
- IDEA每次部署都把部署文件放在哪了?之前的tomcat下的work目录也找不到?
- TCP和UDP在网络层实现的不同--基于linux内核
- AES加密算法在linux下相同输入每次加密结果都不同的问题
- websphere 和 weblogic 在iframe使用上的一点不同
- JavaScript在firefox和ie中使用的几个不同
- SRAM和EEPROM在使用上的不同
- 关于Service在不同的应用中的通信和使用
- OpenBSD Tips: 使用ports
- echarts x轴文字高度
- c++实现哈夫曼树编码
- Java学习中关于容器
- idea创建第一个hibernate遇到的问题
- 数据类型转换与自定义函数
- 重磅消息:OpenBSD 将会在每次重启后都使用和之前不同的内核
- LUA 基础语法相关
- URAL1004 Sightseeing Trip(floyd+路径输出)
- iOS安全系列之 HTTPS
- [Python]任一个英文的纯文本文件,统计其中的单词出现的个数。(考虑单词-分行)
- python3精简笔记(二)——函数
- java内存模型总结
- 2015多校第九场 HDU 5402 Travelling Salesman Problem 棋盘染色法,构造
- easyUI的课程表练习