การรับรองความถูกต้องไม่ปลอดภัย x window ubuntu การรักษาความปลอดภัยใน Linux เป็นแนวคิดที่เกี่ยวข้องกัน มาเข้ารหัสระบบไฟล์ใน Linux เพื่อความปลอดภัยของ Linux ที่สมบูรณ์ยิ่งขึ้น


ผู้ใช้หลายคนพิจารณา Ubuntu pop และ เซิร์ฟเวอร์อูบุนตูไม่เครียด. หลายคนลืมไปว่า Ubuntu Server รองรับมาเป็นเวลา 5 ปีแล้ว และ Debian 5.0 ก็ออกสู่ตลาดเป็นเวลา 3 ปี ตั้งแต่ปี 2552 ถึง 2555

ในราคาสนับสนุน - เซิร์ฟเวอร์ Ubuntu เมื่อเปรียบเทียบกับ Red Hat ใคร ๆ ก็สามารถพูดได้ - คุณได้รับมันฟรีแม้ว่าคุณจะสั่งซื้อก็ตาม การสนับสนุนตลอด 24 ชั่วโมงทุกวัน 24x7x365.

ดูว่าโซลูชันความปลอดภัยใดบ้างที่ถูกนำมาใช้ใน Ubuntu ทุกเวอร์ชัน และทำให้ปลอดภัยและเชื่อถือได้

ความเป็นไปได้

เมทริกซ์ความสามารถด้านความปลอดภัย

โอกาส 8.04 ลิตร(ฮาร์ดี้ เฮรอน) 10.04 ลิตร(สุวิมล ลินซ์) 11.04 (แนตตี้ นาร์วาล) 11.10 (โอเนียร์ริก แมวป่า) 12.04 น(ลิ่นที่แม่นยำ) 12.10 (ควอนตัล เควตซัล)
ไม่มีพอร์ตเปิด นโยบาย นโยบาย นโยบาย นโยบาย นโยบาย นโยบาย
รหัสผ่านแฮช md5 sha512 sha512 sha512 sha512 sha512
คุกกี้ซิน -- เคอร์เนล & sysctl เคอร์เนล & sysctl เคอร์เนล & sysctl เคอร์เนล & sysctl เคอร์เนล & sysctl
ความสามารถของระบบไฟล์ -- เคอร์เนล เคอร์เนล เคอร์เนล เคอร์เนล เคอร์เนล
ไฟร์วอลล์ที่กำหนดค่าได้ เอ่อ. เอ่อ. เอ่อ. เอ่อ. เอ่อ. เอ่อ.
PR_SET_SECCOMP เคอร์เนล เคอร์เนล เคอร์เนล เคอร์เนล เคอร์เนล เคอร์เนล
แอพอาร์เมอร์ 2.1 2.5 2.6.1 2.7.0~เบต้า1 2.7.0 2.7.0
ซีลีนุกซ์ จักรวาล จักรวาล จักรวาล จักรวาล จักรวาล จักรวาล
ตี -- เคอร์เนล เคอร์เนล เคอร์เนล เคอร์เนล เคอร์เนล
LVM ที่เข้ารหัส ตัวติดตั้ง alt ตัวติดตั้ง alt ตัวติดตั้ง alt ตัวติดตั้ง alt ตัวติดตั้ง alt ตัวติดตั้ง alt
eCryptfs -- ~/ส่วนตัว หรือ ~ ชื่อไฟล์ ~/ส่วนตัว หรือ ~ ชื่อไฟล์ ~/ส่วนตัว หรือ ~ ชื่อไฟล์ ~/ส่วนตัว หรือ ~ ชื่อไฟล์ ~/ส่วนตัว หรือ ~ ชื่อไฟล์
การป้องกันสแต็ค แพทช์ gcc แพทช์ gcc แพทช์ gcc แพทช์ gcc แพทช์ gcc แพทช์ gcc
การป้องกันฮีป ไกลบีซี ไกลบีซี ไกลบีซี ไกลบีซี ไกลบีซี ไกลบีซี
ตัวชี้ที่สับสน ไกลบีซี ไกลบีซี ไกลบีซี ไกลบีซี ไกลบีซี ไกลบีซี
สแต็ก ASLR เคอร์เนล เคอร์เนล เคอร์เนล เคอร์เนล เคอร์เนล เคอร์เนล
Libs/mmap ASLR เคอร์เนล เคอร์เนล เคอร์เนล เคอร์เนล เคอร์เนล เคอร์เนล
ผู้บริหาร ASLR เคอร์เนล (แพทช์ -mm) เคอร์เนล เคอร์เนล เคอร์เนล เคอร์เนล เคอร์เนล
BRK ASLR เคอร์เนล (exec ASLR) เคอร์เนล เคอร์เนล เคอร์เนล เคอร์เนล เคอร์เนล
วีดีเอสโอ ASLR เคอร์เนล เคอร์เนล เคอร์เนล เคอร์เนล เคอร์เนล เคอร์เนล
สร้างด้วย PIE -- รายการแพ็คเกจ รายการแพ็คเกจ รายการแพ็คเกจ รายการแพ็คเกจ รายการแพ็คเกจ
-- แพทช์ gcc แพทช์ gcc แพทช์ gcc แพทช์ gcc แพทช์ gcc
ประกอบกับ RELRO -- แพทช์ gcc แพทช์ gcc แพทช์ gcc แพทช์ gcc แพทช์ gcc
สร้างด้วย BIND_NOW -- รายการแพ็คเกจ รายการแพ็คเกจ รายการแพ็คเกจ รายการแพ็คเกจ รายการแพ็คเกจ
หน่วยความจำที่ไม่สามารถดำเนินการได้ ป.ล. เท่านั้น PAE, ia32 การจำลอง NX บางส่วน PAE, ia32 การจำลอง NX บางส่วน PAE, ia32 การจำลอง NX บางส่วน PAE, ia32 การจำลอง NX บางส่วน
ป้องกัน /proc/$pid/maps เคอร์เนล & sysctl เคอร์เนล เคอร์เนล เคอร์เนล เคอร์เนล เคอร์เนล
ข้อจำกัดของลิงก์สัญลักษณ์ -- -- เคอร์เนล เคอร์เนล เคอร์เนล เคอร์เนล
ข้อจำกัดของฮาร์ดลิงก์ -- -- เคอร์เนล เคอร์เนล เคอร์เนล เคอร์เนล
ขอบเขต ptrace -- -- เคอร์เนล เคอร์เนล เคอร์เนล เคอร์เนล
การป้องกันที่อยู่ 0 เคอร์เนล & sysctl เคอร์เนล เคอร์เนล เคอร์เนล เคอร์เนล เคอร์เนล
ป้องกัน /dev/mem เคอร์เนล (แพทช์ -mm) เคอร์เนล เคอร์เนล เคอร์เนล เคอร์เนล เคอร์เนล
/dev/kmem ปิดการใช้งาน เคอร์เนล (แพทช์ -mm) เคอร์เนล เคอร์เนล เคอร์เนล เคอร์เนล เคอร์เนล
การบล็อกการโหลดโมดูล วาง CAP_SYS_MODULES ระบบ ระบบ ระบบ ระบบ ระบบ
เคอร์เนล เคอร์เนล เคอร์เนล เคอร์เนล เคอร์เนล เคอร์เนล
การป้องกันเคอร์เนลสแต็ก -- เคอร์เนล เคอร์เนล เคอร์เนล เคอร์เนล เคอร์เนล
โมดูล RO/NX -- -- เคอร์เนล เคอร์เนล เคอร์เนล เคอร์เนล
-- -- เคอร์เนล เคอร์เนล เคอร์เนล เคอร์เนล
-- -- เคอร์เนล เคอร์เนล เคอร์เนล เคอร์เนล
การกรองการโทรของระบบ -- -- -- เคอร์เนล เคอร์เนล เคอร์เนล

ไม่มีพอร์ตเปิด

การติดตั้ง Ubuntu เริ่มต้นไม่มีพอร์ตที่เปิดอยู่ซึ่งสามารถเข้าถึงได้จากภายนอกเครือข่าย ข้อยกเว้นเดียวสำหรับกฎนี้คือสำหรับบริการโครงสร้างพื้นฐานเครือข่าย เช่น ไคลเอนต์ DHCP และ mDNS (Avahi/ZeroConf)

เมื่อติดตั้ง Ubuntu Server แล้ว ผู้ดูแลระบบจะสามารถติดตั้งบริการเครือข่ายเพิ่มเติมได้ เช่น เว็บเซิร์ฟเวอร์ Apache แต่ตามค่าเริ่มต้นบนระบบที่ติดตั้งใหม่ หากคุณทำ netstat -an --inet | grep ฟัง | grep -v 127.0.0.1 คุณสามารถตรวจสอบได้อย่างง่ายดายว่า Ubuntu ไม่ได้เปิดพอร์ตสำหรับการเข้าถึงจากเครือข่ายไปยังระบบโดยไม่จำเป็น

