Linux中国
1.73K subscribers
777 photos
6.34K links
Linux 中国官方 Telegram 频道
Download Telegram
基于 FUSE 的 Bittorrent 文件系统

使用 BTFS,你可以将种子文件或磁力链接挂载为目录,然后在文件树中作为只读目录。这些文件的内容将在程序读取时按需下载。Media

via https://linux.cn/article-9727-1.html
解决构建全球社区带来的挑战

全球开源社区通常面临着语音壁垒、文化差异以及其它的挑战。如何去解决它们呢?Media

via https://linux.cn/article-9728-1.html
如何在 Arch Linux 中降级软件包

有时候,你想更新到最新的版本,但你可能会被破损的包卡住。不要惊慌!在这种情况下,你可以简单地回滚到旧的稳定包。Media

via https://linux.cn/article-9730-1.html
探秘“栈”之旅(II):结语、金丝雀和缓冲区溢出

Media上一周我们讲解了 栈是如何工作的 以及在函数的序言prologue上栈帧是如何被构建的。今天,我们来看一下它的相反的过程,在函数结语epilogue中栈帧是如何被销毁的。重新回到我们的 add.c 上:
int add(int a, int b){ int result = a + b; return result;}int main(int argc){ int answer; answer = add(40, 2);}
简单的一个做加法的程序 - add.c在运行到第 4 行时,在把 a + b 值赋给 result 后,这时发生了什么:Media第一个指令是有些多余而且有点傻的,因为我们知道 eax 已经等于 result 了,但这就是关闭优化时得到的结果。leave 指令接着运行,这一小段做了两个任务:重置 esp 并将它指向到当前栈帧开始的地方,另一个是恢复在 ebp 中保存的值。这两个操作在逻辑上是独立的,因此,在图中将它们分开来说,但是,如果你使用一个调试器去跟踪,你就会发现它们都是自动发生的。在 leave 运行后,恢复了前一个栈帧。add 调用唯一留下的东西就是在栈顶部的返回地址。它包含了运行完 add 之后在 main 中必须运行的指令的地址。ret 指令用来处理它:它弹出返回地址到 eip 寄存器(LCTT 译注:32 位的指令寄存器),这个寄存器指向下一个要执行的指令。现在程序将返回到 main ,主要部分如下:Mediamain 从 add 中拷贝返回值到本地变量 answer,然后,运行它自己的结语epilogue,这一点和其它的函数是一样的。在 main 中唯一的怪异之处是,保存在 ebp 中的是 null 值,因为它是我们的代码中的第一个栈帧。最后一步执行的是,返回到 C 运行时库(libc),它将退回到操作系统中。这里为需要的人提供了一个 完整的返回顺序 的图。现在,你已经理解了栈是如何运作的,所以我们现在可以来看一下,一直以来最臭名昭著的黑客行为:利用缓冲区溢出。这是一个有漏洞的程序:
void doRead(){ char buffer[28]; gets(buffer);}int main(int argc){ doRead();}
有漏洞的程序 - buffer.c上面的代码中使用了 gets 从标准输入中去读取内容。gets 持续读取直到一个新行或者文件结束。下图是读取一个字符串之后栈的示意图:Media在这里存在的问题是,gets 并不知道缓冲区(buffer)大小:它毫无查觉地持续读取输入内容,并将读取的内容填入到缓冲区那边的栈,清除保存在 ebp 中的值、返回地址,下面的其它内容也是如此。对于利用这种行为,攻击者制作一个精密的载荷并将它“喂”给程序。在这个时候,栈应该是下图所示的样子,然后去调用 gets:Media基本的思路是提供一个恶意的汇编代码去运行,通过覆写栈上的返回地址指向到那个代码。这有点像病毒侵入一个细胞,颠覆它,然后引入一些 RNA 去达到它的目的。和病毒一样,挖掘者的载荷有许多特别的功能。它以几个 nop 指令开始,以提升成功利用的可能性。这是因为返回的地址是一个绝对的地址,需要猜测,而攻击者并不知道保存它的代码的栈的准确位置。但是,只要它们进入一个 nop,这个漏洞利用就成功了:处理器将运行 nop 指令,直到命中它希望去运行的指令。exec /bin/sh 表示运行一个 shell 的原始汇编指令(假设漏洞是在一个网络程序中,因此,这个漏洞可能提供一个访问系统的 shell)。将一个命令或用户输入以原始汇编指令的方式嵌入到一个程序中的思路是很可怕的,但是,那只是让安全研究如此有趣且“脑洞大开”的一部分而已。对于防范这个怪异的 get,给你提供一个思路,有时候,在有漏洞的程序上,让它的输入转换为小写或者大写,将迫使攻击者写的汇编指令的完整字节不属于小写或者大写的 ascii 字母的范围内。最后,攻击者重复猜测几次返回地址,这将再次提升他们的胜算。以 4 字节为界进行多次重复,它们就会更好地覆写栈上的原始返回地址。幸亏,现代操作系统有了 防止缓冲区溢出 的一系列保护措施,包括不可执行的栈和栈内金丝雀stack canary。这个 “金丝雀canary” 名字来自 煤矿中的金丝雀canary in a coal mine 中的表述(LCTT 译注:指在过去煤矿工人下井时会带一只金丝雀,因为金丝雀对煤矿中的瓦斯气体非常敏感,如果进入煤矿后,金丝雀死亡,说明瓦斯超标,矿工会立即撤出煤矿。金丝雀做为煤矿中瓦斯预警器来使用),这是对计算机科学词汇的补充,用 Steve McConnell 的话解释如下:计算机科学拥有比其它任何领域都丰富多彩的语言,在其它的领域中你进入一个无菌室,小心地将温度控制在 68°F,然后,能找到病毒、特洛伊木马、蠕虫、臭虫(bug)、炸弹(逻辑炸弹)、崩溃、爆发(口水战)、扭曲的变性者(双绞线转换头),以及致命错误吗?—— Steve McConnell 《代码大全 2》不管怎么说,这里所谓的“栈金丝雀”应该看起来是这个样子的:Media金丝雀是通过汇编来实现的。例如,由于 GCC 的 栈保护器 选项的原因使金丝雀能被用于任何可能有漏洞的函数上。函数序言加载一个魔法值到金丝雀的位置,并且在函数结语时确保这个值完好无损。如果这个值发生了变化,那就表示发生了一个缓冲区溢出(或者 bug),这时,程序通过 __stack_chk_fail 被终止运行。由于金丝雀处于栈的关键位置上,它使得栈缓冲区溢出的漏洞挖掘变得非常困难。深入栈的探秘之旅结束了。我并不想过于深入。下一周我将深入递归、尾调用以及其它相关内容。或许要用到谷歌的 V8 引擎。作为函数的序言和结语的讨论的结束,我引述了美国国家档案馆纪念雕像上的一句名言:(凡是过去 皆为序章what is past is prologue)。Mediavia:https://manybutfinite.com/post/epilogues-canaries-buffer-overflows/作者:Gustavo Duarte 译者:qhwdw 校对:wxy本文由 LCTT 原创编译,Linux中国 荣誉推出Media

