ThaiCERT: Thai Computer Emergency Response Team
ศูนย์ประสานงานการรักษาความปลอดภัยคอมพิวเตอร์ ประเทศไทย 
 
 
 



ชื่อเรื่อง : Apache Security Checklist
เรียบเรียงโดย : มนัชยา ชมธวัช
เผยแพร่เมื่อ : 12 กุมภาพันธ์ 2546

Apache WebServer เป็นโปรแกรมที่ใช้รองรับการให้บริการที่เรียกว่า World Wide Web (WWW) ซึ่งผู้ใช้งานอินเทอร์เน็ตโดยทั่วไปรู้จักคุ้นเคยกันเป็นอย่างดี ทั้งยังเป็นบริการหนึ่งที่มีผู้ใช้งานสูงสุดบนเครือข่ายอินเทอร์เน็ตอีกด้วย ผู้ใช้ทั่วไปนิยมใช้บริการ WWW นี้เพื่อค้นหา หรือเลือกดูข้อมูลที่สนใจ และดึงเอาข้อมูลที่ต้องการมาใช้งาน ส่วนองค์กรต่างๆ นิยมใช้เพื่อการประชาสัมพันธ์ข้อมูล หรือใช้เป็นช่องทางการติดต่อสื่อสารกับผู้ใช้งานอีกทางหนึ่ง ให้ประโยชน์ในการส่งผ่านข้อมูลทั่วไป หรือใช้ในการทำธุรกรรมพาณิชย์อิเล็กทรอนิกส์ ทั้งนี้เนื่องมาจากการติดตั้งเว็บเซิร์ฟเวอร์ขึ้นมาเพื่อใช้งานนั้นสามารถทำได้โดยไม่ยุ่งยาก และเสียค่าใช้จ่ายไม่มากนัก

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

บทความนี้เป็นการรวมรวมข้อควรปฏิบัติต่างๆ ที่ผู้ดูแลระบบซึ่งทำหน้าที่ดูแลเครื่องเว็บเซิร์ฟเวอร์ที่ใช้งานโปรแกรม Apache ควรนำไปปฏิบัติเพื่อเพิ่มความปลอดภัยให้กับเครื่องเว็บเซิร์ฟเวอร์ในองค์กรของตน โดยจัดทำขึ้นให้มีความสอดคล้องกับเนื้อหาเรื่อง Hardening Dedicated Server: Apache Web Server ซึ่งทีมงาน ThaiCERT ได้จัดบรรยายให้แก่ผู้สนใจในงาน Thai IT Security 2002 เมื่อวันที่ 18 กันยายน 2545 ที่ผ่านมา

Checklist


