APP下载

简析内网渗透过程及防御措施

2021-04-09李双远

吉林化工学院学报 2021年3期
关键词:后门攻击者命令

徐 过,李双远

(1.吉林化工学院 信息中心,吉林 吉林 132022;2.吉林化工学院 信息与控制工程学院,吉林 吉林 132022)

随着局域网(Local Area Network,LAN)的应用与普及,越来越多的企业都已建设自己的内部网络(局域网),内部网络是企业内部设备之间数据传输的重要通道.企业局域网的建设,不仅提高了员工的工作效率,还在一定程度上提高了企业数据的安全性.但是,大多数企业只注重对企业外部网络威胁的防御,忽略了来自企业内部的入侵防御.攻击者就会利用企业内网环境的这一弱点,先通过一些方法取得企业内部某台设备的控制权,再控制内部设备对公司内部网络进行全面渗透.影响企业网络安全的因素有很多,就员工层面来讲,员工浏览不良网站或点击钓鱼链接等行为造成电脑感染病毒,都将会使企业内网中的主机成为攻击者攻击企业内部网络的工具.而就企业网络管理者来讲,如果管理者的安全防范意识不够强,泄露了企业服务器或企业内部主机的登录密码等私密信息,这些都将给企业网络安全带来很大的安全隐患.企业内部的一台设备沦陷,就可能会造成企业的整个系统崩溃,最后给企业带来无以估量的损失.由此可见,企业内网的安全管理是多么的重要.企业不仅需要重视外部网络的防御,也更应注重企业内部网络的安全防御.本文主要论述在攻击者获取内网中某台主机控制权的基础上,攻击者通过控制该内部主机在企业内网中进行渗透的过程及相关防御措施.

1 内网信息收集

在内网渗透过程中,信息收集尤为重要.攻击者可以通过信息收集获取内部网络的更多信息,比如系统的防火墙防护情况或主机端口开放情况等等.掌握系统的信息后,可以对系统服务进行针对式入侵.信息收集的工作量非常大,整个渗透过程中,信息收集所花费的时间和精力是最多的.信息收集这一过程,其实就是为接下来的渗透工作做准备,收集到的信息越多,渗透就会越容易,越轻松.

1.1 本机信息收集

本机信息收集的内容主要包括查询本机所在内网中的位置和角色、内网中存活主机发现、主机系统识别、开放端口探测以及防火墙配置情况等等.

1.1.1 查询本机系统信息

了解本机系统信息和补丁安装情况极其重要,通过了解一台主机系统的基本信息,可以大概猜测出内网中其他主机的系统信息和补丁情况,如果主机系统存在漏洞,而他刚好又没及时安装相应补丁,那么就可以利用该漏洞进行渗透.如果主机是Windows系统,那么在命令窗口输入“systeminfo”命令就可以查询系统的配置信息,包括系统型号、系统版本以及补丁情况等.

1.1.2 查询当前用户角色

系统对用户的权限进行了严格的划分,权限越高,能进行的操作就越多.Windows系统中,权限最高的是TrustedInstaller,权限最低的是Guest用户,Administrator是系统管理员,User为普通用户.而Linux系统中权限最高的是Root(超级管理员用户).

在命令窗口输入“whoami”就可以查询当前用户所拥有的权限.

1.1.3 查询本机信息

查询本机服务信息:

wmic service list brief

查看防火墙配置:

Netsh firewall show config

查询当前登录域:

net config workstation

快速定位域控ip:

net time /domain

查看域控制器:

net group“domaincontrollers” /domain

1.2 存活主机探测及端口扫描

内网存活主机探测的目的是找到内网中其他存活主机的地址,一般一个IP对应一台主机.端口扫描是渗透前的基本准备工作,攻击者的攻击利用对象基本都是目标主机开放的服务.

1.2.1 存活主机探测

探测内网存活主机的方法很多,可以使用脚本来实现存活主机的探测,还可以通过一些工具来探测内网存活主机,常用的工具有Nmap、Nbtscan、Superscan、Arp-scan等.比如执行下列命令,就可使用nmap工具探测192.168.0网段中的主机:

Nmap-sN 192.168.0.0/24

除了用工具发现存活主机以外,还可以通过查看DNS、ARP表、hosts文件等方式发现内网中存活的一些主机.

查看共享资料:

Net view

查看arp表:

Arp-a

查看hosts文件:

Type C:windowssystem32driversetchosts

查看dns缓存:

ipconfig /displaydns

