Apache vulnerable configuration

จาก Wiki Opensource

ดูแลโดย คณกรณ์ หอศิริธรรม

ปรับปรุงล่าสุด: 2010-08-29


Apache มี configuration file คือ apache2.conf (ใน Ubuntu/Debien) และ httpd.conf (RedHat/CentOS)

ซึ่งการตั้งค่าต่อไปนี้ไม่เหมาะสม อาจเป็นช่องโหว่ของระบบได้ (กรุณาอ่านข้อมูลจาก Apache Core Features)

  • Timeout

จำนวนวินาที (Second) ที่ Apache รอเหตุการณ์ ได้แก่ GET Request, TCP Packet หรือ ACKs on transmission
หากตั้งค่าไม่เหมาะสม กล่าวคือสูงเกินไป อาจเป็นเหตุให้ดูโจมตีแบบ Denial of Service Attacks ได้

ค่าที่เหมาะสมคือ Timeout 300


  • KeepAlive

ตั้งค่าให้ Apache คง HTTP Session เอาไว้เป็นระยะเวลา KeepAliveTimeout วินาที ซึ่งการตั้งค่า KeepAlive ON

จะทำให้ความเร็วการเรียกข้อมูล HTTL ที่มีรูปภาพมากๆได้ดียิ่งขึ้น, แต่จะไม่มีผลต่อ CGI หรือ Dynamic Contents

ค่าที่ควรเป็น คือ KeepAlive On


  • KeepAliveTimeout

จำนวนวินาที (Second) ที่ Apache จะคง Connection เอาไว้ก่อนจะปิดลงเมื่อไม่มีการตอบสนองจาก client

หากตั้งค่าไว้สูงเกินไปจะกระทบกับสมรรถนะของระบบได้ อาจเป็นเหตุให้ดูโจมตีแบบ Denial of Service Attacks ได้

ค่าที่ควรเป็น <= 15


  • StartServers

จำนวน Child Server Process ที่สร้างขึ้นเมื่อระบบเริ่มต้น

หากตั้งค่าไว้สูงเกินไปจะกระทบกับสมรรถนะของระบบได้ อาจเป็นเหตุให้ดูโจมตีแบบ Denial of Service Attacks ได้

ค่าที่ควรเป็น อยู่ระหว่าง 5 ถึง 15


  • MinSpareServers

จำนวนขั้นต่ำของ Process ที่ว่าง (idle) รอการใช้งาน, การที่ Server ต้องสร้าง Process ใหม่ต้องใช้เวลาดังนั้นการสร้างเผื่อเอาไว้

ทำให้การทำงานเร็วขึ้น

หากตั้งค่าไว้สูงเกินไปจะกระทบกับสมรรถนะของระบบได้ อาจเป็นเหตุให้ดูโจมตีแบบ Denial of Service Attacks ได้

ค่าที่ควรเป็น อยู่ระหว่าง 5 ถึง 15


  • MaxSpareServers

จำนวนขั้นสูงของ Process ที่ว่าง (idle) รอการใช้งาน, การที่ Server ต้องสร้าง Process ใหม่ต้องใช้เวลาดังนั้นการสร้างเผื่อเอาไว้

ทำให้การทำงานเร็วขึ้น

หากตั้งค่าไว้สูงเกินไปจะกระทบกับสมรรถนะของระบบได้ อาจเป็นเหตุให้ดูโจมตีแบบ Denial of Service Attacks ได้

ค่าที่ควรเป็น ควรมากกว่า MinSpareServers อยู่ 1 แต่ไม่ควรเกิน 10


  • MaxClients

จำนวน Clients สูงสุดที่จะให้บริการพร้อมๆกัน หากการ Request ใดที่เกินกว่า MaxClients จะถูกเข้าคิว โดยคิวจะไม่ยาวเกิน

ListenBackLog Directive

หากตั้งค่าไว้สูงเกินไปจะกระทบกับสมรรถนะของระบบได้ อาจเป็นเหตุให้ดูโจมตีแบบ Denial of Service Attacks ได้

ค่าที่ควรเป็น <=256


  • ExecCGI

การกำหนดให้ Directory ใดสามารถทำงานแบบ CGI ได้ และสามารถ Execute ได้

