การเสริมสร้ามความปลอยภัยให้กับเว็บเซิร์ฟเวอร์ Apache

  • 0 Replies
  • 41 Views

0 Members and 1 Guest are viewing this topic.

การเสริมสร้ามความปลอยภัยให้กับเว็บเซิร์ฟเวอร์ Apache

การเสริมสร้ามความปลอยภัยให้กับเว็บเซิร์ฟเวอร์ Apache
ในปัจจุบันอินเทอร์เน็ตนั้นเข้ามามีบทบาทในชีวิตประจำวันมากขึ้น โดยเฉพาะเว็บไซต์ซึ่งมีการใช้งานกันอย่างแพร่หลาย ซึ่งอาศัยการทำงานบน 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
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

โดย สามารถตรวจสอบโมดูลต่างๆ และดูรายละเอียดการ 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/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 ดังนั้นควรจะให้สิทธิ์ผู้ใช้ที่ได้รับอนุญาตเท่านั้นที่สามารถเข้าใช้งานได้ (ซึ่งการจำกัดสิทธิ์การใช้งานจะกล่าวถึงในตอนต่อๆไป)
by: tawat
« Last Edit: August 30, 2017, 01:56:54 PM by Rock_lee »