একটি রেটপোলিন কী এবং এটি কীভাবে কাজ করে?


244

অর্ডার কার্নেল বা ক্রস প্রসেস মেমরি ডিসক্লোজার (বিরুদ্ধে প্রশমিত করার জন্য স্পেকটের এটাক), লিনাক্স কার্নেল 1 একটি নতুন বিকল্প কম্পাইল করা হবে , -mindirect-branch=thunk-externপ্রচলন gccএকটি তথাকথিত মাধ্যমে পরোক্ষ কল সম্পাদন করতে retpoline

গুগল অনুসন্ধান কেবলমাত্র সাম্প্রতিক ব্যবহারের ক্ষেত্রে পরিণত হয়েছে (সাধারণত 2018 এ সমস্তই) এটি একটি নতুন উদ্ভাবিত শব্দ হিসাবে প্রতীয়মান।

একটি রেটপোলিন কী এবং কীভাবে এটি সাম্প্রতিক কার্নেল তথ্য প্রকাশের আক্রমণকে রোধ করে?


1 এটি লিনাক্স নির্দিষ্ট নয়, তবে অনুরূপ বা অভিন্ন কাঠামো অন্য ওএসের প্রশমন কৌশলগুলির অংশ হিসাবে ব্যবহৃত হয়েছে বলে মনে হয় ।


6
গুগল থেকে একটি আকর্ষণীয় সমর্থন নিবন্ধ
সাগবিজে

2
ওহ, সুতরাং এটি উচ্চারিত / ˌtræmpəˈlin / (আমেরিকান) বা / ˈtræmpəˌliːn / (ব্রিটিশ)
ওয়াল্টার ট্রস

2
আপনি উল্লেখ করতে পারেন যে এটি লিনাক্স কার্নেল, যদিও gccসেভাবে নির্দেশ করে! আমি লিনাক্স কার্নেল মেইলিং তালিকা সাইটের হিসাবে lkML.org/lkML/2018/1/3/780 স্বীকৃতি জানাতে পারি নি , একবার আমি সেখানে একবারও দেখিনি (এবং এটি অফলাইনে থাকায় একটি স্ন্যাপশট সরবরাহ করা হয়েছিল)।
পিজেট্রাইল

@ পিজেট্রাইল - 14:36-এ একটি লিনাক্স কার্নেল ট্যাগ যুক্ত করেছে
রিচভেল

@ পিজেট্রাইল - ভাল কথা, আমি প্রশ্নের পাঠ্য আপডেট করেছি। নোট করুন যে আমি এটি লিনাক্স কার্নেলে প্রথমে দেখেছি কারণ এটি অপেক্ষাকৃত উন্মুক্ত বিকাশের প্রক্রিয়া, তবে সন্দেহ নেই যে একই বা অনুরূপ কৌশলগুলি ওপেন এবং ক্লোজড সোর্স ওএসের বর্ণালী জুড়ে প্রশমন হিসাবে ব্যবহৃত হচ্ছে। সুতরাং আমি এটি লিনাক্স-নির্দিষ্ট হিসাবে দেখতে পাচ্ছি না, তবে লিঙ্কটি অবশ্যই।
বীঅনরোপ

উত্তর:


158

গুগলের পল টার্নার দ্বারা লিখিত মন্তব্যে স্যাজবিজে উল্লেখ করা নিবন্ধটি নীচে আরও বিশদভাবে ব্যাখ্যা করেছে, তবে আমি এটির একটি শট দেব:

এই মুহুর্তে সীমিত তথ্য থেকে যতদূর আমি একসাথে এটি টুকরো টুকরো করতে পারি, একটি রেটপোলিন হ'ল একটি রিটার্ন ট্রামপোলিন যা একটি অনন্ত লুপ ব্যবহার করে যা কখনও কখনও অপ্রত্যক্ষ লাফের লক্ষ্য নিয়ে সিপিইউকে অনুমান করা থেকে বিরত রাখতে কার্যকর হয় না।

