คู่มือการแข็งตัวและความปลอดภัยของ Apache Web Server

คำแนะนำการปฏิบัติเพื่อรักษาความปลอดภัยและทำให้แข็ง Apache HTTP Server.


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

การกำหนดค่าเริ่มต้นจะให้ข้อมูลที่ละเอียดอ่อนมากซึ่งอาจช่วยให้แฮ็กเกอร์เตรียมพร้อมสำหรับการโจมตีแอปพลิเคชัน การโจมตีเว็บแอพพลิเคชั่นส่วนใหญ่นั้นเกิดจากการโจมตีแบบ XSS, การรั่วไหลของข้อมูล, การจัดการเซสชั่นและการฉีด SQL ซึ่งเกิดจากรหัสการเขียนโปรแกรมที่อ่อนแอและความล้มเหลวในการฆ่าเชื้อ.

งานวิจัยที่น่าสนใจโดย เทคโนโลยีเชิงบวก พบว่า 52% ของแอปพลิเคชั่นสแกนมีช่องโหว่สูง.

ในบทความนี้ฉันจะพูดเกี่ยวกับแนวทางปฏิบัติที่ดีที่สุดในการรักษาความปลอดภัยเซิร์ฟเวอร์ Apache HTTP บนแพลตฟอร์ม Linux.

ต่อไปนี้จะทดสอบกับ Apache รุ่น 2.4.x.

  • สิ่งนี้ถือว่าคุณได้ติดตั้ง Apache บนแพลตฟอร์ม UNIX แล้ว หากไม่มีคุณสามารถไปที่คู่มือการติดตั้ง.
  • ฉันจะเรียกไดเรกทอรีการติดตั้ง Apache / opt / apache เป็น $ Web_Server ในคู่มือนี้.
  • คุณควรสำรองข้อมูลไฟล์การกำหนดค่าที่มีอยู่ก่อนการแก้ไขใด ๆ.

Contents

ผู้ชม

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

ความรู้พื้นฐานของ Apache Web Server & คำสั่ง UNIX จำเป็นต้องมี.

หมายเหตุ

คุณต้องใช้เครื่องมือบางอย่างเพื่อตรวจสอบส่วนหัว HTTP สำหรับการตรวจสอบการใช้งานบางอย่าง มีสองวิธีในการทำเช่นนี้.

  1. ใช้เครื่องมือสำหรับนักพัฒนาของเบราว์เซอร์ inbuilt เพื่อตรวจสอบส่วนหัว HTTP โดยปกติจะอยู่ภายใต้แท็บเครือข่าย
  2. ใช้เครื่องมือตรวจสอบส่วนหัวการตอบสนอง HTTP ออนไลน์

ลบแบนเนอร์เวอร์ชันเซิร์ฟเวอร์

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

การกำหนดค่าเริ่มต้นจะเปิดเผย Apache Version และประเภทระบบปฏิบัติการตามที่แสดงด้านล่าง.

  • ไปที่ $ Web_Server / โฟลเดอร์ conf
  • แก้ไข httpd.conf โดยใช้เครื่องมือแก้ไข vi
  • เพิ่มคำสั่งต่อไปนี้และบันทึก httpd.conf

ServerTokens Prod
ServerSignature Off

  • รีสตาร์ท apache

ServerSignature จะลบข้อมูลรุ่นออกจากหน้าเว็บที่สร้างโดย Apache.

ServerTokens จะเปลี่ยนส่วนหัวเป็นการผลิตเท่านั้นเช่น Apache

ตามที่คุณเห็นด้านล่างเวอร์ชั่น & ข้อมูลระบบปฏิบัติการหายไป.

ปิดการใช้งานรายการเบราว์เซอร์ไดเรกทอรี

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

ลองทดสอบดูว่าการตั้งค่าเริ่มต้นเป็นอย่างไร.

  • ไปที่ไดเรกทอรี $ Web_Server / htdocs
  • สร้างโฟลเดอร์และไฟล์เพียงเล็กน้อยภายในนั้น

# mkdir test
# touch hi
# สัมผัสสวัสดี

ทีนี้มาลองใช้ Apache โดย http: // localhost / test

อย่างที่คุณเห็นมันจะแสดงไฟล์ / โฟลเดอร์ทั้งหมดที่คุณมีและฉันแน่ใจว่าคุณไม่ต้องการเปิดเผยสิ่งนั้น.

  • ไปที่ไดเรกทอรี $ Web_Server / conf
  •  เปิด httpd.conf โดยใช้ vi
  •  ค้นหาไดเรกทอรีและเปลี่ยนตัวเลือกคำสั่งเป็นไม่มีหรือ – ดัชนี

ตัวเลือก -Indexes

(หรือ)

ตัวเลือกไม่มี

  • รีสตาร์ท Apache

หมายเหตุ: หากคุณมีคำสั่งไดเรกทอรีหลายรายการในสภาพแวดล้อมของคุณคุณควรพิจารณาทำเช่นเดียวกันสำหรับทุกคน.

ทีนี้มาลองใช้ Apache โดย http: // localhost / test

อย่างที่คุณเห็นมันจะแสดงข้อผิดพลาดต้องห้ามแทนที่จะแสดงรายการโฟลเดอร์ทดสอบ.

etag

อนุญาตให้ผู้โจมตีจากระยะไกลรับข้อมูลที่ละเอียดอ่อนเช่นหมายเลขไอโหนดขอบเขต MIME หลายส่วนและกระบวนการลูกผ่านส่วนหัว Etag.

เพื่อป้องกันช่องโหว่นี้ให้ดำเนินการดังต่อไปนี้ สิ่งนี้จำเป็นสำหรับการแก้ไขเพื่อให้สอดคล้องกับ PCI.

  • ไปที่ไดเรกทอรี $ Web_Server / conf
  • เพิ่มคำสั่งต่อไปนี้และบันทึก httpd.conf

