ไทย

เครื่องมือสำหรับนักพัฒนา · ตัวเข้ารหัสและตัวถอดรหัส Base64

วิธีถอดรหัสคำสั่ง Base64 PowerShell ที่น่าสงสัยโดยไม่ต้องรัน

· เหตุใดจึงสำคัญ

base64 ความปลอดภัย

เพย์โหลด PowerShell -EncodedCommand ถอดรหัสเพื่อแสดงข้อความที่ไม่เป็นอันตรายโดยไม่ต้องดำเนินการ
ภาพประกอบเวกเตอร์ต้นฉบับ ToolAcre

ผู้โจมตีใช้ Base64 เพื่อซ่อนสคริปต์จากการตรวจสอบทั่วไป โพสต์นี้แสดงวิธีถอดรหัสเพย์โหลด -EncodedCommand โดยไม่ต้องดำเนินการ สาเหตุที่เอาต์พุตอาจดูแปลกในตัวถอดรหัส UTF-8 และสิ่งที่ต้องค้นหา

งานที่กำหนดเวลาไว้ซึ่งมีอาร์กิวเมนต์ 2,000 อักขระ — ตำแหน่งที่คำสั่งที่เข้ารหัสปรากฏขึ้น และเหตุใดจึงถือเป็นธงสีแดง

ผู้ดูแลระบบค้นพบงานที่กำหนดเวลาไว้ด้วยอาร์กิวเมนต์ 2,000 อักขระ -EncodedCommand ที่ดูน่าสงสัย งานทำงานภายใต้บัญชีบริการที่มีสิทธิ์สูง

การล่อลวงให้วางคำสั่งลงใน PowerShell และเรียกใช้เพื่อดูว่าคำสั่งทำอะไรเป็นอันตราย หากคำสั่งเป็นอันตราย การดำเนินการคำสั่งนั้นจะทำให้ระบบเสียหาย วิธีที่ปลอดภัยกว่าคือการถอดรหัส Base64 ในเครื่องและอ่านเอาต์พุตเป็นข้อความก่อนที่จะตัดสินใจว่าจะเรียกใช้สิ่งใดหรือไม่ โพสต์นี้จะอธิบายวิธีถอดรหัสคำสั่ง PowerShell อย่างปลอดภัยโดยไม่ต้องดำเนินการ สาเหตุที่เอาต์พุตอาจดูอ่านไม่ออกในตัวถอดรหัส UTF-8 มาตรฐาน และสิ่งที่ต้องพิจารณาเพื่อประเมินว่าคำสั่งนั้นปลอดภัยหรือน่าสงสัย

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

ข้อมูลเชิงลึกที่สำคัญคือ PowerShell ใช้การเข้ารหัส UTF-16LE สำหรับ -EncodedCommand ไม่ใช่ UTF-8 ดังนั้นไบต์อื่นๆ ทุกไบต์จึงเป็นศูนย์ ซึ่งเครื่องมือมาตรฐานตีความว่าเป็นจุดสิ้นสุดที่เป็นค่าว่าง กฎสำหรับการวิเคราะห์โค้ดที่น่าสงสัยนั้นง่ายมาก: ถอดรหัส ไม่ต้องดำเนินการ สิ่งนี้ใช้กับคำสั่งที่เข้ารหัส Base64 สคริปต์ที่บีบอัด สคริปต์จากแหล่งที่ไม่น่าเชื่อถือ และทุกสิ่งที่อยู่ในสายการเข้ารหัสที่ไม่คุ้นเคย การรันสคริปต์เป็นจุดที่ไม่มีการส่งคืน เมื่อทำงานแล้ว การเปลี่ยนแปลงระบบจะเกิดขึ้น ได้รับสิทธิ์การเข้าถึง และข้อมูลถูกกรองออกไป

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

เหตุใดไบต์ที่ถอดรหัสจึงดูไม่เหมือนข้อความ UTF-8 — ตรวจสอบรูปแบบไบต์ UTF-16LE ในรูปแบบเลขฐานสิบหก แทนที่จะขอให้เครื่องมือข้อความ UTF-8 นี้ตีความ

