realfp.com

การสแกนพอร์ตคืออะไร?

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



คุณอาจจินตนาการว่าคอมพิวเตอร์เป็นอาคารหลังหนึ่ง และพอร์ตคือหมายเลขห้องแต่ละห้องในอาคารนั้น “หมายเลขห้อง” ที่พบบ่อย ได้แก่ บริการเว็บ HTTP มักใช้พอร์ต 80, เว็บแบบปลอดภัย HTTPS ใช้พอร์ต 443, ส่วนบริการอีเมล SMTP ใช้พอร์ต 25 เมื่อแพ็กเก็ตข้อมูลมาถึงคอมพิวเตอร์ ระบบจะอาศัยหมายเลขพอร์ตเพื่อ “ส่งมอบ” ข้อมูลไปยังบริการหรือแอปพลิเคชันที่เกี่ยวข้องอย่างถูกต้อง



การสแกนพอร์ตคืออะไร?

การสแกนพอร์ตคือการส่งแพ็กเก็ตข้อมูลเฉพาะไปยังพอร์ตต่าง ๆ ของเครื่องเป้าหมาย จากนั้นพิจารณาจากการตอบกลับเพื่อ判断ว่าพอร์ตใดเปิดหรือปิดอยู่ คล้ายกับมีคนไปเคาะประตูทีละห้องจากนอกอาคาร แล้วดูว่ามีคนตอบหรือไม่ เพื่อ判断ว่าห้องใดมีคนอยู่และห้องใดว่าง



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



เว็บไซต์สแกนพอร์ตในเบราว์เซอร์ได้อย่างไร?

คุณอาจรู้สึกแปลกใจว่า เว็บเพจธรรมดา ๆ หนึ่งหน้าจะสแกนพอร์ตบนคอมพิวเตอร์ของคุณได้อย่างไร เบื้องหลังนั้นอาศัยกลไกการทำงานบางอย่างของเบราว์เซอร์



วิธีการสแกนตามเวลา



เทคนิคการสแกนพอร์ตผ่านเบราว์เซอร์ในยุคแรกอาศัย “การโจมตีแบบจับเวลา” เมื่อเว็บเพจส่งคำขอไปยังพอร์ตใดพอร์ตหนึ่งผ่าน XMLHttpRequest หรือ fetch:



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



หากพอร์ตเปิดอยู่ เบราว์เซอร์จะรอการตอบกลับจากฝั่งเซิร์ฟเวอร์ ซึ่งใช้เวลานานกว่า



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



วิธีการสแกนตาม iframe



ต่อมานักวิจัยค้นพบเทคนิคที่เชื่อถือได้มากขึ้น โดยมุ่งเน้นไปที่เบราว์เซอร์ Chrome เมื่อ Chrome พยายามเชื่อมต่อไปยังพอร์ตที่ปิดอยู่ เบราว์เซอร์จะเปลี่ยนที่อยู่ของหน้าเป็น chrome-error://chromewebdata/ โดยอาศัยคุณสมบัตินี้:



เว็บไซต์สร้าง iframe ที่ซ่อนไว้ แล้วโหลดที่อยู่เป้าหมาย (เช่น http://127.0.0.1:8080)



หากพอร์ตปิดอยู่ เหตุการณ์ onload ของ iframe จะถูกทริกเกอร์สองครั้ง (เพราะ URL มีการเปลี่ยนแปลง)



หากพอร์ตเปิดอยู่ เหตุการณ์ onload จะถูกทริกเกอร์เพียงครั้งเดียว



ด้วยการนับจำนวนครั้งที่เหตุการณ์ onload ถูกทริกเกอร์ เว็บไซต์จึงสามารถ判断ได้อย่างแม่นยำว่าพอร์ตเปิดอยู่หรือไม่



วิธีการสแกนตาม WebSocket



เครื่องมือบางอย่างยังใช้การเชื่อมต่อ WebSocket เพื่อตรวจสอบสถานะพอร์ต——เชื่อมต่อสำเร็จหมายถึงพอร์ตเปิดอยู่ ส่วนเชื่อมต่อล้มเหลวหมายถึงพอร์ตปิดอยู่



ทำไมเว็บไซต์จึงต้องสแกนพอร์ตของคุณ?

1. การต่อต้านการฉ้อโกงและการตรวจจับบอต



เว็บไซต์ขนาดใหญ่จำนวนมาก (รวมถึงเว็บไซต์บริการภาครัฐบางแห่งและแพลตฟอร์มอีคอมเมิร์ซ) จะใช้การสแกนพอร์ตเพื่อตรวจจับว่าผู้ใช้เป็นมนุษย์จริงหรือไม่ ตัวอย่างเช่น ระบบต่อต้านบอตบางระบบจะพยายามเชื่อมต่อไปยัง 127.0.0.1:8888——ซึ่งเป็นพอร์ตพร็อกซีเริ่มต้นของเครื่องมือทดสอบความปลอดภัย เช่น Burp Suite หากพบว่าพอร์ตนี้เปิดอยู่ ระบบจะสงสัยว่าผู้เข้าชมอาจเป็นนักวิจัยด้านความปลอดภัยหรือสคริปต์อัตโนมัติ จึงทริกเกอร์การยืนยันเพิ่มเติม



2. การติดตามด้วยลายนิ้วมือผู้ใช้



งานวิจัยชี้ให้เห็นว่า ผลลัพธ์การสแกนพอร์ตผ่านเบราว์เซอร์มีความเป็นเอกลักษณ์เพียงพอที่จะใช้เป็นวิธีติดตามผู้ใช้ได้ ด้วยการตรวจจับพอร์ตที่เปิดอยู่ในเครื่อง เว็บไซต์สามารถอนุมานได้ว่าผู้ใช้กำลังรันซอฟต์แวร์ใดอยู่——เช่น พอร์ต 80 หรือ 443 ที่เปิดอยู่อาจหมายความว่าผู้ใช้กำลังรันเว็บเซิร์ฟเวอร์ ส่วนพอร์ต 25 ที่เปิดอยู่อาจหมายความว่าเมลเซิร์ฟเวอร์กำลังทำงาน ชุดซอฟต์แวร์ที่ผู้ใช้แต่ละคนติดตั้งแตกต่างกันอย่างมาก สิ่งนี้จึงก่อให้เกิด “ลายนิ้วมือซอฟต์แวร์” ที่มีความเฉพาะตัว



สิ่งที่น่ากังวลยิ่งกว่าคือ มีงานวิจัยแสดงให้เห็นว่าแม้จะสแกนเพียงหนึ่งวินาที ลายนิ้วมือพอร์ตที่สร้างขึ้นก็มีความเป็นเอกลักษณ์สูง เมื่อผลลัพธ์การสแกนพอร์ตถูกนำไปใช้ร่วมกับเทคนิคลายนิ้วมืออื่น ๆ (เช่น Canvas fingerprint, WebGL fingerprint เป็นต้น) ความสามารถในการติดตามจะยิ่งเพิ่มขึ้น



3. การตรวจสอบอุปกรณ์ในเครือข่ายภายใน



เบราว์เซอร์ส่วนใหญ่โดยค่าเริ่มต้นอนุญาตให้เว็บไซต์บนอินเทอร์เน็ตสาธารณะส่งคำขอไปยังที่อยู่ IP ส่วนตัว (เช่น 127.0.0.1 หรือ 192.168.x.x) ได้ นั่นหมายความว่าเว็บไซต์ที่ประสงค์ร้ายไม่เพียงแต่สามารถสแกนพอร์ตในเครื่องคอมพิวเตอร์ของคุณได้เท่านั้น แต่ยังสามารถสแกนพอร์ตของอุปกรณ์ในเครือข่ายภายใน เช่น เราเตอร์ที่บ้าน สมาร์ททีวี กล้องวงจรปิดเครือข่าย ฯลฯ เพื่อค้นหาอุปกรณ์ที่อาจมีช่องโหว่และทำการโจมตีได้



จะป้องกันการสแกนพอร์ตผ่านเบราว์เซอร์ได้อย่างไร?

1. ใช้ส่วนขยายเบราว์เซอร์



uBlock Origin: ในหัวข้อ “ความเป็นส่วนตัว” ของการตั้งค่า ให้ติ๊กตัวเลือก “บล็อกการบุกรุกเครือข่ายภายในจากภายนอก” ก็จะมีผลทันที



NoScript: มีตัวเลือกสำหรับบล็อกการเข้าถึงเครือข่ายท้องถิ่น



ปลั๊กอินป้องกันเฉพาะทางบางตัวก็สามารถบล็อกไม่ให้เว็บไซต์สแกนพอร์ตในเครื่องได้เช่นกัน



2. ใช้เบราว์เซอร์ที่มีการป้องกันในตัว



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



3. ใช้เบราว์เซอร์ลายนิ้วมือ



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



สรุป

การสแกนพอร์ตเป็นเทคโนโลยีที่สามารถใช้เพื่อการตรวจสอบความปลอดภัยอย่างถูกต้องได้ แต่ก็อาจถูกนำไปใช้ในทางที่ผิดเพื่อ侵犯ความเป็นส่วนตัวได้เช่นกัน การเข้าใจหลักการทำงานและความเสี่ยงที่อาจเกิดขึ้น คือก้าวแรกในการปกป้องความปลอดภัยเครือข่ายของตนเอง ดังคำกล่าวเก่าแก่ในวงการความปลอดภัยที่ว่า: “เมื่อรู้ว่า ‘ประตู’ ของคุณเปิดอยู่ที่ไหน จึงจะรู้ว่าควรปิดบานใด”