via https://linux.cn/article-9731-1.html?utm_source=rss&utm_medium=rss
4 种基于 Markdown 的幻灯片生成器

这些简单的幻灯片创建工具可以无缝地使用 Markdown,可以让你的演示添加魅力。Media

via https://linux.cn/article-9733-1.html
面向 Linux 和开源爱好者的书单

看看我们现在在读什么?Media

via https://linux.cn/article-9734-1.html
在 Linux 中使用 Stratis 配置本地存储

关注于易用性,Stratis 为桌面用户提供了一套强力的高级存储功能。Media

via https://linux.cn/article-9736-1.html
如何在 RHEL 中使用订阅管理器启用软件仓库

了解如何在 RHEL 中使用订阅管理器来启用软件仓库。 这篇文章还包括了将系统注册到 Red Hat 的步骤、添加订阅和发生错误时的解决方案。Media

via https://linux.cn/article-9737-1.html
使用 ARA 分析 Ansible 运行

Ansible 运行分析工具(ARA)与 Ansible 无缝集成,可以简单便捷的找到你所需数据的方法。Media

via https://linux.cn/article-9739-1.html
Caffeinated 6.828:实验 1:PC 的引导过程

第一部分主要是为了熟悉使用 x86 汇编语言、QEMU x86 仿真器、以及 PC 的加电引导过程。第二部分查看我们的 6.828 内核的引导加载器,它位于 lab 树的 boot 目录中。第三部分深入到我们的名为 JOS 的 6.828 内核模型内部,它在 kernel 目录中。Media

via https://linux.cn/article-9740-1.html
程序员最佳网站

作为程序员,你经常会发现自己是某些网站的永久访问者。它们可以是教程、参考或论坛。因此,在这篇文章中,让我们看看给程序员的最佳网站。Media

via https://linux.cn/article-9742-1.html
Stratis 从 ZFS、Btrfs 和 LVM 学到哪些

深入了解这个强大而不繁琐的 Linux 存储管理系统。Media