অ্যান্ডি ক্লিনের কার্নেল শাখায় এই সমস্যাটি দেখানোর জন্য প্রাথমিক পদ্ধতির দেখা যেতে পারে :

এটি নতুন __x86.indirect_thunkকলটির সাথে পরিচয় করিয়ে দেয় যা কল টার্গেট লোড করে যার মেমরি ঠিকানা (যা আমি কল করব ADDR) স্ট্যাকের উপরে সঞ্চয় করা হয় এবং RETনির্দেশ ব্যবহার করে জাম্প কার্যকর করে । থঙ্কটি নিজেই তখন NOSPEC_JMP / CALL ম্যাক্রো ব্যবহার করে ডাকা হয় , যা অনেকগুলি (সমস্ত না থাকলে) পরোক্ষ কল এবং জাম্প প্রতিস্থাপনের জন্য ব্যবহৃত হয়েছিল। ম্যাক্রো কেবল স্ট্যাকের উপর কল টার্গেটটি রাখে এবং প্রয়োজনে রিটার্ন ঠিকানাটি সঠিকভাবে সেট করে (অ-লিনিয়ার নিয়ন্ত্রণ প্রবাহটি দ্রষ্টব্য):

.macro NOSPEC_CALL target
    jmp     1221f            /* jumps to the end of the macro */
1222:
    push    \target          /* pushes ADDR to the stack */
    jmp __x86.indirect_thunk /* executes the indirect jump */
1221:
    call    1222b            /* pushes the return address to the stack */
.endm

callশেষে স্থান নির্ধারণ করা প্রয়োজনীয় যাতে অপ্রত্যক্ষ কল শেষ হয়ে গেলে নিয়ন্ত্রণ প্রবাহ NOSPEC_CALLম্যাক্রোর ব্যবহারের পিছনে অব্যাহত থাকে , তাই এটি নিয়মিত স্থানে ব্যবহার করা যেতে পারেcall

থঙ্কটি নিজেই নীচে দেখায়:

    call retpoline_call_target
2:
    lfence /* stop speculation */
    jmp 2b
retpoline_call_target:
    lea 8(%rsp), %rsp 
    ret

নিয়ন্ত্রণ প্রবাহটি এখানে কিছুটা বিভ্রান্তি পেতে পারে, সুতরাং আমাকে স্পষ্ট করে বলি:

  • call বর্তমান নির্দেশ পয়েন্টারটিকে (লেবেল 2) স্ট্যাকের দিকে ঠেলে দেয়।
  • leaস্ট্যাক পয়েন্টারে 8 যোগ করুন , কার্যকরভাবে সর্বাধিক ধাক্কা দেওয়া চতুর্ভুজটি বাতিল করুন, এটিই সর্বশেষ রিটার্ন ঠিকানা (2 লেবেলে)। এর পরে, স্ট্যাক পয়েন্টের শীর্ষে রিয়েল রিটার্নের ঠিকানা এডিডিআর আবার।
  • ret*ADDRকল স্ট্যাকের শুরুতে স্ট্যাক পয়েন্টারটিতে ঝাঁপ দেয় এবং পুনরায় সেট করে।

শেষ পর্যন্ত, এই পুরো আচরণটি ব্যবহারিকভাবে সরাসরি ঝাঁপ দেওয়ার সমতুল্য *ADDR। আমাদের একটি সুবিধাটি হ'ল শাখার ভবিষ্যদ্বাণী রিটার্ন স্টেটমেন্টগুলির জন্য ব্যবহৃত হয় (রিটার্ন স্ট্যাক বাফার, আরএসবি), callনির্দেশটি কার্যকর করার সময় , অনুমান করা হয় যে সংশ্লিষ্ট retবিবৃতিটি লেবেল 2 এ চলে যাবে।

