4 คะแนน โดย GN⁺ 2025-06-02 | 2 ความคิดเห็น | แชร์ทาง WhatsApp
  • 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 ความคิดเห็น

 
ndrgrd 2025-06-03

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

 
GN⁺ 2025-06-02
ความคิดเห็นจาก Hacker News
  • ราว ๆ 10 ปีก่อน ตอนที่ network namespace กำลังเป็นประเด็นร้อน เคยมีโอกาสคุยกับนักพัฒนา Tor เรื่องนี้ ความเห็นที่ได้รับตอนนั้นคือ การแยกผ่าน namespace ทำให้คนรู้สึกอุ่นใจเรื่องความปลอดภัย แต่ก็ยังมีข้อมูลที่ใช้ระบุตัวตนได้อีกมากที่อาจรั่วไหล จึงจำได้ว่าไม่ได้เดินหน้าต่อ
    • คิดว่าการที่ทีม Tor เน้นประเด็นนั้นมากเกินไปเป็นความผิดพลาดเชิงกลยุทธ์ คนที่เผชิญภัยคุกคามร้ายแรงก็ควรใช้ Tor Browser และระวังช่องทางข้อมูลรั่วอื่น ๆ ด้วยก็จริง แต่ถ้า Tor กลายเป็นค่าเริ่มต้นสำหรับทุกคน การสอดส่องในวงกว้างก็น่าจะทำได้ยากกว่ามาก ตอนนี้แค่การรู้ว่าใครใช้ Tor ก็กลายเป็นเป้าการเฝ้าระวังแล้ว แต่ถ้าทุกคนใช้ ข้อมูลนั้นก็จะหมดความหมาย
    • torsock และ torify ก็ทำหน้าที่คล้ายกันโดยพื้นฐาน แต่รู้สึกว่ายังไม่แข็งแรงทนทานเท่า
  • ถ้ารันตามคำสั่งในคู่มือติดตั้งจะใช้งานไม่ได้ ต้องเปลี่ยนหมายเลขเวอร์ชันจาก 0.4.0 เป็น 0.5.0
    cargo install --git https://gitlab.torproject.org/tpo/core/oniux oniux@0.5.0
  • ตอนแรกฉันคิดว่าเหมือน torsocks คือทราฟฟิกจะออกผ่าน tor daemon ที่รันอยู่บนเครื่อง แต่พอปิด local tor daemon แล้ว oniux ก็ยังทำงานได้ดี ในขณะที่ torify กับ torsocks ใช้งานไม่ได้ ดูจากเอกสารแล้วก็เป็นแบบนั้นจริง ๆ เป็นเรื่องที่น่าสนใจมาก ใช้งานใน docker ก็ได้ดี แต่ต้องใช้ตัวเลือก --privileged และแค่คัดลอกไบนารีไปไว้ในคอนเทนเนอร์ debian:12 ก็ทำงานได้ปกติ
    docker run -it --rm --privileged -v "$PWD/oniux:/usr/bin/oniux" debian:12
    • สงสัยว่าอาจเป็นเพราะมันใช้ไลบรารีตัวใหม่ที่เขียนด้วย Rust แทน C daemon แบบเก่า
      https://tpo.pages.torproject.net/core/arti/
  • สงสัยว่าทั้งหมดนี้ใช้ได้เฉพาะกับ TCP หรือเปล่า หมายถึงทราฟฟิกที่ไม่ใช่ TCP จะได้รับการปกป้องด้วยไหม
    • ไม่รู้รายละเอียดนัก แต่ดูจาก https://gitlab.torproject.org/tpo/core/onionmasq เหมือนเป็นความพยายามสร้าง user-space network stack ที่รองรับทั้ง TCP และ UDP แล้ว forward เข้าเครือข่าย Tor
    • อยากรู้ว่าคนที่ใช้ Tor Browser จัดการกับ YouTube, DNS และ HTTP/3 กันอย่างไร
    • ทราฟฟิกที่ไม่ใช่ TCP จะไม่ถูก route และจะส่งไม่สำเร็จไปเลย
  • Oniux ดูเหมือนเป็นเครื่องมือที่ได้รับการสนับสนุนอย่างเป็นทางการ คล้ายกับ orjail แต่ orjail ไม่มี commit มา 4 ปีแล้ว ถึงอย่างนั้นก็ยังใช้งานได้ดีในรูปแบบ shell script ร่วมกับเครื่องมือ iptables/iproute
    orjail ยังมีตัวเลือกให้แยกเพิ่มด้วย firejail ได้ด้วย แต่ Oniux ยังไม่มีฟีเจอร์นั้น
    https://github.com/orjail/orjail/blob/master/usr/sbin/orjail
  • ตอนนี้สงสัยว่าสามารถใช้ chrome เข้าเว็บไซต์ tor ได้ไหม
    • ทำได้ แต่ไม่แนะนำให้ทำ เพราะ chrome ไม่มีมาตรการ anti-fingerprinting หลายอย่างแบบที่มีใน Tor Browser การใช้เบราว์เซอร์ทั่วไปจะยิ่งทำให้คุณโดดเด่นกว่าเดิม
    • จริง ๆ แล้วทำได้มานานแล้ว แค่ตั้งค่า proxy environment variable (หรือการตั้งค่า) ให้ถูกต้องก็ใช้เบราว์เซอร์อย่าง chrome ได้ พอร์ตมาตรฐานของ tor daemon คือ 9050 และการเขียน socks proxy เองเพื่อ route ทราฟฟิกก็ไม่ได้ยากนัก ตัวอย่างเช่นใช้ socks5 proxy ส่งทราฟฟิกไปยังอย่าง syncthing ก็ได้
      https://github.com/acheong08/syndicate
  • ยกตัวอย่าง hexchat แต่ถ้าใช้การตั้งค่าโปรไฟล์เดิมของผู้ใช้ จะทำให้ชื่อผู้ใช้ IRC รั่วหรือเปล่า
    ถ้าเปิดเบราว์เซอร์ก็อาจมีข้อมูลอย่างคุกกี้รั่วได้ด้วย
    • การแยกบทบาทเป็นเรื่องสำคัญ Tor พยายามอย่างมากในการป้องกัน fingerprinting แต่โดยพื้นฐานแล้วจุดประสงค์ของ Tor และ Oniux คือทำให้ติดตามต้นทางของ IP ไม่ได้ ถ้าไปล็อกอิน Gmail ผ่าน Tor ก็จะเจอปัญหาเดียวกัน (เว้นแต่จะไม่มีการใช้ HTTPS)
    • สงสัยว่าคำว่า "ทำให้ชื่อผู้ใช้รั่ว" หมายถึงอะไร ในทางปฏิบัติมันเพียงแค่บอกว่าชื่อผู้ใช้นั้นใช้ Tor ถ้าชื่อผู้ใช้เดิมเชื่อมต่อกับ IRC host เดิมซ้ำ ๆ ก็อาจทำให้รู้ได้ว่าเป็นคนเดียวกัน IRC จึงเป็นช่องทางที่ค่อนข้างเสี่ยงถ้าต้องการความไม่เปิดเผยตัวตน หลายคนเก็บล็อกเชื่อมโยงกับเหตุการณ์อย่างการหลุดจากเครือข่าย จึงอาจเปิดเผยความเชื่อมโยงกันได้
  • ส่วน DevEx (ประสบการณ์นักพัฒนา) ทำได้ดีมาก จนรู้สึกว่าใช้งานง่ายแบบกันพลาดสุด ๆ อยากปรบมือให้ทีมพัฒนา
    • อันที่จริงก็ไม่ถึงขนาดนั้น คนที่ทำพลาดมักสร้างสรรค์ได้เสมอ และการรักษาความไม่เปิดเผยตัวตนต้องอาศัยการใช้งานที่ระมัดระวังมาก ซึ่งเป็นระดับที่ยากจะคาดหวังจากผู้ใช้ส่วนใหญ่
  • ถ้าเขียนโค้ดใหม่เป็น C เมื่อไร ฉันยินดีใช้อย่างเต็มใจ
    • มันเขียนด้วย Rust อยู่แล้ว เลยสงสัยว่าทำไมถึงอยากได้เวอร์ชัน C โดยเฉพาะ