คำอธิบายเพิ่มเติม

  1. สร้าง group และ user สำหรับใช้งานกับเว็บเซิร์ฟเวอร์
    ผู้ดูแลระบบควรสร้าง group และ user ขึ้นใหม่เพื่อจัดการและใช้งานเว็บเซิร์ฟเวอร์โดยเฉพาะ ซึ่งจะช่วยแบ่งขอบเขตการใช้งานของผู้ใช้แต่ละคน ทั้งยังเป็นการกำหนดชัดเจนว่าผู้ใช้แต่ละคนหรือแต่ละกลุ่มมีสิทธิ์และหน้าที่ใดต่อระบบบ้าง เช่น webmaster ทำหน้าที่ดูแลการทำงานเว็บเพจทั้งหมดในระบบ การจะสร้าง group และ/หรือ user ใดขึ้นใหม่ในระบบให้พิจารณาจากความจำเป็นในการใช้งาน และสภาพแวดล้อมอื่นๆ ของระบบที่ใช้ ผู้ดูแลระบบอาจกำหนดง่ายๆ ดังนี้ หรือหากเว็บมีขนาดใหญ่ผู้ดูแลระบบอาจแบ่งย่อยออกเป็น 4 กลุ่ม และกำหนดให้ผู้ใช้แต่ละคนเป็นสมาชิกของกลุ่มที่สร้างขึ้นใหม่เหล่านั้นตามความจำเป็นในการใช้งาน ได้แก่ ซึ่งผู้ดูแลระบบอาจกำหนดสิทธิ์ของกลุ่มผู้ใช้งานแต่ละกลุ่มในการเข้าใช้งานไดเรกทอรีต่างๆ ของโปรแกรม Apache ได้ดังตารางที่ 1

    USER conf tools (bin) log CGI content
    webmaster Read/Write Read Read Read/Write Read/Write
    web developer - - - Read/Write Read/Write
    web author - - - Read Read/Write
    nobody - - - Read Read
    ตารางที่ 1 แสดงตัวอย่างการกำหนดสิทธิ์ในการเข้าใช้งานแต่ละไดเรกทอรีของโปรแกรม Apache ให้กับผู้ใช้ในกลุ่มต่างๆ

  2. สร้างและตรวจสอบโควตา (quota) สำหรับผู้ใช้งานเว็บ
    หลังจากที่ผู้ดูแลระบบสร้าง group และ user ขึ้นใหม่เพื่อใช้งานกับเว็บเซิร์ฟเวอร์แล้ว ผู้ดูแลระบบจะต้องกำหนดและตรวจสอบโควตาการใช้งานฮาร์ดดิสก์สำหรับ group และ user เหล่านั้น เพื่อลดหรือจำกัดความเสียหายหากเครื่องเว็บเซิร์ฟเวอร์ถูกบุกรุกโจมตี เช่น การกำหนดให้ผู้ใช้งาน user ชื่อ nobody หรือ group ชื่อ nobody ไม่สามารถเขียนข้อมูลใดๆ ลงในพาร์ทิชันใดๆ ของระบบได้เลย


  3. ติดตั้ง patch สำหรับโปรแกรมเว็บเซิร์ฟเวอร์
    สามารถติดตามข้อมูล patch ล่าสุดของโปรแกรม Apache WebServer ได้จาก http://www.apache.org/dist/httpd/patches/ ในไดเรกทอรีที่ตรงกับเวอร์ชันของ Apache ที่ใช้งาน แล้วดาวน์โหลดไฟล์ที่เกี่ยวข้องเพื่อนำมาติดตั้งลงในซอร์สโค้ดของโปรแกรม Apache ตามไฟล์ที่กำหนดในเครื่องเว็บเซิร์ฟเวอร์ก่อนที่จะคอมไพล์และติดตั้งโปรแกรม Apache ลงในระบบ คำสั่งที่ใช้ในการติดตั้ง patch คือ
  4. # patch -p0 < (/path/to/patch_file)

  5. แก้ไขไฟล์ httpd.h
    ไฟล์ httpd.h เป็นไฟล์หนึ่งที่กำหนดค่าการติดตั้งโปรแกรม Apache ลงในระบบ อยู่ในไดเรกทอรี apache_1.3.26/src/include ผู้ดูแลระบบควรปรับแต่งค่าฟิลด์ต่างๆ ในไฟล์ดังนี้
    จากเดิม

    # define

    SERVER_BASEVENDOR
    "Apache Group"
    # define SERVER_BASEPRODUCT "Apache"
    # define SERVER_BASEREVISION "1.3.26"
    แก้ไขเป็น

    # define

    SERVER_BASEVENDOR
    "Apache Group"
      # define SERVER_BASEPRODUCT "My Server"
      # define SERVER_BASEREVISION "4.0"
    ส่งผลให้ค่าพารามิเตอร์ของ header ที่ส่งกลับไปยังผู้ใช้ถูกแก้ไขจากค่าดีฟอลต์ที่โปรแกรมกำหนด เพื่อเป็นการซ่อนข้อมูลของเว็บเซิร์ฟเวอร์ว่าใช้งานโปรแกรมใด เวอร์ชันใดจากผู้ใช้


  6. คอมไพล์และติดตั้งโปรแกรม Apache
    หากพบปัญหาจากการคอมไพล์และติดตั้งโปรแกรม Apache ให้ศึกษาวิธีแก้ไขจากไฟล์ INSTALL ของโปรแกรม Apache


  7. ปรับแต่งแก้ไขไฟล์กำหนดการทำงานของโปรแกรม Apache - httpd.conf
    ถึงแม้ว่าโปรแกรม Apache สามารถให้บริการเป็นเว็บเซิร์ฟเวอร์ได้โดยอาศัยการแก้ไขไฟล์กำหนดการทำงานเพียงเล็กน้อย ปัจจุบันนี้ การปรับแต่งแก้ไขค่าการทำงานของโปรแกรม Apache สามารถทำได้โดยการแก้ไขค่าในไฟล์ httpd.conf เพียงไฟล์เดียว ซึ่งผู้ดูแลระบบไม่ควรละเลยขั้นตอนนี้โดยเด็ดขาด ค่าที่ควรปรับแต่งแก้ไขในไฟล์ ประกอบด้วย 7 ส่วน ดังต่อไปนี้

  8. ปรับแต่งค่าในส่วนการทำงานพื้นฐานของเว็บเซิร์ฟเวอร์ในไฟล์ httpd.conf
    ค่าที่ควรได้รับการแก้ไขประกอบด้วย

    DIRECTIVE
    VALUE ความหมาย/ คำแนะนำ
    ServerType [standalone | inetd] เลือกตามชนิดของเซิร์ฟเวอร์ที่ต้องการใช้
    HostnameLookups [On | Off] กำหนดว่า ต้องการให้เว็บเซิร์ฟเวอร์สามารถ resolve ชื่อเครื่องที่ได้รับ เป็นค่าไอพีแอดเดรสได้หรือไม่ (On: ได้ Off: ไม่ได้)
    User [username] กำหนดเป็นชื่อ user ที่เตรียมไว้ให้เข้ามาใช้งานเว็บเพจ เช่น nobody
    Group [groupname] กำหนดเป็นชื่อ group ที่เตรียมไว้ให้เข้ามาใช้งานเว็บเพจ เช่น nobody
    Port [port number] กำหนดหมายเลขพอร์ตที่ต้องการใช้งานในการเข้าชมเว็บเพจ เช่น 80 (ตาม RFC 1326)
    ServerAdmin [e-mail address] กำหนดอี-เมล์แอดเดรสของผู้ดูแลเว็บเพจที่แสดงแก่ผู้ใช้
    ServerRoot [path/to/apache_program] กำหนดไดเรกทอรีที่เก็บไดเรกทอรีของไฟล์กำหนดค่าการทำงานและไฟล์ล็อกของโปรแกรม Apache
    ServerName [server_name] กำหนดชื่อเซิร์ฟเวอร์ที่ต้องการแสดง เช่น www.hostname.com
    ตารางที่ 2 แสดงค่า directive พื้นฐานที่ควรได้รับการปรับแต่งให้เหมาะสม

  9. ปรับแต่งค่าในส่วนที่เกี่ยวข้องกับความปลอดภัยของเว็บเซิร์ฟเวอร์ในไฟล์ httpd.conf
    Directive ที่เกี่ยวข้องกับความปลอดภัยของเว็บเซิร์ฟเวอร์ประกอบด้วย

    DIRECTIVE
    VALUE ความหมาย/ คำแนะนำ
    LogLevel [debug|info|notice|warn|
    error|crit|alert|emerg]
    กำหนด priority ในการเก็บบันทึกล็อกความผิดพลาดที่เกิดขึ้นกับโปรแกรม Apache แนะนำให้แก้ไขเป็น notice
    ErrorLog [path/to/
    apache_error_log]
    กำหนดไฟล์ที่เก็บบันทึกล็อกของความผิดพลาดทั้งหมดที่เกิดขึ้นกับโปรแกรม Apache
    CustomLog [path/to/
    apache_access_log]
    กำหนดไฟล์ที่เก็บบันทึกล็อกการเข้าใช้งานเว็บเพจผ่านโปรแกรม Apache
    <Directory> [full_path/to/directory] กำหนดค่าการเข้าใช้งานแต่ละไดเรกทอรีตามที่ผู้ดูแลระบบต้องการ ทำงานโดยอาศัย directive อื่นๆ ร่วมด้วย เช่น Options, AllowOverride, Order เป็นต้น
    Options [None|All|AllowOverride|
    ExecCGI|FollowSymLinks|
    Includes|IncludesNoExec|
    Indexes|MultiViews|
    SymlinksIfOwnerMatch]

    ควบคุมรูปแบบการเปิดให้ใช้งานแต่ละไดเรกทอรี (ตามที่กำหนดใน directive ชื่อ Directory) ผ่านเว็บเซิร์ฟเวอร์ สามารถกำหนดได้หลากหลายตามที่ต้องการ ผู้ดูแลระบบจะต้องพิจารณาว่าไดเรกทอรีใดต้องเปิดให้ใช้รูปแบบการทำงานพิเศษใดบ้าง ตัวอย่างเช่น
    None: ไม่เปิดให้ใช้ออปชันใดๆ เลย
    AllowOverride: ให้ใช้การตรวจสอบตัวตนผู้ที่ต้องการเข้าใช้งานโดยการเปรียบเทียบจากไฟล์ .htaccess
    IncludesNoExec: ไม่อนุญาตให้ใช้งาน Server Side Includes (SSI) เพื่อเรียกใช้งานคำสั่งของระบบ
    SymLinkIfOwnerMatch: ไม่อนุญาตให้ใช้งาน symbolic link นอกจากผู้เข้าใช้งานกับเจ้าของไฟล์เป็นผู้ใช้คนเดียวกัน

    Order [deny,allow|allow,deny] กำหนดลำดับความสำคัญของการอนุญาตหรือไม่อนุญาตให้เครื่องคอมพิวเตอร์ของผู้ใช้เข้าใช้งานไดเรกทอรีที่กำหนด
    deny,allow: ให้พิจารณาจาก allow ก่อน
    allow,deny: ให้พิจารณาจาก deny ก่อน
    Allow from/ Deny from [host1 host2 host3|All] Allow from: กำหนดว่าจะอนุญาตให้เครื่องคอมพิวเตอร์เครื่องใดเข้าใช้งานไดเรกทอรีที่กำหนดบ้าง
    Deny from: กำหนดว่าจะไม่อนุญาตให้เครื่องคอมพิวเตอร์เครื่องใดเข้าใช้งานไดเรกทอรีที่กำหนดบ้าง
    All: อนุญาต/ไม่อนุญาตให้ทุกเครื่องเข้าใช้งาน
    ServerSignature [On|Off|Email] กำหนดข้อความที่จะให้แสดงตรงส่วนท้ายของหน้าเว็บเพจแต่ละหน้า
    On: แสดงชื่อและเวอร์ชันของโปรแกรม Apache ชื่อเครื่องที่ใช์และพอร์ตที่เปิดให้ใช้งาน
    Off: ไม่แสดงค่าใดๆ เลย
    Email: แสดงอี-เมล์แอดเดรสของผู้ดูแลเว็บเซิร์ฟเวอร์ (ServerAdmin)
    ServerTokens [Full|OS|Min|Prod] กำหนดว่าจะอนุญาตให้ส่งข้อมูลที่เกี่ยวข้องกับการให้บริการเว็บเซิร์ฟเวอร์รวมไปกับการส่งข้อความ header ของเซิร์ฟเวอร์เมื่อได้รับการร้องขอหรือไม่
    Full: (หรือไม่มีการเรียกใช้ directive นี้) ผู้ใช้ที่ขอข้อมูล header จะได้รับข้อมูลทั้งหมด
    OS: แสดงเฉพาะรายละเอียดของโปรแกรม Apache และชนิดของระบบปฏิบัติการที่ใช้
    Min(imal): แสดงเฉพาะรายละเอียดของโปรแกรม Apache เท่านั้น
    Prod(uctOnly): ให้แสดงเฉพาะชื่อโปรแกรม Apache เท่านั้น
    CoreDumpDirectory [path/to/directory] กำหนดว่าจะให้ระบบบันทึกสิ่งที่เกิดขึ้นลงในไดเรกทอรีใด หากเครื่องเว็บเซิร์ฟเวอร์เกิดการขัดข้อง (core dump) เพื่อนำไปใช้วิเคราะห์เหตุการณ์ที่เกิดขึ้น เช่น /logs
    <LimitExcept> [GET|POST|PUT|DELETE|
    CONNECT|OPTIONS]
    จำกัดการทำงานของเว็บเซิร์ฟเวอร์ โดยควบคุมวิธีการขอใช้งาน HTTP จากเครื่องผู้ใช้ โดยปกติแล้ววิธีการที่จำเป็นต้องใช้งานคือ GET และ POST
    ตารางที่ 3 แสดงค่า directive ที่เกี่ยวข้องกับความปลอดภัยของโปรแกรม Apache

  10. ปรับแต่งค่าในส่วนที่เกี่ยวข้องกับความปลอดภัยของเว็บเซิร์ฟเวอร์ในไฟล์ httpd.conf - Error Responses, 401/403 Errors
    ผู้ไม่ประสงค์ดีบางคนอาจใช้จุดอ่อนที่เกิดขึ้นจากความผิดพลาดของเว็บ (error) ในการค้นหาช่องโหว่ของเว็บเซิร์ฟเวอร์ซึ่งตามปกติแล้ว หากเกิดความผิดพลาดขึ้นตัวเว็บเซิร์ฟเวอร์จะส่งกลับหน้าเว็บเพจหน้าหนึ่งแสดงข้อความผิดพลาดไปยังผู้ใช้ เช่น "404 - File Not Found" การป้องกันไม่ให้เกิดการแสดงข้อมูลที่ไม่ต้องการทำได้โดยแก้ไขหน้าเว็บเพจที่จะแสดงแทนที่หน้าดีฟอลต์ สามารถทำได้ 2 วิธีคือ

    สำหรับ Error 401 และ Error 403 นั้นเป็นความผิดพลาดจากการที่ผู้ใช้พยายามเข้าใช้งานส่วนใดๆ ของเว็บไซต์โดยไม่ได้รับอนุญาต หากผู้ดูแลระบบคนใดให้ความสำคัญกับความปลอดภัยของเว็บไซต์อาจจะเก็บบันทึกข้อมูลที่เกิดขึ้นนี้ไว้เป็นหลักฐานได้ อย่างไรก็ตาม ข้อด้อยอย่างหนึ่งของโพรดตคอล HTTP (HyperText Transfer Protocol) คือจะไม่มีการเก็บค่าการติดต่อที่ไม่สำเร็จ ดังนั้นผู้ดูแลระบบจำเป็นต้องนำเอาสคริปต์ CGI มาแทนที่หน้าเว็บเพจที่จะใช้แสดงหากเกิด Error 401 และ 403 การกำหนดว่า Error ชนิดใดให้แสดงด้วยเว็บเพจหรือสคริปต์ใดทำได้ดังนี้

  11. ErrorDocument

    <Error_Code Number>
    /path/to/script_or_webpage
    เช่น
    ErrorDocument

    401
    /path/to/apache/cgi-bin/401.cgi
      ErrorDocument 404 errors/404.html

    ค่า Error หมายเลขต่างๆ ของโปรแกรม Apache แสดงไว้ในตารางที่ 4 ด้านล่าง

    Successful Client Requests
    200 OK
    201 Created
    202 Accepted
    203 Non-Authorative Information
    204 No Content
    205 Reset Content
    206 Partial Content
    Client Request Redirected
    300 Multiple Choices
    301 Moved Permanently
    302 Moved Temporarily
    303 See Other
    304 Not Modified
    305 Use Proxy
    Client Request Errors
    400 Bad Request
    401 Authorization Required
    402 Payment required (not used yet)
    403 Forbidden
    404 Not Found
    405 Method Not Allowed
    406 Not Acceptable (encoding)
    407 Proxy Authentication Required
    408 Request Time Out
    409 Conflicting Request
    410 Gone
    411 Content Length Required
    412 Precondition Failed
    413 Request Entity Too Long
    414 Request URL Too Long
    415 Unsupported Media Type
    Server Errors
    500 Internal Server Error
    501 Not Implemented
    502 Bad Gateway
    503 Service Unavailable
    504 Gateway Timeout
    505 HTTP Version Not Supported
    ตารางที่ 4 แสดงค่าสถานะการทำงานและการใช้งานของโปรแกรม Apache ที่เครื่องให้บริการ และค่าความผิดพลาด (Error Code)**
    **ที่มา: The APACHE Server Error Codes (http://www.bignosebird.com/apache/a5.shtml)

  12. ปรับแต่งค่าในส่วนควบคุมการเข้าถึงเว็บเซิร์ฟเวอร์ในไฟล์ httpd.conf เพื่อจำกัดการเข้าถึงไฟล์และไดเรกทอรี
    การควบคุมการเข้าใช้งานหรือการเข้าถึงแต่ละไฟล์หรือแต่ละไดเรกทอรีของเว็บเซิร์ฟเวอร์สามารถทำได้โดยการตรวจสอบตัวตนผู้ใช้ก่อนที่จะอนุญาตให้เข้าใช้งาน ซึ่งมี 2 วิธีการคือ
    1. Host-based authentication เป็นวิธีการตรวจสอบตัวตนผู้ขอเข้าใช้งานโดยพิจารณาจากเครื่องที่ขอเข้าใช้งานว่าอยู่ในรายการที่อนุญาตหรือรายการที่ไม่อนุญาตให้เข้าใช้งาน มีวิธีการตามรูปที่ 1

    2. รูปที่ 1 แสดงขั้นตอนการตรวจสอบผู้ใช้แบบ Host-based authentication

    3. HTTP-specified basic authentication เป็นวิธีการตรวจสอบตัวตนผู้ใช้โดยกำหนดให้ผู้ใช้ใส่ค่าชื่อผู้ใช้หรือชื่อกลุ่มและใส่รหัสผ่านก่อนที่จะเข้าใช้งานไดเรกทอรีที่ต้องการ มีวิธีการตามรูปที่ 2


    รูปที่ 2 แสดงขั้นตอนการตรวจสอบผู้ใช้แบบ HTTP-specified basic authentication

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

  13. ปรับแต่งค่าในส่วนป้องกันการโจมตีตามรูปแบบที่มักจะเกิดขึ้น (Common Attack Signatures) ในไฟล์ httpd.conf
    โดยทั่วไปแล้ว ผู้ที่ต้องการโจมตีเว็บไซต์มักจะทำการโจมตีเว็บไซต์โดยอาศัยวิธีง่ายๆ 2 วิธีคือ

  14. การโจมตีผ่านจุดบกพร่องของโมดูล Mod_Rewrite
    ผู้ดูแลระบบควรเพิ่มค่าต่อไปนี้ลงในไฟล์ httpd.conf เพื่อป้องกันการโจมตีโดยอาศัยจุดบกพร่องจากโมดูล Mod_Rewrite

    RewriteEngine     On
    RewriteLog       /usr/local/apache/logs/ids.log
    RewriteLogLevel   9
    RewriteRule      \.\.|\.\.\.|\s|\'|\"|\+|\/\/|\[|\]|\;|\~|\#|\%|\^|\&|\(|\)
    |\{|\}|\:|\?|\,|<|<<||\||\!|\`|>|>>|\@|\$|\*          -      [F]
    RewriteRule      /\.[a-z0-9]
    |/bin|/sbin|/etc|httpd.conf|access_log|error_log      -      [F]

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

  15. การโจมตีด้วย Robots
    ผู้ดูแลระบบควรเพิ่มค่าต่อไปนี้ลงในไฟล์ httpd.conf เพื่อป้องกันการโจมตีจาก robot โดยอาศัยการทำงานของ directive ชื่อ RewriteEngine On

    RewriteRule      /robots\.txt$ /cgi-bin/robots.cgi [L,T=application/x-httpd-cgi]

    ไฟล์ robots.txt เป็นไฟล์ที่ผู้ดูแลระบบใช้เพื่อตรวจสอบว่าเว็บเพจของตนไม่ถูกทำ mirror หรือถูกค้นหาโดยโปรแกรมจำพวก spider เช่น wget หรือ TeleportPro ใช้ในการค้นหาเว็บไซต์ที่ต้องการจากเว็บไซต์ต่างๆ ทั่วโลก การกำหนดค่าดังกล่าวจะทำให้เกิดการส่งต่อการร้องขอไฟล์ "robots.txt" ไปยังไฟล์สคริปต์ CGI ชื่อ "robots.cgi" ซึ่งสคริปต์ดังกล่าวนี้จะตรวจสอบจากฟิลด์ของ User-Agent ที่มาจากเครื่องที่ร้องขอ แล้วสร้างไฟล์ robots.txt ที่เหมาะสมเพื่อส่งกลับไป เนื่องจากการโจมตีเว็บเซิร์ฟเวอร์โดยทั่วไปมีจุดเริ่มต้นจากการเข้าชมเพื่อสำรวจหาช่องโหว่ของเว็บ หากข้อมูลที่เผยแพร่ผ่านเว็บไม่ถูกจำกัดให้เหมาะสมแล้ว ข้อมูลดังกล่าวจะถูกนำไปใช้เพื่อโจมตีเว็บคล้ายกับการโจมตีโดยวิธีการ "Social Engineer" ซึ่งผู้โจมตีนิยมนำสคริปต์หรือแอพพลิเคชันมาใช้เพื่อดาวน์โหลดข้อมูลทั้งหมดในเว็บไปตรวจหาช่องโหว่ที่อาจมีอยู่จากไฟล์ ไดเรกทอรีหรือโค้ดต่างๆ ที่ได้ดาวน์โหลดไป ดังนั้นผู้ดูแลเว็บเซิร์ฟเวอร์ควรเก็บข้อมูลนี้ไว้เป็นหลักฐานสำคัญ เพื่อตรวจสอบอ้างอิงในอนาคต อย่างไรก็ตาม การร้องขอไฟล์ "robots.txt" ไม่จำเป็นต้องเป็นผลจากการพยายามโจมตีระบบเสมอไป

  16. ตรวจสอบชื่อไฟล์ และโค้ดของสคริปต์ CGI
    ผู้โจมตีนิยมใช้ช่องโหว่ของโปรแกรม CGI เพื่อสำรวจหาจุดอ่อนของระบบหรือทดลองบุกรุกระบบ เนื่องจาก CGI ส่วนใหญ่มักมีจุดอ่อนเรื่องความปลอดภัยจากความผิดพลาดหรือปัญหาหากค่าอินพุทที่เข้าสู่โปรแกรมไม่เป็นไปตามที่กำหนด ผู้ดูแลเว็บไซต์จึงจำเป็นต้องตรวจสอบการทำงานและโค้ดของสคริปต์ CGI ทุกครั้งก่อนที่จะนำมาใช้งาน เอกสารฉบับนี้มิได้ครอบคลุมถึงวิธีการเขียนสคริปต์ CGI ให้ปลอดภัย ดังนั้นหากผู้ดูแลเว็บเซิร์ฟเวอร์ต้องการทราบข้อมูลเหล่านี้สามารถอ่านได้จาก WWW Security FAQ: CGI Scripts
    นอกจากนั้น หลังจากติดตั้งโปรแกรม Apache ไดเรกทอรีชื่อ cgi-bin จะถูกสร้างขึ้นมาเพื่อเก็บสคริปต์ CGI ภายในไดเรกทอรีนี้จะมีไฟล์ printenv และ test-cgi ซึ่งสร้างขึ้นโดยโปรแกรม Apache ผู้ดูแลควรแก้ไขชื่อไฟล์ให้ต่างไปจากเดิมหรือลบไฟล์ทั้งสองนี้ทิ้งหากไม่มีการใช้งาน

  17. ใช้สคริปต์ CGI ลวงผู้ที่ต้องการโจมตีระบบ
    เป็นการเขียนสคริปต์ CGI ขึ้นมาเพื่อทำหน้าที่รับการโจมตีจากผู้ที่มีต้องการทำลายหรือตรวจหาจุดอ่อนของเครื่องเว็บเซิร์ฟเวอร์และระบบ ส่งผลให้ผู้โจมตีเข้าใจถึงโครงสร้างหรือทรัพยากรของระบบผิดพลาด ตัวอย่างการสร้างความปลอดภัยด้วยวิธีนี้ ได้แก่
  18. ป้องกัน Vulnerability Scanner
    แอพพลิเคชันจำพวก vulnerability scanner เช่น Nessus, ISS Security Scanner หรือ Whisker ซึ่งผู้ดูแลระบบนำมาใช้เพื่อตรวจสอบความปลอดภัยของเครื่องคอมพิวเตอร์และเครือข่ายของตนเองนั้น อาจถูกผู้ที่ต้องการบุกรุกระบบนำไปใช้ตรวจหาช่องโหว่ของระบบเพื่อเป็นช่องทางในการโจมตีระบบต่อไป ถึงแม้ว่าวิธีการและขอบเขตการทำงานของเครื่องมือสแกนเนอร์เหล่านี้จะแตกต่างกันไป แต่ฟังก์ชันหนึ่งที่มีให้ใช้งานคือการค้นหาสคริปต์ CGI โดยวิธีการที่ใช้อาจทำได้โดยการร้องขอใช้งานสคริปต์ CGI แล้วตรวจสอบค่าที่ส่งกลับมา วิธีการที่จะวิเคราะห์ว่าเครื่องเว็บเซิร์ฟเวอร์ถูกโจมตีด้วยวิธีนี้หรือไม่ ทำได้โดยการใช้สคริปต์ CGI ลักษณะเดียวกับที่ใช้แสดงเมื่อเกิด Error 401 และ 403 มาแทนที่สคริปต์ CGI ที่ถูกตรวจสอบจากเครื่องมือสแกนเนอร์เหล่านี้ เช่น printenv, test-cgi, nph-test-cgi, wwwadmin.cgi, wwwboard.cgi, aglimpse, campas, finger, php.cgi เป็นต้น

  19. แก้ไข PHF
    PHF เป็นสคริปต์ CGI ซึ่งเป็นที่รู้จักและมีช่องโหว่ เนื่องจากไม่ได้รับการฟิลเตอร์ค่าอินพุตที่เป็นอักขระพิเศษออกจากค่าอินพุตทั้งหมดของผู้ใช้ ป้องกันได้โดยการเขียนสคริปต์ขึ้นมาใช้แทนที่ไฟล์ phf เดิม อย่างไรก็ตาม วิธีการโจมตีโดยใช้ PHF เป็นวิธีการที่แพร่หลายในปี 2539 - 2540 และ Apache ได้แก้ไขช่องโหว่ดังกล่าวนี้แล้ว ดังนั้น ผู้ดูแลระบบที่ใช้โปรแกรม Apache เวอร์ชันใหม่ไม่จำเป็นต้องดำเนินการใดๆ ในข้อนี้
  20. วิธีการตรวจสอบว่าโปรแกรม Apache เวอร์ชันที่ใช้ยังคงมีช่องโหว่นี้หรือไม่ทำได้โดยการค้นหาไฟล์ชื่อ phf ในเครื่อง ซึ่งโปรแกรม Apache เวอร์ชันใหม่จะไม่มีการสร้างไฟล์ดังกล่าวนี้ขึ้นในเครื่อง-

  21. ปรับแต่งค่าในส่วนที่เกี่ยวข้องกับการเข้าใช้งานสคริปต์ CGI ในไฟล์ httpd.conf
    ตามที่ได้กล่าวมาแล้วในหลายหัวข้อก่อนหน้านี้ว่า สคริปต์ CGI ที่ใช้งานผ่านเครื่องเว็บเซิร์ฟเวอร์เป็นจุดที่ผู้ต้องการโจมตีระบบนิยมนำไปใช้เพื่อตรวจหาช่องโหว่หรือใช้เป็นช่องทางในการโจมตีระบบโดยตรง ดังนั้น สิ่งแรกที่ผู้โจมตีระบบต้องการรู้สิ่งหนึ่งคือ ไฟล์ของสคริปต์ CGI ที่อยู่ภายในเครื่องเว็บเซิร์ฟเวอร์นั้นถูกเก็บไว้ที่ใดและใช้ชื่อไฟล์ว่าอะไร วิธีการที่ผู้โจมตีระบบนิยมใช้คือการสแกนเครื่องเว็บเซิร์ฟเวอร์ว่า มีไฟล์และไดเรกทอรีที่ตนเองรู้จักหรือไม่ โดยนำชื่อไฟล์และไดเรกทอรีมาจากชื่อที่ผู้ดูแลระบบหรือผู้พัฒนาเว็บไซต์นิยมใช้เป็นชื่อของสคริปต์ CGI มาเปรียบเทียบ เช่น หาไดเรกทอรีชื่อ scripts, cgi-local, htbin, cgibin, cgis, cgi, win-cgi, cgi-win หรือ bin เป็นต้น หรือหาไฟล์ชื่อ perl.exe, guestbook.cgi, files.pl, count.cgi, rwwwshell.cgi หรือ .exe เป็นต้น
    การป้องกันทำได้โดย การกำหนดให้ผู้ใช้ทุกคนไม่สามารถเข้าถึงไฟล์และไดเรกทอรีเหล่านั้นได้ สำหรับการป้องกันการเข้าถึงไดเรกทอรีทำได้โดยการกำหนดค่า directive ชื่อ DirectoryMatch ดังนี้

    <DirectoryMatch (scripts|cgi-local|htbin|cgibin|cgis|cgi|win-cgi|cgi-win|bin)>

    order allow, deny
    deny from all

    </DirectoryMatch>

    สำหรับการป้องกันการเข้าถึงไฟล์ทำได้โดยการกำหนดค่า directive ชื่อ FilesMatch ภายใต้ directive ชื่อ Directory ที่กำหนดไดเรกทอรีที่เก็บไฟล์สคริปต์ CGI เช่น /usr/local/apache/cgi-bin ดังนี้

    <Directory "/usr/local/apache/cgi-bin">
    <FilesMatch (perl\.exe|guestbook\.cgi|files\.pl|count\.cgi|rwwwshell\.cgi|.\.exe)>

    order allow, deny
    deny from all

    </FilesMatch>
    </Directory>

  22. ปรับแต่งค่าในส่วนป้องกันการโจมตีแบบ Denial of Service ในไฟล์ httpd.conf
    วิธีการหนึ่งในการโจมตีการให้บริการบนเครือข่ายอินเทอร์เน็ตคือพยายามทำให้เครื่องเป้าหมายไม่สามารถให้บริการได้เนื่องจากทรัพยากรในเครื่องถูกใช้งานจนหมด ดังนั้นผู้ดูแลเครื่องเว็บเซิร์ฟเวอร์ควรแก้ไขค่าดังต่อไปนี้ตามตารางที่ 5 เพื่อป้องกันเครื่องเว็บเซิร์ฟเวอร์ที่ตนเองเป็นผู้ดูแล โดยค่าที่แสดงในช่อง VALUE เป็นค่าที่แนะนำให้ผู้ดูแลเว็บเซิร์ฟเวอร์นำไปใช้ ซึ่งอาจเปลี่ยนแปลงได้ตามขนาดของทรัพยากรเครื่องและการให้บริการ

    DIRECTIVE
    VALUE
    ความหมาย/ คำแนะนำ
    Timeout 60 เป็นการกำหนดให้เครื่องเว็บเซิร์ฟเวอร์ตัดขาดการติดต่อหากเครื่องปลายทางไม่มีการติดต่อใดๆ เข้ามาเกิน 60 วินาที
    KeepAlive [On|Off] ควรกำหนดค่าเป็น On เพื่อเพิ่มประสิทธิภาพของเครื่องเว็บเซิร์ฟเวอร์ โดยอนุญาตให้การให้บริการ HTTP หลายๆ การร้องขอทำงานผ่านการเชื่อมต่อเพียงการเชื่อมต่อเดียวได้
    KeepAliveTimeout 15 กำหนดเวลาที่เครื่องเว็บเซิร์ฟเวอร์จะรอการติดต่อแบบ KeepAlive ในที่นี้คือ 15 วินาที
    StartServers 5-10 กำหนดจำนวนโพรเซสของ Apache ที่จะรอรับการติดต่อเมื่อเริ่มเปิดใช้งานเซอร์วิส เช่น 5 โพรเซส
    MinSpareServers/
    MaxSpareServers
    10/20 กำหนดค่าว่าจะสำรองระบบไว้รอรับการร้องขอการใช้งานเว็บเท่าไร หากพบว่าจำนวนที่มีอยู่น้อยกว่าค่า MinSpareServers จะทำการเพิ่มจำนวน และหากพบว่าจำนวนที่มีอยู่มากกว่าค่า MaxSpareServers จะทำการลดจำนวนลง เพื่อชะลอการเกิด denial of service
    ตารางที่ 5 แสดงค่า directive ที่เกี่ยวข้องกับการป้องกันการโจมตีแบบ denail of service

  23. ปรับแต่งค่าในส่วนป้องกันการโจมตีแบบ Buffer Overflow ในไฟล์ httpd.conf
    การโจมตีแบบ buffer overflow เป็นการพยายามทำให้การใช้งานหน่วยความจำของเครื่องเกินกว่าที่ระบบกำหนด ส่งผลให้การทำงานของเครื่องผิดพลาด สามารถป้องกันได้โดยการแก้ไขค่าตามตารางที่ 6 ด้านล่าง ค่าที่แสดงในช่อง VALUE เป็นค่าที่แนะนำให้ผู้ดูแลเว็บเซิร์ฟเวอร์นำไปใช้ ซึ่งอาจเปลี่ยนแปลงได้ตามขนาดของทรัพยากรเครื่องและการให้บริการ

    DIRECTIVE
    VALUE
    ความหมาย/ คำแนะนำ
    LimitRequestBody 10240 กำหนดขนาดของ body ในการร้องขอ HTTP ที่ส่งมายังเครื่องเว็บเซิร์ฟเวอร์ เมื่อมีการ PUT และ POST เช่น การส่งข้อมูลมาให้สคริปต์ CGI เพื่อให้มีขนาดไม่เกิน 100 K (แก้ไขได้ตามขนาดของฟอร์มที่ต้องการใช้งาน)
    LimitRequestFields 40 กำหนดจำนวน header ที่ส่งจากเครื่องปลายทางมายังเครื่องเว็บเซิร์ฟเวอร์เพื่อร้องขอ HTTP โดยทั่วไปจะมีค่าประมาณ 20
    LimitRequestFieldsize 100 กำหนดความยาวสูงสุดของ header ของ HTTP รวมถึงค่าเริ่มต้น (initial) แต่ละครั้งที่ส่งจากเครื่องปลายทางมายังเครื่องเว็บเซิร์ฟเวอร์ ค่าดีฟอลต์คือ 8190 ตัวอักษร
    LimitRequestline 500 กำหนดความยาวสูงสุดของตัว HTTP ที่ร้องขอ รวมถึงวิธีการ, URL และโพรโตคอลที่เรียกใช้ ค่าดีฟอลต์คือ 8190 ตัวอักษร
    ตารางที่ 6 แสดงค่า directive ที่เกี่ยวข้องกับการป้องกันการโจมตีแบบ buffer overflow

  24. เจ้าของและสิทธิ์การใช้งานไดเรกทอรีและไฟล์ที่เกี่ยวข้อง
    ความปลอดภัยของเครื่องเว็บเซิร์ฟเวอร์มิได้พิจารณาเฉพาะส่วนการทำงานของเครื่องซึ่งจะต้องไม่ถูกโจมตี หรือถูกรบกวนให้ไม่สามารถให้บริการได้เท่านั้น สิ่งสำคัญอีกสิ่งหนึ่งที่ต้องคำนึงถึงในการสร้างความปลอดภัยให้กับเครื่องเว็บเซิร์ฟเวอร์คือ การที่ข้อมูล ไฟล์หรือไดเรกทอรีต่างๆ ภายในเครื่องจะต้องถูกเข้าถึงได้จากผู้ที่ได้รับอนุญาตในระดับที่เหมาะสมเท่านั้น เช่น ผู้ใช้งานเว็บจะต้องไม่สามารถเข้าถึงไฟล์ใดๆ ก็ตามที่ไม่ใช่ไฟล์เอกสารของเว็บ ได้แก่ ไฟล์ของระบบ หรือไฟล์ configuration ของโปรแกรม เป็นต้น ดังนั้นผู้ดูแลเครื่องเว็บเซิร์ฟเวอร์จำเป็นต้องกำหนดรายชื่อเจ้าของและสิทธิ์การใช้งานไดเรกทอรีและไฟล์ต่างๆ ภายในแต่ละไดเรกทอรีให้เหมาะสม ไดเรกทอรีสำคัญที่เกี่ยวข้องกับการทำงานของโปรแกรม Apache ประกอบด้วย
  25. ไดเรกทอรีที่เก็บไฟล์ configuration ของเว็บเซิร์ฟเวอร์ (Conf) (R = Read, W = Write, X = Execute)
    เจ้าของไดเรกทอรี (owner)

    root
    กลุ่ม (group)
    webmaster
    สิทธิ์การใช้งาน
    - เจ้าของไดเรกทอรี (owner)
    RWX
    - กลุ่ม (group)
    RWX
    - อื่นๆ (other)
    -

  26. ไดเรกทอรีที่เก็บไฟล์เอกสารทั้งหมดของเว็บไซต์ (Document Root) (R = Read, W = Write, X = Execute)
    เจ้าของไดเรกทอรี (owner)

    root,webmaster
    กลุ่ม (group)
    webmaster,webdev
    สิทธิ์การใช้งาน
    - เจ้าของไดเรกทอรี (owner)
    RWX
    - กลุ่ม (group)
    RWX
    - อื่นๆ (other)
    RX

  27. ไดเรกทอรีที่เก็บสคริปต์ CGI (CGI-Bin) (R = Read, W = Write, X = Execute)
    เจ้าของไดเรกทอรี (owner)

    root,webmaster
    กลุ่ม (group)
    webmaster,webdev
    สิทธิ์การใช้งาน
    - เจ้าของไดเรกทอรี (owner)
    RWX
    - กลุ่ม (group)
    RWX
    - อื่นๆ (other)
    RX,X

  28. ไดเรกทอรีที่เก็บไฟล์ล็อก (R = Read, W = Write, X = Execute)
    เจ้าของไดเรกทอรี (owner)

    root
    กลุ่ม (group)
    webmaster
    สิทธิ์การใช้งาน
    - เจ้าของไดเรกทอรี (owner)
    RWX
    - กลุ่ม (group)
    R
    - อื่นๆ (other)
    -

  29. ไดเรกทอรีที่เก็บคำสั่งของโปรแกรม Apache (Bin) (R = Read, W = Write, X = Execute)
    เจ้าของไดเรกทอรี (owner)

    root
    กลุ่ม (group)
    webmaster
    สิทธิ์การใช้งาน
    - เจ้าของไดเรกทอรี (owner)
    RWX
    - กลุ่ม (group)
    RWX
    - อื่นๆ (other)
    -

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

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

    apache_pb.gif
    index.html.ca
    index.html.cz
    index.html.de
    index.html.dk
    index.html.ee
    index.html.el
    index.html.en
    index.html.es
    index.html.fr

    index.html.he.iso8859-8
    index.html.it
    index.html.ja.jis
    index.html.kr.iso-kr
    index.html.lu
    index.html.nl
    index.html.no
    index.html.po.iso-pl
    index.html.pt
    index.html.pt-br

    index.html.ru.cp-1251
    index.html.ru.cp866
    index.html.ru.iso-ru
    index.html.ru.koi8-r
    index.html.ru.ucs2
    index.html.ru.ucs4
    index.html.ru.utf8
    index.html.se
    index.html.zh.Big5
    manual/
    ผู้ดูแลเว็บเซิร์ฟเวอร์ควรลบไฟล์ทั้งหมดนี้ออกจากระบบ มิฉะนั้นผู้บุกรุกอาจนำไปใช้ในการตรวจหาเวอร์ชันของโปรแกรม Apache ที่ใช้งานในระบบได้

  32. ตรวจสอบความเปลี่ยนแปลงของไฟล์เอกสารบนเว็บไซต์
    หลังจากที่บุกรุกเข้ามายังเครื่องเว็บเซิร์ฟเวอร์ได้สำเร็จไม่ว่าด้วยวิธีการใดก็ตาม ผู้บุกรุกนิยมแก้ไขข้อมูลที่ใช้แสดงบนเว็บไซต์ โดยเฉพาะอย่างยิ่งไฟล์โฮมเพจ เพื่อแสดงว่าเว็บไซต์ดังกล่าวถูกบุกรุกแล้วหรือเพื่อทำลายชื่อเสียงของเว็บไซต์นั้นๆ ดังนั้น ผู้ดูแลเครื่องเว็บเซิร์ฟเวอร์ควรจะตรวจสอบไฟล์เอกสารบนเว็บไซต์อยู่ตลอดเวลาว่า มีไฟล์ใดถูกเปลี่ยนแปลงโดยผิดปกติหรือไม่ วิธีการที่ใช้คืออาจเขียนสคริปต์ขึ้นมาตรวจสอบเอง หรือใช้เครื่องมือตรวจสอบความเปลี่ยนแปลงของไฟล์ที่มีอยู่แล้ว เช่น Tripwire (ศึกษาเพิ่มเติมเกี่ยวกับ Tripwire ได้จากบทความ การติดตั้งระบบเตือนภัยโดยใช้ Tripwire for Linux) สิ่งที่ควรจะตรวจสอบประกอบด้วย
  33. นอกจากนั้น ผู้ดูแลระบบควรเก็บหลักฐานการเข้าใช้งานเครื่องไว้ตลอดเวลา เพื่อใช้ตรวจสอบที่มาของการบุกรุกหากพบว่ามีการเปลี่ยนแปลงเกิดขึ้นจริง

  34. ป้องกันมิให้หน้า Index ถูกแก้ไข
    ตามปกติแล้ว หากผู้ใช้เรียกดูเว็บไซต์ที่ไดเรกทอรีใดๆ ก็ตามในเครื่องโดยไม่ระบุว่าต้องการเปิดเว็บหน้าใด (ไฟล์ใด) โปรแกรม Apache จะค้นหาและแสดงหน้า Index แก่ผู้ใช้โดยอัตโนมัติ ซึ่งหน้า index ดังกล่าวนี้คือไฟล์หนึ่งภายในไดเรกทอรีนั้นที่มีชื่อตรงตามที่กำหนด เช่น ไฟล์ index.html จะเห็นได้ว่า ไฟล์ของหน้า index ถือเป็นไฟล์เอกสารบนเว็บที่สำคัญไฟล์หนึ่ง เนื่องจากเป็นไฟล์ดีฟอลต์ที่ใช้แสดงผลในทุกไดเรกทอรีและถูกนำไปใช้เป็นไฟล์โฮมเพจด้วย ดังนั้น หากผู้บุกรุกคนใดต้องการแก้ไขหน้าโฮมเพจของเว็บใด หรือที่เรียกว่าการ "deface" สิ่งหนึ่งที่ผู้บุกรุกคนนั้นจำเป็นต้องทราบคือ เว็บดังกล่าวใช้ชื่อไฟล์ของหน้า index ว่าอย่างไร เพื่อที่จะสร้างไฟล์ใหม่ไปวางแทนที่หน้า index เดิม ผู้ดูแลระบบสามารถป้องกันหน้า index มิให้ถูกแก้ไขได้โดย
  35. เปลี่ยนชื่อไฟล์หน้า Index จากค่าดีฟอลต์
    ไฟล์หน้า index ของแต่ละไดเรกทอรีถูกำหนดจาก directive ชื่อ DirectoryIndex ซึ่งค่าดีฟอลต์ถูกกำหนดให้ใช้ไฟล์ชื่อ "index.htm" ผู้ดูแลเครื่องเว็บเซิร์ฟเวอร์สามารถแก้ไขชื่อไฟล์ที่ต้องการให้เปิดนี้ได้ตามต้องการ ดังนี้

    <IfModule mod_dir.c>

    DirectoryIndex newname.html

    </IfModule>

  36. ซ่อนไฟล์หน้า Index มิให้ถูกเข้าถึงหรือเรียกใช้งานได้ตามปกติ
    เป็นการนำเอาเทคนิคการซ่อนไฟล์ที่แฮ็กเกอร์พวก BlackHat นิยมมาใช้ในการซ่อนไฟล์หน้า index เช่น การกำหนดให้ไฟล์หน้า index คือไฟล์ "newname.html " ("newname.html<space>") แทนการใช้ไฟล์ newname.html ตามปกติ พร้อมทั้งกำหนดค่าของ directive ชื่อ DirectoryIndex ให้เป็น "newname.htm " ดังนี้

    <IfModule mod_dir.c>

    DirectoryIndex "newname.html "

    </IfModule>

    ส่งผลให้ผู้ที่ละเมิดเข้ามาในเครื่องได้สำเร็จแต่ไม่ทราบว่าไฟล์หน้า index คือไฟล์ใด ไม่สามารถแทนที่ไฟล์หน้า index ได้ หรือต้องใช้เวลาในการค้นหาว่าไฟล์ดังกล่าวคือไฟล์ใด

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

    http://www.targethost.com/cgi-bin/phf?Qalias=x%0a/bin/cat%20/etc/passwd

    ในกรณีนี้ หากเครื่อง www.targerhost.com มีค่า configuration ที่ไม่เหมาะสม จะทำให้เกิดการเรียกใช้งานคำสั่ง cat เพื่อแสดงไฟล์ /etc/passwd ของเครื่องให้ผู้บุกรุกทราบ วิธีการป้องกันปัญหานี้ทำได้โดยการปรับแต่งการทำงานของเว็บเซิร์ฟเวอร์ให้ทำงานโดยอาศัยฟังก์ชัน chroot ของระบบยูนิกซ์ ซึ่งจะส่งผลให้ผู้ใช้งานเว็บไม่สามารถเข้าถึงไดเรกทอรีใดๆ ของระบบปฏิบัติการที่อยู่ภายนอกขอบเขตที่ CHROOT กำหนด แสดงขอบเขตการทำงานของ chroot ได้ตามรูปด้านล่าง สามารถศึกษาข้อมูลเพิ่มเติมได้จาก WWW Security FAQ: Running a Secure Server


    รูปที่ 3 แสดงขอบเขตที่สามารถเรียกใช้งานระบบเมื่อเรียกใช้ฟังก์ชัน chroot กับโปรแกรม Apache

  38. Secure Socket Layer (SSL)
    ปัจจุบันนี้ มีผู้นำเครื่องเว็บเซิร์ฟเวอร์ไปใช้ประโยชน์ในการทำธุรกรรมพาณิชย์อิเล็กทรอนิกส์กันอย่างแพร่หลาย องค์ประกอบสำคัญเบื้องต้นในการทำพาณิชย์อิเล็กทรอนิกส์คือเครื่องเว็บเซิร์ฟเวอร์จะต้องสามารถใช้ในการทำธุรกรรมใดๆ ได้อย่างปลอดภัย ซึ่งอาจทำได้โดยการใช้ Secure Socket Layer (SSL) ซึ่งซอฟต์แวร์ SSL ที่สามารถเลือกใช้งานร่วมกับโปรแกรม Apache ได้มีดังตารางด้านล่าง

    ซอฟต์แวร์
    ชนิด เว็บไซต์
    Apache-SSL Free Apache-SSL
    mod_ssl Free mod_ssl: The Apache Interface to OpenSSL
    Raven SSL module Commercial Raven SSL Module for Apache
    Stronghold Web Server Commercial Stronghold Reference Site
    ตารางที่ 7 แสดงตัวอย่างซอฟต์แวร์ SSL ที่สามารถทำงานร่วมกับโปรแกรม Apache

สรุป

จะเห็นได้ว่า World Wide Web (WWW) ถือเป็นสื่อกลางในการส่งข้อมูลข่าวสารที่ให้ประโยชน์แก่โลกอินเทอร์เน็ตเป็นอย่างมาก เว็บไซต์แต่ละแห่งมีลักษณะการใช้งานและข้อมูลที่นำเสนอแตกต่างกันออกไปตามความต้องการของเจ้าของเว็บไซต์ ในขณะเดียวกันมีคนกลุ่มหนึ่งที่พยายามโจมตีหรือทำลายเว็บไซต์ ดังนั้นหน้าที่หลักสำคัญของผู้ดูแลเว็บเซิร์ฟเวอร์ก็คือการสร้างความปลอดภัยให้กับเครื่องเซิร์ฟเวอร์ใดๆ ก็ตามที่ตนเองเกี่ยวข้อง

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

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


เอกสารอ้างอิง

[1] Welcome! - The Apache HTTP Server Project
    http://httpd.apache.org
[2] SANS Gold Standard Security Benchmark Training ~ CIS Apache Benchmark - LIVE!
    http://www.sans.org/Gold/apache.php
[3] Preventing Web Site Defacements: Don't Become Attrition's "Site of the Day"
    http://www.sans.org/rr/securitybasics/deface.php
[4] WWW Security FAQ
    http://www.w3.org/Security/Faq/



Home || เอกสารเผยแพร่ || Unix & Linux

ThaiCERT Disclaimer | Copyright © 2001 ThaiCERT(NECTEC). All rights reserved.