পাইথন স্যান্ডবক্সিং শক্ত । পাইথন সহজাতভাবে অন্তর্মুখী, একাধিক স্তরে।
এর অর্থ হ'ল আপনি সেই ধরণের নিজস্ব থেকে নির্দিষ্ট ধরণের কারখানার পদ্ধতিগুলি নিজেরাই সন্ধান করতে পারেন এবং নতুন নিম্ন-স্তরের অবজেক্ট তৈরি করতে পারেন, যা দোভাষী দ্বারা সরাসরি সীমাবদ্ধতা ছাড়াই পরিচালিত হবে।
পাইথন স্যান্ডবক্সগুলি ভেঙে ফেলার সৃজনশীল উপায়গুলি খুঁজে পাওয়ার কয়েকটি উদাহরণ এখানে রয়েছে:
নেড ব্যাচেল্ডার একটি বিক্ষোভ দিয়ে শুরু করেছিলেন যে সত্যই কতটা বিপজ্জনকeval()
; eval()
পাইথন এক্সপ্রেশনগুলি প্রায়শই সম্পাদন করতে ব্যবহৃত হয়; ওয়ান-লাইনারগুলির জন্য একটি আদিম এবং নিষ্পাপ স্যান্ডবক্স হিসাবে।
তারপরে তিনি পাইথন 3- তে একই নীতিগুলি চেষ্টা এবং প্রয়োগ অব্যাহত রেখেছিলেন , শেষ পর্যন্ত কিছু সহায়ক পয়েন্টার দিয়ে বেরিয়ে আসতে সক্ষম হন ।
পাইরে বোর্ডন হ্যাক-এ-থন-তে পাইথন সিস্টেম হ্যাক করতে অনুরূপ কৌশল ব্যবহার করে
প্রাথমিক ধারণাটি সর্বদা বেস পাইথন প্রকার তৈরির উপায় অনুসন্ধান করা; ফাংশন এবং ক্লাস এবং পাইথন ইন্টারপ্রেটারকে স্বেচ্ছাসেবক (পরীক্ষা না করা!) বাইটকোড কার্যকর করার জন্য শেলটি ভেঙে দেয়।
একই এবং আরও exec
বিবৃতিতে প্রযোজ্য ( exec()
পাইথন 3 এ ফাংশন)।
সুতরাং, আপনি চান:
পাইথন কোডের বাইট সংকলনটি কঠোরভাবে নিয়ন্ত্রণ করুন বা কমপক্ষে পোস্ট-প্রক্রিয়া করে আন্ডারস্কোর দিয়ে শুরু হওয়া নামের কোনও অ্যাক্সেস সরিয়ে নিতে বাইটকোড পোস্ট করুন।
পাইথন ইন্টারপ্রেটার কীভাবে কাজ করে এবং পাইথন বাইটকোড কীভাবে কাঠামোগত হয় তার অন্তরঙ্গ জ্ঞান প্রয়োজন। কোড অবজেক্টগুলি নেস্টেড; মডিউলটির বাইটকোড কেবলমাত্র বিবৃতিগুলির শীর্ষ স্তরকে কভার করে, প্রতিটি ফাংশন এবং শ্রেণিতে তাদের নিজস্ব বাইকোড সিকোয়েন্স প্লাস মেটাডেটা থাকে, উদাহরণস্বরূপ নেস্টেড ফাংশন এবং ক্লাসের জন্য অন্যান্য বাইটকোড অবজেক্ট থাকে।
আপনার ব্যবহার করা যেতে পারে এমন মডিউলগুলি হোয়াইটলিস্ট করতে হবে। সাবধানে।
পাইথন মডিউলটিতে অন্যান্য মডিউলগুলির উল্লেখ রয়েছে । আপনি যদি আমদানি করেন তবে আপনার মডিউল নেমস্পেসে os
একটি স্থানীয় নাম os
রয়েছে যা os
মডিউলটিকে বোঝায় । এটি একটি নির্ধারিত আক্রমণকারীকে মডিউলগুলিতে নিয়ে যেতে পারে যা তাদের স্যান্ডবক্স থেকে বেরিয়ে আসতে সহায়তা করতে পারে। pickle
মডিউল, উদাহরণস্বরূপ, আপনি উদাহরণস্বরূপ নির্বিচারে কোড বস্তু লোড, তাই যদি করতে দেয় কোন থেকে পরিচ্ছন্ন তালিকাতে যুক্ত মডিউল বিশালাকার মাধ্যমে পাথ pickle
মডিউল, আপনি কি এখনও একটি সমস্যা আছে।
আপনার সময় কোটা কঠোরভাবে সীমাবদ্ধ করতে হবে। এমনকি সর্বাধিক নিবিড়িত কোড এখনও আপনার সংস্থানগুলি বেঁধে চিরকালের জন্য চালানোর চেষ্টা করতে পারে।
সীমাবদ্ধ পাইথনটি একবার দেখুন , যা আপনাকে কড়া বাইটকোড নিয়ন্ত্রণ দেওয়ার চেষ্টা করে। RestrictedPython
পাইথন কোডটিকে এমন কিছুতে রূপান্তরিত করে যা আপনাকে পাইথন ২.৩-এ কী কী নাম, মডিউল এবং অবজেক্টগুলিকে অনুমতি দেয় তা নিয়ন্ত্রণ করতে দেয় 7.7 এর মাধ্যমে।
যদি RestrictedPython
আপনার উদ্দেশ্যগুলির জন্য যথেষ্ট সুরক্ষিত থাকে তবে আপনি যে নীতিগুলি প্রয়োগ করেন তার উপর নির্ভর করে। একটি আন্ডারস্কোর দিয়ে শুরু হওয়া নামগুলিতে অ্যাক্সেস না দেওয়া এবং মডিউলগুলিকে কঠোরভাবে সাদা তালিকাভুক্ত করা একটি শুরু হবে।
আমার মতে, একমাত্র সত্যিকারের শক্তিশালী বিকল্প হ'ল পৃথক ভার্চুয়াল মেশিন ব্যবহার করা, বাইরের বিশ্বে কোনও নেটওয়ার্ক অ্যাক্সেস না থাকা এমন একটি যা আপনি প্রতিটি রান করার পরে ধ্বংস করেন। প্রতিটি নতুন স্ক্রিপ্ট পরিবর্তে একটি নতুন ভিএম দেওয়া হয়। এই পদ্ধতিটি এমনকি যদি কোডটি আপনার পাইথন স্যান্ডবক্সটি ভেঙে ফেলতে পরিচালিত করে (যা সম্ভাবনা নয়) সমস্ত আক্রমণকারী অল্পকালীন এবং মূল্যহীন।