লেবেল 2 এর অংশটি আসলে কখনই কার্যকর হয় না, এটি কেবল একটি অসীম লুপ যা তাত্ত্বিকভাবে নির্দেশাবলী দিয়ে নির্দেশ পাইপলাইনে পূরণ করবে JMP। ব্যবহারের LFENCE, PAUSEবা আরো সাধারণভাবে একটি নির্দেশ ঘটাচ্ছে নির্দেশ পাইপলাইন স্টল যে এই ফটকামূলক সঞ্চালনের কোন ক্ষমতা ও সময় নষ্ট থেকে CPU- র স্টপ। এটি কারণ কারণ যদি retpoline_call_target এ কলটি স্বাভাবিকভাবে ফিরে আসে LFENCEতবে পরের নির্দেশটি কার্যকর করা হবে। এটিই শাখার ভবিষ্যদ্বাণীকারী আসল প্রত্যাবর্তনের ঠিকানার ভিত্তিতে (লেবেল 2) ভবিষ্যদ্বাণী করবে

ইন্টেলের আর্কিটেকচার ম্যানুয়াল থেকে উদ্ধৃতি দিতে:

LFENCE অনুসরণ করার নির্দেশাবলী LFENCE এর আগে মেমরি থেকে নেওয়া হতে পারে তবে LFENCE সম্পূর্ণ না হওয়া পর্যন্ত এগুলি কার্যকর করা হবে না।

তবে নোট করুন যে স্পেসিফিকেশনটিতে কখনই উল্লেখ করা হয়নি যে LFENCE এবং PAUSE পাইপলাইনটি স্টল করে দেয়, তাই আমি এখানে লাইনগুলির মাঝে কিছুটা পড়ছি।

এখন আপনার মূল প্রশ্নে ফিরে আসুন: দুটি ধারণার সংমিশ্রণের কারণে কার্নেল মেমরির তথ্য প্রকাশ সম্ভব is

  • যদিও জল্পনা-কল্পনাটি ভুল ছিল তখন জল্পনা-কল্পনা কার্যকর করা উচিত পার্শ্ব-প্রতিক্রিয়া মুক্ত, অনুমানমূলক বাস্তবায়ন এখনও ক্যাশে শ্রেণিবিন্যাসকে প্রভাবিত করে । এর অর্থ হ'ল যখন কোনও মেমরি লোডটি অনুমানমূলকভাবে কার্যকর করা হয়, তখনও এটি একটি ক্যাশে লাইনটি উচ্ছেদ হতে পারে। ক্যাশে শ্রেণিবিন্যাসের এই পরিবর্তনটি একই ক্যাশে সেটটিতে ম্যাপ করা মেমরির অ্যাক্সেসের সময়টি সাবধানতার সাথে পরিমাপের মাধ্যমে চিহ্নিত করা যেতে পারে।
    এমনকি পাঠানো মেমরির উত্স ঠিকানাটি যখন কার্নেল মেমরি থেকে নিজে পড়েছিল তখন আপনি নির্বিচারে মেমরির কিছু বিটগুলি ফাঁস করতে পারেন।

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

আপডেট: কার্নেল মেলিং তালিকায় , একটি চলমান আলোচনা রয়েছে যা আমাকে বিশ্বাস করতে পরিচালিত করে যে রিটপলগুলি শাখার পূর্বাভাস সম্পর্কিত বিষয়গুলি সম্পূর্ণরূপে প্রশমিত করে না, যেমন রিটার্ন স্ট্যাক বাফার (আরএসবি) খালি চলেছে, আরও সাম্প্রতিক ইন্টেল আর্কিটেকচার (স্কাইলেক +) পিছনে পড়েছে দুর্বল শাখা টার্গেট বাফারকে (বিটিবি):