FileETag ไม่มี

  • รีสตาร์ท apache

เรียกใช้ Apache จากบัญชีที่ไม่มีสิทธิพิเศษ

การติดตั้งเริ่มต้นทำงานเป็นไม่มีใครหรือ daemon การใช้ผู้ใช้ที่ไม่มีสิทธิพิเศษแยกต่างหากสำหรับ Apache เป็นสิ่งที่ดี.

ความคิดที่นี่คือการปกป้องบริการอื่น ๆ ที่ทำงานในกรณีที่มีช่องโหว่ความปลอดภัยใด ๆ.

  • สร้างผู้ใช้และกลุ่มที่เรียกว่า apache

# groupadd apache
# useradd –G apache apache

  • เปลี่ยนความเป็นเจ้าของไดเรกทอรีการติดตั้ง apache เป็นผู้ใช้ที่ไม่มีสิทธิ์พิเศษที่สร้างขึ้นใหม่

# chown –R apache: apache / opt / apache

  •  ไปที่ $ Web_Server / conf
  •  แก้ไข httpd.conf โดยใช้ vi
  •  ค้นหาผู้ใช้ & กลุ่มคำสั่งและการเปลี่ยนแปลงเป็น Apache บัญชีที่ไม่มีสิทธิพิเศษ

ผู้ใช้ apache
กลุ่มอาปาเช่

  •  บันทึก httpd.conf
  •  รีสตาร์ท Apache

grep สำหรับการเรียกใช้กระบวนการ http และตรวจสอบว่ามันกำลังทำงานอยู่กับผู้ใช้ apache

# ps –ef | grep http

คุณควรเห็นกระบวนการหนึ่งกำลังทำงานอยู่กับรูท นั่นเป็นเพราะ Apache กำลังฟังพอร์ต 80 และต้องเริ่มต้นด้วยรูท.

ปกป้องสิทธิ์ไบนารีและการกำหนดค่าไดเรกทอรี

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

  • ไปที่ไดเรกทอรี $ Web_Server
  • เปลี่ยนการอนุญาตของ bin และโฟลเดอร์ conf

# chmod –R 750 bin conf

การป้องกันการตั้งค่าระบบ

ในการติดตั้งเริ่มต้นผู้ใช้สามารถแทนที่การกำหนดค่า apache โดยใช้. htaccess หากคุณต้องการหยุดผู้ใช้ไม่ให้เปลี่ยนการตั้งค่าเซิร์ฟเวอร์ apache ของคุณคุณสามารถเพิ่ม AllowOverride เป็น None ดังที่แสดงด้านล่าง.

สิ่งนี้จะต้องทำในระดับราก.

  • ไปที่ไดเรกทอรี $ Web_Server / conf
  •  เปิด httpd.conf โดยใช้ vi
  •  ค้นหาไดเรกทอรีในระดับราก

ตัวเลือก -Indexes
AllowOverride None

  •  บันทึก httpd.conf
  •  รีสตาร์ท Apache

วิธีการร้องขอ HTTP

โปรโตคอล HTTP 1.1 สนับสนุนวิธีการร้องขอจำนวนมากซึ่งอาจไม่จำเป็นและบางวิธีก็มีความเสี่ยงที่อาจเกิดขึ้น.

โดยทั่วไปคุณอาจต้องใช้ GET, HEAD, POST วิธีการร้องขอในเว็บแอปพลิเคชันซึ่งสามารถกำหนดค่าได้ในไดเรกทอรี.

สนับสนุนการกำหนดค่าเริ่มต้นตัวเลือก GET, HEAD, POST, PUT, DELETE, TRACE, CONNECT ในโปรโตคอล HTTP 1.1.

  •  ไปที่ไดเรกทอรี $ Web_Server / conf
  •  เปิด httpd.conf โดยใช้ vi
  • ค้นหาไดเรกทอรีและเพิ่มรายการต่อไปนี้

ปฏิเสธจากทั้งหมด

  • รีสตาร์ท Apache

ปิดการติดตามคำขอ HTTP

โดยค่าเริ่มต้นวิธีการสืบค้นกลับถูกเปิดใช้งานใน Apache เว็บเซิร์ฟเวอร์.

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

  •  ทำ telnet เว็บเซิร์ฟเวอร์ IP ด้วยพอร์ตฟัง
  •  สร้างคำขอ TRACE ตามที่แสดงด้านล่าง

#telnet localhost 80
ลอง 127.0.0.1…
เชื่อมต่อกับ localhost.
ตัวละคร Escape คือ ‘^]’.
TRACE / HTTP / 1.1 Host: test
HTTP / 1.1 200 ตกลง
วันที่: เสาร์, 31 สิงหาคม 2556 02:13:24 GMT
เซิร์ฟเวอร์: Apache
การถ่ายโอนเข้ารหัส: chunked
ประเภทเนื้อหา: ข้อความ / http 20
TRACE / HTTP / 1.1
โฮสต์: ทดสอบ
0
การเชื่อมต่อถูกปิดโดยโฮสต์ต่างประเทศ.
#

ดังที่คุณเห็นในคำขอ TRACE ด้านบนคำขอได้ตอบคำถามของฉันแล้ว ลองปิดการใช้งานและทดสอบ.

  •  ไปที่ไดเรกทอรี $ Web_Server / conf
  • เพิ่มคำสั่งต่อไปนี้และบันทึก httpd.conf

TraceEnable off

  •  รีสตาร์ท apache

ทำ telnet เว็บเซิร์ฟเวอร์ IP ด้วยพอร์ตฟังและทำการร้องขอ TRACE ดังที่แสดงด้านล่าง

