คู่มือการแข็งตัวและความปลอดภัยของเว็บเซิร์ฟเวอร์ Apache

เผยแพร่แล้ว: 2015-02-14

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

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

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

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

ช่องโหว่-รายงาน

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

ต่อไปนี้ได้รับการทดสอบในเวอร์ชัน Apache 2.4.x

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

ผู้ชม

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

จำเป็นต้องมีความรู้พอสมควรเกี่ยวกับคำสั่ง Apache Web Server & UNIX

หมายเหตุ

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

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

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

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

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

apache-เซิร์ฟเวอร์แบนเนอร์

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

ServerSignature จะลบข้อมูลเวอร์ชันออกจากเพจที่สร้างโดย Apache

ServerTokens จะเปลี่ยน Header เป็น Production เท่านั้น เช่น Apache

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

apache-server-banner-masked

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

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

มาทดสอบกันว่ามันมีลักษณะอย่างไรในการตั้งค่าเริ่มต้น

  • ไปที่ไดเร็กทอรี $Web_Server/htdocs
  • สร้างโฟลเดอร์และไฟล์บางไฟล์ภายในนั้น
 # mkdir test # touch hi # touch hello

ตอนนี้ มาลองเข้าถึง Apache โดย http://localhost/test

apache-directory-listing

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

  • ไปที่ $Web_Server/conf ไดเร็กทอรี
  • เปิด httpd.conf โดยใช้ vi
  • ค้นหา Directory และเปลี่ยนคำสั่ง Options เป็น None หรือ –Indexes
 <Directory /opt/apache/htdocs> Options -Indexes </Directory>

(หรือ)

 <Directory /opt/apache/htdocs> Options None </Directory>
  • รีสตาร์ท Apache

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

ตอนนี้ มาลองเข้าถึง Apache โดย http://localhost/test

Disabled-directory-listing

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

Etag

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

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

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

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

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

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

  • สร้างผู้ใช้และกลุ่มที่เรียกว่า apache
 # groupadd apache # useradd –G apache apache
  • เปลี่ยนความเป็นเจ้าของไดเร็กทอรีการติดตั้ง apache เป็นผู้ใช้ที่ไม่มีสิทธิพิเศษที่สร้างขึ้นใหม่
 # chown –R apache:apache /opt/apache
  • ไปที่ $Web_Server/conf
  • แก้ไข httpd.conf โดยใช้ vi
  • ค้นหา User & Group Directive และเปลี่ยนเป็น apache บัญชีที่ไม่มีสิทธิพิเศษ
 User apache Group apache
  • บันทึก httpd.conf
  • รีสตาร์ท Apache

grep สำหรับการรันกระบวนการ http และตรวจสอบให้แน่ใจว่ามันทำงานด้วย apache user

 # 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
  • ค้นหาไดเรกทอรีที่ระดับราก
 <Directory /> Options -Indexes AllowOverride None </Directory>
  • บันทึก httpd.conf
  • รีสตาร์ท Apache

วิธีการขอ HTTP

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

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

การกำหนดค่าเริ่มต้นรองรับ OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECT method ในโปรโตคอล HTTP 1.1

  • ไปที่ $Web_Server/conf ไดเร็กทอรี
  • เปิด httpd.conf โดยใช้ vi
  • ค้นหาไดเรกทอรีและเพิ่มรายการต่อไปนี้
 <LimitExcept GET POST HEAD> deny from all </LimitExcept>
  • รีสตาร์ท Apache

ปิดใช้งานการติดตามคำขอ HTTP

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

การเปิดใช้งานสิ่งนี้จะทำให้สามารถโจมตี Cross Site Tracing และอาจให้ตัวเลือกแก่แฮ็กเกอร์ในการขโมยข้อมูลคุกกี้ มาดูกันว่าในการกำหนดค่าเริ่มต้นเป็นอย่างไร

  • ทำ IP เว็บเซิร์ฟเวอร์ telnet ด้วยพอร์ตการฟัง
  • ทำการร้องขอ TRACE ดังที่แสดงด้านล่าง
 #telnet localhost 80 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. TRACE / HTTP/1.1 Host: test HTTP/1.1 200 OK Date: Sat, 31 Aug 2013 02:13:24 GMT Server: Apache Transfer-Encoding: chunked Content-Type: message/http 20 TRACE / HTTP/1.1 Host: test 0 Connection closed by foreign host. #

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

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

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

 #telnet localhost 80 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. TRACE / HTTP/1.1 Host: test HTTP/1.1 405 Method Not Allowed Date: Sat, 31 Aug 2013 02:18:27 GMT Server: Apache Allow:Content-Length: 223Content-Type: text/html; charset=iso-8859-1 <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>405 Method Not Allowed</title> </head><body> <h1>Method Not Allowed</h1> <p>The requested method TRACE is not allowed for the URL /.</p> </body></html> Connection closed by foreign host. #

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

