برای مطالعه بخش قبل روی این آدرس کلیک کنید.
درک حملات برنامه
حملات علیه برنامههای کاربردی، حملاتی هستند که از طریق نرم افزارهایی که هر روزانه استفاده میکنیم، انجام میشوند. هکرها روی کار با نرمافزارهای کاربردی وقت میگذارند و سپس یاد میگیرند که چگونه میتوانند از طریق آسیبپذیریهای موجود در نرمافزارها به سیستمها حمله کنند. هکرها مفاهیم برنامهنویسی و نحوه استفاده از آن و دانش لازم برای سوء استفاده از آسیبپذیریها را به خوبی میدانند و با کمترین زحمت قادر به بهرهبرداری از رخنهها هستند.
حمله Lightweight Directory Access Protocol Injection
حمله تزریق پروتکل دسترسی به دایرکتوری سبک وزن (LDAPI) هنگامی اتفاق میافتد که هکری یک فرم وب را بهگونهای پر میکند که معمولا از دادههای فرم برای پرسوجو از پایگاه داده با فراخوانی LDAP استفاده میکند، اما از آنجایی که توسعهدهنده برنامه هیچکدام از ورودیها را تایید نکرده، هکر در اجرای دستورات موفق خواهد بود. در این حالت هکر محتوا و دستورات موردنظر را درج میکند و سرور آنها را اجرا میکند.
حمله Extensible Markup Language Injection
حمله تزریق زبان نشانهگذاری توسعهپذیر (XML) شبیه تزریق کد اسکیوال و تزریق LDAP است، با این تفاوت که هکر کد XML را به برنامه وارد میکند. اگر توسعهدهنده برنامه، ورودی را اعتبارسنجی نکرده باشد، هکر میتواند روند اجرای برنامه را با تزریق دادههای XML دستکاری کند. برای حل این مشکل کافی است ورودیها را اعتبارسنجی کنید تا مانع پیادهسازی موفقیتآمیز این مدل حملهها باشید.
حمله Directory Traversal
یک حمله محبوب علیه وبسرورها در طول سالها، حمله پیمایش دایرکتوری بوده که برای پیمایش در سیستم فایل وب سرور مورد نظر و به طور بالقوه برای تزریق دستورات در داخل پیام HTTP استفاده میشود. روشی که پیمایش دایرکتوری بر مبنای آن کار میکند به این صورت است که هکر چندین بار ../.. را در URL تایپ میکند تا در ساختار دایرکتوری وب سرور حرکت کند. پس از پیمایش به عقب در ساختار دایرکتوری، هکر به سمت دایرکتوری سیستمعامل حرکت میکند و سعی میکند دستورات سیستمعامل را اجرا کند. پس از ورود به دایرکتوری، چند مرتبه به عقب باز میگردد تا به دایرکتوری سیستم عامل برسد و دستورات سطح سیستم عامل را اجرا کند. برای مقابله با حملههای پیمایش دایرکتوری، باید اطمینان حاصل کنید که سیستمها با وصلههای امنیتی بهروز هستند و به دنبال فهرست سیاه کاراکترهای رایج در آدرسهای اینترنتی مثل ../.. باشید.
بهرهبرداری از وب سرور IIS با پیمایش دایرکتوری
در این تمرین، یک وبسایت فرضی و یک URL مخرب داریم که قرار است ساختار پوشه سرور وب را پیمایش کند و سپس دستورات dir و del را برای دستکاری فایلها در وب سرور اجرا کند. این تمرین از نسخههای قدیمی نرمافزار مایکروسافت استفاده میکند، زیرا این اکسپلویت روی نسخههای جدیدتر سیستم عامل ویندوز کار نمیکند. این تمرین صرفاً برای این است که اطلاعات فنی و عملی در ارتباط با حملات پیمایش دایرکتوری را داشته باشید.
1. مطمئن شوید که ماشین مجازی سرور Windows 2000 و ماشین مجازی کلاینت Windows در حال اجرا هستند.
2. به ماشین مجازیWindows 2000 Server وارد شوید و از ipconfig در خط فرمان برای یادداشت آدرس IP سیستم استفاده کنید:.
3. به درایو C در ماشین مجازیWindows 2000 Server بروید و یک فایل متنی به نام myfile.txt ایجاد کنید.
4. به ماشین مجازی سرویس گیرنده Windows بروید و با تایپ <http://<ip_of_server در مرورگر، وبسایت را پیمایش کنید، جایی که <ip_of_server> آدرس IP را نشان دهد که قبلاً ضبط کردهاید.
5. برای بهرهبرداری از وب سرور با استفاده از پیمایش دایرکتوری، موارد زیر را در مرورگر وب تایپ کنید:
http://<ip_of_server>/scripts/..%c%af../winnt/system32/cmd.exe?/c+dir+c:\
این فرمان چه کاری انجام میدهد؟
برای حذف فایلی که قبلا در وب سرور ایجاد کردهاید، دستورات زیر را در مرورگر تایپ کنید:
http://<ip_of_server>/scripts/..%c0%af../ winnt/system32.cmd?/c+del+c:\myfile.txt
با خطای CGI مواجه میشوید، اما روی دکمه برگشت کلیک کنید و سپس دکمه رفرش را بزنید تا صفحه رفرش شود، اکنون مشاهده میکنید که فایل از وب سرور حذف شده است.
9. به ماشین مجازی Windows 2000 Server بروید و بررسی کنید که آیا c:\myfile.txt هنوز وجود دارد یا خیر. فایل قرار دارد؟
10. چگونه مانع بروز چنین حملهای شویم؟
Injection Attacks
امروزه حملات تزریقی به برنامهها بسیار رایج است. حمله تزریق شامل درخواست اطلاعات از کاربر است. یک مهاجم از این اعلان برای درج انواع مختلف کدهای برنامهنویسی به جای دادههایی که نرمافزار در انتظار آنها استفاده میکند. بسته به نوع اطلاعاتی که تزریق میشود، انواع مختلفی از حملات تزریقی وجود دارد.
تزریق SQL
SQL مخفف Structured Query Language و زبان رایجی است که توسط برنامهنویسان برای دستکاری پایگاه داده استفاده میشود. اکثر برنامههای کاربردی وب و برنامههای کاربردی داخلی تجاری از SQL برای بازیابی دادهها از پایگاه داده استفاده میکنند. به عنوان مثال، شما ممکن است یک سیستم موجودی در دفتر داشته باشید که دادههای موجودی واقعی در یک پایگاه داده را ذخیره میکند. این برنامه از SQL برای بازیابی دادهها از پایگاه داده استفاده میکند و به شما نمایش میدهد.
در حملات تزریق SQL، هکر از دستورات SQL استفاده میکند که در پشت صحنه اجرا میشود تا دادههای موجود در پایگاه داده را دستکاری کند، بنابراین هکر در واقع مقداری کد SQL را به برنامه وارد میکند و میداند که برنامه این کدها را برای پایگاه داده ارسال میکند. هکر دستورات SQL را در جایی که شما انتظارش را ندارید مثل فیلد رمز عبور در صفحه ورود به برنامه وارد میکند.
در شکل زیر یک نمونه محبوب از حمله تزریق SQL را مشاهده میکنید.
مثال مذکور، یک صفحه ورود به سیستم است و کد معمولی را نشان میدهد که توسعهدهندگان برنامه به صورت دستور SQL مینویسند تا به کاربران اجازه ورود به سیستم را بدهد. دستوری که برای این منظور استفاده میشود، دستور select است که برای یافتن اطلاعات در پایگاه داده استفاده میشود. هنگامی که کاربر روی دکمه LOGON کلیک میکند، دستور select سعی میکند نام کاربری و رمز عبوری که در برنامه تایپ شده است را پیدا کند.
در این مثال، هکر باید مطمئن شود پس از اجرای محاوره، نتیجه مدنظر را دریافت میکند، زیرا نام کاربری و رمز عبور معتبر را نمیداند، بنابراین سعی میکند کدهای SQL را بهعنوان رمز عبور وارد میکند تا شاید بتواند به سیستم وارد شود. بهطور مثال، یکی از تکنیکهای رایجی که در این زمینه استفاده میشود، درج دستورات بانک اطلاعاتی در کادر رمز عبور است تا یک حمله تزریق کد SQL با موفقیت انجام شود:
pass' or 1=1 --
کلمه pass چیزی است که هکر بهعنوان رمز عبور خود تایپ میکند که در واقع کار نخواهد کرد، زیرا هکر در برنامه حساب کاربری ندارد. دستور 1=1 بهعنوان شرطی در دستور select استفاده میشودف اما بهعنوان رمزعبور واقعی آزمایش نمیشود. در اینجا نکته مهم در کاراکتر ' مستتر است که برای بستن دستور select استفاده میشود. کاراکترهای -- در پایان این دستور اشاره به درج نظر دارند و در حالت عادی مشکل خاصی ندارند، با اینحال، نکته ظریفی وجود دارد. در کدهای اصلی، برنامهنویس از کاراکتر' در دستور select واقعی استفاده کرده و در اینجا کاراکتر ' پایان آن دستور را مشخص میکند. اکنون دو کاراکتر – که در دنیای واقعی تنها برای درج نظرات توسط برنامهنویسان استفاده میشود در خط بالا باعث نادیده گرفتن ادامه دستورات select اصلی میشوند. از اینرو، در کدنویسیهای ضعیف این تکنیک به هکر اجازه ورود به سامانه را میدهد.
یکی دیگر از چالشهای بزرگی که برنامهنویسان بانکهای اطلاعاتی با آن روبرو هستند، تغییر قیمت کالاها در یک فروشگاه آنلاین توسط هکرها است. دستور زیر اجازه به ورود به سیستم را میدهد، اما در عین حال یک عبارت بهروزرسانی را اجرا میکند که قیمت همه کتابهای جدول titles را به 50 سنت تغییر میدهد:
pass' or 1=1; update titles set price=.5 --
یکی دیگر از مخاطراتی که پیرامون برنامههای کاربردی وجود دارد، فراخوانی دستورات سیستم عامل یا سرور بانک اطلاعاتی برای ساخت حسابهای کاربری است. بهطور مثال، دستور زیر یک رویه ذخیره شده داخلی موجود در SQL Server را فراخوانی میکند که به توسعهدهنده پایگاه داده اجازه میدهد یک فرمان سیستم عامل را برای جمعآوری اطلاعات فراخوانی کند. در مثال فوق، هکر حساب کاربری خودش که "fromSQL" نام دارد را در ویندوز ایجاد میکند تا بتواند برای ورود به وبسایت هدف از آن استفاده کند. خوشبختانه این تکنیک از SQL Server 2005 به بعد قابل استفاده نیست، زیرا روال ذخیره شده xp_cmdshell بهطور پیشفرض غیرفعال است و به این دلیل نباید فعال شود.
pass' ;exec master ..xp_cmdshell "net user fromSQL password /add" –
دستور زیر از تکنیکی مشابه حالت قبل برای افزودن حساب کاربری به گروه مدیران محلی سیستم استفاده میکند. بهطوریکه هکر یک در پشتی با قابلیتهای مدیریتی کامل بهدست میآورد. این تکنیک نیز تنها زمانی قابل استفاده است که xp_cmdshell فعال باشد، در حالیکه روی نسخههای جدید SQL Server در حالت پیشفرض غیرفعال است.
pass' ;exec master ..xp_cmdshell "net localgroup administrators fromSQL /add" –
چندین راه وجود دارد که میتوانید مانع پیادهسازی موفقیتآمیز حملات تزریق SQL شوید.
محاورههای پارامتری شده (Parameterized queries): استفاده از پرسوجوهای پارامتری به این معنا است که ورودی بهشکل مستقیم به یک دستور SQL ارسال نمیشود، بلکه در قالب پارامتر برای دستورات ارسال میشود و تنها مقادیر خاصی پذیرفته میشوند. اگر مقدار پارامتر درست باشد، توسط دستورات SQL اجرا میشود. الگوی محاورههای پارامتری یکی از مهمترین مباحث دنیای برنامهنویسی است که باید به آن دقت کنید.
اعتبارسنجی (Validation): برنامهنویسان باید ورودی را تایید کنند و اطمینان حاصل کنند که تعداد نویسههای قابل وارد کردن و نوع نویسههای استفاده شده دارای محدودیت هستند.
Sanitization : برنامهنویسان باید از طریق بهکارگیری الگوهایی مثل عبارات باقاعده هر کاراکتر ورودی دریافتی از کاربر که میتواند کدهای SQL را اجرا کند را شناسایی و پاک کنند. بهعنوان مثال، آنها باید نقطه ویرگول و دو خط تیره را از ورودی حذف کنند.
حملات تزریق SQL
در این تمرین، میخواهیم به بررسی این موضوع بپردازیم که چگونه هکرها میتوانند با انجام یک حمله تزریق SQL به وبسایتی که به SQL Server متصل میشود، نفوذ کرده و امنیت برنامه کاربردی را به چالش بکشند. برای انجام این تمرین، مطمئن شوید که یک سرور SQL نصب شده و یک وبسایت به سرور فوق متصل است.
1. مطمئن شوید که سروری دارید که SQL Server را اجرا میکند و وبسایتی دارید که آن SQL Server را درخواست میکند. همچنین مطمئن شوید که ویندوز 10 و ماشینهای ServerA در حال اجرا هستند.
2. به ماشین مجازیWindows 10 بروید و Internet Explorer را راهاندازی کنید. http://10.0.0.1 را تایپ کنید تا به سایت بروید.
3. برای دور زدن صفحه ورود با یک حمله تزریق SQL، نام کوچک خود را در کادر نام کاربری تایپ کنید و سپس pass' یا 1=1-- را در کادر رمز عبور تایپ کنید و وارد شوید. دقت کنید در اینجا واقعاً نیازی به نام کاربری یا رمز عبور نیست!
4. وقتی یک هکر مطمئن شد که میتواند مکانیزم ورود به سیستم را دور بزند، ممکن است سعی کند اقدامات مخربی علیه دادههای شما انجام دهد، مانند تغییر قیمت همه اجناس:
pass' or 1=1; update title set proce=.5 --
در مرحله بعد، مهاجم ممکن است بخواهد دستورات سیستم عامل را از طریق برنامه وب با استفاده از یک حمله تزریق SQL فراخوانی کند. توجه داشته باشید که برای این کار باید پشتیبانی xp_cmdshell را در SQL Server فعال کنید. در مثال زیر، یک حساب کاربری به نام «fromSQL» ایجاد میکنیم و آن کاربر را با استفاده از تزریق SQL در گروه مدیران قرار میدهیم:
pass' ;exec master..xp_cmdshell "net user fromSQL password /add" --
pass' ;exec master..xp_cmdshell "net localgroup administrators from SQL /add" --
حمله (Dynamic-Link Library Injection)
حمله تزریق کتابخانه پیوند پویا (DLL) سرنام Dynamic-Link Library Injection هنگامی اتفاق میافتد که یک برنامه مجبور است یک DLL را در فضای آدرس خود بارگذاری کند و کد DLL را اجرا کند. کد موجود در DLL میتواند کد مخربی باشد که هکر میخواهد روی سیستم اجرا کند. این بردار حمله پیچیده و ظریف است، بنابراین اگر برنامهنویس در هنگام ساخت برنامههای کاربردی مکانیزمی برای اعتبارسنجی کتابخانه پویا در نظر نگرفته باشد، با موفقیت پیادهسازی میشود.
حملات Buffer Overflow Attacks
بافر ناحیهای از حافظه اصلی است که برای ذخیره اطلاعات ارسال شده به برنامه استفاده میشود. سرریز بافر زمانی است که یک هکر اطلاعات زیادی را به برنامه میفرستد و باعث میشود که اطلاعات از بافر سرریز کنند. بافر را همانند لیوان آبی تصور کنید که گنجایش مشخصی دارد، هنگامی که بیشتر از ظرفیت آب درون لیوان بریزد از آن سرازیر میشود. حمله سرریز بافر نیز دقیقا به همین شکل انجام میشود. شکل زیر نمونه سادهای از پیادهسازی موفقیتآمیز این حمله را نشان میدهد.
اگر هکر بتواند اطلاعاتی در حافظه خارج از ناحیه بافر ذخیره کند، قادر به اجرای هرگونه کدی با مجوز مدیریتی است. نرمافزارهایی که در معرض این مدل حملهها قرار میگیرند، برنامههای کاربردی یا سرویسهای در حال اجرا در پسزمینه سیستم عامل هستند.
حمله Cross-Site Scripting
برنامه نویسی متقابل سایت (XSS) یک شکل محبوب حمله است که شامل وارد کردن کد اسکریپت توسط هکر در فرمی در یک صفحه وب و ارسال کد اسکریپت به سرور است. ایده در اینجا حمله به سرور نیست، بلکه هدف این است که سرور آن اسکریپت را برای کلاینت کند و مرورگر کاربر اسکریپت را تجزیه و اجرا کند. یک مثال ساده که در آن اسکریپت بین سایتی میتواند رخ دهد این است که هکر کد اسکریپت را در فیلدی که در یک پایگاه داده ذخیره شده است ارسال کند. هنگامی که شخص دیگری از سایت بازدید میکند، وب سرور دادههای موجود در پایگاه داده را بر میگرداند و آن را به مرورگر کلاینت ارسال میکند، سپس این کد توسط کلاینت تجزیه و اجرا میشود.
انواع مختلفی از حملات اسکریپت بین سایتی وجود دارد:
■ بازتابی (Reflected): حمله XSS انعکاسی یا بازتابی زمانی است که کد اسکریپت در فرم درج میشود و سپس برای پردازش به سرور ارسال میشود. سرور در آن زمان اسکریپت را به جای ذخیره در پایگاه داده، پردازش میکند.
■ ذخیره شده/دائم (Stored/persistent): حمله XSS ذخیره شده، به عنوان XSS پایدار شناخته میشود، همان چیزی است که قبلاً توضیح داده شد، جایی که هکر اسکریپت را ارسال میکند و سرور آن را در پایگاه داده در پسزمینه ذخیره میکند (مانند سایت فرم بحث). هنگامی که شخصی از سایت بازدید میکند، سایت دادهها را از پایگاه داده بازیابی میکند و محتوای موجود در صفحه HTML را برای کاربر ارسال میکند. مرورگر کاربر HTML را برای ایجاد صفحه میخواند و زمانی که با کد اسکریپت مواجه شد، در سیستم کلاینت اجرا میکند.
یک مثال رایج در ارتباط با حمله XSS علیه یک وب سایت به شرح زیر است:
http://site/processpayment.asp?txtName=<script>alert('hello');</script>
برای جلوگیری از حملات XSS، یک توسعهدهنده میتواند کارهای زیر را انجام دهد:
■ تایید ورودی: برنامهنویسان باید تمام ورودیهای ارائهشده توسط کاربران را هنگام ورود به برنامه تأیید کنند و یا دادههای نامعتبر را رد کنند یا آنها را پاکسازی کنند.
■ دادهها را هنگام نمایش کدگذاری کنید: هنگام دریافت دادهها، توسعهدهندگان میتوانند دادهها را رمزگذاری کنند.
جعل درخواست بین سایتی (Cross-Site Request Forgery)
جعل درخواست بین سایتی (CSRF یا XSRF به اختصار) حملهای است که کاربری را هدف قرار میدهد که قبلاً در یک وب سایت احراز هویت شده است، مانند یک سایت بانکی برای انجام امور بانکی آنلاین. سپس کاربر توسط هکر فریب داده میشود تا یک صفحه وب را اجرا کند. به عنوان مثال، هکر یک پیام ایمیل یا پیام متنی برای کاربر ارسال میکند و کاربر را فریب میدهد تا روی یک لینک کلیک کند. پیوند بارگذاری صفحات وب مخرب را اجرا میکند و دستوراتی (مانند ارسال فرم) را به سایت بانکی که کاربر قبلاً در آن وارد شده است ارسال میکند. در این حالت، نتیجه نهایی این است که کاربر به طور ناآگاهانه میتواند پول را به حساب هکر منتقل کند.
برای جلوگیری از حملات CSRF، توسعهدهندگان برنامه باید از یک توکن همگامسازی با هر تماس استفاده کنند. نشانه همگامسازی یک مقدار رشته مخفی است که فقط توسعهدهنده آنرا میداند، و آنها با هر درخواست HTTP که منطق را در صفحه فراخوانی میکند و نشانه همگامسازی (یک مقدار رشته) را بررسی میکند. به این ترتیب، اگر یک درخواست HTTP وارد شود و توکن همگامسازی در درخواست وجود نداشته باشد، برنامه میداند که نباید درخواست را پردازش میکند، زیرا از پیوندی در برنامه یا وبسایت نیامده است.
Pass the Hash
حمله Pass the Hash زمانی است که مهاجم میتواند هش رمز عبور را از یک سیستم بدست آورد، احتمالاً به دلیل سوء استفاده از یک آسیبپذیری در آن سیستم. هنگامی که آنها هش رمز عبور را از سیستم دریافت کردند، مهاجم سعی میکند با استفاده از نام کاربری و هش رمز عبوری که در حمله قبلی به دست آورده بود (به جای تلاش برای شکستن هش رمز عبور) به سرورهای دیگر در شبکه متصل شود.
افزایش امتیاز (Privilege Escalation)
حمله افزایش امتیاز زمانی است که مهاجم از یک سیستم سوء استفاده میکند و حداقل امتیازات را در آن سیستم دارد که معمولاً امتیازات در سطح کاربر است. سپس مهاجم از یک تکنیک افزایش امتیاز استفاده میکند تا سطح امتیاز خود را بالا ببرد تا در سطح مدیریت به سیستم دسترسی داشته باشد. به عنوان مثال، یک هکر ممکن است از یک سرویس در حال اجرا در سیستم سوء استفاده کند اما متوجه شود که فقط دسترسی در سطح کاربر دارد. پس از اکسپلویت، هکر میتواند از فرآیند دیگری که با امتیازات بالا اجرا میشود، استفاده کند.
SSL Stripping
حمله فوق زمانی است که هکر بتواند خود را بین قربانی و یک سایت امن HTTPS که قربانی استفاده میکند قرار دهد. هنگامی که کاربر درخواستی را به سایت امن ارسال میکند، هکر درخواست را رهگیری میکند و اساساً ارتباط امن خود را با وب سایت مورد نظر ایجاد میکند. در این حالت ارتباط بین قربانی و هکر به ارتباطات HTTP ناامن کاهش مییابد (به هکر اجازه میدهد تمام دادهها را مشاهده کند)، اما ترافیک قربانی سپس با استفاده از HTTPS توسط هکر به سایت امن ارسال میشود.
Driver Manipulation and Refactoring
به دنبال یک ذهنیت بهبود مستمر کد، ما همیشه به دنبال راههای بهتری برای بهبود کد خود هستیم. هنگامی که یک برنامه با مشکل در اجرا روی سیستم عاملی روبرو است، میتوان یک شیم (shim) ایجاد کرد و برای رفع مشکلات سازگاری روی برنامه از آن استفاده کرد. در این حالت به درایور اجازه داده میشود روی سیستم عاملی اجرا شود که درایور با آن مشکلات ناسازگاری دارد. از نقطه نظر امنیتی، شیم کردن یک برنامه میتواند یک بردار جدید برای حملات ایجاد کند، زیرا بازنویسی توابع در یک شیم و اعمال شیم روی برنامه یا درایور میتواند به طور تصادفی یک نقص ایجاد کند یا اگر شخصی که شیم را ایجاد کرده است، عمداً یک نقص ایجاد کند. بازسازی درایور زمانی است که یک درایور دستکاری شده با درایور اصلی جایگزین میشود.
برای مطالعه بخش بعد اینجا کلیک کنید.
برای مطالعه تمام قسمتهای آموزش سکیوریتی پلاس اینجا کلیک کنید.
تبلیغات لینکی:
ماهنامه شبکه را از کجا تهیه کنیم؟
ماهنامه شبکه را میتوانید از کتابخانههای عمومی سراسر کشور و نیز از دکههای روزنامهفروشی تهیه نمائید.
ثبت اشتراک نسخه کاغذی ماهنامه شبکه
ثبت اشتراک نسخه آنلاین
کتاب الکترونیک +Network راهنمای شبکهها
- برای دانلود تنها کتاب کامل ترجمه فارسی +Network اینجا کلیک کنید.
کتاب الکترونیک دوره مقدماتی آموزش پایتون
- اگر قصد یادگیری برنامهنویسی را دارید ولی هیچ پیشزمینهای ندارید اینجا کلیک کنید.
نظر شما چیست؟