Pages

10/12/2010

Hijacking password on website

พอดีช่วงนี้เพิ่งยุ่งกะเรื่องsslstripอยู่ แล้วก็วันนี้มาเจอเรื่องsurfjackอีก เลยเอามาเขียนบรรยายความคิดตัวเองซะหน่อย
ความจริงหลักการแค่ขโมยข้อมูลตอนเล่นเน็ต มันก็แค่ว่า ทำยังไงเราจะจับข้อมูลทุกอย่างที่web browserเราส่งไปหาserverได้

ถ้าเป็นแบบสมัยแรกๆที่เวลาส่งข้อมูลกันผ่านระบบเน็ตเวิร์ค ที่เราใช้วิธีการbroadcastข้อมูล แล้วให้ตัวที่มีที่อยู่ปลายทางรับไปก็คงจะไม่ยากลำบากนัก
เพราะทุกคนก็จะได้ข้อมูลอยู่แล้ว เพียงแต่ว่าโปรแกรมในฝั่งเราเลือกไม่รับเอง

แต่... เดี๋ยวนี้ ระบบการส่งแบบนั้นแทบจะหาไม่ค่อยได้แล้ว ประเด็นนึงก็คือเดี๋ยวนี้คนเลือกใช้switchแทนhub เพราะราคาswitchลดลงมามากแถมยังส่งข้อมูลได้เร็วกว่าด้วย
และข้อดีของการใช้switchอย่างนึงก็คือ ข้อมูลก็เลยวิ่งจากเครื่องclientไปหาrouterเลยโดยตรง ไม่มากระจายให้คนอื่นรับรู้อีกแล้ว

แต่... คนเราก็ไม่วาย สรรหาวิธีเช่น arpspoofing, dns poisoning,หรือจะปลอมเป็น wireless AP เพื่อมาปลอมตัวเป็นคนกลาง(Man-In-The-Middle)
โดยทำตัวเสมือนrouter/proxyเพื่อจะดักpacketต่างๆเอาไปได้อีก

แล้วดักๆไปเนี่ย... เอาข้อมูลอะไรไปได้บ้าง...?

ข้อมูลที่ดักจับได้ก็คือทุกๆอย่างที่ client ส่ง/รับ จาก server
โดยรวมถึงhtml,image,audio,videoทุกอย่าง ซึ่งถือว่าเป็นข้อมูลส่วนใหญ่ที่วิ่งในเน็ตเวิร์คเลย
แต่จะว่าไป พวกนี้เอามาใช้ประโยชน์อะไรไม่ได้ เพราะถ้าเราจะเอาข้อมูลพวกนี้จริงๆ
เราก็แค่เข้าไปในหน้าเวปนั้นด้วยตัวเองก็จบแล้ว (เว้นเสียแต่ว่าจะมีอะไรป้องกันไว้)

ดังนั้นแล้วจะได้อะไรล่ะ...?
สิ่งที่hackerต้องการจากข้อมูลส่วนนี้ก็คือ username, password ที่ผู้ใช้คนนั้นส่งไปให้ server เพื่อทำการลงชื่อเข้าใช้บริการ
เพราะเมื่อได้ข้อมูลตรงนี้แล้ว hacker ก็จะสามารถเข้าสู่ระบบเข้าไปทำอะไรอื่นๆต่อไปได้

แล้วpassword มีอยู่ในข้อมูลที่ๆเราดักจับรึเปล่า?... มี แต่ไม่เสมอไป...
ในกรณีส่วนมาก การที่ผู้ใช้ใส่username,password ในการเข้าสู่ระบบด้วยการใช้HTTP ข้อมูลลับเหล่านั้นจะถูกส่งไปหาserverตรงๆเลยไม่มีการเข้ารหัส
นั่นแปลว่า ถ้าเราดักจับข้อมูลนั้นได้ ก็เอามาเปิดอ่านได้ตรงๆเลย