বিটিবি থেকে আগত ভবিষ্যদ্বাণীগুলি এড়ানোর জন্য শোধন কৌশল হিসাবে রেটপলিনগুলি রিটার্নের জন্য অপ্রত্যক্ষ শাখাকে বদলে দেয়, কারণ আক্রমণকারী দ্বারা তাদের বিষাক্ত করা যেতে পারে। স্কাইলেক + এর সমস্যাটি হ'ল কোনও আরএসবি আন্ডারফ্লো বিটিবি পূর্বাভাস ব্যবহার করে ফিরে আসে, যা আক্রমণকারীকে জল্পনা নিয়ন্ত্রণ করতে দেয়।


আমি মনে করি না এলএফএনসিইএন নির্দেশনা গুরুত্বপূর্ণ, গুগলের বাস্তবায়ন পরিবর্তে একটি PAUSE নির্দেশ ব্যবহার করে। সমর্থন.google.com/faqs/answer/7625886 নোট করুন যে ডকুমেন্টেশনগুলি আপনি উদ্ধৃত করেছেন বলেছে "" হবে না "কার্যকর করবে না তা অনুমানমূলকভাবে কার্যকর করা হবে না"।
রস রিজ

1
সেই গুগল এফকিউ পৃষ্ঠা থেকে: "উপরের আমাদের অনুমানমূলক লুপগুলিতে বিরতি নির্দেশাবলীর যথাযথতার জন্য প্রয়োজনীয় নয় But তবে এর অর্থ এই নয় যে উত্পাদনহীন জল্পনা-কল্পনা প্রসেসরের কম কার্যকরী ইউনিট দখল করে।" সুতরাং এটি আপনার সিদ্ধান্তকে সমর্থন করে না যে LFENCE তারা এখানে কী।
রস রিজ

@ রসস্রিজ আমি আংশিকভাবে একমত, আমার কাছে এটি অসীম লুপের দুটি সম্ভাব্য প্রয়োগের মতো মনে হচ্ছে যা সিপিইউকে PAUSE / LFENCE এর পরে কোডটি অনুমানমূলকভাবে সম্পাদন না করার ইঙ্গিত দেয়। তবে, যদি এলএফএনসিইসিটি অনুমানমূলকভাবে মৃত্যুদন্ড কার্যকর করা হয়েছিল এবং জল্পনাটি সঠিক ছিল বলে পিছনে ঘুরিয়ে দেওয়া হয়নি, তবে এই দাবির বিরোধিতা করবে যে এটি কেবলমাত্র মেমরির চাপ শেষ হয়ে গেলেই সম্পাদিত হবে। (অন্যথায়, অনুমানমূলকভাবে সম্পাদিত পুরো নির্দেশাবলীর পিছনে ফিরে ঘুরিয়ে ফিরিয়ে আবার নির্দিষ্টকরণগুলি সম্পাদন করতে হবে)
টোবিয়াস রিবিজেল

1
এটির push/ এর সুবিধা রয়েছে retযে এটি রিটার্ন-ঠিকানা পূর্বাভাসকারী স্ট্যাকটিকে ভারসাম্যহীন করে না । একটি ভুল অনুমান ( lfenceআসল প্রত্যাবর্তনের ঠিকানা ব্যবহারের আগে যাওয়ার আগে) রয়েছে, তবে একটি call+ পরিবর্তনকারী rspভারসাম্য বজায় রেখে ret
পিটার কর্ডেস

1
ওহো, সুবিধা উপর push / ret(আমার গত মন্তব্যে)। পুনরায়: আপনার সম্পাদনা: আরএসবি আন্ডারফ্লো অসম্ভব হওয়া উচিত কারণ রেটপলিনটিতে একটি রয়েছে call। যদি কার্নেল প্রাক-শোধন সেখানে কোনও প্রসঙ্গ স্যুইচ করে থাকে, আমরা আরডিএস থেকে callশিডিয়ুলারের মধ্যে প্রাইম করে এক্সিকিউশনটি আবার শুরু করব । তবে retআরএসবি খালি করার জন্য একটি বিঘ্নিত হ্যান্ডলার যথেষ্ট পরিমাণে শেষ হতে পারে with
পিটার কর্ডেস

