ปัญหาต่างๆ ที่มักพบ กับ โปรแกรมคุมเน็ต หรือ ระบบควมคุมเน็ตหอพัก

เคยเขียนเป็นบทความเก่าๆ สำหรับคนพัฒนาโปรแกรม และ ให้ความรู้ทั่วไป ผมเลยนำเอามาลงเว็บใหม่ ถึงแม้หลายๆ อย่าง อาจจะไม่ใช่ ปัญหาที่พบปัจจุบันแล้ว ก็ตาม

ยุคก่อนเน็ตยังไม่เข้ามาในกลุ่มมือถือ แน่นอนว่า ค่าใช้จ่ายเรื่องพวกนี้ก็สูง ก็ธรรมดาต้องมี เรื่อง ของผู้ที่มักจะโจมตี หรือหาทางใช้งานเน็ตฟรี
 
  1. เคยดู Clip วีดีโอ ของโปรแกรมควบคุม ยี่ห้อ หนึ่ง ดูไปเพลินๆ ก็ถึงตอน Login เข้าระบบ Authentication มีหน้าจอเล็ก แต่ก็เห็นมี URL ที่เกิดจากการ Submit ตอนลีอกอิน แล้วเห็น URL ตามด้วยค่าล๊อกอินและพาส ประมาณนี้ http://x.x.x.x/login?user=xxxx&pass=xxxx จุดนี้ไม่ควรจะมีอย่างยิ่งเลย เพราะง่ายเกินไป ถึงแม้หน้าจอนั้น จะปรากฎแค่สักพัก ก่อนจะ Redirect ไปหน้าอื่น เพราะที่เครื่องดักข้อมูล จะเห็นตลอด เป็นเหมือนดู log ไฟล์

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

    วิดีโอ แสดง ปัญหา 2 จุด คือ ใช้ http ไม่ใช่ https สำหรับหน้าล๊อกอิน และ ส่งค่าผ่าน URL
    video
     
  2. หน้าล๊อกอิน ไม่เข้ารหัส สิ่งที่ต้องคำนึงเสมอคือ ข้อมูลที่ส่งผ่านเครือข่าย โดยเฉพาะเน็ตไร้สาย ไม่ปลอดภัย เหมือนมีคนดักข้อมูล เหมือนดักฟัง โทรศัพท์ ตลอดเวลาโดยการ Sniff Packet ดังนั้นอะไรก็แล้วแต่ที่สำคัญ เช่น รายละเอียดล๊อกอิน และ รหัสผ่าน ควรจะผ่าน การเข้ารหัส ก่อน Submit ทุกครั้ง วิธีสังเกตุ คือ https ไม่ใช่ http (HTTPS คือ ข้อมูลทั้งหมดถูกเข้ารหัส)
    แต่ปัจจุบันนี้ ผมก็ไม่ซีเรียส เรื่องนี้เท่าไหร่ ผมเขียนโปรแกรม ให้ผูกไอดี กับ ค่า Mac ของเครื่องไปเลย เมื่อตอนที่ล๊อกสำเร็จครั้งแรก เพราะ ขโมยไปได้ ก็ยังติดที่ค่าแมค ของเครื่องไม่ตรง ยกเว้น การเอาไปใช้ในกลุ่มที่มีทักษะเก่งๆ กลุ่ม หอพัก มหาลัย บางที่ ผมจะแนะนำให้เซ็ตแบบ ล๊อกอิน ด้วย http (ตัว as2 ผมเขียนให้เซ็ตหน้าล๊อกอินได้ว่า จะใช้แบบ http หรือ https)
     
  3. ใช้โปรแกรม จำพวก VMware ทำเป็นเหมือนมี 2 เครื่อง หรือใช้ 2 เครื่อง หรือ 2 อุปกรณ์ Wireless แล้วใช้ NETCUT ตัดเน็ต เครื่องเป้าหมาย โดยเก็บรายละเอียดทั้ง IP และ Mac address ไว้หรือเซ็ตให้กับ เครื่องหรือตัวที่เซ็ตไว้ อีก IP (ตอนเซ็ต IP ซ้ำ มันจะร้องว่าซ้ำก่อน แต่ถ้า CUT ตัวจริงหลุดก็จะครอง IP นั้นๆ ได้) ต้องใช้ทั้ง IP และ Mac Address เพราะส่วนมาก โปรแกรมควบคุมมัก ควบคุมทั้ง IP และ MAC address เมื่อเลิก CUT เหยื่อ ตอนนี้เหยื่อจะกลายเป็น ผู้ที่ใช้งานไม่ได้แทน เพราะจะได้รับแจ้งว่า IP ซ้ำ แทน เพราะตอนนี้ ตัวจริงกลับกลายไปเป็นตัวปลอม แต่ตัวปลอมกลับมาเป็นต้วจริงแก้ปัญหานี้ ก็ต้องทำ Static Mac Address ทั้ง 2 ฝั่ง (as2 ยังทำ Static Mac ฝั่งเซิฟเวอร์ ถ้าล๊อกอินผ่าน เหมือน ตัวอุปกรณ์รุ่นเก่า)
    ปัญหานี้สมัยก่อน เป็นปัญหาที่ปวดหัว ทุก หอพัก เลยก็ว่าได้ แต่ปัจจุบัน สบายใจได้ เพราะตัว OS หรือ ระบบปฎิบัติการ แก้ปัญหา นี้ หมดแล้ว เรียกได้ว่า มี NETCUT ก็ไม่จะไปตัดเน็ตหรือ CUT ใคร
     
  4.  คล้ายๆ หัวข้อ 2 คือ ขโมยดัก Login และ Password การ Sniff ส่วนมากพวกนี้ มักจะเข้าไปดูที่หน้า ลีฮกอิน ก่อน ว่าผู้พัฒนาใช้ ชื่อตัวแปร Login และ Password ใน Form ว่าอะไร จากนั้น จะดักจับข้อมูลแบบ มีเงื่อนไข Pattern ให้ตรงกับ ตัวแปรนั้นๆ เพื่อที่จะได้ ไม่มีข้อมูลผลลัพธ์ ที่เยอะเกินไป และตรวจหายุ่งยาก เมื่อได้แล้วก็จะเก็บไว้ใช้งาน
     
    แก้ปัญหานี้ ต้องเข้ารหัสที่หน้าล๊อกอิน หรือทำเพิ่มขั้นตอนในการเก็บรายละเอียด Mac Address ผูกกับ Login โดย as2 ก็ใช้วิธีการนี้นอกจากการเข้ารหัส SSL ที่หน้าล๊อกอินแล้ว ในการล๊อกอินใช้งานครั้งแรก ถ้า Mac Address = NULL ก็ให้บันทึกค่า Mac Address เก็บใส่ไว้เลย ดังนั้น ถ้า ล๊อกอิน นั้นๆ เกิดหลุดไปถึงผู้มือผู้อื่น แล้วทำการ Login ก็ตรวจสอบว่า Mac Address ตรงกันหรือไม่ ถ้าไม่ตรง ก็แจ้งประมาณว่า “ไม่สามารถใช้งานต่างเครื่อง” , “Cannot login as a difference machine..”


     
  5. สำหรับ Gateway ที่มักใช้ Proxy หรือทำ transparent proxy แล้วพบว่า เครื่องที่ใช้งาน ไม่ล๊อกอิน แต่ Scan หา Port หรือใช้โปรแกรมจำพวก Scan หา Proxy หรือ WPAD ที่ไว้แจ้งหากันของพวก Auto Proxy แล้วตั้งค่านั้น ทะลุ ออกใช้งานเน็ต โดยไม่ต้องล๊อกอิน ผ่านตัวควบคุม

    แก้ปัญหานี้ ต้องดูว่าท่านเขียนส่วนควบคุม เองหรือใช้พวก Open Source ตัวไหน แต่ส่วนมากจะเหมือนๆ กัน ถ้าเขียนเอง ก็น่าจะแก้ปัญหาได้อยู่แล้ว เพราะเข้าใจหลักอยู่แล้ว ส่วนพวกใช้ของฟรี ก็ลองหา ขั้นตอน ตอนที่จัดการเรื่อง Redirect ไปที่หน้าล๊อกอิน (เพราะทุกค่าย มักจะทำ Redirect ไปที่หน้าล๊อกอิน) แล้วเพิ่มค่าดังกล่าว จาก Port 80 ให้เป็น Port ของ Proxy ด้วย และกำหนดไว้ที่ส่วนที่ Priority ต่ำกว่า เช่น INPUT หรือ FORWARD (ส่วนมากจะเป็น iptables) นั่นหมายความว่า rule ที่เพิ่มนี้ จะปล่อยให้ทะลุ ถ้าท่านผ่านล๊อกอิน ส่วน Filter นั้น มีแค่ 3 ระดับ ไม่แน่ใจก็ใส่ ไปทั้ง 3 ระดับเลยก็เลย คือ “-m mark –mark 1, -m mark –mark 2, -m mark –mark 3″ รายละเอียด ก็ลืมๆ ไปแล้วเหมือนกัน ต้องไปอ่าน พวกเรื่อง mangle อะไรประมาณนี้นะถ้าจำไม่ผิด

    rule แก้ไขเพิ่มเติม สำหรับ ส่วนทำ Transparency Proxy
    iptables ….. -m mark –mark 1 -p tcp -d ! $GatewayIP –dport 80 -j REDIRECT –to-port 3128
    iptables ….. -m mark –mark 2 -p tcp -d ! $GatewayIP –dport 80 -j REDIRECT –to-port 3128
    iptables ….. -m mark –mark 3 -p tcp -d ! $GatewayIP –dport 80 -j REDIRECT –to-port 3128

    ส่วนใส่ rule ไว้ตรงไหน ก็กลับไปค้นหาดู แล้วให้อยู่ระดับล่าง หรือทำงานต่ำกว่า redirect

    นอกจากนี้ ก็เพิ่ม rule สำหรับ ป้องกันการเซ็ตโดยตรง ออกเน็ต โดยไม่ผ่าน การ Authentication ในส่วน INPUT หรือ FORWARD ไว้ให้สูงสุดเลย ก็ได้ รายละเอียด rule ก็ mark และ PORT ก็ให้ตรงกับที่ใช้งาน แค่นี้ก็ป้องกัน การใช้งานตรงได้แล้ว

    หัวข้อนี้เก่ามาก เรื่อง Proxy แนะนำว่า ไม่ต้องใช้แล้ว พร็อกซี่ หมดประโยขน์แล้ว เพราะ 1) ความเร็วโครงข่าย มันเร็วและค่าใช้จ่ายถูกลง กับ 2) เนื้อหาเว็บที่เก็บลง พร็อกซี่ ปัจจุบัน น้อย เพราะ Content 80-90% ที่คนใช้งาน เป็น Dynamic Content คือ เนื้อหา ไม่ใช่เว็บหน้านิ่งๆ เหมือนสมัยก่อน เข้ากี่ทีก็เหมือนเดิมพวกนี้ ที่พอจะมีประโยชน์ ในส่วนเนื้อหาคงเป็นพวก รูปภาพ ที่เนื้อหาไม่เปลี่ยน ต.ย. เช่น LOGO http://website.com/Logo.jpg ก็นับว่าน้อย ปัจจุบันมักเป็นแบบนี้ http://website.com/program?img=Logo.jpg คือไปเรียกผ่านโปรแกรม ประมาณนี้ ส่วนใครที่ยังใช้ ต้องคิดเรื่อง การบำรุงรักษา หรือ Maintain ตัว Proxy ด้วย ยิ่งกำหนดพื้นที่เก็บเยอะ ยิ่งใช้เวลาล้างทิ้งนาน ถ้าเกิดปัญหา
     
  6. สร้าง Connection เยอะๆ เพื่อให้ Server ล่ม ปัญหานี้ มักจะพบกับท่านที่ใช้ Open Source เพราะเห็นๆ Code กันอยู่ คือ ส่วนมาก จะใช้ iptables ให้ redirect ไปยังหน้าล๊อกอิน ขั้นตอนนี้ บางโปรแกรม จะ Redirect ไปที่ Port ของโปรแกรม อีกตัวที่จะไปเรียกหน้าล๊อกอิน ปัญหาไม่ได้อยู่ที่ iptables แต่อยู่ที่ โปรแกรม ที่เปิด Port ไว้รอตรวจสอบเพื่อ Redirect ถ้าโปรแกรมเขียนแล้วใช้ Load หรือ Resource เช่น CPU , RAM น้อยๆ ก็ได้เปรียบ ส่วนมาก Code จะเป็นภาษาซี แต่ก็ยังมีปัญหาแต่น้อยกว่ากลุ่มที่ใช้ พวก Interpreter (พวก C Language จะเป็น Compiler) พวกนี้จะใช้โหลดมากว่าเยอะ

    วิธีการเล่นงาน คือ เปิดหรือสร้าง Connection เยอะๆ ให้เกิด Redirect ที่ Server จนล่ม แต่พวกมืออาชีพจะทำให้เนียน โดยการ ใช้พวก Update Antivirus (ส่วนมากจะใช้ NOD) แล้วใส่ค่า Server ที่ update ไว้เยอะๆ จะได้ไม่ต้องกดบ่อย มันจะสร้างแต่ละครั้งเยอะมากๆ พอจบ ก็กดซ้ำ ไปเรื่อยๆ อีกหน้าต่างก็ทดสอบ Redirect ว่าเริ่มช้าลงหรือยัง เพื่อตรวจสอบผลงาน

    การแก้ปัญหา มีหลายวิธี ตั้งแต่ Block กลุ่ม IP ที่มักสร้างปัญหา ให้หมด โดยกำหนดใน iptables ให้ rule อยู่ระดับสูงกว่า Redirect แต่วิธีนี้ อาจจะมีปัญหากับผู้ใช้งานปกติ คือ ล๊อกอินเข้าระบบแล้วก็ไม่สามารถ update หรือ ไปยังปลายทางที่ block ไว้ได้
    วิธีที่ 2 คือ ดูว่า Open Source ตัวที่ใช้งานนั้นๆ มีตัวแก้ปัญหาหรือไม่ เพราะ Open Source บางตัว จะมีโปรแกรม อีกตัวมาช่วยแก้ปัญหา นี้
    วิธีที่ 3 คือ ใช้ iptables เหมือนแบบวิธีแรก แต่ กำหนดเงื่อนไข จำนวน Limited จำนวน Connection
     
  7. พวก Hacker Tools มีโปรแกรมที่เป็นเครื่องมือ หลายตัวบางตัวก็ทำงานด้านเครื่อข่าย บางตัวก็มีหน้าที่โจมตี เท่าที่พบส่วนมาก จะทำงาน
    7.1 กลุ่ม Scan Port และ Scan IP
    7.2 กลุ่ม ยิง Port ที่อนุญาต หรือเปิดไว้
    7.3 กลุ่ม เล่นงานช่องโหว่ ARP ไม่ว่าจะเป็นพวก NETCUT หรือ หา Share Resource
    7.4 เซิร์ฟเวอร์ที่เป็นลีนุกซ์และติดตั้ง SAMBA ก็มีโอกาสเพิ่มช่องโหว่และถูกโจมตี ส่วน ARP และถ้ายิ่งแย่มากขึ้นถ้า share foder เพราะ สามารถ upload ไวรัสใส่ไว้ รอคนอื่นมัน run หรือเพลอไป เปิด เป็นต้น

    การป้องกันเครื่องจากการทำงานต่างๆ ไม่ยาก แต่นักพัฒนามักจะลืมคือ เมื่อล๊อกอินเข้าระบบได้แล้ว กลับได้ระดับหรือเข้า rule ที่สูงกว่า rule ที่ป้องกัน
     
  8. มี Script สำหรับ ผู้ที่ใช้ ลีนุกซ์ เป็นเซิร์ฟเวอร์ ในการทำ Anti Netcut หรือ นักพัฒนาที่พยายาม ทำ Anti Netcut ที่เซิร์เวอร์ ในการจำ Mac Address ตอนรับค่า DHCP เป็นค่าที่ถูกต้อง และค่อยตรวจว่า Mac เครื่องใดถูก CUT และทำการปรับเปลี่ยให้ถูกต้อง ซึ่งบางครั้งก็วิ่งถึง เครื่องลูกที่ถูก CUT บางคร้งก็ไม่ถึง ซึ่งก็เป็นอีกหนึ่งแนวทาง แต่มันมีผลเสียคืออุปกรณ์ที่เกี่ยวข้องกับเครือข่ายที่ ต้องใช้ Mac Address จะมีโอกาสเสียหาย หรือพังได้เร็วกว่าปกติ วิธีที่ดีสุดคือ พยายามทำ Static ทั้ง 2 ฝั่ง
    หมายเหตุ ถ้าทำ Static ที่ฝั่ง เซิร์ฟเวอร์ การตรวจและใช้งาน Anti Netcut กับเครื่อง Client จะไม่ได้ผลเพราะจะไม่พบว่าเครื่องไหนถูก CUT และอีกข้อคือ นักพัฒนาที่อาศัย ARP Cache ในการตรวจ สถานะ การเชื่อมต่อ (กลุ่มที่เขียนเอง ไม่ได้ใช้ Radius) ก็จะไม่สามารถตรวจว่าเครื่องนั้นๆ ยังคงเชื่อมต่อกับ เซิร์ฟเวอร์ หรือไม่ ถ้าทำ Static Mac ที่ฝั่งเซิร์ฟเวอร์ เพราะจะเห็นค่าเป็นเชื่อมต่อ ตลอดเวลา วิธีแก้ไข SmallOne เปลี่ยนจาก ใช้เซิร์ฟเวอร์ตรวจสถานะ เป็น ให้เครื่องใช้งาน (Client) วิ่งมาแจ้งสถานะ โดย SmallOne ก็ให้วิ่งมาแจ้ง แล้ว Server ก็ส่งผลลัพธ์ เป็นเวลากลับไป จะได้รู้ว่ามีการเปลี่ยนแปลงหรือ วิ่งไปปรับปรุงค่าหรือไม่

    เครื่องมือหลายๆ ตัว จะทำงาน แบบวิ่งออกไปหา ค่าต่างๆ เช่น การเชื่อมต่อ เหมือนคำสั่ง PING, ผ่าน Proxy มากี่ชั้น หรือแม้กระทั่ง ผู้ใช้งานที่มีทักษะ ก็จะตรวจสอบเครื่องตนเองได้ว่า ตอนนี้เราสามารถใช้งานเน็ต หรือ ทะลุผ่านเกตเวย์ ได้หรือไม่ ตัวอย่าง เว็บ ที่แจ้งผลลัพธ์ จากการ PING
    http://64.14.29.50/Ping.asp ซึ่งวิธีเช็ค หรือ เครื่องมือประกอบ ฝั่งเซิร์ฟเวอร์แบบนี้ มีเป็นร้อย บางตัวมีผลลัพธ์แค่บรรทัดเดียว แต่ถ้าใช้ เครื่องมือ ที่เหมาะสมกับมัน จะพบว่า มันส่ง Header ที่เป็นข้อมูลจริงๆ เกี่ยวกับเครือข่าย หลายค่า แต่ยังไงก็มี กลุ่มพวกค่า Environment เหมือน พวก env.cgi หรือ phpinfo.php เป็นพื้นฐานที่ทราบได้ ทั่วไป
     
  9. ARP Cache วิธีการโจมตี คือ จะอาศัยการ Overflow ของ ARP Cache ซึ่งมีโอกาสถูกโจมตี ทุกเซิร์ฟเวอร์ ทุก O.S. หลักการ ก็ประมาณว่า สร้างการเชื่อต่อ ไปยัง IP กลุ่ม 169.254.0.0 ซึ่ง IP กลุ่มนี้ ทุกเครือข่าย ทุกระบบปฎิบัติการ รู้จัก เพราะเป็นไอพีที่กันไว้สำหรับ กลุ่มที่ ไม่ได้รับ IP จาก DHCP แล้วให้วิ่ง ตั้งแต่ 169.254.0.0 – 169.254.255.255 เพื่อให้ ARP Cache ล้น แล้วแต่ว่า O.S. นั้นๆ ใช้ค่ากับส่วนนี้ ขนาดกี่ BIT ซึ่งจะเป็นตัวบอกจำนวนที่เก็บค่า ARP Cache

    การเล่นงานนี้ ต้องใช้เวลาที่รวดเร็วในการโจมตี จึงมักเขียนโปรแกรม ให้ยิงเร็วที่สุด ทั้งนี้เพราะ ARP Cache ที่ปรากฎจะเป็น ค่า IP 169.254.x.x (incomplete) แล้วถ้าเป็น (incomplete) ฝั่งเซิร์ฟเวอร์ ก็จะล้างทิ้ง (Clear) ตลอดเวลา แต่ถ้าลบไม่ทัน กับการถูกยิง ก็อาจจะสร้างปัญหาได้
    วิธีแก้ 1. Block ด้วย rule -d 169.254.0.0/16 -j DROP และ 2. กำหนดค่า Clear Cache ที่เป็น (incomplete) ให้เร็วสุดเลย เช่น 1 วินาที แต่ไม่แน่ใจว่าทำได้หรือไม่ ไม่เคยทดลอง เพราะ SmallOne ใช้วิธีแรก แต่ยังไงถ้าแก้ด้วยวิธีนี้ ให้ลองค้นหาใน Google ดูแล้วกัน

    วิธีการคำนวณ สำหรับ ผู้ที่ลืม หรือ คืน อาจารย์ผู้สอนไปแล้ว ถ้าพยายาม สร้าง ARP Cache แบบที่กล่าวมาข้างต้น เท่ากับว่า จะได้ ARP ทั้งสิ้น 255×255 หรือ 255 ยกกำลัง 2 เท่ากับ 65025 ค่า
    หาก OS ใช้ตัวแปรสำหรับ ARP เป็น แบบ ARRAY (อะแรย์ น่าจะเข้าใจง่ายหน่อย จริงๆ เขียน OS มักไม่ใช้อะแรย์) INTEGER แบบ 32 Bits หรือ 4 Byte จะเท่ากับว่า รองรับได้ 0 ถึง 65535 หรือ ประมาณ 65536 ค่า (unsigned short) ถ้าเช่นนี้ กรณีนี้ ไม่เกิด Overflow อย่างแน่นอน แต่น่าจะมีผล กับการประมวณผล ความสามารถ น่าจะลดลง แต่คงเป็นแค่ช่วงเวลาหนึ่ง
    video

    หัวข้อนี้ก็เก่ามากแล้ว ปัญหานี้ ไม่พบแล้ว กับพวก OS ส่วนมากนักพัฒนาระบบแบบนี้ มักใช้ลีนุกซ์ (Linux) ตัว OS เวอร์ชั่นหลังแก้ปัญหาเรื่องพวกนี้ให้หมดแล้ว
ปัญหาต่างๆ พวกนี้ เป็นบทความเก่ามากที่ ผมรวบรวม ไว้สำหรับ นักพัฒนาและคนที่สนใจ เรื่องพวกนี้ได้อ่าน หลายๆ หัวข้อก็ต้องนับว่า โบราณ มาก ถ้าอ่านตอนนี้ แต่พอดี หามาได้ เลย เอามาลงไว้ เผื่อยังมีประโยชน์ บ้าง