paint-brush
বাতাসে আক্রমণ - এইচটিএমএল ইনজেকশনদ্বারা@jvictors
1,133 পড়া
1,133 পড়া

বাতাসে আক্রমণ - এইচটিএমএল ইনজেকশন

দ্বারা Jesse Victors7m2023/08/19
Read on Terminal Reader
Read this story w/o Javascript

অতিদীর্ঘ; পড়তে

13ই জুলাই, আমরা একটি আকর্ষণীয় দুর্বলতা আবিষ্কার করেছি। একটি নির্দিষ্ট ওয়েবপেজ ডিজিটাল রেডিও চ্যাটার ট্র্যাক করছিল এবং এটি তার স্টেশন কি শুনছে তার একটি চলমান লগ প্রদর্শন করবে। আপনি যদি এই ধরণের জিনিসের মধ্যে থাকেন তবে এটি একটি সহজ হাতিয়ার; সর্বোপরি, আপনার কলগুলি শোনা যাচ্ছে কিনা বা আপনি যোগ দিতে চাইতে পারেন এমন চলমান কথোপকথন আছে কিনা তা জেনে খুব ভাল লাগছে। এই টুলটি যা শুনছে তা ক্যাপচার করে ওয়েবপেজে ঢুকিয়ে দিয়েছে। একটি বার্তা পাঠান এবং কয়েক সেকেন্ড পরে এটি সেখানে প্রদর্শিত হবে। যদি বার্তাটিতে HTML অন্তর্ভুক্ত থাকে, তাহলে সেটি ওয়েবপেজেও শেষ হবে। ক্লাসিক এইচটিএমএল ইনজেকশন।
featured image - বাতাসে আক্রমণ - এইচটিএমএল ইনজেকশন
Jesse Victors HackerNoon profile picture
0-item

পুরনো স্কুলের ফোনের বাঁশি ফিরে এসেছে!


ঠিক আছে, প্রায়, কিন্তু নীচের এই অডিওটি খুব বেশি দূরে নয়।


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


তাহলে এটা কিভাবে কাজ করে?

এই ধরনের আক্রমণ করতে, আপনার আসলেই ইন্টারনেটের প্রয়োজন নেই - আপনার শুধু একটি লম্বা তারের প্রয়োজন। 2023 সালের ফেব্রুয়ারিতে প্রকাশিত আমাদের অ্যাটাকস ওভার দ্য এয়ার সিরিজে, আমরা একটি বাস্কেটবল স্কোরবোর্ড দ্বারা উপস্থাপিত ওয়্যারলেস সমস্যাগুলি নিয়ে আলোচনা করেছি যেটি 913 মেগাহার্টজে কাজ করে এমন একটি কন্ট্রোলার সহ। এই পোস্টে, আমরা শর্টওয়েভ রেডিও ব্যান্ডে, ফ্রিকোয়েন্সিতে নিচের দিকে চলে যাব। এই আক্রমণ 7.078 এবং 14.078 MHz এ কাজ করে।


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


(14.078 MHz-এ গত 24 ঘন্টা JS8 ট্রাফিক)


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

তাহলে কিভাবে আপনি একটি শর্টওয়েভ সংকেত দিয়ে একটি ওয়েবসাইট আক্রমণ করবেন?

JS8 বার্তাগুলি ASCII টেক্সটে তৈরি করা হয়, সমস্ত বড় হাতের অক্ষর। বেশিরভাগ বার্তাগুলি প্রশস্ত গোষ্ঠীতে পাঠানো হয়, যেমন Skywarn, JS8Chess, বা, সবাইকে উল্লেখ করার জন্য, কেবল ALLCALL৷ এটি অনুসরণ করে, বার্তাটি যে কোনও বিষয়ে হতে পারে। প্রথমে আমরা এডিটরে HTML পেলোড তৈরি করি। সনাক্তকরণের জন্য আমাদের অবশ্যই আইনত আমাদের অপেশাদার রেডিও কলসাইন প্রদান করতে হবে (একটি পদক্ষেপ যা একজন প্রকৃত আক্রমণকারী দ্বারা উপেক্ষা করা হবে) এবং শেষ পর্যন্ত আমাদের চূড়ান্ত বার্তাটি এরকম দেখায়:


KJ7YLS: @TEST <DIV STYLE="WIDTH: 500PX;HEIGHT:100PX;COLOR:RED;">HTML ইনজেকশন!</DIV>

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



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



তারপরে আমরা একটি রেডিও ট্রান্সমিটারের মাইক্রোফোনে হুইসেলের শব্দ পাঠাতে পারি। বেশিরভাগ অপেশাদার এবং সামরিক সংকেতের মতো, অডিওটি আপার-সাইডব্যান্ড মড্যুলেশন ব্যবহার করে বিতরণ করা হয়, যা একটি AM সম্প্রচার ধরণের সংকেতের একটি বিভাগ। JS8 বার্তাগুলি বেশ কয়েকটি ফ্রিকোয়েন্সিতে প্রমিত করা হয় এবং আমাদের লক্ষ্য 7.078 MHz এবং 14.078 MHz-এ শোনে। আমরা রেডিওকে যেকোনও ফ্রিকোয়েন্সিতে সুর করি এবং 20 ওয়াট পাওয়ার ব্যবহার করে অডিওটি একটি 16-AWG তারে প্রায় 30 ফুট বাতাসে পাঠাই। সিগন্যালটি বাতাসে ছড়িয়ে পড়ে, আয়নোস্ফিয়ার থেকে বাউন্স করে এবং তাদের অ্যান্টেনা এটি গ্রহণ করে। তাদের JS8 সফ্টওয়্যার প্রক্রিয়াটি বিপরীত করে এবং ASCII বার্তাটি বের করে। এই মুহুর্তে আমরা সমস্যাটি দেখতে পাচ্ছি।

ওয়েবসাইট (লিঙ্কটি তার লেখকের প্রতি সম্মানের জন্য এই নিবন্ধে আটকে রাখা হয়েছে) JS8 ট্র্যাফিক লগ করে। হুডের নিচে, এটি JS8Net দ্বারা চালিত, একটি দরকারী পাইথন টুল যা সরাসরি JS8 সফ্টওয়্যারের API এর সাথে কথা বলে। সংগ্রহস্থলে, monitor.py স্ক্রিপ্ট JS8 বার্তাগুলিকে ধরে এবং সেগুলিকে ওয়েবসাইটে রাখে। লেখার সময়, এতে 859 লাইনে কোডের নিম্নলিখিত লাইন রয়েছে:


 # Text j['text']=j['stuff']['params']['TEXT'] key=str(j['stuff']['time']) j['id']=':'.join([fmcall,tocall,key,str(j['freq'])]) traffic[key]=json.dumps(j)


j['stuff']['params']['TEXT'] হল ASCII JS8 বার্তাটি collector.py থেকে টেনে নেওয়া হয়েছে, যা JS8 সফ্টওয়্যারের API থেকে নেওয়া হয়েছে। এই ধাপের পরে, জাভাস্ক্রিপ্ট ব্যবহার করে ট্র্যাফিক [কী] টেক্সট পৃষ্ঠায় স্থাপন করা হয়। এই পদক্ষেপগুলি ভাল। প্রেক্ষাপটের পরিবর্তনে সমস্যাটি ঘটে কারণ একটি অনুমান রয়েছে যে JS8 ট্র্যাফিক, ইতিমধ্যে JS8 সফ্টওয়্যার দ্বারা সম্পূর্ণরূপে প্রক্রিয়া করা হয়েছে, যাওয়ার জন্য প্রস্তুত এবং ওয়েবপৃষ্ঠার প্রসঙ্গকে প্রভাবিত করবে না। এটি এমন আচরণ যা আমরা তখন কাজে লাগাতে পারি।


শুরু থেকে শেষ পর্যন্ত, আমাদের আক্রমণ এইরকম দেখায়:


কয়েক মিনিট পরে, আমাদের বার্তা ওয়েবসাইটে লগ করা হয়...


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


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

KJ7YLS: @ALLCALL <img src="http://727k2w1hfoamqewpm7rpiocu0l6cu2ir.oastify.com" alt="@HB DN13">