#telnet localhost 80
ลอง 127.0.0.1…
เชื่อมต่อกับ localhost.
ตัวละคร Escape คือ ‘^]’.
TRACE / HTTP / 1.1 Host: test
HTTP / 1.1 405 วิธีการไม่ได้รับอนุญาต
วันที่: เสาร์, 31 สิงหาคม 2556 02:18:27 GMT
เซิร์ฟเวอร์: Apache อนุญาต: ความยาวเนื้อหา: 223Content-Type: text / html; charset = ISO-8859-1
ไม่อนุญาตให้ใช้วิธี 405

วิธีการไม่ได้รับอนุญาต

วิธีการติดตามที่ร้องขอไม่ได้รับอนุญาตสำหรับ URL /.

การเชื่อมต่อถูกปิดโดยโฮสต์ต่างประเทศ.
#

ดังที่คุณเห็นในคำขอ TRACE ด้านบนคำขอดังกล่าวได้บล็อกคำขอของฉันด้วย HTTP 405 Method ไม่อนุญาต.

ตอนนี้เว็บเซิร์ฟเวอร์นี้ไม่อนุญาตการร้องขอ TRACE และช่วยในการปิดกั้นการโจมตีแบบ Cross Site Tracing.

ตั้งค่าคุกกี้ด้วย HttpOnly และ Secure flag

คุณสามารถลดการโจมตี Cross Site Scripting ส่วนใหญ่โดยใช้ HttpOnly และ Secure flag ในคุกกี้ โดยไม่ต้อง HttpOnly และปลอดภัยเป็นไปได้ที่จะขโมยหรือจัดการเซสชันแอปพลิเคชันและคุกกี้ของเว็บและเป็นอันตราย.

  •  ตรวจสอบให้แน่ใจว่า mod_headers.so เปิดใช้งานใน httpd.conf ของคุณ
  •  ไปที่ไดเรกทอรี $ Web_Server / conf
  •  เพิ่มคำสั่งต่อไปนี้และบันทึก httpd.conf

การแก้ไขส่วนหัว Set-Cookie ^ (. *) $ $ 1; HttpOnly; Secure

  •  รีสตาร์ท apache

Clickjacking Attack

Clickjacking เป็นช่องโหว่ของเว็บแอพพลิเคชั่นที่มีชื่อเสียง.

  •  ตรวจสอบให้แน่ใจว่า mod_headers.so เปิดใช้งานใน httpd.conf ของคุณ
  •  ไปที่ไดเรกทอรี $ Web_Server / conf
  •  เพิ่มคำสั่งต่อไปนี้และบันทึก httpd.conf

ส่วนหัวต่อท้าย X-Frame-Options SAMEORIGIN เสมอ

  •  รีสตาร์ท apache

X-Frame-Options สนับสนุนอีกสองตัวเลือกซึ่งฉันได้อธิบายไว้ที่นี่.

ฝั่งเซิร์ฟเวอร์รวมถึง

Server Side Include (SSI) มีความเสี่ยงในการเพิ่มโหลดบนเซิร์ฟเวอร์ หากคุณได้แชร์สภาพแวดล้อมและเว็บแอปพลิเคชั่นที่มีทราฟฟิกมากคุณควรพิจารณาปิดใช้งาน SSI โดยการเพิ่มคำสั่งรวมในตัวเลือก.

การโจมตี SSI ช่วยให้สามารถใช้ประโยชน์จากเว็บแอปพลิเคชันโดยการฉีดสคริปต์ในหน้า HTML หรือเรียกใช้โค้ดจากระยะไกล.

  • ไปที่ไดเรกทอรี $ Web_Server / conf
  •  เปิด httpd.conf โดยใช้ vi
  •  ค้นหาไดเรกทอรีและเพิ่มคำสั่งรวมในตัวเลือก

ตัวเลือก – ดัชนี – รวม
คำสั่งอนุญาตให้ปฏิเสธได้จากทั้งหมด

  • รีสตาร์ท Apache

หมายเหตุ: หากคุณมีคำสั่งไดเรกทอรีหลายรายการในสภาพแวดล้อมของคุณคุณควรพิจารณาทำเช่นเดียวกันสำหรับทุกคน.

การป้องกัน X-XSS

การป้องกัน Cross Site Scripting (XSS) สามารถข้ามในเบราว์เซอร์จำนวนมาก คุณสามารถใช้การป้องกันนี้สำหรับเว็บแอปพลิเคชันหากผู้ใช้ถูกปิดใช้งาน สิ่งนี้ถูกใช้โดย บริษัท เว็บยักษ์ใหญ่อย่าง Facebook, Twitter, Google และอื่น ๆ.

  • ไปที่ไดเรกทอรี $ Web_Server / conf
  • เปิด httpd.conf โดยใช้ vi และเพิ่มคำสั่ง Header ต่อไปนี้

ส่วนหัวชุดการป้องกัน X-XSS "1; mode = บล็อก"

  •  รีสตาร์ท Apache

อย่างที่คุณเห็นการป้องกัน XSS เป็นส่วนหัวในการตอบสนอง.

ปิดใช้งานโปรโตคอล HTTP 1.0

เมื่อเราพูดถึงความปลอดภัยเราควรปกป้องให้มากที่สุด เหตุใดเราจึงใช้โปรโตคอล HTTP เวอร์ชันเก่ากว่าให้ปิดใช้งานด้วย?

HTTP 1.0 มีจุดอ่อนด้านความปลอดภัยที่เกี่ยวข้องกับการหักหลังเซสชัน เราสามารถปิดใช้งานสิ่งนี้ได้โดยใช้โมดูล mod_rewrite.

  • ตรวจสอบให้แน่ใจว่าโหลดโมดูล mod_rewrite ในไฟล์ httpd.conf
  •  เปิดใช้งานคำสั่ง RewriteEngine ดังต่อไปนี้และเพิ่มเงื่อนไขการเขียนซ้ำเพื่ออนุญาต HTTP 1.1 เท่านั้น

