หาอะไรไม่เจอกดเลย

วันเสาร์ที่ 26 มีนาคม พ.ศ. 2554

Hacking Web Application


สวัดดีตอนเย็นๆครับ สำหรับบทความนี้ผมก็อยากนำเสนอ บทความที่น่าสนใจสำหรับคนทำเวปทั้งหลาย เอาไว้ป้องกันสำหรับพวกที่ชอบ เจาะๆ ทั้งหลาย เข้าเรื่องกันเลย วันนี้เราก็จะมาสอนเกียวกับการ Hacking Web Application มาเริ่มกันเลยดีกว่า 

พูดถึง "Web" ในวันนี้ ไม่มีใครไม่รู้จัก "World Wide Web" หรือ "www" เพราะการค้นหาข้อมูลในการทำงานโดยเฉพาะคน IT นั้นจะปฏิเสธไม่ได้เลยว่าจำเป็นต้อง "เข้าWeb" เป็นประจำแทบทุกวัน ยกตัวอย่าง ตัวผมเองนั้นเข้า Web ของ "google.com" จนเรียกได้ว่าวันไหนถ้า Web google เข้าไม่ได้ ผมคงต้องรู้สึกหงุดหงิดและมีผลกับการทำงานพอสมควรเลยทีเดียว 

สำหรับองค์กรในยุค ICT นี้ทุกบริษัทล้วนมี Web Site เป็นของตนเองแทบทั้งสิ้น ส่วนใหญ่เพื่อแสดงข้อมูลที่เปิดเผยได้ต่อสาธารณะ อันได้แก่ ข้อมูลผลิตภัณฑ์สินค้า แผนที่ เบอร์โทรศัพท์ ตลอดจนกิจกรรมต่างๆ ที่ต้องการเผยแพร่ซึ่งองค์กรจำเป็นต้องใช้ "Web Server" ในการจัดทำ "Web Site" โดยปกติทั่วไปแล้ว ข้อมูลจาก www.netcraft.com ได้รายงานว่า web site ทั่วโลกมีถึงกว่า 40 ล้าน web site ซึ่ง 66.52 % ใช้ Apache (Open Source) เป็น web server และ 24.64 % ใช้ IIS ของ Microsoft เป็น web server http://news.netcraft.com/archives/2003/06/12/june_2003_web_server_survey.html 
จาก ข้อมูลใน web site นี้ Hacker สามารถค้นประวัติของ web site เราได้ว่าเคยใช้ web server อะไร และมีการปรับปรุงเปลี่ยนแปลงเช่น Upgrade version หรือลง Patch อะไรบ้าง โดยสามารถ search จาก www.netcraft.com ได้โดยใส่ชื่อ web site ที่ต้องการค้นข้อมูลลงไป จะได้ผลลัพธ์ในรูปที่ 1  
รูปที่1 : ตัวอย่างการค้นหาประวัติของเว็บไซต์ใน www.netcraft.com
หาก Hacker ไม่สามารถเจาะผ่าน Port 80 (http) หรือ port 443 (https) โดยใช้ Exploit ตรงๆ ได้ hacker ก็จะใช้เทคนิคอื่นในการเจาะ web site ซึ่งได้แก่เทคนิค Cross-Site Scripting (XSS), SQL Injection, Parameter Tampering, Hidden Manipulation, Plain Text Attack หรือ Cookie Poisoning เช่น Parameter Tampering ทำให้เกิด error ขึ้นบนหน้าจอของ Web Browser ในบางที่เราสามารถเห็นถึง Source Code ที่หลุดออกมาจาก error message ที่เกิดขึ้น ทำให้พาไปถึงการ Hack ระบบได้ในที่สุด  
เทคนิคการเจาะ Web Application นั้น มีอยู่หลายวิธี ส่วนใหญ่แล้ว Hacker จะรู้ว่าเราใช้ Platform ของ Microsoft (Web Server คือ IIS) หรือของค่าย UNIX/ Linux (Web Server คือ Apache httpd) ถ้าหาก Hacker เจาะตัว Web Server ไม่ได้ Hacker จะหาวิธีอื่นในการเจาะ โดยปกติแล้วก็จะดูไปถึงภาษา Script ที่เรานำมาเขียน Code ใช้งาน ซึ่ง Script เหล่านี้ล้วนมีช่องโหว่แทบทั้งสิ้นไม่ว่าจะเป็น ASP, PHP หรือ JSP เราจึงจำเป็นต้องมีการตรวจสอบ Source Code เสียก่อนที่จะนำมาใช้งาน ซึ่งต้องใช้เวลาพอสมควร และ เราควรลองใส่ Parameter แปลกๆ ลงในช่อง URL เพื่อลองดูว่าหากมีการเปลี่ยนแปลงค่า Parameter จะทำให้ระบบมีปัญหาหรือไม่ (Parameter Tampering) 
เทคนิคที่ Hacker นิยมก็คือการทำ SQL Injection เนื่องจากเมื่อเวลาเราต้องการที่จะ Login (Authentication) เข้าสู่ web site ทาง Web Server จะถาม "Username" และ "Password" ของเรา เมื่อเราใส่ Username และ password แล้ว Browser ก็จะนำข้อมูลไป check กับฐานข้อมูลในลักษณะ select * from table where user_name = "username" จากการที่เราใช้ "where clause" ในการเขียน web application เพื่อการค้นข้อมูลของ user ซึ่งในการเขียนโปรแกรมนี้จะดูง่าย แต่ในทางมุมมองของ Hacker นั้น Hacker จะใช้ วิธีใส่ SQL command แปลกๆ  เพิ่มเติมเข้ามาใน SQL Query เพื่อดึงข้อมูลที่ Hacker ต้องการออกมาจาก Web Site ของเรา 
Hacker สามารถใช้โปรแกรมประเภท Sniffer ในการตรวจจับข้อมูล User name และ password เช่นโปรแกรม Cain จาก Web Site: www.oxid.it มาดักจับ password เวลาที่ user ทำการ log on เข้าสู่ Web Application ถ้า Web Server ไม่ได้ใช้ SSL (Secure Socket Layer) กับ Web Server ข้อมูลที่ใช้ http ซึ่งเป็น Plain text ที่ไม่ได้รับการเข้ารหัสก็จะถูกโปรแกรม Cain ตรวจจับได้อย่างง่ายดาย (ดูรูปที่ 2) 
โปรแกรม Cain ซึ่งเป็นโปรแกรมประเภท Sniffer
ที่สามารถตรวจจับข้อมูลยูสเซอร์เนมและพาสส์เวิร์ดได้
ดังนั้น เพื่อเป็นการป้องกันไม่ให้ Hacker เข้ามา "sniff" แอบดู username และ password ของเรา เราควรทำการ "Encrypt" หรือ "เข้ารหัส" ข้อมูลโดยใช้ SSL กับ Web Server ให้วิ่งเป็น "https:" แทนที่จะวิ่งเป็น "http:" ธรรมดา เป็นต้น 

