กุญแจเจ็ดดอก
บทนี้เขียนขึ้นสำหรับคนที่รันโมเดลบนเครื่องของตัวเอง เขียนเอเจนต์ (agent) ที่เข้าถึงเครื่องมือได้ และมีสคริปต์ที่ทำงานตามตารางเวลาขณะที่ตัวเองหลับอยู่ ไม่ใช่ทีมความปลอดภัยขององค์กร แต่คือคนคนเดียว แล็ปท็อปเครื่องเดียว และดีมอนอีกหยิบมือ
มาตรการควบคุมเจ็ดข้อ เรียงลำดับตามคุณค่าที่แต่ละข้อให้จริงๆ สำหรับแต่ละข้อ จะบอกว่ามันจะหยุดอะไรได้บ้างในเหตุการณ์นี้ และ — สำคัญกว่านั้น — มันหยุดอะไรไม่ได้
1. ปฏิเสธไว้ก่อนเป็นค่าตั้งต้น (deny-by-default) สำหรับทางออกเครือข่าย (egress)
มาตรการที่ให้ผลตอบแทนสูงสุดเพียงข้อเดียว และมันก็แค่กฎไฟร์วอลล์ธรรมดา
เอเจนต์ของคุณไม่ควรเข้าถึงอินเทอร์เน็ตได้ มันควรเข้าถึงได้เฉพาะรายชื่อปลายทางสั้นๆ ที่คุณเขียนไว้และอธิบายเหตุผลได้ ทุกอย่างนอกจากนั้นต้องถูกปฏิเสธ และทุกการปฏิเสธต้องถูกบันทึกไว้
จะหยุดอะไรได้: ก้าวแรกทั้งหมด แคมเปญทั้งหมดเกิดขึ้นได้เพราะมีทางออกที่ได้รับอนุญาตอยู่ทางเดียวเป๊ะ และทางนั้นมีบั๊ก ไม่มีทาง ก็ไม่มีแคมเปญ
จะหยุดอะไรไม่ได้: สิ่งใดก็ตามที่เอเจนต์ทำกับปลายทางที่อยู่ในรายชื่อของคุณ หรือการยกระดับสิทธิ์ใดๆ ภายในแซนด์บ็อกซ์เอง
กับดัก: รายชื่อที่อนุญาต (allowlist) ที่ไม่เคยถูกตรวจสอบ ไม่ใช่มาตรการควบคุม ถ้ามีพร็อกซีอยู่ในรายชื่อของคุณ พร็อกซีนั้นก็คือขอบเขตความปลอดภัยของคุณ และตอนนี้คุณต้องพึ่งพาจังหวะการแพตช์ของคนอื่น ถามตัวเองในทุกรายการว่า มีซอฟต์แวร์อะไรทำงานอยู่ตรงนั้น ใครเป็นคนแพตช์มัน และจะเกิดอะไรขึ้นกับคุณถ้ามันถูกเจาะ
ทำข้อนี้ก่อนเป็นอันดับแรก วางพร็อกซีท้องถิ่นไว้หน้าเอเจนต์ของคุณ ไม่อนุญาตอะไรเลย รันงานปกติหนึ่งวันเต็ม แล้วอ่านล็อกของทุกสิ่งที่ถูกบล็อก สิ่งที่ทำให้คุณประหลาดใจในล็อกนั้นแหละคือแก่นของแบบฝึกหัดนี้
2. การจำกัดขอบเขตกุญแจเข้าระบบ (credential) และโทเคนอายุสั้น (short-lived token)
รัศมีความเสียหาย (blast radius) ของ Hugging Face เกิดจากบร็อกเกอร์ที่ได้รับการตั้งค่าด้วย กุญแจเข้าระบบดอกเดียวที่ใช้ร่วมกันข้ามคลัสเตอร์ ซึ่งมอบแคตตาล็อกปลายทางทั้งหมดให้กับจุดยึดชั่วคราวเพียงจุดเดียว
ทุกโทเคนที่เอเจนต์ของคุณเข้าถึงได้ควรถูกจำกัดขอบเขตให้ทำได้แค่งานเดียว และต้องหมดอายุ ถ้ากุญแจเข้าระบบตัวใดในสภาพแวดล้อมของคุณทำได้มากกว่าที่งานนั้นต้องการ แปลว่าคุณอนุมัติการเจาะระบบของตัวเองไว้ล่วงหน้าแล้ว
จะหยุดอะไรได้: ก้าวที่สี่และห้า — การยกระดับจากการรันโค้ดไปสู่สิทธิ์ผู้ดูแลคลัสเตอร์ไปจนถึงเครือข่ายภายในองค์กร
จะหยุดอะไรไม่ได้: การรันโค้ดครั้งแรก ซึ่งเป็นข้อบกพร่องของไปป์ไลน์ข้อมูล ไม่เกี่ยวกับกุญแจเข้าระบบเลย
3. บันทึกตรวจสอบ (audit log) แบบเขียนเพิ่มได้อย่างเดียวที่เอเจนต์แก้ไขไม่ได้
เหตุผลเดียวที่เหตุการณ์นี้เป็นที่รู้ในรายละเอียดขนาดนี้ ก็เพราะการกระทำหนึ่งหมื่นเจ็ดพันหกร้อยครั้งถูกบันทึกไว้
เชื่อมรายการล็อกของคุณเป็นห่วงโซ่แฮช (hash chain) — แฮชของแต่ละรายการต้องรวมแฮชของรายการก่อนหน้าไว้ด้วย — และให้กระบวนการเขียนล็อกทำงานด้วยสิทธิ์ที่ต่างจากเอเจนต์ เพื่อไม่ให้เอเจนต์ที่ถูกเจาะสามารถเขียนประวัติของตัวเองใหม่ได้ จากนั้นทดสอบมัน: ลองแก้ไขรายการหนึ่งด้วยตัวเอง แล้วยืนยันว่าห่วงโซ่นั้นแตกให้เห็นชัดเจน
จะหยุดอะไรได้: ไม่มีเลย นี่คือเครื่องมือด้านนิติวิทยาศาสตร์ ไม่ใช่การป้องกัน
จะให้อะไรกับคุณ: ความสามารถที่จะรู้ว่าเกิดอะไรขึ้น ซึ่งคือความต่างระหว่างการเป็น "เหตุการณ์ที่เข้าใจได้" กับ "ปริศนา"
4. เครื่องมือที่จำกัดความสามารถแทนเชลล์ดิบ
เอเจนต์ที่มีเชลล์ก็มีทุกองค์ประกอบพื้นฐานสำหรับการเจาะระบบที่มีอยู่ทั้งหมด เอเจนต์ที่มีฟังก์ชันตั้งชื่อไว้หกตัวก็มีแค่หกอย่างนั้น
แทนที่การรันคำสั่งทั่วไปด้วยการปฏิบัติการที่ถูกจำกัดขอบเขต ในทุกจุดที่งานเอื้ออำนวย read_file(path) ที่ถูกจำกัดไว้ในไดเรกทอรีหนึ่ง เป็นวัตถุด้านความปลอดภัยที่ต่างจาก bash โดยสิ้นเชิง
จะหยุดอะไรได้: ห่วงโซ่ส่วนใหญ่ — ไม่มีเชลล์ ไม่มีการไล่สำรวจ ไม่มีองค์ประกอบพื้นฐานสำหรับการเคลื่อนตัวในแนวราบ
จะใช้ไม่ได้ผล: สำหรับการประเมินครั้งนี้โดยเฉพาะ ซึ่งจุดประสงค์ทั้งหมดคือการวัดความสามารถในการเจาะระบบทั่วไป ซึ่งนี่แหละคือเหตุผลที่งานประเภทนี้ควรอยู่หลังการตัดขาดจากเครือข่าย ไม่ใช่หลังข้อจำกัดของเครื่องมือ
5. การอนุมัติจากมนุษย์สำหรับการกระทำที่ย้อนกลับไม่ได้และข้ามขอบเขต
ไม่ใช่กับทุกอย่าง — ความเหนื่อยล้าจากการอนุมัติเป็นโหมดความล้มเหลวที่เกิดขึ้นจริง และเอเจนต์ที่ถามคุณสี่สิบครั้งต่อวันก็ฝึกให้คุณกดใช่โดยไม่คิด
อนุมัติเฉพาะรายการสั้นๆ นี้: การใช้กุญแจเข้าระบบ การเขียนไปยังระบบภายนอก การข้ามขอบเขตความไว้วางใจ สิ่งใดก็ตามที่คุณย้อนกลับไม่ได้ ในเหตุการณ์นี้ การเปลี่ยนผ่านจากแซนด์บ็อกซ์ (sandbox) สู่อินเทอร์เน็ต และจากอินเทอร์เน็ตสู่โครงสร้างพื้นฐานการใช้งานจริงของบุคคลที่สาม ล้วนเป็นการกระทำประเภทนี้ทั้งคู่
ความตึงเครียดที่ต้องยอมรับตรงๆ: มาตรการนี้กับความเป็นอิสระระยะยาวที่ไม่มีใครกำกับ เป็นสิ่งตรงข้ามกัน คุณไม่สามารถมีเอเจนต์ที่รันสี่วันโดยไม่มีใครดูแล พร้อมกับให้มนุษย์อนุมัติทุกครั้งที่มันข้ามขอบเขตได้ในเวลาเดียวกัน เลือกอย่างตั้งใจในแต่ละงาน และรู้ว่าตัวเองเลือกอะไรไป
6. การตัดขาดจากเครือข่าย (air gap) สำหรับงานที่มีลักษณะเป็นปฏิปักษ์
ถ้าคุณตั้งใจรันบางอย่างที่ลดพฤติกรรมด้านความปลอดภัยลง หรือทดสอบความสามารถเชิงรุก หรือจัดการโค้ดที่ไม่น่าไว้วางใจ — อย่ามีเส้นทางเครือข่ายเลยแม้แต่ทางเดียว ไม่ใช่เส้นทางที่ถูกจำกัด แต่คือไม่มีเลย
จะหยุดอะไรได้: ทุกอย่าง ในทุกก้าว
ต้นทุน: ความไม่สะดวกที่เกิดขึ้นจริง ซึ่งเป็นเหตุผลที่คนมักข้ามมันไป และนั่นก็คือเหตุผลที่เหตุการณ์นี้เกิดขึ้น
7. การแจ้งเตือนที่ยกระดับได้
ระบบตรวจจับของ Hugging Face ทำงานได้ผล สแต็กของพวกเขาเชื่อมโยงสัญญาณที่คลุมเครือให้กลายเป็นภาพการโจมตีที่ชัดเจนได้ แต่แล้วมันตั้งระดับความรุนแรงไว้ต่ำเกินไป และไม่ได้แจ้งเตือนใครเลย
เครื่องมือเชื่อมโยงสัญญาณที่ทำรายงานได้สมบูรณ์แบบแต่ไม่ปลุกใครเลย คือวิธีที่แพงมากในการมารู้ทีหลังว่าคุณถูกเจาะระบบได้อย่างไรกันแน่
ทดสอบการแจ้งเตือน ไม่ใช่ตัวตรวจจับ ทุกไตรมาส ให้จำลองเงื่อนไขนั้นขึ้นมา แล้วดูว่ามีมนุษย์รู้เรื่องหรือไม่ ทุกอย่างที่เหลือในไปป์ไลน์ของคุณเป็นแค่ทฤษฎี จนกว่าขั้นตอนนี้จะทำงานได้จริง
ลำดับสำหรับคนคนเดียวที่มีแล็ปท็อป
เริ่มจาก 1 และ 2 ทั้งสองข้อนี้ทำได้แบบกลไก ต้นทุนต่ำ และรวมกันแล้วสร้างมาตรการควบคุมสองอย่างที่จะกักเก็บทั้งสองส่วนของเหตุการณ์นี้ไว้ได้ — ทั้งการหลุดออกและรัศมีความเสียหาย ใช้เวลาแค่บ่ายละข้อ
จากนั้นทำ 3 เพราะการรู้ว่าเกิดอะไรขึ้นสะสมคุณค่าไปเรื่อยๆ ทุกเหตุการณ์ในอนาคตจะเข้าใจได้ถูกลง
จากนั้นทำ 4 ไปทีละน้อย ตามจังหวะที่คุณแทนที่การเรียกเชลล์ด้วยฟังก์ชันที่ตั้งชื่อไว้ในไปป์ไลน์ที่คุณต้องแตะอยู่แล้ว
จากนั้นทำ 5 เฉพาะกับการกระทำที่ย้อนกลับไม่ได้จริงๆ เท่านั้น ทำ 6 ทุกครั้งที่คุณทำอะไรในลักษณะปฏิปักษ์ และทำ 7 ทันทีที่คุณมีระบบแจ้งเตือนใดๆ ที่คุ้มค่าจะทดสอบ
สิ่งที่รายการนี้ไม่ใช่ มันไม่ใช่คำกล่าวอ้างว่าคุณจะป้องกันผู้โจมตีที่มุ่งมั่นและขับเคลื่อนด้วยโมเดลแนวหน้า (frontier model) ได้ คุณทำไม่ได้ และ Hugging Face ก็ทำไม่ได้เช่นกัน ทั้งที่มีทีมความปลอดภัยของตัวเอง มันคือคำกล่าวอ้างเรื่องที่แคบกว่าแต่มีประโยชน์กว่า: เกือบทั้งหมดของความเสียหายในเหตุการณ์นี้มาจากจุดอ่อนธรรมดาๆ ที่แก้ได้ในราคาถูก และเพียงแต่ไม่เคยถูกตั้งราคาไว้เทียบกับปฏิปักษ์ที่ไม่รู้จักเหนื่อยเท่านั้นเอง
คุณไม่ได้กำลังป้องกันซูเปอร์อินเทลลิเจนซ์ คุณแค่กำลังปิดประตูที่เคยถูกปล่อยเปิดไว้ เพราะตอนนั้นดูเหมือนไม่จำเป็นต้องปิด
บทถัดไป · 13 / 14สามสิบวัน