RewriteEngine On
เขียนใหม่% {THE_REQUEST}! HTTP / 1.1 $
RewriteRule. * – [F]

การกำหนดค่าการหมดเวลา

ตามค่าเริ่มต้นค่าการหมดเวลาของ Apache คือ 300 วินาทีซึ่งอาจตกเป็นเหยื่อของการโจมตีช้า Loris และ DoS หากต้องการลดขนาดนี้คุณสามารถลดค่าการหมดเวลาลงเหลือเพียง 60 วินาที.

  • ไปที่ไดเรกทอรี $ Web_Server / conf
  • เปิด httpd.conf โดยใช้ vi
  •  เพิ่มสิ่งต่อไปนี้ใน httpd.conf

หมดเวลา 60

SSL

การมี SSL เป็นเลเยอร์ความปลอดภัยเพิ่มเติมที่คุณเพิ่มเข้าไปใน Web Application อย่างไรก็ตามการกำหนดค่าเริ่มต้น SSL นำไปสู่ช่องโหว่บางอย่างและคุณควรพิจารณาปรับแต่งการกำหนดค่าเหล่านั้น.

คีย์ SSL

การละเมิดคีย์ SSL นั้นยาก แต่ไม่สามารถทำได้ เป็นเพียงเรื่องของพลังและเวลาในการคำนวณ.

อย่างที่คุณอาจทราบว่าการใช้พีซีในยุค 2009 แตกออกไปเป็นเวลาประมาณ 73 วันที่คุณสามารถทำได้ ทำวิศวกรรมย้อนกลับคีย์ 512 บิต.

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

  •  Outlook.com
  •  Microsoft.com
  •   Live.com
  •  Skype.com
  •  Apple.com
  •  Yahoo.com
  •  Bing.com
  •  Hotmail.com
  •  Twitter.com

คุณสามารถใช้ OpenSSL เพื่อสร้าง CSR ด้วย 2048 บิตดังนี้.

openssl req -out geekflare.csr -newkey rsa: 2048 -nodes -keyout geekflare.key

มันจะสร้าง CSR ซึ่งคุณจะต้องส่งไปที่ ผู้ออกใบรับรอง เพื่อเซ็นชื่อ เมื่อคุณได้รับไฟล์ใบรับรองที่ลงนามแล้วคุณสามารถเพิ่มได้ในไฟล์ httpd-ssl.conf

SSLCertificateFile # ใบรับรองที่ลงนามโดยผู้มีอำนาจ
SSLCertificateChainFile # ผู้ลงนามใบรับรองที่กำหนดโดยผู้มีอำนาจ
SSLCertificateKeyFile #Key ไฟล์ที่คุณสร้างขึ้นด้านบน

  • รีสตาร์ท Apache เว็บเซิร์ฟเวอร์และลองเข้าถึง URL ด้วย https

SSL Cipher

SSL Cipher เป็นอัลกอริธึมการเข้ารหัสซึ่งใช้เป็นคีย์ระหว่างคอมพิวเตอร์สองเครื่องบนอินเทอร์เน็ต การเข้ารหัสข้อมูลเป็นกระบวนการของการแปลงข้อความล้วนเป็นรหัสลับ.

มันขึ้นอยู่กับการกำหนดค่าเข้ารหัส SSL ของเว็บเซิร์ฟเวอร์ของคุณซึ่งจะมีการเข้ารหัสข้อมูล ดังนั้นจึงเป็นสิ่งสำคัญที่จะต้องกำหนดค่า SSL Cipher ซึ่งแข็งแกร่งกว่าและไม่เสี่ยง.

  • ไปที่โฟลเดอร์ $ Web_Server / conf / extra
  •  ปรับเปลี่ยนคำสั่ง SSLCipherSuite ใน httpd-ssl.conf ด้านล่างเพื่อยอมรับอัลกอริธึมการเข้ารหัสที่สูงขึ้นเท่านั้น

SSLCipherSuite HIGH:! MEDIUM:! aNULL:! MD5:! RC4

  •  บันทึกไฟล์คอนฟิกูเรชันและรีสตาร์ทเซิร์ฟเวอร์ apache

หมายเหตุ: หากคุณมียันต์อ่อนจำนวนมากในรายงานการตรวจสอบ SSL ของคุณคุณสามารถปฏิเสธเพิ่มได้อย่างรวดเร็ว! ที่จุดเริ่มต้น.

ปิดการใช้งาน SSL v2 & v3

SSL v2 & v3 มีข้อบกพร่องด้านความปลอดภัยจำนวนมากและหากคุณกำลังดำเนินการทดสอบการเจาะหรือการปฏิบัติตามมาตรฐาน PCI คุณจะต้องปิดการค้นหาความปลอดภัยเพื่อปิดใช้งาน SSL v2 / v3.

การสื่อสาร SSL v2 / v3 ใด ๆ อาจมีความเสี่ยงต่อการโจมตีแบบ Man-in-The-Middle ซึ่งอาจทำให้มีการปลอมแปลงข้อมูลหรือเปิดเผยข้อมูล.

ลองใช้ apache เว็บเซิร์ฟเวอร์เพื่อยอมรับเฉพาะ TLS ล่าสุดและปฏิเสธคำขอเชื่อมต่อ SSL v2 / v3.

  • ไปที่โฟลเดอร์ $ Web_Server / conf / extra
  • แก้ไขคำสั่ง SSLProtocol ใน httpd-ssl.conf ด้านล่างเพื่อยอมรับ TLS 1.2 เท่านั้น+

