Windows安全软件的思考

引用注明>> 【作者:张佩】【原文:www.YiiYee.cn/blog

最近以来,我重新翻阅了几本Windows系统下的安全类书籍,同时上网查阅资料,很意外地发现,很多几年前流行的牛叉技术,虽然还在书本和网页上历历在目,但实际上多数已不能在新系统中使用了。我由此也发生了一些个人的思考,虽然多年不接触安全技术,但思考的能力还在。

分析安全问题的来源

总是因为存在安全隐患,才有了攻击动作的发生而因为有了大量的攻击,才继而产生了安全防护的需求。所以一定要研究安全隐患的来源。总体上分类,安全问题可以划分为本地和分布式两种,所以安全攻击的方法也可以分为本地攻击和分布式网络攻击。

先看存在于本地机器上的安全隐患,也就是在一台安装了Windows系统的PC机内部的安全隐患,把它分成下面两类:

第一类,是OS架构本身存在的结构性的设计缺陷或不周到,从而导致了被后门软件利用,并据此发动的针对本地资源的攻击。这些不周到主要体现在OS为一系列的Hook技术提供了便利。存在于Windows系统上的Hook技术,从1990年代以来就一直很热门。概言之,它包括静态修改二进制文件和执行时动态修改运行逻辑这两种方法。 继续阅读“Windows安全软件的思考”

188 total views, 1 views today

多了一个“星号”

引用注明>> 【作者:张佩】【原文:www.YiiYee.cn/blog

国庆假期我看WDK 8.1中的sample项目,遇一极有趣问题,和基本的指针使用有关,特缀文于此。请看下面是WDK8.1 msplot项目中的一段代码(经我简化过),三行而已,作一个减法运算。注释中的例值,其期望结果应是0x10,但意外得到一个溢出后的大值:

/* struct _PLOTGPC                      */
/* {                                    */
/*  //...                               */
/*  LPVOID pData;                       */ 
/* };                                   */

LPBYTE *pByte = pPlotGPC->pData; // pByte:0x0040fa30
pByte -= (ULONG_PTR)pPlotGPC;    // pPlotGPC:0x0040fa20
pPlotGPC->pData = pByte;         // 结果:0xff3d11b0

继续阅读“多了一个“星号””

286 total views, 2 views today

假货泛滥是淘宝的毒瘤

引用注明>> 【作者:张佩】【原文:www.YiiYee.cn/blog

我前段时间装修房子,好几个月都没有更新博客。但手里却已经积攒了十多个可供写作的dump文件。现在终于用空了,再次面对word文档敲击键盘时,我却并不急于去分析任何一个dump文件,而要来谈谈淘宝网。有一件发生在眼前的事情,勾起我的一些思考,使我要发挥一番。

买到假货

我前天在天猫上买了一根USB转串口线(商品link)。这是一种很简单的线材,把电脑上的USB口转成串口输出,或把外部串口转成USB输入。串口这种古老的接口,在上世纪曾广泛使用,但进入新世纪后就逐渐被USB接口代替而几乎销声匿迹。如果不是因为一些很传统的需求,现在已很少有它的用武之地。仅在一些特殊的应用领域,串口仍被某些设备所使用,比如老式的打印机、Modem以及串口调试等。现在的常用方式是把USB口转成串口并连接串口外设,这需要通过一根内含转换器的线缆来实现,也就是我买的这根线。

我在购买时特地只选了天猫店铺。这种线缆实现很容易,所以价格不贵,30元以内。我选择了一家地址显示为苏州的店铺,希望早点寄到。快递隔天即送到了,我对此很满意。包装不是密封的,我取出线缆,把USB口连接到电脑上并安装驱动,进行测试。我本以为这么一根简单而廉价的线缆,奸商们必不太愿意对它大费周章吧。但我却想错了。我晦气临头,发现自己买到了假货。 继续阅读“假货泛滥是淘宝的毒瘤”

398 total views, no views today

Win32K里的死循环

引用注明>> 【作者:张佩】【原文:www.YiiYee.cn/blog

这是我到新公司后上手的第一个issue。一线工程师找到我,说有一个urgent issue有没有兴趣看一看。当时他已经组织了一个team的人帮助他,我便成了其中一员。

问题确实很紧急,已经影响了产线的生产。当时正临清明假期,导致很多人都岌岌可危地面临清明加班的可能。其实这个问题已经报出来好几个月,但一线工程师一直以绥靖政策对待,以各种方式把问题发生率降低到客户接受的水平。绥靖政策长时间以来是有效的,但最近却突然失效,发生率飙升到了20%。一线工程师才真的着急了。

