扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
网络是个大舞台,这个舞台中不光有安全人员也有黑客份子所组成。攻击与防守自然就成了两者之间相互论辩的话题。对于一些重要的部门,一旦网络遭到攻击,如何追踪网络攻击,追查到攻击者并将其绳之以法,是十分必要的。下面的文章分本地追踪和网络追踪两部份。
本地追踪方法
追踪网络攻击就是找到事件发生的源头。它有两个方面意义:一是指发现IP地址、MAC地址或是认证的主机名;二是指确定攻击者的身份。网络攻击者在实施攻击之时或之后,必然会留下一些蛛丝马迹,如登录的纪录,文件权限的改变等虚拟证据,如何正确处理虚拟证据是追踪网络攻击的最大挑战。
在追踪网络攻击中另一需要考虑的问题是:IP地址是一个虚拟地址而不是一个物理地址,IP地址很容易被伪造,大部分网络攻击者采用IP地址欺骗技术。这样追踪到的攻击源是不正确的。使得以IP地址为基础去发现攻击者变得更加困难。因此,必须采用一些方法,识破攻击者的欺骗,找到攻击源的真正IP地址。
netstat命令----实时察看文击者
使用netstat命令可以获得所有联接被测主机的网络用户的IP地址。Windows系列、Unix系列、Linux等常用网络操作系统都可以使用“netstat”命令。
使用“netstat”命令的缺点是只能显示当前的连接,如果使用“netstat”命令时攻击者没有联接,则无法发现攻击者的踪迹。为此,可以使用Scheduler建立一个日程安排,安排系统每隔一定的时间使用一次“netstat”命令,并使用netstat>>textfile格式把每次检查时得到的数据写入一个文本文件中,以便需要追踪网络攻击时使用。
日志数据--最详细的攻击记录
系统的日志数据提供了详细的用户登录信息。在追踪网络攻击时,这些数据是最直接的、有效的证据。但是有些系统的日志数据不完善,网络攻击者也常会把自己的活动从系统日志中删除。因此,需要采取补救措施,以保证日志数据的完整性。
Unix和Linux的日志
Unix和Linux的日志文件较详细的记录了用户的各种活动,如登录的ID的用户名、用户IP地址、端口号、登录和退出时间、每个ID最近一次登录时间、登录的终端、执行的命令,用户ID的账号信息等。通过这些信息可以提供ttyname(终端号)和源地址,是追踪网络攻击的最重要的数据。
大部分网络攻击者会把自己的活动记录从日记中删去,而且UOP和基于X Windows的活动往往不被记录,给追踪者带来困难。为了解决这个问题,可以在系统中运行wrapper工具,这个工具记录用户的服务请求和所有的活动,且不易被网络攻击者发觉,可以有效的防止网络攻击者消除其活动纪录。
Windows NT和Windows 2000的日志
Windows NT和Windows 2000有系统日志、安全日志和应用程序日志等三个日志,而与安全相关的数据包含在安全日志中。安全日志记录了登录用户的相关信息。安全日志中的数据是由配置所决定的。因此,应该根据安全需要合理进行配置,以便获得保证系统安全所必需的数据。
但是,Windows NT和Windows 2000的安全日志存在重大缺陷,它不记录事件的源,不可能根据安全日志中的数据追踪攻击者的源地址。为了解决这个问题,可以安装一个第三方的能够完整记录审计数据的工具。
防火墙日志
作为网络系统中的“堡垒主机”,防火墙被网络攻击者攻陷的可能性要小得多。因此,相对而言防火墙日志数据不太容易被修改,它的日志数据提供最理想的攻击源的源地址信息。
但是,防火墙也不是不可能被攻破的,它的日志也可能被删除和修改。攻击者也可向防火墙发动拒绝服务攻击,使防火墙瘫痪或至少降低其速度使其难以对事件做出及时响应,从而破坏防火墙日志的完整性。因此,在使用防火墙日志之前,应该运行专用工具检查防火墙日志的完整性,以防得到不完整的数据,贻误追踪时机。
网络入侵追踪方法
入侵者的追踪(Intruder Tracing)在区域网路上可能你听过所谓「广播模式」的资料发送方法,此种方法不指定收信站,只要和此网路连结的所有网路设备皆为收信对象。
入侵者的追踪(Intruder Tracing)在区域网路上可能你听过所谓「广播模式」的资料发送方法,此种方法不指定收信站,只要和此网路连结的所有网路设备皆为收信对象。但是这仅仅在区域网路上能够实行,因为区域网路上的机器不多(和Internet比起来 )。如果象是Internet上有数千万的主机,本就不可能实施资料广播(至于IP Multicast算是一种限定式广播Restricted Broadcast,唯有被指定的机器会收到, Internet上其他电脑还是不会收到)。假设Internet上可以实施非限定广播,那随便一个人发出广播讯息,全世界的电脑皆受其影响,岂不世界大乱?因此,任何区域网路内的路由器或是类似网路设备都不会将自己区域网路内的广播讯息转送出去。万一在WAN Port收到广播讯息,也不会转进自己的LAN Port中。而既然网路皆有发信站与收信站,用以标示信息发送者与信息接收者,除非对方使用一些特殊的封包封装方式或是使用防火墙对外连线,那么只要有人和你的主机进行通讯(寄信或是telnet、ftp过来都算) 你就应该会知道对方的位址,如果对方用了防火墙来和你通讯,你最少也能够知道防火墙的位置。也正因为只要有人和你连线,你就能知道对方的位址,那么要不要知道对方位置只是要做不做的问题而已。如果对方是透过一台UNIX主机和你连线,则你更可以透过ident查到是谁和你连线的。在实行TCP/IP通讯协定的电脑上,通常可以用netstat指令来看到目前连线的状况。(各位朋友可以在win95、Novell以及UNIX试试看(注一),在下面的连线状况中,netstat指令是在win95上实行的,以看到目前自己机器(Local Address处)的telnetport有一台主机workstation.variox.int 由远端(Foreign Address处)连线进来并且配到1029号tcp port.而cc unix1主机也以ftpport连到workstation.variox.int去。所有的连线状况看得一清二楚。(如A、B)
A.在UNIX主机(ccunix1.variox.int)看netstat
B.另一端在Windows95(workstation.variox.int)看netstat,
当然,如果你想要把网路连线纪录给记录下来,你可以用cron table定时去跑:
netstat>>filename,但是UNIX系统早已考虑到这一个需求,因此在系统中有一个专职记录系统事件的Daemon:syslogd,应该有很多朋友都知道在UNIX系统的/var/adm下面有两个系统纪录档案:syslog与messages,一个是一般系统的纪录,一个是核心的纪录。但是这两个档案是从哪边来的,又要如何设定呢?
系统的纪录基本上都是由syslogd (System Kernel LogDaemon)来产生,而syslogd的控制是由/etc/syslog.conf来做的。syslog.conf以两个栏位来决定要记录哪些东西,以及记录到哪边去。一个最标准的syslog.conf,第一栏写「在什么情况下」以及「什么程度」。然后用TAB键跳下一栏继续写「符合条件以后要做什么」。这个syslog.conf档案的作者很诚实,告诉你只能用TAB来作各栏位之间的分隔(虽然看来好像他也不知道为什么)。第一栏包含了何种情况与程度,中间小数点分隔。另外,星号就代表了某一细项中的所有选项。详细的设定方式如下:
1.在什么情况:各种不同的情况以下面的字串来决定。
auth 关于系统安全与使用者认证方面
cron 关于系统自动排程执行(CronTable)方面
daemon 关于背景执行程式方面
kern 关于系统核心方面
lpr 关于印表机方面
mail 关于电子邮件方面
news 关于新闻讨论区方面
syslog 关于系统纪录本身方面
user 关于使用者方面
uucp 关于UNIX互拷(UUCP)方面
上面是大部份的UNIX系统都会有的情况,而有些UNIX系统可能会再分出不同的项目出来。
2.什么程度才记录:
下面是各种不同的系统状况程度,依照轻重缓急排列。
none 不要记录这一项
debug 程式或系统本身除错讯息
info 一般性资讯
notice 提醒注意性
err 发生错误
warning 警告性
crit 较严重的警告
alert 再严重一点的警告
emerg 已经非常严重了
同样地,各种UNIX系统可能会有不同的程度表示方式。有些系统是不另外区分crit与alert的差别,也有的系统会有更多种类的程度变化。在记录时,syslogd 会自动将你所设定程度以及其上的都一并记录下来。例如你要系统去记录 info等级的事件,则notice、err.warning、crit、alert、emerg等在info等级以上的也会一并被记录下来。把上面所写的1、2项以小数点组合起来就是完整的「要记录哪些东西」的写法。例如mail.info表示关于电子邮件传送系统的一般性讯息。auth.emerg就是关于系统安全方面相当严重的讯息。
lpr.none表示不要记录关于列表机的讯息(通常用在有多个纪录条件时组合使用)。另外有三种特殊的符号可供应用:
1.星号(*)
星号代表某一细项中所有项目。例如mail.*表示只要有关mail的,不管什么程度都要记录下来。而*.info会把所有程度为info的事件给记录下来。
2.等号(=)
等号表示只记录目前这一等级,其上的等级不要记录。例如刚刚的例子,平常写下info等级时,也会把位于info等级上面的notice、err.warning、crit、alert、emerg等其他等级也记录下来。但若你写=info则就只有记录info这一等级了。
3.惊叹号(!)
惊叹号表示不要记录目前这一等级以及其上的等级。
一般的syslogd都提供下列的管道以供您记录系统发生的什么事:
1.一般档案
这是最普遍的方式。你可以指定好档案路径与档案名称,但是必须以目录符号「/」开始,系统才会知道这是一个档案。例如/var/adm/maillog表示要记录到/var/adm下面一个称为maillog的档案。如果之前没有这个档案 ,系统会自动产生一个。
2.指定的终端机或其他设备
你也可以将系统纪录写到一个终端机或是设备上。若将系统纪录写到终端机,则目前正在使用该终端机的使 用者就会直接在萤幕上看到系统讯息(例如/dev/console或是/dev/tty1.你可以拿一个萤幕专门来显示系统讯息 )。若将系统纪录写到印表机,则你会有一长条印满系统纪录的纸(例如/dev/lp0)。
3.指定的使用者
你也可以在这边列出一串使用者名称,则这些使用者如果正好上线的话,就会在他的终端机上看到系统讯息( 例如root,注意写的时候在使用者名称前面不要再加上其他的字)。
4.指定的远端主机
这种写法不将系统讯息记录在连接本地机器上,而记录在其他主机上。有些情况系统碰到的是硬碟错误,或是万一有人把主机推倒,硬碟摔坏了,那你要到哪边去拿系统纪录来看呢?而网路卡只要你不把它折断,应该是比硬碟机耐摔得多了。因此,如果你觉得某些情况下可能纪录没办法存进硬碟里,你可以把系统纪录丢到其他的主机上。如果你要这样做,你可以写下主机名称,然后在主机名称前面加上「@」符号(例如 @ccunix1.variox.int,但被你指定的主机上必须要有syslogd)。
电子邮件追踪方法
在以上各种纪录方式中,都没有电子邮件这项。因为电子信件要等收件者去收信才看得到, 有些情况可能是很紧急的, 没办法等你去拿信来看(BSD的Manual Page写着「when you got mail,it’s already too late...」 :-P)。以上就是syslog各项纪录程度以及纪录方式的写法,各位读者可以依照自己的需求记录下自己所需要的内容。但是这些纪录都是一直堆上去的,除非您将档案自行删掉,否则这些档案就会越来越大。有的人可能会在syslogd.conf里写:*.*/var/log/everything,要是这样的话,当然所有的情况都被你记录下来了。但是如果真的系统出事了,你可能要从好几十MB甚至几百MB的文字中找出到底是哪边出问题,这样可能对你一点帮助都没有。因此,以下两点可以帮助你快速找到重要的纪录内容:
1.定期检查纪录
养成每周(或是更短的时间,如果你有空的话)看一次纪录档的习惯。如果有需要将旧的纪录档备份,可以cploglog.1,cploglog.2...或是cploglog.971013,cploglog.980101...等,将过期的纪录档依照流水号或是日期存起来,未来考察时也比较容易。
2.只记录有用的东西
千万不要像前面的例子一样,记录下*.*。然后放在一个档案中。这样的结果会导档案太大,要找资料时根本无法马上找出来。有人在记录网路通讯时,连谁去ping他的主机都记录。除非是系统已经遭到很大的威胁,没事就有人喜欢尝试进入你的系统,否则这种鸡毛蒜皮的小事可以不用记录。可以提升些许系统效率以及降低硬盘使用量(当然也节省你的时间)。地理位置的追踪如何查出入侵者的地理位置?光看IP地址可能看不出来,但是你常看的话,会发现也会发现规律的。在固接式的网路环境中,入侵者一定和网路提供单位有着密切的关系。因为假设是区域网路,那么距离绝对不出几公里。就算是拨接好了,也很少人会花大笔钱去拨外县市甚至国外的拨接伺服器。因此,只要查出线的单位,入侵者必然离连线单位不远。
拨接式的网路就比较令人头疼了。有许多ISP为了吸引客户,弄了很多什么网络卡。User这边只要买了固定的小时数,不需须另外向ISP那边提出申请,就可以按照卡片上的说明自行拨接上网。这样当然可以吸引客户,但是ISP就根本无从得知是谁在用他们的网路。也就是说,虽然以网络卡提供拨接服务给拨接使用者带来相当大的便利,但却是系统安全的大敌,网路管理员的恶梦。如果入侵你的人是使用网络卡来上网,那……,要从拨号的地点查吗?入侵者可以不要用自己家里的电话上网。
编者按:
对于老牌黑客,追踪会相当困难,因为在网络中技术决定胜败,老牌黑客有着优良的技术与长期的逃跑经验。而对于网络新手来说,有时日志与常用手法并不一定管用,但本文的观点会让读者了解追踪黑客的基本套路,对今后的工作和网络生活能带来帮助。
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。