Secure Copy Protocol (SCP) ve File Transfer Protocol (FTP) Protokolleri ile Ağ Trafik Analizi

Konular:

    • Hazırlık Aşaması ve Gereksinimler
    • İşletim Sistemi ve Ağ Hazırlığı
    • Kullanılacak Araç ve Servislerin Hazırlığı
    • Senaryo 1 - Secure Copy Protocol (SCP)
    • Senaryo 2 - File Transfer Protocol (FTP)
    • Sonuçların Karşılaştırılması

Secure Copy Protocol (SCP) ve File Transfer Protocol (FTP) Protokolleri ile Ağ Trafik Analizi

Merhabalar, konumuzda SCP ve FTP protokolleri üzerinden iki farklı dosya transfer senaryosu ele alarak network trafiklerini analiz etmeye çalışacağız.

Hazırlık Aşaması ve Gereksinimler

-> İşletim Sistemi ve Ağ Hazırlığı

Bu işlemleri tek bir bilgisayar veya sunucuda yerel IP ve servisler ile de gerçekleştirmek mümkündür ancak gerçeğe yakın bir senaryo olması açısından Host makinemiz olan Windows 10 işletim sistemi üzerine kurulu VMWare uygulaması aracılığıyla Ubuntu 22.04 sanal makinemizi kullanacağız.

Host ve Sanal makineler arsında bir network ağı kurmak için sanal makinemizin network arayüzlerinden birini Host-Only olarak atayabiliriz.

Ek olarak, Bridged yani köprü modunu seçerek sanal cihazın tıpkı bir gerçek cihazmış gibi ağa bağlanmasını sağlayabilirsiniz. Aslında gerçek bir ağ senaryosu için en uygunu Bridge Network oluşturmaktır. Fakat Gerçek cihazla aynı fiziksel network de yer alması güvenlik açısından risk oluşturabilir.

NAT (Network Address Translation) seçeneği ise sanal makinenin host bilgisayara ait IP adresini kullanarak internete çıkmasını sağlamaktadır. Sanal cihazların hızlıca internete erişimi için tercih edilebilir ancak bir trafik kirliliği oluşturacaktır.

Host-Only network seneği ise sanal makinenin sadece host ile konuşması sağlanmaktadır. Yani kapalı bir özel ağ olarak kullanılabilir. Senaryolarımızda bu seneği kullanacağız.

Tercihinize göre sanal bir ağ da oluşturup atayabilirisiniz. Amacımız iki cihazın da aynı ağ üzerinden IP adresi almasıdır. Zaten Linux sanal makinemizdeki network arayüzünü varsayılan olarak DHCP için bırakırsak mevcut ağ üzerinden bir IP adresi alacaktır.

Şuan Host makinemiz Windows 10 192.168.164.1 IP adresinde yer alıyorken, sanal makinemiz Ubuntu 22.04 ise DHCP üzerinden 192.168.164.128 IP adresini almış durumdadır.

Hızlıca "ping" kullanarak birbirlerini gördüklerini teyit edebiliriz.

-> Kullanılacak Araç ve Servislerin Hazırlığı

SCP protokolünü kullanmamız için SSH servisi kurulumu yapmamız gerekmektedir. SSH (Secure Shell), modern ağ ve sistem yönetiminde en yaygın kullanılan güvenli iletişim protokollerinden biridir. Uzaktan yönetim, güvenli dosya transferi, port tünelleme, otomasyon ve güvenli proxy gibi kullanım alanları mevcuttur. Aslında günümüzde sunucu yönetimi ve altyapı konusunun vazgeçilmez bir parçasıdır diyebiliriz.

"openssh-server" paket adıyla kurulum sağlayabiliriz.

Statü kontrolünde ise servisini şuan aktif olarak çalıştığını teyit edebiliriz. Hızlıca Windows 10 işletim sistemimizden Ubuntu 22.04 işletim sistemimize kurulumunu yaptığımınız SSH servisi üzerinden erişmeye çalışalım.

SSH servisimiz sorunsuz çalışmaktadır. Dolayısıyla SCP kullanımı yapılabilir.

Trafik analizi işlemleri için "Wireshark" kullanacağız. Ubuntu için "wireshark-qt" paket adını kullanarak kurulum yapabiliriz.

Senaryolara ait trafiği inceleyeceğimiz ens38 adlı interface de dinlemeye uygun görünüyor.

FTP protokolünü kullanmamız için bir çok FTP-Server uygulaması kurulabilir. Pratik ve hızlı live output log görüntüleme işlemleri açısından "pyftpdlib" adlı python kütüphanesini kullanabiliriz.

"python3-pyftpdlib" paket adıyla kurulum sağlanabilir ve one-line olarak hızlıca FTP sunucusu ayağa kaldırılabilir.

Son olarak FTP sunucusuna dosya iletirken client olarak "curl" kullanacağız. FTP komutuda doğrudan kullanılarak manuel transfer yapılabilir. "curl" Windows ve Ubuntu işletim sistemlerinde genellikle varsayılan olarak mevcut olduğu için kurulum yapmadan kullanabiliriz.

Senaryo 1

Birinci senaryoda Secure Copy Protocol (SCP) protokolü üzerinden dosya transfer işlemi gerçekleştirerek network trafiğini analiz edeceğiz.

Secure Copy Protocol (SCP) doğrudan SSH servisi kullanmak anlamına gelmektedir. Zaten SSH protokolüne dayanmaktadır.

Windows cihazımızdan Ubuntu cihazımıza SCP ile dosya transferi işlemi gerçekleştirelim.

scp test.txt akkus@192.168.164.128:/home/akkus/test.txt