รหัสผ่านแฮช

รหัสผ่านระบบที่ใช้ในการเข้าสู่ระบบ Ubuntu จะถูกเก็บไว้ใน /etc/shadow กาลครั้งหนึ่ง แฮชรหัสผ่าน DES ถูกจัดเก็บไว้ใน /etc/passwd แต่ลีนุกซ์สมัยใหม่เก็บแฮชไว้ใน /etc/shadow มาเป็นเวลานาน และในตอนแรกมีการใช้แฮชที่ใช้ MD5 พร้อมเกลือ (รหัสแฮชที่ใช้เกลือ MD5 crypt id 1) เนื่องจากรหัสผ่านเดียวกันมีแฮชเดียวกันโดยไม่ต้องใช้เกลือ การนำเกลือมาใช้จึงทำให้สามารถปรับปรุงความปลอดภัยและทำให้การถอดรหัสรหัสผ่านของผู้ใช้หลายคนของระบบทำได้ยากขึ้น

ตอนนี้ MD5 ถือว่าไม่น่าเชื่อถือและด้วยความสามารถในการคำนวณของคอมพิวเตอร์ที่เพิ่มขึ้น ด้วย Ubuntu 8.10 จึงมีการใช้แฮช SHA-512 พร้อมเกลือ (รหัสผ่านที่ใช้ SHA-512 แบบเค็ม แฮช crypt id 6) นี้ไม่แฮ็ค กำลังดุร้ายโดยผ่านตัวเลือกทั้งหมด - ซับซ้อนอย่างไม่น่าเชื่อและใช้เวลานาน

รายละเอียดเพิ่มเติมเกี่ยวกับ man crypt

ใช้ test-glibc-security.py สำหรับการทดสอบ

คุกกี้ซิน

เมื่อระบบเต็มไปด้วยการเชื่อมต่อเครือข่ายใหม่ กลไกคุกกี้ SYN จะช่วยลดความเสียหายจากการโจมตี SYN ฟลัด

ความสามารถของระบบไฟล์

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

เคอร์เนล Linux ให้การสนับสนุนและเครื่องมือ libcap2-bin สำหรับการใช้ความสามารถของไฟล์ประเภท xattrs เพื่อเพิ่มความปลอดภัยของแอปพลิเคชัน setuid

ใช้ test-kernel-security.py สำหรับการทดสอบ

ไฟร์วอลล์ที่กำหนดค่าได้

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

ในขณะเดียวกัน UFW ก็ลดความซับซ้อนของคำสั่ง iptables ที่ซับซ้อนเพื่อช่วยผู้ดูแลระบบที่รู้ว่าเขากำลังทำอะไรอยู่

UFW เป็นตัวช่วยและเป็นพื้นฐานสำหรับส่วนหน้าแบบกราฟิก

ใช้การทดสอบ ufw สำหรับการทดสอบ

PR_SET_SECCOMP

แอพอาร์เมอร์

ซีลีนุกซ์

SELinux เป็นระบบควบคุมการเข้าถึงที่จำเป็นตามแนวคิดของ inode ซึ่งเป็นตัวอธิบายดัชนีระบบไฟล์

การติดตั้งแพ็คเกจ selinux จะทำการเปลี่ยนแปลงและการปรับเปลี่ยนที่จำเป็นในขณะที่พีซีบูท

ใช้ test-kernel-security.py สำหรับการทดสอบ

ตี

SMACK เป็นระบบควบคุมการเข้าใช้งานที่ยืดหยุ่นตามแนวคิดของ inode ซึ่งเป็นตัวอธิบายดัชนีระบบไฟล์

ใช้ test-kernel-security.py สำหรับการทดสอบ

การเข้ารหัสระบบไฟล์

การเข้ารหัส LVM

ผู้ใช้ที่ใช้ตัวติดตั้งสำรองสามารถติดตั้ง Ubuntu บน LVM ที่เข้ารหัส (การจัดการโลจิคัลวอลุ่ม) ซึ่งจะเข้ารหัสพาร์ติชั่นทั้งหมด รวมถึงพาร์ติชั่นสลับด้วย

eCryptfs

โฟลเดอร์ที่เข้ารหัสถูกนำมาใช้ครั้งแรกใน Ubuntu 8.10 เพื่อเป็นสถานที่ที่ปลอดภัยในการจัดเก็บข้อมูลผู้ใช้ที่สำคัญ

ตัวติดตั้งดิสก์สำรองและเซิร์ฟเวอร์ช่วยให้คุณสามารถตั้งค่าโฟลเดอร์ที่เข้ารหัสสำหรับผู้ใช้รายแรก

ใน Ubuntu 9.04 การสนับสนุนการเข้ารหัสโฟลเดอร์ได้รับการขยาย และผู้ใช้สามารถเข้ารหัสทั้งโฮมโฟลเดอร์ได้ รองรับการเข้ารหัสโฟลเดอร์โฮมในตัวติดตั้งสำรองและตัวติดตั้งเดสก์ท็อปผ่านพารามิเตอร์ user-setup/encrypt-home=true

เสริมสร้างความปลอดภัยพื้นที่ผู้ใช้

คุณลักษณะด้านความปลอดภัยจำนวนมากถูกนำมาใช้ผ่านการคอมไพล์แฟล็กเมื่อสร้างแพ็คเกจซอฟต์แวร์และเคอร์เนล

การป้องกันสแต็ค

ธง gcc -fstack-protector ให้การป้องกันสแต็กล้นโดยการวางตัวเลขสุ่มขนาดเล็กเป็นเครื่องหมาย วิธีการนี้ทำให้สแต็กโอเวอร์โฟลว์ยากขึ้นสำหรับช่องโหว่ต่างๆ

ไม่ จำนวนมากโปรแกรมทำงานได้ไม่ดีหากคอมไพล์ด้วยพารามิเตอร์นี้และ -fstack-protector ถูกปิดใช้งาน

ใช้ test-gcc-security.py สำหรับการทดสอบ

การป้องกันฮีป

การป้องกันฮีปของไลบรารี GNU C (อัตโนมัติโดย ptmalloc และด้วยตนเอง) ให้การป้องกันรายการเสียหาย/ยกเลิกการเชื่อมโยง/ไม่มีสองเท่า/ล้นในตัวจัดการหน่วยความจำ glibc

วิธีนี้จะป้องกันความเป็นไปได้ในการรันโค้ดที่กำหนดเองผ่านหน่วยความจำฮีปล้น ซึ่งจะทำให้โครงสร้างของขอบเขตฮีปเสียหาย

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

ตัวชี้ที่สับสน

ตัวชี้ glibc บางตัวถูกทำให้สับสนผ่านมาโคร PTR_MANGLE/PTR_UNMANGLE ภายในในรูปแบบ glibc ป้องกันไม่ให้เขียนทับตัวชี้ขณะรันไทม์

ใช้การทดสอบ test-glibc-security.py

ตำแหน่งสุ่มในพื้นที่ที่อยู่ การสุ่มเค้าโครงพื้นที่ที่อยู่ (ASLR)

ASLR ถูกนำมาใช้ในเคอร์เนลและตัวโหลด ELF จะวางโครงสร้างที่สำคัญที่สุดไว้ในที่อยู่แบบสุ่ม: สแต็ก, ฮีป, ไลบรารีที่ใช้ร่วมกัน ฯลฯ

ทำให้ยากต่อการคาดเดาที่อยู่เมื่อผู้โจมตีพยายามใช้ช่องโหว่

ASLR มีการเปลี่ยนแปลงทั่วโลกผ่าน /proc/sys/kernel/randomize_va_space ก่อน Ubuntu 8.10 ค่าคือ "1" (เปิดใช้งาน) ในรีลีสต่อมาที่มี brk ASLR ค่าจะถูกตั้งค่าเป็น "2" (เปิดใช้งานด้วย brk ASLR)

สแต็ก ASLR

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

Libs/mmap ASLR

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

การป้องกันมีให้จากเคอร์เนล 2.6.15 (Ubuntu 6.06)

ผู้บริหาร ASLR

โปรแกรมที่สร้างด้วยตัวเลือก "-fPIE -pie" จะถูกโหลดลงในตำแหน่งหน่วยความจำที่แตกต่างกัน ซึ่งทำให้ยากต่อการโจมตีหรือข้ามไปยังที่อยู่เพื่อทำการโจมตีเพื่อแก้ไขหน่วยความจำ

การป้องกันมีให้จากเคอร์เนล 2.6.25 (Ubuntu 8.04 LTS)

BRK ASLR