อย่างไรก็ตาม PowerShell ไม่ได้ใช้การเข้ารหัส UTF-8 สำหรับสิ่งนี้ ใช้ UTF-16LE (little-endian UTF-16) ใน UTF-16 อักขระ ASCII ทุกตัวจะแสดงเป็นสองไบต์: รหัสอักขระตามด้วยศูนย์ไบต์ ตัวอักษร A คือ 41 00 ในรูปเลขฐานสิบหก ตัวอักษร B คือ 42 00 สตริงเช่น Hello จะปรากฏเป็น 48 00 65 00 6C 00 6C 00 6F 00 ใน UTF-16LE ไบต์ เมื่อเข้ารหัส Base64 ผลลัพธ์จะมีรูปแบบที่เข้ารหัสของไบต์ทั้งหมด รวมถึงศูนย์ทั้งหมดด้วย การถอดรหัสด้วยตัวถอดรหัส UTF-8 มาตรฐานจะสร้างข้อความที่อ่านไม่ออกหรือตัดทอนที่ศูนย์ไบต์แรก เนื่องจาก UTF-8 ถือว่าไบต์ null เป็นตัวยุติสตริง

ผลลัพธ์จะดูเหมือน H e l o แทนที่จะเป็น Hello โดยมีอักขระแบบสุ่มหรือข้อความหายไป ตัวอย่างการทำงานจะแสดงปัญหาและแนวทางแก้ไข สมมติว่าคำสั่ง PowerShell เข้ารหัสสตริงแบบธรรมดา Write-Host Hello PowerShell UTF-16LE-เข้ารหัสนี้เป็นไบต์รวมทั้งศูนย์ทั้งหมด Base64-เข้ารหัสไบต์และสร้างสตริงแบบยาวเช่น VwByAGkAdABlAC0ASwBvAHMAaAAgACIASABlAGwAbABvACIA คัดลอกสตริงนี้ลงในตัวเข้ารหัสและตัวถอดรหัส Base64 ในเบราว์เซอร์ของคุณแล้วคลิกถอดรหัส ตัวถอดรหัสเริ่มต้นจะพยายามตีความผลลัพธ์เป็นข้อความ UTF-8 และสร้างเอาต์พุตที่เสียหายหรือถูกตัดทอนเนื่องจากค่าศูนย์ที่ฝังอยู่

ตัวอย่างการทำงาน: การถอดรหัสคำสั่งที่เข้ารหัสตัวอย่างที่ไม่เป็นอันตราย — การอ่านข้อความที่เลยค่าศูนย์ไบต์ที่แทรกสลับกัน

วิธีแก้ไขคือใช้มุมมองฐานสิบหกแทน สลับไปที่มุมมองฐานสิบหกแล้วคุณจะเห็นไบต์: 57 00 72 00 69 00 74 00 65 00 2D 00 4B 00 6F 00 73 00 68 00 20 00 22 00 48 00 65 00 6C 00 6C 00 6F 00 22 00. การอ่านไบต์เหล่านั้นเป็นคู่ UTF-16LE จะได้ W-r-i-t-e---K-o-s-h---H-e-l-l-o- ด้วยประสบการณ์ คุณสามารถอ่าน UTF-16LE hex ได้โดยตรง หรือคุณสามารถเขียนไบต์ลงในไฟล์และถอดรหัสด้วยสคริปต์ PowerShell หรือ Python ที่ทำงานภายในเครื่องได้

แนวทางปฏิบัติคือการจดบันทึกรูปแบบและจำไว้ว่า PowerShell ใช้ UTF-16LE เมื่อคุณถอดรหัส PowerShell -EncodedCommand ในเบราว์เซอร์และผลลัพธ์ดูผิดปกติ ให้ดูที่มุมมองฐานสิบหกแทนมุมมองข้อความ มุมมองฐานสิบหกแสดงแต่ละไบต์แยกกัน อักขระ ASCII ทุกตัวจะปรากฏเป็นสองไบต์โดยมีศูนย์อยู่ระหว่างอักขระเหล่านั้น หากไบต์สะกดคำสั่งที่เป็นอันตราย เช่น New-AdminAccount ย้อนกลับการค้นหา DNS หรือส่งออกข้อมูลรับรองความปลอดภัย แสดงว่าคำสั่งนั้นน่าสงสัย หากไบต์สะกดบางสิ่งที่ไม่เป็นอันตราย เช่น รายการไดเร็กทอรีหรือสคริปต์ธรรมดา คำสั่งนั้นอาจไม่เป็นอันตราย

การเข้ารหัสและการบีบอัดแบบซ้อน — Base64 ภายใน Base64 และสตรีม gzip ที่คุณไม่สามารถอ่านเป็นข้อความได้