1.2.2 网络端口扫描

端口是主机各服务运行的主要依赖对象,攻击者可以通过扫描目标主机开放的端口获取目标主机开放的网络服务程序情况[1],因为一个网络服务程序对应一个端口.TCP和UDP协议的端口号在0—65535之间.一般情况下,1024以内的端口号对应常用的网络服务.例如:21号端口对应FTP服务,22号端口对应SSH服务,3389号端口对应远程桌面连接服务等.可以使用nmap工具进行端口扫描[2]:

Nmap-A 192.168.1.101/24

2 权限提升

当发现控制的机器不能进行敏感操作或读取不到重要文件时,那么就会考虑提升用户权限,也称为提权.

2.1 利用内核溢出漏洞提权

利用系统内核溢出漏洞提权是常用的提权方法,但如果系统被及时打上漏洞补丁,那么该提权方式将行不通.

2.1.1 查找系统缺失补丁

执行“Systeminfo”命令,就可通过查询系统文件里的补丁号来查询机器上安装的补丁情况.

2.1.2 利用未修复漏洞提权

如果目标主机系统没有对已知漏洞进行修补,攻击者就可以通过该漏洞进行权限提升.比如ms14-068漏洞,该漏洞对应的补丁号为KB3011780.该漏洞的成因和Kerberos协议认证过程有关,Kerberos是一种计算机网络授权协议.Kerberos协议认证过程如图1所示[3-4].

图1 Kerberos协议认证过程图

大致认证流程如下:

(1)域用户登录时,向KDC进行预认证;

(2)AS验证密码是否正确,如果验证通过,则返回给用户一张TGT票据;

(3)用户拿着TGT向KDC的TGS服务申请访问Application Server的票据;

(4)域控的TGS服务验证TGT通过后,返回给域用户能够访问Application Server的票据,即ST;

(5)域用户拿着ST访问对应的Application Server;

(6)Application Server验证ST.

下面简述ms14-068的问题为:

TGT作为用户凭证,包含了用户名、用户id、所属组等信息,即PAC.简单点讲,PAC就是验证用户所拥有权限的特权属性证书.

默认PAC是包含在TGT中,而出现ms14-068这个问题的原因在于用户在申请TGT时可以要求KDC返回的TGT不包含PAC(include-PAC为false),然后用户自己构造PAC并放入TGS_REQ数据包中的REQ_BODY中.KDC会解密PAC并加密到一个新的TGT中(正常应该返回一个ST)并返回给用户,此时这个TGT已经带入了构造的恶意的PAC.

利用方法:

python ms14-068.py-u @-s -d

mimikatz.exe “kerberos∶∶ptc TGT_user@domain.ccache” exit

2.2 绕过UAC提权

UAC(User Account Control)指用户账户控制,程序在操作启动前会对用户身份进行验证.程序需要UAC的授权才能进行某些操作,比如访问系统根目录,对重要配置文件进行读取等.利用UAC提权的原理是发现高权限运行但是没有UAC提示的应用,再找到其启动调用时所缺失的值,然后添加对应的值完成提权.

2.2.1 Bypassuac模块提权

假设已经获得目标机器的meterpreter shell,且当前用户在管理员组中,那接下来使用Bypassuac模块将用户权限提升为System权限.

在meterpreter命令窗口执行以下命令:

Exploit/windows/local/bypassuac(将返回一个新的shell),接着执行“getsystem”命令将用户权限提升为system权限.

2.2.2 RunAs模块提权

利用RunAs模块提权的过程和利用Bypassuac模块提权过程相似.

运行exploit/windows/local/ask模块时,会生成一个可执行文件,如果目标运行程序,程序会请求提升权限,如果用户选择继续运行,那么就会成功获得一个更高的权限.

2.3 Token窃取

Token即令牌,是描述进程或者线程安全上下文的对象,类似于账号和密码.但是Token只是临时密钥,有效时间有限.当用户登录时,如果登录验证信息正确,系统将生成相应的访问Token,之后用户的进程都将携带该Token.如果利用工具复制管理员Token后,再去创建新的进程,那么该进程就拥有管理员的权限.

3 域内横向渗透

域内横向渗透在攻击者攻击内网系统中很常见,以已经取得控制权的主机为跳板,攻击其他域内的主机.攻击者通过跳板机一步一步接近域控制器,最终达到控制域控制器的目的.

3.1 密码抓取