เช่นเดียวกับ exec ASLR brk ASLR จะควบคุมที่อยู่หน่วยความจำระหว่าง exec และ brk สำหรับคำขอการจัดสรรหน่วยความจำขนาดเล็ก เพิ่มการสุ่มชดเชยหน่วยความจำ brk exec ในเคอร์เนล 2.6.26 (Ubuntu 8.10)

วีดีเอสโอ ASLR

แต่ละครั้งที่รันโปรแกรม ผลลัพธ์จะถูกวางไว้ใน vdso ที่แตกต่างกัน ปรากฏตัวครั้งแรกในเคอร์เนล 2.6.18 (x86, PPC) และ 2.6.22 (x86_64) แต่ไม่รวมอยู่ใน Ubuntu 6.10 เนื่องจาก COMPAT_VDSO ซึ่งถูกลบใน Ubuntu 8.04 LTS

ป้องกันการโจมตีแบบกระโดดเข้าสู่ syscall

glibc 2.6 รองรับ x86 เท่านั้น glibc 2.7 (Ubuntu 8.04 LTS) รองรับ x86_64 ASLR vdso แล้ว

ผู้ที่ต้องการ static pre-libc6 vdso แบบโบราณสามารถใช้ "vdso=2" เป็นพารามิเตอร์เคอร์เนลและรับ COMPAT_VDSO อีกครั้ง

สร้างด้วย PIE

โปรแกรมทั้งหมดที่คอมไพล์ด้วย Position Independent Executables (PIE) พร้อมตัวเลือก "-fPIE -pie" สามารถใช้ประโยชน์จากการป้องกัน exec ASLR ได้

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

เนื่องจาก PIE จึงมีประสิทธิภาพลดลงอย่างมาก (5-10%) บนสถาปัตยกรรมที่มีรีจิสเตอร์สำหรับวัตถุประสงค์ทั่วไปจำนวนไม่มาก (เช่น x86)

ดังนั้น PIE จึงใช้สำหรับแพ็กเก็ตที่มีความสำคัญต่อความปลอดภัยจำนวนเล็กน้อย

PIE สำหรับ x86_64 ไม่มีปัญหาด้านประสิทธิภาพและใช้ได้กับแพ็คเกจทั้งหมด แต่ต้องมีการทดสอบที่ดีกว่า

ถุงพลาสติก 8.04 ลิตร 9.04 9.10 10.04 ลิตร 10.10 11.04 11.10
openssh ใช่ ใช่ ใช่ ใช่ ใช่ ใช่ ใช่
อาปาเช่2 -- ใช่ ใช่ ใช่ ใช่ ใช่ ใช่
ผูก9 -- ใช่ ใช่ ใช่ ใช่ ใช่ ใช่
openldap -- ใช่ ใช่ ใช่ ใช่ ใช่ ใช่
โพสต์ฟิกซ์ -- ใช่ ใช่ ใช่ ใช่ ใช่ ใช่
ถ้วย -- ใช่ ใช่ ใช่ ใช่ ใช่ ใช่
postgresql-8.3 -- ใช่ ใช่ ใช่ ใช่ ใช่ ใช่
แซมบ้า -- ใช่ ใช่ ใช่ ใช่ ใช่ ใช่
นกพิราบ -- ใช่ ใช่ ใช่ ใช่ ใช่ ใช่
dhcp3 -- ใช่ ใช่ ใช่ ใช่ ใช่ ใช่
เอ็นทีพี -- -- ใช่ ใช่ ใช่ ใช่ ใช่
amavisd-ใหม่ -- -- ใช่ ใช่ ใช่ ใช่ ใช่
ปลาหมึก -- -- ใช่ ใช่ ใช่ ใช่ ใช่
ไซรัส-sasl2 -- -- ใช่ ใช่ ใช่ ใช่ ใช่
ทางออก4 -- -- ใช่ ใช่ ใช่ ใช่ ใช่
นากิออส3 -- -- ใช่ ใช่ ใช่ ใช่ ใช่
nagios-ปลั๊กอิน -- -- ใช่ ใช่ ใช่ ใช่ ใช่
xinetd -- -- ใช่ ใช่ ใช่ ใช่ ใช่
เครื่องมือ ipsec -- -- ใช่ ใช่ ใช่ ใช่ ใช่
mysql-dfsg-5.1.1 -- -- ใช่ ใช่ ใช่ ใช่ ใช่
หลักฐาน -- -- -- ใช่ ใช่ ใช่ ใช่
ไฟร์ฟอกซ์ -- -- -- ใช่ ใช่ ใช่ ใช่
ศูนย์ควบคุมคำพังเพย -- -- -- -- -- ใช่ ใช่
ทิฟ -- -- -- -- -- ใช่ ใช่
โทเท็ม -- -- -- -- -- ใช่ ใช่
qemu-kvm -- -- -- -- -- -- ใช่
พิดจิ้น -- -- -- -- -- -- ใช่

สร้างด้วยแหล่ง Fortify

โปรแกรมที่สร้างด้วย "-D_FORTIFY_SOURCE=2" (และ -O1 หรือสูงกว่า) ช่วยให้สามารถคอมไพล์และการป้องกันรันไทม์หลายอย่างใน glibc:

  • การเรียก "sprintf", "strcpy" ที่มีขอบเขตที่ไม่ได้กำหนดจะถูกแทนที่ด้วยฟังก์ชันที่เกี่ยวข้องกับ N ที่จำกัด เมื่อทราบขนาดบัฟเฟอร์ล่วงหน้า สิ่งนี้จะช่วยป้องกันหน่วยความจำล้น
  • หยุดการโจมตีด้วยรูปแบบสตริง "%n" เมื่อสตริงอยู่ในส่วนหน่วยความจำที่มีสิทธิ์ในการเขียน
  • จำเป็นต้องตรวจสอบโค้ดส่งคืนของฟังก์ชันและอาร์กิวเมนต์ที่สำคัญที่สุด (เช่น สำหรับระบบ เขียน เปิด)
  • ต้องมีการระบุมาสก์อย่างชัดเจนเมื่อสร้างไฟล์

ประกอบกับ RELRO

การกระชับโปรแกรม ELF เพื่อต่อสู้กับการเขียนทับหน่วยความจำ bootloader ลดโอกาสที่จะเกิดการโจมตีแบบ GOT-overwrite

ใช้การทดสอบ test-gcc-security.py

สร้างด้วย BIND_NOW

ทำเครื่องหมายโปรแกรม ELF เพื่อแก้ไขอักขระไดนามิกเมื่อเริ่มต้นระบบ แทนที่จะเป็นแบบตามความต้องการ หรือที่เรียกว่า "การเชื่อมโยงทันที"

ซึ่งจะทำให้ GOT อ่านอย่างเดียวโดยสมบูรณ์ ร่วมกับพารามิเตอร์ RELRO

ใช้การทดสอบ test-built-binaries.py

หน่วยความจำที่ไม่สามารถดำเนินการได้

โปรเซสเซอร์สมัยใหม่ปกป้องพื้นที่หน่วยความจำข้อมูล (ฮีป, สแต็ค) จากการเรียกใช้โค้ด

เทคโนโลยีนี้เรียกว่า Non-eXecute (NX) หรือ eXecute-Disable (XD) การป้องกันจะลดความสามารถของผู้โจมตีในการวางรหัสที่กำหนดเอง

การป้องกันต้องใช้ "PAE" ซึ่งอนุญาตให้ระบุที่อยู่ RAM มากกว่า 3 GB ได้ เคอร์เนล 64 บิตและ 32 บิต -server และ -generic-pae ถูกสร้างขึ้นด้วย PAE แล้ว

ตั้งแต่ Ubuntu 9.10 เป็นต้นไป การป้องกันจะจำลองบางส่วนบนคอร์ 32 บิตสำหรับโปรเซสเซอร์ที่ไม่รองรับฮาร์ดแวร์ NX

หลังจากดาวน์โหลด คุณจะเห็นระดับการรองรับการป้องกัน NX:

  • ฮาร์ดแวร์: [ 0.000000] การป้องกัน NX (Execute Disable): ใช้งานอยู่
  • การจำลอง:
    [ 0.000000] การใช้ขีดจำกัดเซกเมนต์ x86 เพื่อการป้องกัน NX โดยประมาณ

หากคุณไม่เห็นการกล่าวถึง NX ให้ตรวจสอบการตั้งค่า BIOS ของคุณ ตั้งแต่ Ubuntu 11.04 การตั้งค่า BIOS สำหรับ NX จะถูกละเว้นโดยเคอร์เนล

