পুরানো সি সংকলক ব্যবহার করা কি সুরক্ষা ঝুঁকিপূর্ণ?


139

আমাদের উত্পাদনের কিছু বিল্ড সিস্টেম রয়েছে যার সম্পর্কে কারও কোন চিন্তা নেই এবং এই মেশিনগুলি জিসিসি 3 বা জিসিসি 2 এর মতো জিসিসির প্রাচীন সংস্করণগুলি চালায়।

এবং আমি এটিকে সাম্প্রতিক সময়ে আপগ্রেড করার জন্য পরিচালককে প্ররোচিত করতে পারি না: তারা বলে, "যদি ভাঙা না হয় তবে এটি ঠিক করবেন না"।

যেহেতু আমরা একটি খুব পুরানো কোড বেস বজায় রাখছি (80 এর দশকে লেখা), এই সি 89 কোডটি এই সংকলকগুলিতে ঠিক জরিমানা সংকলন করে।

তবে আমি নিশ্চিত না যে এই পুরানো জিনিসগুলি ব্যবহার করা ভাল ধারণা।

আমার প্রশ্নটি হ'ল:

কোনও পুরানো সি সংকলক ব্যবহার করে সংকলিত প্রোগ্রামটির সুরক্ষার সাথে আপস করতে পারেন?

হালনাগাদ:

একই কোডটি উইন্ডোজ টার্গেটের জন্য ভিজ্যুয়াল স্টুডিও ২০০৮ দ্বারা নির্মিত এবং এমএসভিসি এখনও সি 99 বা সি 11 সমর্থন করে না (নতুন এমএসভিসি কিনা তা আমি জানি না), এবং আমি সর্বশেষ জিসিসি ব্যবহার করে এটি আমার লিনাক্স বাক্সে তৈরি করতে পারি। সুতরাং আমরা যদি কেবল একটি নতুন জিসিসিতে ফেলে থাকি তবে এটি সম্ভবত আগের মতোই জরিমানা তৈরি করবে।


5
আকর্ষণীয় প্রশ্ন - এটি দ্রুত পড়ার পক্ষেও উপযুক্ত - বিকাশকারীরা.স্ল্যাশডট.আর / স্টোরি / ১৩/১০/২০১২/২50০২১১/২ .. সুতরাং নতুন সংকলকগুলিও অনুকূলিতকরণের সময় সুরক্ষায় আপস করতে পারে।
নীল

6
সেই পুরানো জিসিসি সংস্করণগুলি কি এএসএলআরের জন্য পিক / পিআইই সংকলন সমর্থন করে? তারা স্ট্যাক ক্যানারি সমর্থন করে? ডাব্লু এক্স N এক্স (এনএক্স)? যদি তা না হয় তবে দুর্বলতার জন্য প্রশমনগুলির অভাব আপগ্রেড করার একটি ভাল কারণ।
ইওএফ

12
কেবলমাত্র জিসিসি ৪.০ এর সতর্কতাগুলি দেখার সাথে সাথেই বিদ্যমান সুরক্ষা গর্তগুলির পুরো লোডটি তত্ক্ষণাত প্রকাশ করতে পারে যে আপনি জানতেন না যে আপনার কী ছিল।
অরেঞ্জডগ

7
@ ওরেঞ্জডগ: জিসিসি 4.x কেন? জিসিসি 6 হ'ল বর্তমান রিলিজ সিরিজ, এবং জিসিসি 5 প্রায় কিছু সময়ের জন্য হয়েছে। তবে হ্যাঁ, -O3 -Wall -Wextra -fsanitize=undefinedআধুনিক জিসিসি এবং ঝনঝন দিয়ে চিহ্নিত যে কোনও সমস্যা সমাধানের ক্ষেত্রে সহায়তা করা উচিত।
পিটার কর্ডেস

