1 คะแนน โดย GN⁺ 1 일 전 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • ได้จัดทำรายการไบนารี Unixแยกตามความสามารถ และเชื่อมการทำงานที่เป็นไปได้ของแต่ละไบนารีไปยังหน้ารายละเอียดและลิงก์แองเคอร์ได้โดยตรง
  • หมวดหมู่ที่ปรากฏซ้ำเป็นประจำคือ Shell, File read, File write, Command, Inherit, Upload, Download, Reverse shell, Library load, Privilege escalation และบางรายการมี Bind shell กำกับเพิ่มเติม
  • File read และ Shell กระจายอยู่กว้างมาก ขณะที่เครื่องมืออย่าง dd·sed·sqlite3 มีทั้ง การอ่านและการเขียน ทำให้เส้นแบ่งกับเครื่องมือแบบใช้ดูข้อมูลอย่างเดียวไม่ชัดเจน
  • เครื่องมืออย่าง apt·git·journalctl·systemctl มักมีทั้ง Command และ Inherit ขณะที่ไบนารีอเนกประสงค์อย่าง bee·pipx·sqlmap·vim ก็ปรากฏซ้ำพร้อมทั้ง การส่งข้อมูลผ่านเครือข่ายและการทำงานของเชลล์
  • Privilege escalation ปรากฏจำกัดอยู่ในบางไบนารีที่มีลิงก์แยกต่างหาก และรายการกว้างตั้งแต่ 7z ถึง zypper ก็ช่วยให้เห็นความแตกต่างของการผสมผสานการทำงานในเครื่องมือทั่วไปได้ในภาพรวม

การกระจายของความสามารถหลัก

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

ไบนารีอเนกประสงค์

  • ไบนารีอเนกประสงค์ที่มีหลายการทำงานพร้อมกันปรากฏซ้ำอยู่บ่อยครั้ง
  • รายการอเนกประสงค์ที่อิงกับ Inherit

  • รายการที่รวมถึงเครือข่ายและการย้ายไฟล์

  • กลุ่มเอดิเตอร์และดีบักเกอร์

    • gdb, nvim, rvim, view, vim, vimdiff จัดกลุ่ม Inherit ร่วมกับ Shell, Reverse shell, Bind shell หรือ File read/write, Upload, Download, Library load
  • กลุ่มตัวจัดการแพ็กเกจและรันไทม์

เครือข่าย เชลล์ และการโหลดไลบรารี

รายการการยกระดับสิทธิ์

