SSLstrip เป็น 1 ในเทคนิคที่นิยมใช้กันในการทำ Man-in-the-middle เพื่อดักข้อมูล ซึ่งถูกคิดค้นโดย Moxie Marlinspike (คุณพี่ Deadlock นั่นเอง) และได้ถูกนำมา present ในงาน Black Hat DC 2009
ทำไมต้อง SSLstrip
โดยปกติการทำ Man-in-the-middle กับ Encrypted Traffic (HTTPS) นั้น Attacker จะติดปัญหาคือไม่สามารถ Decrypt Data ได้ ทำให้ไม่สามารถอ่านข้อมูลได้นั่นเอง หากต้องการจะอ่านข้อมูลก็มักจะใช้วิธีการทำ SSLsniff ซึ่งวิธีจะเป็นการ Decrypt HTTPS Traffic ระหว่างทางโดยการสร้าง SSL Tunnel 2 อัน เพื่อคุยระหว่างกับ User กับ Attacker และระหว่าง Attacker กับ Server
ซึ่งวิธีการทำ SSLsniff นี้มักจะเป็นปัญหาเนื่องจาก Certificate ที่ใช้ระหว่างเครื่อง User และ Attacker จะไม่ถูก Trust โดย Web Browser ทำให้ขึ้นหน้า Certificate Error ที่ฝั่ง User (Client) ดังนั้น User ที่มี Awareness ดีหน่อยก็อาจจะรอดพ้นจากวิธีการทำ SSLsniff ได้ [รายละเอียดการ Trust กันของ PKI อ่านได้จาก HTTPS Insecurity Part 1] ทำให้โอกาสประสบความสำเร็จของ Attacker นั้นลดลง แต่หากใช้ SSLstrip ปัญหา Certificate Error จะหมดไปทันที
SSLstrip ทำงานอย่างไร
SSLstrip ทำงานบนสมมติฐานว่าโดยปกติ User ไม่ได้เข้า Website ที่เป็น HTTPS โดยตรงแต่มักจะถูก Redirect ให้เข้า ตัวอย่างเช่น เราพิมพ์ URL http://www.twitter.com จะโดน Server จะทำการ Redirect ให้เราไปที่ https://www.twitter.com แทน
Trick ของ SSLstrip คือการโจมตีไปที่ HTTP (ข้อมูลจะไม่ถูกเข้ารหัส) แทนที่จะโจมตี HTTPS ซึ่งทำโดยวิธีการใช้ Man-in-the-middle บวกกับการบังคับไม่ให้ User คุยกับ Server ผ่าน HTTPS แต่จะเป็นการคุยโดย
- เครื่อง Attacker คุย HTTPS กับ Server
- เครื่อง User (Client) คุย HTTP กับ Attacker
ขั้นตอนการใช้งาน SSLstrip
ขั้นตอนที่ 1 (เหมือนกับการทำ Man-in-the-middle ทั่วไป)
- ตั้ง Forward Packet
- ทำ ARP Spoofing เพื่อ Redirect ข้อมูลจากเครื่อง User มาที่ Attacker
ขั้นตอนที่ 2
- ทำ Routing traffic เพื่อให้ข้อมูลวิ่งเข้าที่ port ของ SSLStrip ที่เปิดไว้ ตัวอย่างบนเวปทั่วไปจะใช้คำสั่ง
“iptables -t nat -A PREROUTING -p tcp –destination-port 80 -j REDIRECT –to-port <listenPort>” - Run SSLStrip
แค่เพียงเท่านี้ Attacker จะสามารถดัก Traffic ของ User ได้ทั้งหมดทันที
วิธีการป้องกัน SSLstrip
- Implement HTTP Strict Transport Security (HSTS) ที่ฝั่ง Server ซึ่งเป็นวิธีการบังคับให้ Web Browser คุยผ่าน HTTPS เท่านั้น แต่การทำด้วยเทคนิคนี้จะยากมากเพราะว่า Developer แต่ละ Web จะต้องมีความรู้ความเข้าใจในการทำให้ Web ตัวเองปลอดภัย
- User จะต้องมี Awareness มากขึ้น
เอ๊ะ!!
อ่านถึงตรงนี้หลายๆคนคงอาจสงสัยว่า Mobile Application ที่นิยมใช้ในตลาดบ้านเราที่เรียกว่า SSLSTRIPguard นั้นทาง Incognito Lab ไม่รู้จักเหรอ เพราะ Application นี้มักมีการพูดถึงในงาน Security Conference ของเมืองไทยเป็นประจำ แม้ว่าจะผ่านมาหลายปีแล้วก็ตาม (จะไม่ขอพูดถึงว่า Security Conference นั้นชื่ออะไรและจัดโดยบริษัทไหนนะครับ แต่เชื่อว่าทุกท่านคงทราบดี ^_^)
SSLSTRIPguard เป็น Application บน Smart Phone ที่ “Claim” ว่าสามารถช่วยให้สามารถทราบได้ว่าเรากำลังถูกโจมตี SSLstrip อยู่หรือไม่ ซึ่งจากการลองใช้แล้วพบประเด็นที่น่าสนใจพอสมควรครับ
ประเด็นที่ 1: Marketing Strategy ???
SSLStripGuard นี้ทำหน้าที่แค่เรียก Web page อยู่ 1 URL หลักๆนั่นคือ “
http://guarded-wave-5813.herokuapp.com/StripGuard/acis2.html
” ซึ่งจากการลองใช้พบว่าสามารถทำงานได้บนอุปกรณ์อื่นๆ ไม่ว่าจะเป็น PC หรือ Laptop
แต่ Application นี้กลับถูก Promote ว่าเป็น Smart Phone Application ซึ่งแน่นอนคงหนีไม่พ้นเรื่องการทำ Marketing แหละ เพราะอย่างน้อยการทำ Mobile Application ก็ช่วยสร้างภาพลักษณ์ได้ดี และสามารถใส่โฆษณาต่างๆเข้าไปได้ด้วย แต่เพราะการทำ Marketing แบบนี้เลยทำให้สังคมไม่ได้รับประโยชน์อย่างเต็มที่
ทาง Incognito Lab เราไม่อยากให้วงการ Security บ้านเราทำเพื่อผลประโยชน์อย่างเดียวครับ แต่เราอยากทำให้วงการ Security ในเมืองไทยนั้นสนุกและได้ประโยชน์ให้สมกับวลีเด็ดของ Paul Asadoorian และ John Strand ที่ว่า “Bring Sexy Back” ให้สมกับ mission ของเรา “We secure the nation”
ประเด็นที่ 2: Reliability ???
Result ของ SSLSTRIPguard นั้นน่าเชื่อถือแค่ไหน จะเป็นอย่างไรหาก SSLSTRIPGuard บอกว่า User ไม่ได้โดน SSLstrip แต่ที่จริงแล้วกำลังโดนอยู่??
การทำงานของ SSLSTRIPguard นั้นคือการตรวจสอบว่า Traffic ของ HTTPS request ที่เรียกไปที่ guarded-wave-5813.herokuapp.com ถูก Strip ออกหรือไม่ ซึ่งหากมีการทำ Routing Traffic ของ guarded-wave-5813.herokuapp.com เข้าไปที่ port ของ SSLstrip (ดูขั้นตอนที่ 2 ในการทำ SSLstrip ด้านบน) ก็จะถูกตรวจสอบได้ทันที หากเป็น Attacker ทั่วๆไปมักจะ copy&paste command ในการทำ SSLstrip ตาม Website ต่างๆบน Internet ซึ่งจะใช้คำสั่ง “iptables -t nat -A PREROUTING -p tcp –destination-port 80 -j REDIRECT –to-port <listenPort>” เพื่อ Route ทุก Traffic ที่เป็น HTTP เข้าไปที่ port ของ SSLStrip ซึ่งแน่นอนว่า SSLSTRIPguard จะสามารถตรวจสอบได้
ดังนั้น
การ Bypass SSLSTRIPguard นั้นทำได้ง่ายมาก เพียงแค่ไม่ต้อง Route Traffic ของ guarded-wave-5813.herokuapp.com เข้า SSLstrip ก็พอแล้ว
ในขั้นตอนที่ 2 ก่อนที่จะ Routing ทุก Traffic ไปที่ SSLstrip ใช้คำสั่ง
“iptables -t nat -A PREROUTING -p tcp -d guarded-wave-5813.herokuapp.com –destination-port 80 -j REDIRECT –to-port <non SSLstrip port>”
เพื่อ Route Traffic ของ SSLSTRIPguard ไปที่ port อื่นที่ไม่ใช่ของ SSLSTRIP
จากนั้นเมื่อลองเข้าใช้งาน SSLSTRIPguard ผ่าน ”
http://guarded-wave-5813.herokuapp.com/StripGuard/acis2.html
” จะพบว่าเราไม่ได้ถูก Strip อยู่ แต่หากลองเข้า http://www.twitter.com จะพบว่า Twitter ก็ไม่ได้ถูก Redirect ไปที่ https://www.twitter.com และ Traffic ทั้งหมดจะถูก Capture ไว้โดย Attacker
ปล. หวังว่าทุกคนที่ได้อ่านบทความนี้จะมี Awareness เพิ่มขึ้นนะครับ เราควรจะป้องกันที่ตัวเราเองเป็นลำดับแรก ไม่ใช่ไปหวังพึ่ง Tool ต่างๆอย่างเดียว
Ref:
http://www.blackhat.com/presentations/bh-dc-09/Marlinspike/BlackHat-DC-09-Marlinspike-Defeating-SSL.pdf





