4
@ ওরেঞ্জডগ জিসিসি বিপণনের সংস্করণ নম্বরগুলিতে চলে গেছে। জিসিসি 5 একটি বড় সংস্করণের দ্বিধায় প্রাপ্য, কারণ তারা ডিফল্ট সি এবং সি ++ স্ট্যান্ডার্ড এবং লিবিস্টডিসি ++ এবিআই পরিবর্তন করেছে। জিসিসি 6 কে 5.1 বলা উচিত ছিল।
zwol

উত্তর:


102

আসলে আমি বিপরীতে তর্ক করব।

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

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

"Traditionalতিহ্যবাহী" আচরণ পুনরুদ্ধার করার জন্য সংকলক স্যুইচ রয়েছে (আমি উপরে উল্লিখিত দু'জনের জন্য -fwrapv এবং -fno-কঠোর-আলিয়াজিং) তবে প্রথমে আপনাকে সেগুলি সম্পর্কে জানতে হবে।

যদিও নীতিগতভাবে একটি সংকলক বাগটি বাধ্যতামূলক কোডটিকে একটি সুরক্ষা গর্তে পরিণত করতে পারে আমি এগুলির ঝুঁকিটিকে বিষয়গুলির বৃহত্ স্কিমে উপেক্ষিত বলে বিবেচনা করব।


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

18
@ আন্ড্রে সংকলিত কোডটি যাইহোক অনুমানযোগ্য অপরিবর্তিত আচরণ রয়েছে। এটি হ'ল, একবার কোডটি সংকলিত হয়ে গেলে, কোনও নির্দিষ্ট অনিবার্য আচরণটি সেই নির্দিষ্ট সংকলিত সংস্করণে এখন অনুমানযোগ্য।
ব্যবহারকারী 253751

6
people who treated C like a "portable assembler"সি যদিও তাই না?
সর্বাধিক

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

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

52

উভয় ক্রিয়াকলাপে ঝুঁকি রয়েছে।


পুরানো সংকলকগুলির পরিপক্কতার সুবিধা রয়েছে এবং তাদের মধ্যে যা কিছু ভেঙে গেছে সম্ভবত এটি সফলভাবে সফলভাবে কাজ করা হয়েছে (তবে কোনও গ্যারান্টি নেই)।

এই ক্ষেত্রে, একটি নতুন সংকলক নতুন বাগের সম্ভাব্য উত্স।


অন্যদিকে, নতুন সংকলকগুলি অতিরিক্ত সরঞ্জামাদি নিয়ে আসে :

  • জিসিসি এবং ক্ল্যাং উভয়েরই এখন স্যানিটাইজার রয়েছে যা বিভিন্ন ধরণের অপরিজ্ঞাত আচরণগুলি সনাক্ত করতে রানটাইমকে উপকরণ করতে পারে (গুগল কম্পাইলার দলের চ্যানডলার ক্যারথ, গত বছর দাবি করেছিলেন যে সেগুলি সম্পূর্ণ কভারেজে পৌঁছেছে বলে আশা করে)
  • ঝনঝন, কমপক্ষে, কঠোর বৈশিষ্ট্যযুক্ত করে উদাহরণস্বরূপ, কন্ট্রোল ফ্লো ইন্টিগ্রিটি হ'ল নিয়ন্ত্রণ প্রবাহের হাই-জ্যাকগুলি সনাক্তকরণ সম্পর্কিত, স্ট্যাকের বিপর্যয়জনিত আক্রমণগুলির বিরুদ্ধে সুরক্ষার জন্য কঠোরকরণের সরঞ্জামও রয়েছে (স্ট্যাকের নিয়ন্ত্রণ-প্রবাহ অংশটি ডেটা অংশ থেকে পৃথক করে) ; শক্ত করার বৈশিষ্ট্যগুলি সাধারণত কম ওভারহেড হয় (<1% সিপিইউ ওভারহেড)
  • ক্ল্যাং / এলএলভিএম লিবিফুজারেও কাজ করছে, যা চালিত ফাজিং ইউনিট-টেস্ট তৈরির একটি সরঞ্জাম যা পরীক্ষার অধীনে ফাংশনের ইনপুট স্পেসটি অন্বেষণ করে ( ইনপুটটিকে তত্পর-অন্বেষণকৃত এক্সিকিউশনের পাথ নিতে না পেরে)

স্যানিটাইজারগুলির সাথে আপনার বাইনারি ইনস্ট্রুমেন্ট করে (অ্যাড্রেস স্যানিটাইজার, মেমরি স্যানিটাইজার বা অপরিজ্ঞাত আচরণ স্যানিটাইজার) এবং তারপরে এটি বিব্রত করে ( উদাহরণস্বরূপ আমেরিকান ফাজি লপ ব্যবহার করে) বেশ কয়েকটি হাই-প্রোফাইল সফ্টওয়্যারগুলির দুর্বলতা প্রকাশ করেছে, উদাহরণস্বরূপ দেখুন এই LWN.net নিবন্ধটি

এই নতুন সরঞ্জামগুলি এবং ভবিষ্যতের সমস্ত সরঞ্জামগুলি আপনার কাছে অ্যাক্সেসযোগ্য নয় যদি না আপনি আপনার সংকলকটি আপগ্রেড করেন।

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


দ্রষ্টব্য: আপনি যদি প্রযোজনা সংকলকটি আপগ্রেড না করেন তবে আপনি যেভাবেই হোক দুর্বলতার জন্য এটি পরীক্ষা করতে একটি নতুন সংকলক ব্যবহার করতে চাইতে পারেন; সচেতন থাকুন যেহেতু এগুলি পৃথক সংকলক, গ্যারান্টি যদিও কমিয়ে আনা হয়েছে।


1
অন্যান্য উত্তরগুলির 'বি-বিট তবে আমার ভাল পুরাতন ইউবি' ব্যান্ডওয়াগনে পাইলিংয়ের চেয়ে নতুন সংকলকগুলি আরও সুরক্ষিত হতে পারে সেই ক্ষেত্রে উল্লেখ করার জন্য বিরক্ত করার জন্য +1। এটি তাদের দেওয়া অন্যান্য অনেক উন্নয়নের শীর্ষে যা সরাসরি সুরক্ষার সাথে সম্পর্কিত নয় তবে যুক্তিসঙ্গত আধুনিক হওয়ার জন্য আরও বেশি গতি সরবরাহ করে।
আন্ডারস্কোর_ডি

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

চ্যান্ডলার ক্যারুথ খুব সুন্দর, এবং এই জাতীয় সুন্দর জিনিসগুলির কথা বলেন। পারলে আমি তাকে বিয়ে করতাম।
ড্যানিয়েল কামিল কোজার

46

আপনার সংকলিত কোডটিতে বাগগুলি রয়েছে যা ব্যবহার করা যেতে পারে। বাগগুলি তিনটি উত্স থেকে আসে: আপনার উত্স কোডে বাগগুলি, সংকলক এবং গ্রন্থাগারগুলিতে বাগগুলি এবং আপনার উত্স কোডে অপরিবর্তিত আচরণ যা সংকলকটি বাগে রূপান্তরিত হয়। (অপরিজ্ঞাত আচরণটি একটি বাগ, তবে সংকলিত কোডে এখনও কোনও বাগ নয় an উদাহরণস্বরূপ, i = i ++; সি বা সি ++ এ একটি বাগ, তবে আপনার সংকলিত কোডে এটি i দ্বারা 1 বাড়াতে পারে এবং ঠিক আছে, বা সেট করা যেতে পারে আমি কিছু জাঙ্ক এবং একটি বাগ হতে হবে)।

গ্রাহক ত্রুটি প্রতিবেদনের কারণে পরীক্ষার কারণে এবং বাগ ঠিক করার কারণে আপনার সংকলিত কোডে বাগের হার সম্ভবত কম। সুতরাং প্রাথমিকভাবে এখানে প্রচুর সংখ্যক বাগ থাকতে পারে তবে তা হ্রাস পেয়েছে।

আপনি যদি কোনও নতুন সংকলকটিতে আপগ্রেড করেন তবে আপনি সংকলক বাগ দ্বারা প্রবর্তিত বাগগুলি হারাতে পারেন। তবে এই ত্রুটিগুলি হ'ল এমন বাগগুলি যা আপনার জ্ঞানের ভিত্তিতে কেউ খুঁজে পায় নি এবং কেউই শোষণ করে নি। তবে নতুন সংকলকটির নিজস্ব বাগ থাকতে পারে এবং গুরুত্বপূর্ণভাবে নতুন সংকলকগুলির সংকলিত কোডে অপরিজ্ঞিত আচরণটি বাগগুলিতে পরিণত করার প্রবণতা প্রবল হয়।

সুতরাং আপনার সংকলিত কোডে আপনার সম্পূর্ণ নতুন বাগ থাকবে; হ্যাকাররা যে সমস্ত বাগ খুঁজে পেতে পারে এবং তাদের ব্যবহার করতে পারে। এবং যতক্ষণ না আপনি পুরো প্রচুর পরীক্ষা করে না ফেলে এবং দীর্ঘ সময় ধরে বাগ খুঁজে পেতে গ্রাহকদের সাথে আপনার কোডটি রেখে দেন, এটি কম সুরক্ষিত হবে।


6
সুতরাং অন্য কথায় ... সংকলকটি কোন সমস্যাগুলির পরিচয় দেয় তা বলার সহজ উপায় নেই এবং আপনার সমস্ত কিছু স্যুইচিংয়ের মাধ্যমে অজানা সমস্যার একটি আলাদা সেট পাওয়া যায়?
জেরেমি কাতো

1
@JeremyKato: ভাল, কিছু ক্ষেত্রে যেখানে তাই তুমি যা এছাড়াও পরিচিত সমস্যাগুলির একটি বিভিন্ন সেট পেয়ে। আমি নিশ্চিত নই যে সংকলকটিতে নিজেই জানা সুরক্ষার ত্রুটিগুলি রয়েছে, তবে একটি দৃ concrete় উদাহরণের জন্য মনে করুন যে কোনও নতুন সংকলককে আপডেট করার অর্থ সর্বশেষতম libc গ্রহণ করতে সক্ষম হওয়া (পুরানোটি ব্যবহার করার অর্থ সক্ষম হওয়া সম্ভব নয়) এটি করতে), তারপরে আপনি জানতে পারবেন আপনি এই ত্রুটিটি ঠিক করছেন getaddrinfo(): access.redhat.com/articles/2161461 । সেই উদাহরণটি আসলে কোনও সংকলক সুরক্ষা ত্রুটি নয়, তবে 10+ বছরেরও বেশি কিছু নির্দিষ্ট স্থির ত্রুটি থাকতে বাধ্য।
স্টিভ জেসোপ

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

