امنیت

خطر عکس پروفایل واتزاپ – یک هک فرضی

این پست ترجمه ای آزاده از پستی در سایت Security Affair در مورد هک کامل یک فرد با اطلاعاتی جزیی که در واتزاپ به اشتراک گذاشته می شه.
اگر یک شماره تصادفی رو به کانتکت لیستمون اضافه کنیم، واتزاپ تصویر پروفایلش رو نشون می ده. با توجه به اینکه اون آدم رو نمی شناسیم، نباید خطر خاصی وجود داشته باشه. درسته؟
خب بذارید یه موقعیت فرضی رو تصور کنیم.

فروش تلویزیون دست دوم
فکر کنید توی یه سایت تبلیغی می بینم که علی می خواد تلویزیون هوشمند ۵۲ اینچ سامسونگش رو ۲ ملیون تومن بفروشه، کار کرده در حد نو. 🙂
یه شماره تلفن هم از علی وجود داره که می تونیم باهاش تماس بگیریم برای اطلاعات بیشتر.
یه سری اطلاعات جالب داریم. می دونیم یک علی وجود داره، شماره اش رو داریم و محل حدودی زندگیش رو. اون منتظره که مردم باهاش تماس بگیرن برای خرید تلویزیون دست دومش.

بیاید شروع کنیم.

فیسبوک عزیز
باید ببینیم که علی کیه. با اضافه کردن شماره علی به کانکت لیستمون و از طریق واتزاپ، عکس پروفایلش رو پیدا می کنیم و با دونستن اسمش و محل زندگیش و با کمکی جستجو و تلاش، اکانت فیسبوکش رو پیدا می کنیم.
فرض کنید اکانت رو پیدا کردیم.
پروفایل عمومیش چیز زیادی نداره اما یه مورد رو توش گذاشته: جایی که درس خونده. نکته خوبیه برای به دست آوردن اطلاعات بیشتر. یک پروفایل تقلبی می سازیم برای کسی که در همون دانشگاه و همون دوره درس خونده. شما درخواست دوستی کسی که همشاگردی قدیمی باشه رو تایید نمی کنید؟ علی قبول می کنه.

هک واتزاپ
وارد شدن به جمع دوستان
حالا ما به لیست دوستان علی دسترسی داریم و می تونیم دریافت خوبی از محیط اجتماعی و شغلیش داشته باشی. خیلی زود می فهمیم که علی معاون مدیرعامل در بخش حسابداری یک شرکت تولیدیه. فعلا با این قضیه کاری نداریم.
توجه کنید که حالا غیر از جزییات شغلی، حلقه معتمدینش هم برامون مشخص شده. حلقه معتمدین می تونه شامل دوستان صمیمی، فامیل، همکاران و یا دوستان قدیمی باشه که این اواخر خیلی در تماس نبودن.
گروه آخر برامون جالبن. چطوری می تونیم یکیشون رو پیدا کنیم؟ خیلی ساده. لیست فعالیت های علی رو نگاه می کنیم تا ببینیم کدوم یکی از دوستاش در ماه های اخیر کمتر توی پست های علی فعالیت داشته. این آدم خیلی بهمون کمک می کنه.
حدس بزنید چرا؟
دوستان قدمی خیلی دوستانه رفتار نخواهند کرد.

بازی کردن نقش دوستان قدیمی
همونطور که احتمالا حدس زدید قراره نقش شیرین رو بازی کنیم، کسی که مشخصاتش به هدفمون می خوره. یه سری از اطلاعات رابطه علی و شیرین رو پیدا می کنیم تا زمانی که می خوایم خودمون را به عنوان شیرین جا بزنیم، باورکردنی باشه.
سلاحمون چیه؟ اشاره هایی به اتفاقات گذشته، بقیه دوستان، خبرهایی که به علی مربوط باشه و یا دوست داشته باشه.
ما متوجه شدیم که علی ترن هوایی دوست داره. این می تونه یه نقشه باشه: پیامی شامل یک لینک به خبری در مورد سقوط ترن هوایی شهربازی ارم.
قراره علی باور کنه پیامی که دریافت کرده از طرف شیرینه. مسلمه که پیام از طرف ماست. خب چطور باید این کار رو بکنیم؟
نکته اینه که شماره شیرین از آخرین زمانی که با علی در تماس بوده، تغییر کرده. با اینحال علی باور می کنه که پیام رو از شیرین گرفته. به ۳ دلیل: پیام شامل اطلاعاتیه که فقط دوستای نزدیکش می دونن (علاقه اش به ترن هوایی)، تلفنش رو داریم (از تبلیغات) و از همه مهمتر، علی تصویر شیرین رو می بینه وقتی پیام واتزاپ رو دریافت می کنه.
تصویر رو از کجا آوردیم؟ چه جایی بهتر از فیسبوک.