46

একটি retpoline ব্রাঞ্চ লক্ষ্য ইনজেকশন ( CVE-2017-5715 ) শোষণ থেকে রক্ষা করার জন্য ডিজাইন করা হয়েছে । এটি একটি আক্রমণ যেখানে কর্নেলের একটি অপ্রত্যক্ষ শাখার নির্দেশাবলী কোডের একটি স্বেচ্ছাসেবী সংখ্যার অনুমানমূলক সম্পাদনকে বাধ্য করার জন্য ব্যবহৃত হয়। নির্বাচিত কোডটি একটি "গ্যাজেট" যা আক্রমণকারীর পক্ষে কোনওভাবে কার্যকর। উদাহরণস্বরূপ কোড নির্বাচন করা যেতে পারে যাতে এটি ক্যাশেটিকে কীভাবে প্রভাবিত করে তার মাধ্যমে কার্নেল ডেটা ফাঁস হয়ে যায়। রেটপোলিনটি প্রত্যক্ষভাবে প্রত্যক্ষ নির্দেশের পরিবর্তে সমস্ত অপ্রত্যক্ষ শাখার নির্দেশাবলী প্রতিস্থাপন করে এই শোষণকে বাধা দেয়।

আমি মনে করি retpoline সম্পর্কে কী কী কেবল "ret" অংশ, এটি পরোক্ষ শাখাকে একটি রিটার্ন নির্দেশ সহ প্রতিস্থাপন করে যাতে সিপিইউ শোষণকারী শাখার পূর্বাভাসকের পরিবর্তে রিটার্ন স্ট্যাক প্রেডিক্টর ব্যবহার করে। যদি এর পরিবর্তে কোনও সরল ধাক্কা এবং ফেরতের নির্দেশ ব্যবহার করা হয় তবে অনুমানযোগ্যভাবে কার্যকর করা হবে এমন কোডটি ফাংশনটি শেষ পর্যন্ত যে কোনও উপায়ে ফিরে আসবে, আক্রমণকারীটির জন্য কিছু গ্যাজেট কার্যকর নয়। ট্রামপোলিন অংশের প্রধান সুবিধাটি মনে হয় রিটার্ন স্ট্যাক বজায় রাখা যাতে ফাংশনটি আসলে তার কলারে ফিরে আসে তখন এটি সঠিকভাবে পূর্বাভাস দেওয়া হয়।

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

দ্রষ্টব্য যে রেটপলিন সরাসরি কার্নেল তথ্য প্রকাশকে বাধা দেয় না, এটি কেবল অপ্রত্যক্ষ শাখার নির্দেশকে কোনও গ্যাজেটকে অনুমানমূলকভাবে কার্যকর করতে বাধা দেয় যা তথ্য প্রকাশ করে would আক্রমণকারী যদি অনুমানমূলকভাবে গ্যাজেটটি চালানোর জন্য অন্য কোনও উপায় খুঁজে পেতে পারে তবে retpoline আক্রমণটিকে আটকাতে পারে না।

পেপার স্পেক্টর অ্যাটাকস: পল কোচার, ড্যানিয়েল জেনকিন, ড্যানিয়েল গ্রাস, ভার্নার হাস, মাইক হামবুর্গ, মরিজ লিপ, স্টিফান ম্যানগার্ড, টমাস প্রিচার, মাইকেল শোয়ার্জ এবং যুবাল ইয়ারম কীভাবে পরোক্ষ শাখাগুলি শোষণ করা যেতে পারে তার নিম্নলিখিত সংক্ষিপ্ত বিবরণ দেয় :

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

