Red Teaming macOS 101
โพสต์นี้ครอบคลุมแนวคิดความปลอดภัยของ 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 ควรสังเกตว่าในการเข้าถึงพอร์ตงาน โค้ดของคุณจะต้องรันในฐานะรูท ด้วยพอร์ตงาน คุณสามารถทำการแทรกกระบวนการแบบคลาสสิกผ่านการเขียนเชลล์โค้ดและสร้างเธรด
การป้องกันความสมบูรณ์ของระบบ (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





































![รายการที่เชื่อมโยงคืออะไร? [ส่วนที่ 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)