مرحله نهایی
علی یک پیام واتزاپ دریافت می کنه از کسی که بهش اعتماد داره در مورد موضوعی که علاقه داره. شما اگر علی بودید چکار می کردید؟ شرط می بندم که لینک رو باز می کردید. لینک، علی رو به یه سایت شامل بدافزار می بره که منجر به آلوده شدن دستگاه تلفنش می شه. بدافزاری که یکه است و فقط برای یک هدف خاص ساخته شده و بنابراین ضدبدافزارها متوجهش نمی شن.
حله. ما به ایمیل های علی، فایل هاش و لیست تماس هاش دسترسی داریم و بنابراین کلی اطلاعات خصوصی ازش به دست میاریم. یادمون نره که علی فقط می خواست یک تلوزیون بفروشه. اما علی مهمتره از اونه. علی معاون مدیر عامل در واحد حسابداریه یه شرکت بزرگه و بنابراین با دسترسی به تلفنش، کلی اطلاعات مهم خواهیم داشت که روزانه با همکارهاش رد و بدل می کنه.

بعد چی؟
حالا چکار کنیم؟ یمیل هاش رو بخونیم؟ پیوست ایمیل هاش رو دانلود کنیم؟ بریم ببینیم توی سایت شرکتشون چه خبره؟
می گم بهتون که دیگه چکار می شه کرد.
از طرف علی به کسانی که خیلی باهاشون در تماسه، پیام می فرستم. پیام شامل یک لینک به بدافزاره. اکثر دریافت کننده ها روی لینک کلیک می کنند. چرا؟ برای اینکه ما الان دیگه نقش علی رو بازی می کنیم.
بازی وباره شروع شد.

درس هایی که آموختیم
اتفاقی که در مورد علی افتاد شباهت زیادی داره به حمله های پیشرفته ای که این روزها می بینیم. حمله هایی که هدف دارند، پیگیری می شن و روشون فکر شده.
موارد زیر می تونن درسهایی باشن که از این داستان یاد گرفتیم:

  • حمله های سایبری دیگه یه فعالیت یک باره نیستند. مجرمان مجازی زمان زیادی صرف می کنند تا عملیاتشون رو در مورد یک هدف مشخص به سرانجام برسونن. حمله هاشون رو به مجموعه ای از کارهای کوچیک تقسیم می کنند که به تنهایی خطر کمی دارند یا اصلا خطررناک به نظر نمیان.
  • حمله های سایبری از روش های قدیمی تقلید می کنند اما پیشرفته و فکر شده. با ترکیب روش های قدیمی با تکنیک های جدید و نیز درگیر کردن افراد مختلف در یک حمله همه جانبه، شانس موفقیت را بالا می برند.
  • موبایل ها نقش کلیدی دارند. همه گیر شدن گوشی های هوشمند و سرویس های اجتماعی مختلف، شامل نرم افزارهای پیام رسان، باعث شده که مجرمان مجازی سریعتر به هدفشون برسن.

چکار کنیم که استفاده از گوشی های هوشمند و شبکه های اجتماعی، ریسک کمتری برامون داشته باشند:
نرم افزارهای روی گوشی های هوشمند رو به روز نگهداریم و حتما از ضد بدافزار استفاده کنیم.
شماره تلفن کارهای عمومی و کارهای خصوصی و یا مهم رو از هم جدا کنیم.
روش های حضور امن در شبکه های اجتماعی رو یاد بگیریم. دسته بندی دوستان در فیسبوک و دادن دسترسی های متناسب به دسته های مختلف می تونه نمونه ای از فتار امن در شبکه های اجتماعی باشه.
یکی از خطرات مهم در گوشی های هوشمند استفاده از مرورگرهای داخلی در نرم افزارهای مختلفه که الزاما امنیت مرورگرهایی مثل کروم و فایرفاکس رو ندارند. بنابراین ترجیحا لینک های دریافتی در نرم افزارهای پیام رسان رو در مرورگر های گفته شده باز کنید.

این چند کار، لیست کوتاهی از مواردیه که باید رعایت بشه. مسلما بسته به میزان وبگردی و تماس های متفرقه و استفاده از نرم افزارهای مختلف، میزان خطری که متوجه ماست فرق میکنه و میزان متفاوتی از رعایت نکات امنیتی رو باید انجام بدیم.

Standard
امنیت