问题定性

组一个team的人debug同一个问题,在我以前是未曾经历过的。初始的想法当然是认为人多力量大。但真正实施的时候,也可能遭遇人多嘴杂的窘况。 继续阅读“Win32K里的死循环”

447 total views, 2 views today

奇妙的系统性能问题(2)

引用注明>> 【作者:张佩】【原文:www.YiiYee.cn/blog

这篇文件是对上一篇《奇妙的系统性能问题》的补充。我在经历那次性能陡降问题困扰的过程中,还碰到了一次BSOD。当蓝屏发生的时候,我甚至是兴奋的。因为在此之前,我一直都认为问题是系统或软件模块导致的。而蓝屏正好是分析的切入点。所以当分析了这个dump后,我立刻扭转了方向,判断认为:确实是磁盘坏了。

这个结论是正确的,但却不完备的。因为最后的结果是磁盘并没有坏,而是受到了外部环境的干扰。

这个dump文件弥足珍贵,因为正常情况下,这种伤硬盘的实验我们是不会主动去做的。所以这个dump文件完全得于碰巧,在此进行分析。 继续阅读“奇妙的系统性能问题(2)”

324 total views, 7 views today

奇妙的系统性能问题

引用注明>> 【作者:张佩】【原文:www.YiiYee.cn/blog

在前一家公司时,我借了一台测试板用于开发和测试。这块板子在正常运行了一段时间后,忽然遇到持续性的系统性能问题。问题来得非常突然,是某一天早晨上班的时候突然发生的。像电影里面马师爷抱怨的那样,吃着火锅还唱着歌,就突然遇到劫道的了。都太突然了。

问题的特征非常明显,就是系统性能无限下降。登录到系统登录界面,往往要十几分钟。Win 8.1的Metro UI出来,又要若干分钟时间。所以常态下看到的界面,就是Metro UI上面一个个磁贴只有边框,图标内容则完全没画出来。 继续阅读“奇妙的系统性能问题”

297 total views, 1 views today

VS2012开发驱动小Tip之:更改KMDF版本以支持XP系统

我的印象中,我最早使用的KMDF版本是1.5,那是Vista出来的时候,时间大概2006年左右。KMDF的版本变更并不是很快,总是伴随着WDK的发布而更新的,而WDK版本的更新,一般又是和OS同步的。KMDF的主版本还是1,但次版本号总是以2递增:1.5(Vista)、1.7(Vista SP1)、1.9(Win7)、1.11(Win8)、1.13(Win8.1)

早期的KMDF版本保持了良好的向后兼容性,比如用最晚KMDF 1.9编译出来的驱动程序,可安装使用于XP系统*。但从下图(MSDN)可以看出,从KMDF 1.11开始,情况变化了。KMDF 1.11取消了对Vista以前系统的支持。而KMDF 1.13更绝,编译出来的驱动只能安装在Win8.1上。 继续阅读“VS2012开发驱动小Tip之:更改KMDF版本以支持XP系统”

1,085 total views, 4 views today

虫趣:当NV显卡驱动碰上Verifier

引用注明>> 【作者:张佩】【原文:www.YiiYee.cn/blog

今天开电脑的时候,刚完成用户登陆,就遇到一个蓝屏。桌面还没有进去呢。趁着系统正处于抓取dump文件的过程中,赶紧拍了一张照,留作纪念。造成蓝屏的不是别人,乃是负责图形渲染和显示的显卡驱动:Nvidia显卡驱动。

我使用的系统:Win Blue x64。

0xc4

继续阅读“虫趣:当NV显卡驱动碰上Verifier”

487 total views, 1 views today

工具:IOCTL助手 V1.1

IOCTL

我在10年写《竹林》这本书时,写了一个分析IOCTL值的工具,一直想着可以把界面再改善一下,功能更完善一点。今天正好有一点时间,就做了这件事情。用户可以使用这个工具查看、定义IOCTL值。

下载:[download id=”7″]

继续阅读“工具:IOCTL助手 V1.1”

535 total views, 2 views today

VS2012趣事:时区和时间戳

引用注明>> 【作者:张佩】【原文:www.yiiyee.cn/blog

前几天某个早晨,大概5点钟我就醒在床上,怎么也睡不着。想到手头还有一个驱动需要debug,就立刻发现了人生目标一样地爬了起来。匆匆洗漱完毕后,打开电脑,打开VS2012驱动项目。先把代码逻辑仔细的看过一遍,有了一点小发现,改了几行代码。按下F7开始编译。