หากมีการกำหนด Directive ดังกล่าวใน Directory ที่มีความเสี่ยงเช่น ผู้ใช้ทั่วไปสามารถนำ Script มาวางได้

โดยไม่ได้รับการตรวจสอบ อาจเป็นช่องโหว่ได้

ค่าที่ควรเป็น : หากเป็น Directory ที่ไม่อนุญาตให้ใช้ CGI ต้องใส่ Option -ExecCGI เพื่อป้องกันการใช้ CGI


  • FollowSymLinks

เป็นการกำหนดให้สามารถตาม Symbolic Links ไปได้ใน Directory ที่กำหนด

ซึ่งอาจเป็นช่องโหว่ให้เข้าถึงไฟล์ในที่ที่ไม่ต้องการได้ เช่นทำ Symbolic Link ไปยัง / ได้

ค่าที่ควรเป็น : หากเป็น Directory ที่ไม่อนุญาตให้ใช้ Symbolic Links ต้องใส่ Option -FollowSymLinks


  • IncludesNOEXEC

การใช้งาน Server Side Include (SSI) ทำให้สามารถ Include ไฟล์ได้ แต่ไม่สามารถ Execute ได้

หากไม่ควบคุม Directory ที่เปิดให้ Include โดยไม่ห้ามการ Execute อาจเป็นช่องโหว่ให้เข้าถึงไฟล์ในที่ที่ไม่ต้องการได้

ค่าที่ควรเป็น :

- หากกำหนดใน Option เป็น -IncludesNOEXEC หรือ None จะเป็นการปิดการใช้งาน SSI โดยสิ้นเชิง

- หากกำหนดใน Directory ที่ให้ Include ได้ (Options Includes) ต้องกำหนดเพิ่มเติมด้วย Options Includes -IncludesNOEXEC

- นอกจากนั้น ต้องกำหนดเป็น AllowOverride None ทั้งหมด เพื่อป้องกันการ Override


  • MultiViews

หากมีการ 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


  • Indexes

การเรียก URL มาที่ Directory หนึ่ง หากไม่มีการกำหนด DirectoryIndex Directive (เช่น index.html), Apache จะแสดงไฟล์ใน Directory นั้น

ซึ่งเป็นสิ่งที่ไม่ควรเกิดขึ้น

ค่าที่ควรเป็น : ควรกำหนด Options None หรือ Options -Indexes


  • LimitRequestBody

ขนาดของ Request Body หน่วยเป็น Byte ซึ่งต้องเพียงพอต่อการส่งข้อมูลของผู้ใช้ ขึ้นกับความต้องการแต่ละที่

หากกำหนดเป็น 0 หมายถึงส่งได้ไม่จำกัด (สูงสุดคือ 2 GB) ซึ่งอาจนำมาซึ่ง Buffer Overflow Attack ได้

ค่าที่ควรเป็น : >=1 และต้องมีการกำหนด เพราะมีค่า Default เป็น 0 (Unlimited)


  • LimitRequestFields

จำนวน Fields ของ Request Form ซึ่งต้องเพียงพอต่อการส่งข้อมูลของผู้ใช้ ขึ้นกับความต้องการแต่ละที่

หากกำหนดเป็น 0 หมายถึงส่งได้ไม่จำกัด (สูงสุดคือ 32,767) ซึ่งอาจนำมาซึ่ง Buffer Overflow Attack ได้

ค่าที่ควรเป็น : >=1, ค่า Default เป็น 100


  • LimitRequestFieldsize

ขนาดของ Request Fields หน่วยเป็น Byte ซึ่งต้องเพียงพอต่อการส่งข้อมูลของผู้ใช้ ขึ้นกับความต้องการแต่ละที่

หากกำหนดมากเกินไป อาจนำมาซึ่ง Buffer Overflow Attack ได้

ค่าที่ควรเป็น : 8190, ค่า Default เป็น 4094


  • LimitRequestLine

จำนวนบรรทัดของ Request Fields ซึ่งต้องเพียงพอต่อการส่งข้อมูลของผู้ใช้ ขึ้นกับความต้องการแต่ละที่

หากกำหนดมากเกินไป อาจนำมาซึ่ง Buffer Overflow Attack ได้

ค่าที่ควรเป็น : 8190, ค่า Default เป็น 4094


  • addHandler
  • ServerToken