Linux Sistemlerde SSH Kullanılarak Lateral Movement Nasıl Yapılır?

Selamlar, yoğun bir sürecin ardından 2022 yılının son blog postunu paylaşayım istedim. Bugün bu blog postumda sizlere SSH’ın bir özelliğini kullanarak Linux sistemlerde lateral movement (yanal hareket) yöntemini kalemim döndükçe anlatmaya çalışacağım.

Bu yönteme pentest süreçlerinde ihtiyaç duyabilmekteyiz. Öncelikle bir Linux sisteme root yetkisinde erişim elde ettiğinizi düşünün. Burada tek bir makineye erişimimiz oldu fakat bizim amacımız içerde daha çok makineye erişim sağlamaktır. Burada ise yardımımıza SSH koşmaktadır. Bu yöntem SSH Hijacking  olarak geçmektedir. SSH Hijacking kısaca cihaz üzerinde aktif olan veya bundan sonra bağlantı sağlanacak yeni SSH oturumunu devralmaktır diyebiliriz. Daha fazla uzatmadan konuya girelim.

SSH nedir buna değinmiyorum herkesin bildiğini veya Google kullanarak rahat bir şekilde cevabını bulabileceğini düşünüyorum. Bu yüzden direkt SSH’ın ControlMaster özelliğinden bahsedelim. Kısaca bu özellik SSH oturumunun tek bir ağ bağlantısı üzerinden paylaşılmasını sağlayan bir özelliktir. Yani biraz daha açacak olursak birden fazla yere SSH bağlantısı attığımızı düşünelim.  Bu süreçte biraz hız kazanmak isteyebiliriz yada kolaylık olması açısından sürekli parola sorulmasından bıkmış olabiliriz. Peki bunu nasıl yaparız? İşte burada ControlMaster özelliği devreye girer. Belirli bir sunucuya yapılan her yeni SSH bağlantısını her bağlantı gerçekleştirildiğinde yeni bir TCP bağlantısı açmak yerine tek bir TCP bağlantısı içerisinde çoğaltabiliriz. Kimlik Doğrulama ise yalnızca tek bir TCP bağlantısı açıldığında gerçekleşir ve bundan sonra tüm SSH oturumlarını bu TCP bağlantısı üzerinden gerçekleştiririz.  Bu şekilde SSH sürecimizi de hızlandırmış oluruz ve artık parola sürecinden de kurtulmuş oluruz.  Ne yazık ki her zaman ki gibi saldırganlar bize yardımcı olabilecek tüm özellikleri kötüye kullanabilmektedirler. Burada da bu özelliği kullanarak SSH bağlantılarını devralarak lateral movement sürecinde kullanabiliyorlar. Şimdi bu saldırı nasıl gerçekleşir buna bakalım.

Bu özellik Linux sistemlerde herkese özel klasör olan /home/.ssh dizini altında config dosyasında tutulmaktadır.  Bu dosyaya yazma/değiştirme yetkilerinin root veya kullanıcının kendisinde olabileceğini unutmayalım.  Şimdi örneğin bir Linux makineyi ele geçirdiğimizi ve ilgili makineye SSH bağlantımızın varolduğunu düşünelim. Aşağıdaki komut ile config dosyasını oluşturalım:

nano ~/.ssh/config

Sonra ise ilgili dosyanın içerisine aşağıdaki komutları girelim:

Host *

        ControlPath ~/.ssh/controlmaster/%r@%h:%p

        ControlMaster auto

        ControlPersist 20m

Şimdi biraz yazdıklarımıza bakalım:

Host * ile bu ayarın tüm anabilgisayarlar için ayarlandığını gösterir.

ControlPath kısmı ise soket dosyasının (buna değineceğiz.) belirtilen dizine hangi format ile kaydedileceğini gösterir. Bu örnekte ise <remoteusername@<targethost>:<port> formatında kaydedilecektir.

ControlPersist ile ise ilgili soket dosyasının bağlantı sonlandırıldıktan sonra ne kadar süre daha yeni bağlantı kabul edeceğini gösterir. Buraya biz 20 min dedik. Yani ilgili soket 20 dakika daha bağlantı kabul edecektir sonra ise kill olacaktır. Buraya “YES” değerini de girebilirdik. Bu da aksi belirtilmediği sürece ilgili soketin süresiz olarak tüm bağlantıları kabul edeceğini belirtiriz.

Dosya hazır ise kaydedip çıkıyoruz. Şimdi ilgili dosya ya bazı izinler tanımlamamız gerekecek. Bunu da aşağıdaki komut ile yapabilirsiniz:

chmod 644 ~/.ssh/config

Sonra ssh klasörü içerisinde belirtmiş olduğumuz controlmaster adında bir dosya oluşturuyoruz:

mkdir ~/.ssh/controlmaster

Bundan sonra konfigleri yaptığımız makineye SSH bağlantısı yapılmasını bekliyoruz. Test için kendiniz bu SSH bağlantısını gerçekleştirebilirsiniz.  Bağlantı gerçekleştirildiğinde controlmaster dosyasında bir soket dosyası oluşur.Bu soket dosyası ile herhangi bir parola kullanmadan SSH bağlantısı gerçekleştirebiliriz:

Oluşan Dosya formatı:

username@targetsystem:22

Bu soket dosyasını ise ssh komutu ile aşağıdaki şekilde çalıştırdığınızda ilgili SSH bağlantısına geçiş yaptığınızı göreceksiniz. Ben burada bazı şeylerin public olmaması adına bazı yerleri blurlamak zorunda kaldım.

SSH Formatı:

ssh username@targetsystem

Toparlayacak olursak SSH’ın ControlMaster  özelliğini kullanarak sızmış olduğumuz makineye atılan SSH oturumlarını parolasız elde etmeyi gerçekleştirdik.

Bu şekilde Linux sistemlerde lateral movement işlemlerini gerçekleştirebilirsiniz, umarım anlaşılabilir anlatabilmişimdir. Bir sonraki blog postta görüşmek üzere, şimdiden herkese mutlu yıllar dilerim 😊

NOT: Yazdığım yazıda anlatılan yöntemin yasa dışı ve kanuna aykırı şekilde kullanılması durumunda yazar sorumlu tutulamaz. Yazı içerisinde anlatılan yöntemler tamamen eğitim ve korunma amaçlı olarak anlatılmıştır.

2 thoughts on “Linux Sistemlerde SSH Kullanılarak Lateral Movement Nasıl Yapılır?

    1. Aslında pratikte bu yöntemi engelleyemezsiniz. (Sonuçta yazma yetkisi olan kullanıcı ile sisteme giriş yapmış oluruz, bu root hesabıda olabilir.) Kısaca belki “ssh -O stop username@server” komutu ile controlmaster devre dışı bırakılabilir. Fakat burada da şu sorun ortaya çıkacaktır. Belki bu kullanıcı ile controlmaster başlatılmamış olabilir. Haliyle bizim kullanıcımız ile durduramamış oluruz 🙂 Burada öncesinde saldırganın buraya kadar gelmesini engellememiz gerekir. Burada bir kaç metot uygulanabilir. Öncelikle SSH sunucularına giden IP’ler kısıtlanabilir. Böylelikle SSH sunucusunu ele geçirmenin önüne geçebiliriz. Bunun dışında loglar üzerinden oluşturulan dosyalar incelenebilir. SIEM gibi ürünlerle controlmaster diye bir klasör oluşturulmuşsa bunu tespit edebiliriz. Bunun dışında SSH sıkılaştırması için private key parola ile korunmalı vb.

Leave a Reply

Your email address will not be published. Required fields are marked *