বিটিবির ভুল বোঝাবুঝি করার জন্য, আক্রমণকারী শিকারের ঠিকানা জায়গাতে গ্যাজেটের ভার্চুয়াল ঠিকানাটি খুঁজে পায়, তারপরে এই ঠিকানায় পরোক্ষ শাখা সম্পাদন করে। এই প্রশিক্ষণ আক্রমণকারীর ঠিকানা স্থান থেকে করা হয়, এবং আক্রমণকারীর ঠিকানা স্পেসের গ্যাজেটের ঠিকানায় কী থাকে তা বিবেচ্য নয়; যে সমস্ত শাখাটি প্রয়োজন তা হ'ল প্রশিক্ষণ শাখাগুলি একই গন্তব্য ভার্চুয়াল ঠিকানা ব্যবহার করতে। (আসলে, যতক্ষণ আক্রমণকারী ব্যতিক্রমগুলি পরিচালনা করে, আক্রমণকারীর ঠিকানার জায়গায় গ্যাজেটের ভার্চুয়াল ঠিকানায় কোনও কোড ম্যাপ করা না থাকলেও আক্রমণটি কাজ করতে পারে)) উত্স ঠিকানার সম্পূর্ণ মিলের প্রয়োজন নেই for প্রশিক্ষণের জন্য ব্যবহৃত শাখার এবং লক্ষ্যযুক্ত শাখার ঠিকানা। সুতরাং, আক্রমণকারীটির প্রশিক্ষণ স্থাপনে উল্লেখযোগ্য নমনীয়তা রয়েছে।

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


9

এই প্রশ্নটি কিছুক্ষণ আগে জিজ্ঞাসা করা হয়েছিল, এবং এটির একটি নতুন উত্তর প্রাপ্য।

এক্সিকিউটিভ সংক্ষিপ্তসার :

"রেটপোলিন" সিকোয়েন্সগুলি এমন একটি সফ্টওয়্যার কনস্ট্রাক্ট যা পরোক্ষ শাখাগুলিকে অনুমানমূলক সম্পাদন থেকে পৃথক করার অনুমতি দেয়। সংক্ষিপ্ত বাইনারিগুলি (যেমন অপারেটিং সিস্টেম বা হাইপারভাইজার বাস্তবায়ন) তাদের অপ্রত্যক্ষ শাখার বিরুদ্ধে শাখা লক্ষ্য ইনজেকশন আক্রমণ থেকে রক্ষা করতে এটি প্রয়োগ করা যেতে পারে।

" রিট পলিন " শব্দটি "রিটার্ন" এবং "ট্রাম্পোলিন" শব্দের একটি পোর্টম্যানট্যু , অনেকটা উন্নতির মতো " রিল পলিন " "আপেক্ষিক কল" এবং "ট্রামপোলিন" থেকে তৈরি হয়েছিল। এটি রিটার্ন অপারেশন ব্যবহার করে নির্মিত ট্রামপোলিন নির্মাণ যা প্রতীকীভাবে নিশ্চিত করে যে কোনও সম্পর্কিত অনুমানমূলক মৃত্যুদন্ড কার্যকর হবে "বাউন্স" অনন্তভাবে।

কার্নেল বা ক্রস-প্রসেস মেমরি ডিসক্লোজার (স্পেক্টর অ্যাটাক) এর বিরুদ্ধে প্রশমিত করার জন্য, লিনাক্স কার্নেল [1] একটি নতুন বিকল্প সংকলিত হবে, -mindirect-branch=thunk-externযা তথাকথিত রেটপলিনের মাধ্যমে পরোক্ষ কলগুলি সম্পাদন করতে জিসিসি-র সাথে পরিচিত হয়েছিল।

[1] এটি লিনাক্স নির্দিষ্ট নয়, তবে অনুরূপ বা অভিন্ন নির্মাণ অন্যান্য ওএসের প্রশমন কৌশলগুলির অংশ হিসাবে ব্যবহৃত হবে বলে মনে হয়।

