مهندسی اجتماعی یا همان Social Engineering چیست که از آن به عنوان هنر هک کردن انسانها یاد میکنند؟ مگر انسان هم هک میشود؟ در این مقاله با بیان و بررسی چند مثال در دنیای واقعی به تعریف مهندسی اجتماعی میپردازیم. مثالهایی که به ما ثابت میکنند، مهندسی اجتماعی فقط برای بقیه نیست و شاید برای ما هم اتفاق بیفتد! در ادامه هم یکی از زیرمجموعههای مهندسی اجتماعی، فیشینگ (Phishing) را به صورت ساده و البته آزمایشگاهی بررسی می کنیم.
مهندسی اجتماعی چیست؟
با اینکه برای یادگیری مهندسی اجتماعی علم خاصی لازم نیست، ولی یکی از بهترین روشها برای حملات امنیتی و هک به حساب میآید. روشی که میتواند بسیار خطرناک باشد. چون در این حمله برای بریدن سر قربانی حتی از پنبه هم استفاده نمیشود.
میزان خطر مهندسی اجتماعی را میتوانیم با ضرب میزان خلاقیت مهاجم در میزان هوش قربانی اندازهگیری کنیم! فرمولی که اختراع خودم است.
در ابتدا باید پیشنهاد کنم که جمله «پنیر مجانی رو فقط روی تله موش پیدا میکنی!» را به خاطر بسپارید و به عنوان گوشواره استفاده کنید. این جمله را با خودتان همه جا ببرید و همیشه به همراه داشته باشید. من این جمله را بار اولین بار از پدرم شنیدم و شاید بعد از کلمه «نه» در جواب «بلدی اینستاگرام هک کنی؟»، قشنگترین چیزی باشد که به اطرافیانم میگویم.
البته باید گفت استفاده از این جمله در دنیای امنیت بسیار پررنگتر است. چون همانطور که میگویند «هیچ گربهای محض رضای خدا موش نمیگیرد»، ما هم باید بدانیم که علت و دلیل خوبی آدمها به یکدیگر چیست؟ اینکه بفهمیم علت یک کار خوب فقط به خاطر نیت پاک آنها بوده است یا دلیل پنهان دیگری دارد؟ پیدا کردن جواب این سوال، اهمیت زیادی دارد که در ادامه به آن میپردازم.
برای درک بهتر این گفته، به یک خاطره از دوران دبیرستانم اشاره میکنم، جریانی دردسرساز اما واقعی بین من و دو دوست صمیمیام!
در دوران دبیرستان و در یک زمستان خیلی سرد، خانه یکی از دوستهای صمیمیام به نام «حمید» به دلیل گودبرداری ناایمن، فرو ریخت و خانهشان یک دیوار را از دست داد! خانهای که دیگر قابل سکونت نبود. بعد از آن، خانواده حمید به طبقه بالای دوست صمیمی دیگرم یعنی «مسعود» نقلمکان کردند و حمید و مسعود همسایه شدند.
من و حمید بهقدری با هم صمیمی بودیم که او، من را محرم رازهایش میدانست. یک روز که با من تماس گرفته بود و من از حرفهای تکراری او به شدت کلافه شده بودم، به او گفتم: «حمید جان تلفنتون نمیسوزه، انقدر زنگ میزنی؟»
با خنده گفت: «نه داداش، دیروز مسعود تلفنمون رو دستکاری کرد و گفته دیگه برای خونهمون فقط قبض اینترنت میاد و با تغییری که داده، دیگه تلفنهای درون شهری مجانیه.»
اما یک چیزی برای من خیلی عجیب بود! با اطلاعاتی که داشتم، میدانستم که چنین طرحی در مخابرات برای رایگان کردن تلفنهای درون شهری وجود ندارد. پس یک جای کار میلنگید! پس سعی کردم، دوباره به ماجرا نگاه کنم و گزینههای متعدد را بررسی کنم:
- حمید، فردی ساده است.
- مسعود به تازگی چیزهای خصوصی زیادی از حمید را فهمیده است.
- موقع تماس تلفنی با حمید، غیبتی پشت مسعود کردم که امکان نداشت متوجه شود. اما او فردای آن روز در مدرسه با من سرسنگین بود.
- مسعود چند روز برای تعمیر تلفن خانه حمید وقت گذاشته بود، آن هم آدمی که با تهدید به مرگ هم حاضر نبود کاری را از پیش ببرد.
- مسعود به حمید گفته بود که قطعهای را داخل تلفن میگذارد که منجر به رایگان شدن تماسهای درون شهری میشود.
با کنار هم گذاشتن تمامی این گزینهها، مطمئن شده بودم که یک سینی زیر نیم کاسه هست. پس تصمیم گرفتم به خانه حمید بروم و تلفنشان را باز کنم و بله، به چیز جالبی برخوردم: یک فرستنده خط ثابت به FM!
بعد از آن جریان، بعضی از ویژگیهای اخلاقی مسعود توجهم را جلب کرد: جسور، باهوش، ریسکپذیر و ترسناک
برایم مهم نبود که چرا مسعود این کار را انجام داده، اما چیزی که من از این ماجرا یاد گرفتم «مباحث هک و امنیت» بود. مباحثی که در بیشتر مواقع فقط به شنود مکالمه تلفنی ختم نمیشود! در واقع این پنیر مجانی، خیلیها را مثل حمید، البته در ابعاد بسیار بزرگتر به دردسر انداخته است.
برای مثال در کشور ایتالیا، حساب بانکی یکی از مهمترین مشتریها از طریق یکی از کارمندان مورد اعتماد آقای رئیس (که از این به بعد، آقای کارمند صداش میکنیم)، خالی شد!
این حقیقت ماجرا بود؛ اما واقعیت ماجرا این است که پسورد آقای کارمند توسط خانمی به نام «جیوانا» هک شده بود.
ماجرا از این قرار بود که این آقای کارمند به صورت اتفاقی با خانمی به نام «آنجلا» در مسیر بانک آشنا میشود. فردی قد بلند، بور و خوش صدا که در عین حال، بسیار مهربان و قابل اعتماد به نظر میآمده است.
آقای کارمند که متوجه شده بود، آنجلا مشتری بانکی است که در آن کار میکند، فرصت را طلایی میشمرد و با اعتماد بیشتری با آنجلا همصحبتی میکند. به نحوی که قرار میگذارند تا آنجلا در امتحانات پایان ترم به آقای کارمند کمک کند و مشکلی که در بانک دارد را توسط او پیگیری کند. پس همراه با هم به بانک میروند.
اما آن روز، آقای کارمند بعد از رسیدن به میزش متوجه میشود که کیبوردی که تا دیروز سالم بوده، خراب شده است. آنجلا هم از این موقعیت سو استفاده میکند و به او میگوید: «شاید همه این اتفاقها برای این بوده که یه کیبورد از من هدیه بگیری، صبر کن، الان میام.» و خیلی سریع به بیرون از بانک میرود و با یک کیبورد نو به عنوان هدیه برمیگردد.
آقای کارمند هم با خوشحالی این کیبورد را قبول میکند، کار خانم آنجلا را راه میاندازد و به آینده خودش با این خانم، خوشبینانه فکر میکند. اما نمیدانست که از این به بعد، هر چیزی که تایپ میکند به وسیله این کیبورد برای همکارش یعنی خانمی به نام «جیوانا» ارسال میشود!
شاید هیچکس نتواند یک متهم عاشق که با حسابش، پول بزرگی جابهجا شده را درک کند! اما سوال مهم اینجاست که این آدم چطور باید ثابت میکرد که در این دزدی هیچ نقشی نداشته است؟
خب، داستان را همینجا کنار بگذاریم و این اتفاق را به شکل دیگری بررسی کنیم.
فیشینگ چیست؟
در واقع فیشینگ یک نوع حمله سایبری، به منظور جمعآوری اطلاعات مهم افراد مثل جزئیات کارتهای اعتباری، نامکاربری، رمزعبور و… است.
حملات فیشینگ، اکثرا با نقاب یک نهاد معتبر (مثل دیجیکالا) انجام میشود و معمولا در هر حمله موفق، تعداد زیادی از آدمها را به دردسر میانداز. این حمله به جای اشتباهات نرمافزاری به اشتباهات انسانی مرتبط است و به همین دلیل نوعی از حملههای مهندسی اجتماعی هم شناخته میشود.
حملات فیشینگ (Phishing) چگونه انجام میشود؟
هکرها و کلاهبرداران اینترنتی، سناریوهای زیادی برای به ثمر رسیدن این حملات طراحی میکنند. در معمولترین این سناریوها، کاربران یک لینک دریافت میکنند و بعد از ورود به لینک، باید یک سری دیتای مهم مثل اطلاعات کارت بانکی و… را وارد کنند. احتمالا نمونه چنین حملاتی را در اخبار زیاد شنیدهاید! بیاید یک سناریو ساده را با هم بررسی کنیم.
یک آزمایشگاه ساده برای حملات فیشینگ
در این قسمت یک آزمایشگاه ساده و کوچک، برای پیادهسازی حملات فیشینگ ایجاد میکنیم. چون خیلی به Django ارادت دارم، در ادامه یک پروژه ساده را با همین فریمورک بررسی میکنم.
نکته: لطفا در ابتدا بررسی کنید که GIT و python ورژن سه روی سیستمتان نصب باشد.
در مرحله اول پیشنهاد میکنم برای اینکه خرابکاری نکنیم، اول یک environment برای پروژه درست کنیم. برای این کار دستورات زیر را در خط فرمان وارد میکنیم (این بخش اختیاری است، پس میتوانید انجام ندهید):
mkdir phishprj
cd phishprj
virtualenv venv
source venv{_path}/bin/activate
به این ترتیب، وارد محیط ENV مورد نظر خودتان خواهید شد.
من برای ادامه، یک پروژه انتخاب کردم که به نظرم سازوکار یک حمله phishing را به صورت آزمایشی میتواند برای شما مشخص کند. از طرفی یک تابع هم دارد که اطلاعات وارد شده (توسط کاربر) را به تلگرام ارسال میکند.
پس دستور زیر را اجرا کنید تا از کد زیر clone بگیرید.
git clone https://github.com/siddhant385/django-phishing.git
cd django-phishing
نکته:
برای لود شدن این ابزار، من از کتابخانههای زیر استفاده کردم. دستورات مربوطه را براتون میتوانید از اینجا بردارید:
pip install Django==4.0.5
pip install django-user-agents==0.4.0
pip install python-memcached==1.59
pip install requests==2.28.1
همچنین نیاز دارید تا اطلاعاتی که کاربران وارد میکنند را به تلگرامتان هم ارسال شود. پس باید یک bot بسازید که اطلاعاتش که در فایل creepyfunc.py وجود دارد را در در پوشه phish هست بگذارید.
این نکته را هم یادآوری کنم که میتوانید این اطلاعات را وارد نکنید و فقط به دیده شدنشان در خط فرمان بسنده کنید. برای این کار هم میتوانید به پوشه phish بروید و فایل View.py را ویرایش کنید و هر کجا که send_msg(info) را دیدید، قبلش دستور زیر را وارد کنید:
print(info)
بعد از وارد کردن دستورات بالا سرورتان آماده استفاده است و فقط باید دستور زیر در خط فرمان اجرا شود:
python manage.py runserver
معمولا باید بعد از اجرای دستور، سرور مورد نظر بالا آمده باشد و شما باید چیزی شبیه به این را در ترمینالتان ببینید:
حالا وقتی با مرورگرتان به آدرس http://localhost:8000 بروید، باید صفحه زیر نمایش داده شود:
نکته: میتوانید از آدرسهای زیر (که مربوط به سرویسهای دیگه است) هم استفاده کنید:
http://localhost:8000/netflix
http://localhost:8000/dropbox
http://localhost:8000/snapchat
http://localhost:8000/github
http://localhost:8000/facebook
من به جای نام کاربری 09123456789 و به جای کلمه عبور Digikala را وارد کردم که بعد از این کار اطلاعات رت در bot مربوطه دیدم:
همچنین اگر فایل view.py را تغییر داده باشید، باید مثل زیر اطلاعات وارد شده را در ترمینال هم ببینید:
راههای مقابله با حملات مهندسی اجتماعی
این سناریو هم با موفقیت انجام شد. ولی فراموش نکنیم در اکوسیستم امنیت سایبری، حملات مهندسی اجتماعی و مخصوصا فیشینگ بسیار رایج هستند و چون از اشتباهات فردی ایجاد میشوند، جلوگیری از آنها معمولا سخت است. ویکیپدیا راههای جلوگیری از مهندسی اجتماعی را با عنوانهای زیر ذکر کرده که از نظر من همه آنها به کلمه آگاهسازی اشاره دارد:
- شناسایی محرکهای روانشناسی متقاعدسازی
- آشنایی با تکنیکهای حمله مهندسی اجتماعی
- شناسایی سطوح مختلف دفاع
- استراتژیهای دفاع
راههای مقابله با حملات فیشینگ
ابزارهایی مثل افزونهها، آنتیویروسها، فایروالها و Anti-Phishingها برای کمک به شما در جلوگیری از فیشینگ طراحی شدهاند. فقط نکته اصلی این است که اگر از صحت آدرسهای دریافت شده اطمینان ندارید، روی آن کلیک نکنید. در عوض به مرورگر بروید و URL را برای وبسایت مورد نظرتان بنویسید و از این طریق کارها را پیش ببرید.
کلام آخر
در این مقاله به صورت کلی به بررسی مهندسی اجتماعی پرداخته شده و در انتها سعی شد یک آزمایشگاه برای پیادهسازی یکی از زیر شاخههای آن یعنی فیشینگ را اجرا کنیم. در این آزمایشگاه به صورت نمونه، تمپلیتهایی از چند سایت معتبر مثل instagram و github و … وجود دارد که در صورت وارد شدن اطلاعات مورد نظر، آنها را به تلگرام مهاجم ارسال میکند.
در آخر یادآوری میکنم که عواقب استفاده نادرست از این مطالب به عهده خود شخص است.