Powershell üzerine Reverse socks5 proxy yazıyoruz.Bölüm 1

3 bölümden oluşan araştırma ve geliştirme hakkında bir hikaye. Bölüm 1 - araştırma.
Pek çok kayın ağacı var - daha da fazla fayda.

Sorunun formüle edilmesi

Pentestler ve RedTeam kampanyaları sırasında Müşterilerin VPN, RDP, Citrix vb. olağan araçlarını kullanmak her zaman mümkün olmamaktadır. dahili ağa girmek için bir pin olarak. Bir yerde normal bir VPN, MFA üzerinde çalışır ve ikinci faktör olarak bir demir jeton kullanılır, bir yerde acımasızca izlenir ve VPN girişimiz, dedikleri gibi - tüm sonuçlarla birlikte hemen görünür hale gelir, ancak bir yerlerde böyle bir fon yoktur.

Bu gibi durumlarda, sürekli olarak sözde "ters tüneller" - dahili ağdan bizim tarafımızdan kontrol edilen bir harici kaynağa veya sunucuya bağlantılar - yapmak zorundayız. Böyle bir tünelin içinde zaten Müşterilerin iç kaynakları ile çalışabiliyoruz.

Bu tür ters tünellerin birkaç çeşidi vardır. Bunların en ünlüsü elbette Meterpreter'dır. Ters port yönlendirmeli SSH tünelleri de hacker kitleleri arasında büyük talep görüyor. Ters tünellemeyi uygulamanın epeyce yolu vardır ve bunların çoğu iyi çalışılmış ve açıklanmıştır.
Elbette, güvenlik çözümleri geliştiricileri de bu tür eylemleri bir kenara bırakmaz ve aktif olarak tespit etmez.
Örneğin, MSF oturumları, Cisco veya Positive Tech'in modern IPS'si tarafından başarılı bir şekilde algılanır ve bir ters SSH tüneli, hemen hemen tüm normal güvenlik duvarları tarafından algılanabilir.

Bu nedenle, iyi bir RedTeam kampanyasında fark edilmeden kalabilmek için standart olmayan araçlar kullanarak bir ters tünel inşa etmemiz ve gerçek ağ işletim moduna mümkün olduğunca yakın bir şekilde uyarlamamız gerekiyor.

Benzer bir şey bulmaya veya icat etmeye çalışalım.

Bir şey icat etmeden önce, hangi sonuca ulaşmak istediğimizi, gelişimimizin hangi işlevleri yerine getirmesi gerektiğini anlamamız gerekir. Maksimum gizli modda çalışabilmemiz için tünel için gereksinimler ne olacak?

Her durum için bu tür gereksinimlerin çok farklı olabileceği açıktır, ancak iş deneyimine göre ana gereksinimler ayırt edilebilir:

  • OS Windows-7-10 üzerinde çalışın. Çoğu kurumsal ağ Windows kullandığından;
  • istemci, ips kullanarak aptalca dinlemeyi ortadan kaldırmak için SSL aracılığıyla sunucuya bağlanır;
  • bağlanırken, istemci yetkili bir proxy sunucusu aracılığıyla çalışmayı desteklemelidir, çünkü Birçok şirkette, İnternete erişim bir proxy aracılığıyla gerçekleşir. Aslında, istemci makine onun hakkında hiçbir şey bilmeyebilir ve proxy şeffaf modda kullanılır. Ancak böyle bir işlevsellik sağlamalıyız;
  • müşteri kısmı özlü ve taşınabilir olmalıdır;
    Müşterinin ağında çalışmak için, istemci makineye OpenVPN kurabileceğiniz ve sunucunuza tam teşekküllü bir tünel oluşturabileceğiniz açıktır (neyse ki, openvpn istemcileri bir proxy üzerinden çalışabilir). Ancak, birincisi, orada yerel yöneticiler olamayacağımız için bu her zaman işe yaramayacaktır ve ikincisi, o kadar çok gürültü çıkaracak ki, düzgün bir SIEM veya HIPS, gerektiğinde bize hemen "dokunacaktır". İdeal olarak, istemcimiz sözde bir satır içi komut olmalıdır, örneğin birçok bash kabuğunun uygulanması ve örneğin bir kelime makrosundan komutları yürütürken komut satırı üzerinden çalıştırılması.
  • tünelimiz çok iş parçacıklı olmalı ve aynı anda birçok bağlantıyı desteklemelidir;
  • istemci-sunucu bağlantısının bir tür yetkiye sahip olması gerekir, böylece tünel yalnızca istemcimiz için kurulur ve sunucumuza belirtilen adres ve bağlantı noktasından gelen herkes için değil. İdeal olarak, "üçüncü taraf kullanıcılar" için, orijinal alanla ilgili kediler veya profesyonel konular içeren bir açılış sayfası açılmalıdır.
    Örneğin, Müşteri bir tıbbi kuruluşsa, bir klinik çalışanının eriştiği kaynağı kontrol etmeye karar veren bir bilgi güvenliği yöneticisi, farmasötik ürünlerin bulunduğu bir sayfa, teşhisin açıklamasını içeren bir Wikipedia veya Dr. Komarovsky'nin blogunu açmalıdır. vesaire.

