ทำไมการเปิดพอร์ตที่ไม่ดี


36

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

ปรับปรุง

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

คำตอบ:


36

พอร์ตจะไม่เปิดหากมีบางสิ่งที่ไม่ฟังการเชื่อมต่ออยู่

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


แก้ไข

เพื่อตอบคำถามของคุณเกี่ยวกับสาเหตุที่คนไม่สามารถเขียนซอฟต์แวร์ที่ไม่สามารถใช้ประโยชน์ได้

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

การใช้รหัสโดยอำเภอใจ / ระยะไกลนั้นมีความเสี่ยงสูงดังที่คุณได้ชี้ให้เห็น น่าเสียดายบัฟเฟอร์ล้นและข้อบกพร่องด้านความปลอดภัยอื่น ๆ ที่อนุญาตให้ใช้ร่วมกันได้ ดูการอัพเดทความปลอดภัยของ Microsoft และฉันจะวางเดิมพันแก้ไขการเรียกใช้โค้ดจากระยะไกลหรือการยกระดับสิทธิ์และ MS เป็น บริษัท ขนาดใหญ่ที่มีนักพัฒนาหลายร้อยคนและหลายพันล้านดอลลาร์


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

9

เกี่ยวกับการอัปเดตที่คุณเขียน:

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

มันยากมากที่จะเขียนซอฟต์แวร์ที่ไม่สามารถใช้ประโยชน์ได้!

ฉันได้อ่านหนังสือการสร้างซอฟต์แวร์รักษาความปลอดภัยและสิ่งหนึ่งที่กล่าวถึงคือการใช้ประโยชน์จากสแตกล้น มีข้อเท็จจริงที่น่ากลัวสองประการในนั้น:

  • สำหรับโปรแกรมที่มี bug overflow stack ที่ใช้ประโยชน์ได้นั้นง่ายมากโดยเฉพาะอย่างยิ่งเมื่อเขียนโปรแกรมเป็นภาษาซีในภาษาการเขียนโปรแกรม C ฟังก์ชั่นจำนวนมากไม่ปลอดภัยโดยค่าเริ่มต้นและโปรแกรมเมอร์ต้องการทราบเพื่อหลีกเลี่ยงหน้าที่เสี่ยง หรือต้องดำเนินการพิเศษเพื่อความปลอดภัย
  • ช่องโหว่ที่แฮ็คเกอร์ต้องการใช้นั้นสั้น - สั้นมาก น้อยกว่าครึ่งหน้าของภาษาแอสเซมบลีซึ่งแปลเป็น 100 หรือมากกว่า (เดา) ไบต์ของรหัสเครื่อง รหัสช่องโหว่นี้เพียงพอที่จะให้เชลล์แฮ็กเกอร์ (พร้อมรับคำสั่ง) เข้าถึงเครื่องของคุณ ไม่ต้องมีการอัปโหลดและเรียกใช้ไฟล์ขนาดใหญ่เพียงแค่โค้ดชิ้นเล็ก ๆ ที่สามารถแทรกลงในกลางข้อมูลที่ถูกต้อง

ดังนั้นหากแฮ็กเกอร์สามารถค้นหาโปรแกรมที่ (a) มีข้อผิดพลาดล้นสแต็กที่ (b) ใช้ประโยชน์ได้บนเครือข่ายและ (c) มี 100 ไบต์ไบต์คู่ในบัฟเฟอร์ของมันคอมพิวเตอร์ของคุณจะถูก pwned โชคดีที่ความรู้เกี่ยวกับข้อบกพร่องสแต็คล้นเป็นความรู้ทั่วไปพอสมควร แต่พวกเขายังคงปรากฏขึ้น 5 ปีที่แล้วและนานกว่านี้เป็นปัญหาที่พบบ่อยมากขึ้น

กลับไปที่คำถามดั้งเดิมของคุณคุณควรหลีกเลี่ยงพอร์ตที่เปิดอยู่เพื่อหลีกเลี่ยงอุบัติเหตุที่มีข้อบกพร่องที่สามารถใช้ประโยชน์ได้ในโปรแกรม ตอนนี้คุณมีเหตุผลที่สอง: เชลล์ระยะไกลที่แฮ็กเกอร์จะใช้เป็นพอร์ตเปิดอื่น หากคุณมีไฟร์วอลล์ที่บล็อกทุกอย่างยกเว้นที่คุณอนุญาตเป็นพิเศษคุณจะบล็อกเปลือกระยะไกลนั้น (แม้ว่าแฮกเกอร์จะยังสามารถทำสิ่งที่น่ารังเกียจอื่น ๆ ในคอมพิวเตอร์ของคุณได้ดังนั้นอย่านิ่งนอนใจ!)


