การเสริมสร้างความแข็งแกร่งบนเว็บเซิร์ฟเวอร์อาปาเช่ (Hardening Apache)

Updated: Nov 9, 2020

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

Hardening Apache

รูปที่ 1 สถิติผู้ใช้งาน Apache

สถิติช่องโหว่ที่เกิดขึ้นบนเว็บเซิร์ฟเวอร์ Apache ดังรูปที่ 2

รูปที่ 2 แสดงสถิตช่องโหว่ที่เกิดขึ้นบนเว็บเซิร์ฟเวอร์ Apache

จากสถิติช่องโหว่ที่เกิดขึ้นบนเว็บเซิร์ฟเวอร์ Apache ดังรูปที่ 2 แสดงให้ทราบถึงภัยคุกคามต่างๆ ที่เกิดขึ้น หากผู้ดูแลระบบ (System Administrator) ไม่มีความตระหนักในเรื่องความปลอดภัย อาจทำให้เครื่องเว็บเซิร์ฟเวอร์ถูกยึดครองและใช้เป็นฐาน (BOTNET) ในการโจมตีเครื่องเซิร์ฟเวอร์อื่นๆ ทั่วโลก

ขั้นตอนการการเสริมสร้างความแข็งแกร่งของเว็บเซิร์ฟเวอร์อาปาเช่ (Hardening Apache) บนระบบปฎิบัติการ CentOS ดังนี้

โดยพื้นฐานหลังจากการติดตั้งเว็ปเซิร์ฟเวอร์ Apache บนระบบปฎิบัติการ CentOS ค่าพื้นฐานหรือพาธไฟล์ต่างๆ ทีมีดังนี้

o Document root Directory: /var/www/html

o Main Configuration file: /etc/httpd/conf/httpd.conf (RHEL/CentOS/Fedora)

o Default HTTP Port: 80 TCP

o Default HTTPS Port: 443 TCP

o Test your Configuration file settings and syntax: httpd -t

o Access Log files of Web Server: /var/log/httpd/access_log

o Error Log files of Web Server: /var/log/httpd/error_log

  1. Information Leakage (ข้อมูลรั่วไหล)

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

o แสดงหน้ายินดีต้อนรับเข้าสู่เว็บเซิร์ฟเวอร์ Apache ในไฟล์ welcome.conf ดังรูปที่ 3

รูปที่ 3 แสดงหน้ายินดีต้อนรับเข้าสู่เว็บเซิร์ฟเวอร์ Apache

วิธีการแก้ไข

ดำเนินการลบไฟล์ welcome.conf ด้วยคำสั่ง rm -f /etc/httpd/conf.d/welcome.conf

ดำเนินการสั่งรีสตาร์ Apache ด้วยคำสั่ง service httpd restart

ผลลัพธ์

รูปที่ 4 แสดงการลบหน้ายินดีต้อนรับเข้าสู่เว็บเซิร์ฟเวอร์ Apache

o แสดงหน้าเวอร์ชันเว็บเซิร์ฟเวอร์ Apache ดังรูปที่ 5

รูปที่ 5 แสดงหน้าเวอร์ชันเว็บเซิร์ฟเวอร์ Apache

วิธีการแก้ไข

ดำเนินการเปลี่ยนแปลงการตั้งค่าที่ไฟล์ httpd.conf ด้วยคำสั่ง vi /etc/httpd/conf/httpd.conf

บรรทัดที่ 44 เปลี่ยนจาก ServerTokens OS ไปเป็น ServerTokens Prod

บรรทัดที่ 536 เปลี่ยนจาก ServerSignature On ไปเป็น ServerSignature Off

ดำเนินการสั่งรีสตาร์ Apache ด้วยคำสั่ง service httpd restart

ผลลัพธ์

รูปที่ 6 แสดงการลบหน้าเวอร์ชันเว็บเซิร์ฟเวอร์ Apache

o แสดงหน้า Index of บนแสดงข้อมูลไดเรกทรอรีบนเว็บเซิร์ฟเวอร์ Apache ดังรูปที่ 7

รูปที่ 7 แสดงหน้า Index of บนเว็บเซิร์ฟเวอร์ Apache

วิธีการแก้ไข

ดำเนินการเปลี่ยนแปลงการตั้งค่าที่ไฟล์ httpd.conf ด้วยคำสั่ง vi /etc/httpd/conf/httpd.conf

