মৃত্যুর পিং! FreeBSD নেটওয়ার্ক টুল PlatoBlockchain ডেটা ইন্টেলিজেন্সে ক্র্যাশস্ট্যাস্টিক বাগ সংশোধন করে। উল্লম্ব অনুসন্ধান. আ.

মৃত্যুর পিং! ফ্রিবিএসডি নেটওয়ার্ক টুলে ক্র্যাশস্ট্যাস্টিক বাগ সংশোধন করে

প্রথম নিম্ন-স্তরের নেটওয়ার্ক টুলগুলির মধ্যে একটি যা যেকোনো কম্পিউটার ব্যবহারকারী শিখতে পারে তা হল সম্মানীয় ping ইউটিলিটি।

সাবমেরিন জড়িত যেকোন ও পুরানো-স্কুল যুদ্ধের মুভির দৃশ্যের নামকরণকৃত শব্দ প্রভাবের নামানুসারে, কমান্ডটি SONAR নামে পরিচিত RADAR-এর আন্ডারওয়াটার সংস্করণের একটি রূপক প্রতিধ্বনি (দেখুন সেখানে আমরা কী করেছি?)।

আপনি একটি পিং পাঠান (আরো একটি doinnnng শব্দের মত, মধ্যে বাস্তবতা) ক্ষীণ গভীরতার মধ্যে, এবং এর ভয়ঙ্কর প্রতিধ্বনি আপনার কাছে ফিরে আসতে কতক্ষণ সময় নেয় তা পরিমাপ করে এবং পার্শ্ববর্তী সমুদ্রে শব্দের গতি অনুমান করে, আপনি প্রতিধ্বনি উৎপন্নকারী বস্তুর দূরত্ব গণনা করতে পারেন।

আশ্চর্যজনকভাবে, আপনি সম্ভবত TCP/IP সংক্ষেপে শুনেছেন যেটি ইন্টারনেটকে শক্তি দেয় এমন প্রোটোকল আঠার জেনেরিক বর্ণনা হিসাবে ব্যবহৃত হয়, ping প্রযুক্তিগতভাবে TCP/IP ব্যবহার করে না।

আসলে, TCP/IP এর জন্য সংক্ষিপ্ত ইন্টারনেট প্রোটোকলের মাধ্যমে ট্রান্সমিশন কন্ট্রোল প্রোটোকল, এবং ইন্টারনেটের মাধ্যমে এমনভাবে ডেটা পাঠানোর জন্য একটি মোটামুটি উচ্চ-স্তরের প্রক্রিয়া বোঝায় যাতে নেটওয়ার্ক নিজেই অনেক কিছু রাখে "এটি কি আসলেই সঠিকভাবে কাজ করেছিল?" আপনার জন্য প্রচেষ্টা।

উদাহরণ স্বরূপ, TCP কানেকশনে, আপনার পাঠানো ডেটার যেকোন অংশ হয় অন্য প্রান্তে অক্ষত অবস্থায় পৌঁছানোর বা একটি ত্রুটি সৃষ্টি করার গ্যারান্টি দেওয়া হয় যাতে আপনি জানেন যে তারা এটি তৈরি করেনি।

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

পিং ভিন্ন

সার্জারির ping যাইহোক, কমান্ডটি সাধারণত আপনার আগ্রহের কম্পিউটারটি আদৌ অনলাইনে আছে কিনা তা যাচাই করতে ব্যবহৃত হয়, বিশেষ করে যদি এটি আপনার আশা করা উচ্চ-স্তরের TCP সংযোগগুলি গ্রহণ না করে, যেমন ইমেল গ্রহণ করা বা SSH লগইন করার অনুমতি দেওয়া।

এটি আপনাকে দ্রুত নির্ণয় করতে সাহায্য করে যে নেটওয়ার্ক বা সার্ভার নিজেই ডাউন হয়ে যাওয়ার কারণে বা সেই সার্ভারে চলা পৃথক পরিষেবাগুলি সঠিকভাবে শুরু করতে ব্যর্থ হওয়ার কারণে বিভ্রাট হতে পারে কিনা।

ফলস্বরূপ, ping TCP এর চেয়ে অনেক নিম্ন-স্তরের প্রোটোকল ব্যবহার করে।

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

UDP নিজেই আপনাকে জানায় না যে আপনার ডেটা অন্য প্রান্তে এসেছে কি না, এবং এমনকি যদি এটি অক্ষত থাকে, UDP আপনার প্যাকেটগুলি যে ক্রমানুসারে পাঠানো হয়েছিল তার ট্র্যাক রাখে না, তাই এটি তাদের পুনরায় সাজাতে পারে না অন্য প্রান্তে যদি তারা ক্রম থেকে বেরিয়ে আসে।