ขณะนี้ เว็บเซิร์ฟเวอร์นี้ไม่อนุญาตให้มีคำขอ TRACE และช่วยในการบล็อกการโจมตี Cross Site Tracing

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

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

  • ตรวจสอบให้แน่ใจว่าได้เปิดใช้งาน mod_headers.so ใน httpd.conf . ของคุณ
  • ไปที่ $Web_Server/conf ไดเร็กทอรี
  • เพิ่มคำสั่งต่อไปนี้และบันทึก httpd.conf
 Header edit Set-Cookie ^(.*)$ $1;HttpOnly;Secure
  • รีสตาร์ท apache

Clickjacking โจมตี

Clickjacking เป็นช่องโหว่ของเว็บแอปพลิเคชันที่รู้จักกันดี

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

apache-x-frame-options

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

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

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

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

  • ไปที่ $Web_Server/conf ไดเร็กทอรี
  • เปิด httpd.conf โดยใช้ vi
  • ค้นหาไดเรกทอรีและเพิ่มรวมในคำสั่งตัวเลือก
 <Directory /opt/apache/htdocs> Options –Indexes -Includes Order allow,denyAllow from all </Directory>
  • รีสตาร์ท Apache

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

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

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

  • ไปที่ $Web_Server/conf ไดเร็กทอรี
  • เปิด httpd.conf โดยใช้ vi และเพิ่มคำสั่ง Header ต่อไปนี้
 Header set X-XSS-Protection "1; mode=block"
  • รีสตาร์ท Apache

อย่างที่คุณเห็น XSS-Protection ถูกฉีดเข้าไปในส่วนหัวของการตอบสนอง

apache-xss

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

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

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

  • ตรวจสอบให้แน่ใจว่าได้โหลดโมดูล mod_rewrite ในไฟล์ httpd.conf
  • เปิดใช้งานคำสั่ง RewriteEngine ดังต่อไปนี้ และเพิ่มเงื่อนไขการเขียนซ้ำเพื่ออนุญาตเฉพาะ HTTP 1.1
 RewriteEngine On RewriteCond %{THE_REQUEST} !HTTP/1.1$ RewriteRule .* - [F]

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

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

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

SSL

การมี SSL เป็นชั้นการรักษาความปลอดภัยเพิ่มเติมที่คุณกำลังเพิ่มลงในเว็บแอปพลิเคชัน อย่างไรก็ตาม การกำหนดค่า 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 #Certificate signed by authority SSLCertificateChainFile #Certificate signer given by authority SSLCertificateKeyFile #Key file which you generated above
  • รีสตาร์ทเว็บเซิร์ฟเวอร์ Apache แล้วลองเข้าถึง URL ด้วย https

SSL Cipher

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

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

  • ไปที่ $Web_Server/conf/extra folder
  • แก้ไขคำสั่ง 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 folder
  • แก้ไขคำสั่ง SSLProtocol ใน httpd-ssl.conf ด้านล่างเพื่อยอมรับ TLS 1.2+ . เท่านั้น
 SSLProtocol –ALL +TLSv1.2

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

Mod Security

Mod Security เป็นโอเพ่นซอร์ส Web Application Firewall ซึ่งคุณสามารถใช้กับ Apache ได้

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

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

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

ดาวน์โหลดและติดตั้ง

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

  • apache 2.x หรือสูงกว่า
  • แพ็คเกจ libpcre
  • แพ็คเกจ libxml2
  • แพ็คเกจลิบลัว
  • แพ็คเกจ libcurl
  • libapr และ libapr-util package
  • โมดูล 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
  • รันสคริปต์กำหนดค่ารวมถึงเส้นทาง apxs ไปยัง Apache . ที่มีอยู่
 # ./configure –with-apxs=/opt/apache/bin/apxs
  • คอมไพล์และติดตั้งด้วย make script
 # make # make install
  • เมื่อการติดตั้งเสร็จสิ้น คุณจะเห็น 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 เพื่อใช้ประโยชน์จากฟีเจอร์อย่างเต็มที่