SSLProtocol –ALL + TLSv1.2

เมื่อเสร็จสิ้นการกำหนดค่า SSL คุณควรทดสอบเว็บแอปพลิเคชันของคุณด้วยเครื่องมือใบรับรอง SSL / TLS ออนไลน์เพื่อค้นหาข้อผิดพลาดในการกำหนดค่า.

ความปลอดภัยของ Mod

Mod Security เป็นไฟร์วอลล์แอปพลิเคชั่นโอเพนซอร์ซซึ่งคุณสามารถใช้กับ Apache.

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

เพื่อให้การป้องกันเว็บแอปพลิเคชันทั่วไปกฎหลักใช้เทคนิคต่อไปนี้:

  • การป้องกัน HTTP – ตรวจจับการละเมิดโปรโตคอล HTTP และนโยบายการใช้งานที่กำหนดไว้ในเครื่อง
  • การค้นหา Blacklist แบบเรียลไทม์ – ใช้ชื่อเสียง IP ของบุคคลที่สาม
  • การตรวจจับมัลแวร์บนเว็บ – ระบุเนื้อหาเว็บที่เป็นอันตรายโดยตรวจสอบกับ Google Safe Browsing API.
  • HTTP Denial of Service Protections – การป้องกัน HTTP Flooding และ HTTP DoS Attacks ที่ช้า.
  • การป้องกันการโจมตีเว็บทั่วไป – ตรวจจับการโจมตีความปลอดภัยเว็บแอพพลิเคชันทั่วไป
  • การตรวจจับอัตโนมัติ – ตรวจจับบ็อตซอฟต์แวร์รวบรวมข้อมูลสแกนเนอร์และกิจกรรมพื้นผิวที่เป็นอันตรายอื่น ๆ
  • บูรณาการกับ AV Scanning สำหรับการอัปโหลดไฟล์ – ระบุไฟล์ที่เป็นอันตรายที่อัปโหลดผ่านเว็บแอปพลิเคชัน.
  • การติดตามข้อมูลที่ละเอียดอ่อน – ติดตามการใช้บัตรเครดิตและป้องกันการรั่วไหล.
  • การป้องกันโทรจัน – ตรวจจับการเข้าถึงม้าโทรจัน.
  • การระบุข้อบกพร่องของแอปพลิเคชัน – แจ้งเตือนเกี่ยวกับการกำหนดค่าผิดพลาดของแอปพลิเคชัน.
  • การตรวจหาข้อผิดพลาดและการซ่อน – ปลอมแปลงข้อความผิดพลาดที่ส่งจากเซิร์ฟเวอร์.

ดาวน์โหลด & การติดตั้ง

สิ่งที่จำเป็นต้องมีต่อไปนี้จะต้องติดตั้งบนเซิร์ฟเวอร์ที่คุณต้องการใช้ Mod Security กับ Apache หากไม่มีสิ่งใดต่อไปนี้การรวบรวม Mod Security จะล้มเหลว คุณสามารถใช้ yum install บน Linux หรือ Centos เพื่อติดตั้งแพ็คเกจเหล่านี้.

  • apache 2.x หรือสูงกว่า
  • แพคเกจ libpcre
  •  แพ็คเกจ libxml2
  • แพคเกจ liblua
  • แพคเกจ libcurl
  •  แพคเกจ libapr และ libapr-util
  •  โมดูล mod_unique_id ที่มาพร้อมกับ Apache เว็บเซิร์ฟเวอร์

ตอนนี้มาดาวน์โหลด Mod Security 2.7.5 รุ่นเสถียรล่าสุดจาก ที่นี่

  • ถ่ายโอนไฟล์ที่ดาวน์โหลดไปยัง / opt / apache
  • แยก modsecurity-apache_2.7.5.tar.gz

# gunzip –c modsecurity-apache_2.7.5.tar.gz | tar xvf –

  • ไปที่โฟลเดอร์แตกไฟล์ modsecurity-apache_2.7.5

# cd modsecurity-apache_2.7.5

  • รันสคริปต์กำหนดค่ารวมถึงเส้นทาง apx ไปยัง Apache ที่มีอยู่

# ./configure –with-apxs = / opt / apache / bin / apxs

  • รวบรวม & ติดตั้งด้วยสคริปต์ทำให้

# ทำ
# ทำให้การติดตั้ง

  • เมื่อติดตั้งเสร็จแล้วคุณจะเห็น mod_security2.so ในโฟลเดอร์โมดูลภายใต้ / opt / apache

ตอนนี้ข้อสรุปคุณได้ติดตั้งโมดูล Mod Security ใน Apache เว็บเซิร์ฟเวอร์ที่มีอยู่.

องค์ประกอบ

ในการใช้คุณสมบัติความปลอดภัย Mod กับ Apache เราจะต้องโหลดโมดูลความปลอดภัย mod ใน httpd.conf โมดูล mod_unique_id จำเป็นต้องมีล่วงหน้าสำหรับ Mod Security.

โมดูลนี้จัดเตรียมตัวแปรสภาพแวดล้อมพร้อมตัวระบุเฉพาะสำหรับแต่ละคำขอซึ่งถูกติดตามและใช้งานโดย Mod Security.

  • เพิ่มบรรทัดต่อไปนี้เพื่อโหลดโมดูลสำหรับ Mod Security ใน httpd.conf และบันทึกไฟล์การกำหนดค่า

LoadModule unique_id_module modules / mod_unique_id.so
LoadModule security2_module modules / mod_security2.so

  •  รีสตาร์ท apache เว็บเซิร์ฟเวอร์

ติดตั้ง Mod Security แล้ว!

สิ่งต่อไปที่คุณต้องทำคือติดตั้งกฎหลักของ Mod Security เพื่อใช้ประโยชน์จากคุณสมบัติของมันอย่างเต็มที่.