บรรทัดที่ 331 เปลี่ยนจาก Options Indexes FollowSymLinks ไปเป็น Options – Indexes FollowSymLinks

ดำเนินการสั่งรีสตาร์ Apache ด้วยคำสั่ง service httpd restart

ผลลัพธ์

รูปที่ 8 แสดงการลบหน้า Index of บนเว็บเซิร์ฟเวอร์ Apache

o ดำเนินการปิด Option ต่างๆ บนเว็บเซิร์ฟเวอร์หากไม่มีการใช้งานฟังก์ชัน ดังนี้

ExecCGI : Execution of CGI scripts using mod_cgi is permitted.

FollowSymLinks : The server will follow symbolic links in this directory. This is the default setting.

Includes : Server-side includes provided by mod_include are permitted.

วิธีการแก้ไข

ดำเนินการเปลี่ยนแปลงการตั้งค่าที่ไฟล์ httpd.conf ด้วยคำสั่ง vi /etc/httpd/conf/httpd.conf

บรรทัดที่ 331 เปลี่ยนจาก Options -Indexes FollowSymLinks ไปเป็น Options -Indexes -FollowSymLinks -ExecCGI –Includes

ดำเนินการสั่งรีสตาร์ Apache ด้วยคำสั่ง service httpd restart

o แสดงเวอร์ชัน PHP บนเว็บเซิร์ฟเวอร์ Apache ดังรูปที่ 9

รูปที่ 9 แสดงเวอร์ชัน PHP บนเว็บเซิร์ฟเวอร์ Apache

วิธีการแก้ไข

ดำเนินการเปลี่ยนแปลงการตั้งค่าที่ไฟล์ php.ini ด้วยคำสั่ง vi /etc/php.ini

บรรทัดที่ 432 เปลี่ยนจาก expose_php = On ไปเป็น expose_php = Off

ดำเนินการสั่งรีสตาร์ Apache ด้วยคำสั่ง service httpd restart

ผลลัพธ์

รูปที่ 10 แสดงการปิดเวอร์ชัน PHP บนเว็บเซิร์ฟเวอร์ Apache

o ดำเนินการตั้งค่าไฟล์ php.ini ให้มีความปลอดภัย

ดำเนินการเปลี่ยนแปลงการตั้งค่าที่ไฟล์ php.ini ด้วยคำสั่ง vi /etc/php.ini

บรรทัดที่ 530 เปลี่ยนจาก display_errors = On ไปเป็น display_errors = Off

บรรทัดที่ 886 เปลี่ยนจาก allow_url_fopen = On ไปเป็น allow_url_fopen = Off

  1. Cross Site Scripting (XXS) การติดตั้งและการตั้งค่าเว็บเซิร์ฟเวอร์ Apache แบบดีฟอลต์นั้น ทำให้ผู้บุกรุกสามารถแทรกคำสั่งอันตรายเข้าสู่ระบบเว็บแอพพลิเคชั่นได้ เช่น คำสั่งของ Javascript หรือ HTML ทำให้ผู้บุกรุกสามารถแก้ไขข้อมูลบนเว็บไซต์ได้ รวมถึงสามารถฝังโปรแกรมอันตรายลงบนเว็บไซต์ และหลอกล่อให้เหยื่อเปิดเว็บไซต์ดังกล่าวเพื่อใช้โจมตีเหยื่อได้

o ดำเนินการตั้งค่าป้องกัน Cross Site Scripting (XXS) บนเว็บเซิร์ฟเวอร์ Apache

วิธีการแก้ไข

ดำเนินการเปลี่ยนแปลงการตั้งค่าที่ไฟล์ httpd.conf ด้วยคำสั่ง vi /etc/httpd/conf/httpd.conf

บรรทัดที่ 332 เพิ่มข้อมูล

Header set X-XSS-Protection “1; mode=block”

ดำเนินการสั่งรีสตาร์ Apache ด้วยคำสั่ง service httpd restart

  1. Authencaction (พิสูจน์ตัวตน) and Authorization (สิทธิในการเข้าถึง)การติดตั้งและการตั้งค่าเว็บเซิร์ฟเวอร์ Apache แบบดีฟอลต์นั้น จะทำผู้บุกรุกสมารถข้ามผ่านการควบคุมสิทธิ์ในการเข้าถึงหรือการพิสูจน์ตัวตน เพื่ออาศัยช่องโหว่ดังกล่าวเหล่านี้ในยึดครองเครื่องเซิร์ฟเวอร์ได้สำเร็จ

