অ্যান্ড্রয়েড সিকিউরিটি অটোরিপ্রো

অটোরেপ্রো গ্র্যাডল প্লাগইনটি অ্যান্ড্রয়েড ট্রেড ফেডারেশন টেস্ট হারনেসের উপর ভিত্তি করে তৈরি করা হয়েছে, যা অ্যান্ড্রয়েড সিকিউরিটি বুলেটিনে থাকা দুর্বলতাগুলোর বিরুদ্ধে নিরাপত্তা প্যাচ পরীক্ষার জন্য সমস্ত অ্যান্ড্রয়েড ডিভাইস পরীক্ষা করে। এই পরীক্ষাগুলো শুধুমাত্র সেইসব সমাধানের জন্য করা হয়, যেগুলো কমন ভালনারেবিলিটিজ অ্যান্ড এক্সপোজারস (CVE)-এর সাথে সম্পর্কিত বা ভবিষ্যতে সম্পর্কিত হবে।

এই প্লাগইনটি অ্যান্ড্রয়েড স্টুডিও অথবা স্ট্যান্ডার্ড অ্যান্ড্রয়েড এসডিকে ব্যবহার করে অ্যান্ড্রয়েড সোর্স ট্রি-এর বাইরে ট্রেডফেড টেস্ট তৈরি করার সুযোগ দেয়। একটি ট্রেডফেড টেস্ট বিল্ড ও রান করার জন্য প্রয়োজনীয় সমস্ত ইউটিলিটি এতে অন্তর্ভুক্ত রয়েছে।

এটি প্রধানত অ্যান্ড্রয়েড ভালনারেবিলিটি রিওয়ার্ডস প্রোগ্রামের জন্য স্বয়ংক্রিয়ভাবে পুনরুৎপাদনযোগ্য প্রুফ-অফ-কনসেপ্ট জমা দিতে ব্যবহৃত হয়।

সরাসরি ডাউনলোড অটোরেপ্রো উদাহরণ

AutoRepro-এর উদাহরণ এবং টেমপ্লেটগুলি ব্রাউজ করুন

পূর্বশর্ত

৬৪-বিট লিনাক্স পিসির জন্য নির্দেশাবলী দেওয়া হয়েছে।

  • অ্যান্ড্রয়েড স্টুডিও লেডিবাগ বা নতুন সংস্করণ - আপনার ডিস্ট্রোর প্যাকেজ ম্যানেজার থেকেও ইনস্টল করা যেতে পারে।
  • অ্যান্ড্রয়েড এসডিকে প্ল্যাটফর্ম টুলস ( adb , fastboot ) - এগুলো ইনস্টল করা এবং আপনার $PATH অন্তর্ভুক্ত থাকা প্রয়োজন (অর্থাৎ, আপনি কমান্ড লাইন থেকে adb চালাতে সক্ষম হবেন)। প্ল্যাটফর্ম টুলস ইনস্টল করার সবচেয়ে সহজ উপায় হলো আপনার ডিস্ট্রোর প্যাকেজ ম্যানেজার ব্যবহার করা।
    • স্বতন্ত্র প্ল্যাটফর্ম টুলসের পরিবর্তে অ্যান্ড্রয়েড স্টুডিওর এসডিকে ম্যানেজার ব্যবহার করলে, কমান্ড-লাইন ডেভেলপমেন্টের জন্য এসডিকে-র platform-tools ডিরেক্টরিটি আপনার $PATH এ যোগ করতে মনে রাখবেন।
  • AAPT2 . - এটি আপনার ডিস্ট্রোর প্যাকেজ ম্যানেজার ব্যবহার করেও ইনস্টল করা যায়।
  • জাভা জেডিকে ২১ বা তার নতুন সংস্করণ - অ্যান্ড্রয়েড এসডিকে এবং গ্রেডলের সাথে সামঞ্জস্যপূর্ণ।

অ্যান্ড্রয়েড স্টুডিও ব্যবহার শুরু করুন

উদাহরণ বা টেমপ্লেটটি এক্সট্র্যাক্ট করার পর, ডিরেক্টরিটি অ্যান্ড্রয়েড স্টুডিওতে একটি বিদ্যমান প্রজেক্ট হিসেবে খুলুন এবং গ্রেডল সিঙ্ক সম্পূর্ণ হওয়া পর্যন্ত অপেক্ষা করুন। অ্যান্ড্রয়েড স্টুডিওতে আগে থেকে কনফিগার করা বেশ কিছু রান কনফিগারেশন রয়েছে।

