2.4 针对进程与服务的攻防
本节结合Windows操作系统的工作特点,对一些平时容易混淆的基本概念进行介绍,同时结合其实现对安全性进行必要的分析。
2.4.1 进程、线程、程序和服务的概念
1. 基本概念
(1)进程。进程(process)是正在运行的程序的实例,是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位。例如,在计算机上打开了QQ就启动了一个进程。
(2)线程。线程(threads)是进程的一部分,有时也称为轻量级进程(Light Weight Process,LWP),是程序执行流的最小单元。例如,在QQ这个进程中,传输文字启动一个线程,传输语音启动了一个线程,弹出对话框又启动了一个线程。
(3)程序。程序(program)是一组可执行指令的集合,是指为了得到某种结果而可以由计算机等具有信息处理能力的装置执行的代码化指令序列。
(4)服务。服务(service)是执行指定系统功能的程序、例程(例程是某个系统对外提供的功能接口或服务的集合,如操作系统的API,例程的作用类似于函数)或进程。
2. 概念之间的区别
(1)进程与线程的区别。线程是比进程更小的处理模块。进程和线程都是由操作系统所包含的程序运行的基本单元,系统利用该基本单元实现应用的并发性。进程和线程的区别在于:一个程序至少有一个进程,一个进程至少有一个线程;进程是系统所有资源分配时的一个基本单位,拥有一个完整的虚拟空间地址,并不依赖线程而独立存在;系统在运行时会为每一个进程分配不同的内存区域,但不会为线程分配,线程只能共享资源。
(2)进程与程序的区别。程序是一组指令的集合,是静态的实体,没有执行的含义;而进程是一个动态的实体,有自己的生命周期。一般来讲,一个进程肯定与一个程序相对应,并且只有一个。但是,一个程序既可以有多个进程,也可能一个进程都没有。简单来讲,进程是程序的运行实体,只有程序在运行时才会产生进程。
(3)服务与进程。在Windows操作系统中,当通过网络提供服务时,服务可以在活动目录中发布。可以设置服务是否与操作系统一起启动、一起关闭。Windows中的服务支持自动、手动和禁用3种方式。服务和进程并不是一一对应的,进程是当前系统使用中调用程序,包括一些dll动态链接库文件的实体,而系统服务是系统当前使用的一些规则,服务的打开与否关系到系统能否执行某些特定的功能。
2.4.2 重要系统进程
由于进程的重要性,进程也成为网络攻防者的主要攻击目标。在网络攻防中,不仅要了解用于攻击的“矛”,也要掌握用于防范的“盾”。下面从攻防的角度来介绍几个重要的Windows进程。
1. Smss.exe
Smss.exe(Session Manager Subsystem)是Windows会话管理器,属于Windows操作系统的一部分。该进程调用会话管理子系统并负责操作系统的会话,决定着系统能否正常地运行。正常的Smss.exe进程文件存放在Windows\System32下。
如果系统中出现了多个Smss.exe进程,而且占用的CPU资源较大时,该Smss.exe可能是木马程序(如Win32.ladex.a木马),可通过手工方式清除。首先在“Windows资源管理器”中确定Smss.exe进程,然后通过“打开文件位置”找到所在的文件夹后将其删除,并消除它在注册表和WIN.ini文件中的相关项。
2. Csrss.exe
Csrss.exe所在的进程文件是csrss或csrss.exe,通常是Windows系统的正常进程。它管理Windows图形相关任务,是Windows的核心进程之一,对系统的正常运行起着关键作用。
在正常情况下,Csrss.exe位于Windows\System32文件夹中,如果系统中出现了多个Csrss.exe文件(其中一个位于Windows文件夹下),则很有可能是感染了Trojan.Gutta或W32.Netsky.AB@mm病毒。非正常的Csrss.exe是一种蠕虫病毒,它会以Csrss.exe为文件名复制自己的副本文件到Windows目录下,并添加下面的注册表键值,以便每次Windows启动时蠕虫会自动运行:HKEL_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run\SystemSARS32,with value"C:WINNTcsrss.EXE"。
手工删除Csrss.exe蠕虫时,可先结束Windows根目录下的Csrss.exe进程,删除病毒生成的.com或.exe文件,并删除注册表中病毒的启动项。
3. Services.exe
Services.exe(Windows service controller)是Windows操作系统的一部分,用于管理启动和停止服务。该进程也会处理在计算机启动和关机时运行的服务。该程序对Windows系统的正常运行起着关键作用,结束该进程后系统会重新启动。
正常的Services.exe应位于Windows\System32文件夹中,不过也可能是W32.Randex.R(储存在Windows\System32文件夹中)和Sober.P(储存在Windows\Connection Wizard\Status文件夹下)木马。该木马允许攻击者访问用户的计算机,窃取密码和个人数据。
需要说明的是,当使用计算机的时间较长时也可能导致Services.exe占用内存较大,主要原因是事件日志(Event Log)过多,而Services.exe启动时会加载事件日志,因而使得进程占用了大量内存。可在Windows的“事件查看器”中查看,并清除日志记录。
4. Svchost.exe
Svchost.exe是Windows系统中一类通用的进程名称,它是与运行动态链接库dlls的Windows系统服务相关的。在计算机启动时,Svchost.exe检查注册表中的服务并将其载入并运行。Svchost.exe程序对系统的正常运行是非常重要,而且不能被结束运行。
在“Windows任务管理器”中经常会出现多个Svchost.exe同时运行的情况,正常情况下,每一个都表示该计算机上运行的一类基本服务。例如,在Windows XP操作系统中,一般有4个以上的Svchost.exe服务进程,而从Windows 7操作系统开始则更多。
在正常情况下,不管系统中运行有多少个Svchost.exe进程,对应的程序都会位于Windows\System32文件夹中。如果在其他文件夹中发现了Svchost.exe文件,很可能是感染了病毒。
2.4.3 常见的服务与端口
在网络渗透过程中,服务是主要的攻击目标,任何一次有目的的攻击都必须事先确定具体的服务。而端口是实现攻击行为的主要途径,即攻击数据流到达服务之前需要经过的入口。一般情况下,互联网中常用的服务与端口之间存在一一对应关系。
1. 常见的服务
Windows系统提供的服务较多,表2-1列出了网络安全相关的常见服务及其功能说明。
表2-1 网络安全相关的常见服务及其功能说明
2. 常见的危险端口
端口(port)是指设备与外界进行通信的出口。端口可分为虚拟端口和物理端口。其中,虚拟端口指设备(计算机、交换机、路由器等)内部的端口,对外是不可见的,如计算机中的80端口、21端口、23端口等;物理端口又称为接口,对外是可见的,如计算机上用于以太网连接的RJ45网口、交换机或路由器上的光纤接口等。本节关注的是计算机内部的端口,即虚拟端口。
端口可以分为公认端口(熟知端口)、注册端口和动态(私有)端口3种类型。
(1)公认端口。公认端口(Well Known Ports)从0到1023,用于一对一地绑定一些常用的服务。通常这些端口的通信明确表明了某种服务的协议,如80端口明确的是HTTP通信协议。
(2)注册端口。注册端口(Registered Ports)从1024到49151,用于绑定一些服务。但与公认端口不同的是,这种绑定不是固定的。一些系统处理动态端口使用的就是注册端口。
(3)动态端口。动态端口(Dynamic and/or Private Ports)从49152到65535,由于这类端口号仅在客户进程运行时才动态选择,因此又称为客户端使用的端口号或短暂端口号。这类端口号留给客户进程选择暂时使用。当服务器进程收到客户进程的报文时,就知道了客户进程所使用的端口号,因而可以把数据发送给客户进程。通信结束后,刚才已使用过的客户端口号就不复存在了,这个端口号就可以供其他客户进程使用。
需要说明的是,从1024开始到65535都是应用程序开启的端口,木马和病毒也会启用这些端口。
常见的危险端口有21端口、80端口、135端口、139端口、445端口、3389端口、4489端口等,表2-2对Windows中常见的危险端口及其危害性进行了说明。
表2-2 Windows中具有危险性的端口及其功能说明
从防范攻击的角度出发,对于具体的Windows服务器,在确定了提供的服务后,可以将系统默认开放的其他服务和端口关闭,关闭默认的共享空链接,给磁盘设置操作权限,安全配置IIS服务,并启用相应的安全策略。