ثغرات الـ ! Cross Site Request Forgery
أنا كمحمد بسمى الثغره دى “أنا مش عارفنى” بجد، لأن اليوزر بيعمل حاجه هوا نفسه مش عايز يعملها، ولو جيت واجهته بعدين وقولتله انت عملت كدا هيقولك لا، وبالتالى هوا معملش حاجه فى الظاهر، بس فى الواقع هوا قام بيها، مبدأيا علشان نبقى متفقين، مفيش مبرمج مبيقعش فى الثغرات اللى من النوع دا لأنها ببساطه دايما بتتنسى، ومحدش بيحطها فى اعتباره وهوا بيكتب الكود كتير، كل مبرمج سواء PHP او ASP يعرف ان فى Frameworks جاهزه دلوقتى بتدعم ال Anti CSRF Token والى هتكلم عنه بالتفصيل فتلاقيه بيستخدم الفريموورك عادى جدا لكن ميفهمش دا معناه ايه، او ايه الخطر الى ممكن يحصل لو تم تخطى التوكن دا، او لو المهاجم ذكى شويه وتوصل ل Pattern بمعنى ان توليد ال Backend بتاعته للتوكنز اللى من النوع دا بشكل ضعيف شويه، امثله لل PHP Frameworks الى بتدعم صد النوع دا من الثغرات وكانت اولهم هيا YII Framework وبصراحه احيى القائمين عليها جداً لأنهم عالاقل عندهم حس الحماية والامان وخدوا بالهم لثغره خطيره زى دى.
يعنى ايه CSRF:-
ثغرات CSRF او Cross Site Request Forgery بالبلدى كدا وبدون لف ودوران، هى ثغره بيقوم بيها اليوزر نفسه بدون ما يحس انه قام بيها، يعنى بإعتبار إنى ساحر وقولتلك خد السكينه دى ونزلها فى الفتحه الى قدامك دى الى فى الصندوق وللعلم مينفعش حد غيرك يمسك السكينه لأنها على قد ايدك انت وبس فقمت انت مسكت السكينه ونزلتها فى الفتحه، الجمهور صقفلك، برافو إنت كدا قتلت واحد كان جوا الصندوق بدون ما تحس، يعنى اليوزر بيعمل حاجه هوا نفسه مش عايز يعملها “انا مش عارفنى”، تقنيا، انت بترغم/تقنع المستخدم انه يضغك على لينك، او يدخل موقع بداخل الموقع دا IFrame لكود خبيث بينفذ اوامر فى نفس جلسة العمل الموثقه الى هوا مسجل دخوله فيها، بالانجلش شويه علشان فى مصطلحات لو اتعربت مبتتفهمش.
With a CSRF Attack you may fool the user to perform some unwanted action/requests in behalf of his authenticated web application session.
يعنى ممكن بضغطه على رابط يقوم ضايف إيميل بديل مثلا فى فيسبوك، او يغير كلمة سر حسابه البنكى، او يحولك فلوس، او يلغى حسابه نهائياً بشرط انه يكون مسجل دخوله فى الموقع المطلوب مهاجمته على نفس المتصفح الى هيتم مهاجمته عليه، يعنى الاغبياء هنا احياناً بيبقوا زى الفل ممكن تقول لواحد خد اللينك دا ادخل عليه، يقوم ياخده كوبى بيست ويروح بيه براوزر تانى “الغباء نعمه احياناً والله” فى الحالة دى اليوزر دا مش مسجل دخوله على الموقع اللى انت عايز تهاجمه وبالشكل دا الهجوم فشل كلياً، ثغرات من النوع دا دايما بتبقى موجوده فى الـ HTML Forms “عبى الخانات ودوس ارسال” .
ترتيب الثغرة حسب ترتيب OWASP Top 10 Project من حيث الخطوره كان فى عام 2010 ترتيبها 5 اما فى 2013 ترتيبها 8 ، الترتيب دا طبعا بناء على عدة عوامل منها الخطوره والانتشار.
اخطر الاستغلالات:
– اى معاملات ماليه هتكون الاخطر (التحويلات البنكية ، ايداع، سحب، … الخ).
– السيطرة على الحسابات بإضافة او تعديل بريد إليكترونى او رقم موبايل او تغيير لكلمة المرو.
– إلغاء وإغلاق الحسابات بشكل كامل.
– حاجات كتير هتعرفها لما تتعمق فى هجوم زى دا وتقرا عنه فى اكتر من مصدر.
كيفية الاستغلال:
– تلغيم مواقع مشهوره وكبيره جداً تملك اكبر قدر من الزيارات وعليها ترافيك عالى فبالشكل دا بمجرد ما يدخلها اليوزر وفى نفس الوقت فاتح حسابه البنكى هيتم التلاعب بحسابه بحسب الطلب المبعوت للموقع، مثال لو مثلا انت بتستهدف كل البنانيت، يبقى من اكتر المواقع الى بيدخلوها موقع “فتكات” على سبيل المثال، وانت ساعتها كنت برنس وكشفت ثغره فى فيسبوك مثلا بتضيف بيها رقم موبايل بديل او إيميل بديل او بتغير بيها كلمة سر الحساب، ساعتها كل بنت فاتحه حساب فيسبوك بتاعها
– لو فاض بيك الكيل ومقدرتش تستغل ثغره من نوع CSRF لمجرد ان الموقع بيحمى منها نفسه كويس بوضعه لل Anti CSRF Token حاول تدور فى الموقع دا عن ثغره من نوع XSS لو لقيتها يبقى الموضوع سهل جدا ووضحته هنا فى البوست دا http://goo.gl/JvbGEG.
– الإستهداف المباشر بواسطة الهندسة الاجتماعية بس مش هتتعب كتير اكتر من انك تقنعه يدخل على اللينك.
– بدمج الثغره من نوع CSRF مع النوع XSS ساعتها مش هتحتاج اى هندسة اجتماعيه لأن شكل الرابط هيكون كدا:
http://forums.fatakat.com/forum/?id=<script>document.location.href=’YOUR_CSRF_ATTACK_URL'</script>
فبمجرد ما يلمحه الشخص الى انت بتتكلم معاه فى التشاتينج مثلا هيلاحظ فى البدايه ان الرابط موثوق منه لمجرد انه شاف forums.fatakat.com وملاحظش باقى الرابط.
– عن طريق هجوم MITM او Man in the Middle Attack حد كدا لطيف ظريف بيكون معاك على نفس الراوتر\الشبكة الى انت عليها وبيعمل الهجوم دا فبيقدر يقرا الترافيك والداتا الى بتمر مش بس يقرا، دا يقدر يحقنلك كمان IFrames داخل مواقع موثوقه وزى ما ذكرت لو انت مسجل دخولك فى موقع البنك الى هوا ساعتها هيكون بيستخدم اتصال امن ومشفر SSL/HTTPS ولكن الموقع معرض لهجمات CSRF ففى الحاله دى هتحول كميه حلوه من الفلوس للمهاجم .
تخطى الوقوع فى\إصلاح النوع دا من الثغرات:
خلونا نبص بسرعه كدا على مثال افتراضى على HTML Form موجود فى بنك مثلا، دول 2 HTML Forms واحده فيهم خطيره، والتانيه لأ ياترى ايه الفرق مابينهم ؟
#1
<form accept-charset=”UTF-8″ action=”/sendmoney.php” method=”post”>
<input name=”name” type=”text” value=””>
<input name=”account_number” type=”text” value=””>
<input name=”credit_card_number” type=”text” value=””>
<input name=”expiration_date” type=”text” value=””>
<input name=”cnc_security_digits” type=”text” value=””>
<input name=”amount” type=”text” value=””>
<input type=”submit” value=”Send Money” class=”button”>
</form>
#2
<form accept-charset=”UTF-8″ action=”/sendmoney.php” method=”post”>
<input name=”name” type=”text” value=””>
<input name=”account_number” type=”text” value=””>
<input name=”credit_card_number” type=”text” value=””>
<input name=”expiration_date” type=”text” value=””>
<input name=”cnc_security_digits” type=”text” value=””>
<input name=”amount” type=”text” value=””>
<input name=”authenticity_token” type=”hidden” value=”DW2T1haACjeSRzkEO3OKu4CSHD04IMpOZQNZA1XvZdU=”>
<input type=”submit” value=”Send Money” class=”button”>
</form>
الفورم رقم #1 بتقوم بإرسال البيانات بشكل غير امن، اما فورم رقم #2 بتقوم بإرسال طلب ارسال الاموال ولكن هنلاحظ وجود باراميتر اسمه authenticity_token ، التوكن دا هنا علشان يقول للسيرفر ياسيرفر دا فعلا بنى ادم حقيقى قاعد ووشه شايفه الفورم فعلا مش مجرد زرار واتداس عليه بدون قصد، يعنى لو المهاجم عايز يوقعك انك تعمل تحويل، لازم الاول يعرف قيمة الباراميتر authenticity_token علشان يقدر يبعت الطلب بشكل صحيح للسيرفر وياخد منك شوية الفلوس، بس هرجع واقول لو الموقع معرض لثغرات من نوع XSS ساعتها ولا هيفرق توكن ولا بتاع، ساعتها تقول حسبى الله ونعم الوكيل وبس.
للمبرمجين والمهتمين كيفية اصلاح ثغرات زى دى، دا شرح عميق مش هيسيبك غير لما تفهم: http://goo.gl/LjVSi8
مثال على ثغرات CSRF:
دى ثغره خطيرة من نوع CSRF لقيتها فى موقع كبير زى Appcelerator وهو موقع خاص بمبرمجى تطبيقات الموبايل متعددة المنصات، إليكم الفيديو http://goo.gl/7biiXo – فى امثلة كتير بس لسه بتتصلح مش هقدر اتكلم عنها دلوقتى غير لما تخلص إجراءات اصلاحها سواء فى فيسبوك او مواقع تانيه كتير.
مواضيع امنية سابقة:
– هجوم Brute Forcing – تخمين التوكنز وكلمات المرور الضعيفه
– هجوم Social Engineering – الهندسة الاجتماعية
– تحدى لموقع مشهور ومزج مابين هجوم CSRF و XSS كل كومنت فيه معلومات مثريه من هنا
ملاحظات:
*طبعا انا متكلمتش عن الموضوع بشكل مكثف او عميق شويه ليه؟ علشان سعادتك تتعب شويه وتدور وتعرف ليه ومين وايه!
* لقيت نفسك استفدت من البوست، منشن صديقك الى ممكن تكون حاسس انه هيستفيد بردو سواء كان مهتم بالسكيوريتى او مبرمج ولايك وشير، مستفدتش قول الحمد لله وحاول تسأل فى البوست وهجاوبك ان شاء الله بمجرد ما ابقى متاح.
* بتحب تقرأ، هنا هتلاقى كل شئ حول ثغرات ال CSRF ، كيفية الاكتشاف، الاستغلال والحمايه تجدوها : من هنا
*عايز تسأل اى سؤال اسأل فى البوست متهوبش ناحية الرسائل.
الكاتب: محمد عبد الباسط – مدير التقنيات وأمن المعلومات.