Apache vulnerable configuration
Apache มี configuration file คือ apache2.conf (ใน Ubuntu/Debien) และ httpd.conf (RedHat/CentOS)
ซึ่งการตั้งค่าต่อไปนี้ไม่เหมาะสม อาจเป็นช่องโหว่ของระบบได้ (กรุณาอ่านข้อมูลจาก [color=rgb(0, 85, 136) !important]
Apache Core Features)
จำนวนวินาที (Second) ที่ Apache รอเหตุการณ์ ได้แก่ GET Request, TCP Packet หรือ ACKs on transmission
หากตั้งค่าไม่เหมาะสม กล่าวคือสูงเกินไป อาจเป็นเหตุให้ดูโจมตีแบบ Denial of Service Attacks ได้
ค่าที่เหมาะสมคือ Timeout 300
ตั้งค่าให้ Apache คง HTTP Session เอาไว้เป็นระยะเวลา KeepAliveTimeout วินาที ซึ่งการตั้งค่า KeepAlive ON
จะทำให้ความเร็วการเรียกข้อมูล HTTL ที่มีรูปภาพมากๆได้ดียิ่งขึ้น, แต่จะไม่มีผลต่อ CGI หรือ Dynamic Contents
ค่าที่ควรเป็น คือ KeepAlive On
จำนวนวินาที (Second) ที่ Apache จะคง Connection เอาไว้ก่อนจะปิดลงเมื่อไม่มีการตอบสนองจาก client
หากตั้งค่าไว้สูงเกินไปจะกระทบกับสมรรถนะของระบบได้ อาจเป็นเหตุให้ดูโจมตีแบบ Denial of Service Attacks ได้
ค่าที่ควรเป็น <= 15
จำนวน Child Server Process ที่สร้างขึ้นเมื่อระบบเริ่มต้น
หากตั้งค่าไว้สูงเกินไปจะกระทบกับสมรรถนะของระบบได้ อาจเป็นเหตุให้ดูโจมตีแบบ Denial of Service Attacks ได้
ค่าที่ควรเป็น อยู่ระหว่าง 5 ถึง 15
จำนวนขั้นต่ำของ Process ที่ว่าง (idle) รอการใช้งาน, การที่ Server ต้องสร้าง Process ใหม่ต้องใช้เวลาดังนั้นการสร้างเผื่อเอาไว้
ทำให้การทำงานเร็วขึ้น
หากตั้งค่าไว้สูงเกินไปจะกระทบกับสมรรถนะของระบบได้ อาจเป็นเหตุให้ดูโจมตีแบบ Denial of Service Attacks ได้
ค่าที่ควรเป็น อยู่ระหว่าง 5 ถึง 15
จำนวนขั้นสูงของ Process ที่ว่าง (idle) รอการใช้งาน, การที่ Server ต้องสร้าง Process ใหม่ต้องใช้เวลาดังนั้นการสร้างเผื่อเอาไว้
ทำให้การทำงานเร็วขึ้น
หากตั้งค่าไว้สูงเกินไปจะกระทบกับสมรรถนะของระบบได้ อาจเป็นเหตุให้ดูโจมตีแบบ Denial of Service Attacks ได้
ค่าที่ควรเป็น ควรมากกว่า MinSpareServers อยู่ 1 แต่ไม่ควรเกิน 10
จำนวน Clients สูงสุดที่จะให้บริการพร้อมๆกัน หากการ Request ใดที่เกินกว่า MaxClients จะถูกเข้าคิว โดยคิวจะไม่ยาวเกิน
ListenBackLog Directive
หากตั้งค่าไว้สูงเกินไปจะกระทบกับสมรรถนะของระบบได้ อาจเป็นเหตุให้ดูโจมตีแบบ Denial of Service Attacks ได้
ค่าที่ควรเป็น <=256
การกำหนดให้ Directory ใดสามารถทำงานแบบ CGI ได้ และสามารถ Execute ได้
หากมีการกำหนด Directive ดังกล่าวใน Directory ที่มีความเสี่ยงเช่น ผู้ใช้ทั่วไปสามารถนำ Script มาวางได้
โดยไม่ได้รับการตรวจสอบ อาจเป็นช่องโหว่ได้
ค่าที่ควรเป็น : หากเป็น Directory ที่ไม่อนุญาตให้ใช้ CGI ต้องใส่ Option -ExecCGI เพื่อป้องกันการใช้ CGI
เป็นการกำหนดให้สามารถตาม Symbolic Links ไปได้ใน Directory ที่กำหนด
ซึ่งอาจเป็นช่องโหว่ให้เข้าถึงไฟล์ในที่ที่ไม่ต้องการได้ เช่นทำ Symbolic Link ไปยัง / ได้
ค่าที่ควรเป็น : หากเป็น Directory ที่ไม่อนุญาตให้ใช้ Symbolic Links ต้องใส่ Option -FollowSymLinks
การใช้งาน Server Side Include (SSI) ทำให้สามารถ Include ไฟล์ได้ แต่ไม่สามารถ Execute ได้
หากไม่ควบคุม Directory ที่เปิดให้ Include โดยไม่ห้ามการ Execute อาจเป็นช่องโหว่ให้เข้าถึงไฟล์ในที่ที่ไม่ต้องการได้
ค่าที่ควรเป็น :
- หากกำหนดใน Option เป็น -IncludesNOEXEC หรือ None จะเป็นการปิดการใช้งาน SSI โดยสิ้นเชิง
- หากกำหนดใน Directory ที่ให้ Include ได้ (Options Includes) ต้องกำหนดเพิ่มเติมด้วย Options Includes -IncludesNOEXEC
- นอกจากนั้น ต้องกำหนดเป็น AllowOverride None ทั้งหมด เพื่อป้องกันการ Override
หากมีการ request มาที่ /some/dir/foo และที่ Directory /some/dir กำหนดให้ใช้ Multiviews (Options Multivitews), Apache จะค้นหา
/some/dir/foo.* โดยจะได้การทำงานเหมือนดังที่ผู้ใช้ร้องขอ เช่น ขอ /some/dir/index.php มา แต่มี index.txt อยู่แต่ไม่มี index.php
ก็จะเอา index.txt ไปทำงานเหมือนเป็น index.php ซึ่งเป็นอันตรายอย่างยิ่ง
ค่าที่ควรเป็นคือ : ไม่ควรใช้ MultiViews หากไม่เข้าใจความเสี่ยง ดังนั้นควรตั้งค่าเป็น Options None
การเรียก URL มาที่ Directory หนึ่ง หากไม่มีการกำหนด DirectoryIndex Directive (เช่น index.html), Apache จะแสดงไฟล์ใน Directory นั้น
ซึ่งเป็นสิ่งที่ไม่ควรเกิดขึ้น
ค่าที่ควรเป็น : ควรกำหนด Options None หรือ Options -Indexes
ขนาดของ Request Body หน่วยเป็น Byte ซึ่งต้องเพียงพอต่อการส่งข้อมูลของผู้ใช้ ขึ้นกับความต้องการแต่ละที่
หากกำหนดเป็น 0 หมายถึงส่งได้ไม่จำกัด (สูงสุดคือ 2 GB) ซึ่งอาจนำมาซึ่ง Buffer Overflow Attack ได้
ค่าที่ควรเป็น : >=1 และต้องมีการกำหนด เพราะมีค่า Default เป็น 0 (Unlimited)
จำนวน Fields ของ Request Form ซึ่งต้องเพียงพอต่อการส่งข้อมูลของผู้ใช้ ขึ้นกับความต้องการแต่ละที่
หากกำหนดเป็น 0 หมายถึงส่งได้ไม่จำกัด (สูงสุดคือ 32,767) ซึ่งอาจนำมาซึ่ง Buffer Overflow Attack ได้
ค่าที่ควรเป็น : >=1, ค่า Default เป็น 100
ขนาดของ Request Fields หน่วยเป็น Byte ซึ่งต้องเพียงพอต่อการส่งข้อมูลของผู้ใช้ ขึ้นกับความต้องการแต่ละที่
หากกำหนดมากเกินไป อาจนำมาซึ่ง Buffer Overflow Attack ได้
ค่าที่ควรเป็น : 8190, ค่า Default เป็น 4094
จำนวนบรรทัดของ Request Fields ซึ่งต้องเพียงพอต่อการส่งข้อมูลของผู้ใช้ ขึ้นกับความต้องการแต่ละที่
หากกำหนดมากเกินไป อาจนำมาซึ่ง Buffer Overflow Attack ได้
ค่าที่ควรเป็น : 8190, ค่า Default เป็น 4094
ขอบคุณคุณ คณกรณ์ หอศิริธรรม