ฟังก์ชั่นของโปรแกรม CGI นั้นทรงพลัง แต่ด้วยเหตุนี้หากคุณในฐานะนักพัฒนา CGI หรือผู้ดูแลระบบไม่ใส่ใจกับการเขียนและตั้งค่าโปรแกรม CGI ระบบของคุณก็จะเต็มไปด้วยช่องโหว่ บทความนี้จะกล่าวถึงปัญหาด้านความปลอดภัยของ CGI
3. ความปลอดภัยของซีจีไอ
ฟังก์ชั่นของโปรแกรม CGI นั้นทรงพลัง ไม่เพียงแต่จะมีฟังก์ชั่นของโปรแกรมธรรมดาเท่านั้น แต่ยังสามารถเผยแพร่ผลลัพธ์ของโปรแกรมบนเว็บได้อีกด้วย แต่เนื่องจากฟังก์ชันของโปรแกรม CGI นั้นทรงพลังมาก หากคุณในฐานะนักพัฒนา CGI หรือผู้ดูแลระบบ ไม่ใส่ใจกับการเขียนและตั้งค่าโปรแกรม CGI ระบบของคุณก็จะเต็มไปด้วยช่องโหว่ ทำให้ผู้ใช้ที่ผิดกฎหมายบางรายสามารถเอาเปรียบได้ ของพวกเขา
ความปลอดภัยที่กล่าวถึงในที่นี้ไม่ได้เกิดจากข้อกำหนด CGI แต่เกิดจากการตั้งโปรแกรมและการตั้งค่าระบบที่ไม่เหมาะสม ข้อกำหนด CGI ช่วยให้ผู้ใช้สามารถใช้ประโยชน์จากพลังการประมวลผลของเซิร์ฟเวอร์ได้ ถือเป็นการคำนวณที่ไม่เหมาะสมบนเซิร์ฟเวอร์ที่นำไปสู่ช่องโหว่ด้านความปลอดภัยของระบบ ด้านล่างนี้ฉันให้ช่องโหว่ด้านความปลอดภัย CGI บนระบบ UNIX ช่องโหว่นี้เป็นเรื่องปกติมาก
# !/usr/local/bin/perl
#formmail.cgi
ต้องการ "cgi.pl";
# เปิดแอปพลิเคชันอีเมล "/bin/mail" ด้วยหัวเรื่อง: ส่วนหัวจากช่อง "ชื่อแบบฟอร์ม"
open (MAIL, "|/bin/mail -s '".$input{"formname"}."' เว็บวีฟ");
# เพิ่มช่องส่ง "formcontents" เป็นเนื้อหาของข้อความ
พิมพ์ MAIL $input{"formcontents"};
ปิด(เมล);
ออก(0);
ในตัวอย่างนี้ โปรแกรม CGI ส่งข้อมูลแบบฟอร์มไปที่ /bin/mail และส่งไปยังเซิร์ฟเวอร์ webveave ในกรณีส่วนใหญ่ โปรแกรม CGI นี้สามารถทำงานให้เสร็จสิ้นได้ตามปกติ แต่โปรแกรม CGI นี้ไม่ได้กรองข้อมูลที่ผู้ใช้ป้อนในรูปแบบเว็บ จึงทำให้เกิดความเสี่ยงด้านความปลอดภัย เมื่อผู้ใช้หรือบุคคลที่มีเจตนาแอบแฝงป้อนข้อมูลที่ไม่ถูกต้อง อาจทำให้เกิดข้อผิดพลาดของระบบหรือได้รับสิทธิ์ที่ไม่เหมาะสม
ตัวอย่างเช่น ผู้ใช้กรอกเนื้อหาต่อไปนี้ใน "formname" ของแบบฟอร์ม WEB:
"ls /etc/passwd '[email protected] #'
เนื้อหาของ /etc/passwd จะถูกแสดงในเว็บเบราว์เซอร์ของผู้ใช้ หากไฟล์ passwd ของระบบ UNIX นี้ไม่มีเงา ผู้ใช้สามารถใช้เนื้อหานี้เพื่อพยายามถอดรหัสรหัสผ่านโดยใช้ crack jack หรือ crack john!
ดังที่ได้กล่าวไว้ก่อนหน้านี้ ความปลอดภัยของ CGI เป็นความรับผิดชอบของทั้งโปรแกรมเมอร์และผู้ดูแลระบบ ตอนนี้ฉันจะพูดถึงสิ่งต่าง ๆ ที่ทั้งคู่ควรใส่ใจ:
งานของผู้ดูแลระบบ:
1. ร่วมมือกับโปรแกรมเมอร์ในการแบ่งปันข้อมูลเกี่ยวกับความปลอดภัยของเซิร์ฟเวอร์ ตรวจสอบโค้ดของกันและกันพร้อม ๆ กัน และค้นพบปัญหาด้านความปลอดภัยในโค้ดได้ทันท่วงที
2. ใช้ซอฟต์แวร์เซิร์ฟเวอร์ที่ดีและมักจะไปที่เว็บไซต์ของซอฟต์แวร์เซิร์ฟเวอร์เพื่อเรียนรู้ข้อมูลล่าสุด
3. จำกัดผู้ใช้เซิร์ฟเวอร์ไว้เฉพาะโฮสต์เครือข่าย ใช้ฟังก์ชันการจัดการความปลอดภัยของเซิร์ฟเวอร์ ตั้งค่าการควบคุมการเข้าถึงเส้นทาง ฯลฯ
4. จำกัดฟังก์ชัน CGI จำกัดบริการขั้นสูงบางอย่างสำหรับผู้ใช้ที่เชื่อถือได้ จำกัดการใช้โปรแกรม CGI ที่ทดสอบแล้วแก่นักพัฒนา และให้บริการเฉพาะโปรแกรม CGI ที่ทดสอบแล้วแก่ผู้ใช้
5. เมื่อใช้โปรแกรม CGI ของผู้อื่น ให้ตรวจสอบโค้ดอย่างละเอียด
6. จำกัดการใช้โปรแกรม CGI ให้อยู่ในสภาพแวดล้อมที่ได้รับการป้องกัน ตั้งค่าเซิร์ฟเวอร์เป็นการเข้าถึงของผู้ใช้ที่ไม่มีสิทธิพิเศษ และตั้งค่าบัญชีหรือกลุ่มที่ทำงานอยู่สำหรับโปรแกรม CGI โดยเฉพาะ
7. ตั้งค่าเซิร์ฟเวอร์ที่รันโปรแกรม CGI นอกไฟร์วอลล์ ต้องสังเกตว่าเซิร์ฟเวอร์ที่รันโปรแกรม CGI จะต้องตั้งค่านอกไฟร์วอลล์ โปรแกรมเซิร์ฟเวอร์ CGI คุณจะสามารถควบคุมโฮสต์ทั้งหมดภายในไฟร์วอลล์ได้!
8. ลดลำดับความสำคัญในการทำงานของโปรแกรม CGI เพื่อป้องกันไม่ให้ผู้ใช้เรียกใช้โปรแกรม CGI จำนวนมากอย่างประสงค์ร้าย ส่งผลให้เซิร์ฟเวอร์โอเวอร์โหลด
9. สมัครรับอีเมลเกี่ยวกับความปลอดภัยของเครือข่ายและเข้าร่วมในกลุ่มข่าวความปลอดภัยของเครือข่าย
งานโปรแกรมเมอร์ CGI:
1. ร่วมมือกับผู้ดูแลระบบเพื่อทำความเข้าใจข้อมูลความปลอดภัยของระบบและตรวจสอบรหัสซึ่งกันและกัน
2. ใช้โปรแกรมห้องสมุดที่เชื่อถือได้และตรวจสอบซอร์สโค้ดของโปรแกรมห้องสมุด
3. รับชื่อไคลเอ็นต์จาก REMOTE_HOST และจำกัดฟังก์ชันขั้นสูงบางอย่างไว้สำหรับไคลเอ็นต์ที่เชื่อถือได้
4. หากเว็บเซิร์ฟเวอร์ให้การยืนยันรหัสผ่าน HTTP ให้ใช้รหัสผ่าน HTTP เพื่อจำกัดการเข้าถึง
5. กรองอินพุตของผู้ใช้และลบข้อมูลที่อินพุตที่ผิดกฎหมาย
6. จำกัดขนาดของข้อมูลที่ป้อนเพื่อป้องกันไม่ให้ผู้ใช้ที่เป็นอันตรายโหลดเซิร์ฟเวอร์มากเกินไปโดยการป้อนข้อมูลจำนวนมาก
7. หลีกเลี่ยงการส่งข้อมูลผู้ใช้ไปยังแอปพลิเคชันอื่นเพื่อป้องกันไม่ให้ผู้ใช้เรียกใช้ตัวแปลคำสั่งหรือใช้ประโยชน์จากช่องโหว่ด้านความปลอดภัยในแอปพลิเคชันอื่น
8. เมื่อคุณพบช่องโหว่ในโปรแกรม CGI อย่าบอกใคร ไม่ต้องพูดถึงการแสดงความคิดเห็นในโปรแกรม สิ่งที่คุณควรทำคือแก้ไขช่องโหว่ทันที
9. เรียนรู้ที่จะเป็นผู้โจมตีและค้นหาช่องโหว่ด้านความปลอดภัยของโปรแกรม CGI