Ubuntu 9.04 และรุ่นก่อนหน้า
ซีพียูรองรับ NX CPU ไม่รองรับ NX
เปิดใช้งาน NX ใน BIOS NX ถูกปิดใช้งานใน BIOS
i386 -386, -เคอร์เนลทั่วไป (ไม่ใช่ PAE) ไม่รองรับ nx ไม่รองรับ nx ไม่รองรับ nx
-เคอร์เนลเซิร์ฟเวอร์ (PAE) จริง ๆ แล้ว ไม่รองรับ nx ไม่รองรับ nx
amd64 เคอร์เนลใด ๆ (PAE) จริง ๆ แล้ว ไม่รองรับ nx ไม่รองรับ nx

ใช้การทดสอบ test-kernel-security.py

ป้องกัน /proc/$pid/maps

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

มีให้ตั้งแต่เคอร์เนล 2.6.22

ใช้การทดสอบ test-kernel-security.py

ข้อจำกัดของลิงก์สัญลักษณ์

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

ใน Ubuntu 10.10 ลิงก์สัญลักษณ์ในไดเร็กทอรีเช่น /tmp ไม่สามารถติดตามได้เว้นแต่ว่า "ผู้ติดตาม" และเจ้าของไดเร็กทอรีจะเหมือนกับเจ้าของ symlink

กลไกนี้ถูกควบคุมโดยกลไก Yama /proc/sys/kernel/yama/protected_sticky_symlinks ยามาได้รับการพัฒนาโดย Canonical

ใช้การทดสอบ test-kernel-security.py

ข้อจำกัดของฮาร์ดลิงก์

หากไดเร็กทอรี /etc/ และ /home/ อยู่บนพาร์ติชันเดียวกัน ผู้ใช้ปกติสามารถสร้างฮาร์ดลิงก์ไปยังไฟล์ /etc/shadow โดยใช้แฮชรหัสผ่านในโฮมโฟลเดอร์ของตน แน่นอนว่าหากผู้ใช้รายใดไม่สามารถอ่านหรือเขียนไฟล์บางไฟล์ได้ ฮาร์ดลิงก์ไปยัง ไฟล์นี้จะมีสิทธิ์เช่นเดียวกัน ดังนั้นผู้ใช้รายนี้จึงไม่สามารถใช้ได้เช่นกัน อย่างไรก็ตาม การใช้ฮาร์ดลิงก์ ผู้โจมตีสามารถ "ส่ง" ไฟล์ดังกล่าวไปยังแอปพลิเคชันที่มีสิทธิ์ในการเข้าถึงได้

Yama อนุญาตให้คุณบล็อกการโจมตีนี้โดยป้องกันผู้ใช้ที่ไม่ได้รับอนุญาตให้เข้าถึงไฟล์ต้นฉบับจากการสร้างฮาร์ดลิงก์

พฤติกรรมนี้ถูกควบคุมโดย /proc/sys/kernel/yama/protected_nonaccess_hardlinks Yama

ขอบเขต ptrace

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

บน Ubuntu 10.10 และเก่ากว่า ผู้ใช้ไม่สามารถดีบักกระบวนการโดยใช้ ptrace ได้ เว้นแต่พวกเขาจะเป็นลูกหลานของกระบวนการนั้น

ลักษณะการทำงานถูกควบคุมโดย /proc/sys/kernel/yama/ptrace_scope Yama

ใช้การทดสอบ test-kernel-security.py

เสริมสร้างการป้องกันเคอร์เนล

เปิดใช้งานกลไกการป้องกันเคอร์เนลเพื่อทำให้การโจมตียากขึ้น

การป้องกันที่อยู่ 0

เนื่องจากเคอร์เนลและพื้นที่ผู้ใช้แชร์ที่อยู่หน่วยความจำเสมือน หน่วยความจำ "NULL" จะต้องได้รับการปกป้อง และหน่วยความจำ "ผู้ใช้" ไม่สามารถเริ่มต้นที่ที่อยู่ 0 ได้ ดังนั้นจึงป้องกันการโจมตีที่อยู่เคอร์เนล - การโจมตี "NULL dereference"

การป้องกันพร้อมใช้งานจากเคอร์เนล 2.6.22 ผ่านพารามิเตอร์ sysctl "mmap_min_addr" ตั้งแต่ Ubuntu 9.04 mmap_min_addr ถูกสร้างขึ้นในเคอร์เนล - ที่อยู่ 64k สำหรับ x86, 32k สำหรับ ARM

ใช้การทดสอบ test-kernel-security.py

ป้องกัน /dev/mem

แอปพลิเคชั่นบางตัว เช่น Xorg จำเป็นต้องเข้าถึงโดยตรง หน่วยความจำกายภาพในพื้นที่ผู้ใช้ ไฟล์พิเศษ /dev/mem ให้การเข้าถึงดังกล่าว

ในอดีต คุณสามารถดูและแก้ไขหน่วยความจำเคอร์เนลผ่านไฟล์นี้ได้ หากผู้โจมตีสามารถเข้าถึงรูทได้

ตัวเลือก CONFIG_STRICT_DEVMEM ถูกนำมาใช้เพื่อป้องกันความพยายามดังกล่าว (เดิมทีตัวเลือกนี้เรียกว่า CONFIG_NONPROMISC_DEVMEM)

ใช้การทดสอบ test-kernel-security.py

/dev/kmem ปิดการใช้งาน

สำหรับผู้ใช้ยุคใหม่ /dev/kmem นั้นไม่เกี่ยวข้อง เนื่องจากผู้โจมตีส่วนใหญ่ใช้เพื่อดาวน์โหลดรูทคิท

CONFIG_DEVKMEM ได้รับการตั้งค่าเป็น "n" แล้ว

ไฟล์ /dev/kmem มีอยู่ในรุ่นตั้งแต่ Ubuntu 8.04 LTS ถึง Ubuntu 9.04 แต่ไม่เกี่ยวข้องกับสิ่งใดในเคอร์เนลและไม่ได้ใช้งาน

ใช้การทดสอบ test-kernel-security.py

การบล็อกการโหลดโมดูล

ใน Ubuntu 8.04 LTS และรุ่นก่อนหน้า คุณสามารถลบคุณลักษณะ CAP_SYS_MODULES ออกได้ และด้วยเหตุนี้จึงป้องกันการโหลดโมดูลเคอร์เนลใหม่

นี่เป็นการป้องกันอีกระดับหนึ่งเพื่อหลีกเลี่ยงการดาวน์โหลดรูทคิทเมื่อระบบที่ถูกบุกรุกเริ่มทำงาน

ในเคอร์เนล 2.6.25 (Ubuntu 8.10) ฟังก์ชันนี้หายไป ใน Ubuntu 9.10 ขณะนี้สามารถปิดการใช้งานโมดูลได้อีกครั้งโดยการตั้งค่า /proc/sys/kernel/modules_disabled เป็น "1"

ใช้การทดสอบ test-kernel-security.py

ส่วนข้อมูลแบบอ่านอย่างเดียว

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

ใช้การทดสอบ test-kernel-security.py

การป้องกันเคอร์เนลสแต็ก

เช่นเดียวกับการปกป้องโปรแกรม ELF ในพื้นที่ผู้ใช้ เคอร์เนลสามารถป้องกันสแต็กภายในผ่านตัวเลือก CONFIG_CC_STACKPROTECTOR

ใช้การทดสอบ test-kernel-security.py

โมดูล RO/NX

คุณลักษณะนี้ขยาย CONFIG_DEBUG_RODATA เพื่อรวมข้อจำกัดเกี่ยวกับโมดูลเคอร์เนลที่โหลด ซึ่งจะช่วยป้องกันการหาประโยชน์ เปิดใช้งานผ่านพารามิเตอร์ CONFIG_DEBUG_MODULE_RONX

ใช้การทดสอบ test-kernel-security.py

ข้อ จำกัด การแสดงที่อยู่เคอร์เนล

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

ที่อยู่เคอร์เนลซึ่งเป็นข้อมูลสำคัญไม่สามารถใช้ได้กับผู้ใช้ทั่วไป

เริ่มต้นด้วย Ubuntu 11.04 /proc/sys/kernel/kptr_restrict ถูกตั้งค่าเป็น "1" และบล็อกการรั่วไหลของข้อมูลที่อยู่เคอร์เนล

นอกจาก, ไฟล์ต่างๆและไดเร็กทอรีจะถูกอ่านโดยรูทเท่านั้น
/boot/vmlinuz*, /boot/System.map*, /sys/kernel/debug/, /proc/slabinfo

ใช้การทดสอบ test-kernel-security.py

บัญชีดำของโปรโตคอลที่หายาก

โดยทั่วไปเคอร์เนลจะอนุญาตให้โหลดโปรโตคอลเครือข่ายทั้งหมดโดยอัตโนมัติตามความต้องการผ่านมาโคร MODULE_ALIAS_NETPROTO(PF_...)

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

บัญชีดำ: ax25, netrom, x25, rose, decnet, econet, rds และ af_802154