19

যদি এটি ভেঙে যায় তবে এটি ঠিক করবেন না

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

তবে কোড ভিত্তিটি যদি প্রাচীন হয় এবং ব্যবহার করা কে ও আর সি এর দুর্বলতা যেমন টাইপ সুরক্ষার অভাব, অনিরাপদ বিবরণ ইত্যাদির অভাব ইত্যাদি প্রশমিত করার জন্য কাজটি করা হয় তবে এই প্রশ্নটি উত্থাপন করে " কম্পাইলারটিকে আরও আধুনিক সি 99 তে আপগ্রেড করবে / সি 11 স্ট্যান্ডার্ড কি সবকিছু ভেঙে দেয়? "

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

তারপরে আপনি এটি আপনার বসকে দেখাতে পারেন, " শিল্পের গৃহীত সি 99 / সি 11 মানগুলির সাথে সামঞ্জস্য রেখে আরও আপডেট করা কোড বেস, রিফ্যাক্টর ... "।

এটি সেই জুয়া যা ভারতে হবে, খুব সাবধানতার সাথে , পরিবর্তনের প্রতিরোধের পরিবেশটি সেখানে প্রদর্শিত হতে পারে এবং নতুন জিনিসগুলিকে স্পর্শ করতে অস্বীকার করতে পারে।