Mevcut araçların analizi

Kendi bisikletinizi icat etmeden önce mevcut bisikletleri analiz etmek ve ona gerçekten ihtiyacımız olup olmadığını anlamak gerekiyor ve muhtemelen sadece böyle işlevsel bir bisiklete olan ihtiyacı düşünmedik.

İnternette Google (biz google iyi görünüyor) ve github'da "ters çorap" anahtar kelimeleri için yapılan bir arama çok fazla sonuç vermedi. Temel olarak, her şey ters bağlantı noktası iletme ve onunla bağlantılı her şey ile ssh tünelleri oluşturmaya gelir. SSH tünellerine ek olarak, birkaç çözüm vardır:

github.com/klsecservices/rpivot
Kaspersky Lab'daki adamlardan ters tünelin eski bir uygulaması. Adından, bu komut dosyasının ne için tasarlandığı açıktır. Python 2.7'de uygulanan tünel, açık metin modunda çalışır (şu anda söylemek moda olduğu için - merhaba RKN)

github.com/tonyseek/rsocks
Python'da başka bir uygulama, yine düz metin olarak, ancak daha fazla olasılık var. Modül olarak yazılmıştır ve çözümü projelerinize entegre etmek için bir API vardır.

github.com/llkat/rsockstun
github.com/mis-team/rsockstun
İlk bağlantı, golang'daki ters çorap uygulamasının orijinal versiyonudur (geliştirici tarafından desteklenmez).
İkinci bağlantı, yine golang'da ek özellikler içeren revizyonumuzdur. Sürümümüzde, NTLM yetkilendirmeli bir proxy, istemcide yetkilendirme, yanlış şifreli bir açılış sayfası (veya daha doğrusu açılış sayfasına yönlendirme), çok iş parçacıklı mod (yani birkaç kişi çalışabilir) ile çalışan SSL uyguladık. Tünel ile aynı anda) , hayatta olup olmadığını belirlemek için bir istemci ping sistemi.

github.com/jun7th/tsocks
Python'da "Çinli dostlarımızdan" ters çorap uygulaması. Aynı yerde tembeller ve "ölümsüzler" için Çinliler tarafından bir araya getirilmiş ve kullanıma hazır hazır bir ikili (exe) var. Burada, yalnızca Çin tanrısı bu ikili dosyada ana işlevsellik dışında başka neler olabileceğini bilir, bu nedenle onu kendi tehlikeniz ve riskiniz altında kullanın.

github.com/securesocketfunneling/ssf
Ters stok ve daha fazlasını uygulamak için C++'da oldukça ilginç bir proje. Ters tünele ek olarak, port yönlendirme yapabilir, komut kabuğu oluşturabilir vb.

MSF ölçüm cihazı
Burada dedikleri gibi yorum yok. Az ya da çok eğitimli bilgisayar korsanlarının tümü bu şeyin farkındadır ve güvenlik araçlarını tespit etmenin ne kadar kolay olduğunu anlar.

Yukarıda açıklanan tüm araçlar benzer bir teknoloji üzerinde çalışır: harici bir sunucuyla bağlantı kuran, ağ içindeki bir makinede önceden hazırlanmış yürütülebilir bir ikili modül başlatılır. SOCKS4/5 sunucusu, sunucuda başlatılır, bağlantıları kabul eder ve bunları istemciye yayınlar.

Yukarıdaki tüm araçların dezavantajı, ya istemci makinede yüklü Python veya Golang'a ihtiyacınız olmasıdır (Python'un makinelerde, örneğin şirket yöneticileri veya ofis çalışanları yüklü olduğunu sık sık gördünüz mü?), Veya bir ön sürüklemeniz gerekir. bu makineye ikili yapı (aslında python ve bir şişede bir komut dosyası) ve bu ikili programı zaten orada çalıştırın. Ve bir exe'yi sonraki başlatmasıyla birlikte yüklemek, yerel bir antivirüs veya HIPS için başka bir imzadır.

