黑掉ATM的机会:编写恶意程序黑掉后台系统

20091004093614f933f《新知客》9月刊报道 要黑银行的ATM有两条路:编个恶意程序,直接骗过柜员机上那个漏洞百出的Windows系统;或者先黑银行的后台系统,盗取客户信息之后再大模大样到ATM取钱。这两条路,现在都有得走。

网络安全研究人员杰克(Barnaby Jack)在美国拉斯维加斯的黑帽安全会议(Black Hat)上原本有一个精彩的演讲,他准备演示如何入侵ATM(自动柜员机),以证明多种不同型号的ATM存在安全隐患。“我一直很喜欢《终结者2》的一个场景,约翰·康纳走到一台自动柜员机前,将Atari接入读卡器并从机器中取出大量现金。我认为已经找到了这样做的关键。”

杰克为自己的演讲取名为“自动柜员机让你发财”,但他最后并没有“美梦成真”,因为这次演讲最后被取消了。作为计算机网络公司瞻博(Juniper)的雇员,杰克被公司告知停止这次演讲,理由是ATM生产厂商对公司施压。

美国密歇根大学研究网络安全的哈德曼(J. Alex Halderman)教授在接受记者采访时对瞻博的这一行为表示理解,“ATM生产厂商可以以泄漏秘密为由将瞻博告上法庭,因为杰克善意的演讲可能会被人利用。在找到修补漏洞的办法之前,ATM不能冒这么大的风险。”美国黑客曾经入侵花旗银行的ATM网络,让花旗蒙受至少200万美元的损失,而这仅仅是ATM漏洞所致巨额损失中的九牛一毛。

ATM的“自动”机制

1967年6月27日,世界上第一台自动取款机在伦敦附近的巴克莱银行分行亮相。时至今日,据汇丰银行估计,95%的取款是通过ATM机而不是柜台出纳办理的。数亿人习惯了在墙上的“洞”里存钱、取钱。

“洞”的核心秘密在看不见的地方。

Continue Reading

中秋节

中秋简介

农历八月十五是我国的传统节日,中秋节与春节、清明节、端午节[1]并
称为中国汉族的四大传统节日。据史籍记载,古代帝王有春天祭日、秋天祭月的礼制,而祭月的节期为农历八月十五,时日恰逢三秋之半,故名“中秋节”;又因这个节日在秋季八月,故又称“秋节”、“八月节”、“八月会”、“仲秋节”;又有祈求团圆的信仰和相关节俗活动,故亦称“团圆节”、“女儿节”。因中秋节的主要活动都是围绕“月”进行的,所以又俗称“月节”、“月夕”、“追月节”、“玩月节”、“拜月节”;在唐朝,中秋节还被称为“端正月”。关于中秋节的起源,大致有三种:起源于古代对月的崇拜、月下歌舞觅偶的习俗、古代秋报拜土地神的遗俗。

中秋节从2008年起为国家法定节假日。国家非常重视非物质文化遗产的保护,2006年5月20日,该节日经国务院批准列入第一批国家级非物质文化遗产名录。

Continue Reading

驱动开发学习笔记(3-8)–Four-F的驱动开发教程-后备列表

在这里下载本文的源代码

7. 后备列表

本篇翻译:songsong <http://www.songsong.org>
源代位置:KmdKit\examples\basic\MemoryWorks\LookasideList

我回来了,对门的那个白人MM听说我是黑客(其实长得黑而已)对我特崇拜,差点要以身相许,幸亏咱意志坚定……
好了,我们开始最后一节了,你能读完并理解,你就是高手了……

Continue Reading

驱动开发学习笔记(3-7)–Four-F的驱动开发教程-系统内存堆

在这里下载本文的源代码

6. 系统内存堆

本篇翻译:songsong <http://www.songsong.org>
源码位置:KmdKit\examples\basic\MemoryWorks\SystemModules

首先是罗云彬的废话:感谢刘松一起参与这个翻译项目,这样本教程的中文翻译才能这么快和大家见面,刘松是温哥华的帅哥作家,著有《GRE Yellow Bible》(《GRE词汇黄宝书》),文风幽默,看他的翻译,使大家看枯燥的驱动教程如同看泡妞教程,于轻松间掌握繁琐的东西。原本这也是本人梦想中的写作风格,可惜本人多年努力,除了外貌长得还是一如既往的幽默外,文字中还是幽默不起来,没办法哟~~~,好了,废话少说,下面请刘松出场。
(稀稀落落的掌声)……
……
我是温哥华的松松,被罗大哥抓来翻译文章,几个MM还等着我去酒吧,只好不去了……
如果各位帅哥美女已经看完了前面的基础知识,那就跟小弟来看看”一些”必要的底层技术。
为什么”一些”要加引号(一女同学提问)?那是因为驱动程序可以做许许多多的事情啊!
如果你不懂MM,你就别混了!(一男同学问:驱动程序和泡妞还有关系?)哦,我这里的MM不是指”美眉”,是指”内存管理(Memory Management)”。
好的,我们现在就开始学习MM……
内存管理器给用户进程提供了大量的用于MM的API。这些API可以分为三类:虚拟内存函数、内存映射文件函数和堆函数。内核的成员(包括驱动程序)有很多高级的工具。例如:驱动程序能够在物理地址空间里分配一个连续的内存。这类函数呢,前缀是”Mm”。另外呢,还有一种以”Ex”为前缀的函数,用于从系统内存池里(分页和不分页的)分配和释放内存,还可以操作后备列表(lookaside lists)。
后备列表是啥东东?我们下一节会讲,它可以提供更快的内存分配,却要使用预定义的固定的块大小。

Continue Reading

驱动开发学习笔记(3-5)–Four-F的驱动开发教程-I/O子系统

在这里下载本文的源代码

4. I/O子系统

※ 和本节内容相关的源代码见KmdKit\examples\simple\VirtToPhys

4.1 I/O管理器

在用户模式下,我们可以通过访问某个地址来直接调用dll中的函数,与此不同的是,从系统的稳定性考虑,在内核模式下这样做的话是很危险的。所以,系统提供了和内核模式通讯的媒介–I/O管理器,它是I/O子系统的部件之一。I/O管理器将应用程序、系统部件和设备连接起来,并定义了一个架构来支持设备驱动程序。
图4.1是I/O管理器如何在用户模式程序和驱动程序之间进行沟通的简单图解。

图4.1 I/O子系统的简单架构

从上图可以看到,所有用户模式程序到设备(包括设备驱动程序)的调用都必须通过I/O管理器来完成。
一般来说,用户模式的操作都被转换成了对具体硬件设备的I/O操作,仅对于某些设备,设备由驱动程序来创建和控制,这些设备就是虚拟设备。当然,创建这些设备并不意味着你创造了什么硬件(不然我每天创建n个显卡再卖掉,然后换BMW,呵呵~~~~),而仅仅是在内存中创建了一个新的对象而已。每个对象和一个物理设备或者逻辑设备对应,用于描述它们的特征。
创建设备后,驱动程序告诉I/O管理器:”这里有个我控制的设备,如果你收到了操作这个设备的I/O请求的话,直接发给我好了,剩下的由我来搞定!”。驱动程序知道如何对自己管理的设备进行I/O操作,I/O管理器唯一的职责在于创建I/O请求并把它发送给适当的设备驱动程序。用户模式的代码不知道(也不必知道)其中的细节,也不用知道究竟是哪个驱动程序在管理哪个设备。

Continue Reading