সম্পাদনা

মাত্র কয়েক মিনিটের জন্য ফিরে এসেছি, এটি অনেক কিছু বুঝতে পেরেছিল, কেএন্ডআর উত্পাদিত কোডটি 16 বিট প্ল্যাটফর্মে চলতে পারে, সম্ভাবনা রয়েছে, আরও আধুনিক সংকলককে আপগ্রেড করা আসলে কোডের ভিত্তিটি ভেঙে ফেলতে পারে, আর্কিটেকচারের দিক থেকে ভাবছে, 32 বিট কোড উত্পন্ন হবে , ইনপুট / আউটপুট ডেটাসেটগুলির জন্য ব্যবহৃত কাঠামোগুলিতে এটি মজাদার পার্শ্ব প্রতিক্রিয়া ফেলতে পারে, এটি সাবধানতার সাথে ওজন করার আরও একটি বিশাল কারণ।

এছাড়াও, যেহেতু ওপি কোডবেস তৈরির জন্য ভিজ্যুয়াল স্টুডিও ২০০৮ ব্যবহার করে উল্লিখিত হয়েছে, জিসিসি ব্যবহার করে পরিবেশে মিনজিডাব্লু বা সাইগউইনকে আনতে প্ররোচিত করতে পারে, এটি যদি লিনাক্সের জন্য লক্ষ্য না করে, তবে পরিবেশের উপর প্রভাব পরিবর্তন হতে পারে then পুরানো কেএন্ডআর কোড বেসে গোলমাল হ্রাস করতে কমপাইলারের অতিরিক্ত স্যুইচগুলি সংযোজন করতে পারে, অন্য গুরুত্বপূর্ণ বিষয়টি কোনও কার্যকারিতা নষ্ট না হয় তা নিশ্চিত করার জন্য প্রচুর পরীক্ষা চালানো হয়, এটি একটি বেদনাদায়ক অনুশীলন হতে পারে।