1 ความคิดเห็น

 
GN⁺ 1 일 전
ความคิดเห็นจาก Hacker News
  • ดูเหมือนหลายคอมเมนต์จะสับสนกัน เลยขอยกตัวอย่างว่ามันถูกใช้เมื่อไรในบริบท security/CTF
    ในสภาพแวดล้อมที่เป็น restricted shell หรือรันได้แค่บางคำสั่ง/ไบนารี ปกติแล้วมักจะยังใส่อาร์กิวเมนต์ได้ค่อนข้างอิสระ
    ตอนนั้นถ้าใช้ GTFOBins ก็อาจต่อยอดไปถึงการอ่าน/เขียนไฟล์หรือสั่งรันคำสั่งได้ จนหลุดออกจากบริบทที่ถูกจำกัดและได้เชลล์มา
    ถ้าใครเปิด sudo ทิ้งไว้ หรือให้ SUID bit กับ GTFOBin ก็อาจอ่านหรือเขียนไฟล์สำคัญ และรันคำสั่งที่มีสิทธิ์สูงได้ด้วยวิธีที่แม้แต่คนตั้งค่าก็ไม่ทันคาดคิด

    • เรื่องแบบนี้ใช้ได้พอตัวกับเครื่องมืออย่าง claude-code ด้วย
      การจัดการสิทธิ์ยังค่อนข้างดิบ เพราะเน้น block-list กับ allow-list เป็นหลัก
      ครั้งหนึ่งผมเผลอให้สิทธิ์ powershell กับ Claude ในเซสชันหนึ่ง แล้วหลังจากนั้นถ้าเครื่องมืออย่าง git ถูกบล็อก มันก็จะเขียนสคริปต์ powershell ที่ทำงานอย่างเดียวกันขึ้นมาใช้เองเพื่ออ้อมสิทธิ์ที่ถูกบล็อก
      ในระบบที่ออกแบบดีจริงคงไม่เอา powershell ไปใส่ใน allow-list ทั่วไปหรอก แต่ถ้ามีช่องว่างของระดับสิทธิ์ระหว่างเครื่องมือ เทคนิคในหน้านี้ก็ดูเหมือนจะพาอ้อมกลับมาได้สบาย
    • ซอฟต์แวร์ความปลอดภัยระดับองค์กรบางตัวที่อ้างว่ามี การไกล่เกลี่ยการยกระดับสิทธิ์ ก็อาจเสี่ยงคล้ายกัน
      วิธีติดตั้งที่ผมเคยเห็นในบริษัทหนึ่งคือ ทำให้โปรแกรมใน allowlist ที่แอดมินใส่ไว้รันผ่าน sudo ได้โดยไม่ต้องใส่รหัสผ่าน และตั้งแต่แรกก็มีเครื่องมือสารพัดประโยชน์อย่าง vim, bash รวมอยู่แล้ว
      จากมุมคนทำงานที่บ้านมันกลับรู้สึกเหมือนเป็นเรื่องดี เพราะซอฟต์แวร์ที่บอกว่าจะ "ปกป้อง" คอมผมตัวนี้ ดันทำให้ถ้ามีคนมาเจอเครื่องตอนผมลุกไปแป๊บเดียวแล้วลืมล็อกหน้าจอ เขาจะสั่งอะไรต่อมิอะไรได้ง่ายขึ้นมาก
    • สุดท้ายมันเลยดูเหมือนเป็นไกด์ที่ครอบคลุมพอสมควรว่า restricted shell จริง ๆ แล้วกันอะไรไม่ได้แค่ไหน
    • มีตัวอย่างที่ชัดเจนด้วย
      หลายปีก่อนทีมซัพพอร์ตต้องจับแพ็กเก็ตเครือข่ายด้วย tcpdump ก็เลยใส่กฎ sudo ที่เปิดอาร์กิวเมนต์ไว้พอสมควรเพื่อให้ทำงานได้เร็ว
      ตอนนั้นดูสมเหตุสมผล เพราะพอร์ตหรือ NIC อาจเปลี่ยนได้ แต่จริง ๆ แล้ว tcpdump มีออปชัน -z ที่ให้ระบุคำสั่งบีบอัดได้ ซึ่งถ้าใส่คำสั่ง "พิเศษ" ลงไป ก็ยึดเครื่องเซิร์ฟเวอร์ได้ทั้งเครื่องเลย
      sudo tcpdump -i any -z '/home/despicable_me/evil_cmd.sh' -w /tmp/dontcare.pcap -G 1 -Z root
      มันดูเป็นรายละเอียดเล็ก ๆ แต่แบบนี้พลาดกันง่ายมาก
      เดี๋ยวนี้มีชั้นอย่าง apparmor มาช่วยลดความเสี่ยงแบบนี้ได้บ้าง แต่ก็เพิ่มปัญหาปวดหัวแบบอื่นตามมา และยังคงตั้งค่าพลาดได้ง่ายอยู่ดี
    • พอมองแบบนี้ก็รู้สึกเหมือนเป็นรายการที่จัดหมวดไว้ให้ AI เรียนรู้ วิธีหลบ sandbox เลย
  • ครั้งล่าสุดที่ผมใช้ของคล้าย ๆ แบบนี้คือราว ๆ ปี 1995 บน Windows 3.11 ในห้องคอมของโรงเรียนมัธยมต้น
    เขาล็อกไว้ให้รันได้แค่ไม่กี่แอปที่ได้รับอนุมัติ ซึ่งหนึ่งในนั้นคือ Word
    แล้วใน Word ก็เขียนแมโครและเรียก shell เพื่อรันแอปอื่นได้
    สุดท้ายเครื่องที่ดูเหมือนถูกล็อกให้มีแค่ไม่กี่แอป กลับกลายเป็นรันอะไรก็ได้แทบทั้งหมด
    ตอนนั้นมันสะใจมาก และหลังจากนั้นก็แทบไม่ค่อยเห็นอะไรคล้ายกันอีก
    บางทีก็เห็นคนพูดกันว่าเครื่องแสดงข้อมูลแบบสัมผัสตามร้านหรือห้างสามารถหลุดจาก kiosk mode ได้ ซึ่งก็น่าจะเป็นพวกเดียวกัน

  • พอเห็น restic - Shell, Command, Upload แล้วก็รู้สึกว่าการที่ผมปรับไม่ให้รันแบ็กอัปเป็น root นั้นพอมีเหตุผลขึ้นมาหน่อย
    ผมเลยให้มันรันเป็นผู้ใช้ทั่วไปแทน แต่ให้แค่ read-all-files capability และปิด login shell ไป
    แน่นอนว่าบนเดสก์ท็อปมันอาจจะเยอะเกินไป และถ้าผู้โจมตีทะลุถึงระดับนั้นได้อยู่แล้ว ก็คงอ่านไฟล์แทบทั้งหมดได้อยู่ดีและฝัง backdoor ลงในแบ็กอัปได้เหมือนกัน
    [0] https://man7.org/linux/man-pages/man7/capabilities.7.html

    • พอมองข้อจำกัดแล้ว นิสัยของ LLM ที่จะคิดว่า "งั้นก็เขียน helper สำหรับอ้อมข้อจำกัด สักตัวแล้ววนกลับไปทำสิ" เหมือนกำลังพังสมมติฐานของโลกยุคก่อนลงพอสมควร
      เรามีวิธีรับมือผู้โจมตีมนุษย์จากระยะไกล ผู้โจมตีแบบบอตจากระยะไกล และในระดับหนึ่งก็รวมถึงผู้โจมตีมนุษย์ในเครื่องด้วย แต่ตอนนี้ บอตผู้โจมตีในเครื่องที่เขียนโค้ดเองได้ กลายเป็นสิ่งที่ต้องใส่ใจมากขึ้นกว่าเดิมมาก
      มันไม่ได้อยู่หมวดเดียวกับมัลแวร์แบบตรง ๆ เสียทีเดียว
      ผมเองก็เคยมองคอนเทนเนอร์เป็นขอบเขตความปลอดภัยที่เกี่ยวข้อง แล้วปล่อยให้ทุกโปรเซสข้างในรันเป็น root แต่พอมี LLM เข้ามา ก็เริ่มไม่แน่ใจว่าความปลอดภัยระดับ OS สำคัญขึ้นทันที หรือจริง ๆ กลายเป็นแทบไม่มีความหมายไปแล้วกันแน่
  • ผมยังงง ๆ อยู่ว่า นี่หมายถึงเวลาไม่มี cat ก็ให้ใช้ base64 /path/to/input-file | base64 --decode แทน cat /path/to/input-file ใช่ไหม
    หรือหมายถึง base64 /path/to/input-file | base64 --decode สามารถอ้อมสิทธิ์การอ่านไฟล์ได้เลย

    • แบบแรกถูกต้อง
      โปรเซสที่ถูกเรียกมาปกติจะรับสิทธิ์เดียวกับผู้ใช้ที่รันมัน ยกเว้นเฉพาะกรณีมี setuid bit เท่านั้น
      ประเด็นคือ ในสภาพแวดล้อมที่พยายามปิดเครื่องมือ Unix มาตรฐานเพื่อกัน lateral movement ของผู้โจมตี ก็ยังใช้เครื่องมืออื่นทำสิ่งเดียวกันได้อยู่ดี
    • มันหมายความว่า การกันสิทธิ์ด้วย ข้อจำกัดคำสั่งแบบอิง blacklist ใช้ไม่ได้ผลมาตั้งแต่แรก และทุกวันนี้ก็ยังเหมือนเดิม
    • เป็นแบบแรก ไม่ใช่แบบหลัง
      ไม่ได้เจาะทะลุสิทธิ์ตัวมันเอง แต่เป็นเรื่องของการให้ผลลัพธ์เดียวกันด้วยไบนารีอื่น ใน restricted shell ที่อนุญาตแค่ไม่กี่คำสั่ง
      แบบนี้พบได้บ่อยมากใน CTF
    • แต่ถ้ามีไฟล์ที่อ่านไม่ได้ และในทางกลับกันคุณสามารถ รัน base64 เป็น root ได้ เรื่องก็จะเปลี่ยน
      คุณสามารถรัน base64 ด้วยสิทธิ์ root เพื่อเข้ารหัสเนื้อหาไฟล์เป็น base64 แล้วส่งเอาต์พุตนั้นให้โปรเซส base64 อีกตัวถอดกลับมา สุดท้ายก็เห็นเนื้อหาไฟล์ได้
      โดยรวมแล้วมันก็เหมือน cat ที่เพิ่มขั้นตอนขึ้นมาเท่านั้น
    • ถ้าแบบนั้น ผมว่าทำ tar pipe น่าจะเบากว่าหรือเปล่า
  • เมื่อก่อนผมเคยเป็นหนึ่งในผู้ดูแลเครื่องมือพวกนี้ตัวหนึ่ง แล้วพอเห็นมีคนใช้มัน งัดเชลล์ออกมาได้ ก็ขำดี
    ทั้งสร้างสรรค์ สนุก และเป็นเอกสารอ้างอิงที่ดีด้วย

  • ตอนเล่น hackthebox.eu ผมใช้สิ่งนี้ บ่อยมาก

  • GTFOBins มีมานานพอสมควรแล้ว และมีประโยชน์ตั้งแต่ก่อนยุค AI

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

    • แก่นสำคัญคือ ต่อให้เป็น restricted shell ที่ตั้งค่าผิด หรือให้สิทธิ์เข้าถึงแค่บางคำสั่ง เครื่องมือในลิสต์นั้นก็ยังช่วยให้ผู้ใช้ได้สิทธิ์บางส่วนกลับคืนมาจากสิ่งที่เดิมเขาควรมีอยู่แล้วในสภาพแวดล้อมที่ไม่ถูกจำกัด
      ตัวอย่างง่ายที่สุดคือ ต่อให้เปลี่ยนเชลล์เริ่มต้นเป็น rbash ถ้าผู้ใช้ยังแค่รัน bash แล้วเข้าเชลล์ปกติได้อยู่ มาตรการนั้นก็หมดความหมาย
    • เช่น sudoers อาจอนุญาตให้ รัน base64 เป็น root ได้
      ไม่รู้ว่าทำไปทำไม แต่ถ้าเป็นแบบนั้น ก็จะอ้อมข้อจำกัดสิทธิ์ที่ตั้งใจไว้ และอ่านไฟล์อะไรก็ได้ในระบบ
      หรือถ้าใน Claude Code ตั้งให้รัน base64 ได้โดยไม่ต้องมีการตรวจทาน ก็อาจเท่ากับเปิดทางให้อ่านไฟล์ลับอย่าง .env ได้ด้วย
    • สถานการณ์ที่พบบ่อยคือ มีบางเครื่องมือที่รันด้วย สิทธิ์ root ได้
      บางครั้งระบุอนุญาตไว้ชัดเจนผ่าน sudo -l หรือบางครั้งมีอย่างอื่นเรียกเครื่องมือนั้นในฐานะ root อยู่แล้ว
  • น่าจะดีถ้ามีการแสดง วิธีบรรเทา สำหรับการอ้อมแบบนี้ควบคู่ไปด้วย
    ตัวอย่างเช่นกรณีได้เชลล์จาก more
    ตั้ง SHELL เป็น /bin/false ก่อนรัน more
    เปลี่ยนไปใช้ less ใน secure mode
    หรือถ้าใช้ more ผ่าน sudo ก็ใช้ NOEXEC flag เป็นต้น

    • วิธีบรรเทาที่ดีที่สุดคือ ตั้ง สิทธิ์จริงของไฟล์ ที่ผู้ใช้ไม่ควรอ่านหรือเขียนให้ถูกต้องตั้งแต่แรก
      วิธีอื่น ๆ ที่เหลือสุดท้ายก็มีส่วนที่ต้องหวังดวงอยู่มาก
  • เจ๋งดี และมีวิธีที่สร้างสรรค์แบบคาดไม่ถึงด้วย
    อย่าง yt-dlp นี่ผมนึกไม่ถึงเลย
    คงต้องกลับไปคิดใหม่แล้วว่าจะติดตั้งมันไว้ดีไหม