ฉันจะป้องกันการบุกรุกและมัลแวร์ได้อย่างไรก่อนเชื่อมต่ออินเทอร์เน็ต (โดยเฉพาะที่อยู่ IP สาธารณะ)


60

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

สิ่งที่สามารถทำได้เพื่อลดสิ่งนี้?

เป็นที่ทราบกันดีว่าควรเปลี่ยนรหัสผ่านสำหรับผู้ใช้ "pi" (Debian) และ "root" (Arch.) แต่บัญชีระบบอื่น ๆ (เช่น "tli", "pnd") มีผู้ใดบ้างที่มี รหัสผ่านสากลที่น่าจะเหมือนกันสำหรับทุกหน่วย?

และมีช่องโหว่ใดที่ทราบกันดีในแพ็คเกจอื่น ๆ ที่ติดตั้งในอิมเมจ SD ที่มีให้สำหรับ Pi (เช่นเนื่องจากข้อ จำกัด ด้านฮาร์ดแวร์หรือแพ็กเกจเวอร์ชันที่ตัดทอนลง)

โดยเฉพาะอย่างยิ่งฉันกังวลsshmysql และบริการอื่น ๆ ที่อาจทำงานบนอิมเมจที่ติดตั้งใหม่

คำตอบ:


23

สิ่งที่ฉันสังเกตเห็นเกี่ยวกับภาพสต็อก Debian Squeeze:

  • / etc / shadow มีแฮชรหัสผ่านจำนวนมากสำหรับบัญชีที่ไม่ใช่บัญชี pi (buildbot เป็นต้น) เปลี่ยนรหัสผ่านในบัญชี pi ตามปกติถ้าคุณยังไม่ได้สร้างบัญชีผู้ใช้ใหม่ด้วยตัวคุณเองและลบบัญชี pi แต่ยังแก้ไขรายการอื่น ๆ และแทนที่แฮชด้วย * s หมายเหตุ / etc / passwd มีรายการที่ซ้ำกันสำหรับบัญชี pi ซึ่งสร้างความสับสนให้แก่ผู้ใช้จาก adduser / deluser เพียงแค่ลบหนึ่งรายการ

  • การกำหนดค่า ssh daemon เริ่มต้นอนุญาตให้ล็อกอินรูทระยะไกล สิ่งนี้ควรปิดการใช้งาน

  • ควรใช้ netstat เพื่อตรวจสอบชุดของสิ่งต่าง ๆ ที่รับฟังการเชื่อมต่อ จำนวนสิ่งที่น่าแปลกใจกำลังทำงานเมื่อเทียบกับเดเบียน Netinst ขั้นต่ำทั่วไป เป็นความคิดที่ดีที่จะลดการเปิดเผยสิ่งที่คุณต้องการก่อนอื่นให้ปิดใช้งานหรือปิดไฟร์วอลล์ทุกอย่างจากนั้นเปิดเผยเฉพาะบริการที่คุณต้องการให้ปรากฏบนอินเทอร์เน็ตสาธารณะ (โดยทั่วไปคือ ssh หรือ ssh + http)

  • คุณจะต้องการเปลี่ยนคีย์โฮสต์ ssh แทนการใช้คีย์ในรูปภาพ (AIUI รูปภาพล่าสุดจะสร้างใหม่ในการบู๊ตครั้งแรก)


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

2
ฉันจะให้ -1 นี่ สาเหตุหลักมาจากคุณแนะนำให้แก้ไขไฟล์เงาด้วยตนเอง ซึ่งเป็นความคิดที่ไม่ดีอย่างมาก
Jivings

@Jivings ไม่มีเขาไม่ได้ เขาอาจหมายถึงการใช้เช่นกันvipw; มันเป็นความคิดที่ไม่ดีเหรอ? ไม่มันไม่ใช่. +1 vipwสำหรับนัยว่าใช้
2497

41

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

รหัสผ่าน

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

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

ความสับสน

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

สิ่งที่ต้องทำที่นี่คือการเปลี่ยนพอร์ตเริ่มต้นสำหรับโปรโตคอลที่ใช้กันทั่วไป ตัวอย่างเช่นพอร์ต SSH เริ่มต้นคือ 22 และ FTP คือ 21 บนระบบของฉัน SSH ใช้ 222 และ FTP 221 ซึ่งควรปิดบังโปรโตคอลเหล่านี้จากการโจมตีอัตโนมัติ