หากจำเป็นต้องใช้โปรโตคอลใดๆ เหล่านี้ คุณสามารถโหลดผ่าน modprobe หรือโดยการแก้ไข /etc/modprobe.d/blacklist-rare-network.conf

ใช้การทดสอบ test-kernel-security.py

การกรองการโทรของระบบ

โปรแกรมสามารถกรองการเรียกเคอร์เนลโดยใช้ seccomp_filter

ซึ่งดำเนินการในคอนเทนเนอร์หรือแซนด์บ็อกซ์เพื่อจำกัดซอฟต์แวร์ที่อาจไม่น่าเชื่อถือเพิ่มเติม

ใช้การทดสอบ test-kernel-security.py

บรรทัดล่าง

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

คอมพิวเตอร์ของคุณจะปลอดภัยกับ Ubuntu!

ในการประชุม LinuxCon ประจำปี 2558 Linus Torvalds ผู้สร้างเคอร์เนล GNU/Linux ได้แบ่งปันมุมมองของเขาเกี่ยวกับความปลอดภัยของระบบ เขาเน้นย้ำถึงความจำเป็นในการบรรเทาผลกระทบของข้อบกพร่องบางอย่างด้วยการป้องกันที่มีความสามารถ เพื่อว่าหากส่วนประกอบหนึ่งทำงานผิดปกติ ชั้นถัดไปจะครอบคลุมปัญหา

ในเนื้อหานี้เราจะพยายามครอบคลุมหัวข้อนี้จากมุมมองเชิงปฏิบัติ:

7. ติดตั้งไฟร์วอลล์

ล่าสุดมีช่องโหว่ใหม่ที่อนุญาตให้มีการโจมตี DDoS บนเซิร์ฟเวอร์ที่ใช้ Linux จุดบกพร่องในแกนของระบบปรากฏขึ้นพร้อมกับเวอร์ชัน 3.6 เมื่อสิ้นปี 2555 ช่องโหว่นี้ทำให้แฮกเกอร์สามารถแพร่ไวรัสเข้าไปในไฟล์ดาวน์โหลด หน้าเว็บ และการเชื่อมต่อ Tor ที่เปิดอยู่ และการแฮ็กไม่จำเป็นต้องใช้ความพยายามมากนัก วิธีการปลอมแปลง IP ก็ใช้ได้

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

บล็อกการเข้าถึงโดยใช้ไฟร์วอลล์

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

สำหรับการกรองแพ็กเก็ต ลีนุกซ์ส่วนใหญ่จะมีตัวควบคุม iptables โดยปกติแล้วผู้ใช้ขั้นสูงจะใช้ และสำหรับการตั้งค่าแบบง่าย คุณสามารถใช้ยูทิลิตี้ UFW ใน Debian/Ubuntu หรือ FirewallD ใน Fedora ได้

8. ปิดการใช้งานบริการที่ไม่จำเป็น

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

หากระบบของคุณได้รับการกำหนดค่าผ่าน inetd ดังนั้นในไฟล์ /etc/inetd.conf คุณสามารถแก้ไขรายการได้ โปรแกรมพื้นหลัง“ปีศาจ” หากต้องการปิดใช้งานการโหลดบริการ เพียงใส่เครื่องหมาย “#” ที่จุดเริ่มต้นของบรรทัด เปลี่ยนจากปฏิบัติการเป็นความคิดเห็น

หากระบบใช้ xinetd การกำหนดค่าจะอยู่ในไดเร็กทอรี /etc/xinetd.d ไฟล์ไดเร็กทอรีแต่ละไฟล์จะกำหนดบริการที่สามารถปิดใช้งานได้โดยระบุปิดการใช้งาน = ใช่ ดังในตัวอย่างนี้:

นิ้วบริการ ( socket_type = สตรีมรอ = ไม่มีผู้ใช้ = ไม่มีใครเซิร์ฟเวอร์ = /usr/sbin/in.fingerd ปิดการใช้งาน = ใช่ )
นอกจากนี้ ยังควรตรวจสอบกระบวนการแบบถาวรที่ไม่ได้จัดการโดย inetd หรือ xinetd คุณสามารถกำหนดค่าสคริปต์สตาร์ทอัพได้ในไดเร็กทอรี /etc/init.d หรือ /etc/inittab หลังจากทำการเปลี่ยนแปลงแล้ว ให้รันคำสั่งภายใต้บัญชีรูท

/etc/rc.d/init.d/inet รีสตาร์ท

9. ปกป้องเซิร์ฟเวอร์ทางกายภาพ

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

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

10. ปกป้องเซิร์ฟเวอร์จากการเข้าถึงโดยไม่ได้รับอนุญาต

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

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

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

บทสรุป

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

สวัสดีทุกคน... ผู้ดูแลระบบมือใหม่ทุกคนภายใต้ Ubuntu มีหน้าที่ตั้งค่าอินเทอร์เฟซเครือข่าย (เครือข่าย การ์ดเครือข่าย) ในบทความนี้ ฉันจะแสดงวิธีทำ... มันง่ายมาก...

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

eth0— 192.168.0.1 (สมมติว่านี่คือที่อยู่ที่ออกโดยผู้ให้บริการ) อินเทอร์เฟซที่ดูอินเทอร์เน็ต (ผู้ให้บริการ)
eth1— 10.0.0.1 (ที่อยู่ที่เราต้องการมอบให้กับอินเทอร์เฟซนี้) อินเทอร์เฟซที่หันหน้าไปทางเครือข่ายท้องถิ่น

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

Eth0 ลิงก์ encap:Ethernet HWaddr хх:хх:хх:хх:хх:хх inet addr:xxx.xxx.xxx.xxx Bcast:xxx.xxx.xxxx.xxx Mask:255.255.255.252 inet6 addr: xxx::xxx:xxx :xxx:xxxx/64 ขอบเขต:เชื่อมโยงการออกอากาศแบบมัลติคาสท์ MTU:1500 เมตริก:1 แพ็กเก็ต RX:31694097 ข้อผิดพลาด:0 ลดลง:0 โอเวอร์รัน:0 เฟรม:0 แพ็กเก็ต TX:15166512 ข้อผิดพลาด:0 ลดลง:0 โอเวอร์รัน:0 ผู้ให้บริการ: 0 การชน: 0 txqueuelen:100 ไบต์ RX:2215593127 (2.2 GB) ไบต์ TX:1577680249 (1.5 GB) หน่วยความจำ:b8820000-b8840000 eth1 encap ลิงก์:Ethernet HWaddr xx:xx:xx:xx:xx:xx inet addr:10.0. 0.1 Bcast:10.0.0.255 Mask:255.255.255.0 inet6 xxxx: xxxx::xxxx:xxxf:xxx:xxx/64 ขอบเขต: ลิงก์ UP BROADCAST RUNNING MULTICAST MTU:1500 เมตริก: 1 แพ็กเก็ต RX: 11352041 ข้อผิดพลาด: 0 ลดลง: 0 โอเวอร์รัน :0 เฟรม:0 แพ็กเก็ต TX:21539638 ข้อผิดพลาด:0 ลดลง:0 โอเวอร์รัน:0 ผู้ให้บริการ:0 การชนกัน:0 txqueuelen:100 ไบต์ RX:1262641422 (1.2 GB) ไบต์ TX:1922838889 (1.9 GB) หน่วยความจำ:b8800000-b8820000 lo ลิงก์ encap: Local loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 ขอบเขต:โฮสต์ UP LOOPBACK RUNNING MTU:16436 Metric:1 แพ็กเก็ต RX:3823 ข้อผิดพลาด: 0 ลดลง: 0 โอเวอร์รัน: 0 เฟรม: 0 แพ็กเก็ต TX: ข้อผิดพลาด 3823: 0 ลดลง: 0 โอเวอร์รัน: 0 ผู้ให้บริการ: 0 การชน: 0 txqueuelen: 0 ไบต์ RX: 717663 (717.6 KB) ไบต์ TX: 717663 (717.6 KB)

หากอินเทอร์เฟซใดอินเทอร์เฟซหนึ่งไม่แสดงก็ไม่เป็นไร เพิ่งปิดการใช้งาน มาเปิดใช้งานด้วยคำสั่งกันดีกว่า sudo ifconfig eth1 ขึ้นไป(แทนที่จะพิมพ์ eth1 ให้พิมพ์อินเทอร์เฟซของคุณ หากคุณมีการ์ดเครือข่าย 2 การ์ด แสดงว่ามีเพียง 2 อินเทอร์เฟซ: eth0 และ eth1) ดังนั้นเราจึงเปิดใช้งานอินเทอร์เฟซของเรา:

sudo ifconfig eth1 ขึ้นไป

เรามาเริ่มตั้งค่ากันดีกว่า