একই কোডটি উইন্ডোজ টার্গেটগুলির জন্য ভিজ্যুয়াল স্টুডিও ২০০৮ দ্বারা নির্মিত এবং এমএসভিসি এখনও সি 99 বা সি 11 সমর্থন করে না (নতুন এমএসভিসি কিনা তা আমি জানি না), এবং আমি সর্বশেষ জিসিসি ব্যবহার করে এটি আমার লিনাক্স বাক্সে তৈরি করতে পারি। সুতরাং আমরা যদি কেবল একটি নতুন জিসিসিতে ফেলে রাখি তবে এটি সম্ভবত আগের মতোই সূক্ষ্মভাবে তৈরি হবে।
কলমারিয়াস

ধন্যবাদ @Calmarius মাথা জন্য, হয়তো এটা আপনার প্রশ্নের সম্পাদন করা সেরা মন্তব্য অন্তর্ভুক্ত করা হতে পারে, যে জরুরী :) আর হওয়া উচিত ছিল; ডি
t0mm13b

@ কলমারিয়াস আমার উত্তরটি সম্পাদনা করেছেন, যা সদ্য আপডেট হওয়া প্রশ্নে আমার চিন্তাভাবনা।
t0mm13b

2
"একটি 16 বিট প্ল্যাটফর্মে চলতে পারে, সম্ভাবনা রয়েছে, আরও আধুনিক সংকলকটিতে আপগ্রেড করা আসলে কোড বেসটি ভেঙে ফেলতে পারে, আর্কিটেকচারের দিক দিয়ে ভাবছে, 32 বিট কোড" আমি মনে করি না যে প্রশ্নটি নতুন বাস্তবায়ন-সংজ্ঞায়িত কোডিং পোর্টিং সম্পর্কে? প্যারামিটার।
পাস্কেল কুয়াক

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