2
IIRC, Donald Knuth (?) เพิ่งจะเสร็จสิ้นการพิสูจน์ทางคณิตศาสตร์เพื่อพิสูจน์ว่าหนึ่งในโปรแกรมขนาดเล็กที่เขาเขียนนั้นไม่มีข้อผิดพลาดและใช้เวลาหลายปี
RCIX

7
  • เปิดพอร์ต:เมื่อมีคนถามคอมพิวเตอร์จะตอบว่ามีบริการกำลังฟังอยู่ที่พอร์ตนี้ ซึ่งหมายความว่าสิ่งใดก็ตามที่มาที่พอร์ตนี้จะได้รับการประมวลผลโดยโปรแกรม (บริการ) ที่ทำงานบนคอมพิวเตอร์เครื่องนั้น
  • พอร์ตปิด:เมื่อมีคนถามคอมพิวเตอร์จะตอบกลับว่าไม่มีบริการที่กำลังรับฟังพอร์ตอยู่ akser จะรู้ว่ามีคอมพิวเตอร์ตอบสนองตามที่อยู่
  • พอร์ตล่องหน:เมื่อมีคนถามพวกเขาจะไม่ได้รับคำตอบ จุดคือการซ่อนถ้ามีคอมพิวเตอร์ตามที่อยู่ทั้งหมด มันอาจจะไม่ได้ผลเท่าที่ควรเนื่องจากjoschiให้ความคิดเห็น

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

พอร์ตปิดยังคงตอบสนองต่อ akser ดังนั้นผู้โจมตีที่เป็นไปได้จะรู้ว่าจะทำการตรวจสอบพอร์ตอื่น ๆ จากนั้นอีกครั้งนี่เป็นวิธีที่อินเทอร์เน็ตใช้งานเฉพาะ ในขณะที่พอร์ตล่องหนพยายามที่จะไม่ให้ข้อมูลที่อาจเป็นอันตรายแก่ผู้โจมตี แต่ในทางทฤษฎีแล้ว

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


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

@ โจชิ: ก็เป็นแนวคิดที่ฉันเคยเห็นในอินเทอร์เน็ตดังนั้นฉันคิดว่ามันเป็นเรื่องดีที่จะกำหนด คุณทำประเด็นที่ดีแม้ว่า ฉันแก้ไขคำตอบเพื่อสะท้อนความคิดเห็นของคุณ อย่างน้อยก็ทำให้ IP เป้าหมายดูเหมือนว่าอยู่หลังเราเตอร์ NAT ฉันเดา ฉันไม่เคยเป็นแฟนของแนวคิดด้วยตนเอง: ถ้าคุณมีพอร์ตเปิดคุณควรตรวจสอบให้แน่ใจว่าพวกเขากำลังใช้บริการที่ปลอดภัย และถ้าคุณไม่มีพอร์ตที่เปิดอยู่ไม่มีปัญหาในการบอกเน็ตว่าคุณมีอยู่จริง ชิงทรัพย์มีกลิ่นเหมือนการรักษาความปลอดภัยให้กับฉัน
Ilari Kajaste

joschi: เราเตอร์ไม่ได้ทำเช่นนั้น เราเตอร์จำนวนมากเพียงส่งต่อสุ่มสี่สุ่มห้าไปยังที่อยู่ IP ที่ไม่มีระบบ ความพยายามในการเชื่อมต่อหมดเวลาเพียงเพราะลูกค้าเบื่อที่จะพยายามจับมือสามทาง
Benc

6

จริงๆแล้วเท่าที่ฉันรู้พอร์ทเปิดหมายความว่าโปรแกรมกำลังฟังอยู่ ดังนั้นจึงมีบริการประมวลผลข้อมูลบางประเภท


3

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

อัสสัมชัญเป็นแม่ของ eff-ups ทั้งหมด :)

ค่อนข้างปลอดภัยกว่าขออภัย ... นี่เป็นข้อความที่ดีสำหรับคุณที่ makeuseof.com:

คำอธิบายเทคโนโลยี: เปิดเราเตอร์พอร์ตและผลกระทบด้านความปลอดภัย


ดีอ่านสั้น
DaveParillo

