ในปัจจุบันอินเทอร์เน็ตนั้นเข้ามามีบทบาทในชีวิตประจำวันมากขึ้น โดยเฉพาะเว็บไซต์ซึ่งมีการใช้งานกันอย่างแพร่หลาย ซึ่งอาศัยการทำงานบน Hypertext Transfer Protocol (HTTP) เป็นโพรโตคอลเบื้องต้นที่ทำงานบน Transmission Control Protocol (TCP) ที่ใช้ในการจัดรูปแบบ การรับส่ง การเชื่อมโยงเอกสาร และสื่อผสมต่างๆ เช่นรูปภาพ ข้อความ รวมไปถึงภาพเคลื่อนไหว และข้อมูลเสียง ซึ่งเป็นการบริการพื้นฐานของ World Wide Web (WWW) โดยอาศัยการทำงานของ HTTP นั่นเอง
รูปแบบที่กล่าวมาในตอนต้นนั้นมีการทำงานที่มีทั้งฝั่งเซิร์ฟเวอร์ (Server) และไคลเอ็นต์ (Client) โดยในฝั่งเซิร์ฟเวอร์นั้นต้องอาศัยการทำงานของโปรแกรมที่เรียกว่า เว็บเซิร์ฟเวอร์ (Web Server) เพื่อใช้ในการเก็บ จัดเตรียมและส่งข้อมูลต่างๆที่มีการร้องขอจากทางด้านฝั่งไคลเอ็นต์ซึ่งในฝั่งไคลเอ็นต์นั้นต้องอาศัยโปรแกรมเว็บบราวเซอร์ (Web Browser) เพื่อใช้ในการเข้าถึงข้อมูลที่ฝั่งเซิร์ฟเวอร์และแสดงผลที่ได้ที่ผู้ใช้งาน โดยในปัจจุบันจากการสำรวจของ NEtCraft.com พบว่าโปรแกรมเว็บเซิร์ฟเวอร์ที่ได้รับความนิยมมากที่สุดในปัจจุบันนั้นคือโปรแกรมชื่อ Apache ที่ซึ่งสามารถใช้งานได้ทั้งบนระบบปฏิบัติการยูนิกส์ (Unix) และวินโดว์ส์ (Windows) เนื่องจากมีความสามารถต่างๆมากมายสำหรับการให้บริการ WWW
ในเอกสารฉบับนี้จะแบ่งหัวข้อในการเสริมสร้างความปลอดภัยให้กับ Apache ออกเป็นตอนๆ เพื่อให้ง่ายและสะดวกในการจัดหมวดหมู่ในการอ่าน การนำไปใช้งาน รวมทั้งสามารถทำความเข้าใจได้ง่ายขึ้น ในตอนที่ 1 ซึ่งจะนำเสนอในหัวข้อต่อไปนี้
บทที่ 1 การติดตั้งโปรแกรม Apache อย่างปลอดภัย
บทที่ 2 การตรวจสอบการทำงานของ Apache และสิ่งที่ควรทราบของผู้ดูแลระบบทางผู้จัดทำหวังเป็นอย่างยิ่งว่าจะสามารถให้ผู้ดูแลระบบรวมไปถึงผู้ใช้งานทั่วไป ได้สามารถทำความเข้าใจและนำไปใช้เพื่อให้เกิดประโยชน์สูงสุดและจัดการด้านความปลอดภัยกับระบบของท่านได้ รวมไปถึงสามารถนำไปประยุกต์ใช้งานกับเซิร์ฟเวอร์อื่นๆได้
บทที่ 1 การติดตั้งและใช้งานโปรแกรม Apache เบื้องต้นอย่างปลอดภัย
ในบทที่ 1 นี้จะกล่าวถึงการเริ่มต้นก่อนการติดตั้งโปรแกรม ไปจนถึงเมื่อติดตั้งโปรแกรมเสร็จ และการใช้งานเบื้องต้นต่างๆ ของ Apache ซึ่งในขั้นต้นนี้จะใช้ซอร์สโค้ดที่มาจากเว็บไซต์ของ Apache ซึ่งปัจจุบันเป็นเวอร์ชัน 2.0.54 สามารถดาวน์โหลดได้จาก http://httpd.apache.org/download.cgi (ไฟล์ httpd-2.0.54.tar.gz)
1.1) ตรวจสอบแหล่งที่มาของโปรแกรม Apache ที่นำมาใช้ในการติดตั้ง
ต้องทำการตรวจสอบว่าโปรแกรม Apache ที่นำมาติดตั้งนั้นมีความปลอดภัยหรือน่าเชื่อถือหรือไม่ ทั้งแบบ ซอร์สโค้ด (Source Code) หรือแบบแพ็คเกจ (Package) ซึ่งมีวิธีการตรวจสอบเช่น Check Sum หรือ Gnupgp เพื่อตรวจสอบความถูกต้องของไฟล์ว่าเป็นไฟล์ที่ เหมือนต้นฉบับหรือไม่
วิธีการหนึ่งที่สามารถใช้ในการตรวจสอบได้คือ การตรวจสอบด้วยโปรแกรม md5sum ซึ่งเป็นโปรแกรม Check Sum ประเภทหนึ่ง เช่นจากตัวอย่างใช้ใช้คำสั่ง md5sum
[root@harden_server root]# md5sum apache-2.0.54tar.gz |
แล้วนำผลที่ได้มาทำการตรวจสอบที่เว็บไซต์ http://www.apache.org/dist/httpd/httpd- 2.0.54.tar.gz.md 5 หรือเว็บไซต์อื่นๆที่เชื่อถือได้คือ 772503748ffb85301385d47fb2b96eca httpd-2.0.54.tar.gz จากการเปรียบเทียบแล้วตรงกัน ดังนั้นเป็นการแสดงให้เห็นว่าซอร์สโค้ดที่นำมาใช้งานนั้นปลอดภัยถูกต้องตามต้นฉบับ
หากแหล่งที่มาของโปรแกรมไม่ปลอดภัยอาจจะมีโปรแกรมจำพวก ม้าโทรจัน หรือโปรแกรมอื่นๆที่ไม่ประสงค์ดีแฝงเข้ามาในตัวโปรแกรม ซึ่งอาจทำให้เกิดปัญหาด้านความปลอดภัยต่อระบบ เช่นข้อมูลความลับถูกส่งออกไป
1.2) ติดตั้งเฉพาะโมดูล (Module) ที่จำเป็นต้องใช้เท่านั้น
ในการติดตั้ง Apache แบบที่คอมไฟล์ซอร์สโค้ดเองนั้น เราสามารถกำหนดการติดตั้งเฉพาะโมดูลที่จำเป็นต่อการใช้งานเท่านั้นได้ เนื่องจากโมดูลที่ไม่จำเป็นต่อการใช้งานอาจมีช่องโหว่ที่ติดมากับโมดูลเหล่านั้นได้
การกำหนดโมดูลต่างๆ ที่ต้องการหรือไม่ต้องการให้ติดตั้งในระบบก่อนการคอมไพล์ ซึ่งสามารถกำหนดได้ดังนี้
--enable-MODULE_NAME สำหรับการเพิ่มโมดูลที่ต้องการ
--disable-MODULE_NAME สำหรับการยกเลิกโมดูลที่ไม่ต้องการโดยจะกำหนดในได้ขั้นตอนการคอนฟิกูเรชันระบบ
[root@harden_server httpd]# ./configure --enable-status --disable-imap checking for chosen layout... Apache checking for working mkdir -p... yes ----Snip---- config.status: creating build/pkg/pkginfo config.status: creating include/ap_config_auto.h config.status: executing default commands |
โดย สามารถตรวจสอบโมดูลต่างๆ ได้จาก http://modules.apache.org/ และดูรายละเอียดการ enable และ disable โมดูลต่างๆ ได้จากคำสั่งตามรูปภาพด้านล่าง
[root@harden_server httpd]# ./configure –help `configure' configures this package to adapt to many kinds of systems. Usage: ./configure [OPTION]... [VAR=VALUE]... ---Snip---- --enable-dav WebDAV protocol handling --enable-status process/thread monitoring --disable-autoindex directory listing |
จากรูปจะแสดงให้เห็นว่ามีโมดูล dav,status ที่มีการ enable ส่วนโมดูล autoindex นั้นได้ถูก disable
1.3) เริ่มต้นการใช้งานกับ Apache
เมื่อติดตั้งโปรแกรมเสร็จและ มีการใช้งานในครั้งแรกและครั้งต่อๆไปควรมีการตรวจสอบสิ่งต่างๆ ดังต่อไปนี้
คำสั่งที่ใช้ในการรันโปรแกรม กรณีใช้ Linux
[root@harden_server /]# apachectl start <หรือ> [root@harden_server /]# service httpd start Starting httpd: [ OK ] |
คำสั่งที่ใช้ในการรันโปรแกรม กรณีใช้ Unix ที่เป็น rc script
[root@harden_server /]# /usr/local/etc/rc.d/apache.sh start <หรือ> [root@harden_server /]# /etc/rc.d/init.d/apache start Starting httpd: [ OK ] |
ทำการตรวจสอบโพรเซสที่รันได้จากคำสั่ง ps
[root@harden_server /]# ps –ax | grep httpd root 21855 0.1 8.5 20724 10796 ? Ss 16:16 0:00 /usr/sbin/httpd apache 21857 0.0 8.5 20724 10808 ? S 16:16 0:00 /usr/sbin/httpd apache 21858 0.0 8.5 20724 10808 ? S 16:16 0:00 /usr/sbin/httpd apache 21859 0.0 8.5 20724 10808 ? S 16:16 0:00 /usr/sbin/httpd apache 21860 0.0 8.5 20724 10808 ? S 16:16 0:00 /usr/sbin/httpd apache 21861 0.0 8.5 20724 10808 ? S 16:16 0:00 /usr/sbin/httpd apache 21862 0.0 8.5 20724 10808 ? S 16:16 0:00 /usr/sbin/httpd apache 21863 0.0 8.5 20724 10808 ? S 16:16 0:00 /usr/sbin/httpd apache 21864 0.0 8.5 20724 10808 ? S 16:16 0:00 /usr/sbin/httpd root 21909 0.0 0.5 3752 688 pts/2 R+ 16:21 0:00 grep httpd |
การตรวจสอบนี้ควรจะกระทำเพื่อเป็นการตรวจสอบว่ามีสิ่งผิดปกติไปจากเดิมหลังจากที่เริ่มต้นการใช้งาน Apache เป็นครั้งแรก หรือไม่ เช่น มีโพรเซสแปลกปลอมที่รันอยู่
การตรวจสอบไฟล์ log ของ Apache ว่ามีสิ่งผิดปกติหรือไม่ ซึ่งปกตินั้นไฟล์ error_log จะเป็นไฟล์ที่เก็บข้อผิดพลาดในการทำงานหรือแม้กระทั่งการละเมิดการสิทธิในใช้งานต่างๆ
[root@harden_server /]# cat /var/log/httpd/error_log [Mon Jul 18 16:16:40 2005] [notice] Apache/2.0.54 (Fedora) configured -- resuming normal operations |
การตรวจสอบนี้เป็นการตรวจสอบว่ามีข้อผิดพลาดขณะทำการเริ่มต้นการทำงานของโปรแกรม หรือแม้กระทั่งในขณะที่โปรแกรมทำงานอยู่หรือไม่
1.4 ) ทำการลบหรือซ่อนเว็บเพจหน้าแรกที่มากับการติดตั้ง Apache
หน้าเว็บเพจเหล่านี้มักจะมีการแสดงข้อมูลต่างๆของระบบ เช่น เวอร์ชันของ Apache ที่ใช้งานอยู่ ซึ่งหากผู้ไม่ประสงค์ดีทราบข้อมูลดังกล่าวอาจก่อให้เกิดปัญหาต่างๆ เช่นระบบถูกโจมตีได้
ตัวอย่างของเว็บเพจที่มากับระบบตอนติดตั้ง
สามารถทำการลบหรือซ่อนหน้าเว็บเพจเหล่านี้ได้โดยการลบหรือสร้างไฟล์ index.html ( หรือ index.php กรณีใช้ php) ใหม่ที่มีหน้าเปล่าๆหรือข้อความต่างๆเช่น Test, Success, Under construction ไว้ ในไดเรกทอรี /var/www/html ซึ่งโดยปกติจะเป็นที่อยู่ของเว็บเพจหน้าแรก
1.5) ทำความรู้จักกับไดเรกทอรีต่างๆ ที่ใช้งานของ Apache
ผู้ดูแลระบบควรให้ความสำคัญและทำความรู้จักกับไดเรกทอรีต่างๆของ Apache เนื่องจากในบางกรณีมีความจำเป็น หรือหากมีปัญหาที่จะต้องมีการปรับแต่งระบบเกิดขึ้นจะสามารถแก้ปัญหาหรือเรียนรู้สิ่งต่างๆได้ง่ายและเร็วขึ้น ดังนั้นจึงได้นำเสนอรายละเอียดเกี่ยวกับไดเรกทอรีต่างๆดังตารางข้างล่างนี้
ไดเรกทอรี |
การใช้งาน |
bin |
สำหรับเก็บไฟล์ไบนารี (ที่คอมไพล์แล้ว) สำหรับการใช้งาน |
man |
สำหรับเก็บคู่มือการใช้งาน (man page) ของโปรแกรม |
cgi-bin |
สำหรับเก็บ CGI-script ของโปรแกรม |
error |
สำหรับเก็บหน้าเว็บเพจที่แสดงเมื่อเกิดปัญหาข้อผิดพลาดเช่น page requested is not found, access forbidden |
icons |
สำหรับเก็บรูปไอคอนที่ใช้โดยโปรแกรม |
lib |
สำหรับเก็บไฟล์ไลบรารีที่ใช้ในการรันโปรแกรม |
modules |
สำหรับเก็บโมดูลต่างๆ ที่ใช้ในการทำงานของโปรแกรม |
conf |
สำหรับเก็บไฟล์คอนฟิกูเรชันของโปรแกรม |
htdocs |
สำหรับเก็บเอกสารที่เป็นเว็บเพจที่ใช้งาน หรือ Document Root ปกติจะอยู่ที่ /var/www/html |
include |
สำหรับเก็บไฟล์ไลบรารีของโมดูลที่คอมไพล์เพิ่มขึ้นมาจากโมดูลปกติที่มากับระบบ |
logs |
สำหรับเก็บ log ไฟล์ของโปรแกรม (ปกติจะอยู่ที่ /var/log/httpd) |
manual |
สำหรับเก็บเว็บเพจคู่มือการใช้งานของโปรแกรม (จะไม่เก็บอยู่ที่ htdocs) |
บทที่ 2 การตรวจสอบการทำงานของ Apache และสิ่งที่ควรทราบของผู้ดูแลระบบ
ในบทที่ 2 นี้จะกล่าวถึงคำสั่งตลอดจนเครื่องมือต่างๆที่ใช้ในการตรวจสอบ และดูแลระบบ หรืออาจจะเรียกได้ว่าเป็นสิ่งที่ผู้ดูแลระบบ (administrator) ควรที่จะทราบเพื่อใช้ในการ ตรวจสอบ ดูแล และปรับแต่งแก้ไขระบบได้
2.1) การตรวจสอบรายละเอียดต่างๆ ของโปรแกรม
การตรวจสอบว่า Apache มีการติดตั้งอะไรลงไปบ้าง และมีรายละเอียดการกำหนดค่าต่างๆอย่างไรบ้าง
คำสั่งที่ใช้ในการตรวจสอบเวอร์ชันของ Apache
[root@harden_server /]# httpd -v Server version: Apache/2.0.54 Server built: May 23 2005 08:12:24 |
คำสั่งที่ใช้ในการตรวจสอบโมดูลต่างๆ
[root@harden_server /]# httpd -l Compiled in modules: core.c prefork.c http_core.c mod_so.c |
การตรวจสอบรายละเอียดเพิ่มเติมของโมดูลจะใช้คำสั่งดังนี้
[root@harden_server /]# httpd -L <Directory (core.c) Container for directives affecting resources located in the specified directories Allowed in *.conf only outside <Directory>, <Files> or <Location> <Location (core.c) ----Snip---- LoadModule (mod_so.c) a module name and the name of a shared object file to load it from Allowed in *.conf only outside <Directory>, <Files> or <Location> LoadFile (mod_so.c) shared object file or library to load into the server at runtime Allowed in *.conf only outside <Directory>, <Files> or <Location> |
คำสั่งข้างต้นนั้นเป็นคำสั่งเบื้องต้นที่ใช้ในการตรวจสอบเพื่อที่จะดูเวอร์ชัน และข้อมูลต่างๆของโมดูลที่ได้ติดตั้งไว้ในระบบ รวมไปถึงรายละเอียดการคอนฟิกส์ต่างๆ ของโมดูลนั่นๆ หากพบว่ามีโมดูลที่ไม่จำเป็นถูกติดตั้งลงไปด้วยท่านสามารถทำการยกเลิกการทำงานของโมดูลนั้นๆ ได้โดยการปรับแต่งที่ไฟล์ httpd.conf ซึ่งรายละเอียดต่างๆ ในการปรับแต่งนั้นจะได้นำเสนอในบทต่อๆ ไป
2.2 ) ตรวจสอบรายละเอียดของระบบด้วยคำสั่ง top
top เป็นคำสั่งที่รายงานสถานภาพ โพรเซส และการทำงานของระบบ
สามารถใช้งานคำสั่ง top ได้ดังนี้
[root@harden_server /]# top top - 17:11:26 up 1:32, 3 users, load average: 1.79, 1.45, 1.16 Tasks: 94 total, 2 running, 92 sleeping, 0 stopped, 0 zombie Cpu(s): 7.3% us, 29.6% sy, 55.5% ni, 0.0% id, 5.3% wa, 2.3% hi, 0.0% si Mem: 125784k total, 109844k used, 15940k free, 1252k buffers Swap: 265064k total, 72968k used, 192096k free, 36672k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 22343 root 35 19 41876 30m 408 R 58.8 25.1 12:17.86 prelink 21855 root 17 0 21520 4472 3744 S 1.0 3.6 0:01.33 httpd 2903 root 16 0 7252 1748 1504 D 0.7 1.4 0:02.45 sshd ----Snip---- |
จากคำสั่งนี้เราสามารถดูว่าในแต่ละโพรเซสเป็นอย่างไร เช่น หมายเลข pid, เปอร์เซ็นต์การใช้งานของ CPU, หน่วยความจำที่ใช้งาน หากมีปัญหาใดๆ จะทำให้สามารถทราบและแก้ไขปัญหาได้ถูกจุด เช่นมีโพรเซสที่ผิดปกติที่ใช้งาน CPU 99.99% หรือมีโพรเซสที่เป็น zombie เป็นต้น และจากข้อมูลในข้างต้นเราสามารถอ่านค่าพารามิเตอร์ต่างๆ ได้คือ มีโพรเซสที่ใช้งานอยู่ 94 โพรเซส มีหน่วยความจำเหลืออยู่ 15940kB ที่โปรแกรม Apache มีหมายเลขโพรเซส (PID) คือ 21855 ใช้สิทธิ์ของ root ในการรัน สถานะ (State) คือ S (S=select) ใช้ CPU 1.0% . ใช้หน่วยความจำ25.1% และรันมาแล้วเป็นวเลา 1.33 นาที
2.3 ) ตรวจสอบไฟล์ล็อก (log file) ด้วยคำสั่ง tail
คำสั่ง tail -f เป็นคำสั่งที่ใช้ดูไฟล์ที่มีการทำงานโดยจะแสดงผลที่ส่วน 10 บรรทัดสุดท้ายของไฟล์นั้นๆ ซึ่งในที่นี้จะใช้ในการตรวจสอบดูที่ไฟล์ล็อก ของ Apache
คำสั่ง tail มีการใช้งานดังนี้
[root@harden_server /]# tail -f /var/log/httpd/access_log
20.22.1.2 - - [11/Jul/2005:21:37:29 +0700] "GET / HTTP/1.1" 403 3931 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.8) Gecko/20050512 Firefox/1.0.4 (ax)" 20.22.1.2 - - [11/Jul/2005:21:37:29 +0700] "GET /icons/apache_pb2.gif HTTP/1.1" 200 2414 "http://20.22.1.1/" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.8) Gecko/20050512 Firefox/1.0.4 (ax)" 20.22.1.2 - - [11/Jul/2005:21:37:29 +0700] "GET /icons/powered_by_fedora.png HTTP/1.1" 200 2243 "http:// 20.22.1.1/" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.8) Gecko/20050512 Firefox/1.0.4 (ax)" 20.22.1.2 - - [11/Jul/2005:21:37:29 +0700] "GET /favicon.ico HTTP/1.1" 404 289 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.8) Gecko/20050512 Firefox/1.0.4 (ax)" 20.22.1.2 - - [11/Jul/2005:21:39:15 +0700] "GET / HTTP/1.1" 403 3931 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.8) Gecko/20050512 Firefox/1.0.4 (ax)" 20.22.1.2 - - [11/Jul/2005:21:39:15 +0700] "GET /favicon.ico HTTP/1.1" 404 289 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.8) Gecko/20050512 Firefox/1.0.4 (ax)" |
ไฟล์ล็อกของ Apache ปกติจะอยู่ที่ /var/log/httpd/ ซึ่งมีไฟล์ที่สำคัญคือ access_log ซึ่งเป็นไฟล์ที่บันทึกข้อมูลการเข้าใช้งานว่ามีใครเข้ามาดูเว็บเพจของเราบ้าง และไฟล์ error_log จะเก็บข้อมูลหากมีข้อผิดพลาดที่เกิดขึ้นเช่น พยายามเข้าหน้าเว็บเพจที่ไม่ได้รับอนุญาต ซึ่งเมื่อดูจากภาพจะมีการเข้าถึงเว็บเพจจากเว็บบราวเซอร์ FireFox จาก IP 20.22.1.2
2.4) ดูรายงานผลด้วย server-status และ server-info
server-status เป็นการแสดงสถานะของโปรแกรมผ่านทางเว็บเพจ ส่วน server-info เป็นการแสดงข้อมูลที่สำคัญๆ เช่นโมดูลต่างๆ ของโปรแกรม Apache ผ่านทางเว็บเพจเช่นเดียวกัน ซึ่งมีประโยช์ และนำไปใช้งานคล้ายๆ กับการใช้คำสั่ง top และ คำสั่ง httpd -L
สำหรับ server-status สามารถกำหนดได้โดยไปที่ไฟล์คอนฟิกส์ของโปรแกรม (ตัวอย่าง /etc/httpd/conf/httpd.conf) แล้วเพิ่ม
<Location /server-status> SetHandler server-status Order deny,allow Deny from all Allow from 20.22.1. </Location> |
สำหรับ server-info สามารถกำหนดได้โดยไปที่ไฟล์คอนฟิกส์ของโปรแกรม (ตัวอย่าง /etc/httpd/conf/httpd.conf) แล้วเพิ่ม
<Location /server-info> SetHandler server-info Order deny,allow Deny from all Allow from 20.22.1. </Location> |
ตัวอย่างของหน้าเว็บ server-status
ตัวอย่างของหน้าเว็บ server-info
เนื่องจากหน้าเว็บเพจทั้ง 2 แสดงข้อมูลที่สำคัญต่างๆของ Apache ดังนั้นควรจะให้สิทธิ์ผู้ใช้ที่ได้รับอนุญาตเท่านั้นที่สามารถเข้าใช้งานได้ (ซึ่งการจำกัดสิทธิ์การใช้งานจะกล่าวถึงในตอนต่อๆไป)
ไม่มีความเห็น