ความปลอดภัยในการเชื่อมต่อ

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

PermitRootLogin yes

ควรตั้งค่าเป็นไม่เป็นค่าเริ่มต้น แต่เป็นการดีที่สุดเพื่อให้แน่ใจ


ถ้าคุณใช้ SSH SSH Keysเป็นจำนวนมากและมีความกังวลใจเกี่ยวกับชายคนหนึ่งในการโจมตีกลางพจนานุกรมโจมตีกับรหัสผ่านของคุณแล้วคุณสามารถใช้

การพิสูจน์ตัวตนแบบใช้คีย์มีข้อดีหลายประการมากกว่าการพิสูจน์ตัวตนด้วยรหัสผ่านตัวอย่างเช่นค่าคีย์ยากต่อการบังคับเดรัจฉานมากกว่ารหัสผ่านธรรมดา

ในการตั้งค่าการรับรองความถูกต้องของคีย์ SSH คุณต้องสร้างคู่ของคีย์ก่อน สิ่งนี้ทำได้ง่ายที่สุดในเครื่องไคลเอนต์ของคุณ (เครื่องที่คุณต้องการเข้าถึง Pi)

# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/pi/.ssh/id_rsa):

Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/pi/.ssh/id_rsa.
Your public key has been saved in /home/pi/.ssh/id_rsa.pub.

ในขณะที่คุณสามารถดูนี้ได้สร้างสองไฟล์คีย์ส่วนตัวและคีย์สาธารณะid_rsaid_rsa.pub

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

ดังนั้นสิ่งที่เราต้องการทำคือคัดลอกกุญแจสาธารณะไปยัง Raspberry Pi เราสามารถทำได้อย่างง่ายดายมาก:

ssh-copy-id pi@address

piชื่อผู้ใช้ Raspberry Pi อยู่ที่ไหนและaddressเป็นที่อยู่ IP ของ Pi

ฉันจะย้ำอีกครั้งเราแจกจ่ายกุญแจสาธารณะ รหัสส่วนตัวเป็นของคุณ กดค้างไว้อย่างแน่นหนาเพื่อปล่อยกุญแจนั้นจะทำลายความปลอดภัยของระบบ

The Arch wikiมีคำอธิบายที่ยอดเยี่ยมเกี่ยวกับวิธีการทำงาน:

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

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการรักษาความปลอดภัยของการตรวจสอบคีย์สาธารณะ, วิกิพีเดียมีคำอธิบายอย่างละเอียด

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

เป็นตัวอย่างที่น่าสนใจเมื่อวานนี้ฉันใช้ Eclipse บนเดสก์ท็อปของฉันดูบน Raspberry Pi ของฉันและควบคุมเมาส์และคีย์บอร์ดจาก Netbook ของฉัน นั่นคือพลังของ SSH

สิทธิ์

การอนุญาตของไฟล์เป็นจุดเริ่มต้นของระบบรักษาความปลอดภัย Linux มีผลกับผู้ที่สามารถดูไฟล์และโฟลเดอร์ของคุณและสามารถปกป้องข้อมูลของคุณได้อย่างสำคัญ ตัวอย่างเช่นล็อกอินเข้าสู่ Raspberry Pi ในฐานะผู้ใช้ปกติและรัน:

cat /etc/shadow

shadowไฟล์มีรหัสผ่านที่เข้ารหัสสำหรับผู้ใช้ในระบบดังนั้นเราจะไม่ต้องการเพียงเกี่ยวกับทุกคนที่จะดูมัน! ดังนั้นคุณควรเห็นคำตอบนี้:

cat: /etc/shadow: Permission denied

เราสามารถดูสาเหตุของเรื่องนี้ได้โดยดูที่การอนุญาตของไฟล์:

ls -l /etc/shadow
-rw------- 1 root root 821 Jun 11 22:13 /etc/shadow

สิ่งนี้บอกเราว่าไฟล์นั้นเป็นเจ้าของโดย root และมีเพียงเจ้าของเท่านั้นที่มีสิทธิ์อ่าน / เขียน ลองแยกผลลัพธ์ออกมา

-rw-------

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

drwxrwxrwx  10 root root   280 Jun 20 11:40 tmp/