এই সংকলক বিকল্পের ব্যবহার কেবলমাত্র প্রভাবিত প্রসেসরের স্পেক্টর ভি 2 এর বিরুদ্ধে সুরক্ষা দেয় যাদের সিভিই-2017-5715 এর জন্য মাইক্রোকোড আপডেট প্রয়োজন। এটি যে কোনও কোডে (কেবল একটি কার্নেল নয়) ' কাজ করবে' , তবে কেবলমাত্র "সিক্রেটস" সম্বলিত কোড আক্রমণ করার মতো।

গুগল অনুসন্ধান কেবলমাত্র সাম্প্রতিক ব্যবহারের ক্ষেত্রে পরিণত হয়েছে (সাধারণত 2018 এ সমস্তই) এটি একটি নতুন উদ্ভাবিত শব্দ হিসাবে প্রতীয়মান।

LLVM কম্পাইলার একটি ছিল -mretpolineযেহেতু সুইচ জানুয়ারী 4 2018 সামনে । সেই তারিখটি যখন দুর্বলতার প্রথম প্রকাশ্যে প্রকাশিত হয়েছিল । জিসিসি তাদের প্যাচগুলি জানুয়ারী 7, 2018 এ উপলব্ধ করেছে।

সিভিই তারিখটি পরামর্শ দেয় যে দুর্বলতাটি 2017 সালে ' আবিষ্কার করা ' হয়েছিল, তবে এটি গত দুই দশকে নির্মিত কিছু প্রসেসরের উপর প্রভাব ফেলে (সম্ভবত এটি সম্ভবত অনেক আগে আবিষ্কার হয়েছিল)।

একটি রেটপোলিন কী এবং কীভাবে এটি সাম্প্রতিক কার্নেল তথ্য প্রকাশের আক্রমণকে রোধ করে?

প্রথম, কয়েকটি সংজ্ঞা:

  • ট্রাম্পোলিন - কখনও কখনও অপ্রত্যক্ষ জাম্প ভেক্টর ট্রাম্পোলাইন হিসাবে পরিচিত যা মেমরির অবস্থানগুলি সম্বোধন করে যা পরিষেবা রুটিন, I / O রুটিন ইত্যাদির দিকে ইঙ্গিত করে। ট্রাম্পোলিনে এক্সিকিউশন লাফ দেয় এবং ততক্ষণে ঝাঁপিয়ে পড়ে, বা বাউন্স হয়, সুতরাং ট্রামপোলিন শব্দটি। জেসিসি nতিহ্যগতভাবে নেস্টেড ফাংশনটির ঠিকানা গ্রহণের সময় চালানো সময়ে এক্সিকিউটেবল ট্রামপোলিন তৈরি করে নেস্টেড ফাংশনগুলিকে সমর্থন করে। এটি কোডের একটি ছোট টুকরা যা সাধারণত ফাংশন সহ স্ট্যাকের ফ্রেমে স্ট্যাকের উপরে থাকে। ট্রাম্পোলাইন স্থিতিশীল চেইন রেজিস্টার লোড করে এবং তারপরে নেস্টেড ফাংশনটির আসল ঠিকানায় যায়।

  • থাঙ্ক - একটি থাঙ্ক একটি সাবরুটিন যা অন্য সাব্রোটিনে অতিরিক্ত গণনা ইনজেকশনের জন্য ব্যবহৃত হয়। থানস প্রাথমিকভাবে কোনও গণনার বিলম্ব করার জন্য তার ফলাফলের প্রয়োজন না হওয়া পর্যন্ত ব্যবহার করা হয়, বা অন্য সাবরুটিনের শুরুতে বা শেষে অপারেশন সন্নিবেশ করতে ব্যবহৃত হয়

  • স্মৃতিচারণ - একটি স্মৃতিযুক্ত ফাংশন নির্দিষ্ট কিছু ইনপুটগুলির সাথে সম্পর্কিত ফলাফলগুলিকে "মনে রাখে"। পরবর্তী কলগুলি স্মরণ করা ইনপুটগুলির সাথে স্মরণকৃত ফলাফলটিকে পুনরায় গণনা করার পরিবর্তে ফিরিয়ে দেয়, এভাবে প্রদত্ত প্যারামিটারগুলির সাথে একটি কলের প্রাথমিক ব্যয়টি সমস্ত পরামিতিগুলির সাথে ফাংশনে প্রথম কল করা বাদ দেয়।

