第一章 理论篇
I. 概述
>> 译者注:本文是德国著名hacker组织"The Hacker's Choice"的96年写的一篇文章,
>> 但今天读来仍颇有收获,就象他自己说的:"即使是一个很有经验的hacker也能从这
>> 里学到一些东西".在翻译的过程中对原文做了一些改动,也加入了一些自己的理解,
>> 不当之处,还请赐教.
>>
注意 : 本文分为两部分.
第一部分讲述了一些背景和理论知识.
第二部分通过具体的实例教你一步一步了解该做什么和不该做什么.
如果你懒得看完全部文章,那就只读第二部分吧.它主要是写给那些
Unix hack新手看的.
如果你把尽快得到最新的exploits当成最重要的事的话,那我要说-你错了.
>> 译者注:exploits可以理解为"漏洞",不过我并不想这么翻,翻过来总感觉怪
>> 怪的,所以我还是保留了原文.文中还有一些地方也是如此处理,不再一一注明
一旦警察没收了你的计算机、你的所有帐户都被取消、你的一切活动都被监视
的时候,即便是最好的exploit对你又有什么用呢?
我不想听那些辩解的话.
不,最重要的事应该是不要被捕!
这是每个hacker都应该明白的第一件事.因为在很多情况下,特别是当你首次
hack一个由于饱受入侵之苦而开始对系统安全敏感的站点时,你的第一次hack
也许就将成为你最后一次hack.
所以请仔细阅读所有章节!
即使是一个很有经验的hacker也能从中学到一些东西.
下面是各节的简介:
节 I - 你现在正在读的
节 II - 思想认识
1. 动机
2. 为什么你必须要谨慎(paranoid)
3. 怎样才能谨慎
4. 保持谨慎
节 III - 在你开始hack前应当知道的基本知识
1. 前言
2. 自身安全
3. 自己的帐户
4. log文件
5. 不要留下痕迹
6. 你应当避免的事
节 IV - 你该了解的高级技巧
1. 前言
2. 阻止任何跟踪
3. 找到并处理所有的log文件
4. 检查syslog设置和log文件
5. 检查安装的安全程序
6. 检查系统管理员
7. 怎样修正checksum检查软件
8. 注意某些用户的安全陷阱(诡计?)
9. 其他
节 V - 一旦你受到怀疑你该怎么做
节 VI - 当你被捕时该做的与不该做的
节 VII - 一些用于隐藏痕迹的程序的列表
节 VIII- 最后的话,作者想说的一些废话
请仔细阅读,开动脑筋.
II. 思想认识(MENTAL)
>> 译者注:这一节的目的主要是提醒你树立正确的"hack"观 ;)
内容: 1. 动机
2. 为什么你必须要谨慎(paranoid)
3. 怎样才能谨慎
4. 保持谨慎
>> 译者注:paranoid的意思是"患偏执狂的",在这里可能是当
>> "小心谨慎"来讲吧.
* 1. 动机 *
不管做什么事,信念总是取得成功的一个关键.
它是你的动力源泉,它激发你去奋斗,自我约束,小心谨慎而又面对现实,准确的估
计风险,它也能让你去做你不喜欢做但又非常重要的事情(即使你现在就想去游泳).
如果你不激励自己去编制重要工具,等候恰当的时机去攻击目标,那你永远不
能成为真正的hacker.
一个成功而又优秀的hacker必须满足这些要求.它就象健身和节食---如果你
真正努力去做,你就能成功.
* 2. 为什么你必须要谨慎 *
当然,小心谨慎并不会让你的生活变得更幸福.
然而如果你从不做最坏的打算,任何事情都能击倒你,让你失去平衡.你正在做的
事会让你冒很大风险.而在你正常的生活中你并不需要担心警察,小偷什么的.但
如果你从另一方面考虑,你要知道你正在给别人的生活带来麻烦和恶梦--他们很
想阻止你.
尽管你不认为这是犯罪.但当警察迅速逮捕每个可能被牵扯的人时,你会发现一件
很悲惨的事:你是有罪的除非你能证明你无罪!
一旦你得到了一个hacker的"污名",你就永远不能将其去除.一旦你有了犯罪纪录,
你将很难找到一份工作.特别是没有软件公司甚至没有与计算机有关的公司会聘用
你,他们会害怕你的技术.你也许不得不移民...
一旦跌倒了,能再爬起来的只是少数人.
要小心谨慎!
要保护好你自己!
记住你得到的一切都可能失去!
绝不为做额外的反跟踪工作而感到愚蠢!
绝不为如果别人嘲笑你太谨慎而烦心!
决不要因为太懒或者厌倦而放弃修改log文件!
一名hacker必须%100的完成他的"工作"!
* 3. 怎样才能小心谨慎 *
如果你读了上面的话并且你认为那是对的,那就容易了---你已经变得小心谨慎了
但这必须要变成你生活中的一部分才行,当你总是考虑究竟是谁告诉你了那些事,
考虑你的电话和email可能已被监视的时候,那它已经变成你生活的一部分了.
如果上面这些还不能帮你,那么考虑一下如果你被捕会发生什么.
你的女友还会站在你这边吗?你想看到你父母为你流泪吗?你想丢掉饭碗
或学业吗?
不要给这一切以发生的机会!
如果这还不能警醒你:
离HACKING远点儿!!!
对整个hacker社会和你的朋友来说,你都是个危险人物!
* 4. 保持谨慎 *
我希望现在你明白为什么小心谨慎的重要性了.
所以保持谨慎.一个错误或者一次偷懒都可能彻底毁掉你的生活和事业.
在做一件事时应时刻记着你的动机是什么.
>> 译者注:这部分是让你知道你正在干什么及你的处境.如果你不想让你成为无聊
>> 记者津津乐道的话题---"某地破获重大黑客案...",那就多看看,多想想.要知
>> 道,自己是这种新闻的主角和看别人的新闻可完全不是一个感觉.
>> 所以要:谦虚谨慎,戒骄戒躁 :-)
III. 基础知识
内容 :
1. 前言
2. 自身安全
3. 自己的帐户
4. log文件
5. 不要留下痕迹
6. 你应当避免的事
* 1. 前言 *
在你开始你的初次hack之前,你应当知道这些并且进行些练习.这些都是非常基本
的,不知道这些你很快就会有麻烦了.即便是一名很有经验的hacker也能从中得到
一些新的提示.
* 2. 自身安全 *
系统管理员读了你的email吗?
你的电话被警察监听了吗?
警察没收了你存有所有hacking数据的计算机吗?
如果你不接收可疑的email,不在电话里谈论hacking/phreaking的话题,在你的硬盘
上也没有敏感和私人数据的话,那你不必担心上面那些情景.但那样你就并不是一个
hacker.每个hacker和phreaker都与其他人保持联系并把他的数据保存在某个地方.
加密所有敏感数据!!!
在线硬盘加密程序是非常重要和有用的:
在internet上游很多好的免费硬盘加密程序,它们对你的操作系统来说是完全
透明的.下面所列的几个软件都是经过测试的,是hacker's的首选工具:
- 如果你用MsDos,你可以使用SFS v1.17或者SecureDrive 1.4b
- 如果你用Amiga,你可以使用EnigmaII v1.5
- 如果你用Unix,你可以使用CFS v1.33
>> 译者注:在win9x下可以考虑emf,iprotect...
文件加密软件: 你可以使用任何一种加密软件,但它应该是使用一种众所周知的
安全加密机制.绝对不要用那些被出口的加密程序,它们的有效密钥长度被缩短了!
- Triple DES
- IDEA
- Blowfish (32 rounds)
加密你的Email!
- PGP v2.6.x 是个不错的工具.
如果你想讨论重要的事情的话,加密你的电话.
- Nautilus v1.5a 是迄今最好的
当你连到一个unix系统时加密你的终端.
一些人可能正在sniffing或者监视你的电话线:
- SSH 是最安全的
- DES-Login 也不错
>> 译者注:- SSL 基于SSL的一些软件也可以一试
用强壮的不可猜测的,不在任何字典中的密码.它应当看起来象随机的但又容易记
忆.如果密码长度可以比10个字符更长,那就用更长的.可以从书中抽取一句话,并
略作修改.请将你的hacker朋友的电话号码加密两遍.如果你不加密,你应当从公用
电话给他打电话.
>> 译者注:其实有个好记又难猜的密码并不难,例如考虑句子"I'm a haxor!"可以从中抽
>> 取几个单词组成I'mhaxor,好象没有数字,呵呵,用"eleet"的hacker语言,haxor=h4x0r
>> 所以我们的口令可以是:I'mh4x0r(我是hacker).这样的密码恐怕只能用暴力破解了.
如果你对hacking有了深入了解,你应当加密所有的东西!
为你的数据做个备份,当然要先加密,把它放在一个隐秘的地方,最好不要在家里.
所以即使你因为失误,火灾或警察搜捕等原因丢失了数据,你还可以得到备份数据.
只有当你真的需要它们时才写出来,否则将它们放在一个机密文件或加密分区里更
安全.一旦你不需要它们了,烧掉那些纸.你也可以用只有你自己知道的加密机制将
它们写下来,但不要告诉任何人,也别太经常的使用它.也许它很容易被分析和破解
真正沉稳和谨慎的hackers应该考虑实施干扰方案.警察,间谍,其他hacker能监视你
的举动.一个拥有先进设备的人可以获得他想要的任何东西:
计算机发射的电子脉冲可以从100米以外的距离被截获,可以显示你的监视器屏幕,
监听你的私人谈话,确认键盘敲击时的高频信号等等...所以各种可能性总是存在的.
成本低廉的应付方法就是采用电子脉冲干扰发射机,商店里就有卖的.如果你不想让
>> 译者注:不知道我们的商店里有没有卖的.;-)
任何人监视你,我认为这些还不够...
* 3. 你自己的帐户 *
下面让我们谈谈你自己的帐户.它就是你在学校/公司/ISP那里得到的帐户,它
总是与你的真实姓名联系在一起,所以在使用它时绝对不要违背下面的原则:
永远不要用你的真实帐户做任何非法或者惹人怀疑的事!
永远不要试图从你的真实帐户telnet到任何被hacked主机去!
当然可以用这个帐号订阅安全mailing lists.
但任何与hacking有关的东西都必须加密或者立刻销毁.
决不要在你帐号下保存hacking或security工具.
尽量用POP3连到你的mailserver下载或者删除你的邮件(如果你对unix比较熟悉,
还可以直接telnet到POP3端口执行下载或者删除命令).
决不要泄漏你的真实email给你不信任的人,只把它给你信任的人,他们也应当是比较
注意安全问题的人,否则如果他们被捕,下一个就是你了(或许他们根本就是警察,而不
是hacker.).
与其他的hacker用email交流时必须要用PGP加密,因为系统管理员经常偷看用户目录,
甚至读区别人的email!!其他的hacker也可能hack你们的站点并试图得到你的数据.
绝不要用你的帐号表明你对hacking感兴趣!
对安全感兴趣可以,但不要再进一步了.
>> 译者注:与别人交流时可以申请免费信箱,最好是国外的,比如hotmail之类,登陆时注意最好
>> 通过proxy.自己的真实信箱应当只用来进行一般的正常通信,与朋友/老师/同事...
|
驱动级的特征码修改——终级免杀之PcShare
PcShare可算国内最优秀的远程控制软件之一,其特有的驱动级隐藏技术让PS的隐蔽性有了质的提升。可再好的隐藏也必须先过安装这一关,由于杀软的特征码库中早已有PS的代码,所以在开监测的情况下,当服务端释放*.D1L和*.SYS两个文件时杀软会报警,因此没法儿安装。这时应该做什么?当然是免杀。加壳是没用的,要改特征码。改文件和内存特征码在前几期的黑防都已介绍过,照旧修改就可以。关键PS中有个驱动程序PcHide.SYS,它的特征码又应该怎么修改呢?这里就和大家交流一下含驱动的程序特征码修改,使用的杀软是最新的KV2006,PS使用的是中安网培下载的黑盟玫瑰破解完全版。(用盗版只是测试,大家多支持正版。)其它工具包括特征码修改器CCLv2.7.1、IDA pro 4.7、OllyDbg、PeInfo、IceSword及UltraEdit。
1.驱动程序PcHide.SYS的修改 上来就是重头戏,先来修改驱动的文件特征码吧。第一步是用CCL确定其特征码位置,CCL的使用过程就不再赘述了,直接用自动定位功能,检测大小为10,检测范围为text既代码段。直接看定位结果如下: 0001 000003DC 0000001F 000003FB 0002 000003FC 0000003E 0000043A 0003 00001C78 0000001F 00001C97 0004 00001C98 0000003E 00001CD6 0005 00001CD7 0000003E 00001D15 看看结果,聪明的你应该发现虽然有5处数据,但前2段和后3段分别相连,也就是说PcHide.SYS总共只有两处特征码,分别在000003DC到0000043A和00001C78到00001D15。像这样两处相连而又相隔较远的情况,一般说来两处必须都要修改。(在结果较多且较分散时,判断起来会麻烦一点,所以我给CCL加了个功能,可以很快确定至少要修改几处,修改哪几处。将在下文介绍。) 下面是IDA反汇编,看代码。先来看3DC处。看来不是汇编指令。没关系,在IDA中切换到Hex View窗口观察,原来是字符串“D:\PcShare\瘝鐗堟湰\PcHide\objfre\i386\PcHide.pdb”。中间的乱码没关系,因为我们看到了PcShare和PcHide。改字符串最简单的方法是改大小写,原则是不能干扰原文件执行。这里的字符串给出了一个pdb文件(符号文件?)的路径,虽然我不知道它的具体作用,但大小写改变应该没问题。于是,在UltraEdit中将该处的大写字母全改为小写,完后保存。 光修改这处不行,KV检测一下还会报警,也证实了前面的判断——两处都要修改――是正确的。再来看第二处1C78的代码,修改该处代码既是重点又是难点。 … .text:00011C78 xor ecx, ecx .text:00011C7A cmp byte_12280, cl .text:00011C80 jz locret_11D68 .text:00011C86 push esi .text:00011C87 cli .text:00011C88 mov eax, cr0 .text:00011C8B and eax, 0FFFEFFFFh .text:00011C90 mov cr0, eax .text:00011C93 mov edx, dword_130EC .text:00011C99 mov edx, [edx] .text:00011C9B mov esi, dword_130E0 .text:00011CA1 mov eax, ds:ZwQuerySystemInformation … 修改的难点有二,一是该段中包含跳转指令jz,二是指令的顺序没法交换。驱动程序是在内核执行的文件,所以修改时一定要注意,能不添加代码就不要添加,尽量不改变原代码的整体大小。因此,这里用了个特殊的方法。注意这一句and eax,0FFFEFFFFh。要知道eax是CPU最常用的寄存器,因此操作eax的指令通常既短小速度也快,我们看一下这句指令的十六进制编码:25 FF FF FE FF。很明显,25是指令,FFFFFEFF是参数。而and ebx,FFFFFEFF的编码是什么呢?最方便的查看指令编码的工具就是OD了,用OD任意打开一个可执行文件(OD不能直接打开驱动文件),做一下试验,得到编码为:81E3 FFFFFEFF。呵呵,多了一个字节。(看一下Intel指令参考就知道,81代表and指令,E3代表ebx及操作方式,确实eax的指令被优化了。)我们的思路,将这里的寄存器改为ebx。但多出的一字节怎么办呢,不能将所有的代码都向下平移吧!呵呵,我们要在下面的代码中将这个字节找回来。看mov edx, dword_130EC,它的编码为:8B 15 EC 30 01 00,足足6字节。把这里的edx换为eax会怎么样,同样在OD中键入mov eax,dword ptr ds:[130EC],看到了吧,它的编码为:A1 EC300100,只有5个字节,这样代码的大小就平衡了。 还有一个问题要注意,为什么可以将edx改为eax,如果eax存有其它的值怎么办,那不就改变原程序的执行结果啦。不会的,因为向下三行有这样的代码:mov eax, ds:ZwQuerySystemInformation,说明eax的值在这里被更新,因此可以判断出修改eax的值不会影响程序执行。方法已经有了,下面修改。先在OD中将如下代码键入(加黑体的是我们修改的地方。 10003817 0F20C3 mov ebx,cr0 1000381A 81E3 FFFFFEFF and ebx,FFFEFFFF 10003820 0F22C3 mov cr0,ebx 10003823 A1 EC300100 mov eax,dword ptr ds:[130EC] 10003828 8B10 mov edx,dword ptr ds:[eax] 5句代码共19个字节,与未修改时的一样。由于OD不能直接打开SYS,所以我们用UltraEdit打开PcHide.SYS,直接修改十六进制数据。修改完后保存,再用KV检测。怎么样,文件免杀成功。 下面是非常关键的一步,修改文件的校验和(CheckSum)。这一步也许是众多网友修改后的驱动无法加载的原因。用PeInfo打开sys文件,点击CheckSum,程序自动计算出结果,再点修改就可以了。那么驱动的文件特征码改完了,内存的需不需要改呢?我们来试一下:用驱动加载程序将PcHide.sys加载到内存中,用KV进行内存检测。加载工具用InstDvr(www.rootkit.com/vault/hoglund/InstDvr.zip),运行时输入sys文件全路径,先是Install安装,然后Start开始执行。若显示Operation was successful,表示操作成功。用KV检测,呵呵,检测不到,这样就避免了我们修改内存特征码的麻烦。(没试之前我还真犯愁,CCL暂不具备定位驱动文件内存特征码的功能,这下可以偷懒了,不用再写代码!) PcClient.dll、PcKey.dll与PcInit.exe的文件特征码修改。PS共包括四个关键文件,除了那个SYS处就是这三个。既然不是驱动程序,修改起来真是得心应手。过程就不多说了,只详细说一下改PcClient.dll的,其它直接给出结果,中间的注意事项会提出来。PcClient第一次定位设置:手动,生成100个文件,范围为整个文件。定位结果为: 0001 00000000 0000028E 0000028E 0002 00002B6E 00000147 00002CB5 0003 000036ED 00000147 00003834 0004 00007D2E 000002D2 00008000 注意,手动检测如果能剩余多个文件不被杀(文件头被覆盖的除外,比如0001项),说明该文件既使有多处特征码,也只需修改一处既可免杀。看结果,范围较大,我们将定位精度调高,再检测一次。将CCL设置为:手动,替换精度16字节,范围为00002B6E开始处0x147个字节(既选取了0002项),再次定位结果就一项: 0001 00002C3E 00000070 00002CAE 为什么我们将精度设为16,结果的范围却这么大,为70。这说明该特征码本身范围较大,任意改动一小处既可搞定。OK,都不用IDA出手,直接用OD打开PcClient.dll,来到10002C3E处,有如下代码: … .text:10002C41 mov edi, [esp+lpServiceName] .text:10002C45 mov esi, eax … .text:10002C81 mov edi, [esp+lpDisplayName] .text:10002C85 mov esi, eax … 好爽,最简单的方法,交换顺序既可。保存后再用KV检测,免杀again!下面是其余两个文件的修改,这时我没用手动,而用了自动定位,检测范围就是text段,给出结果先。PcKey.dll这样修改: .text:10001191 mov esi, eax .text:10001193 test esi, esi .text:10001195 jz short loc_100011F7 .text:10001197 mov ecx, 0FFh .text:1000119C xor eax, eax .text:1000119E lea edi, [esp+608h+var_400+1] 将test esi,esi换为or esi,esi既可。(晕死,改了一个字节就搞定,服了KV!)PcInit.exe共修改两处,一处是 .text:004016AE stosd .text:004016AF stosb 第二处是 .text:004017CE test eax, eax 怎么改不用我说了吧。交换顺序,test变or。再检测,成功。到这里,三个文件的文件特征码全部修改成功。这里说一下上文提到的CCL定位结果排列组合功能,比如在定位PcKey.dll时,自动定位结果为: 0001 00001180 00000070 000011F0 0002 00001790 00000020 000017B0 0003 000017C0 00000010 000017D0 0004 000017E0 00000010 000017F0 精度已经够小了,可四处结果先改哪一处好呢。这时就可以用CCL的该功能:打开PcKey.dll,导入刚才的定位结果,然后点生成。如图4所示。在output文件夹里生成了一些文件名为R_X_XXXXXX的文件。用KV对output文件夹扫描,完后删除报警的文件(这里一个也没有删除),再点击检测钮,CCL会给出如下结果:
只修改一处特征码时,仅需修改 第 1 处 或 第 2 处 或 第 3 处 或 第 4 处
同时修改两处特征码时,可以修改 第 1 处 和 第 2 处 或 第 1 处 和 第 3 处 或 第 1 处 和 第 4 处 或 第 2 处 和 第 3 处 或 第 2 处 和 第 4 处 或 第 3 处 和 第 4 处
同时修改三处特征码时,可以修改 第 1 处 、第 2 处 和 第 3 处 或 第 1 处 、第 2 处 和 第 4 处 或 第 1 处 、第 3 处 和 第 4 处 或 第 2 处 、第 3 处 和 第 4 处
这说明只需任意修改一处既可。爽吧,不用一个个去试了! 3.内存特征码的修改 过去我们已经验证了瑞星的文件和内存用了两套特征码,现在KV也具备了内存检测功能,是否也同样是两套特征码呢?我试了一下,生成服务端并用KV检测,不报警,说明文件特征码已成功修改。但双击运行一下,告知没有权限或找不到文件,一切对服务端文件的操作都给禁止了,这肯定是KV搞的鬼。原理我不太清楚了,也许是KV虚拟机执行后检测到内存特征码吧,但这说明一个问题:内存特征码也得改! 定位内存特征码时可每一回合点暂停,并用KV检测内存,根据报警文件的名称选择CCL的复选框,再点击运行,进入下一回合,直到最后CCL给出结果。至于KV提示的“是否清除”,点否既可。 过程不讲了,直接给结果。对于PcClient.dll,将10002C49处的call 10002BA0改为call 10002C67,并在10002C67处的空白添加如下代码: 10002C67 E8 34FFFFFF call PcClient.10002BA0 10002C6C C3 retn 相当于做了一个间接的CALL。 第二个PcKey.dll在改完文件特征码后直接内存免杀,检验的方法为用OD加载,并用KV检测内存,dll和exe方法一样。 就剩下PcInit.exe了,还真有点麻烦,因为会出现定位结果处怎么修改都不行的情况,下面边说边解释,并给出解决方法。PcInit.exe的内存特征码定位结果倒是很简单,就一处: 0001 00001798 00000010 000017A8 该处代码为: 00401798 je PcInit.00401A58 0040179E mov eax,dword ptr ss:[ebp-20] 004017A1 cmp eax,dword ptr ds:[esi+8] 004017A4 jnz PcInit.00401A58 修改起来很简单,将je处的跳转地址改为一个空白地址004025E0,在空白处添加一个jmp就可以了:004025E0 jmp PcInit.00401A58。可这样修改后,用OD加载仍旧报警。我在这里耽误了好一段时间,最后决定改一下入口试试。在空白处添加新的入口: 004025E5 68 3C244000 push PcInit. 004025EA 58 pop eax 004025EB FFE0 jmp eax 保存后用PeInfo将PcInit.exe的入口改为000025E5。保存修改后再用OD加载并用KV检测内存,呵呵免杀。看来杀软的特征码判断确实和入口处代码(或偏移)相关,至少对待一部分程序是这样。
4.效果检测及PcShare的卸载 由于我没有肉鸡,所以只能在自已机器上检测一下运行情况,而能否正常工作就不试了,应该没问题。先生成服务端,再打开KV的全部监视,双击运行。嘿嘿,服务端的图标一闪就没了,而KV丝毫没有察觉。打开IcsSword,在SSDT里查看PS驱动是否加载。如图5所示,列表中红色的Yxxxxxxx.sys就是PS的核心,PS的文件名总是以Y开头,后面7个字母随机。还有几行红色的KRegEx.sys是什么呢?那是KV的驱动。查看进程,多了个iexplorer.exe,关闭它马上又会重启,这是因为在一个svchost.exe的进程中有守护线程。 打开KV,此时无论你用内存检测还是文件检测都没有用了。(如果可以检测出来,当初KV是不会让PS加载的。)顺便讲一下删除的方法,先在IceSword里的File里将windows\system32\drivers\Y*.sys删除,再重启动计算机。这时另一个被释放的文件windows\system32\Y*.D1L及注册表中的数据就现身了,删除之(也可以启动到DOS下删除)。在注册表里查找Y*,删除所有项就OK了。btw:IceSword确实猛!
结语: 看来靠无休止的升级杀毒软件和打补丁是没法儿保证电脑的安全的,主要还是用户的安全意识和水平的提高。介绍这个方法不是让大家都去改马,而是探讨一种方法,也是为了杀软更好的进步。
|