มากำหนดอินเทอร์เฟซ eth0 ให้กับที่อยู่ IP ที่ออกโดยผู้ให้บริการด้วยคำสั่งต่อไปนี้:

sudo ifconfig eth1 inet 192.168.0.2

และระบุเน็ตเวิร์กมาสก์:

sudo ifconfig eth0 เน็ตมาสก์ 255.255.255.0

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

ซูโดะซู

ไฟล์การกำหนดค่าอินเทอร์เฟซเครือข่ายอยู่ที่ /etc/เครือข่าย/อินเทอร์เฟซหากต้องการแก้ไข เราใช้โปรแกรมแก้ไขนาโน (คุณสามารถใช้โปรแกรมแก้ไขของคุณเองได้) ฉันชอบมัน นาโน

นาโน /etc/เครือข่าย/อินเทอร์เฟซ

เราเห็นสิ่งต่อไปนี้:

# ไฟล์นี้อธิบายอินเทอร์เฟซเครือข่ายที่มีอยู่ในระบบของคุณ #และวิธีการเปิดใช้งาน สำหรับข้อมูลเพิ่มเติม โปรดดูอินเทอร์เฟซ (5) # อินเทอร์เฟซเครือข่ายแบบย้อนกลับ อัตโนมัติแท้จริง iface หรือ inet loopback # อินเทอร์เฟซเครือข่ายหลัก// อินเทอร์เฟซเครือข่ายหลัก อัตโนมัติ eth0//การกำหนดคุณลักษณะต่อไปนี้ให้กับอินเทอร์เฟซเครือข่าย iface eth0 inet คงที่// เปิดใช้งานอินเทอร์เฟซเครือข่ายโดยอัตโนมัติ ที่อยู่ 192.168.0.2//ที่อยู่ IP ของเรา การ์ดเครือข่าย(ออกโดยผู้ให้บริการ) เน็ตมาสก์ 255.255.255.0//เน็ตเวิร์กมาสก์ซึ่งมี IP ของเราอยู่ เครือข่าย 192.168.0.0//เครือข่ายของทั้งช่วง ออกอากาศ 192.168.0.255//สูงสุด. จำนวนที่อยู่ เกตเวย์ 192.168.0.1//ประตู # dns-* ตัวเลือกถูกนำมาใช้โดยแพ็คเกจ resolvconf หากติดตั้งไว้

จำเป็นต้องลดให้เหลือรูปแบบดังต่อไปนี้

# ไฟล์นี้อธิบายอินเทอร์เฟซเครือข่ายที่มีอยู่ในระบบของคุณ # และวิธีการเปิดใช้งาน สำหรับข้อมูลเพิ่มเติม โปรดดูอินเทอร์เฟซ(5) # อินเทอร์เฟซเครือข่ายแบบย้อนกลับอัตโนมัติ lo iface lo inet loopback # อินเทอร์เฟซเครือข่ายหลักอัตโนมัติ eth0 iface eth0 ที่อยู่คงที่ inet 192.168.0.2 netmask 255.255.255.0 เครือข่าย 192.168.0.0 เกตเวย์ 192.168.0.1 # ตัวเลือก dns-* ถูกนำมาใช้โดยแพ็คเกจ resolvconf หากติดตั้ง DNS-nameservers 192.168.22.22 192.168.33.33 #อินเทอร์เฟซที่มองเข้าไปในเครือข่ายท้องถิ่น อัตโนมัติ eth1 iface eth1 inet แบบคงที่ ที่อยู่ 10.0.0.1 เน็ตมาสก์ 255.255.255.0

บันทึกการเปลี่ยนแปลงโดยกด Ctrl + O และออกโดยกด Ctrl + X

ที่อยู่ เซิร์ฟเวอร์ DNSสามารถตั้งค่าในไฟล์ /etc/network/interfaces แต่ที่อยู่เซิร์ฟเวอร์ DNS ใน Ubuntu ได้รับการจัดการผ่านไฟล์ /etc/resolv.conf สำหรับฉันดูเหมือนว่านี้:

เนมเซิร์ฟเวอร์ xx.xx.xx.xx เนมเซิร์ฟเวอร์ xx.xx.xx.xx

มากำหนดค่า DNS กัน โดยป้อนคำสั่งต่อไปนี้ในบรรทัด:

Sudo nano /etc/resolv.conf # ที่อยู่ IP ของเซิร์ฟเวอร์ DNS เนมเซิร์ฟเวอร์ของผู้ให้บริการของคุณ хх.ххх.ххх.ххх เนมเซิร์ฟเวอร์ ххх.ххх.хх.ххх

มาบันทึกกันเถอะ Ctrl+Oและเราก็ออกไป Ctrl +xคุณต้องรีบูทเครือข่ายด้วยคำสั่งต่อไปนี้

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

การแนะนำ

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

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

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

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

รหัสผ่าน!

ทุกอย่างเริ่มต้นด้วยรหัสผ่าน มีอยู่ทุกที่: ในหน้าต่างเข้าสู่ระบบในการแจกจ่าย Linux ในแบบฟอร์มการลงทะเบียนบนเว็บไซต์อินเทอร์เน็ต บนเซิร์ฟเวอร์ FTP และ SSH และบนหน้าจอล็อคของสมาร์ทโฟน มาตรฐานสำหรับรหัสผ่านในปัจจุบันคือ 8–12 ตัวอักษรในตัวพิมพ์ผสมและรวมตัวเลข การสร้างรหัสผ่านตามความคิดของคุณเองนั้นค่อนข้างน่าเบื่อ แต่มีวิธีง่ายๆ ที่จะทำโดยอัตโนมัติ:

$ openssl แรนด์ -base64 6

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

$ pwgen -Bs 8 1

จะเก็บรหัสผ่านได้ที่ไหน? ทุกวันนี้ผู้ใช้ทุกคนมีจำนวนมากจนเป็นไปไม่ได้เลยที่จะเก็บทุกอย่างไว้ในหัว เชื่อถือระบบบันทึกอัตโนมัติของเบราว์เซอร์ของคุณหรือไม่? เป็นไปได้ แต่ใครจะรู้ว่า Google หรือ Mozilla จะปฏิบัติต่อพวกเขาอย่างไร สโนว์เดนบอกว่ามันไม่ค่อยดีนัก ดังนั้นรหัสผ่านจะต้องถูกจัดเก็บไว้ในเครื่องในคอนเทนเนอร์ที่เข้ารหัส บรรพบุรุษผู้ก่อตั้งแนะนำให้ใช้ KeePassX สำหรับสิ่งนี้ สิ่งนี้เป็นแบบกราฟิกซึ่งบรรพบุรุษผู้ก่อตั้งเองก็ไม่ชอบนัก แต่ใช้งานได้ทุกที่รวมถึง Android Google Probe (KeePassDroid) ที่มีชื่อเสียง สิ่งที่เหลืออยู่คือการถ่ายโอนฐานข้อมูลพร้อมรหัสผ่านไปยังตำแหน่งที่จำเป็น

มาเข้ารหัสกันเถอะ

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

Linux มีตัวเลือกการเข้ารหัสมากมายสำหรับทุกสิ่งตั้งแต่พาร์ติชั่นฮาร์ดไดรฟ์ไปจนถึงไฟล์เดี่ยว เครื่องมือที่เป็นที่รู้จักและผ่านการทดสอบตามเวลามากที่สุดสามรายการ ได้แก่ dm-crypt/LUKS, ecryptfs และ encfs ครั้งแรกเข้ารหัสดิสก์และพาร์ติชั่นทั้งหมด ไดเรกทอรีที่สองและสามเข้ารหัสด้วยข้อมูลที่สำคัญ แต่ละไฟล์แยกกัน ซึ่งสะดวกมากหากคุณต้องการสำรองข้อมูลเพิ่มเติมหรือใช้ร่วมกับ Dropbox นอกจากนี้ยังมีเครื่องมือที่ไม่ค่อยมีใครรู้จักอีกมากมาย เช่น TrueCrypt เป็นต้น

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

$ sudo apt-get ติดตั้ง ecryptfs-utils

และในความเป็นจริง เปิดใช้งานการเข้ารหัส:

$ sudo ecryptfs-setup-swap $ ecryptfs-setup-private

จากนั้นเพียงกรอกรหัสผ่านที่ใช้เข้าสู่ระบบและเข้าสู่ระบบใหม่ ใช่ มันง่ายมากจริงๆ คำสั่งแรกจะเข้ารหัสและติดตั้งการสลับอีกครั้งโดยมีการเปลี่ยนแปลง เส้นที่จำเป็นใน /etc/fstab. ส่วนที่สองจะสร้างไดเร็กทอรี ~/.Private และ ~/Private ซึ่งไฟล์ที่เข้ารหัสและถอดรหัสจะถูกจัดเก็บตามลำดับ เมื่อคุณเข้าสู่ระบบ โมดูล PAM pam_ecryptfs.so จะถูกทริกเกอร์ ซึ่งจะเมานต์ไดเร็กทอรีแรกไปยังไดเร็กทอรีที่สองด้วยการเข้ารหัสข้อมูลที่โปร่งใส หลังจากยกเลิกการต่อเชื่อม ~/Private จะว่างเปล่า และ ~/.Private จะมีไฟล์ทั้งหมดในรูปแบบที่เข้ารหัส

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

