แนะนำ Oniux เครื่องมือแยก Tor ระดับเคอร์เนลสำหรับแอปลินุกซ์
(blog.torproject.org)- Oniux เป็นเครื่องมือแยกระดับเคอร์เนลที่บังคับให้ทราฟฟิกทั้งหมดของแอปลินุกซ์วิ่งอ้อมผ่าน เครือข่าย Tor เพื่อลด ความเสี่ยงจากข้อมูลรั่วไหล ให้เหลือน้อยที่สุด
- ใช้ Linux namespaces เพื่อแยกแต่ละแอปออกไปอยู่ในสภาพแวดล้อมเครือข่ายอิสระ และทำให้การสื่อสารผ่าน Tor ปลอดภัย
- ต่างจาก torsocks ตรงที่ทำงานได้แม้กับ ไบนารีแบบ static หรือโปรแกรมที่ไม่ใช้ libc จึงปิดกั้นช่องทางการรั่วไหลของข้อมูลโดยตรงจากแอปอันตรายได้
- Oniux สร้างขึ้นบนพื้นฐานของ Arti และ onionmasq ตัวใหม่ และเขียนด้วย Rust จึงเสริมทั้งด้านความปลอดภัยและความสามารถในการขยายระบบ
- ขณะนี้ Oniux ยังเป็น เครื่องมือเชิงทดลอง จึงต่างจาก torsocks ที่ผ่านการพิสูจน์ด้านเสถียรภาพมาแล้ว แต่กำลังได้รับความสนใจในฐานะโซลูชันแยกทราฟฟิก Tor รุ่นถัดไป
แนะนำ Oniux
Oniux เป็นยูทิลิตีบรรทัดคำสั่งที่ช่วยยกระดับการปกป้องข้อมูลส่วนตัวอย่างมากผ่านการแยกเครือข่าย Tor บนลินุกซ์ ออกแบบมาเพื่อให้ผู้พัฒนา นักกิจกรรม และนักวิจัยสามารถปิดกั้นความเป็นไปได้ที่ข้อมูลจะรั่วไหลจากการตั้งค่าพร็อกซีผิดพลาดหรือความเผลอเล็กน้อยได้อย่างสิ้นเชิง Oniux ทำงานอยู่บน Arti และ onionmasq โดยแยกแอปลินุกซ์ทุกตัวไปไว้ใน network namespace แยกต่างหาก และบังคับให้ทราฟฟิกวิ่งผ่านเครือข่าย Tor เท่านั้น
Linux namespace คืออะไร
- Namespace เป็นความสามารถหลักด้านการแยกของเคอร์เนลลินุกซ์
- ช่วยแยกทรัพยากรบางส่วนของแอปพลิเคชันออกจากทั้งระบบในเชิง ตรรกะ
- สามารถใช้เทคนิคนี้แยกทรัพยากรได้หลากหลาย เช่น เครือข่าย การเมานต์ และโปรเซส
- แต่ละ namespace จะแยก ทรัพยากรของระบบปฏิบัติการ ออกจากกัน เพื่อนำไปใช้ในสภาพแวดล้อมคอนเทนเนอร์หรือเพื่อความปลอดภัย
- โซลูชันคอนเทนเนอร์ชื่อดังอย่าง Docker ก็ใช้ namespace เป็นหลักการพื้นฐาน
ความหมายของการผสาน Tor กับ namespace
- Namespace ช่วยปกป้องการเข้าถึง เครือข่าย Tor ของแอปพลิเคชันใด ๆ ด้วยการแยกอย่างสมบูรณ์
- วางแต่ละแอปไว้ใน network namespace ของตัวเอง และเปิดให้เห็นเฉพาะอินเทอร์เฟซแบบกำหนดเองชื่อ onion0
- แอปจึงไม่สามารถเข้าถึงอินเทอร์เฟซเครือข่ายของทั้งระบบปฏิบัติการได้ (เช่น eth0) ทำให้ ความปลอดภัยสูงสุด เป็นไปได้
- ต่างจากวิธีพร็อกซีแบบ SOCKS ที่อาจมีความผิดพลาดหรือช่องโหว่ เพราะวิธีนี้ไม่มีความเสี่ยงที่ทราฟฟิกจะ รั่วไหลออกโดยตรง
เปรียบเทียบ Oniux กับ torsocks
- Torsocks ใช้วิธี hook ฟังก์ชันเครือข่ายของ libc ด้วยเทคนิค LD_PRELOAD เพื่อบังคับให้วิ่งผ่าน SOCKS proxy ของ Tor
- Oniux ทำงานด้วยการ แยกด้วย namespace จึงป้องกันการรั่วไหลของทราฟฟิกได้ 100% แม้ใน ไบนารีแบบ static หรือภาษาอย่าง Zig
- ประเด็นเปรียบเทียบหลัก
- Oniux: ไม่ต้องมี Tor daemon แยก ใช้ namespace รองรับทุกแอป บล็อกได้แม้ raw system call จากแอปอันตราย ใช้ได้บนลินุกซ์เท่านั้น ใหม่/เชิงทดลอง ใช้ Arti เป็นฐาน เขียนด้วย Rust
- Torsocks: ต้องมี Tor daemon ใช้วิธีดัดแปลง ld.so รองรับเฉพาะแอปที่เชื่อมกับ libc, raw system call ยังอาจรั่วไหลได้, ข้ามแพลตฟอร์ม, ผ่านการพิสูจน์มากว่า 15 ปี, ใช้เอนจิน CTor, เขียนด้วย C
วิธีใช้งาน Oniux
- ต้องใช้ ระบบลินุกซ์ ที่ติดตั้งสภาพแวดล้อมพัฒนา Rust ไว้แล้ว
- สามารถติดตั้งและรัน oniux ได้ง่าย ๆ จากบรรทัดคำสั่ง
ตัวอย่างการใช้งานหลัก:
- $ oniux curl https://icanhazip.com # ตรวจสอบ IP ที่ได้จากการวิ่งผ่าน Tor
- $ oniux bash # รันเชลล์ทั้งตัวภายใต้การแยกผ่าน Tor
- $ oniux hexchat # บังคับให้แอป GUI วิ่งผ่าน Tor ได้เช่นกัน
- $ RUST_LOG=debug oniux curl ... # รองรับ logging สำหรับดีบัก
หลักการทำงานภายใน
- Oniux ใช้ system call
clone(2)เพื่อสร้างโปรเซสลูกใน namespace แยกสำหรับเครือข่าย การเมานต์ PID และผู้ใช้ - โปรเซสลูกจะเมานต์
/procแยกต่างหาก และปรับสิทธิ์ด้วยการแมป UID/GID - ทำ bind mount ไฟล์ชั่วคราวที่มีข้อมูล name server ไปยัง
/etc/resolv.confเพื่อบังคับใช้ ตัวแก้ชื่อโดเมนที่อิง Tor - สร้าง TUN interface (onion0) ด้วย onionmasq แล้วกำหนดและตั้งค่า IP
- โปรเซสลูกส่ง interface fd ไปยังโปรเซสแม่ผ่าน Unix domain socket เพื่อลดสิทธิ์ให้เหลือน้อยที่สุด
- จากนั้นใช้ความสามารถของ Rust เพื่อรันคำสั่งที่ผู้ใช้ป้อนในขั้นสุดท้าย
ลักษณะเชิงทดลองของ Oniux
- Oniux เป็นเวอร์ชันเริ่มต้นที่สร้างขึ้นบนพื้นฐานของ เทคโนโลยีใหม่อย่าง Arti และ onionmasq
- แม้ตอนนี้จะทำงานได้ตามปกติ แต่ยังขาดประสบการณ์ความสุกงอมระยะยาวแบบที่ torsocks มี
- ยังต้องการฟีดแบ็กจากการใช้งานจริงที่หลากหลายเพื่อเพิ่มเสถียรภาพและปรับปรุงประสิทธิภาพ
เครดิตและการสนับสนุน
- กล่าวขอบคุณนักพัฒนาอย่าง 7ppKb5bW ที่ให้คำแนะนำในการพัฒนาสต็ก IP บน Rust อย่าง smoltcp และแนวทางการใช้ user namespace
- โปรเจกต์ oniux ได้รับการดูแลผ่านการสนับสนุนจาก The Tor Project และชุมชน และแนะนำให้ช่วยสนับสนุนเพื่อส่งเสริม ความเป็นส่วนตัวและซอฟต์แวร์โอเพนซอร์ส
2 ความคิดเห็น
ดูเหมือนว่า Tor จะไม่ได้แย่สำหรับเรื่องความเป็นส่วนตัวนัก แต่ผมก็ยังไม่แน่ใจว่ามันเป็นเครื่องมือที่เหมาะกับการไม่เปิดเผยตัวตนหรือเปล่า อีกทั้งก็มีคนพูดกันว่าโหนดทางออกถูกหน่วยงานของรัฐเข้าควบคุมไว้แล้วด้วย
ความคิดเห็นจาก Hacker News
torsockและtorifyก็ทำหน้าที่คล้ายกันโดยพื้นฐาน แต่รู้สึกว่ายังไม่แข็งแรงทนทานเท่าcargo install --git https://gitlab.torproject.org/tpo/core/oniux oniux@0.5.0torsocksคือทราฟฟิกจะออกผ่าน tor daemon ที่รันอยู่บนเครื่อง แต่พอปิด local tor daemon แล้วoniuxก็ยังทำงานได้ดี ในขณะที่torifyกับtorsocksใช้งานไม่ได้ ดูจากเอกสารแล้วก็เป็นแบบนั้นจริง ๆ เป็นเรื่องที่น่าสนใจมาก ใช้งานใน docker ก็ได้ดี แต่ต้องใช้ตัวเลือก--privilegedและแค่คัดลอกไบนารีไปไว้ในคอนเทนเนอร์debian:12ก็ทำงานได้ปกติdocker run -it --rm --privileged -v "$PWD/oniux:/usr/bin/oniux" debian:12https://tpo.pages.torproject.net/core/arti/
orjailแต่orjailไม่มี commit มา 4 ปีแล้ว ถึงอย่างนั้นก็ยังใช้งานได้ดีในรูปแบบ shell script ร่วมกับเครื่องมือiptables/iprouteorjailยังมีตัวเลือกให้แยกเพิ่มด้วยfirejailได้ด้วย แต่ Oniux ยังไม่มีฟีเจอร์นั้นhttps://github.com/orjail/orjail/blob/master/usr/sbin/orjail
https://raw.githubusercontent.com/orjail/orjail/master/usr/sbin/orjail
syncthingก็ได้https://github.com/acheong08/syndicate
hexchatแต่ถ้าใช้การตั้งค่าโปรไฟล์เดิมของผู้ใช้ จะทำให้ชื่อผู้ใช้ IRC รั่วหรือเปล่าถ้าเปิดเบราว์เซอร์ก็อาจมีข้อมูลอย่างคุกกี้รั่วได้ด้วย