9

কোনও পুরানো সি সংকলক ব্যবহার করে সংকলিত প্রোগ্রামটির সুরক্ষার সাথে আপস করতে পারেন?

অবশ্যই এটি হতে পারে, যদি পুরানো সংকলকটিতে ज्ञিত বাগগুলি থাকে যা আপনি জানেন যে আপনার প্রোগ্রামকে প্রভাবিত করবে।

প্রশ্নটি হয়, তাই না? নিশ্চিতরূপে জানতে, আপনাকে আপনার সংস্করণ থেকে বর্তমান তারিখের পুরো পরিবর্তন লগটি পড়তে হবে এবং কয়েক বছর ধরে স্থায়ী প্রতি একক বাগ পরীক্ষা করতে হবে।

আপনার প্রোগ্রামটিতে প্রভাব ফেলবে এমন সংকলক বাগের কোনও প্রমাণ যদি খুঁজে না পান, কেবল স্বার্থে জিসিসি আপডেট করা কিছুটা বিড়ম্বনা বলে মনে হয়। আপনাকে মনে রাখতে হবে যে নতুন সংস্করণগুলিতে নতুন বাগ থাকতে পারে যা এখনও আবিষ্কার হয়নি। জিসিসি 5 এবং সি 11 সমর্থন নিয়ে সম্প্রতি প্রচুর পরিবর্তন করা হয়েছে।

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


6
আমি মনে করি না এটি প্যারানোইয়া; আমি মনে করি যে ওপি তাঁর বসকে বোঝানোর জন্য কারণগুলি আবিষ্কার করার চেষ্টা করছে। সম্ভবত ওপি প্রকৃতপক্ষে একটি নতুন সংকলক চায় কারণ এগুলি আরও ভাল asm তৈরি করে (LTO সহ ক্রস-ফাইল অপ্টিমাইজেশন সহ), আরও দরকারী ডায়াগনস্টিকস / সতর্কতা রয়েছে এবং আধুনিক ভাষার বৈশিষ্ট্য এবং বাক্য গঠনটির অনুমতি দেয়। (যেমন সি 11 স্টেট্যাটমিক)।
পিটার কর্ডেস

9

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

এই আক্রমণটি এই নিবন্ধের প্রোগ্রাম সুডোতে চিত্রিত হয়েছে । বিসিআরআইপি জাভাস্ক্রিপ্ট মিনিফায়ারদের জন্য দুর্দান্ত ফলোআপ লিখেছিল ।

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


7

পুরানো সংকলকগুলির জানা হ্যাকিং আক্রমণগুলির বিরুদ্ধে সুরক্ষা নাও থাকতে পারে। স্ট্যাক বিস্ফোরক সুরক্ষা, উদাহরণস্বরূপ, জিসিসি ৪.১ না হওয়া পর্যন্ত চালু করা হয়নি । হ্যাঁ, পুরানো সংকলকগুলির সাথে সংকলিত কোডগুলি নতুন সংকলকগুলি যেভাবে রক্ষা করতে পারে সেভাবে দুর্বল হতে পারে।


6

চিন্তার আরেকটি বিষয় হ'ল নতুন কোডের বিকাশ

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

পুরানো সংকলকগুলি কম বৈশিষ্ট্যগুলি সরবরাহ করে (ভাষার বৈশিষ্ট্য সহ!) এবং পাশাপাশি অনুকূলিত করবেন না। প্রোগ্রামাররা এই ঘাটতিগুলি ঘটাতে পারে - যেমন অনুপস্থিত বৈশিষ্ট্যগুলি পুনরায় প্রয়োগ করে, বা চতুর কোড যা অস্পষ্ট তবে দ্রুত চালিত হয় - সূক্ষ্ম বাগ তৈরির জন্য নতুন সুযোগ তৈরি করে।