编译结束后,很惊讶地发现“输出”试图中报了一个错误,是driver package工程报错。这里要说一下相关的背景,通过VS2012的工程向导创建的驱动项目(solution)总是包含两个工程(project):一个是驱动工程,所有的源代码都在此,编译后生成驱动文件(一般是.sys文件);一个是driver package工程,无源码,它的编译过程乃针对inf文件和sys文件进行处理,产生一个可安装的驱动包(driver package)。

头一次遇到package工程失败的情况,会是什么原因呢? 继续阅读“VS2012趣事:时区和时间戳”

4,692 total views, 56 views today

WDM驱动针对Win8前后系统的兼容性问题

引用注明>> 【作者:张佩】【原文:www.yiiyee.cn/blog

最近我写了一个WDM驱动的demo工程,选择target OS是Win8,在VS2012上编译通过后,安装在Win8系统上能正常运行。换了一台Win7系统,安装驱动的过程中即遇到蓝屏。后来发现问题不在安装上,蓝屏乃发生在驱动加载的时候。

因为驱动特别简单,我先排除代码出错的可能。为了比较,我接下来又创建了一个KMDF框架的驱动demo工程,测试过程如法炮制,却没有碰到任何问题

我立刻想到的是,WDK 8.0对WDM框架可能做了兼容性方面的修改。到底怎么回事呢?一起来看看吧。

继续阅读“WDM驱动针对Win8前后系统的兼容性问题”

930 total views, 5 views today

Large Pool 错误

引用注明>> 【作者:张佩】【原文:www.yiiyee.cn/blog

我前几个月曾经分析了一个BAD_POOL_CALLER的问题(链接),今天收到的这个dump文件,系统是Win7 X64,最后发现问题和前者非常相似,但二者的分析过程却截然不同。

引子

打开dump文件后,首先进行自动分析。蓝屏号是0x4E。

************************************************************
*                                                          *
*                        Bugcheck Analysis                 *
*                                                          *
************************************************************

PFN_LIST_CORRUPT (4e)
Typically caused by drivers passing bad memory descriptor lists (ie: calling
MmUnlockPages twice with the same list, etc).  If a kernel debugger is
available get the stack trace.
Arguments:
Arg1: 000000000000009a, 
Arg2: 000000000014e26c
Arg3: 0000000000000006
Arg4: 0000000000000002
 继续阅读“Large Pool 错误”

422 total views, 21 views today

虫趣:抓一个Intel显卡驱动的臭虫

引用注明>> 【作者:张佩】【原文:www.yiiyee.cn/blog

同事给我发过来一个dump文件,说是在做S4压力测试的时候挂掉的。蓝屏号0x9F。因为前几天刚好解决了一个0x9F的蓝屏,怀疑是不是类似问题?拿过来一分析,风牛马不相及。可见同样是简称LYF,有可能是指刘亦菲,也有可能是罗玉凤。同样是0x9F的蓝屏,有可能5分钟定位错误,也有可能半天都找不到问题所在。 继续阅读“虫趣:抓一个Intel显卡驱动的臭虫”

1,210 total views, 4 views today

虫趣:FAST_MUTEX死锁

拿到一个dump文件后,经过简单分析,是设备驱动在处理电源IRP时,超时未完成导致的。这是一个典型的0x9F BSOD错误:

DRIVER_POWER_STATE_FAILURE (9f)
A driver has failed to complete a power IRP within a specific time (usually 10 minutes).
Arguments:
Arg1: 0000000000000003, A device object has been blocking an Irp for too long a time
Arg2: fffffa800182aa90, Physical Device Object of the stack
Arg3: fffff800139e9930, nt!TRIAGE_9F_POWER on Win7, otherwise the Functional Device Object of the stack
Arg4: fffffa8002437e10, The blocked IRP

继续阅读“虫趣:FAST_MUTEX死锁”

509 total views, 7 views today

几首诗

开心网是前年的事了,我曾经通过它的日记功能,发表过一些文章。此后,两三年里面,再没有上去过。今天忽然想起一件事,记得在日记里的,便又登陆上去看,庆幸用户名和密码都记得。记忆简直断片了,原来我在上面写过三十几篇日记呢。

我从上小学开始,喜欢古诗。偶尔还写一些。我写的东西,不能用好、坏论。就好比学生要学造句,我不过用文言文造句罢了。这样的造句,我持续了近二十年。家里曾有最早的一本11岁时候的结集,存了十几首。

这样的造句,最近也已不能够了。但三年前,还是可以的。开心网很少再去了,把那几首诗,记在这里(有几首和编程有关)。 继续阅读“几首诗”

119 total views, no views today