Genel olarak, sonuç kendini gösteriyor - bir powershell çözümüne ihtiyacımız var. Şimdi domatesler bize uçacak - powershell diyorlar - hepsi dövüldü, izleniyor, engelleniyor vb. ve benzeri. Aslında, her yerde değil. Sorumlu bir şekilde beyan ederiz. Bu arada, kilitleri aşmanın birçok yolu var (burada yine merhaba RKN hakkında moda bir cümle 🙂), powershell.exe -> cmdd.exe'nin aptalca yeniden adlandırılmasından başlayıp powerdll vb.

icat etmeye başlamak

İlk başta Google'a bakacağımız ve ... bu konuda kesinlikle hiçbir şey bulamayacağımız açıktır (birisi bulduysa, yorumlara bağlantılar atın). sadece var uygulama Powershell'de Socks5, ancak bu, bir takım dezavantajları olan normal bir "düz" çoraptır (bunlar hakkında daha sonra konuşacağız). Elbette elinizin ufak bir hareketiyle tersine çevirebilirsiniz ama sadece tek iş parçacıklı bir Sox olacak ki bu bizim için tam olarak ihtiyacımız olan şey değil.

Yani hazır bir şey bulamadık, bu yüzden hala kendi tekerleğimizi icat etmemiz gerekiyor. Bisikletimizin temeli olarak alacağız gelişimimiz golang'da backsock ve ona giden istemci powershell'de uygulanır.

RSocksTun
Peki rsockstun nasıl çalışır?

RsocksTun (bundan böyle - rs olarak anılacaktır) iki yazılım bileşenine dayalıdır - Yamux ve Socks5 sunucusu. Socks5 sunucusu normal bir yerel çorap5'tir, istemci üzerinde çalışır. Ve buna yönelik çoğullama bağlantıları (çoklu iş parçacığı kullanımını hatırlıyor musunuz?) yamux (başka bir çoklayıcı). Bu şema, birkaç istemci çorap5 sunucusunu çalıştırmanıza ve bunlara harici bağlantılar dağıtmanıza, bunları istemciden sunucuya tek bir TCP bağlantısı (neredeyse meterpreter'deki gibi) iletmenize ve böylece onsuz yapamayacağımız çok iş parçacıklı bir mod uygulamanıza olanak tanır. tamamen dahili ağlarda çalışır.

Yamux'un çalışmasının özü, akışlar için ek bir ağ katmanı tanıtması ve bunu her paket için 12 baytlık bir başlık olarak uygulamasıdır. (Burada okuyucuyu program dizisi "thread" ile karıştırmamak için kasıtlı olarak diziyi değil "akış" kelimesini kullanıyoruz - bu kavramı bu makalede de kullanacağız). Yamux başlığı, akış numarasını, akışı ayarlamak/sonlandırmak için bayrakları, aktarılacak bayt sayısını ve aktarım penceresinin boyutunu içerir.

Powershell üzerine Reverse socks5 proxy yazıyoruz.Bölüm 1

Yamux, bir akışı ayarlamaya/durdurmaya ek olarak, kurulan iletişim kanalının sağlığını izlemenize olanak tanıyan bir canlı tutma mekanizması uygular. Canlı tutma mesaj mekanizmasının çalışması, bir Yamux oturumu oluşturulurken yapılandırılır. Aslında, ayarlardan yalnızca iki parametre vardır: etkinleştirme / devre dışı bırakma ve saniye cinsinden paket gönderme sıklığı. Keepalive mesajları, yamux sunucusu ve yamux istemcisi tarafından gönderilebilir. Bir canlı tutma mesajı alındığında, uzaktaki taraf, aldığı mesajın tam olarak aynı tanımlayıcısını (aslında bir numara) göndererek buna yanıt vermelidir. Genel olarak, canlı tutma aynı ping'dir, yalnızca yamux için.

Ayrıntılı olarak, çoklayıcının tüm tekniği: paket türleri, bağlantı kurmak ve sonlandırmak için bayraklar, veri aktarım mekanizması şu bölümde açıklanmaktadır: özellikler yamux'a.

İlk bölümün sonucu

Bu nedenle, makalenin ilk bölümünde ters tünelleri düzenlemek için bazı araçlarla tanıştık, bunların avantaj ve dezavantajlarına baktık, Yamux çoklayıcının mekanizmasını inceledik ve yeni oluşturulan powershell modülünün temel gereksinimlerini açıkladık. Bir sonraki bölümde, modülün kendisini pratik olarak sıfırdan geliştireceğiz. Devam edecek. geçiş yapma 🙂

Kaynak: habr.com

Yorum ekle