গ্রেডল টাস্ক:

  • assembleSubmissionSources - সাবমিশন জিপ ফাইলের জন্য সোর্স ফাইলগুলো একত্রিত করুন।
  • assembleSubmissionZip - আপলোডের জন্য সাবমিশন জিপ ফাইলটি একত্রিত করুন।
  • copyInvocationResultsToSubmission - পর্যালোচনা প্রক্রিয়ায় সহায়তা করার জন্য পূর্ববর্তী Tradefed ইনভোকেশনগুলোর ফলাফল AutoRepro সাবমিশন সোর্স ডিরেক্টরিতে কপি করে। মনে রাখবেন, এতে হোস্ট এবং ডিভাইস উভয়ের লগ রয়েছে; এটি চালানোর আগে বা পরে এর বিষয়বস্তু পর্যালোচনা করুন।

অটোরিপ্রো আহ্বান অ্যান্ড্রয়েড স্টুডিও রান কনফিগারেশন:

  • autorepro_nonroot_arm64
  • autorepro_nonroot_x86_64
  • autorepro_root_arm64
  • autorepro_root_x86_64

লঞ্চারের কনফিগারেশনগুলো autorepro_{device_root}_{device_arch} আকারে থাকে। সাধারণত নন-রুট ব্যবহার করা শ্রেয়, কারণ এতে রুটের প্রয়োজন হয় এমন দুর্বলতাগুলো কম গুরুতর হয়। তবে, সেটআপ বা ক্লিনআপের জন্য রুট ব্যবহার করা গ্রহণযোগ্য হতে পারে, যদি তা স্পষ্টভাবে নথিভুক্ত থাকে এবং সাধারণভাবে একটি বৈধ নন-রুট অবস্থা হিসেবে স্বীকৃত হয়। উদাহরণস্বরূপ, দ্বিতীয় ডিভাইস এবং একাধিক সিম কার্ডের প্রয়োজনীয়তা এড়াতে ডিভাইসে নকল টেক্সট মেসেজ পাঠানোর জন্য রুট ব্যবহার করা গ্রহণযোগ্য।

এগুলো আপনার পরীক্ষার জন্য ট্রেডফেড চালু করবে। ট্রেডফেড একটি বৈধ ডিভাইস সংযুক্ত হওয়ার জন্য অপেক্ষা করে, তাই নিশ্চিত করুন যে একটি ডিভাইস সংযুক্ত আছে এবং এডিবি ডিবাগিং অনুমোদিত।

কোডিং এজেন্টদের সাথে একীকরণ

উদাহরণ এবং টেমপ্লেটগুলো একটি AGENTS.md কনটেক্সট ফাইল প্রদান করে যা অ্যান্ড্রয়েড স্টুডিওর জেমিনি, জেমিনি সিএলআই এবং অন্যান্য কোডিং এজেন্টের সাথে সামঞ্জস্যপূর্ণ। এতে সাবমিশন স্ট্রাকচারিং সম্পর্কিত মতামত এবং অটোরিপ্রো ব্যবহারের নির্দেশাবলী রয়েছে। আপনি এটি ব্যবহার করতে পারেন:

  • আপনার ডিভাইসের জন্য স্বয়ংক্রিয়ভাবে অটোরেপ্রো চালান।
  • আপনার রিপোর্টটি দ্রুত গৃহীত হতে সাহায্য করতে পারে এমন পরিবর্তনের জন্য বিদ্যমান জমা দেওয়া কোডটি পর্যালোচনা করুন।
  • দুর্বলতা সম্পর্কিত তথ্যের ভিত্তিতে একটি নতুন PoC কাঠামো তৈরিতে সহায়তা করুন।

একটি অটোরিপ্রো পরীক্ষা লিখুন

একটি AutoRepro টেস্টের তিনটি অংশ এবং তিনটি সংশ্লিষ্ট Gradle প্লাগইন রয়েছে:

  1. Gradle plugin id("com.android.security.autorepro.javahosttest") হলো একমাত্র হোস্ট-সাইড ট্রেডফেড টেস্ট যা ADB-এর মাধ্যমে ডিভাইসের সাথে যোগাযোগ করে। উদাহরণটিতে এটি submission/hostTest/ ডিরেক্টরিতে ব্যবহৃত হয়েছে।
  2. Gradle plugin id("com.android.security.autorepro.apptest") একটি অ্যাপ বা সার্ভিস APK যা adb install মাধ্যমে ডিভাইসে ইনস্টল করা হয় এবং হোস্ট-সাইড টেস্ট দ্বারা চালু করা হয়। অ্যাপ বা সার্ভিসটিতে নিজস্ব JUnit অ্যাসারশনের সেটও থাকতে পারে যা হোস্ট-সাইড রানারকে রিপোর্ট করা হয়। উদাহরণটিতে এটি submission/appTest/ ডিরেক্টরিতে ব্যবহার করা হয়েছে।
  3. Gradle plugin id("com.android.security.autorepro.ndktest") একটি ঐচ্ছিক NDK-ভিত্তিক প্রুফ-অফ-কনসেপ্ট অ্যাটাক যা adb push মাধ্যমে ডিভাইসে পুশ করা হয় এবং হোস্ট-সাইড টেস্ট দ্বারা এক্সিকিউট করা হয়। উদাহরণটিতে এটি submission/ndkTest/ ডিরেক্টরিতে ব্যবহৃত হয়েছে।