密码抓取在渗透中极其重要,如果一个管理员管理N台机器,这N台机器的密码可能都一样或者有相同的特征.如果攻击者知道其中一台机器上的密码,就可以使用该密码进行碰撞攻击或者通过分析密码组成特征,利用密码组成特征分析出其他主机的密码.通过此方法获取其他主机控制权相比其他方法要容易很多.

3.1.1 抓取本地用户凭据

Windows系统中的密码由LM hash和NTLM hash两部分组成.用户名和密码等信息都保存在SAM文件中.SAM文件的目录为C:windowssystem32config,该目录存放着用户的密码,攻击者使用以下REG命令就可以抓取其中的密码hash值:

reg save hklmsam sam.hive

reg save hklmsystem system.hive

reg save hklmsecurity security.hive

微软公司发布补丁KB2871997,关闭了Wdigest功能,从而防止用户密码以明文形式泄露.但用户可以将注册表下处值改为0来禁用.

HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSecurityProvidersWDigestUseLogonCredential

3.1.2 域hash

当拿到域控权限后,就可以利用工具拷贝出C:windowsNTDSNTDS.dit中的用户hash,然后再使用如NTDSDumpEx等工具解析hash.

3.1.3 弱口令暴破

弱口令是最容易被利用的漏洞,攻击者通常会使用弱口令爆破常用的默认端口,比如ssh连接22端口,远程桌面3389端口,还有Mysql数据库3306端口等.如果管理者设置了弱口令或者密码强度不够,那么攻击者通过密码暴力破解就可以轻轻松松获取主机控制权限.

当攻击者不知道用户名和密码的时候,攻击者就会尝试对主机的账号和密码进行暴力破解,其原理就是利用字典文件中的账号和密码去尝试连接,当字典里的账号和密码和正确的账号和密码匹配上时,就会返回正确结果.

暴力破解主要分为以下3种情况:

(1)知道登录用户名但不知道登录密码;

(2)知道登录密码但不知道登录用户名;

(3)不知道用户名和密码.

暴力破解的工具有很多,常用的有hydra、lasercrack、medusa等,爆破工具可以爆破多种协议的登录验证.例如执行以下命令使用工具hydra暴力破解ip为192.168.1.101的机器的远程桌面协议,其中的rdp是远程桌面协议:

Hydra 192.168.1.101 rdp-L user.txt-P password.txt-V[5-7]

3.2 远程连接

当拿到目标主机用户密码或NTLM Hash后.可以通过凭据传递的方法,将散列值或密码传送到目标机器中进行验证,与目标主机建立连接.

3.2.1 IPC

Net use(查看当前连接)

3.2.2 dir和tasklist命令

Dir命令:与目标主机建立连接后,使用dir命令查看目标主机中的文件.

Tasklist命令:同理,与目标主机建立连接后,可以使用此命令查看目标主机上运行的进程.

3.3 哈希传递攻击

哈希攻击,是指攻击者拿到登录信息的散列值之后,不进行解密,直接传递登录信息的散列值到目标主机进行验证,可以不对散列值进行破解[9].

哈希传递攻击方式:

如果域中含有大量计算机,那么管理员设置的密码可能都一样,从而登录信息的散列值也一样[9].当攻击者得到从某台主机上获取的相应的散列值,再使用第三方工具直接传递到其他目标主机上进行身份验证,实现对目标主机的控制.

假设目标主机信息为:

Ip:192.168.1.101

域名:test.com

用户名:username

运行mimikatz,执行以下命令,将实现对目标主机的哈希传递攻击:

3.4 票据传递攻击

票据传递(Pass The Ticket,PTT)攻击不同于哈希传递攻击,哈希传递攻击需要管理员权限,而票据传递攻击传递不需要.如果没获得管理员权限,票据传递攻击要比哈希传递攻击容易.

可以同样使用mimikatz工具进行票据传递攻击:

第1步,导出内存中的票据:

Mimikatz“privilege∶∶debug” “sekurlsa∶∶tickets /export”

第1步完成后,目录中会新增几个票据文件;

第2步,清除内存中的票据:

Mimikatz # kerberos∶∶purge

第3步,注入票据文件:

3.5 永恒之蓝漏洞攻击

2017年5月,名为“WannaCry”的勒索软件轰动了整个网络安全界,影响了全球近百个国家上千企业及公共组织.而与之有关的便是同年4月份被曝出来的“永恒之蓝”(MS17-010)漏洞.永恒之蓝漏洞被曝出来时,威胁着全球70%的windows服务器的安全,该漏洞在互联网中引起轩然大波.