খুব মোটামুটিভাবে, একটি retpoline একটি হল trampoline একটি সঙ্গে ফিরতি হিসেবে thunk , 'থেকে লুট ' memoization পরোক্ষ শাখা predictor হবে।

উত্স : রেটপলিনটি ইন্টেলের জন্য একটি PAUSE নির্দেশনা অন্তর্ভুক্ত করে, তবে AMD এর জন্য একটি LFENCE নির্দেশনা প্রয়োজনীয় কারণ যে প্রসেসরের উপর PAUSE নির্দেশনা ক্রমিক নির্দেশ নয়, সুতরাং বিরতি / জেএমপি লুপ অতিরিক্ত শক্তি ব্যবহার করবে কারণ এটি প্রত্যাশার প্রত্যাশায় অনুমান করা হচ্ছে সঠিক লক্ষ্যে ভুল ধারণা করা।

আর্স্টেকনিকার সমস্যার একটি সহজ ব্যাখ্যা রয়েছে:

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

যদি প্রসেসরটি ভুল অনুমান করে, তবে এটি অনুমান করা মানটিকে উপেক্ষা করবে এবং সঠিক ঠিকানা দিয়ে এবার লোডটি সম্পাদন করবে। স্থাপত্যিকভাবে সংজ্ঞায়িত আচরণটি সংরক্ষণ করা হয়। তবে সেই ত্রুটিযুক্ত অনুমানটি প্রসেসরের অন্যান্য অংশগুলিকে বিঘ্নিত করবে particular বিশেষত ক্যাশের সামগ্রীগুলি। এই মাইক্রোআরকিটেকচারাল অস্থিরতা ক্যাশে থাকা (বা হওয়া উচিত নয়) এমন ডেটা অ্যাক্সেস করতে কতক্ষণ সময় নেয় তা নির্ধারণ করে এবং পরিমাপ করা যেতে পারে, যা মেমোরিতে সঞ্চিত মূল্যবোধগুলি সম্পর্কে দূষিত প্রোগ্রামটি অন্তর্ভুক্ত করতে সক্ষম করে "।

ইন্টেলের কাগজ থেকে: " রেটপোলিন: একটি ব্রাঞ্চ টার্গেট ইনজেকশন প্রশমন " ( .পিডিএফ ):

"একটি রেটপোলিন ক্রম প্রসেসরের অনুমানমূলক সম্পাদনকে" অপ্রত্যক্ষ শাখা প্রেডিক্টর "(প্রোগ্রাম প্রবাহের পূর্বাভাসের এক উপায়) ব্যবহার করে শোষণ দ্বারা নিয়ন্ত্রিত কোনও ঠিকানার (শাখা টার্গেট ইনজেকশনের পাঁচটি উপাদানের সন্তোষজনক উপাদান 4) ব্যবহার করতে বাধা দেয় (স্পেকটার ভেরিয়েন্ট 2 ) উপরে তালিকাবদ্ধ রচনাটি কাজে লাগান) "

দ্রষ্টব্য, 4 উপাদানটি হ'ল: "গ্যাজেটটিকে অনুমানমূলকভাবে চালিত করতে এবং চালাতে এই অপ্রত্যক্ষ শাখাকে সফলভাবে প্রভাবিত করতে হবে। শোষণ দ্বারা নির্বাচিত এই গ্যাজেটটি সাধারণত পার্শ্ব চ্যানেলের মাধ্যমে গোপন তথ্য ফাঁস করে দেয়, সাধারণত ক্যাশে-সময় দ্বারা"।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.