Ping, এটির মূল্যের জন্য, একটি খুব-নিম্ন-স্তরের-প্রকৃতপক্ষে প্রোটোকল ব্যবহার করে, বিশেষভাবে সমস্যা সমাধান এবং নেটওয়ার্ক পুনর্গঠনের উদ্দেশ্যে ডিজাইন করা হয়েছে, যা ICMP নামে পরিচিত, বা ইন্টারনেট নিয়ন্ত্রণ বার্তা প্রোটোকল.

সাধারণত অপারেটিং সিস্টেম কার্নেলে সরাসরি পরিচালনা করা হয়, যাতে ICMP/IP প্যাকেটগুলি প্রায় নিশ্চিত হয়ে যায় এমনকি কোনো উচ্চ-স্তরের নেটওয়ার্কিং সফ্টওয়্যার সঠিকভাবে না আসলেও, ICMP উল্লেখযোগ্যভাবে দুটি বিশেষ বার্তা প্রকার অন্তর্ভুক্ত করে:

  • 0x08 টাইপ করুন। সরকারীভাবে বলা হয় ICMP Echo, এই প্যাকেট সাজানোর সাধারণত একটি ইকো অনুরোধ বলা হয়। এটা কি ping নেটওয়ার্কে সক্রিয় কম্পিউটারের জন্য অনুসন্ধান করার জন্য প্রোগ্রাম পাঠায়।
  • 0x00 টাইপ করুন। সরকারীভাবে বলা হয় ICMP Echo Reply, এই প্যাকেট টাইপ হয় এটা ঠিক কি বলে. একটি কম্পিউটার যেটি জীবিত, অনলাইন এবং ICMP ইকো ট্র্যাফিক ব্লক করার জন্য কনফিগার করা হয়নি, অনুমিত হয় যে এই ধরণের প্যাকেটটি সরাসরি সেই কম্পিউটারে পাঠাবে যেটি এটির অনুরোধ করেছে৷

এটার মত:

$ ping -c 3 -p 4E414B45445345435552495459 nakedsecurity.sophos.com প্যাটার্ন: 0x4e414b45445345435552495459 PING news-sophos.go-vip.192.0.66.227 (56 ডেটা) এর দ্বারা 84 (64) থেকে 192.0.66.227 বাইট: icmp_seq=192.0.66.227 ttl=1 time=53 ms 84.0 বাইট 64 থেকে (192.0.66.227): icmp_seq=192.0.66.227ms থেকে 2 বাইট। 53 (85.1): icmp_seq=64 ttl=192.0.66.227 time=192.0.66.227 ms --- news-sophos.go-vip.net পিং পরিসংখ্যান --- 3 প্যাকেট প্রেরণ, 53টি প্রাপ্ত, 84.8% প্যাকেট ক্ষতি, সময় 3ms rtt min/ avg/max/mdev = 3/0/2004/84.025 ms

দেখতে a ping কিছুটা নিম্ন স্তরে কাজ করার জন্য, আমরা আমাদের নিজস্ব একটি ICMP ইকো প্যাকেট তৈরি করতে এবং যদি থাকে তবে ফিরে আসা উত্তরটি পড়ার জন্য নিবন্ধের শেষে যে লুয়া কোডটি পাবেন তা ব্যবহার করব:

$ sudo luax ping.lua nakedsecurity.sophos.com 192.0.66.227 এ ICMP ECHO অনুরোধ পাঠানো হচ্ছে --> 00000000 08 00 03 02 bb 5a 6f 1d 50 69 6e 67 52 65ing.. | 71 75 00000010 65 73d 74 4 65 73 73 61 67 65 20 42 42 35 |estMessage BB41A36| 5 6 00000020 46 |F31D | ফিরে পেয়েছি--> 44 1 00000000 45 00 f00 af 37 6 00 00 35 01f c94 7 0 e00 |E..42....3.....B.| 7 XX XX XX XX 5 00000010 00b 00 bb 0a 02f 5d 6 1 50e 69 |.........Zo.Ping| 6 67 00000020 52 65 71 75 65 73d 74 4 65 73 73 61 67 65 |Request Message B | 20 42 00000030 42 35 41 36 46 |B31A44F5D |