永恒之蓝漏洞利用的是在Windows系统中默认开启的SMB服务,对应的端口号默认为445端口.该漏洞的原理是通过向Windows服务器中的SMBv1服务发送构造的指令造成溢出,最终导致任意命令的执行.

现在新版的Metasploit都包含了永恒之蓝漏洞的利用模块.执行以下命令可以利用metasploit中的模块检测该漏洞:

Auxiliary/scanner/smb/smb_ms17_010

Set rhosts ip地址段 (设置扫描ip地址范围)

Set threads 40(设置线程数,默认为1)

Exploit (开始执行)

执行上述命令主要用于检测存在永恒之蓝漏洞的目标主机,接下来执行以下命令对存在该漏洞的目标主机进行攻击:

Use exploit/windows/smb/ms17_010_eternalblue

之后可以输入命令show options查看设置参数,使用命令对ip为193.168.1.101的主机进行攻击:

Set rhost 192.168.1.101

接下来设置攻击payload,目标主机的操作系统不一样,设置的payload也不一样,这里需要选择对应的playload:

Set payload windows/x64/meterpreter/reverse_tcp

Exploit(执行攻击指令)

攻击成功后就会返回一个meterpreter shell,通过该shell就可以控制目标主机了.

4 跨域攻击

一般大型企业都有自己的内网,为了方便管理,根据职责的不同或功能不同,将域划分为主域和子域.如果攻击者得到某个子域的控制权,那么就会通过子域想方设法取得主域的控制权.

4.1 域信任

域信任是为了不同域之间能更好地进行资源共享.域信任是域中的一种机制,如果A信任B,那么当B中的用户在通过A的验证后,就可以访问A中的资源.域信任分为单向信任和双向信任两种.简单来说,单向信任就是A信任B,但B不一定信任A;而双向信任是A信任B,那B也信任A.如果是内部信任,那么域信任还可以传递.如果A信任B,B信任C,那么A也信任C,这就是信任传递[9].

子父域之间默认是双向信任,攻击者可以借此利用子域攻击父域.可以通过sidhistory跨域提权.

利用以下命令,使用mimikatz工具获取子域的krbtgt hash

Lsadump∶∶lsa /patch

再输入“powerview”命令获取父域sid

Get-DomainComputer-Domain test.com

最后添加一个企业管理员,获取父域管理权限.

执行以下命令,有引号的位置表示是需要根据实际信息输入的参数:

4.2 攻击Kerberos

Kerberos是域中的核心协议,上文介绍过Kerberos的工作流程,这里不做累述.当获取到krbtgt hash时,可以通过伪造票据进行验证.

4.2.1 金票据

金票据是伪造Kerberos协议中的TGT,Kerberos协议验证过程中的TGT是由krbtgt加密而成.所以如果获取到krbtgt hash,就可以构造任意的TGT了.

攻击方法:

kerberos∶∶ptt administrator.kiribi kerberos∶∶tgt

4.2.2 银票据

金票据是伪造TGT,而银票据伪造的是TGS,原理和金票据相似.

攻击方法:

5 权限维持

当攻击者获取目标主机控制权后,为了不会因为入侵时与目标主机建立的连接通道被管理人员或杀毒软件关闭而失去控制权限,攻击者就会在目标主机上留下其他更隐蔽的后门[10].

随着防御软件功能的升级,操作系统后门也一直不断升级.为了让控制权限更持久,攻击者不断编写更高级的后门.为了逃过杀毒软件的”追杀”,后门程序的种类变得多种多样,本文只介绍常见的几种.

(1)注册表注入后门

攻击者可以通过修改注册表,将后门程序路径添加到注册表中启动并运行后门程序.修改的注册表路径为:

HKCU:SoftwareMicrosoftWindowsCurrentVersionRun

当管理员登录系统时,后门程序会自动运行.

(2)计划任务后门

计划任务是指系统按照预设的任务指令执行任务,而计划任务后门,也是如此,可以设置后门程序的运行时间.计划任务的任务类别会因用户权限的不同而不同,管理员权限下的用户可以设置更多的计划任务.将后门程序的运行时间进行修改,可以降低被目标主机发现的风险.

计划运行后门的命令如下,假如将后门程序muma.exe每1 h运行1次.

Schtasks /Create /tn Updater /tr muma.exe /sc hourly /mo 1

(3)Cymothoa后门