มุมมองฐานสิบหกอ่านยากกว่าข้อความธรรมดา แต่จะปลอดภัยกว่าการคาดเดาจากเอาต์พุต UTF-8 ที่เสียหาย การเข้ารหัสและการบีบอัดแบบซ้อนเพิ่มความซับซ้อนให้กับการวิเคราะห์มัลแวร์ คำสั่ง PowerShell อาจเข้ารหัส Base64 เข้ารหัสสตริง Base64 อื่น หรือบีบอัดสคริปต์ด้วย gzip จากนั้น Base64 เข้ารหัสผลลัพธ์ ในสถานการณ์ที่ซ้อนกัน คุณถอดรหัส Base64 ภายนอก อ่านผลลัพธ์และค้นพบว่ามันคือ base64 เอง ถอดรหัสสิ่งนั้นด้วยและทำต่อไปจนกว่าคุณจะพบข้อความที่อ่านได้หรือรูปแบบไบนารีที่คุณไม่สามารถตีความได้ Gzip และรูปแบบการบีบอัดอื่นๆ เริ่มต้นด้วยเมจิกไบต์ (1F 8B สำหรับ gzip) ซึ่งมองเห็นได้ในมุมมองฐานสิบหก

หากคุณถอดรหัส Base64 และมุมมองฐานสิบหกเริ่มต้นด้วย 1F 8B ไบต์นั้นจะเป็นสตรีมที่บีบอัดซึ่งจำเป็นต้องมีการบีบอัด ตัวเข้ารหัสและตัวถอดรหัส Base64 จะแสดงเลขฐานสิบหกให้คุณเห็น ซึ่งช่วยให้คุณระบุรูปแบบเหล่านี้ได้โดยไม่ต้องดำเนินการใดๆ เพย์โหลดที่ถูกบีบอัดหรือเข้ารหัสเพิ่มเติมนั้นน่าสงสัยเนื่องจากเพิ่มเลเยอร์ที่สับสน

สิ่งที่ต้องบันทึกสำหรับรายงานเหตุการณ์ — ข้อความที่ถอดรหัส แหล่งที่มา และแฮช แทนที่จะเป็นเพย์โหลดเอง

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

รวมแฮช (SHA-256) ของสคริปต์ที่ถอดรหัส เพื่อให้สามารถยืนยันและติดตามผลการสืบค้นได้ หากคำสั่งนั้นเป็นอันตรายอย่างชัดเจนหรือใช้เทคนิคการแสวงหาประโยชน์ที่ทราบ ให้เกี่ยวข้องกับการตอบสนองต่อเหตุการณ์และทีมรักษาความปลอดภัยก่อนดำเนินการใดๆ อย่าดำเนินการคำสั่งด้วยตัวคุณเองเพื่อดูว่ามันทำอะไร หากผู้ตอบสนองต่อเหตุการณ์จำเป็นต้องดำเนินการเพื่อการทดสอบ พวกเขาจะดำเนินการดังกล่าวในสภาพแวดล้อมแบบแซนด์บ็อกซ์ซึ่งมีความเสียหายอยู่ งานของคุณคือการถอดรหัสและประเมินความเสี่ยงในระยะที่ปลอดภัย บทความนี้ไม่ครอบคลุมขอบเขตทั้งหมดของการวิเคราะห์มัลแวร์ สภาพแวดล้อมแซนด์บ็อกซ์ หรือการระบุแหล่งที่มาของการโจมตี

สิ่งนี้ไม่ครอบคลุมถึง — การดำเนินการแซนด์บ็อกซ์ เครื่องมือวิเคราะห์มัลแวร์ และการระบุแหล่งที่มา

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

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

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

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

หากคุณเห็นรูปแบบ UTF-16LE (ศูนย์ไบต์คั่นด้วย) โปรดจำไว้ว่า PowerShell ใช้ UTF-16LE และอ่านตามนั้น ระบุรูปแบบที่น่าสงสัย เช่น คำขอเครือข่าย การยกระดับสิทธิ์ หรือกลไกการคงอยู่ บันทึกรายละเอียดอย่างถูกต้องสำหรับรายงานเหตุการณ์ของคุณ รวมถึงสตริง Base64 ดั้งเดิมและแฮชของมัน อย่าดำเนินการคำสั่งด้วยตนเอง ปล่อยให้เป็นหน้าที่ของผู้เผชิญเหตุในสภาพแวดล้อมที่มีการควบคุม เชื่อถือการถอดรหัสในพื้นที่ของคุณและการประเมินข้อความธรรมดาของคุณ แล้วปล่อยให้สิ่งนั้นเป็นแนวทางในการดำเนินการต่อไปของคุณ