একটি সাধারণ AutoRepro টেস্ট ফ্লো সাধারণত দুটি প্যাটার্নের মধ্যে একটি অনুসরণ করে:

  • যন্ত্রসজ্জিত পরীক্ষা অ্যাপ:

    1. হোস্ট-সাইড টেস্টটি ডিভাইসে একটি ইনস্ট্রুমেন্টেড অ্যাপ বা সার্ভিস সম্বলিত একটি APK পুশ করে।
    2. হোস্ট-সাইড টেস্টটি runDeviceTest() এর মাধ্যমে APK-এর সাথে বান্ডেল করা ডিভাইস-সাইড JUnit টেস্টগুলো চালু করে।
    3. ডিভাইস-সাইডের JUnit টেস্টগুলো বাটন ট্যাপ করে এবং UIAutomator ব্যবহার করে অ্যাপটি পর্যবেক্ষণ করে, অথবা অন্যভাবে অ্যান্ড্রয়েড এপিআইগুলো এমনভাবে অ্যাক্সেস করে যা নিরাপত্তা দুর্বলতা প্রকাশ করে।
    4. ডিভাইস-সাইড JUnit টেস্টের সাফল্য বা ব্যর্থতার তথ্য হোস্ট-সাইড টেস্টে ফেরত পাঠানো হয়, যা ব্যবহার করে টেস্টটি পাস করেছে কি না তা নির্ধারণ করা যায়। ব্যর্থতার বার্তায় অ্যাসারশনটি কেন ব্যর্থ হয়েছে সে সম্পর্কে বিস্তারিত তথ্য এবং দুর্বলতার প্রমাণ হিসেবে কোনো নির্দিষ্ট অবজেক্ট, ভ্যালু, এক্সেপশন, স্ট্যাকট্রেস বা অন্যান্য আর্টিফ্যাক্ট থাকা উচিত।
  • এনডিকে প্রুফ-অফ-কনসেপ্ট:

    1. হোস্ট-সাইড পরীক্ষাটি ডিভাইসটিতে একটি লিনাক্স এক্সিকিউটেবল ফাইল পুশ করে এবং চালু করে।
    2. নেটিভ প্রোগ্রামটি ক্র্যাশ করে অথবা একটি নির্দিষ্ট এক্সিট কোড রিটার্ন করে।
    3. হোস্ট-সাইড টেস্টটি ক্র্যাশ পরীক্ষা করে, লগক্যাট ব্যাকট্রেস দেখে, অথবা আক্রমণটি সফল হয়েছে কিনা তা নির্ধারণ করতে নির্দিষ্ট এক্সিট কোড খোঁজে। ব্যর্থতার বার্তায় অ্যাসারশনটি কেন ব্যর্থ হয়েছে সে সম্পর্কে বিস্তারিত তথ্য এবং দুর্বলতার প্রমাণ হিসেবে কোনো নির্দিষ্ট স্ট্রাক্ট, ভ্যালু, স্ট্যাকট্রেস বা অন্যান্য আর্টিফ্যাক্ট থাকা উচিত।

দুটি প্যাটার্নের সংমিশ্রণও (উদাহরণস্বরূপ, ডিভাইস-সাইড পরীক্ষার সাথে একটি নেটিভ প্রোগ্রাম চালানো) সম্ভব। frida-inject মতো আরও কিছু ইন্সট্রুমেন্টেশন ফ্রেমওয়ার্কও উপলব্ধ আছে। বিস্তারিত জানতে, সিকিউরিটি টেস্ট স্যুট রেফারেন্স ডক্স এবং ট্রেডফেড রেফারেন্স ডক্স দেখুন।

ধারণার প্রমাণযোগ্যতা কাঠামোবদ্ধকরণ

