অটোরেপ্রো গ্রেডল প্লাগইনটি অ্যান্ড্রয়েড ট্রেড ফেডারেশন টেস্ট হার্নেসের উপরে তৈরি করা হয়েছে যাতে অ্যান্ড্রয়েড সিকিউরিটি বুলেটিনে দুর্বলতার বিরুদ্ধে সুরক্ষা প্যাচ পরীক্ষার জন্য সমস্ত অ্যান্ড্রয়েড ডিভাইস পরীক্ষা করা যায়। এই পরীক্ষাগুলি কেবলমাত্র সেই সংশোধনগুলির জন্য যা একটি সাধারণ দুর্বলতা এবং এক্সপোজার (CVE) এর সাথে সম্পর্কিত বা যুক্ত হবে।
এই প্লাগইনটি অ্যান্ড্রয়েড স্টুডিও অথবা স্ট্যান্ডার্ড অ্যান্ড্রয়েড এসডিকে ব্যবহার করে অ্যান্ড্রয়েড সোর্স ট্রির বাইরে ট্রেডফেড পরীক্ষা ডেভেলপ করার অনুমতি দেয়। এতে ট্রেডফেড পরীক্ষা তৈরি এবং চালানোর জন্য প্রয়োজনীয় সমস্ত ইউটিলিটি অন্তর্ভুক্ত রয়েছে।
এটি প্রাথমিকভাবে অ্যান্ড্রয়েড ভালনারেবিলিটি রিওয়ার্ডস প্রোগ্রামের জন্য স্বয়ংক্রিয়ভাবে পুনরুৎপাদনযোগ্য প্রমাণ-ধারণা জমা দেওয়ার জন্য ব্যবহৃত হয়।
সরাসরি ডাউনলোড করুন অটোরেপ্রো উদাহরণ
অটোরেপ্রো উদাহরণ এবং টেমপ্লেট ব্রাউজ করুন
পূর্বশর্ত
৬৪-বিট লিনাক্স পিসির জন্য নির্দেশাবলী দেওয়া আছে।
- অ্যান্ড্রয়েড স্টুডিও লেডিবাগ বা নতুন - আপনার ডিস্ট্রোর প্যাকেজ ম্যানেজার থেকেও ইনস্টল করা যেতে পারে।
- অ্যান্ড্রয়েড এসডিকে প্ল্যাটফর্ম টুলস (
adb,fastboot) - ইনস্টল করা এবং আপনার$PATHএ থাকা প্রয়োজন (অর্থাৎ, আপনি কমান্ড লাইন থেকেadbচালাতে সক্ষম হবেন)। প্ল্যাটফর্ম টুলস ইনস্টল করার সবচেয়ে সহজ উপায় হল আপনার ডিস্ট্রোর প্যাকেজ ম্যানেজার ব্যবহার করা।- যদি আপনি স্বতন্ত্র প্ল্যাটফর্ম টুলের পরিবর্তে অ্যান্ড্রয়েড স্টুডিওর SDK ম্যানেজার ব্যবহার করেন, তাহলে কমান্ড-লাইন ডেভেলপমেন্টের জন্য আপনার
$PATHতে SDK-এরplatform-toolsডিরেক্টরি যোগ করতে ভুলবেন না।
- যদি আপনি স্বতন্ত্র প্ল্যাটফর্ম টুলের পরিবর্তে অ্যান্ড্রয়েড স্টুডিওর SDK ম্যানেজার ব্যবহার করেন, তাহলে কমান্ড-লাইন ডেভেলপমেন্টের জন্য আপনার
- AAPT2 . - আপনার ডিস্ট্রোর প্যাকেজ ম্যানেজার ব্যবহার করেও ইনস্টল করা যেতে পারে।
- জাভা JDK 21 বা তার পরবর্তী সংস্করণ - Android SDK এবং Gradle এর সাথে সামঞ্জস্যপূর্ণ।
অ্যান্ড্রয়েড স্টুডিও ব্যবহার শুরু করুন
উদাহরণ বা টেমপ্লেটটি বের করার পর, Android Studio-তে একটি বিদ্যমান প্রকল্প হিসেবে ডিরেক্টরিটি খুলুন এবং Gradle সিঙ্ক সম্পূর্ণ হওয়ার জন্য অপেক্ষা করুন। বেশ কয়েকটি পূর্ব-কনফিগার করা Android Studio রান কনফিগারেশন রয়েছে।
গ্রেডল কাজ:
-
assembleSubmissionSources- জমা দেওয়ার জিপের জন্য সোর্স ফাইলগুলো একত্রিত করুন। -
assembleSubmissionZip- আপলোডের জন্য জমা দেওয়ার জিপটি একত্রিত করুন। -
copyInvocationResultsToSubmission- পর্যালোচনা প্রক্রিয়ায় সহায়তা করার জন্য পূর্ববর্তী Tradefed ইনভোকেশন থেকে ফলাফল AutoRepro জমা দেওয়ার উৎস ডিরেক্টরিতে কপি করুন। মনে রাখবেন যে এতে হোস্ট এবং ডিভাইস উভয়ের লগ রয়েছে; এটি চালানোর আগে বা পরে বিষয়বস্তু পর্যালোচনা করুন।
অটোরেপ্রো ইনভোকেশন অ্যান্ড্রয়েড স্টুডিও রান কনফিগারেশন:
-
autorepro_nonroot_arm64 -
autorepro_nonroot_x86_64 -
autorepro_root_arm64 -
autorepro_root_x86_64
লঞ্চার কনফিগারেশনগুলি autorepro_{device_root}_{device_arch} আকারে রয়েছে। সাধারণত nonroot ব্যবহার করাই ভালো কারণ root-এর জন্য প্রয়োজনীয় দুর্বলতাগুলি কম গুরুতর। তবে, সেটআপ বা পরিষ্কার করার জন্য root ব্যবহার করা গ্রহণযোগ্য হতে পারে যতক্ষণ না এটি স্পষ্টভাবে নথিভুক্ত থাকে এবং সাধারণত একটি বৈধ nonroot অবস্থা হিসাবে গৃহীত হয়। উদাহরণস্বরূপ, দ্বিতীয় ডিভাইস এবং একাধিক সিম কার্ডের প্রয়োজন এড়াতে ডিভাইসে টেক্সট বার্তা পাঠানোর জন্য root ব্যবহার করা গ্রহণযোগ্য।
এগুলো আপনার পরীক্ষার জন্য ট্রেডফেড চালু করবে। ট্রেডফেড একটি বৈধ ডিভাইস সংযুক্ত হওয়ার জন্য অপেক্ষা করে, তাই নিশ্চিত করুন যে এটি সংযুক্ত এবং ADB ডিবাগিং অনুমোদিত।
কোডিং এজেন্টদের সাথে ইন্টিগ্রেশন
উদাহরণ এবং টেমপ্লেটগুলি একটি AGENTS.md প্রসঙ্গ ফাইল প্রদান করে যা Android Studio, Gemini CLI এবং অন্যান্য কোডিং এজেন্টের সাথে সামঞ্জস্যপূর্ণ। এতে সাবমিশন স্ট্রাকচারিং সম্পর্কে মতামত এবং AutoRepro ব্যবহারের নির্দেশাবলী রয়েছে। আপনি এটি ব্যবহার করতে পারেন:
- আপনার ডিভাইসের জন্য স্বয়ংক্রিয়ভাবে AutoRepro চালান
- আপনার প্রতিবেদন দ্রুত গৃহীত হতে সাহায্য করতে পারে এমন পরিবর্তনগুলির জন্য একটি বিদ্যমান জমা কোড পর্যালোচনা করুন।
- দুর্বলতা সম্পর্কে তথ্য প্রদান করে একটি নতুন PoC গঠনে সহায়তা করুন।
একটি অটোরেপ্রো পরীক্ষা লিখুন
একটি অটোরেপ্রো পরীক্ষার তিনটি অংশ এবং তিনটি সংশ্লিষ্ট গ্রেডল প্লাগইন রয়েছে:
- Gradle plugin
id("com.android.security.autorepro.javahosttest")একক হোস্ট-সাইড ট্রেডফেড পরীক্ষা যা ADB এর মাধ্যমে ডিভাইসের সাথে ইন্টারঅ্যাক্ট করে। উদাহরণটিsubmission/hostTest/ডিরেক্টরিতে এটি ব্যবহার করে। - Gradle plugin
id("com.android.security.autorepro.apptest")একটি অ্যাপ বা সার্ভিস APK যাadb installমাধ্যমে ডিভাইসে ইনস্টল করা হয় এবং হোস্ট-সাইড টেস্ট দ্বারা চালু করা হয়। অ্যাপ বা সার্ভিসে JUnit অ্যাসারেন্সের নিজস্ব সেটও থাকতে পারে যা হোস্ট-সাইড রানারকে রিপোর্ট করা হয়। উদাহরণটিsubmission/appTest/এবং ডিরেক্টরিতে এটি ব্যবহার করে। - Gradle plugin
id("com.android.security.autorepro.ndktest")একটি ঐচ্ছিক NDK-ভিত্তিক প্রুফ-অফ-কনসেপ্ট আক্রমণ যাadb pushএর মাধ্যমে ডিভাইসে পুশ করা হয় এবং হোস্ট-সাইড টেস্ট দ্বারা কার্যকর করা হয়। উদাহরণটিsubmission/ndkTest/ডিরেক্টরিতে এটি ব্যবহার করে।
একটি সাধারণ অটোরেপ্রো পরীক্ষা প্রবাহ সাধারণত দুটি প্যাটার্নের একটি অনুসরণ করে:
যন্ত্রচালিত পরীক্ষার অ্যাপ:
- হোস্ট-সাইড পরীক্ষাটি ডিভাইসে একটি ইন্সট্রুমেন্টেড অ্যাপ বা পরিষেবা সমন্বিত একটি APK পুশ করে।
- হোস্ট-সাইড পরীক্ষাটি ডিভাইস-সাইড JUnit পরীক্ষাগুলি শুরু করে যা
runDeviceTest()এর মাধ্যমে APK এর সাথে বান্ডিল করা হয়। - ডিভাইস-সাইড JUnit UIAutomator ব্যবহার করে বোতাম ট্যাপ পরীক্ষা করে এবং অ্যাপটি পর্যবেক্ষণ করে, অথবা অন্যথায় এমনভাবে অ্যান্ড্রয়েড API গুলি অ্যাক্সেস করে যা সুরক্ষা দুর্বলতা প্রকাশ করে।
- ডিভাইস-সাইড JUnit পরীক্ষার সাফল্য বা ব্যর্থতা হোস্ট-সাইড পরীক্ষায় ফেরত পাঠানো হয়, যা পরীক্ষাটি পাস করেছে কিনা তা নির্ধারণ করতে ব্যবহার করা যেতে পারে। ব্যর্থতার বার্তায় কেন দাবিটি ব্যর্থ হয়েছে এবং দুর্বলতার প্রমাণ হিসাবে কোনও নির্দিষ্ট বস্তু, মান, ব্যতিক্রম, স্ট্যাকট্রেস বা অন্যান্য শিল্পকর্ম সম্পর্কে বিস্তারিত তথ্য থাকা উচিত।
NDK ধারণার প্রমাণ:
- হোস্ট-সাইড পরীক্ষাটি ডিভাইসে একটি লিনাক্স এক্সিকিউটেবল পুশ করে এবং চালু করে।
- নেটিভ প্রোগ্রামটি ক্র্যাশ করে অথবা একটি নির্দিষ্ট এক্সিট কোড ফেরত দেয়।
- হোস্ট-সাইড পরীক্ষা ক্র্যাশ পরীক্ষা করে, লগক্যাট ব্যাকট্রেস দেখে, অথবা আক্রমণ সফল হয়েছে কিনা তা নির্ধারণের জন্য নির্দিষ্ট প্রস্থান কোড অনুসন্ধান করে। ব্যর্থতার বার্তায় কেন দাবিটি ব্যর্থ হয়েছে তার বিস্তারিত তথ্য এবং দুর্বলতার প্রমাণ হিসাবে কোনও নির্দিষ্ট কাঠামো, মান, স্ট্যাকট্রেস বা অন্যান্য শিল্পকর্ম থাকা উচিত।
দুটি প্যাটার্নের সমন্বয় (উদাহরণস্বরূপ, ডিভাইস-সাইড পরীক্ষার সাথে একটি নেটিভ প্রোগ্রাম চালানো)ও সম্ভব। কিছু অন্যান্য ইন্সট্রুমেন্টেশন ফ্রেমওয়ার্ক, যেমন frida-inject ,ও উপলব্ধ। বিস্তারিত জানার জন্য, সিকিউরিটি টেস্ট স্যুট রেফারেন্স ডক্স এবং ট্রেডফেড রেফারেন্স ডক্স দেখুন।
ধারণার প্রমাণ প্রমাণীকরণ কাঠামো
একটি উচ্চমানের PoC-কে কেবল একটি বাগ ট্রিগার করার চেয়ে আরও বেশি কিছু করতে হবে; এটি যাচাইযোগ্য প্রমাণ প্রদান করবে যে একটি নিরাপত্তা সীমা অতিক্রম করা হয়েছে। এটি অর্জনের জন্য, PoC-গুলি একটি নির্দিষ্ট তিন-পদক্ষেপ "ব্যর্থ-তারপর-সফল" প্যাটার্ন অনুসরণ করতে পারে:
- সেটআপ: প্রয়োজনীয় অ্যাপ ইনস্টল করে, ফাইল পুশ করে এবং এক্সপ্লয়েটের ঠিক আগে ডিভাইসটি নির্দিষ্ট অবস্থায় আছে কিনা তা নিশ্চিত করে ডিভাইসটি প্রস্তুত করুন। (যদি ন্যায্যতা থাকে এবং বাস্তবসম্মত শেষ-ব্যবহারকারী অবস্থার প্রতিনিধিত্ব করে তবে কনফিগারেশনের জন্য রুট ব্যবহার অনুমোদিত)।
- সীমানা প্রমাণ করুন: দুর্বলতা ট্রিগার করার আগে, লক্ষ্য ক্রিয়াটি চেষ্টা করুন এবং দাবি করুন যে এটি ব্যর্থ হয়েছে । উদাহরণস্বরূপ, যদি শোষণকারী একটি সুরক্ষিত ফাইল পড়ার অনুমতি দেয়, তাহলে আপনাকে প্রথমে এটি পড়ার চেষ্টা করতে হবে এবং নিশ্চিত করতে হবে যে আপনি "অনুমতি অস্বীকার" ত্রুটি পেয়েছেন।
- ট্রিগার এবং যাচাই: দুর্বলতা ট্রিগার করুন, তারপর অবিলম্বে ধাপ ২ থেকে পদক্ষেপটি পুনরাবৃত্তি করুন। একটি দুর্বল ডিভাইসে, এই ক্রিয়াটি এখন সফল হওয়া উচিত। এটি যাচাই করার জন্য, আপনাকে একটি দুর্বল ডিভাইসে ব্যর্থ হওয়া একটি দাবি ব্যবহার করতে হবে যার শুরুতে সঠিক উপসর্গ
AUTOREPRO_VULNERABILITY_PROVEN:দিয়ে বার্তাটি থাকবে। এই বার্তায় দুর্বলতা এবং যেকোনো ক্যাপচার করা শিল্পকর্মের (যেমন ফাঁস হওয়া ডেটা বা অপ্রত্যাশিত অবস্থা) একটি সংক্ষিপ্ত বিবরণ অন্তর্ভুক্ত করতে হবে যাতে নিশ্চিতভাবে প্রমাণ করা যায় যে শোষণ সফল হয়েছে।
উদাহরণ:
@Test
public void testPoc() throws Exception {
// 1. Setup: Prepare the device.
setup();
// 2. Prove the Boundary: Assert the resource is protected BEFORE the exploit.
// This passes on all devices (safe or vulnerable) before the trigger runs.
assertDeviceIsSecure();
// 3. Trigger & Verify: Execute the exploit logic, then immediately repeat
// the action from Step 2. On a vulnerable device, this action should now
// succeed, causing assertDeviceIsSecure() to fail with an
// AUTOREPRO_VULNERABILITY_PROVEN message.
triggerExploit();
assertDeviceIsSecure();
}
private void assertDeviceIsSecure() {
try {
String content = readProtectedFile();
// Where possible, put the content in the assertion message.
// Start the assertion message with "AUTOREPRO_VULNERABILITY_PROVEN:".
Assert.fail("AUTOREPRO_VULNERABILITY_PROVEN: Successfully read protected file. Content: '" + content + "'");
} catch (ThisVulnSpecificException e) {
Log.i(TAG, "protected against reading protected file", e);
}
}
আমার প্রুফ-অফ-কনসেপ্ট আক্রমণের জন্য কোনও পরীক্ষামূলক অ্যাপ বা নেটিভ এক্সিকিউটেবলের প্রয়োজন নেই।
বেশিরভাগ পরীক্ষায় ডিভাইস-সাইড অ্যাপ এবং নেটিভ এক্সিকিউটেবল উভয়েরই প্রয়োজন হবে না।
যদি আপনার পরীক্ষায় কোনও বৈশিষ্ট্য ব্যবহার না করা হয়, তাহলে অপ্রয়োজনীয় gradle সাবপ্রজেক্ট ডিরেক্টরিগুলি মুছে ফেলুন।
আমার প্রুফ-অফ-কনসেপ্ট আক্রমণে দ্বিতীয় একটি অ্যাপ বা পরিষেবা জড়িত
AutoRepro প্লাগইন দিয়ে যত খুশি Gradle সাবপ্রজেক্ট যোগ করুন।
অটোরেপ্রো পরীক্ষা জমা দিন
জমা দেওয়ার অংশ হিসেবে আপনার ডিভাইস থেকে পরীক্ষার ফলাফল অন্তর্ভুক্ত করতে:
- ঐচ্ছিকভাবে, যেকোনো পুরানো টেস্ট রান মুছে ফেলার জন্য Gradle
cleanটাস্কটি চালান। - আপনার পরীক্ষার জন্য Tradefed ব্যবহার করতে এবং লগ এবং ফলাফল সংগ্রহ করতে উপযুক্ত AutoRepro রান কনফিগারেশনটি চালান।
- লগ এবং ফলাফল জমা দেওয়ার সোর্স ডিরেক্টরিতে কপি করতে
copyInvocationResultsToSubmissionটাস্কটি চালান।
submission/build/autorepro-submission.zip ফাইল তৈরি করতে assembleSubmissionZip চালান। আপনার জমা দেওয়ার সাথে সাথে সেই ফাইলটি Android Vulnerability Reward Program-এ আপলোড করুন। নিশ্চিত করুন যে সংযুক্তিটি *autorepro-submission*.zip প্যাটার্নের সাথে মেলে এবং এটি প্রাথমিক প্রতিবেদনের সাথে আপলোড করা হয়েছে। দেরিতে জমা আপলোড করলে আপনার প্রতিবেদনটি সঠিকভাবে পর্যালোচনা করার আমাদের ক্ষমতা প্রভাবিত হবে।