امنیت در سامانه نام دامنه

در اینترنتی که می شناسیم با سایت ها و آدرس های url سر و کار داریم. پروتکل TCP/IP از IP برای آدرس دهی سرورها استفاده می کنه و ما برای ارسال و گرفتن اطلاعات به یک سرور، باید IP اون رو بدونیم. برای راحت کردن استفاده کاربرها و برای اینکه همه مجبور نباشن برای مثال IP موتور جستجوی گوگل رو وارد کنن باید فکری می شد. بنابراین هر سایت یک آدرس منحصر به فرد انتخاب کرد که در مورد مثالمون google.com بود و وظیفه تبدیل این آدرس به IP برعهده ماشین ها گذاشته شد. سامانه نام دامنه یا Domain Name System که خلاصه اش می شه DNS این کار رو انجام می ده. در این پست به بخشی از مباحث امنیت در سامانه نام دامنه خواهم پرداخت و یکی دو نرم افزار برای بالابردن امنیت معرفی خواهم کرد.

خب بذارید ببینیم قبل از دیدن صفحه گوگل چه اتفاقاتی می افته و نقطه های خطر رو پیدا کنیم.

ابتدا مرورگر رو باز می کنیم و google.com رو تایپ کرده و از مرورگر می خوایم که این آدرس رو برامون بیاره. مرورگر نگاه می کنه ببینه آیا در کامپیوترمون IP متناظر با google.com ذخیره شده یا خیر (کش DNS). اگر شده باشه، همون IP رو به عنوان مقصد انتخاب می کنه و اطلاعات دریافتی از اون IP رو به عنوان سایت گوگل به ما نشون می ده.

در صورتیکه IP متناظر در سیستم عامل ما وجود نداشته باشه، از یک سرویس دهنده می پرسه که IP متناظر با گوگل چیه. اون سرویس دهنده از پایگاه داده ای که داره استفاده می کنه و نتیجه رو برای مرورگر ما ارسال می کنه و سپس مرورگر اطلاعات اون IP رو به عنوان google.com به ما نشون می ده. در ضمن در کش DNS سیستممون هم این IP متناظر با سایت google.com ثبت می شه که در مراجعه بعدی، سریعتر IP پیدا بشه.

سرویس دهنده ای که در پاراگراف قبل گفتم می تونه در تنظیمات سخت افزار شبکه (کارت شبکه) مشخص بشه. معمولا ISP های ایران در انتخاب اول DNS خودشون رو برای کاربر تعیین می کنند و در انتخاب بعدی DNS گوگل رو. سرویس دهنده های مختلف و بیشماری وجود دارند که کار تبدیل نام دامنه به IP رو برای کاربرها انجام می دن.

مراحل بالا هر کدوم ریزه کاریهای خودش رو داره و استانداردهایی برای شیوه اجرا. وارد جزییات اونها نشدم و البته در پست های بعدی در موردشون بیشتر خواهم گفت. در این پست لایه اول خطرات امنیتی که می تونه کاربرهای عادی رو دچار مشکل کنه بررسی می کنم.

مهمترین خطر در بحث DNS، جایگزین کردن IP تقلبی با IP واقعی سایته که می تونه در سطح سیستم عامل و یا در سطح سرویس دهنده اتفاق بیافته. بسیاری از بدافزارها وقتی که سیستم ما رو آلوده می کنن، کش DNS یا در واقع IP های ذخیره شده رو تغییر می دن. یعنی اگر IP واقعی گوگل ۷۴.۱۲۵.۲۳۹.۱۰۱ باشه، بدافزار در ذخیره سیستم ما، اون رو به ۱۸۵.۱۸۵.۱۸۵.۱۸۵ (برای مثال) تغییر می ده. از این به بعد هروقت مرورگر خواست سایت گوگل رو باز کنه، اطلاعات ارسالی از یک سرور خطرناک رو برای ما میاره. موتور جستجوی گوگل حتی اگر تقلبی هم باشه ممکنه برای خیلی ها مهم نباشه ولی فرض کنیم سایت بانک ما هم تقلبی باشه، اون وقت تمام اطلاعاتی که وارد می کنیم مثل شماره حساب و پسورد، در اختیار هکرها قرار می گیره.

dns

با توجه به ارسال و دریافت اطلاعات به سرورهای ارائه دهنده سرویس نام دامنه، کسانی که در یک شبکه اند و یا کنترل نقطه های میانی اتصال را بر عهده دارند، می تونن این اطلاعات رو ببینند و حتی تغییر بدن.