สามารถดาวน์โหลด Core Rule ล่าสุดได้จากลิงก์ซึ่งไม่เสียค่าใช้จ่าย 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
 <IfModule security2_module> Include conf/crs/modsecurity_crs_10_setup.confInclude conf/crs/base_rules/*.conf </IfModule>

ในการกำหนดค่าข้างต้น เรากำลังโหลดไฟล์การกำหนดค่าหลักของ 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 การติดตามผู้ใช้ การจี้เซสชัน ฯลฯ คุณอาจพิจารณาใช้กฎเพิ่มเติม เรามีกฎพื้นฐาน ทางเลือก และกฎทดลองหลังจากแตกไฟล์ crs zip ที่ดาวน์โหลดจากหน้าดาวน์โหลด OWASP

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

  • modsecurity_crs_20_protocol_violations.conf: กฎนี้ปกป้องจากช่องโหว่ของโปรโตคอล เช่น การแยกการตอบสนอง การลักลอบขอ ใช้โปรโตคอลที่ไม่ได้รับอนุญาต (HTTP 1.0)
  • modsecurity_crs_21_protocol_anomalies.conf: เพื่อป้องกันการร้องขอ ซึ่งหายไปกับ Host, Accept, User-Agent ในส่วนหัว
  • 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 และ blind SQL
  • modsecurity_crs_41_xss_attacks.conf:การป้องกันจากคำขอ Cross-Site Scripting
  • modsecurity_crs_42_tight_security.conf:การตรวจจับและการป้องกันการข้ามผ่านของไดเรกทอรี
  • modsecurity_crs_45_trojans.conf:กฎนี้เพื่อตรวจหาเอาต์พุตการจัดการไฟล์ทั่วไป การอัปโหลดหน้าแบ็คดอร์ HTTP ลายเซ็นที่รู้จัก
  • modsecurity_crs_47_common_exceptions.conf:สิ่งนี้ถูกใช้เป็นกลไกการยกเว้นเพื่อลบผลบวกเท็จทั่วไปที่อาจพบว่าดูดเป็นการเชื่อมต่อดัมมี่ภายใน Apache, SSL pinger เป็นต้น

การบันทึก

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

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

บันทึกการตรวจสอบ: นี่คือการเขียนบันทึกธุรกรรมที่ทำเครื่องหมายโดยกฎ Mod Security Mod Security ให้ความยืดหยุ่นในการกำหนดค่าการตรวจสอบ ตรวจแก้จุดบกพร่อง หรือการบันทึกทั้งสองอย่าง

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

 SecDefaultAction “phase:1,deny,log”

บันทึกการดีบัก บันทึกการตรวจสอบ – ใช้ “บันทึก” เพื่อบันทึกเฉพาะบันทึกการตรวจสอบ – ใช้ “nolog,auditlog” เพื่อบันทึกเฉพาะบันทึกการดีบัก – ใช้ “log,noauditlog” คุณสามารถระบุตำแหน่งบันทึกการตรวจสอบที่จะจัดเก็บซึ่งควบคุมโดย SecAuditLog คำสั่ง

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

  • เพิ่มคำสั่ง SecAuditLog ใน setup.conf และรีสตาร์ท Apache Web Server
 SecAuditLog /opt/apache/logs/modsec_audit.log
  • หลังจากรีสตาร์ท คุณควรเห็น modsec_audit.log กำลังสร้าง

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

โดยค่าเริ่มต้น กฎของเครื่องยนต์ปิดอยู่ ซึ่งหมายความว่าหากคุณไม่เปิดใช้งาน Rule Engine แสดงว่าคุณไม่ได้ใช้ประโยชน์จากข้อดีทั้งหมดของ Mod Security

การเปิดใช้งานหรือปิดใช้งาน Rule Engine ถูกควบคุมโดยคำสั่ง SecRuleEngine

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

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

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

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

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

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

XSS โจมตี

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

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

Directory Traversal Attack:- การโจมตีแบบ Directory Traversal สามารถสร้างความเสียหายได้มากมายโดยการใช้ประโยชน์จากช่องโหว่นี้และเข้าถึงไฟล์ที่เกี่ยวข้องกับระบบ เช่น – /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

อดีต:

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

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

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

กำหนดค่าฟัง

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

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

  • กำหนดค่า Listen directive ใน httpd.conf ด้วย IP สัมบูรณ์และพอร์ตตามตัวอย่างที่แสดงด้านล่าง
 Listen 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" common

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

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

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

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

WebDAV (Web-based Distributed Authoring and Versioning) โมดูลนี้ช่วยให้ไคลเอนต์ระยะไกลสามารถจัดการไฟล์บนเซิร์ฟเวอร์และอยู่ภายใต้การโจมตีแบบปฏิเสธการให้บริการต่างๆ วิธีปิดการใช้งานการติดตามความคิดเห็นใน httpd.conf

 #LoadModule dav_module modules/mod_dav.so #LoadModule dav_fs_module modules/mod_dav_fs.so #Include conf/extra/httpd-dav.conf

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

 #LoadModule info_module modules/mod_info.so

ข้อมูลอ้างอิง: สิ่งนี้จะเกิดขึ้นไม่ได้หากไม่มีคำแนะนำจากลิงก์ต่อไปนี้:

  • http://httpd.apache.org/docs/2.4/
  • http://www.modsecurity.org/documentation/
  • https://www.owasp.org/index.php/Category:OWASP_ModSecurity_Core_Rule_Set_Project

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

ตรวจสอบลิงก์นี้หากคุณต้องการใช้หน้าข้อผิดพลาดที่กำหนดเองใน Apache

หากคุณเพิ่งเริ่มใช้ Apache HTTP ฉันขอแนะนำให้เรียนหลักสูตรการดูแลระบบ Apache HTTP