শেলশক ব্যাশের দুর্বলতা কীভাবে পাওয়া গেল?


19

যেহেতু এই বাগটি এতগুলি প্ল্যাটফর্মকে প্রভাবিত করে, তাই আমরা এই প্রক্রিয়াটি থেকে এই দুর্বলতাটি খুঁজে পেয়েছি তার থেকে কিছু শিখতে পারি: এটি কি কোনও εὕρηκα (ইউরেকা) মুহুর্ত ছিল বা কোনও সুরক্ষার পরীক্ষার ফলাফল?

যেহেতু আমরা জানি স্টাফেন শেলশক বাগটি পেয়েছিল এবং অন্যরাও সে প্রক্রিয়াটি জানতে পারে, তাই তিনি কীভাবে ত্রুটিটি খুঁজে পেয়েছিলেন তার গল্পে আমরা আগ্রহী হব।


5
সম্পর্কিত: তার উত্তর করতে "যখন ShellShock ছিল (জন্য CVE-2014-6271 / 7169) বাগ চালু, এবং কি প্যাচ যে সম্পূর্ণরূপে সংশোধন করা হয়েছে তা না হয়?"।
ক্রিশ্চিয়ান সিপিতু

এই প্রশ্নটি অফ-টপিক হিসাবে উপস্থিত বলে মনে হচ্ছে কারণ এটি কোনও নির্দিষ্ট ব্যক্তির চিন্তার প্রক্রিয়া সম্পর্কিত এবং কোনও নির্দিষ্ট * নিক্স সমস্যা নয়।
টেরডন

@ অ্যান্টন কেন এটি লিনাক্স সম্পর্কে থাকতে হবে? কারও মতামত এনেছে এমন কোনও সম্পাদন কেন অনুমোদন করবেন যেমন এটি ওপির?
মুড়ু

@ মুরু আমি এটি একটি উন্নতি পেয়েছি, ভাগ্যক্রমে প্রস্তাবিত সম্পাদনা অনুমোদনে একাধিক ব্যক্তির প্রয়োজন takes তবে আমাকে স্বীকার করতে হবে যে আমি প্রশ্নটি ইতিমধ্যে বন্ধ ছিল, অন্যথায় আমি এটি লিনাক্স, ইউনিক্স না রেখে থাকতে পারি না, আমি খুব বেশি যত্ন করি না, অন্যথায় আমাদের সাইটের শিরোনামেও বিএসডি ইত্যাদি প্রয়োজন need
অ্যান্থন

1
এই সাইটে আমি প্রতিটি প্রশ্ন পড়েছি বলে মনে করবেন না। সংক্ষিপ্ত উত্তরের জন্য থ্রেড.gmane.org/gmane.comp.security.oss.general/14177/… দেখুন ।
স্টাফেন চেজেলাস

উত্তর:


23

কয়েকজনকে আশ্বস্ত করার জন্য, শোষণগুলি পর্যবেক্ষণ করে আমি ত্রুটিটি খুঁজে পাইনি, এটি প্রকাশের আগে এটির শোষণ হয়েছে বলে বিশ্বাস করার কোনও যুক্তি আমার নেই (যদিও আমি এটি অস্বীকার করতে পারি না)। bashকোডের কোড দেখে আমি এটি খুঁজে পেলাম না ।

আমি বলতে পারি না যে আমি ঠিক তখন আমার চিন্তাভাবনার ট্রেনটি মনে করি।

কম-বেশি এমন কিছু সফ্টওয়্যারের কিছু আচরণের প্রতিফলন থেকে পাওয়া গেছে যা আমি বিপজ্জনক বলে মনে করি (আচরণগুলি, সফ্টওয়্যারটি নয়) find যে ধরণের আচরণ আপনাকে ভাবতে বাধ্য করে: এটি কোনও ভাল ধারণা বলে মনে হয় না

এই ক্ষেত্রে, আমি SSH সাধারণ কনফিগারেশন ক্ষণস্থায়ী এনভায়রনমেন্ট ভেরিয়েবল ক্লায়েন্ট থেকে unsanitised করেন তারা তাদের নাম শুরু হয় প্রদান করা অনুমতি দেয় অনুধ্যায়ী ছিল LC_। ধারণাটি যাতে sshঅন্যান্য মেশিনে প্রবেশের সময় লোকেরা তাদের নিজস্ব ভাষা ব্যবহার করতে পারে । যতক্ষণ না আপনি ইউটিএফ -8 সমীকরণে আনা হয় (এবং এটি অনেক অ্যাপ্লিকেশন দ্বারা এটি কতটা খারাপভাবে পরিচালনা করা হয় তা দেখে) কীভাবে জটিল স্থানীয়করণ পরিচালনা করা কতটা জটিল তা বিবেচনা না করা অবধি ভাল ধারণা।