กฎหลักล่าสุดสามารถดาวน์โหลดได้จากลิงค์ต่อไปนี้ฟรี. https://github.com/SpiderLabs/owasp-modsecurity-crs/zipball/master

  • คัดลอกกฎหลักที่ดาวน์โหลด zip ไปยัง / opt / apache / conf
  • คลายซิปไฟล์กฎหลัก
  • คุณอาจต้องการเปลี่ยนชื่อโฟลเดอร์เป็นไฟล์ที่สั้นและจำง่าย ในตัวอย่างนี้ฉันจะเปลี่ยนชื่อ crs.
  • ไปที่โฟลเดอร์ crs และเปลี่ยนชื่อ modsecurity_crs10_setup.conf.example เป็น modsecurity_crs10_setup.conf

ตอนนี้ให้เปิดใช้กฎเหล่านี้เพื่อให้ทำงานกับ Apache เว็บเซิร์ฟเวอร์.

  •  เพิ่มสิ่งต่อไปนี้ใน httpd.conf

รวม conf / crs / modsecurity_crs_10_setup.confInclude conf / crs / base_rules / *. conf

ในการกำหนดค่าข้างต้นเรากำลังโหลดไฟล์การกำหนดค่าหลักของ Mod Security modsecurity_crs_10_setup.conf และกฎพื้นฐาน base_rules / *. conf ที่จัดทำโดย Mod Security Core Rules เพื่อปกป้องเว็บแอปพลิเคชัน.

  •  รีสตาร์ท apache เว็บเซิร์ฟเวอร์

คุณได้กำหนดค่า Mod Security กับ Apache เรียบร้อยแล้ว!

ทำได้ดี. ตอนนี้เว็บเซิร์ฟเวอร์ Apache ได้รับการป้องกันโดยไฟร์วอลล์เว็บแอปพลิเคชั่น Mod Security.

เริ่มต้นใช้งาน

มาเริ่มด้วยการกำหนดค่าที่สำคัญบางอย่างใน Mod Security เพื่อให้แข็ง & เว็บแอปพลิเคชันที่ปลอดภัย.

ในส่วนนี้เราจะทำการแก้ไขการกำหนดค่าทั้งหมดใน /opt/apache/conf/crs/modsecurity_crs_10_setup.conf.

เราจะอ้างถึง /opt/apache/conf/crs/modsecurity_crs_10_setup.conf เป็น setup.conf ในส่วนนี้เพื่อจุดประสงค์.

สิ่งสำคัญคือต้องเข้าใจว่าอะไรคือกฎของ OWASP ที่ให้ฟรี มีกฎสองประเภทที่จัดทำโดย OWASP.

กฎพื้นฐาน – กฎเหล่านี้ได้รับการทดสอบอย่างหนักและอัตราส่วนสัญญาณเตือนที่ผิดพลาดอาจน้อยกว่านี้.

กฎการทดลอง – กฎเหล่านี้มีวัตถุประสงค์เพื่อการทดลองและคุณอาจมีการเตือนที่ผิดพลาดสูง การกำหนดค่าทดสอบและใช้งานใน UAT เป็นสิ่งสำคัญก่อนที่จะใช้สิ่งเหล่านี้ในสภาพแวดล้อมการผลิต.

กฎตัวเลือก – กฎทางเลือกเหล่านี้อาจไม่เหมาะกับสภาพแวดล้อมทั้งหมด ขึ้นอยู่กับความต้องการของคุณคุณสามารถใช้พวกเขา.

หากคุณกำลังมองหา CSRF การติดตามผู้ใช้การไฮแจ็กเซสชัน ฯลฯ การป้องกันคุณอาจพิจารณาใช้กฎทางเลือก เรามีกฎพื้นฐานและทางเลือกหลังจากทำการคลายบีบอัดไฟล์ zip crs ที่ดาวน์โหลดมาจากหน้าดาวน์โหลด OWASP.

ไฟล์คอนฟิกูเรชันกฎเหล่านี้มีอยู่ในโฟลเดอร์ crs / base_rules, crs / optional_rules และ crs / experiment_rules มาทำความคุ้นเคยกับกฎพื้นฐานบางอย่าง.

  • modsecurity_crs_20_protocol_violations.conf: กฎนี้ป้องกันจากช่องโหว่ของโปรโตคอลเช่นการแยกการตอบสนองการลักลอบร้องขอโดยใช้โปรโตคอลที่ไม่ได้รับอนุญาต (HTTP 1.0).
  • modsecurity_crs_21_protocol_anomalies.conf: นี่คือการป้องกันจากการร้องขอซึ่งหายไปกับโฮสต์ยอมรับตัวแทนผู้ใช้ในส่วนหัว.
  • modsecurity_crs_23_request_limits.conf: กฎนี้มีการพึ่งพาแอปพลิเคชันเฉพาะเช่นขนาดคำขอขนาดอัปโหลดความยาวของพารามิเตอร์ ฯลฯ.
  • modsecurity_crs_30_http_policy.conf: นี่คือการกำหนดค่าและป้องกันวิธีการอนุญาตหรือไม่อนุญาตเช่น CONNECT, TRACE, PUT, DELETE, ฯลฯ.
  • modsecurity_crs_35_bad_robots.conf: ตรวจจับหุ่นยนต์ที่เป็นอันตราย
  • modsecurity_crs_40_generic_attacks.conf: นี่คือการป้องกันจากการฉีดคำสั่ง OS การรวมไฟล์จากระยะไกล ฯลฯ.
  • modsecurity_crs_41_sql_injection_attacks.conf: กฎนี้เพื่อปกป้อง SQL และคำร้องขอ SQL injection แบบ blind.
  • modsecurity_crs_41_xss_attacks.conf: การป้องกันจากคำขอสคริปต์ข้ามไซต์.
  • modsecurity_crs_42_tight_security.conf: การตรวจจับและป้องกันการส่งผ่านไดเรกทอรี.
  • modsecurity_crs_45_trojans.conf: กฎนี้เพื่อตรวจสอบผลลัพธ์การจัดการไฟล์ทั่วไป, การอัพโหลดหน้า HTTP backdoor, ลายเซ็นที่รู้จัก.
  • modsecurity_crs_47_common_exceptions.conf: ใช้เป็นกลไกการยกเว้นเพื่อลบผลบวกปลอมทั่วไปที่อาจพบว่ามีการดูดเหมือนการเชื่อมต่อ Apache ภายในดัมมี, pinger SSL, ฯลฯ.

