看板Programming
标 题Re: [转录]Re: [讨论] Gmail收外部信…怎麽放心把密码交出
发信站中央大学松涛风情资讯站 (Fri Mar 9 22:05:38 2007)
转信站ptt!ctu-reader!ctu-gate!news.nctu!news.ncu!news.csie.ncu!Evergreen
> ==>发信人: [email protected] (想和你去把把风), 信区: programming
> 作者: davidyu (davidyu) 看板: Google
> 果你对 compiler 的知识还算熟悉的话,应该知道 C 的 compiler 是可以用 C 来写的
> 这是一个鸡生蛋,蛋生鸡的问题,不过我们的确是用 C 来写 C compiler。
> Thompson 的 compiler 之所以特别,是他在其中偷偷藏了一个 bug。UNIX 有一个程式
> 叫 login,它是负责核对使用者帐号和密码的程式。Thompson 的 compiler 如果发现它
> 在 compile 一个 UNIX 的 login 程式时,它会在比对密码的时候,偷偷加入一笔万用
> 密码。如此一来,用这个 compiler 产生出来的 UNIX,都会有这个「漏洞」在。你会说
> 这个只要检查 compiler 的程式码就可以发现了。没错,所以 Thompson 的 compiler
> 还有一个神奇的功能。这个 compiler 如果发现它在 compile 一个 compiler 的时候,
> 它会把它本身的这个「神奇功能」放到 compiler 里头,所以用这个 compiler compile
> 出来的 compiler (我知道这有点难懂 XD)也都会带有这个神奇功能。之後,他再用
> compiler 把本身自己 compile 一次後,就可以把神奇功能从程式码里面隐藏起来,只有
> 从 binary 才看的出端倪。
> 这会造成一个问题,就是你即使有原始码,你也没办法确保你的程式是可以信任的。你
> 要能够确定你的程式是可靠的,唯一的办法就是全部从头来。如果你把这个问题过度延
> 深,你就会发现你可能要从 CPU 的电晶体开始设计,才有办法「保证」你的程式是完
> 全符合你的意思在执行。
> 所以,信任,不是见简单的事。
======
程式语言的 compiler/interprter 有时候被称为 Language Virtual Machine,
表示她能让下层的硬体结合此语言的编译/解译功能之後, 让使用者觉得是在使用一
台 High Level Language Machine.
如同 Thompson 所举的例子, 当这个 VM 的功能要扩充时, 通常就是"多"认识
一个叙述指令或 keyword 而且能做出对应的工作, 但比起旧的 HLVM 的能力, 这
是多出来的, 所以旧的 HLVM 不认得这新增的指述. 如何让这新增的指述与旧的一
并结合还能让旧的 HLVM 能监识运作也能编译解译出新的指述, 就需看如何让原本
不认识的指述在旧的 HLVM 如何被识别出来, 然後又能使之跑到一个新定的对应动
作那里去处理.
Thompson 举的例子是需额外做动作处理的 Escape character, 假设新指令就
是 \VT , 但用 11 蒙过 copiler , 使之跳到某绝对地址(11)去执行, 在那个绝对
地址就偷偷的塞进一段 patch 或 後门. 这个特异功能的後门结合旧的 HLVM 功能
就能合成一个新的有特异功能的 HLVM .
C compiler 结合硬体形成的这个 HLVM 可以认得 C 语言程式做对应动作, 所
以用 C 写出来的 C-compiler program 就可以请这个 C HLVM 去做对应动作做出
要求的功能来.
只是, 若用这个含额外特异功能的 C HLVM 照样也能造出原有的 C-compiler ,
这个特例是这个特异功能的新 C HLVM 还加了一个功能, 可进一步地也把新增的特
异功能也挂进这个旧的 C-compiler 里, 这就使得旧的 C-compiler 也被加注了此
项特异功能.
加挂的时候让使用者不知不觉就是病毒或後门的做法, 若大张旗鼓让使用者同意
新增功能就是 download update 行为.
AMD 对其新的 processor 的架构与 micro-code 改进了 Virtual Machine 的功
能, 可以设定那种情况要 escape/trap 再由下层看不见的 VM monitor (这就是
Thompson 说的加挂的, 隐藏的特异功能)来做解译动作. 有人也同样的认为如果这
个 VM mornitor 就是个後门, 那还真的比那个有 source program 的 C compiler
还不容易察觉.
在旧有的功能机器上加挂特异功能形成新的功能机器, 其原则一直都没变, 就
是先蒙混加挂或插入, 再对特定讯息能拦截转向到特异功能模组, 随後就是能衔
接或持续复制扩散. 这个模式就是生物基因与病毒的行径.
这是概念也是一种技术, 做硬体的是习而不察, 做界面硬体与 driver 的, 或
是对现有程式加挂额外功能的, 则是老招 "加挂-拦截-转向".
至於特异功能是後门还是会偷密码, 信用卡号, 还是一个很好用的新增功能,
那就完全是 "存乎一心的 trust 与 credit ".
--
◎ Origin: 中央松涛站□bbs.csie.ncu.edu.tw From: 140.115.6.234