堆佈局操作的自動化

在去年的USENIX安全會議上,我發表了一篇題為《堆佈局操作的自動化》的文章。該文的主要思想是,我可以將堆佈局操作從生成漏洞所涉及的其他工作中分離出來,並使用黑盒搜尋自動解決它。這篇論文中還有另一個想法,這個想法就是透過漏洞利用模版使漏洞利用自動化,因此我認為該思想可能在將自動漏洞利用生成系統擴充套件到更現實的問題上很有用。

漏洞利用模板只是一個部分完成的漏洞,其中不完整的部分將由某種自動推理機制填充。在論文中,我提到自動填充的部分是將堆放入特定佈局所需的輸入。下面是一個示例模板,顯示了PHP直譯器的一部分漏洞。漏洞利用程式開發人員希望將imagecreate所做的分配放在quoted_printable_encode所做的分配旁邊。

$quote_str = str_repeat(“\xf4”, 123);

#X-SHRIKE HEAP-MANIP 384

#X-SHRIKE RECORD-ALLOC 0 1

$image = imagecreate(1, 2);

#X-SHRIKE HEAP-MANIP 384

#X-SHRIKE RECORD-ALLOC 0 2

quoted_printable_encode($quote_str);

#X-SHRIKE REQUIRE-DISTANCE 1 2 384

SHRIKE(解析模板並搜尋堆佈局問題的解決方案的機制)將把包含部分完成的漏洞利用的。php檔案作為輸入,並搜尋它應自動解決的問題。用於與機制通訊的指令以字串X-SHRIKE開頭。它們在我的論文中中有完整的解釋,但是過程相當簡單,就是HEAP-MANIP告訴機制它可以在這個位置插入堆操作程式碼,此時RECORD-ALLOC會告訴機制它應該記錄從這一點開始發生的第n個分配。另外,REQUIRE-DISTANCE告訴機制,在執行PHP程式時,與指定ID相關聯的分配必須彼此相距一定的距離。機制接受此輸入後,然後才開始尋找將堆放入所需佈局的方法。上面的程式碼片段來自CVE-2013-2110漏洞(堆緩衝區溢位漏洞),此影片顯示了SHRIKE解決自動執行堆佈局問題的漏洞的過程。

那麼,這種方法有什麼好處呢?由於搜尋是在黑盒子中進行的,不要求漏洞利用開發人員分析目標應用程式或分配器,如果搜尋成功,則輸出一個新的PHP檔案,該檔案實現了所需的佈局,然後可以繼續完成攻擊。這會產生連鎖反應,使得開發人員更容易針對特定的堆溢位探索不同的開發策略。在正常的軟體開發中,人們普遍認為長構建週期是糟糕的,而REPL(互動式直譯器環境)通常是好的,其中R(read)、E(evaluate)、P(print)、L(loop) ,互動式直譯器會讀取輸入內容並對它求值,再返回結果,並重復此過程。原因是後者支援形成假設,測試,精煉和重複的緊密迴圈,而長構建週期則破壞了這個過程。 漏洞利用的自動化就具有類似的細REPL過程,任何可以使這個迴圈更緊密的技術將使該過程更有效。

關於透過漏洞利用模版使漏洞利用自動化,目前還有很多有趣的工作要做。在洞利用自動化研究中,有一種趨勢是專注於完全自動化,但經過實踐,要讓所有的利用都實現自動化是不可能的。

另外如果漏洞利用自動化後,那網路犯罪成本將大大降低。

網路犯罪成本解析

應該說網路犯罪的分工目前是相當精細的,各有專攻,互相協作。即使執法機構端掉一些惡意論壇的窩點或查封某個肆虐的惡意軟體,那這個市場空缺也會很快被其它產品補上。

在過去的二十多年裡,網路犯罪逐漸成為一個包括工具、方法等高度複雜的生態系統。今天的網路犯罪,可以說是全球化合作,不同地域,不同專業的人都加了進來,既能滿足基本的攻擊需要,也可以定製非常複雜的攻擊策略。

銀行木馬犯罪示例

銀行木馬就是最好的示例,它可以被不斷的利用,以便實現最大的盈利。我會在下面的示例中說明前期開發和後期運營的成本,以及運營後的回報。

銀行木馬是網路犯罪活動中最搶手的產品,一般來說開發一個這樣的產品,價格為3000至5000美元。產品開發完後,使用者還要為每個目標金融機構的網路注入單獨付費,大概每個是150-1000美元。為了保持對整個操作的全程管理,後臺服務需要隨時對這些攻擊進行監控,而資料中心的網路伺服器的月租金通常為150至200美元。

為了確保一致的有效載荷交付,並避開防毒軟體,可執行檔案必須是“乾淨的”和日常混淆。這種服務的價格是每個單一有效載荷20至50美元。穩定的網路流量重定向到受感染的資源或垃圾電子郵件活動是惡意載荷的兩個主要傳送工具。一旦惡意軟體成功種植,銀行證書被截獲,犯罪者必須與一連串的騾經營者和洗錢中介合作才能獲得最終的回報。具有良好聲譽,能夠快速週轉的洗錢者,將從受害者帳戶轉移的每筆款項中收取高達50%至60%的佣金。在某些情況下,可能需要額外5-10%的佣金來清洗資金,並透過比特幣等優先支付方式將其交付給主要運營商。

五種尋找 "Domain Admin" 執行的程序的方法

本文在大多數情況下,都將重點關注執行域管理程序的系統。不過即便如此,我還是要介紹一下很多滲透測試人員用來獲取域管理員許可權的標準過程。

1。識別目標系統和應用程式;

2。識別潛在的漏洞;

