জাভাতে কি বাফার ওভারফ্লো হয়?


97

জাভাতে কি বাফার ওভারফ্লো হয়? যদি হ্যাঁ আপনি আমাকে পরিস্থিতি দিতে পারেন?


4
কিছু লাইব্রেরি ফাংশন (নেটিভ কোডে প্রয়োগ করা হয়েছে) এর মধ্যে বাগ রয়েছে বলে জানা গেছে। বিশেষত জাভা 5 এরিয়ায় 2D তে প্রচুর শোষণ, শব্দ বা রঙিন প্রোফাইলগুলি জানা গেছে।
9:25

উত্তর:


109

যেহেতু জাভা স্ট্রিংগুলি চর অ্যারে ভিত্তিক এবং জাভা স্বয়ংক্রিয়ভাবে অ্যারের সীমা পরীক্ষা করে, তাই কেবলমাত্র অস্বাভাবিক পরিস্থিতিতেই বাফার ওভারফ্লোগুলি সম্ভব:

  1. আপনি যদি জেএনআই এর মাধ্যমে নেটিভ কোডটি কল করেন
  2. জেভিএম নিজেই (সাধারণত সি ++ এ লিখিত)
  3. দোভাষী বা জেআইটি সংকলক সঠিকভাবে কাজ করে না (জাভা বাইটকোড ম্যান্ডেটেড বাউন্ডস চেকস)

24

জাভা এবং সি # এর মতো পরিচালিত ভাষাগুলিতে এই সমস্যাগুলি নেই, তবে নির্দিষ্ট ভার্চুয়াল মেশিনগুলি (জেভিএম / সিএলআর / ইত্যাদি) যা আসলে কোড চালায়।


5
অনিরাপদ প্রসঙ্গে সি # এর বাফার ওভারফ্লো হতে পারে। জাভা ভাষা হিসাবে সম্পূর্ণরূপে এটি নিষিদ্ধ করে (অবিবাহিত পয়েন্টার অ্যাক্সেস পেতে আপনার অবশ্যই জেএনআই এর মাধ্যমে ভাষা পরিবর্তন করতে হবে)
ShuggyCoUk

4
ভাল যুক্তি. অনিরাপদ সি # এর সাথে আপনি অবশ্যই একটি স্বাচ্ছন্দ্যযুক্ত পরিচালিত বিশ্বে স্যান্ডবক্স না হয়ে থাকবেন।
ব্রায়ান রাসমুসেন

4
ঠিক আছে, এবং আপনি কোনও সুরক্ষিত না লিখলেও বা কোনও ইন্টারপ না করলেও আপনি একটি লাইব্রেরি ব্যবহার করতে পারেন does সুতরাং এটি জন্য নজর রাখা কিছু।
ববিশ্যাফটো

13

সমস্ত উদ্দেশ্য এবং উদ্দেশ্যে, না।

জাভা অ্যারে বাউন্ডিং যাচাই করে যা পরীক্ষা করে যে বরাদ্দ অ্যারে বাইরের অঞ্চল থেকে তথ্য অ্যাক্সেস করা যাবে না। যখন কেউ অ্যারের আকারের বাইরে থাকা অঞ্চলটি অ্যাক্সেস করার চেষ্টা করে, তখন একটি ArrayOutOfBoundsব্যতিক্রম ছুঁড়ে দেওয়া হবে।

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


10

হ্যা এবং না. না, এতে আপনি সত্যই ভুলের সাথে নিজেকে বাফার ওভারফ্লো দুর্বলতার জন্য খুলতে পারবেন না কারণ এটি একটি পরিচালিত মেমরির মডেল। তবে, জেভিএম এবং জেডিকে বাফার ওভারফ্লো দুর্বলতা থাকতে পারে। এই সেকুনিয়া পরামর্শ দেখুন:

http://secunia.com/advisories/25295