উপায় দ্বারা, আমরা ব্যবহার করা প্রয়োজন sudo আমাদের স্ক্রিপ্টটি সুপার-ইউজার বিশেষাধিকারের সাথে চালানোর জন্য উপরে, কারণ আমরা তৈরি করেছি যা a নামে পরিচিত কাঁচা আইপি সকেট – যেটি টিসিপি, ইউডিপি এবং এখানে প্রয়োজন অনুযায়ী আইসিএমপি সহ আমাদের পছন্দের যেকোন অন্তর্নিহিত বিন্যাসে তৈরি করা যেতে পারে।

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

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

আমরা সংক্ষিপ্ততার জন্য আমাদের নমুনা স্ক্রিপ্ট থেকে এই বিশেষাধিকার-ড্রপিং কোডটি বাদ দিয়েছি। আপনি ব্যবহার করতে পারেন posix.unistd.setpid() সকেট তৈরি করার পরে একটি সুবিধাবিহীন অ্যাকাউন্টে স্যুইচ করার ফাংশন, কিন্তু কোনো ডেটা পাঠানো বা গ্রহণ করার আগে।

উত্তর পরীক্ষা করা

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

আমরা এই ডেটা পার্স বা অন্যভাবে প্রক্রিয়া করার চেষ্টা করিনি, কিন্তু FreeBSD ping প্রোগ্রামটিকে উত্তরটি বোঝার জন্য এটি করতে হবে, যেকোন ত্রুটির বার্তাগুলি যা ফিরে আসে সেগুলি বোঝা সহ।

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

IPv4 প্যাকেট হেডার সাধারণত দেখতে অনেকটা আপনি উপরে দেখেন, যেখানে IP হেডার দিয়ে শুরু হয় 45 00 00 37... এবং মোট 20 বাইটের জন্য চালিয়ে যান, হিসাবে দেখানো বাইট পর্যন্ত এবং সহ ...XX XX XX XX, যা আমার ল্যাপটপের আইপি ঠিকানা।

এটার মত:

00000000 45 00 00 37 f6 af 00 00 35 01 94 7f c0 00 42 e3 |E..7....5.....B.| 00000010 XX XX XX XX |..... | আইপি সংস্করণ এবং শিরোনামের দৈর্ঘ্য: 0x45 (4 = IPv4, 5 = পাঁচটি 32-বিট শব্দ, অর্থাৎ 20 বাইট পরিষেবার ধরন এবং কনজেশন ডেটা: 0x00 প্যাকেটের মোট দৈর্ঘ্য: 0x0037 (দশমিক 55) সিকোয়েন্স তথ্য: F6 ​​AF 00 00 টাইম-টু -লাইভ (হপস বাম): 0x35 (দশমিক 53) প্রোটোকলের ধরন: 0x01 (আইসিএমপি) চেকসাম: 0x947F (দশমিক 38015) কম্পিউটারের আইপি নম্বর পাঠানো হচ্ছে: C0 00 42 E3 (192.0.66.227 = nakedsecurity.so IPhomy) ল্যাপটপ): XX XX XX XX (REDACTED = আমার নিজের আইপি নম্বর)

ফ্রিবিএসডি এর ping প্রোগ্রামাররা, মনে হয়, এই ধরণের হেডারগুলি, প্রকৃতপক্ষে, সর্বদা ঠিক 20 বাইট দীর্ঘ হবে, প্রথম বাইটে সেই হেডার-দৈর্ঘ্যের মানের উপর ভিত্তি করে 0x45, IPv4 নির্দেশ করছে (0x4?) একটি 5-DWORD সহ (0x?5), অথবা 20-বাইট, হেডার।

উদ্বিগ্ন হওয়ার জন্য মাত্র 20 বাইটের সাথে, প্রোগ্রামাররা স্ট্যাকে নির্দিষ্ট-আকারের বাফারগুলি বরাদ্দ করে যেখানে তারা উত্তরে আইপি হেডারগুলির একটি অনুলিপি রাখতে পারে, পাশাপাশি মূল অনুরোধ থেকে যে কোনও এমবেড করা আইপি শিরোনাম, যদি পরিচালনা করার জন্য কোনও ত্রুটির শর্ত থাকে। .

আপনি অনুমান করতে পারেন এটা কোথায় যাচ্ছে.

IPv4 শিরোলেখের সেই প্রথম বাইটটির আইনত কোনো মান থাকতে পারে 0x45 (নূন্যতম হেডারের আকার 5 DWORD, বা 20 বাইট, যেমন দেখানো হয়েছে) পর্যন্ত 0x4F (15টি DWORD নির্দেশ করে, কারণ 0xF হল দশমিক 15, বা মোট হেডার ডেটার 60 বাইট), এইভাবে সুন্দরভাবে হেডার ডেটার ঐচ্ছিক অতিরিক্ত 40 বাইটের অনুমতি দেয়।

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