นั่นคืออ่านเขียนและดำเนินการอนุญาตสำหรับเจ้าของกลุ่มและคนอื่น ๆ

ส่วนที่สำคัญต่อไปคือชื่อทั้งสอง root rootในกรณีของเรา ผู้ใช้คนแรกเป็นเจ้าของไฟล์ ประการที่สองคือกลุ่มผู้ใช้ ตัวอย่างเช่นมันจะเป็นเรื่องธรรมดาที่จะเห็น:

drwxr-xr-x  10 pi users   280 Jun 20 11:40 home/pi

สิ่งนี้จะอนุญาตการเข้าถึงแบบอ่าน / เขียนสำหรับผู้ใช้piในโฮมไดเร็กตอรี่ของเขาและอ่านการเข้าถึงสำหรับผู้ใช้รายอื่นทั้งหมด

สิทธิ์ส่วนใหญ่มักอ้างถึงและควบคุมโดยใช้ค่าฐานแปด ตัวอย่างเช่นหากเราต้องการตั้งค่า rw เฉพาะเจ้าของเราจะพิมพ์:

chmod 600 /path/to/file

นี่เป็นภาพรวมพื้นฐานสำหรับรายละเอียดเพิ่มเติมเกี่ยวกับการอนุญาตไฟล์ Linux นี่เป็นบทความที่ดี


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

chmod 700 ~/.ssh
ls -la ~/.ssh 
drwx------   2 james users  4096 Jun 18 03:05 .

ฉันหวังว่าสิ่งนี้จะช่วยขจัดข้อกังวลบางอย่างของคุณด้วยการรักษาความปลอดภัยของ Linux จากนี้คุณจะสามารถเห็นว่ามันเป็นระบบที่ค่อนข้างปลอดภัยและหากคุณระมัดระวังคุณควรไม่มีปัญหาด้านความปลอดภัย


10
ฉันไม่เห็นด้วยกับคำพูดที่คลุมเครือของคุณมันจะใช้เวลาไม่กี่วินาทีในการจับคู่พอร์ตที่เปิดบนอุปกรณ์ของคุณและค้นหาเซิร์ฟเวอร์ ssh ของคุณ ปิดใช้งานการเข้าสู่ระบบรหัสผ่านและติดกับพอร์ตปกติ ฉันสงสัยว่าคุณต้องการ ftp เลยให้ใช้ scp แทน
อเล็กซ์แชมเบอร์เลน

2
@AlexChamberlain มันเป็นการลดความเร็วชั่วคราวสำหรับผู้โจมตี แต่ก็ไม่ได้เป็นวิธีการแก้ปัญหาที่สมบูรณ์เพียงอย่างเดียว
Jivings

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

2
@AlexChamberlain ในระหว่างการ debacle คีย์ debian ssh เราได้บันทึกความพยายามมากมายที่พอร์ต 22 และไม่มีที่ใดเลย ในกรณีนั้นการทำงานบนพอร์ตอื่นจะทำให้คุณซื้อเวลาได้มากในขณะที่แฮ็กเกอร์พยายามที่จะหาว่าโฮสต์ที่ถูกโจมตีนั้นมีค่าใด SBO ไม่ได้ช่วยอะไรมากนักถ้าผู้โจมตีกำลังพุ่งเป้าไปที่คุณโดยเฉพาะ
John La Rooy

1
ฉันเห็นด้วย. จุดของฉันก็คือว่ามันไม่ได้เป็นเพียงthereotical - ได้มีเวลาอยู่ในหน่วยความจำล่าสุดที่ SBO แน่นอนไม่ได้ความช่วยเหลือและทำอย่างมีนัยสำคัญที่แตกต่างกัน
John La Rooy

6

เพื่อป้องกันการโจมตี Bruteforce fail2banคุณสามารถติดตั้งและกำหนดค่า มันจะแยกวิเคราะห์ไฟล์บันทึก (เช่น/var/log/auth.log) และพยายามตรวจสอบว่ามีความพยายามในการเข้าสู่ระบบหลายครั้งล้มเหลว จากนั้นจะแบนที่อยู่ IP ต้นทางด้วยโดยiptablesอัตโนมัติ

มีเครือข่ายมากมายในอินเทอร์เน็ต

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