3。利用漏洞獲取初始訪問許可權;

4。升級受感染系統的許可權;

5。在本地或遠端系統上找到域管理程序或身份驗證令牌;

6。透過傳送本地管理員的密碼雜湊,破解密碼或使用mimikatz這樣的工具來轉儲密碼,來對執行域管理程序的遠端系統進行身份驗證;

7。進入到域管理過程;

8。建立一個域管理;

本地檢查

請務必首先檢查最初被破壞的系統,如果你已經存在於域管理程序中,那麼在網路上執行真的沒什麼意義了。以下是使用本機命令檢查是否有任何域管理程序正在執行的簡單方法:

1。執行以下命令以獲取域管理員列表:net group “Domain Admins” /domain;

2。執行Tasklist /v命令以列出程序和程序使用者,執行該過程的帳戶應該在第7列;

3。將任務列表與域管理員列表交叉引用,檢視你是否進入域管理程序中;

如果域管理程序始終是在最初受到攻擊的系統上執行,那就太好了,但這屬於理想的情況。所以接下來的四種技術將幫助你在各種情況下的遠端域系統上找到域管理程序。

查詢域控制器的活動域使用者會話

下面是我提供的一些基本步驟,以獲得具有域使用者許可權的活動域管理會話的系統列表。

1。使用LDAP查詢或net命令從“域控制器”OU中收集域控制器的列表,以下是我用過的一個net命令:net group “Domain Controllers” /domain。

請注意:雖然OU是域控制器列表的最佳來源,但前提是,你要對受信任域完成列舉並監控這些域控制器的過程。或者,你可以透過DNS查詢它們:Nslookup –type=SRV _ldap。_tcp。

2。使用LDAP查詢或net命令從“域管理員”組中收集域管理員的列表。以下是我用過的一個net命令:net group “Domain Admins” /domain。

3。透過使用Netsess。exe查詢每個域控制器,收集所有活動域會話的列表。 Netsess工具是Joe Richards提供的一個很棒的工具,它裡面包含了本地Windows函式“netsessionenum”。該函式可以返回活動會話的IP地址,域帳戶,會話啟動時間和空閒時間。以下是我用過的一個net命令:Netsess。exe –h。

4。將Domain Admin列表與活動會話列表交叉引用,以確定哪些IP地址上有活動的域令牌。在更安全的環境中,你可能需要等待具有域管理員許可權的域管理員或服務帳戶在網路上執行此操作。不過這意味著我需要多次執行這個過程,或者把它編寫出來。下面是一個使用了netsess的非常快速和具有攻擊力的Windows命令列指令碼。

FOR /F %i in (dcs。txt) do @echo [+] Querying DC %i && @netsess -h %i 2>nul > sessions。txt &&

FOR /F %a in (admins。txt) DO @type sessions。txt | @findstr /I %a

不過請注意,dcs。txt有一個域控制器列表,admins。txt有一個Domain Admins列表。

為此,我編寫了一個名為Get Domain Admins(GDA)的基本批處理指令碼,它可以自動下載整個過程。readme檔案中列出了其中的依賴關係,我還為Windows Dictionary攻擊建立了一個名為Get Domain Users(GDU)的批處理檔案,相似的選項,不過具有更多的依賴關係。如果你感興趣,可點選上面的連結下載。

掃描用於執行任務的遠端系統

當你在域系統上作為共享的本地管理員帳戶執行時,就可以透過以下的指令碼來掃描系統域管理任務。與以上的技術類似,你需要首先列舉Domain Admins。在下面的指令碼中,ips。txt包含目標系統的列表,而names。txt包含域管理員的列表。

FOR /F %i in (ips。txt) DO @echo [+] %i && @tasklist /V /S %i /U user /P password 2>NUL > output。txt &&

FOR /F %n in (names。txt) DO @type output。txt | findstr %n > NUL && echo [!] %n was found running a process on %i && pause

掃描NetBIOS資訊的遠端系統

某些Windows系統仍然允許使用者透過NetBIOS查詢查詢登入使用者,你可以使用本機nbtstat工具查詢資訊,在nbtstat結果中,使用者名稱由“<03>”表示。

1。下面是另一個快速而具有攻擊的Windows命令列指令碼,它將掃描遠端系統,找到活動的Domain Admins會話。注意:該指令碼可以作為非域使用者執行。

for /F %i in (ips。txt) do @echo [+] Checking %i && nbtstat -A %i 2>NUL >nbsessions。txt && FOR /F %n in (admins。txt) DO @type nbsessions。txt | findstr /I %n > NUL && echo [!] %n was found logged into %i

2。你也可以使用執行速度稍快的nbtscan工具,下面是另一個基本的指令碼命令:

for /F %i in (ips。txt) do @echo[+] Checking %i && nbtscan -f %i 2>NUL >nbsessions。txt && FOR /F %n in (admins。txt) DO @type nbsessions。txt | findstr /I %n > NUL && echo [!] %n was found logged into %i

用於身份驗證令牌遠端系統的PSExec Shell噴灑技術

Psexec“Shell spray”是在Metasploit中的Psexec模組的數百個系統上安裝Shell(通常是meterpreter),從而使用共享的本地管理憑證。許多測試人員使用此方法與其他Metasploit功能一起來識別域管理令牌。雖然這是我最不喜歡的技術,但由於pentest社群的很多人都在積極使用它,我覺得我需要把它包括進來。

本文翻譯自:

https://

sean。heelan。io/2019/03/

05/automation-in-exploit-generation-with-exploit-templates/

如若轉載,請註明原文地址:

https://www。

4hou。com/web/16902。html

更多內容請關注“嘶吼專業版”——Pro4hou