সাইবার অপরাধীদের সতর্ক থাকুন যারা আপনাকে পরীক্ষায় ফেলেছে

আপনি যেমন কল্পনা করতে পারেন, এই অতিরিক্ত ক্ষেত্রগুলি প্রায় কখনই ব্যবহার করা হয় না, আপনি হয়তো কখনোই IPv4 প্যাকেট ছাড়া অন্য কিছু দেখতে পাবেন না 0x45 শুরুতে, এবং মোট 20 বাইট হেডার ডেটা সহ, যদি না আপনি সাইবার অপরাধীদের একটি গুচ্ছের মুখোমুখি হন যারা আপনাকে পরীক্ষা করতে প্রস্তুত।

দুঃখজনকভাবে, আক্রমণকারীকে এমন একটি সার্ভারে কারচুপি করা থেকে আটকানোর মতো অনেক কিছুই নেই যা অনুমান করে যে আপনি ফ্রিবিএসডি ব্যবহার করছেন কিনা এবং ইচ্ছাকৃতভাবে বড় আকারের আইসিএমপি/আইপি ইকো রিপ্লাই প্যাকেট তৈরি করে স্ট্যাক বাফার ওভারফ্লো আপনার ভিতরে ping প্রোগ্রাম.

যদি কখনও আপনি তাদের সার্ভার সক্রিয় কিনা তা পরীক্ষা করে দেখেন (যা আপনি এমনকি করতে পারেন, বা সম্ভবত বিশেষ করে, যদি আপনি মনে করেন এটি সন্দেহজনক!), তবে আপনাকে একটি বোবি-ফাঁদে উত্তর দিয়ে লক্ষ্যবস্তু করা যেতে পারে।

সর্বোপরি, আপনার ping প্রোগ্রাম ক্র্যাশ হবে; যাইহোক, সবচেয়ে খারাপভাবে, যেমন FreeBSD নিরাপত্তা উপদেষ্টা উদারভাবে স্বীকার করে, "একটি দূষিত হোস্টের পক্ষে পিং এ রিমোট কোড এক্সিকিউশন ট্রিগার করা সম্ভব হতে পারে।"

সৌভাগ্যবশত, FreeBSD লেখক হিসেবেও খুঁজে বের করা, "[t]তিনি পিং প্রক্রিয়াটি ফ্রিবিএসডি-র সমস্ত প্রভাবিত সংস্করণে একটি সক্ষমতা মোড স্যান্ডবক্সে চলে এবং এইভাবে বাগটি ঘটতে পারে এমন বিন্দুতে এটি কীভাবে সিস্টেমের বাকি অংশের সাথে যোগাযোগ করতে পারে সে সম্পর্কে খুব সীমাবদ্ধ।"

অন্য কথায়, আপনাকে অবশ্যই প্যাচ করতে হবে, তবে ঝুঁকিগুলিকে বিনয়ী হিসাবে বিবেচনা করা যেতে পারে।

উল্লেখযোগ্যভাবে, ping প্রোগ্রামটি শুধুমাত্র একটি স্যান্ডবক্সে লক করা হয় না, কিন্তু যখন বাগি কোড পৌঁছে যায় তখন রুট হিসাবে চলছে না, যেমন নিরাপত্তা পরামর্শে নিশ্চিত করা হয়েছে: "কখন ping রান করে, এটি তার কাজ করার জন্য প্রয়োজনীয় কাঁচা সকেট তৈরি করে এবং তারপরে তার উন্নত সুবিধাগুলি প্রত্যাহার করে।"

উপরে বর্ণিত হিসাবে, সুপার ইউজার ক্ষমতা শুধুমাত্র অপারেটিং সিস্টেম থেকে একটি কাঁচা আইপি সকেট অর্জনের জন্য প্রয়োজন, ব্যবহার করার জন্য নয় sendto() এবং recvfrom() যে সকেট পরে ফাংশন.

এই বাগটিকে অফিসিয়াল আইডেন্টিফায়ার দেওয়া হয়েছে জন্য CVE-2022-23093; এটা নিরাপত্তা উপদেষ্টা নথিভুক্ত করা হয় FreeBSD-SA-22:15.ping.

কি করো?

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

সেখানে যত্ন নিন!


পিং ট্রাফিক প্রদর্শনের জন্য উদাহরণ কোড


সময় স্ট্যাম্প:

থেকে আরো নগ্ন সুরক্ষা