İşlem anında Wireshark ile dinlenen ağ trafiğine yansıdı.

Transfere ait iletişim incelendiğinde ise selamlaşma ve header,anahtarlama türleri gibi bilgilerin açık metin olarak görülebildiği ancak işlemin gerçek detaylarının şifrelenmiş olduğunu görüyoruz.

Wireshark ile SSH/SCP trafiğini şifrelenmemiş (cleartext) olarak görmek özel müdehaleler haricinde mümkün değildir. Bunun nedeni SSH’nin Perfect Forward Secrecy (PFS) kullanmasıdır. SSH üzerinden iletişim başladığında session key (oturum anahtarı) sunucu ve istemci tarafından birlikte, tek seferlik olarak üretilir. Bu anahtar, ne sunucudaki özel anahtardan(sunucuların sahibi ve yetkili siz olsanız bile) ne istemcideki özel anahtardan elde edilebilir.

OpenSSH'ın kaynak kodu değiştirilerek iletişim sırasında oluşturulan "session key" değerinin yazdırılması sağlanarak wireshark üzerinden veya tcpdump aracılığıyla keylog oluşturulabilir ve trafik cleartext izlenebilir. Fakat bu anahtarların dışarıya çıkartılması ve loglanması güvenlik açısından doğru değildir. Çünkü mevcut trafiği hali hazırda dinleyen bir saldırgan bu anahtarları elde ederse trafiği çözümleyebilir. Zaten SSH protokolünün varsayılan olarak bu anahtar yapısını kullanmasının temel sebebi güvenliktir.

Ek olarak trafiği izlemenin ve scp ile gönderilen dosyanın içeriğini yakalamak yine TRACE yöntemleriyle mümkündür. Sistem çağrısı olan strace kullanılabilir. Burada SCP komutunun yani SSH servisinin process değeri strace e bağlanabilir ve arka planda hangi sistem çağrılarının çalıştırıldığı tespit edilebilir. Nitekim dosya yazma ve okuma işlemleri işletim sistemi tabanlı çağrıları barındırmak zorundadır. OpenSSH binary muhtemelen bu işlemleri read() write() gibi çağrılar ile gerçekleştirmektedir.

Aşağıdaki gibi bir komut kullanabiliriz. Buffer size belirtilmeli ve ayrıca process ID değerinin hızlıca işleme alınması için scp komutunun strace içerisinde kullanılması gerekmektedir.

sudo strace -f -e read,write -s 500 scp test.txt akkus@192.168.164.128:/home/akkus/test2.txt

Görüldüğü üzere SCP ile gönderilen "test.txt" adlı dosyanın içeriği çözümlenebilmektedir.

Senaryo 2

İkinci senaryoda File Transfer Protocol (FTP) protokolü üzerinden dosya transfer işlemi gerçekleştirerek network trafiğini analiz edeceğiz.

File Transfer Protocol (FTP) kullanarak tıpkı SCP gibi sunucular arasında dosya transfer işlemleri gerçekleştirilebilmektedir. Yukarıdaki senaryoda SCP üzerinden trafik dinlendinde karşılaşılabilecek durumları gözlemledik. Şimdi ise FTP protokolü üzerinden dosya iletimi sağlayarak trafiği dinlemeye çalışalım.

FTP sunucusu için önceden hazırladığımız ve kurduğumuz python3 pyftpdlib adlı kütüphaneyi kullanabiliriz.

One-Line FTP sunucusu ayağa kaldırmak için yetkilendirme ve dizinlerle birlikte aşağıdaki gibi örnek bir komut yeterli olacaktır.

python3 -c "from pyftpdlib.authorizers import DummyAuthorizer; from pyftpdlib.handlers import FTPHandler; from pyftpdlib.servers import FTPServer; a=DummyAuthorizer(); a.add_user('myuser', 'mypass', '/home/akkus/ftp', perm='elradfmw'); h=FTPHandler; h.authorizer=a; FTPServer(('0.0.0.0', 2121), h).serve_forever()"

Sonrasında ise diğer bilgisayar üzerinden "curl" -Transfer parametresini kullanarak FTP sunucusuna rahatlıkla dosya iletebiliriz.

curl -T "test.txt" ftp://myuser:mypass@192.168.164.128:2121

Görüldüğü üzere "test.txt" adlı dosyamız FTP protokolü ile başarıyla iletildi.

"ftp" komutu kullanılarak da client bağlantısı sağlanabilir ve işlemler manuel gerçekleştirilebilir.

Trafik "wireshark" aracılığıyla dinlendiğinde ve TCP dump işlemi gerçekleştirildiğinde ise gönderilen dosyanın içeriğinin ve FTP protokolüne ait değişken komutların tamamının cleartext olarak açık bir şekilde elde edilebildiğini görüyoruz.

Sonuçların Karşılaştırılması

Birinci senaryomuzda SCP ile dosya transfer işlemi gerçekleştirildiğinde trafiğin daha güvenli olduğunu görebiliyoruz. Temel sebebi ise daha önce bahsettiğimiz üzere SSH servisi üzerinden çalışıyor olmasıdır. SSH servisi zaten secure bağlantı sağlamaktadır.

Ancak ikinci senaryomuzda güvenlik açısından doğrudan FTP kullanılmaması gerektiğini görebiliriz. Çünkü trafiğin güvenliği açısından ek bir önlem bulunmamaktadır. Dolayısıyla yine tıpkı SCP gibi SSH protokülü üzerinden kullanımı sağlanan SFTP (Secure File Transfer Protocol) kullanılmasını önerebiliriz.

Teşekkürler (AkkuS)

Original text