অথবা পূর্ববর্তী বেশ কয়েকটি জেডিকে এবং জেআরই দুর্বলতার বিষয়ে এই পুরানো পরামর্শগুলি দেখুন:

  • জাভা রানটাইম এনভায়রনমেন্ট (জেআরই) "আনপ্যাক ২০০" জার আনপ্যাকিং ইউটিলিটি ইন্টিজার এবং বাফার ওভারফ্লো ঝুঁকির কারণে প্রাপ্য অধিকারগুলির বর্ধন হতে পারে https://download.oracle.com/sunalerts/1020225.1.html

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

    এই বিষয়গুলি আমাদের নজরে আনার জন্য সূর্য আইডিফেন্স ভিসিপি ( http://labs.idefense.com/vcp/ ) এবং গুগলের ক্রিস ইভান্সের সাথে কাজ করে "পুনর্গঠন" ধন্যবাদ দিয়ে স্বীকার করেছেন ।

  • সান জাভা ডেভলপমেন্ট কিট (জেডিকে) এবং জাভা রানটাইম এনভায়রনমেন্ট (জেআরই) এ একাধিক দুর্বলতা চিহ্নিত করা হয়েছে। https://security.gentoo.org/glsa/200705-23

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


9

স্ট্যাকের ওভারিটাইটিংয়ের কঠোর অর্থে একটি বাফার ওভারফ্লোতে প্রয়োজন হয়:

  1. কাঠামোর মধ্যে একটি বাগ (এগুলি অতীতে বিদ্যমান ছিল এবং আবার ভাল হতে পারে)
  2. জেএনআই এর ব্যবহার (মূলত আর পরিচালিত কোড ব্যবহার করা হয় না)

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

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


4

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


3

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


3

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


3

কোনও ব্যবস্থার জন্য কোনও অ্যারের বৈধ এন্ট্রিগুলিতে এটি লেখার পক্ষে সম্ভব হয় যা সাধারণত ইন্টিজার ওভারফ্লো হয়ে যায়।

উদাহরণস্বরূপ নিম্নলিখিত সীমা পরীক্ষা করতে যথেষ্ট নয়:

/* !! WRONG !! */ 0 <= off && 0 <= len && off+len <= buff.length /* !! WRONG !! */

আইআইআরসি-তে StringBufferএকবার এর মতো একটি বাগ ছিল, তবে আপনি এটির সাথে আকর্ষণীয় কিছু করতে পারেন নি।


সীমানা যাচাই করার জন্য কি যথেষ্ট?
ব্রোয়াম

4
@ ব্রোম: 0 <= off && 0 <= len && off <= buff.length-lenআমি মনে করি আমাকে উদ্ধৃত করবেন না। এটি দেখতে একই রকম তবে কোনও সম্ভাব্য ওভারফ্লো নেই (মূল বন্ধে + লেনটি নেতিবাচক হতে পারে এবং সুতরাং অ্যারের দৈর্ঘ্যের তুলনায় স্পষ্টতই ছোট)। নিশ্চিত করুন যে কোনও রক্ষণাবেক্ষণের প্রোগ্রামার এটিকে সুস্পষ্ট আকারে "টিডস" করে না। আমি পূর্ণসংখ্যার ওভারফ্লো প্রচুর পরিমাণে বিভ্রান্ত দেখতে পাই। এটি সম্পর্কে কিছুক্ষণ চিন্তা করতে হবে এবং তারপরে সন্দেহজনক সন্দেহ রয়েছে যে আমি এটি ভুল করে ফেলেছি। তবে অবশ্যই, অন্য একজন পর্যালোচক এবং মূল প্রোগ্রামার থাকা উচিত - একসাথে অবশ্যই কোনও ত্রুটি হওয়ার উপায় নেই! (না)
টম হাটিন -

আমি এই কিছুটা তাকিয়ে ছিল কিন্তু আপনি ঠিক বলেছেন। বন্ধ + লেন উপচে পড়তে পারে এবং সিতে ... মোড় নিতে পারে জাভাতে , যদি আমার ভুল হয় না - আপনি ঠিক হওয়ার আগেই একটি ওভারফ্লো ব্যতিক্রম পেয়েছেন, তাই না?
ব্রোম

4
পূর্ণসংখ্যার গাণিতিক নিঃশব্দে চারপাশে আবৃত। সি # এর একটি "মোড" রয়েছে যেখানে ব্যতিক্রম ওভারফ্লোতে নিক্ষেপ করা হয়, তবে আমি মনে করি না এটি বেশি ব্যবহৃত হয় (আপনি যদি এটি ব্যবহার করার কথা ভাবেন, তবে সম্ভবত আপনি সঠিক জিনিসগুলি করার জন্য ভাবেন)।
টম হাটিন -

1

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

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