از نمونه های واقعی این خطرها میشه به هک شدن سایت گوگل و یاهو در آذربایجان از طریق هک سرویس دهنده DNS منطقه ای اشاره کرد. در این حالت در واقع سایت ها هک نشدن بلکه کاربرها به سرورهای دیگری منتقل می شوند.

نکته بعدی در بحث امنیت DNS بیشتر به حریم خصوصی مربوط می شه. درواقع سرویس دهنده نام دامنه ما، کلیه سایت هایی که بازدید کردیم رو می دونه. شاید خواسته یا ناخواسته یک سایت بزرگسالان رو باز کنیم و نخوایم که ISP بدونه. ضمن اینکه در بسیاری از کشورها، ISP ها لیست وبسایت های بازدید شده کاربران رو برای مدت های طولانی نگه می دارن و در اختیار مراجع رسمی می ذارن. بازدید از سایت های به اشتراک گذاری فیلم و موزیک، می تونه نشون دهنده دانلود غیر قانونی باشه که در برخی کشورها تبعاتی برای کاربر داره. نمونه های مشابه بسیاره.

برای جلوگیری از خطرات گفته شده چند کار رو همزمان باید انجام بدیم.

  • اول اینکه با بالابردن سطح امنیت کامپیوتر و استفاده از آنتی ویروس و فایروال و غیره، مطمئن بشیم که سیستم ما آلوده به بدافزار نیست.
  • دوم اینکه کش DNS رو به صورت دوره ای پاک کنیم که در صورت تغییر این فایل، مشکلات در سیستم باقی نمونه.
  • سوم اینکه از سرویس های امن تری به جای سرویس ISP استفاده کنیم. یکی از مشهورترین سرویس ها  در این زمینه OpenDNS است.
  • و در آخر اینکه از رمزگذاری برای رد و بدل اطلاعات با سرویس دهنده نام دامنه استفاده کنیم تا احتمال تغییر اطلاعات در بین راه رو کم کنیم (چیزی شبیه استفاده از https به جای http).

سرویس دهنده OpenDNS ابزاری برای رمزگذاری ترافیک DNS ارائه کرده به اسم DNSCrypt. استفاده از DNSCrypt می تونه ردیف ۳ و ۴ لیست بالا رو همزمان انجام بده. درضمن این نرم افزار به صورت متن بار منتشر شده که می تونه در بحث امنیت یک قدم به جلو باشه.

با توجه به انتشار متن این نرم افزار، توسعه دهنده های دیگری با استفاده از این منبع، ابزارهای دیگری ساختند که دست کاربر رو بازتر می کنه. یک نمونه خوب از این نرم افزارها در سیستم عامل ویندوز DNSCrypt Windows Service Manager است.

DNSCrypt Windows Service Manager با اینکه ظاهر ساده ای داره اما این امکان رو به کاربر می ده که از سروری غیر از سرور OpenDNS استفاده کنه. همچنین می تونیم پروتکل UDP یا TCP رو انتخاب کنیم و یا از IP v6 به جای IP v4 استفاده کنیم.

قبل از انتخاب سرورهای لیست شده در این نرم افزار مطمئن بشید که اون سرویس دهنده تاریخچه وبگردی شما رو نگه نمی داره یا با سایت های تبلیغاتی و دولت ها به اشتراک نمیذاره.

این نرم افزار در مراحل اولیه است و توسعه دهنده اش گزینه های زیادی برای نسخه های بعدی در نظر گرفته.

هرچند استفاده از سرورهای امن DNS و رمزگذاری ترافیک راه خوبی برای بالا بهتر کردن امنیت و حریم خصوصیه اما در صورتیکه از شبکه های عمومی استفاده می کنید و یا از شبکه های که بهش مشکوکید و احتمال نفوذ و یا کنترل داره (مثل WiFi رستوران و هتل)، پیشنهاد می شه از شبکه خصوصی مجازی یا VPN کمک بگیرید.

Standard
امنیت

شناسایی درهای پشتی در کدهای PHP

چند وقته که در کنار کتاب و مقاله هایی که می خونم و کارهایی که می کنم، علاقه زیادی به آنالیز کدهای مخرب پیدا کردم. یکی از این علاقه ها، شناسایی درهای پشتی در کدهای PHP است. در ادامه اشاره کوتاهی خواهم کرد به نشونه هایی که می تونه منجر به شناسایی کدهای مخرب بشه و البته روش های بدافزارنویس ها برای دور موندن از چشم کارشناس های امنیتی.

phpbackdoor