1

ฉันไม่มีความปลอดภัยในการส่งออก แต่ฉันทำวิจัยเล็กน้อย ... พอร์ต "เปิด" เป็นพอร์ตที่ตั้งค่าให้ยอมรับการเชื่อมต่อ TCP ขาเข้า

หากคุณมีแอพพลิเคชั่นรับฟังเฉพาะพอร์ต 9, 21 และ 80 และไฟร์วอลล์ของคุณบล็อกการเข้าถึงพอร์ตทั้งสามนั้นคุณจะไม่มีพอร์ตเปิดทางเทคนิค ยกตัวอย่างเช่น IOW พอร์ต 25 ไม่เปิดเพราะไม่มีอะไรฟังอยู่

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


คำจำกัดความของคุณเกี่ยวกับพอร์ตคืออะไรไม่ถูกต้อง พอร์ตไม่ได้ จำกัด อยู่ที่ TCP ไม่ว่าจะด้วยวิธีใดก็ตาม
MDMarra

1
ฉันคิดว่าไม่ควรเชื่อทุกสิ่งที่พวกเขาอ่านใน 'net :) 5 จาก 6 อันดับแรกของผลการค้นหาของ Google ระบุ "TCP" อย่างชัดเจนในคำจำกัดความของพวกเขา google.com/…
Shoeless

ไม่พวกเขาบอกว่า TCP / IP แตกต่างใหญ่ TCP / IP ประกอบด้วย UDP
MDMarra

1
ICMP ไม่ได้ใช้พอร์ตเป็นโปรโตคอลเลเยอร์ 3 ที่รวมอยู่ในชุด IP ของโปรโตคอล
MDMarra

1
เหตุผลเดียวที่ฉันบอกว่ามันเป็นสิ่งสำคัญมากในการอ้างอิงถึงไฟร์วอลล์ (ซึ่งเป็นเรื่องทางอ้อม) TCP เป็น stateful และทำให้การเชื่อมต่อถูกจดจำโดยที่ UDP ไม่ หลายครั้งหมายความว่าพอร์ตจะต้องเปิดเพื่อรับส่งข้อมูลการรับส่งข้อมูล UDP ซึ่งเริ่มต้นภายในซึ่งไม่จำเป็นต้องเกิดขึ้นสำหรับการเชื่อมต่อ TCP ที่สร้างขึ้นภายใน
MDMarra

0

ด้วยเหตุผลเดียวกับที่คุณปิดและล็อคประตูและหน้าต่างที่บ้าน


3
ฉันล็อคประตู & หน้าต่างเพราะมันเย็นข้างนอก คำถามนี้เกี่ยวข้องกับฉนวนกันความร้อนอย่างไร?
ต้มตุ๋น Quixote

2
ประตูและหน้าต่างของคุณไม่ได้ป้องกันหรือไม่หากปิดเท่านั้น? สลักเกลียวพิเศษนี้ให้ฉนวนที่มากขึ้นหรือไม่
Dentrasi

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

-2

สมมติว่าพอร์ตที่เปิดเป็นเหมือนหน้าต่างที่เปิดและเปิดประตู แต่เมื่อหน้าต่างของคุณเปิดเป็นโม่งหรือหนูและแมงมุมจะได้รับใน # โปรดบอกฉันว่าฉันเป็นใบ้หรือไม่มีทางแก้ไขไม่มี asinine พอร์ตเปิดเหมือนหน้าต่างที่เปิดอยู่ แต่ ในอินเทอร์เน็ตมีพอร์ตเปิดฉันเดาว่าพอร์ตที่ปิดยังปิดอยู่โดยไม่มีหน้าต่างเราไม่สามารถเชื่อมต่อหรือเรียกดูฉันเดาเหมือน HTTP และ SSH หรือ FTP โดยที่เราไม่สามารถเชื่อมต่อได้เพราะมันเป็นไคลเอนต์มันเป็นแค่การเชื่อมต่อ TCP

ฉันไม่มีผู้เชี่ยวชาญด้านความปลอดภัย


ต้องเปิดพอร์ตเพื่อให้บริการ ตัวอย่างที่เป็นไปได้เพียงหนึ่งในพันล้านเท่านั้น: Gmail ใช้พอร์ตเปิด (443 สำหรับเว็บไซต์โดยใช้ HTTPS) แต่มันขอให้คุณเข้าสู่ระบบก่อนที่จะแสดงอะไร
Arjan
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.