জুলাই 2014 সালে ফিরে যান, আমি ইতিমধ্যে জন্য glibc স্থানীয়করণ হ্যান্ডলিং একটি দুর্বলতার যা সঙ্গে মিলিত রিপোর্ট ছিল sshd কনফিগ এবং অপর দুই বিপজ্জনক আচরণে এর bashশেল উপলব্ধ তারা সেখানে ফাইল আপলোড করতে সক্ষম হয়েছি (প্রামাণ) আক্রমণকারীদের Git সার্ভার মধ্যে হ্যাক করার অনুমতি দেওয়া এবং bashব্যবহার করা হয়েছিল গিট ইউনিক্স ব্যবহারকারীর লগইন শেল হিসাবে (CVE-2014-0475)।

আমি ভাবছিলাম যে এটি সম্ভবত একটি bashজটিল শেল (যখন আপনার প্রয়োজন কেবল একটি খুব সাধারণ কমান্ড লাইনটি পার্স করার সময় প্রয়োজন হয়েছে) প্রদত্ত ব্যবহারকারীদের লগইন শেল হিসাবে এসএসএস-এর মাধ্যমে পরিষেবাগুলি সরবরাহ করার জন্য এটি ব্যবহার করা সম্ভবত খারাপ ধারণা and ksh এর যেহেতু আমি ইতিমধ্যে bashসেই প্রসঙ্গে (ssh ForceCommandগুলি ব্যাখ্যা করার জন্য ) কয়েকটি সমস্যা চিহ্নিত করেছি, তাই আমি ভাবছিলাম যে সেখানে সম্ভাব্য আরও কিছু আছে কিনা।

AcceptEnv LC_*যার নাম দিয়ে শুরু হয় এমন কোনও পরিবর্তনশীলকে আমার অনুমতি দেয় LC_এবং আমার কাছে অস্পষ্ট স্মৃতি ছিল যা bash রফতানি ফাংশনগুলি (এক সময় বিপজ্জনক হলেও কার্যকর উপকারিতা) পরিবেশের ভেরিয়েবলগুলি ব্যবহার করছিল যার নামটি এমন কিছু myfunction()ছিল এবং সেদিকে নজর দেওয়ার জন্য আকর্ষণীয় কিছু নেই কিনা তা ভাবছিলেন।

আমি এই ভিত্তিতে এটি বরখাস্ত করতে যাচ্ছিলাম যে সবচেয়ে খারাপ কাজটি হ'ল একটি কমান্ডের নতুন সংজ্ঞা দেওয়া LC_something যা আসলেই কোনও সমস্যা হতে পারে না কারণ সেগুলি বিদ্যমান কমান্ডের নাম নয়, তবে আমি ভাবতে শুরু করি যে কীভাবে এই পরিবেশের ভেরিয়েবলগুলি bash আমদানি করা হয়েছে

LC_foo;echo test; f()উদাহরণস্বরূপ যদি ভেরিয়েবলগুলি ডাকা হয় ? তাই আমি আরও কাছ থেকে দেখার সিদ্ধান্ত নিয়েছি।

উত্তর:

$ env -i bash -c 'zzz() { :;}; export -f zzz; env'
[...]
zzz=() {  :
}

প্রকাশিত হয়েছিল যে আমার স্মৃতিচারণটি ভুল ছিল যে ভেরিয়েবলগুলি বলা হয় নি myfunction()তবে myfunction(এবং এটির সাথে শুরু হওয়া মান() )।

এবং একটি দ্রুত পরীক্ষা:

$ env 'true;echo test; f=() { :;}' bash -c :
test
bash: error importing function definition for `true;echo test; f'

ভেরিয়েবলের নামটি স্যানিটাইজ করা হয়নি বলে আমার সন্দেহের বিষয়টি নিশ্চিত করে এবং কোডটি শুরু হওয়ার পরে মূল্যায়ন করা হয়েছিল

খারাপ, অনেক খারাপ, মান পারেন sanitized করা হয় নি:

$ env 'foo=() { :;}; echo test' bash -c :
test

এর অর্থ হ'ল যে কোনও পরিবেশের পরিবর্তনশীল একটি ভেক্টর হতে পারে।

আমি যখন সমস্যার মাত্রা বুঝতে পেরেছি, এটি নিশ্চিত করেছিলাম যে এটি HTTP- তেও ( HTTP_xxx/ QUERYSTRING... env vars), মেল প্রসেসিং পরিষেবাদির মতো অন্যান্য, পরে ডিএইচসিপি (এবং সম্ভবত একটি দীর্ঘ তালিকা) ব্যবহার করে এটি রিপোর্ট করেছিল (সাবধানে) ।


4
আকর্ষণীয় পড়া! যদিও প্রশ্নগুলির মন্তব্যে এটি স্পষ্ট হয়ে গেছে যে এটি এই সাইটের জন্য কিছুটা অফ-টপিক হতে পারে, আমি মনে করি যে সামান্য পরিমাণ প্রশ্ন / উত্তর: এর মতো (উত্তর হিসাবে ভালভাবে এবং পরিষ্কারভাবে লেখা আছে) সত্যিই এটি সাইটের জন্য সম্পদ!
জোহান ই
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.