แต่.. ถ้าทำแบบนั้นหมด ระบบอินเตอร์เน็ตก็จะไม่ปลอดภัยอะไรเลยสิ เพราะใครก็จะเห็นข้อมูลที่เราพิมพ์ได้หมด ไม่เว้นแม้แต่ รหัสบัตรเครดิต?
ก็เพราะว่ามีคนคำนึงถึงกรณีนี้ จึงเกิดวิธีการป้องกันขึ้นมาหลากหลายแบบ แต่เดี๋ยวจะเอามาพูดในนี้แค่สองอย่าง
- TLS/SSL : เป็นระบบการเข้ารหัสช่องทางการส่ง/รับข้อมูล ทุกๆข้อมูลที่รับส่งโดยผ่านช่องทางนี้จะถูกเข้ารหัส (พอเอาระบบการเข้ารหัสช่องสัญญาณนี้(TLS)มารวมกับการรับส่งข้อมูลกันบนเวป(HTTP) ก็เลยได้ชื่อใหม่ว่า HTTPS) ถึงแม้จะมีผู้ที่ดักจับได้ คนที่ดักจับก็ต้องไปถอดรหัสอีกที ไม่ใช่ว่าได้username,password,credit card no. ไปแบบง่ายๆ และวิธีถอดรหัสก็ไม่ใช่ว่าจะง่ายเลย
- cookie : เป็นระบบการจัดเก็บค่าไว้ในเครื่องของผู้ใช้งาน และตัวserverเท่านั้นจะสามารถดึงข้อมูลออกมาดูและเข้าใจได้
ระบบserverหลายๆที่ ที่มีการอนุญาตให้loginค้างไว้ได้ (คือloginเฉพาะครั้งแรกเท่านั้น ครั้งต่อๆไปไม่ต้อง) เพราะว่าตัวserverจะเชื่อใจว่า
ผู้ที่มีcookieนี้ คือผู้ที่ได้รับการอนุญาตให้เข้าได้อย่างถูกต้องแล้ว(จากการloginครั้งแรก) และจะเข้าได้ต่อๆไปโดยไม่ถามpasswordอีก จนกว่าcookieจะหมดอายุ


แล้วจะทำไงต่อ?
- TLS/SSL : เห็นว่าใช้ sslstrip แล้วเราจะสามารถดักจับข้อมูลระหว่างการทำhandshakeเพื่อสร้างsecure channelเลยได้ ดังนั้นจะทำให้เราก็สามารถที่จะแกะข้อมูลที่ถูกเข้ารหัสนั้นออกมาอ่านได้อย่างง่ายๆ
ซึ่งด้านได้ username/password มาแล้วก็เอาไปใช้loginเองได้เลย
- cookie : ก็ดักจับcookieธรรมดาก็คงได้แหละ เพราะช่องโหว่ก็คือ ทุกๆครั้งที่เรียกเข้าหน้าเวปนั้น cookie จะถูกส่งไปด้วยในpacket HTTPเลย ดังนั้นเราดักจับ HTTP packet ก็จบแล้ว
HTTPไม่มีการเข้ารหัส แล้วพอเปิดอ่านได้ ก็ได้cookieมาเอาไปใช้ต่อได้เลย ด้วยการแก้packetที่hackerส่งไปserver ด้วยการเติมcookieที่เพิ่งได้รับมาเข้าไปในHTTP packetที่ส่งออกไป

ปัญหาต่อไปน่าจะเป็นว่า... แล้วเมื่อไหร่ผู้ใช้จะมาเปิดเวปที่เราต้องการแล้วเราจะได้ดักจับได้ล่ะ?
วิธีหนึ่งที่ surfjack ใช้ ก็การสร้างHTTP packet ตอบกลับแบบปลอมๆส่งไปให้ผู้ใช้ บอกว่าเวปที่คุณกำลังจะเข้าเนี่ยถูกย้ายไปที่อื่นแล้วอย่างถาวร (HTTP response “301 Moved Permanently”)
และเมื่อweb browserส่วนใหญ่ได้เห็นerror 301แบบนี้ ก็จะทำการredirectไปยังหน้าที่ระบุไว้ในpacketปลอมๆนั้นเองทันที โดยไม่บอกผู้ใช้ด้วย
ถ้าhackerสามารถ redirectให้ผู้ใช้ไปเข้าในหน้าที่ต้องการได้แล้ว ต่อไปก็จะดักจับ password/cookie, phishing, หรือทำอะไรต่อก็ได้แล้ว

สารพัดวิธี Hijack Cookies : http://en.wikipedia.org/wiki/HTTP_cookie
Surf Jacking ข้อมูลและคำอธิบาย : http://resources.enablesecurity.com/resources/Surf%20Jacking.pdf
Surf Jacking example : http://www.youtube.com/watch?v=rXVQo7AxtZs
Having fun with SSL Strip: http://www.youtube.com/watch?v=PmtkJKHFX5Q
Side Jacking: http://www.youtube.com/watch?v=sIP7ZtDgIpI

No comments:

Post a Comment