Cymothoa是一个可以将Shellcode注入进程的工具.Cymothoa后门是很常见的后门,他是以其他进程为宿主,不需要建立新的进程.通过插入其他操作系统信任的进程来躲避杀毒软件的扫描,如果安全防护工具不检测内存,就发现不了.

使用Cymothoa植入后门时,需要先找到正在运行的进程,再将后门程序插入到指定的PID进程中去.把后门程序发送到目标主机上后,可以直接执行以下命令将后门程序插入到指定的进程中去:

Cymothoa-p 101-s 2-y 4444

其中-p参数指定进程PID,-s指定shellcode类别,-y指定后门服务端口.

之后攻击者在客户端执行下列命令就可以与目标主机建立连接:

Nc-nvv 192.168.1.101 4444

6 防范措施

6.1 信息收集防范措施

内网信息收集依赖的主要对象是主机开启的端口,所以针对内网信息收集的防范措施主要为以下3点:

(1)关闭不用的端口,尽量减少不必要端口的开启;

(2)增强防火墙的管理策略,拦截异常的流量;

(3)建立安全防护系统,对有异常行为的主机进行通信阻断.

6.2 权限提升防范措施

攻击者进行提权方法一般是通过利用系统修补的漏洞提权,系统不安全的权限分配提权和利用Token提权.相应的防范措施有以下6点:

(1)及时给服务器打补丁,做好备份,才能有效保障网站安全,避免黑客攻击[11];

(2)普通用户或程序给予普通权限,不要轻易将管理员权限分配给用户;

(3)不要运行未知安全的软件,也不要下载或传播来路不明的文件;

(4)缩短Token的有效时长;

(5)增强Token的验证方法以及安全管理;

(6)将密码放在只有管理员权限才能访问的文件中.

6.3 针对横向渗透的防范措施

攻击者进行横向渗透的核心是密码,所以主要的防范策略也是以密码安全管理为中心.而攻击者进行横向渗透使用最多的方法是密码暴力破解和密码碰撞,所以,企业网络运维人员可以通过以下5个方法进行防范:

(1)不选择常用的邮箱以及手机号作为密码,密码最好不要进行反复的使用,通常情况多使用不固定的邮箱进行手机业务的交互[12];

(2)针对Kerberoast攻击,确保密码长度超过25位;

(3)对Kerberos票据使用AES256_HMAC加密;

(4)及时更新病毒库.

6.4 跨域攻击防御措施

域控制器安全是域安全的核心,跨域攻击时,攻击者的目标是域控制器的控制权.做到以下几点可以防范跨域攻击:

(1)域安全管理时,应严格分配域之间的信任关系;

(2)域之间建立连接时应进行多重身份验证;

(3)不同域之间使用不同密码.

6.5 后门种植防范措施

攻击者通过种植新的后门来达到持久性控制目标主机,所以只要发现并清理攻击者留下的后门,就可以使攻击者失去控制权.当发现未知的软件或文件时,要及时清除,并且切记将残留文件清理干净.主要的防范措施是以下几点:

(1)定期升级安全防护软件,及时更新病毒库;

(2)定期检查系统中的进程,及时清理异常进程;

(3)定期检查主机开放端口是否发生变化;

(4)定期查看后台计划任务,发现异常,及时处理;

(5)养成良好的桌面使用习惯.

7 结 论

本文简述内网渗透过程以及防御措施,介绍攻击者从进入内网到拿下域控制器权限的过程以及对应的防御措施.阐述了漏洞利用的原理,研究攻击者一步一步实现入侵的攻击方式以及防范措施.研究发现因为管理者不当的管理方法造成主机沦陷的问题很多,比如使用弱密码、多次使用同一密码及未及时安装系统漏洞补丁等.综上所述,为保证内网下的主机安全,网络安全管理员应该有良好的安全防范意识,避免使用弱密码同时也应防止密码有被泄露的风险.而不安全的配置会让攻击者有可乘之机,用户权限和域信任应制定严格标准,尽量减少高权限的给予和域之间访问.为有效保证系统安全,需及时安装系统补丁和升级安全防护软件,当然,员工和管理者拥有良好的上网行为也极为重要.

猜你喜欢

后门攻击者命令
只听主人的命令
基于微分博弈的追逃问题最优策略设计
工业物联网后门隐私的泄露感知研究
正面迎接批判
移防命令下达后
这是人民的命令
有限次重复博弈下的网络攻击行为研究
这个班还不错
新帕萨特右后门玻璃升降功能失效
新途安1.4TSI车后门车窗玻璃不能正常升降