เข้าสู่ระบบ

การบันทึกเป็นสิ่งแรกที่ต้องกำหนดค่าเพื่อให้คุณสามารถสร้างบันทึกสำหรับสิ่งที่ Mod Security กำลังทำอยู่ การบันทึกมีสองประเภท ตรวจแก้จุดบกพร่อง & บันทึกการตรวจสอบ.

ตรวจแก้จุดบกพร่อง: นี่คือการทำซ้ำข้อผิดพลาด Apache เตือนและแจ้งให้ทราบข้อความจากบันทึกข้อผิดพลาด.

Audit Log: นี่คือการเขียนบันทึกการทำธุรกรรมที่ทำเครื่องหมายโดยกฎความปลอดภัย Mod ความปลอดภัย Mod ให้ความยืดหยุ่นในการกำหนดค่า Audit, Debug หรือการบันทึกทั้งสองอย่าง.

โดยค่าเริ่มต้นจะเขียนบันทึกทั้งสอง อย่างไรก็ตามคุณสามารถเปลี่ยนแปลงได้ตามความต้องการของคุณ บันทึกถูกควบคุมใน SecDefaultAction directive มาดูการกำหนดค่าเริ่มต้นการบันทึกใน setup.conf

SecDefaultAction“ เฟส: 1, ปฏิเสธ, บันทึก”

ในการเข้าสู่ระบบ Debug, บันทึกการตรวจสอบ – ใช้“ บันทึก” เพื่อเข้าสู่ระบบบันทึกการตรวจสอบเท่านั้น – ใช้“ nolog, auditlog” เพื่อบันทึกเฉพาะบันทึกการตรวจแก้จุดบกพร่อง – ใช้“ บันทึก, noauditlog” คุณสามารถระบุตำแหน่งบันทึกการตรวจสอบ คำสั่ง.

ลองเขียนบันทึกการตรวจสอบลงใน /opt/apache/logs/modsec_audit.log โดยเพิ่มตามที่แสดงด้านล่าง.

  • เพิ่ม SecAuditLog directive ใน setup.conf และรีสตาร์ท Apache Web Server

SecAuditLog /opt/apache/logs/modsec_audit.log

  • หลังจากรีสตาร์ทคุณจะเห็น modsec_audit.log เริ่มสร้างขึ้น

เปิดใช้งาน Rule Engine

ตามค่าเริ่มต้น Engine Rule นั้นหมายความว่าหากคุณไม่เปิดใช้งาน Rule Engine คุณจะไม่ได้ใช้ข้อดีทั้งหมดของ Mod Security.

การเปิดหรือปิดการใช้งาน Rule Engine นั้นควบคุมโดย SecRuleEngine directive.

  • เพิ่ม SecRuleEngine directive ใน setup.conf และรีสตาร์ท Apache Web Server

SecRuleEngine On

มีสามค่าสำหรับ SecRuleEngine:

  • เปิด – เพื่อเปิดใช้งาน Rule Engine
  • Off – เพื่อปิดการใช้งาน Rule Engine
  • DetectionOnly – เปิดใช้งาน Rule Engine แต่ไม่ดำเนินการใด ๆ เช่นบล็อกปฏิเสธปฏิเสธอนุญาตพร็อกซีหรือเปลี่ยนเส้นทาง

เมื่อ Rule Engine เปิดอยู่ – Mod Security พร้อมที่จะป้องกันด้วยการโจมตีทั่วไปบางประเภท.

การป้องกันประเภทการโจมตีทั่วไป

ตอนนี้เว็บเซิร์ฟเวอร์พร้อมที่จะป้องกันด้วยประเภทการโจมตีทั่วไปเช่น XSS, การฉีด SQL, การละเมิดโปรโตคอล, ฯลฯ เนื่องจากเราได้ติดตั้ง Core Rule และเปิดใช้งาน Rule Engine ลองทดสอบสักสองสามข้อ.

โจมตี XSS

  •  เปิด Firefox และเข้าถึงแอปพลิเคชันของคุณและใส่แท็กที่ท้ายหรือ URL
  •  ตรวจสอบ modsec_audit.log ในโฟลเดอร์ apache / logs

คุณจะสังเกตเห็นการร้องขอการบล็อก Mod Security เนื่องจากมีแท็กซึ่งเป็นรากของการโจมตี XSS.

Directory Traversal Attack: – การโจมตีผ่าน Traversal Directory สามารถสร้างความเสียหายได้มากโดยใช้ประโยชน์จากช่องโหว่นี้และไฟล์ที่เกี่ยวข้องกับระบบการเข้าถึง ตัวอย่าง – / etc / passwd, .htaccess ฯลฯ.

  •  เปิด Firefox และเข้าถึงแอปพลิเคชันของคุณด้วยการสำรวจเส้นทางไดเรกทอรี
  •  ตรวจสอบ modsec_audit.log ในโฟลเดอร์ apache / logs