# ecryptfs-migrate-home -u vasya

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

$เมานต์ | grep Private /home/vasya/.Private บน /home/vasya ประเภท ecryptfs ...

หากทุกอย่างเรียบร้อยดี คุณสามารถเขียนทับสำเนาข้อมูลที่ไม่ได้เข้ารหัสได้:

$ sudo rm -r /home/vasya.*

ครอบคลุมเส้นทางของเรา

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

$ sudo apt-get ติดตั้งอย่างปลอดภัย - ลบ $ srm Secret-file.txt home-video.mpg

# dd if=/dev/ศูนย์ของ=/dev/sdb

คำสั่งนี้จะลบข้อมูลทั้งหมดในแฟลชไดรฟ์ sdb ถัดไปสิ่งที่เหลืออยู่คือการสร้างตารางพาร์ติชัน (พร้อมพาร์ติชันเดียว) และจัดรูปแบบลงในระบบไฟล์ที่ต้องการ ขอแนะนำให้ใช้ fdisk และ mkfs.vfat สำหรับสิ่งนี้ แต่คุณสามารถใช้ gparted แบบกราฟิกได้เช่นกัน

ป้องกันการโจมตีแบบ BruteForce

Fail2ban เป็น daemon ที่สแกนบันทึกเพื่อพยายามเดารหัสผ่านสำหรับบริการเครือข่าย หากพบความพยายามดังกล่าว ที่อยู่ IP ที่น่าสงสัยจะถูกบล็อกโดยใช้ iptables หรือ TCP Wrappers บริการสามารถแจ้งเจ้าของโฮสต์เกี่ยวกับเหตุการณ์ผ่านทางอีเมล และรีเซ็ตการบล็อกหลังจากเวลาที่กำหนด Fail2ban เดิมได้รับการพัฒนาเพื่อปกป้อง SSH ปัจจุบันมีตัวอย่างสำเร็จรูปสำหรับ Apache, lighttpd, Postfix, Exim, Cyrus IMAP, ชื่อ และอื่นๆ นอกจากนี้ กระบวนการ Fail2ban หนึ่งกระบวนการสามารถปกป้องบริการหลายอย่างได้ในคราวเดียว

ใน Ubuntu/Debian เพื่อติดตั้งให้พิมพ์:

# apt-get ติดตั้ง failed2ban

การกำหนดค่าจะอยู่ในไดเร็กทอรี /etc/fail2ban หลังจากเปลี่ยนการกำหนดค่า คุณควรรีสตาร์ท failed2ban ด้วยคำสั่ง:

# /etc/init.d/fail2ban รีสตาร์ท

ภัยคุกคามจากภายนอก

ตอนนี้เรามาจัดการกับภัยคุกคามที่เล็ดลอดออกมาจากส่วนลึกกันดีกว่า เวิลด์ไวด์เว็บ. ที่นี่ฉันควรเริ่มพูดถึง iptables และ pf ที่ทำงานบนเครื่องเฉพาะที่ใช้ OpenBSD แต่ทั้งหมดนี้ซ้ำซ้อนเมื่อมี ipkungfu มันคืออะไร? นี่คือสคริปต์ที่จะทำงานสกปรกทั้งหมดในการกำหนดค่าไฟร์วอลล์ให้เรา โดยไม่ต้องเขียนรายการกฎที่ยาวเป็นกิโลเมตร ติดตั้ง:

$ sudo apt-get ติดตั้ง ipkungfu

การแก้ไขการกำหนดค่า:

$ sudo vi /etc/ipkungfu/ipkungfu.conf # เครือข่ายท้องถิ่นถ้ามีให้เขียนที่อยู่เครือข่ายพร้อมกับมาสก์ หากไม่มีให้เขียนที่อยู่ย้อนกลับ LOCAL_NET="127.0.0.1" # เครื่องของเราไม่ใช่เกตเวย์ GATEWAY=0 # ปิดพอร์ตที่จำเป็น FORBIDDEN_PORTS="135 137 139" # บล็อกการส่ง Ping เด็ก 90% จะหลุดในระยะนี้ BLOCK_PINGS=1 # ทิ้งแพ็กเก็ตที่น่าสงสัย (น้ำท่วมประเภทต่างๆ) SUSPECT="DROP" # ทิ้งแพ็กเก็ต "ผิด" (DoS บางประเภท) KNOWN_BAD="DROP" # กำลังสแกน พอร์ต? ฟาดฟัน! PORT_SCAN="วาง"

หากต้องการเปิดใช้งาน ipkungfu ให้เปิดไฟล์ /etc/default/ipkungfu และเปลี่ยนบรรทัด IPKFSTART = 0 เป็น IPKFSTART = 1 เรียกใช้:

$sudo อิปกังฟู

นอกจากนี้ เรามาทำการเปลี่ยนแปลงใน /etc/sysctl.conf:

$ sudo vi /etc/systcl.conf # วางการเปลี่ยนเส้นทาง ICMP (ต่อการโจมตี MITM) net.ipv4.conf.all.accept_redirects=0 net.ipv6.conf.all.accept_redirects=0 # เปิดใช้งานกลไก TCP syncookies net.ipv4 tcp_syncookies=1 # การปรับแต่งต่างๆ (ป้องกันการปลอมแปลง, เพิ่มคิวของการเชื่อมต่อ TCP "ครึ่งเปิด" ฯลฯ ) net.ipv4.tcp_timestamps=0 net.ipv4.conf.all.rp_filter=1 net.ipv4.tcp_max_syn_backlog= เคอร์เนล 1280 .core_uses_pid=1

เปิดใช้งานการเปลี่ยนแปลง:

$ sudo sysctl -p

การตรวจจับการบุกรุก

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

$ sudo apt-get ติดตั้ง snort $ snort -D

ทั้งหมด! ฉันไม่ได้ล้อเล่น, การตั้งค่ามาตรฐาน Snort มีมากเกินพอที่จะปกป้องโดยทั่วไป บริการเครือข่ายถ้าแน่นอน คุณมีมัน คุณเพียงแค่ต้องดูบันทึกเป็นครั้งคราว และในนั้นคุณจะพบบรรทัดดังนี้:

[**] ความพยายามล้นการตอบสนองโพรบ MS-SQL [**] http://www.securityfocus.com/bid/9407]

อ๊ะ. มีคนพยายามทำให้เกิดบัฟเฟอร์ล้นใน MySQL นอกจากนี้ยังมีลิงก์ไปยังหน้าพร้อมคำอธิบายปัญหาโดยละเอียด ความงาม.

มีคนสืบทอด...

คนที่ฉลาดเป็นพิเศษสามารถเลี่ยงไฟร์วอลล์ของเรา แซง Snort และรับได้ สิทธิ์รูทในระบบและตอนนี้เข้าสู่ระบบเป็นประจำโดยใช้ประตูหลังที่ติดตั้งไว้ ไม่ดีเลยต้องหาแบ็คดอร์ออกและอัพเดตระบบ หากต้องการค้นหารูทคิทและแบ็คดอร์ เราใช้ rkhunter:

$ sudo apt-get ติดตั้ง rkhunter

มาเปิดตัวกัน:

$ sudo rkhunter -c --sk

ซอฟต์แวร์จะตรวจสอบระบบทั้งหมดว่ามีรูทคิทอยู่หรือไม่ และแสดงผลลัพธ์บนหน้าจอ หากยังพบมัลแวร์ rkhunter จะชี้ไปยังตำแหน่งและสามารถลบออกได้ บันทึกโดยละเอียดเพิ่มเติมอยู่ที่นี่: /var/log/rkhunter.log เป็นการดีกว่าถ้ารัน rkhunter เป็นงาน cron ทุกวัน:

$ sudo vi /etc/cron.daily/rkhunter.sh #!/bin/bash /usr/bin/rkhunter -c --cronjob 2>&1 | mail -s "ผลลัพธ์การสแกน RKhunter" [ป้องกันอีเมล]

เราแทนที่ที่อยู่อีเมลของ Vasya ด้วยที่อยู่อีเมลของเรา และทำให้สคริปต์ใช้งานได้:

$ sudo chmod +x /etc/cron.daily/rkhunter.sh

$ sudo rkhunter -- อัปเดต

คุณสามารถเพิ่มมันก่อนคำสั่ง check ในสคริปต์ cron ได้ เครื่องมือค้นหารูทคิทอีกสองเครื่องมือ:

