در این بخش از دوره آموزشی تست نفوذ سطح متوسط که برگرفته از دوره SEC642 می باشد به آشنایی با Web Design Patterns می پردازیم.
Traditional Web Applications
برنامههای کاربردی سنتی وب بسیار سادهتر بودند – سادهتر به این دلیل که بسیاری از الگوهای طراحی برنامههای کاربردی وب هنوز تازه و جدید بود. اسکریپت نویسی جاوااسکریپت در مراحل ابتدایی خود بوده و منطق سمت سرور به طور سنتی پایه بود.
توسعه دهندگان بیشتر کار خود را در برنامه سمت سرور به دلایل بسیاری انجام میدادند، از جمله در دسترس بودن الگوهای طراحی که برنامههای سمت سرور را احاطه کرده بودند. توسعه دهندگان روشهای سادهای برای انجام دستکاری داده سمت سرور از طریق استفاده از تعاملات پایگاهداده مستقیم در برنامه داشتند. لایههای انتزاعی، پس از چندین تحول در روشی که برنامههای کاربردی وب را توسعه داد، پدیدار شدند.
امروزه، ما بسیاری از این توسعه دهندگان را توسعه دهندگان Full Stack در نظر میگیریم که از لایه پایگاهداده تا لایه Frontend کار میکنند.
سرویسهای وب که در حدود یک دهه پیش وجود داشتند و در اینترنت یافت میشدند، معمولا ساده بودند. زبانهایی که در ابتدا با شبکه جهانی وب سر و کار داشتند شامل Perl بود که در درجه اول یک زبان برنامهنویسی اسکریپتی بود و PHP که در درجه اول به حل مسایل برنامههای کاربردی وب میپرداخت.
Modern Web Applications
چارچوبهای مدرن، به طور کلی، پیچیدگی کاربردهای آنها که ما سعی در آزمایش آنها داریم را افزایش میدهند. آنها همچنین پیچیدگی توسعه را افزایش میدهند که در حال حاضر شامل توسعه تکنولوژیهای جدیدتر سمت مشتری است. برنامههای کاربردی قدیمی به طور کلی بر مرورگرها یا دیگر مصرف کنندگان وب متکی بودند.
امروزه، ما استفاده از تلفن همراه و دیگر برنامههای کاربردی در مقیاس بزرگ را داریم که برای زندگی شرکتهای مدرن حیاتی هستند. به عنوان یک تست نفوذگر، ما متوجه شدیم که بسیاری از اجزای سیستمهای فنآوری اطلاعات نه تنها برای تعامل کاربر، بلکه برای موارد دیگر در سیستمهای زیر ساخت حیاتی نیز از تکنولوژیهای وب استفاده میکنند.
برخی چارچوبهای مدرن شامل منطق سمت سرور برای مدیریت احراز هویت و اعتبارسنجی مانند اپلیکیشنهای سنتی هستند. با رشد معماریهای وب برای رسیدگی به ترافیک و کاربران بیشتر، بخش اعظم منطق کسبوکار به حوزه مشتری منتقل شدهاست، که باعث ایجاد چارچوبهای برنامهنویسی پیچیدهتر در سمت مشتری برای جبران این تغییر شدهاست. این امر همچنین میتواند چالشهای امنیتی بیشتری را برای ما ایجاد کند که اغلب توسعه دهندگان تلاش میکنند از طریق استفاده از رمزنگاری، که در مورد آن بحث خواهیم کرد، آن را کاهش دهند.
همچنین، از طریق استفاده و افزایش این سیستمها، ما چالشهای مقیاس بندی بکاند با پایگاههای داده رابطهای سنتی داریم که ممکن است مقیاس لازم برای رسیدگی به حجم بسیار بالای دادههای Real-Time را نداشته باشند. به همین دلیل، یک دسته جدید از دیتابیسها به نام NoSQL یا در نهایت دیتابیسهای سازگار پدید آمدهاند. ممکن است شما قبلا در مورد این پایگاههای داده در رابطه با واژههای Big Data و Fast Data شنیده باشید.
Web Applications : Visualized
در اینجا چند نمونه از بازیگران اصلی در هر لایه از معماری وب آورده شدهاست.
What Are Web Frameworks
به عنوان یک بررسی، شما باید بفهمید که چارچوبهای وب در کجا مناسب هستند و چرا درک آن ها اهمیت دارد. به طور سنتی، یک توسعه دهنده باید هر صفحهای را از ابتدا ایجاد میکرد، که در این حالت، احتمال تفاوت وجود داشته که میتواند از صفحه به صفحه و از برنامه به برنامه دیگر خود را نشان دهد.
چارچوبهای وب تلاش کردهاند تا این مشکل را با اجازه دادن به هر توسعه دهندهای که از آن چارچوب برای داشتن یک نقطه شروع برای توسعه استفاده میکند، اصلاح کنند، که همچنین به این معنی است که توسعه دهندگان میتوانند به سرعت برنامههای کاربردی جدید را ایجاد کنند. از آنجا که شما به دامنه کامل اسناد و مدارک چارچوب کاربرد دسترسی دارید، اکنون میتوانید به دنبال اشکالات، خطاها و کل مشکلاتی که وجود دارند باشید.
چارچوبهای مدرن حفاظتهای امنیتی اساسی را در نظر میگیرند که این موارد شامل تلاش برای اصلاح باگ هایCSRF، ایجاد پویا URL ها، اطمینان از اجرای مجوز هر صفحه و موارد دیگر است. اگرچه، در ظاهر، این گزینهها منجر به ایمن تر شدن سامانه شده و کار تست نفوذگر را سخت تر می کنند، ولی هنوز هم امکان وجود آسیبپذیریهای مختلف و همچنین بهره برداری از آن ها وجود دارد.
شما همچنین باید برخی اصول اولیه علوم کامپیوتر را در اینجا قبل از ادامه آن درک کنید. MVC که مخفف Model View Controller می باشد، تکنیکی است که در دهه ۷۰ پیشگام بوده و بعدا به عنوان مفهومی در زبانهای برنامه نویسی شی گرا و به ویژه در دنیای وب معرفی شد. مفاهیم MVC در سمت سرور و اخیرا در سمت مشتری مورد استفاده قرار گرفتهاند. اگر شما این تکنیک بنیادی را درک نکنید، ممکن است برخی موارد را شناسایی نکرده و یا در شناسایی آنها دچار مشکل شوید.
Why Pen Testers Should Care
همانطور که گفته شد، چارچوبهای وب پیچیدگی یک اپلیکیشن را افزایش میدهند. این کار را به چند روش انجام میدهد. اول، تعداد درخواستها و پارامترهایی که مرورگرها میسازند را افزایش میدهد. دوم، رویکرد ما را به طور کامل تغییر میدهد زیرا کلاسهای خاصی از باگها ممکن است در یک چارچوب وجود نداشته باشد زیرا برخی اشتباهات و مشکلات امنیتی توسط خود چارچوب در نظر گرفته میشوند.
اگرچه پیچیدگی، به عنوان یک مشکل برای تست نفوذگران است، اما یک مزیت عمده نیز در این بخش وجود دارد که ما با آشنا شدن با چارچوبهای اصلی، آن را به دست میآوریم. آشنایی با یک چارچوب ما را قادر میسازد تا آزمونهای خود را بهینه کنیم. اول، ما میتوانیم آسیبپذیریهای شناختهشده را در این چارچوب شناسایی کنیم. دوم، میتوانیم خطاهای متداول و نقاط ضعف شناختهشده در هر چارچوب را آزمایش کنیم.
Frontend Web Frameworks
اگرچه تمرکز بر چارچوبهای سمت سرور رایج است، اما نوع جدیدی از چارچوبهای سمت مشتری وجود دارد که هدف از آن نشان دادن کاستیهای عمده در JavaScript است. اگرچه برخی از چارچوبهای اولیه مانند JQuery با هدف فراهم کردن پیادهسازی اولیه یک کتابخانه که بتواند توسعه سریع JavaScript را نشان دهد، انجام شدهاست، اما چارچوبهای دیگر مانند Angular.js یک طرح MVC مانند را با انجام کارهایی که قبلا هرگز انجام نداده اند، از جمله فراهم کردن امکان وارد کردن کتابخانههای دیگر در JavaScript فراهم میکنند.
Angular.js، DOM را از منطق Client-Side Application جدا میکند. این موضوع، تبدیل به یک بردار حمله جدید و جالب میشود.
در عین حال، با CSS بسیاری از افراد چارچوبهای سریعی ایجاد کرده و از تکنیکهایی برای گرفتن CSS و اجرای آنها از طریق کامپایلرهای بهینهسازی شده استفاده میکنند. این چارچوبها جدید هستند و معمولا توسط تسترها نادیده گرفته میشوند. البته درک این موارد نیز در شناسایی برخی حملات مفید میباشد.
Server Frameworks
چارچوبهای Backend بر روی سرور وب مینشینند و کار خود را انجام میدهند. بر خلاف چارچوب های Frontend، کد Backend برای مهاجم (و ما) قابل رویت و در دسترس نیستند.
زمانی که چارچوبها رشد کردند و در طول سالها تغییر کردند، آنها محافظتها و ویژگیهای جدیدی را معرفی کردند، در حالی که کلاسهای باگ جدید همزمان روشهای نوآورانه ای را برای سو استفاده از سطوح حمله پیدا کردند.