5

নাঃ

কারণটি সহজ, পুরানো সংকলকটিতে পুরানো বাগ এবং শোষণ থাকতে পারে, তবে নতুন সংকলকটিতে নতুন বাগ এবং শোষণ থাকবে।

নতুন সংকলকটিতে আপগ্রেড করে আপনার কোনও বাগ "ফিক্সিং" করছে না। আপনার পুরানো বাগগুলি এবং নতুন বাগ এবং শোষণের জন্য স্যুইচিং।


3
এগুলি খুব সরল মনে হয়েছে: নতুন সংকলকটির দুর্বলতা থাকতে পারে তবে আমি পুরানো সংকলকটির তুলনায় এগুলি কম হবে বলে আশা করব এবং এটি সম্ভবত বেশ কয়েকটি কোডের দুর্বলতাগুলি সনাক্ত করতে পারে যা তখন থেকে জানা হয়ে গেছে।
পিজেট্রাইল

তবে নতুন সংকলকটির অজানা নতুন দুর্বলতা থাকতে পারে। একা সংকলকটি কোনও সুরক্ষা ঝুঁকি নয় যা আপডেট করার প্রয়োজন। আপনি আপনার পৃষ্ঠের অঞ্চল হ্রাস করছেন না। আপনার ট্রেডিং একটি অজানা সেট জন্য সমস্যার একটি পরিচিত সেট।
কোটায়ার

প্রারম্ভিক জিসিসির দিনগুলি থেকে বাগগুলি খুঁজে পেতে সহায়তা করার সরঞ্জামগুলি এবং মান উন্নত করতে সহায়তা করার জন্য এই সরঞ্জামগুলি (স্ট্যাটিক বিশ্লেষণ, চালিত কোড গতিশীল বিশ্লেষণ / স্যানিটাইজারস, ফিজার ইত্যাদি) সংকলক কোডেও প্রয়োগ করা হয়েছে। জিসিসি 2 যুগে সমস্ত শ্রেণীর বাগগুলি খুঁজে পাওয়া অনেক কঠিন ছিল। সংস্করণগুলির তুলনায় সংকলক বাগের তুলনা - পৃষ্ঠা 7 দেখুন: cs.utah.edu/~regehr/papers/pldi11-preprint.pdf জিসিসি 4.5 এবং এলএলভিএম 2.8 (প্রকাশের ক্ষেত্রে সর্বশেষ) ফাজিং থেকে স্বল্পতম বাগ রয়েছে।
জেটস্কি এস-টাইপ

2

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


0

আপনার প্রশ্ন দুটি ভাগে পড়ে:

  • সুস্পষ্ট: "পুরানো সংকলকটি ব্যবহার করার ক্ষেত্রে আরও বেশি ঝুঁকি রয়েছে" (আপনার শিরোনামের মতো কম-বেশি)
  • অন্তর্নিহিত: "আমি কীভাবে আপগ্রেড করতে পরিচালনকে রাজি করতে পারি"

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

তবে যদি আপনার সিস্টেম হ্যাকারদের কাছে না আসে তবে আপনার সম্ভবত আরও বেশি আগ্রহী হওয়া উচিত যে কোনও সংকলক আপগ্রেড আপনার কার্যকারিতা বাড়িয়ে তুলবে: এমএসভিএস ২০১৩ কোড বিশ্লেষণ প্রায়শই এমএসভিএস ২০১০-এর চেয়ে খুব শীঘ্রই সম্ভাব্য বাগগুলি খুঁজে পায় এবং এটি কম-বেশি C99 / C11 সমর্থন করে - এটি আনুষ্ঠানিকভাবে হয় কিনা তা নিশ্চিত নয় তবে ঘোষণাগুলি বিবৃতি অনুসরণ করতে পারে এবং আপনি forলুপগুলিতে ভেরিয়েবল ঘোষণা করতে পারেন ।

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