http: // localhost / ../…/boot

  • คุณจะสังเกตเห็นการร้องขอการบล็อก Mod Security เนื่องจากมีการแวะผ่านไดเรกทอรี.

เปลี่ยนแบนเนอร์เซิร์ฟเวอร์

ก่อนหน้านี้ในคู่มือนี้คุณได้เรียนรู้วิธีการลบ Apache และประเภท OS วิธีใช้เวอร์ชันของคำสั่ง ServerTokens.

ไปข้างหน้าหนึ่งก้าวแล้วทำอย่างไรกับการตั้งชื่อเซิร์ฟเวอร์ตามที่คุณต้องการ เป็นไปได้ด้วยคำสั่ง SecServerSignature ใน Mod Security คุณเห็นว่ามันน่าสนใจ.

หมายเหตุ: ในการใช้ Mod Security เพื่อจัดการ Server Banner จากส่วนหัวคุณต้องตั้ง ServerTokesn เป็น Full ใน httpd.conf ของ Apache เว็บเซิร์ฟเวอร์.

  • เพิ่มคำสั่ง SecServerSignature ด้วยชื่อเซิร์ฟเวอร์ที่คุณต้องการใน setup.conf และรีสตาร์ท Apache Web Server

SecServerSignature YourServerName

Ex:

[/ opt / apache / conf / crs] #grep SecServer modsecurity_crs_10_setup.conf
SecServerSignature geekflare.com
[/ opt / apache / conf / crs] #

การกำหนดค่าทั่วไป

ลองดูการกำหนดค่าทั่วไปบางอย่างว่าเป็นแนวปฏิบัติที่ดีที่สุด.

กำหนดค่าฟัง

เมื่อคุณมีอินเทอร์เฟซและ IP หลายตัวบนเซิร์ฟเวอร์เดียวขอแนะนำให้ฟังคำสั่งกำหนดค่าด้วย IP และหมายเลขพอร์ตแน่นอน.

เมื่อคุณออกจากการกำหนดค่า Apache เพื่อฟัง IP ทั้งหมดที่มีหมายเลขพอร์ตบางอย่างมันอาจสร้างปัญหาในการส่งต่อคำขอ HTTP ไปยังเว็บเซิร์ฟเวอร์อื่น ๆ นี่เป็นเรื่องปกติในสภาพแวดล้อมที่ใช้ร่วมกัน.

  • กำหนดค่า Listen directive ใน httpd.conf ด้วย IP และพอร์ตสัมบูรณ์ดังตัวอย่างด้านล่าง

ฟัง 10.10.10.1:80

การเข้าสู่ระบบ

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

โดยค่าเริ่มต้น Apache ไม่ได้กำหนดค่าให้เก็บข้อมูลเหล่านี้ คุณต้องกำหนดค่าด้วยตนเองดังนี้.

  • เพื่อบันทึกเวลาที่ใช้เพื่อตอบสนองคำขอและ SESSION ID ในบันทึกการเข้าถึง
  •  เพิ่ม% T & % sessionID ใน httpd.conf ภายใต้คำสั่ง LogFormat

LogFormat "% h% l% u% t "% {} sessionID C" "R%" %>s% b% T" ร่วมกัน

คุณสามารถอ้างอิง http://httpd.apache.org/docs/2.2/mod/mod_log_config.html สำหรับรายการพารามิเตอร์ทั้งหมดที่ได้รับการสนับสนุนใน LogFormat directive ใน Apache Web Server.

ปิดใช้งานการโหลดโมดูลที่ไม่ต้องการ

หากคุณได้รวบรวมและติดตั้งกับโมดูลทั้งหมดแล้วมีโอกาสสูงที่คุณจะมีโมดูลมากมายที่โหลดใน Apache ซึ่งอาจไม่จำเป็น.

แนวทางปฏิบัติที่ดีที่สุดคือการกำหนดค่า Apache ด้วยโมดูลที่ต้องการในเว็บแอปพลิเคชันของคุณ โมดูลต่อไปนี้มีข้อกังวลด้านความปลอดภัยและคุณอาจสนใจปิดการใช้งานใน httpd.conf ของ Apache Web Server.

WebDAV (การเขียนและการจัดทำแบบกระจายบนเว็บ) โมดูลนี้อนุญาตให้ไคลเอนต์ระยะไกลจัดการไฟล์บนเซิร์ฟเวอร์และขึ้นอยู่กับการโจมตีแบบปฏิเสธการให้บริการต่างๆ หากต้องการปิดใช้งานความคิดเห็นต่อไปนี้ใน httpd.conf

#LoadModule dav_module modules / mod_dav.so
#LoadModule dav_fs_module modules / mod_dav_fs.so
#Include conf / พิเศษ / httpd-dav.conf

โมดูลข้อมูลโมดูล mod_info สามารถรั่วไหลข้อมูลที่สำคัญโดยใช้. htaccess เมื่อโมดูลนี้ถูกโหลด หากต้องการปิดใช้งานความคิดเห็นต่อไปนี้ใน httpd.conf

#LoadModule info_module modules / mod_info.so

การอ้างอิง: สิ่งนี้จะเป็นไปไม่ได้หากไม่มีแนวทางจากลิงค์ต่อไปนี้:

นั่นเป็นแนวทางปฏิบัติที่ดีที่สุดบางข้อที่คุณสามารถใช้เพื่อรักษาความปลอดภัยให้กับเว็บเซิร์ฟเวอร์ Apache ของคุณ.

หากคุณยังใหม่กับ Apache HTTP ฉันอยากจะแนะนำ หลักสูตรการดูแล Apache HTTP.

Jeffrey Wilson Administrator
Sorry! The Author has not filled his profile.
follow me
    Like this post? Please share to your friends:
    Adblock
    detector
    map