o แสดง Trace method บนเว็บเซิร์ฟเวอร์ Apache ดังรูปที่ 11

รูปที่ 11 แสดงการเปิดTrace method บนเว็บเซิร์ฟเวอร์ Apache

วิธีการแก้ไข

o ดำเนินการเปลี่ยนแปลงการตั้งค่าที่ไฟล์ httpd.conf ด้วยคำสั่ง vi /etc/httpd/conf/httpd.conf

เพิ่มข้อมูลลงไป TraceEnable off

ดำเนินการสั่งรีสตาร์ Apache ด้วยคำสั่ง service httpd restart

ผลลัพธ์

รูปที่ 12 แสดงการปิด Trace method บนเว็บเซิร์ฟเวอร์ Apache

o ดำเนินการตั้งค่าป้องกัน clickjacking บนเว็บเซิร์ฟเวอร์ Apache

วิธีการแก้ไข

ดำเนินการเปลี่ยนแปลงการตั้งค่าที่ไฟล์ httpd.conf ด้วยคำสั่ง vi /etc/httpd/conf/httpd.conf

บรรทัดที่ 333 เพิ่มข้อมูล Header append X-FRAME-OPTIONS “SAMEORIGIN”

ดำเนินการสั่งรีสตาร์ Apache ด้วยคำสั่ง service httpd restart

o ดำเนินการตั้งค่าป้องกัน HTTP request methods บนเว็บเซิร์ฟเวอร์ Apache

วิธีการแก้ไข

ดำเนินการเปลี่ยนแปลงการตั้งค่าที่ไฟล์ httpd.conf ด้วยคำสั่ง vi /etc/httpd/conf/httpd.conf

บรรทัดที่ 334 เพิ่มข้อมูล

deny from all

ดำเนินการสั่งรีสตาร์ Apache ด้วยคำสั่ง service httpd restart

ดำเนินการตั้งค่าป้องกัน cookies with HTTPOnly flag บนเว็บเซิร์ฟเวอร์ Apache

วิธีการแก้ไข

ดำเนินการเปลี่ยนแปลงการตั้งค่าที่ไฟล์ httpd.conf ด้วยคำสั่ง vi /etc/httpd/conf/httpd.conf

บรรทัดที่ 335 เพิ่มข้อมูล

Header edit Set-Cookie ^(.*)$ $1;HttpOnly;Secure

ดำเนินการสั่งรีสตาร์ Apache ด้วยคำสั่ง service httpd restart

  1. Denial of Service (DoS) การติดตั้งและการตั้งค่าเว็บเซิร์ฟเวอร์ Apache แบบดีฟอลต์นั้น จะทำผู้บุกรุกสมารถร้องขอข้อมูลผ่านโปรโตคอล HTTP เป็นจำนวนมาก จนทำให้เครื่องเว็บเซิร์ฟเวอร์ Apache ไม่สามารถห้บริการได้

วิธีการแก้ไข

ดำเนินการเปลี่ยนแปลงการตั้งค่าที่ไฟล์ httpd.conf ด้วยคำสั่ง vi /etc/httpd/conf/httpd.conf

บรรทัดที่ 72 เปลี่ยนจาก Timeout 60 ไปเป็น Timeout 300

บรรทัดที่ 78 เปลี่ยนจาก KeepAlive Off ไปเป็น KeepAlive On

บรรทัดที่ 85 เปลี่ยนจาก MaxKeepAliveRequests 100

บรรทัดที่ 91 เปลี่ยนจาก KeepAliveTimeout 15

บรรทัดที่ 1020 เพิ่มข้อมูล

#Limit upload file

LimitRequestBody 512000

# Limits the number of HTTP request header fields that will be accepted from the client

LimitRequestFields 100

# Limits the size of the HTTP request header allowed from the client

LimitRequestFieldSize 8190

ดำเนินการสั่งรีสตาร์ Apache ด้วยคำสั่ง service httpd restart

อ้างอิง

https://news.netcraft.com

https://geekflare.com/apache-web-server-hardening-security/#1-Introduction

http://www.tecmint.com/apache-security-tips/

https://devops.profitbricks.com/tutorials/how-to-harden-the-apache-web-server-on-centos-7/