การใช้งาน SSL Protocol สามารถป้องกันข้อมูลไม่ให้ถูกแอบ sniff ได้ในระดับหนึ่งแต่ไม่สามารถป้องกันการ Hack แบบที่ใช้ Exploit ยิงเข้ามาโดยตรง เนื่องจากระบบของเรามี "Known Vulnerabilities" ดังนั้น เราควรทำการ "Patch" หรือ "Fix" Web Server ของเราอย่างสม่ำเสมอด้วยนะครับ  
 
การ Hack Web Application ยังมีเทคนิคอื่นๆ อีกมากมาย ตลอดจนวิธีการป้องกันไม่ให้โดน Hack นั้น ผมขอกล่าวถึงในฉบับหน้าแล้วกันนะครับ
Web Application ในทุกวันนี้โดยส่วนใหญ่ เวลาผู้ใช้ต้องการจะ Log on หรือ Sign on เข้าสู่ระบบเช่น ระบบ Web Mail หรือ ระบบ Intranet ของบริษัท ผู้พัฒนาระบบมักจะใช้เพียงโปรโตคอล HTTP ( TCP Port 80) ซึ่งเป็นข้อมูลที่ไม่ได้รับการเข้ารหัสเพื่อป้องกัน Hacker มาแอบดูข้อมูล (information sniffing) ในทางเทคนิค เราเรียกข้อมูลเหล่านี้ว่าเป็นข้อมูลแบบ "Plain Text" เช่น HTTP, FTP, Telnet, POP3 และ SMTP สังเกตได้ว่าข้อมูลที่เป็น Plain Text นั้น Hacker สามารถดักแอบดูได้ง่ายๆ ดังนั้น ผู้พัฒนา Web Application ที่ทำธุรกิจในลักษณะ e-commerce หรือ Internet Banking จึงหันมาใช้โปรโตคอล ที่มีการเข้ารหัสให้กับ Web Application ได้แก่ โปรโตคอล SSL (Secure Socket Layer) พัฒนาและคิดค้นโดยบริษัท Netscape Communication แต่ภายหลังกลายมาเป็นมาตรฐานในโลก e-commerce โดย Web Serverชื่อดังทั้งสองค่าย ได้แก่ Apache จาก httpd.apache.org และ IIS จาก www.microsoft.com ล้วนนำ SSL มาใช้กับ Web Server ของตนเอง โดยในโลก Open source นั้นมีการใช้ทั้ง mod_SSL (http://www.modssl.org) และ OpenSSL (http://www.openssl.org) ในการเข้ารหัสข้อมูล http ให้กลายเป็น https ผ่าน port 443 แทนที่จะเป็น port 80 ปกติ 
ยกตัวอย่าง Internet Banking ในประเทศไทยนั้น ทุกธนาคารใช้ SSL ในการป้องกันข้อมูล Username และ Password ของลูกค้าธนาคาร เวลาลูกค้าต้องการทำ Transaction ผ่านทาง Internet เช่นขอดูยอดคงเหลือ, ขอดู statement หรือ โอนเงินไปยังบุคคลอื่นที่ผูกบัญชีอยู่กับตนเอง เป็นต้น  
ปัญหาก็คือ ตัว SSL Module ที่ถูกนำมาใช้ทำงานร่วมกับ Web Server เช่น Apache Web Server นั้นมีช่องโหว่ (Vulnerability) ที่ Hacker สามารถยิงโปรแกรมจำพวก Exploit เข้ามาโจมตีได้โดย Hacker จะสามารถเข้ายึด (Compromised) เครื่องที่ขาดการดูแล ไม่ได้มีการ update หรือ patch ตัว SSL Module ให้เรียบร้อย โดย Hacker สามารถได้สิทธิเป็น "root" ของระบบ UNIX ที่เราใช้งานอยู่ไม่ว่าจะเป็น SUN Solaris, AIX, HP-UX หรือ LINUX จากนั้น Hacker สามารถเข้ามาฝัง Trojan Module ไว้เพื่อครั้งหน้าจะได้สามารถเข้าถึง Web Server เราได้อีกไม่ว่าเราจะเปลี่ยน Username และ Password ไปสักกี่ครั้งก็ตาม เพราะ Trojan Module เช่นพวก Rootkit ไม่จำเป็นต้องใช้ Username และ password ปกติที่เก็บอยู่ใน file /etc/shadow แต่มันจะใช้ username และ password ที่อยู่ในตัว Trojan Module เอง

ทางแก้ปัญหาก็คือ ต้องหมั่นตรวจสอบว่า SSL Modules ที่เราใช้อยู่ไม่ว่าจะเป็น OpenSSL หรือ mod_SSL มีช่องโหว่ที่เรายังไม่ได้ Patch หรือไม่ ถ้ามีก็ควรรีบ Patch เสียตั้งแต่เนิ่นๆ ก่อน Hacker จะเข้าสู่ระบบเราแล้วฝัง Trojan Module เราจะแก้ไขและตรวจสอบได้ลำบากมาก

การเจาะระบบที่ใช้ SSL นั้นไม่ได้มีเพียงวิธีที่กล่าวมาแล้วแค่นั้น แต่ Hacker สามารถดักจับ Session ที่เข้ารหัสด้วย SSL โดยการใช้โปรแกรมประเภท Packet Sniffer ที่ถูกออกแบบมาพิเศษ ซึ่งโปรแกรมประเภทนี้ สามารถดักจับข้อมูลในสภาวะแวดล้อมที่ใช้ Switching ได้ด้วย ปกติแล้ว Sniffer จะทำงานกับสภาวะแวดล้อมที่ใช้ HUBเท่านั้น แต่โปรแกรม Hack รุ่นใหม่ๆ สามารถ Sniff หรือดักดูข้อมูลในสภาวะแวดล้อมที่ใช้ Switching ได้อย่างสบายๆ โดยใช้เทคนิคเช่น ARP Spoofing หรือเทคนิคใหม่ล่าสุด "Port Stealing" นอกจากนี้ session ที่ใช้ SSL หรือ SSH (Secure Shell) ที่มีการเข้ารหัสข้อมูลด้วย KEY อันซับซ้อน โปรแกรม Hack เหล่านี้ก็สามารถดักจับข้อมูลระหว่างทาง ในลักษณะที่เรียกว่า MIM Attack (Man-in-the-Middle Attack) และมีการดักจับ KEY ที่ทั้ง 2 ฝ่าย (Web Browser และ Web Server) กำลังแลกเปลี่ยนกันเพื่อต่อเชื่อม session SSL หรือ SSH เมื่อ Hacker ดักจับ KEY ได้ Hacker ก็จะใช้ KEY ในการถอดรหัสข้อมูลที่ถูกเข้ารหัส (Cipher Text) ออกมาเป็น Plain Text ซึ่งสามารถดูข้อมูลได้อย่างง่ายดาย 

บางคนอาจคิดว่าอย่างนี้ Internet Banking ก็ไม่ปลอดภัยแล้วสิ? อย่าเพิ่งเครียดนะครับ เพราะ Hacker ไม่สามารถดักจับข้อมูลเราได้ง่ายๆ Hacker ต้องดักอยู่ระหว่างทางที่ข้อมูลส่งกันไปมาระหว่าง Web Browser และ Web Server ดังนั้น ถ้า Hacker ไม่อยู่ในตำแหน่งที่เหมาะสมก็ไม่สามารถทำได้ง่ายๆ จุดที่เราควรระวังก็คือบริเวณ DMZ (Demilitarized Zone) ของเราเอง อาจมีเครื่องอื่นที่ถูก Hacker ยึดไปเรียบร้อยแล้ว และกำลัง Run โปรแกรมประเภท SSL/SSH Password Sniffer อยู่ หรือ บริเวณจุดเชื่อมต่อที่ ISP ก็เป็นไปได้ และท้ายสุดคือ วง LAN ที่เรากำลังใช้งาน Web Browser อยู่ ก็อาจมีมือดีมาดักจับ Username และ Password ตลอดจน เลขที่บัญชีและเลขที่บัตรเครดิตต่างๆ ของเราได้โดยใช้เทคนิค MIM Attack 

ทางแก้ปัญหาคือ ในวง DMZ ที่เราวาง Web Server อยู่ ควรมีการ Set "Port Security" ที่ตัวอุปกรณ์ Switching เพื่อป้องกัน ARP Spoofing และ ARP Poisoning และเราต้องมีโปรแกรมตรวจสอบประเภท Intrusion Detection System (IDS) เพื่อดักดูว่ามีอะไรผิดปกติและสิ่งแปลกปลอมใน Network ของเราหรือไม่ ถ้าเราใช้ SSH ก็ควร Update เป็น version 2 เพราะ SSH Version 1 นั้น Hacker สามารถดักข้อมูลและถอดรหัสได้   
 


 
  
 



ไม่มีความคิดเห็น:

แสดงความคิดเห็น