via https://linux.cn/article-9743-1.html
使用机器学习来进行卡通上色

我们可以自动应用简单的配色方案,而无需手绘几百个训练数据示例吗?Media

via https://linux.cn/article-9744-1.html
大学生对开源的反思

开源工具的威力和开源运动的重要性。Media

via https://linux.cn/article-9745-1.html
尾调用、优化和 ES6

当一个函数 F 调用另一个函数作为它的结束动作时,就发生了一个尾调用。Media

via https://linux.cn/article-9746-1.html
底层 Linux 容器运行时之发展史

“容器运行时”是一个被过度使用的名词。Media

via https://linux.cn/article-9747-1.html
无密码验证:服务器

无密码验证可以让你只输入一个 email 而无需输入密码即可登入系统。这是一种比传统的电子邮件/密码验证方式登入更安全的方法。Media

via https://linux.cn/article-9748-1.html
Deepin 操作系统面临重重困境,创始人兼 CTO 已离职

作为国内做的最好的 Linux 发行版,源自 Debian sid 的 Deepin 目前正面临重重困境,新版本不断延期,开发人员离职,bug 长期得不到修复,和 Debian/Ubuntu 的兼容性问题也面临越来越严重的挑战。Media

via https://linux.cn/article-9749-1.html
Deepin 操作系统面临重重困境,创始人兼 CTO 已离职

Media作为国内做的最好的 Linux 发行版,源自 Debian sid 的 Deepin 目前正面临重重困境,新版本不断延期,开发人员离职,bug 长期得不到修复,和 Debian/Ubuntu 的兼容性问题也面临越来越严重的挑战。如今,雪上加霜的事情发生了,其创始人兼 CTO 离职,Deepin 的前途更是坎坷。最早发现端倪的是这个提交:Media随后在论坛引起各种讨论,其创始人王勇也于次日在论坛证实感谢亲爱的你们,大家继续加油8年前我来到深度,之所以想做deepin操作系统,主要有几个原因:让自己的技术能够变成大家能摸得到的产品,而不是技术高手的玩物希望能够代表中国的团队,给世界证明看,只要中国人认真做,中国团队一定可以做到世界最好的开源技术和产品看不惯国内那些喷子,希望付出行动来做真真实实的改变希望在公司成功的时候,能够给创业的兄弟姐妹们带来幸福的生活这8年里,遇到过很多困难的时刻:写代码太累下班晚上要靠输液才能继续第二天继续上班晚上陪客户喝酒,喝三场,吐了无数次,实在喝不下去了还要一口闷很长一段时间天天加班,睡在公司,老婆只能把小朋友抱到公司楼下才能逼我回家遇到人生很多惨痛的打击,不想再继续人生了,哭的痛不欲生...这8年来,每次想放弃的时候,是你们一贴一贴的鼓励,鼓励我和深度的兄弟姐们继续坚持下去。这8年来,我们做了全世界发展最快的DDE、造了30多个高质量的原创应用,给Linux带来了搜狗输入法、网易云音乐等必备应用,通过给Wine打大量补丁,让大家可以流畅的使用微信、QQ、迅雷等产品,深度应用商店也帮助大家节省了大量安装软件折腾的时间。可以说,这8年,每个日日夜夜,我们深度人都是无怨无悔的,因为不论我们个人或者公司遇到什么困难,都是你们这些亲爱的人在无条件的支持我们。你们的支持让我们每天去公司的路上都斗志盎然...天下没有不散的宴席,我今天走了,主要是我个人的原因:我希望学到更多技术知识,而不是吃8年前的技术老本我希望过简简单单的生活,创业的8年我太累太累了,想好好的休息一下,为我自己的个人健康和家人负责希望大家不要揣测我离职的原因,我只是简单的累了想休息一大段时间。请大家继续支持深度,支持仍在深度奋斗的那些值得每个中国开源人尊重的斗士们,没有他们后面默默的奋斗,深度做不出这么好的产品。深度,就像我一手带大的baby一样,不论我将来走到什么地方,我都在后面一直关心深度,我也会常常回来看大家的。最后,感谢这8年和我在深度奋斗的兄弟姐妹们,感谢论坛所有支持深度的朋友们。大家,后会有期...各位使用过 Deepin 的伙计们怎么看呢?PS., 文章题图来自访问这封公开信时,Deepin 服务器巧合出现错误的截屏,此情此景,十分感慨……Media

via https://linux.cn/article-9749-1.html?utm_source=rss&utm_medium=rss
如何装载/卸载 Linux 内核模块

找到并装载内核模块以解决外设问题。Media

via https://linux.cn/article-9750-1.html