backdoor یا درپشتی در واقع یک تکه کده که به هکر امکان دسترسی مجدد به سایت هک شده رو می ده حتی اگه ادمین تموم پسوردها رو تغییر بده. این تکه کد می تونه ۱۰۰خط باشه یا یکی دو خط.  یکی از ابتدایی ترین شیوه ها گذاشتن یک درپشتی واضح و سر راسته:

این یک خط کد می تونه در یک فایل PHP جدید گذاشته بشه و یا به راحتی در یکی از چندین فایل قالب سایت اضافه بشه و از چشم ادمین دور بمونه. البته افزونه ها و یا نرم افزارهای امنیتی با چک کردن کل فایل های سایت و استفاده از پترن های شناخته شده این درهای پشتی رو خیلی زود پیدا می کنند. افزونه ها معمولا دنبال این توابع می گردن:

به دلیل پیشرفته تر شدن کارشناسان امنیتی و نرم افزارهاشون، هکرها هم به سمت آموزش و استفاده از روش های جدیدتر رفتن. روش هایی که بعضی مواقع زمان زیادی رو از کارشناسان امنیتی می گیره تا بتونن کشفش کنن. مثلا با استفاده از یک سری توابع PHP کدشون رو ناخوانا می کنند. کد زیر در واقع همون درپشنی در مثال قبله با این تفاوت که کل کد با متد base64 رمز شده.

در این روش هسته PHP ابتدا با دستور base64_decode این کاراکترهای به هم ریخته رو به کد اصلی برمی گردونه و سپس اجراش می کنه. این روش نیز به راحتی قابل پیدا کردنه. کافیه توی تموم کدهای سایتمون دنبال یک استرینگ رمز شده بگردیم و بعد ببینیم چکار می کنه.

روش دیگه ناخوانا کردن یک در پشتی می تونه مثال زیر باشه. این روش هم هرچند قابل پیدا شدنه اما با کمی خلاقیت می شه اون رو از چشم افزونه های امنیتی دور کرد و یا حداقل کاری که می کنه رو مخفی کرد:

همونطور که در کد بالا می بینید حتی اسامی توابع نیز رمز شده و به اون هم اکتفا نشده و با جایگذاری کاراکترهای رندوم در بین استرینگ به دست اومده، اون رو هم ناخواناتر کرده. زمان اجرا ابتدا PHP کاراکترهای جایگذاری شده رو حذف می کنه و بعد نتیجه را رمزگشایی می کنه و کد اجرا می شه.

نمونه های زیادی وجود داره که می شه مثال زد و بررسی که چکار می کنه اما در پایان می خوام اشاره ای بکنم به نمونه ای که یکی از سایت های فعال در بحث امنیت اون رو پیدا کرده و خب قاعدتا به زودی پترن های استفاده و کشفش در افزونه های امنیتی اضافه می شه.

در این نمونه نویسنده درپشتی، از فراخوانی توابع در تابع های عادی PHP استفاده کرده:

کاری که array_diff_ukey می کنه اینه که دوتا آرایه رو بر اساس کلید ها مقایسه می کنه و تفاوت ها رو بر می گردونه. یه گزینه دیگه هم داره که می تونه یک تابع دیگه رو فرابخونه و  این تفاوت های پیدا شده رو به اون بده و اون تابع رو اجرا کنه. مثلا تصویر زیر می تونه جمله All your data belong to me! رو در خروجی نشون بده

array_diff_ukey

در کد اصلی سه متغیر از  کاربر گرفته می شه که تفاوت دو تا به عنوان ورودی تابع عمل خواهد کرد و خود تابع نیز از طریق متغیر سوم مشخص می شه.

می بینید که هیچ نکته غیر عادی در کد وجود نداره. ضمن اینکه این شیوه محدود به تابع array_diff_ukey نیست و با همین شیوه می شه از همه توابعی که تابع دیگه ای رو فراخوانی می کنن، استفاده کرد. باید پترنی رو پیدا کرد که تشخیص خودکار این روش رو ممکن کنه.

در پایان باید بگم:
اگر تجربه هک شدن سایتتون رو دارید حتما کار پاک سازی رو به یک کاردان بسپرید و به تغییر پسوردها بسنده نکنید هرچند که تغییر پسورد قدم اوله.
اگر از CMS هایی مثل وردپرس و جوملا استفاده می کنید حتما افزونه های امنیتی رو به کار ببرید.
هرگز از قالب و افزونه هایی که منتشر کننده ناشناس یا غیرمعتبر داره استفاده نکنید و یا اونها رو از سایت های متفرقه دانلود نکنید. همونطور که دیدید فقط یک خط در یکی از فایل هایی که روی سرور میذارید می تونه منجر به هک بشه.

 

Standard