Selamün Aleyküm.
Uzun süredir delphi forumunda pek bir etkinlik gösteremiyorum. Birkaç gündür bu dökümanı hazırlayıp paylaşma isteğim vardı. İnşAllah faydalı olur.
Bilirsiniz üst düzey malware fonksiyonlarıyla uğraşmak zordur ve uzmanlık ister. Bu yüzden yeri geldiğinde basit çözümler etkili olabiliyor. FTP ile iletişim kuran malware programcıları eğer kernel mode rootkit, antivirüs bypass gibi konularda uzman değillerse kullandıkları ftp api, componentleri antivirüslere yakalandığında çaresiz kalabilir. Bunu bir nebze olsun aşmak için bir çözüm geliştirdim. Yaygın olarak kullanılan antivirüslerin çoğunda firewall özelliği yok. Benim hipotezim, ftp ile iletişim kurarken hazır apileri değil de kendi methodunuzu kullanırsanız antivirüslere yakalanmazsınız. Bu hipotezi sınamak için 2 gün boyunca uğraşarak ftpyi çözmeye çalıştım ve ClientSocketlerle iletişimi taklit ettim. Her aşamasını çözmek için baya uğraştığımı söyleyebilirim
Anladığım kadarıyla FTPyi kısaca anlatıyorum.
FTP sunucusuna standart bağlantı portu 21dir.
FTPde komutlar sayılarla ifade edilir ama ingilizce olarak açıklamaları da paket içinde gönderilir.
Bir ftp sunucusuna 21 portundan bağlanırsanız ilk mesaj sunucudan gelir.
Sunucu Mesajı: 220 Welcome. FTP Server ready.
Bu mesajı alınca sizin sırayla komutları göndermeniz gerekir. Tek tek komutları açıklamıyorum çünkü asıl anlattığım protokol değil taklit.
İletişimi özetliyorum:
Gelen: 220 Welcome. FTP Server ready.
Giden: USER admin
Gelen: 331 Password required for admin
Giden: PASS Cyber
Gelen: 230 User admin logged in
Giden: OPTS UTF8 ON
Gelen: 200 UTF8 set to on
Giden: CWD /
Gelen: 250 CWD command successful
Giden: PWD
Gelen: 257 "/" is the current directory
Giden: TYPE A
Gelen: 200 Type set to A
Giden: PASV
Gelen: 227 Entering Passive Mode (255,255,255,255,185,77).
Burada benim öğrenmek için çok uğraştığım bir durum var. FTP iletişimi iki türlü yapılıyor: aktif ve pasif. Aktifde bilgisayarınızda port açmanız gerekir ki normalde pasif modu kullanırız. Son gelen paket bize diyor ki verdiğim ip ve porttan veri iletim bağlantı noktasına bağlan. FTPde yönlendirme komutları 21 portundaki bağlantıdan yapılır ama merkez bağlantının yükünün artmaması için veri aktarımı başka bağlantı noktalarından (port) gerçekleştirilir. Peki bu son gelen mesajı nasıl yorumlayacağız? Burada diyor ki ilk 4 sayı grubu bağlantı ipsi 255.255.255.255. Port numarasını ise bir formülle alıyorsunuz. IPden sonraki ilk sayı bloğu yani baştan 5. bloğun 256 ile çarpılıp sonuca 6. bloğun eklenmesi bize port numarasını veriyor. Örneklendirirsek, Entering Passive Mode (k,l,m,n,a,b). şeklinde olan paket bize diyor ki veri aktarımını k.l.m.n:a*256+b bağlantı noktasına yap.
Bu paket geldikten hemen sonra ikinci bir client socket ile bu bağlantı noktasına bağlanırız ama veri yollamayız. Bağlandıktan sonra 21 port numaralı bağlantıdan sunucuya şu paket yollanır.
Giden: STOR Deneme.txt, Dosya uploada başlama komutu.
Gelen: 150 Opening ASCII mode data connection for Deneme.txt
Bu mesajı alınca başka bir bilgi içermeksizin ikinci client sockete veri yollanır. Stream ya da text olması farketmiyor nasıl yollarsanız yollayın. Veri yollama bitince sunucunun anlaması için 2. client socketin bağlantısını kesmeniz gerekir. Kesince aktarım tamamlanmış ve belirttiğiniz dosya adına içerik yazılmış demektir. Aktarımın tamamlandığına dair şu mesajı alırsınız:
Gelen: 226 Transfer complete, Aktarımın tamamlandığı anlamına geliyor.
Ben bu iletişimi pratikte taklit etmeyi başardım. Gelişmiş bir şey değil ama işimi gördü. Birkaç noktaya değinmem lazım. Komut içeren paketlerde string sonuna boş bir satır ekleniyor yani iletişim şöyle kurulacak: ClientSocket1.SendText(USER admin+#10);. #10 etiketini her paket sonuna ekleyin (Dosyayı ikinci bağlantıdan gönderirken yapılmaz) yoksa anlamıyor sunucu. Son olarak da bazı komutların sunucudan gelen cevapları aynı sayı ile oluyor en son ne gönderdiğinizi takip etmeniz ya da sayının devamındaki veriyi programla okumanız gerekir. Ben ikincisini yaptım ama ilkini öneriyorum. Belki her ftp aynı açıklamayı kullanmıyordur.
Link:
FTP Upload.rar - Speedy Share - upload your files here
Anlamadığınız yer olursa sorun yardımcı olmaya çalışırım. Selametle.
http//cyber-warrior.org alıntıdır!!!!
Uzun süredir delphi forumunda pek bir etkinlik gösteremiyorum. Birkaç gündür bu dökümanı hazırlayıp paylaşma isteğim vardı. İnşAllah faydalı olur.
Bilirsiniz üst düzey malware fonksiyonlarıyla uğraşmak zordur ve uzmanlık ister. Bu yüzden yeri geldiğinde basit çözümler etkili olabiliyor. FTP ile iletişim kuran malware programcıları eğer kernel mode rootkit, antivirüs bypass gibi konularda uzman değillerse kullandıkları ftp api, componentleri antivirüslere yakalandığında çaresiz kalabilir. Bunu bir nebze olsun aşmak için bir çözüm geliştirdim. Yaygın olarak kullanılan antivirüslerin çoğunda firewall özelliği yok. Benim hipotezim, ftp ile iletişim kurarken hazır apileri değil de kendi methodunuzu kullanırsanız antivirüslere yakalanmazsınız. Bu hipotezi sınamak için 2 gün boyunca uğraşarak ftpyi çözmeye çalıştım ve ClientSocketlerle iletişimi taklit ettim. Her aşamasını çözmek için baya uğraştığımı söyleyebilirim
Anladığım kadarıyla FTPyi kısaca anlatıyorum.
FTP sunucusuna standart bağlantı portu 21dir.
FTPde komutlar sayılarla ifade edilir ama ingilizce olarak açıklamaları da paket içinde gönderilir.
Bir ftp sunucusuna 21 portundan bağlanırsanız ilk mesaj sunucudan gelir.
Sunucu Mesajı: 220 Welcome. FTP Server ready.
Bu mesajı alınca sizin sırayla komutları göndermeniz gerekir. Tek tek komutları açıklamıyorum çünkü asıl anlattığım protokol değil taklit.
İletişimi özetliyorum:
Gelen: 220 Welcome. FTP Server ready.
Giden: USER admin
Gelen: 331 Password required for admin
Giden: PASS Cyber
Gelen: 230 User admin logged in
Giden: OPTS UTF8 ON
Gelen: 200 UTF8 set to on
Giden: CWD /
Gelen: 250 CWD command successful
Giden: PWD
Gelen: 257 "/" is the current directory
Giden: TYPE A
Gelen: 200 Type set to A
Giden: PASV
Gelen: 227 Entering Passive Mode (255,255,255,255,185,77).
Burada benim öğrenmek için çok uğraştığım bir durum var. FTP iletişimi iki türlü yapılıyor: aktif ve pasif. Aktifde bilgisayarınızda port açmanız gerekir ki normalde pasif modu kullanırız. Son gelen paket bize diyor ki verdiğim ip ve porttan veri iletim bağlantı noktasına bağlan. FTPde yönlendirme komutları 21 portundaki bağlantıdan yapılır ama merkez bağlantının yükünün artmaması için veri aktarımı başka bağlantı noktalarından (port) gerçekleştirilir. Peki bu son gelen mesajı nasıl yorumlayacağız? Burada diyor ki ilk 4 sayı grubu bağlantı ipsi 255.255.255.255. Port numarasını ise bir formülle alıyorsunuz. IPden sonraki ilk sayı bloğu yani baştan 5. bloğun 256 ile çarpılıp sonuca 6. bloğun eklenmesi bize port numarasını veriyor. Örneklendirirsek, Entering Passive Mode (k,l,m,n,a,b). şeklinde olan paket bize diyor ki veri aktarımını k.l.m.n:a*256+b bağlantı noktasına yap.
Bu paket geldikten hemen sonra ikinci bir client socket ile bu bağlantı noktasına bağlanırız ama veri yollamayız. Bağlandıktan sonra 21 port numaralı bağlantıdan sunucuya şu paket yollanır.
Giden: STOR Deneme.txt, Dosya uploada başlama komutu.
Gelen: 150 Opening ASCII mode data connection for Deneme.txt
Bu mesajı alınca başka bir bilgi içermeksizin ikinci client sockete veri yollanır. Stream ya da text olması farketmiyor nasıl yollarsanız yollayın. Veri yollama bitince sunucunun anlaması için 2. client socketin bağlantısını kesmeniz gerekir. Kesince aktarım tamamlanmış ve belirttiğiniz dosya adına içerik yazılmış demektir. Aktarımın tamamlandığına dair şu mesajı alırsınız:
Gelen: 226 Transfer complete, Aktarımın tamamlandığı anlamına geliyor.
Ben bu iletişimi pratikte taklit etmeyi başardım. Gelişmiş bir şey değil ama işimi gördü. Birkaç noktaya değinmem lazım. Komut içeren paketlerde string sonuna boş bir satır ekleniyor yani iletişim şöyle kurulacak: ClientSocket1.SendText(USER admin+#10);. #10 etiketini her paket sonuna ekleyin (Dosyayı ikinci bağlantıdan gönderirken yapılmaz) yoksa anlamıyor sunucu. Son olarak da bazı komutların sunucudan gelen cevapları aynı sayı ile oluyor en son ne gönderdiğinizi takip etmeniz ya da sayının devamındaki veriyi programla okumanız gerekir. Ben ikincisini yaptım ama ilkini öneriyorum. Belki her ftp aynı açıklamayı kullanmıyordur.
Link:
FTP Upload.rar - Speedy Share - upload your files here
Anlamadığınız yer olursa sorun yardımcı olmaya çalışırım. Selametle.
http//cyber-warrior.org alıntıdır!!!!