Defeating SSL with SSLStrip

Forum မှာ post လဲမရေးတာကြာပြီ။ မနေ့ကမှ ကို Luna က HTTP Request Intercept လုပ်တာလေးရေးပြီးမှ idea ရလာလို့ပါ။
HTTP Request ကို intercept လုပ်တယ်ဆိုတာ plain text ဖြစ်နေလို့ပါဒီတော့မနေ့ကအကိုရေးသလိုပဲ intercept လုပ်ပြီး value တွေပြင်နိုင်တယ်ပေါ့။ ဒီအတွက်ကြောင့်နောက်ပိုင်းမှာ HTTP with SSL Encryption, အတိုခေါက် HTTPS ကိုသုံးလာကြပါတယ်။ ဒါပေမယ့် SSL ကြီးသုံးလို့ secure ဖြစ်သွားပြီလားဆိုတော့ ဖြစ်တော့ဖြစ်တယ်ဒါပေမယ့်သူ့လဲ break လုပ်လို့ရနိုင်ပါသေးတယ်။ ဘာ technique လဲဆို SSLStrip ပေါ့။
SSLStrip ဆိုတာကြာပြီလားဆိုရင်တော့တော်တော်ကိုကြာခဲ့ပါပြီ။ ဘယ်တုံးကလဲဆို 2009 Black Hat Conference မှာ present လုပ်ခဲ့တာပေါ့။ သို့သော်အခုထိလဲဒီ method ကအသုံးတည့်ပါသေးတယ်။ SSLStrip အကြောင်းပြောခင် SSL အကြောင်းကိုအရင်ပြောပါမယ်။

How SSL works?

အရင်ဆုံး browser ကနေ server ကို request လှမ်းပို့တယ် နောက် server ကနေပြီးတော့ SSL certificate ကို reply ပြန်ပေးတယ်။ SSL cetificate က key pairs architecture ကိုသုံးတယ်ပြောရရင် private key and public key ဆိုပြီး၂ခုရှိမယ်။ private key သည် data decrypt ဖို့ဖြစ်ပြီး public key က encrypt လုပ်ဖို့အတွက်ဖြစ်တယ်။
ပြီးတော့ browser ကနေရလာတဲ့ certificate က validate ဖြစ်မဖြစ်စစ်တယ် ဖြစ်တယ်ဆိုရင် server ကို reply ပြန်တယ်။ Server က reply ကိုလဲရကော acknowledge လုပ်တာကို SSL Encrypted session နဲ့ပြန်ပို့တယ်။ ဒီနောက်ပိုင်း transmission တွေသည်လဲ encrypted session ပေါ်ကနေပဲသွားတော့တယ်ပေါ့။

(TCP/IP အကြောင်းကိုနားမလည်ရင်တော့ပေါ်ကပြောတာကိုရှင်းမှာမဟုတ်ပါဘူး ဒီတော့ TCP/IP ဘယ်လိုအလုပ်လုပ်တယ်ဆိုတာကိုသွားဖတ်ဖို့အကြံပေးပါတယ်။ ကျွန်တော်ကတော့အဲ့တာပါထပ်ရှင်းရင်လိုရင်းရောက်မှာမဟုတ်တော့လို့မရှင်းတော့ပါဘူး။)

How SSLStrip works?

SSLStrip က SSL Encryption ကို break လုပ်တာမဟုတ်ပါဘူး။ အဲ့တာကိုတော့မှတ်ထားပေးပါ။ သူက client and server ကြားက connection မှာ SSL Encryption မဖြစ်ပေါ်အောင်လုပ်ပြီး attacker machine ကနေတဆင့် traffic ကိုသွားခိုင်းတာပါ။ ပြောရမယ်ဆို MITM (Man in the Middle Attack) သဘောတရားလိုပါပဲ။ Attacker machine က proxy အဖြစ်အလုပ်လုပ်နေမယ်၊ client ကလာတဲ့ traffic တွေသည် proxy ကိုဖြတ်ပြီးမှ server စီရောက်မယ်နောက် server ကပြန်လာတဲ့ traffic သည်လဲ proxy ကိုဖြတ်ပြီးမှ client စီပြန်ရောက်မယ်။

Img 1

ဥပမာ Client (A) က Server (C) ကို access လှမ်းလုပ်တယ်ဆို Attacker (B) ကနေတဆင့်သွားမယ်အဲ့မှာ Attacker က Client အစား Server ကို request ပို့ပေးမယ်ပေါ့။ ဒီမှာဆို SSL Encryption ကဖြစ်သွားလာဆိုဖြစ်တယ်ဒါပေမယ့် Client & Server ကြားမှမဟုတ်ဘူး။ Attacker & Server ကြားမှာ။ ဆိုတော့ Server ဘက်ကကြည့်ရင် သူနဲ့ client က SSL ပေါ်မှာသွားနေတယ်ထင်တယ်ပေါ့။ တကယ်တော့ Server က reply လာသည့် data တွေသည် attacker ဆိုကိုရောက်မယ် attacker က decrypt လုပ်ပြီး intercept လုပ်မယ်နောက်မှ client ဘက်ကို unsecure HTTP connection နဲ့ပြန်ပို့တယ်။ ဒီတော့ client ကနေနောက်ပိုင်း server ကို request ပို့ရင်လဲအဲ့ဒီ unsecure HTTP connection ကနေပဲသွားတယ်အဲ့မှာ attacker က intercept လုပ်ပြီးဖတ်တယ်နောက် server ကို request ပို့ပေးတယ်။ Server က encrypted (SSL) နဲ့ reply ပြန်ရင် attacker က decrypt လုပ်ပြီးဖတ်တယ်နောက် client ကို unsecure HTTP နဲ့ပြန်ပို့တယ်။ သဘောတရားကတော့ဒါပါပဲ။ နောက်ဒီလိုလုပ်လို့ client ဘက်မှာ SSL certificate error တက်လာသလားဆိုရင်လဲမတက်ပါဘူး။

How to perform SSLStrip Attack

SSLStrip attack လုပ်ချင် Client စက်မှာကိုယ့် proxy ကြီးသွား configure လုပ်ရင်လုပ်ထား။ ဒါကရုပ်ပေါက်လွန်းအားတော့ကြီးတယ်။
မဟုတ်ရင် ARP Poisoning လုပ်။ ဒါမှမဟုတ်ကိုယ့်ဘာသာ wifi လွင့်ပြီးကိုယ့် connection ကနေသုံးခိုင်း။ (Wifi jamming နဲ့တောင်လုပ်လို့ရတယ်) အကယ်လို့စမ်းချင်ရင် Easy-creds ဆိုတဲ့ shell script လေးနဲ့စမ်းလို့ရပါတယ်။

#စာကြွင်း

HSTS (HTTP Strict Transport Security) က SSLStrip ကို prevent လုပ်နိုင်တယ်ဆိုလိုကြပေမယ့်တကယ်တမ်းက HSTS ကို bypass လုပ်နိုင်တဲ့နည်းတွေရှိပါတယ်။ ပြောရမယ်ဆို Server က client ကို HSTS header ပို့တဲ့အချိန်မှာ attacker ကနေလှမ်းဖမ်းပြီး HSTS service ကို break လုပ်လို့ရပါတယ်။ စိတ်ဝင်စားရင်တော့ HSTS အကြောင်းလဲကိုယ့်ဘာသာ google ကြည့်ကြပေါ့။