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

Read More »

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

Read More »

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

Read More »

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

Read More »

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

Read More »