$ sudo apt-get ติดตั้งเสือ $ sudo Tiger $ sudo apt-get ติดตั้ง lynis $ sudo lynis -c

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

$ sudo apt-get ติดตั้ง debsums

มาดำเนินการตรวจสอบกันเถอะ:

$ sudo debsums -ac

เหมือนเคย? สามารถเพิ่มการเปิดตัวในงาน cron ได้



ข้างนอก

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

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

ในสถานการณ์ที่ทั้งไซต์อยู่ภายใต้ตัวกรองและที่อยู่ของไซต์ถูกขึ้นบัญชีดำที่ด้านข้างของเซิร์ฟเวอร์ DNS ของผู้ให้บริการ คุณสามารถใช้เซิร์ฟเวอร์ DNS ฟรีที่มีการเผยแพร่ที่อยู่ได้ เพียงนำที่อยู่สองแห่งที่คุณต้องการและเพิ่มลงใน /etc/resolv.conf:

เนมเซิร์ฟเวอร์ 156.154.70.22 เนมเซิร์ฟเวอร์ 156.154.71.22

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

$ sudo chattr +i /etc/resolv.conf

หลังจากนี้ ไฟล์จะมีการป้องกันการเขียนสำหรับทุกคน รวมถึงรูทด้วย

หากต้องการปกปิดประสบการณ์การท่องเว็บของคุณเพิ่มเติม คุณยังสามารถใช้ dnscrypt daemon ซึ่งจะเข้ารหัสคำขอทั้งหมดไปยังเซิร์ฟเวอร์ DNS นอกเหนือจากพร็อกซีเซิร์ฟเวอร์ที่ใช้เชื่อมต่อกับไซต์เอง ติดตั้ง:

$ wget http://download.dnscrypt.org/dnscrypt-proxy/dnscrypt-proxy-1.3.2.tar.bz2 $ bunzip2 -cd dnscrypt-proxy-*.tar.bz2 | tar xvf - $ cd dnscrypt-proxy-* $ sudo apt-get install build-essential $ ./configure && make -j2 $ sudo ทำการติดตั้ง

ระบุที่อยู่ลูปแบ็คใน /etc/resolv.conf:

$ vi /etc/resolv.conf เนมเซิร์ฟเวอร์ 127.0.0.1

มาเริ่ม daemon กัน:

$ sudo dnscrypt-proxy --daemonize

อย่างไรก็ตาม มี dnscrypt หลายเวอร์ชันสำหรับ Windows, iOS และ Android

การกำหนดเส้นทางหัวหอม

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

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

อย่างไรก็ตาม Tor นั้นติดตั้งและใช้งานได้ง่ายมาก:

$ sudo apt-get ติดตั้งทอร์

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


ข้อมูล

Tor เวอร์ชัน Android เรียกว่า Orbot

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

เป็น ecryptfs ที่ใช้ในการเข้ารหัสโฮมไดเร็กตอรี่ใน Ubuntu

ต่อสู้กับน้ำท่วม

ฉันจะให้คำสั่งบางอย่างที่สามารถช่วยให้โฮสต์ของคุณท่วมได้

การนับจำนวนการเชื่อมต่อต่อ พอร์ตเฉพาะ:

$ netstat -na | grep ":พอร์ต\ " | สุขา -l

การนับจำนวนการเชื่อมต่อ TCP "ครึ่งเปิด":

$ netstat -na | grep ":พอร์ต\ " | grep SYN_RCVD | สุขา -l

ดูรายการที่อยู่ IP ที่มีการร้องขอการเชื่อมต่อ:

$ netstat -na | grep ":พอร์ต\ " | เรียงลำดับ | ยูนิค -c | เรียงลำดับ -nr | น้อย

การวิเคราะห์แพ็กเก็ตที่น่าสงสัยโดยใช้ tcpdump:

# tcpdump -n -i eth0 -s 0 -w output.txt พอร์ต dst และโฮสต์ของเซิร์ฟเวอร์ IP

เรายกเลิกการเชื่อมต่อของผู้โจมตี:

# iptables -A INPUT -s IP ของผู้โจมตี -p tcp --destination-port port -j DROP

เราจำกัดจำนวนการเชื่อมต่อ "ครึ่งเปิด" สูงสุดจาก IP หนึ่งไปยังพอร์ตเฉพาะ:

# iptables -I อินพุต -p tcp --syn --dport port -m iplimit --iplimit- เหนือ 10 -j DROP

ปิดการใช้งานการตอบสนองต่อคำขอ ICMP ECHO:

# iptables -A อินพุต -p icmp -j DROP --icmp-type 8

ข้อสรุป

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

ในการประชุม LinuxCon ประจำปี 2558 Linus Torvalds ผู้สร้างเคอร์เนล GNU/Linux ได้แบ่งปันมุมมองของเขาเกี่ยวกับความปลอดภัยของระบบ เขาเน้นย้ำถึงความจำเป็นในการบรรเทาผลกระทบของข้อบกพร่องบางอย่างด้วยการป้องกันที่มีความสามารถ เพื่อว่าหากส่วนประกอบหนึ่งทำงานผิดปกติ ชั้นถัดไปจะครอบคลุมปัญหา

ในเนื้อหานี้เราจะพยายามครอบคลุมหัวข้อนี้จากมุมมองเชิงปฏิบัติ:

7. ติดตั้งไฟร์วอลล์

ล่าสุดมีช่องโหว่ใหม่ที่อนุญาตให้มีการโจมตี DDoS บนเซิร์ฟเวอร์ที่ใช้ Linux จุดบกพร่องในแกนของระบบปรากฏขึ้นพร้อมกับเวอร์ชัน 3.6 เมื่อสิ้นปี 2555 ช่องโหว่นี้ทำให้แฮกเกอร์สามารถแพร่ไวรัสเข้าไปในไฟล์ดาวน์โหลด หน้าเว็บ และการเชื่อมต่อ Tor ที่เปิดอยู่ และการแฮ็กไม่จำเป็นต้องใช้ความพยายามมากนัก วิธีการปลอมแปลง IP ก็ใช้ได้

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

บล็อกการเข้าถึงโดยใช้ไฟร์วอลล์

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

สำหรับการกรองแพ็กเก็ต ลีนุกซ์ส่วนใหญ่จะมีตัวควบคุม iptables โดยปกติแล้วผู้ใช้ขั้นสูงจะใช้ และสำหรับการตั้งค่าแบบง่าย คุณสามารถใช้ยูทิลิตี้ UFW ใน Debian/Ubuntu หรือ FirewallD ใน Fedora ได้

8. ปิดการใช้งานบริการที่ไม่จำเป็น

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

หากระบบของคุณได้รับการกำหนดค่าผ่าน inetd ดังนั้นในไฟล์ /etc/inetd.conf คุณสามารถแก้ไขรายการโปรแกรม "daemon" พื้นหลังได้ หากต้องการปิดใช้งานการโหลดบริการ เพียงใส่เครื่องหมาย "#" ที่จุดเริ่มต้นของบรรทัด เปลี่ยนจากปฏิบัติการเป็นความคิดเห็น

หากระบบใช้ xinetd การกำหนดค่าจะอยู่ในไดเร็กทอรี /etc/xinetd.d ไฟล์ไดเร็กทอรีแต่ละไฟล์จะกำหนดบริการที่สามารถปิดใช้งานได้โดยระบุปิดการใช้งาน = ใช่ ดังในตัวอย่างนี้:

นิ้วบริการ ( socket_type = สตรีมรอ = ไม่มีผู้ใช้ = ไม่มีใครเซิร์ฟเวอร์ = /usr/sbin/in.fingerd ปิดการใช้งาน = ใช่ )
นอกจากนี้ ยังควรตรวจสอบกระบวนการแบบถาวรที่ไม่ได้จัดการโดย inetd หรือ xinetd คุณสามารถกำหนดค่าสคริปต์สตาร์ทอัพได้ในไดเร็กทอรี /etc/init.d หรือ /etc/inittab หลังจากทำการเปลี่ยนแปลงแล้ว ให้รันคำสั่งภายใต้บัญชีรูท

/etc/rc.d/init.d/inet รีสตาร์ท

9. ปกป้องเซิร์ฟเวอร์ทางกายภาพ

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

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

10. ปกป้องเซิร์ฟเวอร์จากการเข้าถึงโดยไม่ได้รับอนุญาต

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

ตัวอย่างเช่น เครื่องมือ Tripwire และ Aide จะรวบรวมฐานข้อมูลของไฟล์ระบบและปกป้องโดยใช้ชุดคีย์ Psad ใช้เพื่อตรวจสอบกิจกรรมที่น่าสงสัยโดยใช้รายงานไฟร์วอลล์

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

บทสรุป

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