Sunucusuz olmak harika bir şey ve bu şeyin ücretsiz olduğuna inanamıyorum. Sızma testine yardımcı olmak için son birkaç hafta içinde geliştirdiğim bazı sunucusuz işlevleri yayınlıyorum. Tüm örnekler ve belgeler burada: https://github.com/ropnop/serverless_toolkit
Son zamanlarda “sunucusuz” dağıtımlarla çok fazla uğraşıyorum. Bu terim bana her zaman biraz yanlış isim gibi görünse de faydalarını inkar etmek mümkün değil. @secvalve’nin buradaki benzetmesini seviyorum:
Bir dahaki sefere “sunucusuz” kelimesini kullanmayı denediğinizde bunun paket servise “mutfaksız” demek gibi olduğunu unutmayın.
— Kate Pearce (@secvalve) 30 Mayıs 2017
Evet, hala bir yerlerde bir sunucu/mutfak var, ama geliştirirken/yemek yerken bunu gerçekten düşünmek istemiyorum.
Birçok geliştiricinin sunucusuz sistemi benimsediğini görsem de güvenlik topluluğunun buna daha az ilgi gösterdiğini gördüm. MDSec’in Sunucusuz Kırmızı Takım Altyapısı, pentester’lar tarafından kullanılan sunucusuz altyapıyı gördüğüm ilk altyapıydı ve potansiyelini keşfetme konusunda ilgimi çeken şey de bu oldu.
Sızma testleri veya hata ödülleri gerçekleştirirken, kendimi sürekli olarak basit bir görevi gerçekleştirmek için Digital Ocean’da hızlı bir VPS başlatırken bulduğumu hissediyorum. İster bir yük taşımak, ister gelen bir isteği dinlemek veya sadece farklı bir IP’den bir şeyi test etmek olsun, tek ve sıradan bir görevi gerçekleştirmek için bulutta özel bir Ubuntu Sunucusu çalıştırmak her zaman aşırıya kaçmış gibi görünüyordu. Yavaş olduğundan bahsetmiyorum bile. Bölgedeyken ve bir şeyin hızlı bir şekilde başlatılmasına ihtiyacım olduğunda, yapmak istediğim son şey bir sunucuyu sıfırdan yönetmektir.
Geçtiğimiz birkaç hafta boyunca farklı sunucusuz sağlayıcıları araştırırken, VPS’leri kullandığım birçok basit görevin sunucusuz ortama taşınabileceğini fark ettim; burada altyapı konusunda hiçbir zaman endişelenmeme gerek kalmadı ve (en iyi yanı) ÜCRETSİZDİR. Pentester’lar için son derece yararlı olduğunu düşündüğüm bazı sunucusuz işlevleri bir araya getirdim ve bu yazının, güvenlik testleri söz konusu olduğunda “sunucusuz” altyapının tüm avantajlarından yararlanma konusunda daha fazla kişiye ilham vereceğini umuyorum.
Not: Sahip olmadığınız altyapıları kullanırken, özellikle de hassas verilerle çalışırken her zaman dikkatli olmalısınız. Sunucusuz ile altyapıyı, günlük kaydını vb. kontrol edemediğiniz için, istemci verilerini bilinmeyen sunuculara atmadan önce riski değerlendirdiğinizden emin olun.
Sunucusuz Sağlayıcılar
Sunucusuz alanda birkaç ana oyuncu var (AWS, Google, Microsoft, Cloudflare, vb.), ancak bulduğum en kolayı, en ucuzu (okuma: ücretsiz) ve en anlaşılır olanı Zeit’in now.sh’si. Ücretsiz katmanları birinci sınıftır ve komut satırı aracı now
tam dağıtımları doğrudan terminalimden başlatmama izin veriyor. Diğer bir temel avantaj ise tam Docker derlemelerinin Now.sh için birinci sınıf dağıtım birimleri olmasıdır; bu, AWS Lambda veya Google Cloud Functions’ın sağladığından çok daha az soyutlama olduğu anlamına gelir.
Yakın zamanda Zeit, yerel Docker konuşlandırmalarından uzaklaşan Now 2.0’ı tanıttı. Örneklerimin tümü eski Now 1.0 sürümünü gerektiriyor. Neyse ki Now 1.0’ın yakın zamanda kullanımdan kaldırılmasına yönelik bir plan yok, bu nedenle bozulmamaları gerekiyor.
Şimdi başlamak için NPM modülünü yükleyin ve kimlik bilgilerini bir e-postayla ayarlayın:
|
|
E-postadaki talimatları izleyin ve sallanmaya hazırsınız.
Burada yayınlayacağım örneklerin her birine gireceğim. Umarız bu görevlerin birçoğu için VPS’ler yerine sunucusuz kullanmanın faydasını hızlı bir şekilde görebilirsiniz.
Statik Dosya Barındırma
https://github.com/ropnop/serverless_toolkit/tree/master/static_example
Sıklıkla CSRF veya XSS için yükleri barındırıyorum veya bir tür PoC’yi herkesin erişebileceği bir yere koymam gerekiyor. Bu nedenle geçerli SSL sertifikalarına sahip birkaç VPS’ye sahibim, ancak sunucusuz statik dağıtımlarda artık gerçekten gerekli değiller. Tek bir komutla, hızlı bir CDN’nin arkasında ve tam HTTP/2 desteğiyle, küresel olarak güvenilir bir TLS sertifikası (Let’sEncrypt) ile herhangi bir rastgele dosyayı (payload) sunabilirim.
Çevrimiçi olarak bulunmasını istediğiniz dosyaları içeren herhangi bir klasörde, now --public
dosyalarınızı sunan genel bir URL’yi dağıtacak ve döndürecektir:
Bu dosyalar daha sonra İnternet erişimi olan herhangi bir yerden indirilebilir veya aşağıdaki gibi XSS yüklerinin içine yerleştirilebilir:
Simple Redirect
https://github.com/ropnop/serverless_toolkit/tree/master/simple_redirect When testing SSRF, being able to control redirects is really useful. I used to do this with PHP scripts running on a VPS I owned, but now wither serverless I can spin up and deploy arbitrary redirect functions easily. This function takes two environment variables to be set when deploying:REDIRECT_URL
- the full URL, including protocol, to be set in the Location headerSTATUS
- the HTTP status code (default 301)
file://
URI that points to a listening capture server. Spinning that up is trivial with now:
|
|
Gopher Redirect
https://github.com/ropnop/serverless_toolkit/tree/master/gopher_redirect Similar to above, this example makes use of the Gopher protocol to redirect incoming GET requests to arbitrary POST requests. Again, this is very useful for exploiting SSRF vulnerabilities where an outbound GET request can be turned into an internal POST request to some other service (if Gopher is supported) This example constructs the Gopher URL from theredirect_request.req
file. In the example, it constructs a POST request to localhost:5000
|
|
REDIRECT_HOST
to construct where to send the Gopher payload.
|
|
localhost:5000
Dökümü İste
https://github.com/ropnop/serverless_toolkit/tree/master/req_dump Bu işlev, gelen tüm istekleri yanıtta JSON'a aktarır. Bu daha çok nelerin mümkün olduğuna dair bir örnektir, ancak giden isteklerinizden herhangi birinin özel başlıklara veya kullanıcı aracılarına sahip olup olmadığını görmek yararlı olabilir. Sunucusuz işlevi kullanan harici IP adresini de çıkarabilirsiniz. Trafiği sunucu işlevinize yönlendirmek için Cloudflare ve Zeit birkaç HTTP başlığı ekler. Betiği, eklenen başlıkları yok sayacak şekilde kodladım, ancak ortam değişkeni ayarlanarak yeniden etkinleştirilebilirlerALL_HEADERS
dağıtırken true değerine ayarlayın.
SSRF Gevşeklik Bildiricisi
https://github.com/ropnop/serverless_toolkit/tree/master/ssrf_slack Bu benim ilk ve muhtemelen en çok kullandığım sunucusuz işlevimdi. Daha önce SSRF'yi test ederken kontrol ettiğim ve çalıştırdığım VPS'leri işaret ediyordumtail -f /var/log/apache2/access.log
bir SSH penceresinde. Günlükleri neredeyse gerçek zamanlı olarak izlemem gerekiyordu ve bir istek geldiğinde uyarılmanın bir yolunu istiyordum.
Sunucusuz kullanım için mükemmel bir kullanım örneğidir. İçinde bulunduğum özel bir çalışma alanı için bir Slack uygulaması oluşturdum ve bazı web kancaları oluşturdum.
Bu fonksiyon şunları alır: SLACK_WEBHOOK
ortam değişkeni ve dağıtıldığında, aldığı tüm isteklerin tüm içeriğini bir Slack mesajına aktarır.
Not: Now'ın ücretsiz sürümünü kullanırken asla kaynak kodunda veya ortam değişkenlerinde gizli hiçbir şey (Slack Webhook URL'si gibi) saklamayın. Bunların hepsi halka açık olarak görüntülenebilir. Bunun yerine şimdi sırları kullanın
|
|
|
|
OOB XXE Sunucusu
https://github.com/ropnop/serverless_toolkit/tree/master/xxe_server Bu örnek, bir süre önce yazdığım benzer bir projeye dayanmaktadır: xxetimes. Bir OOB XXE güvenlik açığı keşfedildikten sonra, istismar genellikle en az bir dinleme sunucusunun başlatılmasını, DTD dosyalarının özelleştirilmesini ve veri dökümü çıktısının ayrıştırılmasını içeren oldukça manuel bir işlemdir. Bu sunucusuz işlev, yardımcı olacak iki ana işlevsellik sağlar:- DTD dosyalarının şablon oluşturulması ve sunulması
- GET parametrelerinde kodlanmış verileri ayrıştırma ve Slack'e gönderme
/dtd
son nokta vuruldu. Dosya varlığını oluşturmak için bir dosya adı parametresini kabul eder. Ayrıca php parametresi gönderildiğinde PHP Base64 kodlamasını da destekler. Parametre genişletmesi, verileri /data uç noktasındaki aynı sunucuya gönderecektir.
/data uç noktası, URL sorgusunun bir parçası olarak gelen tüm verilerin kodunu çözer ve onu bir Slack web kancasına aktarır.
Örneğin, bir PHP sitesinde bir XXE güvenlik açığı keşfedersem Burp'u kullanarak aşağıdaki XML'i POST yapabilirim:
DTD otomatik olarak oluşturulacak, veriler otomatik olarak filtrelenecek ve dosyanın içeriğini Slack kanalımda görecektim:
Nmap tarayıcı
https://github.com/ropnop/serverless_toolkit/tree/master/nmap_scan Bu örnek işlev, Express ile stdout'u yakalayarak Docker kapsayıcılarında sunucusuz işlevlerle isteğe bağlı ikili dosyaları çalıştırmanın nasıl mümkün olduğunu gösterir. Bu işlev basitçe bir nmap taraması çalıştırır.-F -Pn -sT
Bir hedefe karşı seçenekler. Bir bağlantı noktasının harici bir IP adresinden veya test ettiğiniz yerden farklı bir IP adresinden açık olup olmadığını hızlı bir şekilde görmek yararlı olabilir.
Not: Sunucusuz ortamlarda uzun süre çalışan işlemleri yürütme zahmetine girmeyin; HTTP bağlantısı ya zaman aşımına uğrayacak ya da kapsayıcı 5 dakika sonra imha edilecektir. Ancak küçük, hızlı komutlar sorunsuz bir şekilde çalıştırılabilir
TopluDNS
https://github.com/ropnop/serverless_toolkit/tree/master/massdns Yukarıdakine benzer şekilde massdns'i sunucusuz bir kapta çalıştırmak da mümkündür. Bu örnek, çözülecek bir alan adı dosyasını POST yapmamı sağlıyor ve JSON biçimli yanıtları döndürüyor. Yine, çok uzun bir liste ve massdns yürütülürken HTTP bağlantısı zaman aşımına uğrayacak, ancak birkaç yüz alana kadar oldukça güvenilir bir şekilde çalıştığını gördüm.Web kabuğu
https://github.com/ropnop/serverless_toolkit/tree/master/webshell İkili dosyaları sunucusuz kaplarda çalıştırıyorsanız neden tam kabuğa geçmiyorsunuz? Gotty ile tam da bunu yapmak mümkün. Bu işlev, bazı yararlı pentest-y araçlarının yüklü olduğu Alpine linux tabanlı hafif bir Docker görüntüsü oluşturur (nmap
, netcat
, socat
, openssh
vb) ve tarayıcınızda root olarak tam bir bash istemi mevcuttur.
Ortam oldukça sınırlı ve kilitli olacak, ancak bir şeyi test etmek için bulutta hızlı bir Linux komutu çalıştırmak istediğimde ve yeni bir VPS veya SSH'yi zaten sahip olduğum bir VPS veya SSH'ye dönüştürmek istemediğimde bu eğlenceli oluyor .
Not: Oturumunuz 5 dakika sonra sonlandırılacak ve her şeyinizi kaybedeceksiniz. Tekrar ediyorum: bunlar tek kullanımlık, hızlı ortamlardır
Başka bir not: Kali Linux'u sunucusuz bir ortamda çalıştırmak ne kadar harika olsa da, Now için maksimum 100 MB'lık bir docker görüntüsü vardır, bu nedenle daha küçük, amaca yönelik oluşturulmuş Docker görüntüleri daha iyidir.
Takma Adlar ve Cloudflare
Bazı durumlarda, kısa bir alan adına sahip olmak yararlı olabilir (örn. sınırlı XSS veri yükü alanı olduğunda). Artık dağıtımlarınızın her biri için rastgele, uzun URL'ler oluşturuyor, ancak neyse ki bunları daha kısa alan adlarına takmak kolaydır. Artık takip edilmesi kolay takma adlarla ilgili harika belgeler var. Temel olarak, özel bir alan adınız varsa, bunu bir TXT kaydı aracılığıyla Now hesabınızla doğrulayabilir, ardından şuraya işaret eden CNAME girişlerini ekleyebilirsiniz:alias.zeit.co
. Alanlarımdan biri için her zaman oraya işaret eden kalıcı bir CNAME kurdum: now.example.com
.
Bunu ayarladıktan sonra, bu takma adın yukarıdaki dağıtımlardan herhangi birine işaret edilmesi komut satırı aracılığıyla neredeyse anında gerçekleştirilir:
|
|
Ayrıca bakınız
Source link