একটি উচ্চ-মানের PoC-কে শুধু একটি বাগ শনাক্ত করার চেয়েও বেশি কিছু করতে হবে; এটির মাধ্যমে যাচাইযোগ্য প্রমাণ দিতে হবে যে একটি নিরাপত্তা সীমা লঙ্ঘিত হয়েছে। এটি অর্জন করার জন্য, PoC-গুলো একটি নির্দিষ্ট তিন-ধাপের "ব্যর্থতা-তারপর-সফলতা" পদ্ধতি অনুসরণ করতে পারে:

  1. সেটআপ: প্রয়োজনীয় অ্যাপ ইনস্টল করে, ফাইল পুশ করে এবং এক্সপ্লয়েটটি চালানোর ঠিক আগে ডিভাইসটিকে প্রয়োজনীয় নির্দিষ্ট অবস্থায় রেখে প্রস্তুত করুন। (যৌক্তিক কারণ থাকলে এবং তা একজন সাধারণ ব্যবহারকারীর বাস্তবসম্মত অবস্থার প্রতিনিধিত্ব করলে, কনফিগারেশনের জন্য রুট ব্যবহারের অনুমতি আছে)।
  2. সীমানা প্রমাণ করুন: দুর্বলতাটি সক্রিয় করার আগে, কাঙ্ক্ষিত কাজটি করার চেষ্টা করুন এবং নিশ্চিত করুন যে তা ব্যর্থ হয় । উদাহরণস্বরূপ, যদি এক্সপ্লয়েটটি কোনো সুরক্ষিত ফাইল পড়ার সুযোগ দেয়, তবে আপনাকে প্রথমে সেটি পড়ার চেষ্টা করতে হবে এবং নিশ্চিত করতে হবে যে আপনি একটি "Permission Denied" ত্রুটি পাচ্ছেন।
  3. ট্রিগার ও যাচাই: দুর্বলতাটি ট্রিগার করুন, তারপর অবিলম্বে ধাপ ২ থেকে কাজটি পুনরাবৃত্তি করুন। একটি দুর্বল ডিভাইসে, এই কাজটি এখন সফল হওয়া উচিত। এটি যাচাই করার জন্য, আপনাকে অবশ্যই এমন একটি অ্যাসারশন ব্যবহার করতে হবে যা একটি দুর্বল ডিভাইসে ব্যর্থ হয় এবং যার মেসেজটি 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);
    }
}

আমার প্রুফ-অফ-কনসেপ্ট অ্যাটাকটির জন্য কোনো টেস্ট অ্যাপ বা নেটিভ এক্সিকিউটেবলের প্রয়োজন নেই।

বেশিরভাগ পরীক্ষার জন্য ডিভাইস-সাইড অ্যাপ এবং নেটিভ এক্সিকিউটেবল উভয়েরই প্রয়োজন হবে না।

আপনার টেস্টে যদি কোনো ফিচারের ব্যবহার না থাকে, তাহলে অপ্রয়োজনীয় গ্রেডল সাবপ্রজেক্ট ডিরেক্টরিগুলো মুছে ফেলুন।

আমার প্রুফ-অফ-কনসেপ্ট অ্যাটাকটিতে একটি দ্বিতীয় অ্যাপ বা পরিষেবা অন্তর্ভুক্ত রয়েছে।

আপনার পছন্দমতো AutoRepro প্লাগইনসহ যত খুশি Gradle সাবপ্রজেক্ট যোগ করুন।

অটোরেপ্রো পরীক্ষা জমা দিন

জমা দেওয়ার অংশ হিসেবে আপনার ডিভাইস থেকে পরীক্ষার ফলাফল অন্তর্ভুক্ত করতে:

  • ঐচ্ছিকভাবে, পুরোনো টেস্ট রানগুলো মুছে ফেলার জন্য Gradle clean টাস্কটি চালান।
  • আপনার পরীক্ষার জন্য Tradefed চালু করতে এবং লগ ও ফলাফল সংগ্রহ করতে উপযুক্ত AutoRepro রান কনফিগারেশনটি চালান।
  • লগ এবং ফলাফলগুলো সাবমিশন সোর্স ডিরেক্টরিতে কপি করতে ` copyInvocationResultsToSubmission টাস্কটি চালান।

submission/build/autorepro-submission.zip ফাইলটি তৈরি করতে assembleSubmissionZip চালান। অ্যান্ড্রয়েড ভালনারেবিলিটি রিওয়ার্ড প্রোগ্রামে আপনার সাবমিশনের সাথে সেই ফাইলটি আপলোড করুন। নিশ্চিত করুন যে অ্যাটাচমেন্টটি *autorepro-submission*.zip প্যাটার্নের সাথে মেলে এবং এটি প্রাথমিক রিপোর্টের সাথেই আপলোড করা হয়েছে। দেরিতে সাবমিশন আপলোড করলে আপনার রিপোর্টটি সঠিকভাবে পর্যালোচনা করার ক্ষেত্রে আমাদের সক্ষমতা প্রভাবিত হবে।