এই URLটি Burp Suite-এর সহযোগী টুল দ্বারা চালিত একটি DNS এবং HTTP শ্রোতার দিকে নির্দেশ করে, যা আমরা প্রায়শই ব্যান্ডের বাইরের তথ্য ফাঁস খুঁজে বের করার জন্য অনুপ্রবেশ পরীক্ষার সময় ব্যবহার করি। এই ভিন্ন ছিল না. কয়েক মিনিটের মধ্যে, DNS এবং HTTP ট্র্যাফিক চিলির পৃষ্ঠায় আসা ব্যবহারকারীদের থেকে সহযোগী সার্ভার দ্বারা রেকর্ড করা হয়েছিল। আমি ইনজেকশন পরিদর্শন করার জন্য পৃষ্ঠাটিও দেখেছি এবং লগ ইন করা হয়েছিল।


আমি যতদূর নৈতিকভাবে ইনজেকশন দিয়ে যেতে চেয়েছিলাম এটি ছিল। আমি প্রতিকারের পরামর্শ সহ ওয়েবসাইটের মালিক, জেফকে সমস্যাটি জানিয়েছি। পরের দিন তিনি আমার কাছে ফিরে এসে বললেন:


আমি নিজে নিরাপত্তায় কাজ করি (আমি বে এরিয়াতে একটি নেটওয়ার্ক নিরাপত্তা কোম্পানির জন্য R&D করি), কিন্তু আমাকে স্বীকার করতে হবে যে একটি ওয়েব সাইট হ্যাক করার জন্য রেডিওর মাধ্যমে JS জমা দেওয়া আমার রাডারের বাইরে ছিল।

যখন আমি প্যাচটি লাইভ হওয়ার জন্য অপেক্ষা করছিলাম, আমি JS8Net README থেকে কয়েকটি লাইনে প্রতিফলিত করেছি:


 It's important to note that this part of the software is still very much in the development stage, and may have critical vulnerabilities that make exposing the exposed services to the open Internet a Very Bad Idea. While it certainly will work, it's intended for protected, internal LAN use at this time.


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

সংক্ষেপে, এটি একটি রেডিও সংকেত যা ইন্টারনেটে একটি ওয়েবপৃষ্ঠাকে আক্রমণ করে। একজন আক্রমণকারীকে ইন্টারনেটে তাদের পরিচয় লুকানোর চেষ্টা করার জন্য VPN, Tor, বা botnets দিয়ে বোকা বানানোর দরকার নেই। JS8 নয়েজ ফ্লোরের নীচে বার্তাগুলি -24dB বের করার ক্ষেত্রে এতটাই কার্যকর (এই স্তরে আক্ষরিকভাবে শিস শোনা যায় না) যে দূরবর্তী স্টেশনগুলিতে পৌঁছানোর জন্য খুব কম শক্তির প্রয়োজন হয়। এক ওয়াট ট্রান্সমিশন পাওয়ার, ভাল আয়নোস্ফিয়ারিক পরিস্থিতিতে, মার্কিন যুক্তরাষ্ট্র জুড়ে উপকূল থেকে উপকূলে যেতে পারে। একজন আক্রমণকারী বিশ্বের যে কোন জায়গায় হতে পারে। একটি বিস্ফোরিত বার্তা যা প্রয়োজন তা হল, তাই দিকনির্দেশনাও কঠিন হবে। আমি মনে করি যে আপনি এই মত কিছু সঙ্গে পেতে পারেন হিসাবে untraceable কাছাকাছি হিসাবে.


সময়রেখা:

  • জুলাই 13: সমস্যাটি আবিষ্কার করেছে, জেফকে রিপোর্ট করেছে, একটি CVE-এর জন্য MITER-এর কাছে আবেদন করেছে৷
  • জুলাই 14: জেফ প্রতিক্রিয়া জানায়।
  • জুলাই 22: জেফ Github-এ JS8Net-এ একটি প্যাচ প্রয়োগ করে।
  • 25 জুলাই: প্যাচটি ওয়েবসাইটে লাইভ হয়।
  • আগস্ট 18: ব্লগ পোস্ট প্রকাশিত হয়.