![]()

ThaiCERT:
Thai Computer Emergency Response Team
ศูนย์ประสานงานการรักษาความปลอดภัยคอมพิวเตอร์ ประเทศไทย
ชื่อเรื่อง : การพิจารณาความปลอดภัยขั้นต้นของ
Apache
ที่มา : http://www.sans.org/infosecFAQ/web/apache_sec.htm
เรียบเรียงโดย : ภูวดล ด่านระหาญ
เรียบเรียงเมื่อ : 13 กันยายน 2544
Introduction
Apache เป็นเว็บเซิร์ฟเวอร์ที่ใช้งานมากที่สุดในอินเทอร์เน็ต โดยจากการสำรวจของ
NetCraft.com ในเดือนกรกฏาคม 2544 พบว่า มีผู้ใช้ Apache เป็นเว็บเซิร์ฟเวอร์ถึง
62.81% ในขณะที่ Microsoft's IIS และ Netscape มีผู้ใช้ราว 19.86% และ 6.91% ตามลำดับ
(ข้อมูลจาก http://www.netcraft.com/survey/index-200007.html)
จุดกำเนิดของ Apache นั้นเกิดขึ้นจาก National Center for Supercomputing Applications (NCSA) HTTPd web server ซึ่งพัฒนาโดย Rob McCool ในช่วงปี 1990 และภายหลังจากที่โครงการ NCSA HTTPd ถูกยกเลิก ได้มีนักพัฒนาหลายคนที่ได้นำ HTTPd มาปรับปรุงและใช้งาน
ในเดือน กุมภาพันธ์ 1995 ได้มีการจัดตั้ง Apache group ขึ้นโดยนักพัฒนา 8 คน และได้เผยแพร่เวอร์ชั่นแรกของ Apache คือ v 0.6.2 ในเดือนเมษายน 1995 และจากนั้น Apache 1.0 ก็ได้ถูกเผยแพร่เมื่อ 1 ธันวาคม 1995 และได้รับความนิยมอย่างรวดเร็วภายในเวลา 1 ปี กลายเป็นเว็บเซิร์ฟเวอร์ที่มีผู้ใช้งานมากที่สุด
ปัจจุบัน The Apache Software Foundation เป็นผู้ดูแลโครงการ Apache HTTP server ซึ่งมีจุดประสงค์เพื่อสร้างเว็บเซิร์ฟเวอร์ที่มีความทนทานต่อการใช้งาน มีคุณภาพในระดับของ commercial-grade มี feature ที่น่าใช้งาน และสามารถเปิดเผย source code ได้ ทั้งนี้สามารถใช้ Apache เว็บเซิร์ฟเวอร์ได้ฟรีภายใต้ข้อกำหนดของ Apache Software License
การติดตั้ง Apache ให้มีความปลอดภัยนั้นจะขึ้นอยู่กับตัวระบบปฏิบัติการและการเชื่อมต่อเครือข่ายมากกว่า เพราะถึงแม้ว่าหน้าต่างจะปิดไว้แต่ถ้าประตูยังเปิดช่องไว้อยู่ก็ไม่มีประโยชน์แต่อย่างไร ในที่นี้เราจะไม่พูดถึงการทำให้ระบบปฏิบัติการมีความปลอดภัยมากยิ่งขึ้น เนื่องจากว่าเป็นเรื่องใหญ่มากเกินไปสำหรับเอกสารฉบับนี้
อย่างไรก็ตามการที่เราจะติดตั้งเว็บเซิร์ฟเวอร์ให้มีความปลอดภัยนั้น ก็ไม่ควรที่จะติดตั้งเซอร์วิสอื่นๆ ที่ไม่มีความจำเป็น เช่น ftp, mail, DNS ซึ่งถ้ามีความจำเป็นต้องติดตั้งก็ควรติดตั้งแยกเครื่องกันต่างหาก ทั้งนี้รวมไปถึงการไม่ติดตั้งแอพลิเคชันที่ไม่จำเป็นรวมทั้งคอมไพเลอร์ด้วย
นอกจากนี้ปัญหาเรื่อง network security ก็จำเป็นต้องกล่าวถึงเป็นอย่างยิ่งเพราะ โดยส่วนใหญ่แล้ว Apache จะถูกเชื่อมต่อโดยตรงกับอินเทอร์เน็ต โดยไม่ได้มีการกรองจากไฟร์วอลล์ ซึ่งถ้าท่านมีความสามารถในการลงทุนและให้ความสำคัญกับ network security แล้ว ก็จำเป็นที่จะติดตั้งไฟร์วอลล์เพื่อป้องกันการโจมตีแบบ Dinial of Service และ network-based attacks แบบอื่นๆ อีก และนอกจากนี้การติดตั้งซอฟแวร์เสริมตัวอื่น เช่น TCP wrapper, IPTables, SSH , Snort ก็จะช่วยให้ระบบของท่านมีความพร้อมในการรับมือกับเหตุการณ์ที่จะเกิดขึ้นด้วย
สมมุติฐาน
เอกสารนี้จะกล่าวถึง Apache ในส่วนของ POSIX environment เท่านั้น (หมายถึง Linux,
UNIX) โดยเฉพาะอย่างยิ่ง Red Hat Linux 7 และท่านควรจะมีพื้นฐานในการใช้คำสั่งเบื้องต้นของ
UNIX มาบ้าง เพราะบางอย่างจะไม่มีการลงรายละเอียดมากนัก
Obtaining Apache
ก่อนที่จะติดตั้ง Apache ให้มีความปลอดภัยนั้น ต้องสร้างความมั่นใจก่อนว่า source
ที่ได้มานั้นเป็นตัวที่เป็นต้นฉบับจริงๆ ไม่ได้ถูกแก้ไขโดยผู้ไม่ประสงค์ดีมาก่อน
และจุดที่ดีที่สุดในการดาวน์โหลด Apache ก็คือที่ http://httpd.apache.org/
ซึ่งสามารถดาวน์โหลด stable version รวมไปถึงเวอร์ชั่นก่อนหน้านี้ได้ด้วย แต่โดยส่วนใหญ่แล้ว
Apache มักจะถูกรวบรวมไว้ใน CD-ROMs ของ Linux distributions อยู่แล้ว เช่น Red
Hat Linux 7 จะมี Apache version 1.3.12 ติดมาด้วย
เพื่อให้มั่นใจว่า Apache ที่ดาวน์โหลดมามีความสมบูรณ์ควรตรวจสอบโดยวิธีเช็ค PGP หรือ MD5 ในกรณีที่ใช้ RPM ก็สามารถตรวจสอบได้โดยใช้คำสั่ง "rpm -K packagename.rpm"
ท่านสามารถหาเอกสารประกอบของ Apache ได้จาก http://httpd.apache.org/docs/
Installation
ในที่นี้จะติดตั้งโดยใช้เวอร์ชั่น RPM ดังนั้นในกรณีที่ต้องการติดตั้ง Apache โดยใช้ออปชั่นที่ต้องการนั้น
ให้ดาวน์โหลด source code และคอมไพล์เพื่อติดตั้งเอง
ข้อดีของการใช้ RPM ก็คือเราสามารถตรวจสอบได้ว่า package ที่จะติดตั้งนั้น จะติดตั้งไฟล์อะไร ที่ใหนบ้าง เช่น "rpm -q apache -l | more"
เวอร์ชั่นหลังๆ ของ Apache จะถูกรันโดย user ที่มีชื่อว่า apache ซึ่ง account นี้ไม่ต้องการ write permission ใน ServerRoot (เช่น /etc/httpd/) แต่อย่างใด มันต้องการแค่ read permission สำหรับไฟล์ configuration (เช่นภายใต้ /etc/httpd/conf/*) เท่านั้นเอง ซึ่งไฟล์ configuaration เหล่านี้มี root เป็น owner และปกติมันจะให้ read permission กับ other ซึ่งเราสามารถ remove read permission ของ other ออกไปได้
สำหรับ web document directories นั้นจะตั้งค่าได้ที่ไฟล์ configuration เช่น ที่ /var/www โดยดีฟ้อลต์แล้วมี owner คือ root และ web server ให้สิทธิในการอ่านและรัน (read and execute) ให้กับ world permission ดังนั้นแล้ว root จึงไม่ควร update ไฟล์ภายใต้ web document และก็เป็นการดีที่จะ chown จาก root ไปเป็น account อื่น ที่ไม่ใช่ apache account
นอกจากนี้เรายังสามารถสร้าง symbolic link ได้ภายใต้ web document และเช่นกันเราก็สามารถตั้งให้ Apache สามารถ follow หรือ ignore ตัว symbolic link ได้ ซึ่งจะมีการกล่าวถึงอีกครั้ง
สิ่งหนึ่งที่สามารถทำได้คือการสร้างไฟล์ .htpasswd สำหรับใช้เก็บ user และ password เพื่อทำ authentication ซึ่งสามารถสร้างไฟล์นี้ได้โดยใช้คำสั่ง
htpasswd -cmb /path/.htpasswd user password
-c = สรางไฟล์ใหม่
-m = ให้ใช้ MD5 ในการเข้ารหัส
-b = ใช้รหัสผ่านจาก command line (ถ้าไม่ระบุ จะต้องกรอกรหัสผ่านผ่านทาง interactive
screen)
โดยดีฟ้อลต์แล้วไฟล์ .htpasswd จะมี permission เป็น 644 และ owner = root , group = root ซึ่งทุกคนสามารถอ่านไฟล์นี้ได้ ดังนั้นจึงควรเปลี่ยน group ให้เป็น apache (chgrp apache .htpasswd) และเปลี่ยน permission เป็น 640 เพื่อป้องกันไม่ให้ user อื่นๆ ในระบบเข้ามาไฟล์นี้
Configuration Considerations
Apache เวอร์ชั่นเก่าๆ จะใช้ไฟล์ configuration แยกกัน ได้แก่ access.conf , srm.conf,
httpd.conf แต่ปัจจุบันพารามิเตอร์ของทั้งสามไฟล์ได้ถูกรวมไว้ในไฟล์ httpd.conf
ไฟล์เดียวเท่านั้น มีพารามิเตอร์ดังต่อไปนี้ที่มีผลกับความปลอดภัย
ServerType ตัว Apache สามารถรันในลักษณะของ standalone หรือผ่านทาง inetd (xinetd ในเวอร์ชั่นของ Red Hat) ได้ แต่ทางที่ดีที่สุดคือให้รันในโหมด standalone
ServerRoot ต้องมั่นใจว่าไม่ใช่ / (root) ของระบบ
ResourceConfig/ AccessConfig ใช้ในกรณีที่ต้องการย้อนกลับไปใช้งานไฟล์ access.conf , srm.conf ซึ่งถูกใช้งานในเวอร์ชั่นเก่าๆๆ
KeepAlive / MaxKeepAliveRequests / KeepAliveTimeout เกี่ยวข้องกับการเซ็ต persistent connection เพื่อใช้ในการป้องกันการทำ denial of service โดยการร้องขอใช้บริการจำนวนมาก จนเซิร์ฟเวอร์ไม่สามารถให้บริการได้
MinSpareServers / MaxSpareServers / StartServers / MaxClients / MaxRequestsPerChild พรารามิเตอร์เหล่านี้ไม่เกี่ยวข้องกับความปลอดภัยมากนัก แต่จะเกี่ยวข้องกับการทำ optimize มากกว่า
User / Group โดยดีฟ้อลต์คือ apache
ServerAdmin ไม่ควรใส่อี-เมล์จริงของท่าน ควรใช้อี-เมล์ที่ตั้งขึ้นมาโดยเฉพาะ เพราะจะมีความยุ่งยากในการหาว่าอี-เมล์นี้ถูกส่งมาจากที่ใด
DocumentRoot ใช้กำหนด directory สำหรับ web content เช่น /var/www
Options FollowSymLinks / FllowSymLinksIfOwnermatch ตัว FollowSymLinks สั่งให้ Apache สามารถใช้งาน symbolic link ได้โดยไม่ต้องพิจารณาว่า owner คือใคร ในขณะที่ FllowSymLinksIfOwnermatch นั้น จะใช้งาน symbolic link นั้นได้เมื่อ owner ของ destination file เป็น owner เดียวกันกับ original file
Options Indexes เมื่อผู้ใช้งานเรียก url ที่เป็น directory สิ่งที่ Apache จะทำคือ
ถ้า Indexes ถูกเซ็ต จะเป็นการแสดงรายชื่อไฟล์ใน directory นั้นๆ และถ้า FancyIndexing ถูกเซ็ตก็จะแสดงข้อมูล modified date, size, description ของไฟล์ใน directory นั้นๆ ด้วย ดังนั้นถ้าไม่ต้องการให้ผู้อื่นสามารถ browse directory ของเราได้ ก็ให้ลบ Indexes ออกไป
ErrorLog / LogLevel / LogFormat / CustomLog พารามิเตอร์ทั้งสามตัวนี้ใช้ตั้งค่าที่เกี่ยวข้องกับล็อก เช่น path ที่จะใช้เก็บ ทั้งนี้ควรจะมีการทำ logrotate และเก็บข้อมูลนั้นไว้ เพื่อใช้ในการพิจารณาลักษณะ web traffic
AccessFileName / Viewing ใช้ระบุชื่อไฟล์ที่ใช้สำหรับควบคุมการเรียกใช้งาน โดยดีฟ้อลต์แล้วจะใช้ชื่อ .htaccess ซึ่งโดยปกติแล้วถ้าเราไม่ต้องการจำกัดการใช้งานก็ให้ comment ข้อมูลในไฟล์ .htaccess
ScriptAlias ใช้สำหรับกำหนด CGI-BIN directory ต้องมั่นใจว่า root ไม่ได้เป็น owner ของ directory นั้นๆ
http put โดยดีฟ้อลต์แล้วมันจะถูก disable ไว้ ซึ่งถ้า enable ก้มหายถึงอนุญาตให้ใช้งาน http put
Chroot Apache
ในกรณีที่ต้องการเพิ่มความปลอดภัยให้กับ Apache มากขึ้นก็สามารถพิจารณาใช้ chroot
เข้ามาช่วยได้ ซึ่ง chroot ก็คือการจำลองให้ directory ที่หนึ่งกลายเป็น / (root)
ของระบบ ดังภาพ

ซึ่งจะช่วยให้สามารถสร้างroot directory ตัวใหม่ ซึ่งจะรัน Apache ภายใต้รูทนี้
คำสั่งและเซอร์วิสที่รันภายใต้รูทใหม่นี้เรียกอีกอย่างว่า jail สำหรับวิธีในการติดตั้งและใช้งาน
chroot นั้นสามารถหาข้อมูลได้จาก
http://www.linuxdoc.org/LDP/solrhe/Securing-Optimizing-Linux-RH-Edition-v1.3/chap29sec254.html
http://hoohoo.ncsa.uiuc.edu/docs/tutorials/chroot.html
http://penguin.epfl.ch/chroot.html
และลิงค์ข้างล่างนี้ แนะนำวิธีในการเจาะเข้าไปใน chroot jail
http://www.bpfh.net/simes/computing/chroot-break.html
SSL
SSL ถูกนำใช้งานเพราะสามารถเข้ารหัสข้อมูลได้ สำหรับวิธีการติดตั้งและตั้งค่านั้น
ดูได้ที่ http://www.infosecuritymag.com/articles/april01/features1_web_server_sec.shtml
Backup, Plan, Test, Monitor
หลังจากที่ config ตัว Apache ให้มีความปลอดภัยมากขึ้นแล้ว ก็ควรจะมีการสำรองข้อมูลไว้เพื่อนำกลับมาใช้ใหม่ในกรณีที่ระบบถูกบุกรุกหรือฮาร์ดแวร์มีปัญหา
ทั้งนี้ควรจะมีการทดสอบการสำรองข้อมูลและการกู้ข้อมูลกลับ เพื่อไม่ให้มีปัญหาเมื่อต้องการใช้งานจริง
สำหรับการตรวจตราระบบนั้น ให้ตรวจสอบล็อกไฟล์และสังเกตหาจุดที่ผิดปกติ ทั้งนี้อาจจะพิจารณาใช้ Tripwire เพื่อใช้ตรวจสอบความสมบูรณ์ของไฟล์ได้
นอกจากนี้ยังต้องคอบตรวจสอบ patch ที่ออกมาใหม่จาก Apache เป็นระยะ เช่น การไปตรวจสอบข่าวจาก
http://www.cert.org
http://www.securityfocus.com
http://www.apache.org
http://www.apachetoday.com
http://www.onlamp.com/apache
เพื่อดูว่ามีการค้นพบช่องโหว่ใหม่หรือไม่ และจำเป็นต้องอัพเดต Apache หรือไม่
Home
|| เอกสารเผยแพร่ || Unix & Linux
ThaiCERT Disclaimer
| Copyright © 2001 ThaiCERT(NECTEC). All rights reserved.