Çağatay ÇALI, Yazar: CanYouPwnMe! - For Cyber Security Researchers https://canyoupwn.me cypm! Sun, 23 Jul 2017 18:41:52 +0000 tr hourly 1 https://wordpress.org/?v=6.0 https://canyoupwn.me/wp-content/uploads/2016/02/cropped-Başlıksız-1-32x32.png Çağatay ÇALI, Yazar: CanYouPwnMe! - For Cyber Security Researchers https://canyoupwn.me 32 32 TR | Linux SSH Sıkılaştırma https://canyoupwn.me/tr-ssh-sikilastirma/ https://canyoupwn.me/tr-ssh-sikilastirma/#respond Sat, 13 Aug 2016 21:10:23 +0000 https://canyoupwn.me/?p=3814 CanYouPwnMe! - For Cyber Security Researchers CanYouPwnMe! - For Cyber Security Researchers - cypm!

SSH Nedir SSH (Secure Shell) güvenli veri iletimi için kriptografik ağ protokolüdür. SSH bağlantısı bilgisayar-bilgisayar, bilgisayar-sunucu, sunucu-sunucu arasında yapılabilir. SSH uzak kabuk üzerinde yetkili bir metin tabanlı arayüz sağlar. SSH bağlantısı kurulduktan sonra, yerel terminal yazdığınız tüm komutlar şifreli SSH tüneli aracılığıyla uzak sunucuya gönderir ve terminal komutlarınız orada yürütülür. SSH istemci-sunucu modelini kullanır. Standart […]

TR | Linux SSH Sıkılaştırma Çağatay ÇALI

]]>
CanYouPwnMe! - For Cyber Security Researchers CanYouPwnMe! - For Cyber Security Researchers - cypm!

SSH Nedir

SSH (Secure Shell) güvenli veri iletimi için kriptografik ağ protokolüdür. SSH bağlantısı bilgisayar-bilgisayar, bilgisayar-sunucu, sunucu-sunucu arasında yapılabilir. SSH uzak kabuk üzerinde yetkili bir metin tabanlı arayüz sağlar. SSH bağlantısı kurulduktan sonra, yerel terminal yazdığınız tüm komutlar şifreli SSH tüneli aracılığıyla uzak sunucuya gönderir ve terminal komutlarınız orada yürütülür. SSH istemci-sunucu modelini kullanır. Standart TCP portu olan 22 SSH bağlantısı için atanmıştır.

Bu kılavuzda, SSH sıkılaştırması için en iyi olan bazı temel güvenlik uygulamaları hakkında örnekler yer alacaktır.

 

SSH Bağlantısı Nasıl Kurulur?

Temelde iki bağlanma yöntemi mevcuttur. Bunlardan birincisi kullanıcı adı ve şifre ile oturum sağlandığı yöntemdir, ikincisi ise SSH key ( SSH açık / gizli anahtar ) yardımı ile oturumun sağlandığı yöntemdir. Şifre oturumları yeni kullanıcılar için anlaşılması kolaydır. Ancak, otomatik botlar ve kötü niyetli kullanıcılar genellikle art arda şifre denemeleri ile güvenlik tavizlerine yol açabilir. Bu yöntem yerine SSH anahtarı yardımı ile oturum sağlanmasını öneriyoruz. Bu yöntemde özel ve genel anahtar çifti kimlik doğrulama öncesinde oluşturulur. Ortak anahtar herkes ile paylaşılabilirken, özel anahtar kullanıcı tarafından güvende tutulmalıdır.

Bu bağlantı yöntemleri dışında SSH versiyonuna göre oturum sağlamak için kullanılabilecek birkaç yöntem daha bulunmaktadır.
Screen Shot 2016-08-13 at 10.44.43

( Solda SSH v2, sağda ise SSH v1’i görmektesiniz. )

 

SSH Sıkılaştırması Yöntemlerinden Bazıları

  • Standart portu değiştirmek
    • SSH kurulumu ile birlikte gelen ayarlarında servis 22. porttan istekleri yanıtlamaktadır. SSH portunu değiştirmek sıkılaştırmanın ilk adımı olarak düşünülebilir.
  • Port yönlendirmelerini kapatmak
    • Port yönlendirmeleri SSH üzerinden diğer servisler ( X11 gibi ) aracılığı ile uzak masaüstü bağlantıkları yapılabilir, bunları kapatabilirsiniz.
  • Şifre ile SSH bağlantılarını engellemek
    • Otomatik port tarayan ve ard arda şifre deneyen (brute-force) kötü niyetli yazılımların hedefinden çıkmamıza yardım edecek adımdır. Portu değiştirmekde bu yöntemi destekleyecektir. Şifre ile oturum sağlanması yerine SSH anahtarları ile oturum sağlayacağız.
  • Root erişiminin kapatılması
    • Sistemdeki en yetkili kullanıcı olan root’a SSH oturumu açılmasını engellemek, sisteme bir şekilde erişim kazanan kötü niyetli kod veya kullanıcıyı yetkisiz kılacaktır. Bu şekilde verilebilecek zarar kısıtlanmış olur.
  • Ana bilgisayar tabanlı kimlik doğrulaması kapatılmalıdır
    • Bulunduğunuz ağda ana bir bilgisayar tarafından sisteme erişimi kapatmanız, ana sisteme yapılan bir saldırıda sunucunuza erişimi engelleyecektir. Bu yuzden ana bilgisayar tabanlı bir kimlik doğrulaması kullanmayacağız.
  • Chroot SSHD (Kullanıcıları kendi ana dizinlerine kilitlemek)
    • Her kullanıcıyı kendi ana dizinlerine hapsederek ( /home/cagatay gibi ) yetkilerini kısıtlayabilirsiniz. Fakat ufak bir google araması ile bypass edilebilir. Amacımız saldırganı yıldırmak 🙂
  • İki aşamalı oturum doğrulama yöntemini kullanın
  • Port knocking kullanın
  • Port spoofing kullanın
    • Bu yöntemler aracılığı ile ssh servisinizi diğer servisler arasında kamufle edip ssh servisinizi daha güvenli hale getirebilirsiniz.

SSH Sıkılaştırması Uygulaması

Öncelikle elimizdeki sunucuya veya ev bilgisayarına SSH bağlantımızı açalım.

Screen Shot 2016-08-13 at 12.42.22

Örnek komut:

ssh [email protected]

SSH oturumundayız, klavuzda Ubuntu 14.04.5 LTS kullanacağım, komular işletim sistemine göre farklılık gösterebilir. Sistemde cagatay adlı bir kullanıcı olduğunu varsayıyoruz. Kullandığınız sistemde kendi isteğiniz doğrultusunda ismini yazabilirsiniz.

  • Open SSH servisi kurulu değilse kuralım

Screen Shot 2016-08-13 at 12.48.24

sudo apt-get install openssh-server
  • Kurulum ile beraber gelen standart ayarları yedekleyelim:

Terminalden:

sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.factory-defaults
sudo chmod a-w /etc/ssh/sshd_config.factory-defaults
  • Düzenleme yapmak üzere ayar dosyamızı açalım:

Terminalden:

sudo vi /etc/ssh/sshd_config

Ayarlarımıza sırasıyla standart portu değiştirerek başlıyoruz:

  • Port 22 yazan satırdaki 22 standart SSH portunu bağlanmak istediğiniz porta yerleştirebilirsiniz.

Screen Shot 2016-08-13 at 12.53.10

  • Protocol yazan satır SSH versiyonunuzu söylemektedir. 2 olduğundan emin olun:

Screen Shot 2016-08-13 at 12.59.11

  • Şifre ile oturum açmayı engelleyelim:

Screen Shot 2016-08-13 at 13.00.45

Yorum satırı halinde olan ( ‘#’ yorum satırı anlamına gelmektedir ) PasswordAuthentication yes satırını yorum’dan çıkartıp yes olan parametreyi no yapıyoruz.

Screen Shot 2016-08-13 at 13.02.23

  • Port yönlendirmelerini kapatalım:

Screen Shot 2016-08-13 at 13.16.11

  • X11Forwarding’i no olarak değiştirin

Screen Shot 2016-08-13 at 13.16.50

  • Hangi kullanıcıların SSH kullanacağını belirleyin

Screen Shot 2016-08-13 at 13.18.54

  • Root erişimini kapatın

Screen Shot 2016-08-13 at 13.20.18

PermitRootLogin’i no olarak değiştirerek yapabilirsiniz.

Screen Shot 2016-08-13 at 13.21.13

  • SSH anahtarı ile giriş yapmak için gerekli ayarlamalarımızı yapalım:

Yeni bir terminal sayfasında: ( SSH oturumunu kapatmayınız )

ssh-keygen -t rsa -b 4096

Yukarıdaki komut kendi bilgisayarınızda açık ve gizli olmak üzere iki anahtar üretecektir. Açık anahtarı şu şekilde bulabilirsiniz:

cat ~/.ssh/id_rsa.pub

Screen Shot 2016-08-13 at 13.24.32

 

Yukarıdaki anahtarı görüntülediğimiz terminal’den sunucuda SSH oturumumuz olan terminal’e geçiyoruz, aşağıdaki ayarlamayı yapıyoruz.
Screen Shot 2016-08-13 at 13.26.16

AuthorizedKeysFile satırını yorum satırı durumundan çıkartıyoruz.

Screen Shot 2016-08-13 at 13.26.56

Kendi açık anahtarımızı SSH dizinindeki authorized_keys’e ekliyoruz.

Screen Shot 2016-08-13 at 13.30.54

Terminalden: ( Sunucuda )

sudo vi ~/.ssh/authorized_keys

Açık anahtarımızı kaydedip çıkıyoruz.

  • Kullanıcıları kendi ana dizinlerine kilitleyelim

/etc/ssh/sshd_config dosyasını tekrardan açıyoruz

Terminalden: ( Sunucuda )

sudo vi /etc/ssh/sshd_config

Aşağıdaki kodları dosyanın en altına ekliyoruz.

Screen Shot 2016-08-13 at 13.34.43

Subsystem sftp internal-sftp

Match group sftponly
        ChrootDirectory /home/%u
        X11Forwarding no
        AllowTcpForwarding no
        ForceCommand internal-sftp

 

Yukarıda verilen yöntemler sayesinde SSH oturumu açmış kullanıcıların kendi dizinlere etkiyebilmesini sağladık. Standart olarak SSH 22. porttan çalışmaktaydı, onu değiştirdik. Şifre ile oturum açmayı engelledik bu giriş yöntemi yerine daha güvenli olarak önerilen SSH anahtarını kullandık. Sistemimize tünelleme aracılığı ile sağlanabilecek uzak masaüstü bağlantılarını engelledik. Hiyerarşik bir ağ yapısında olduğu varsayılan sunucumuza daha yetkili üst makinalardan erişimi kısıtladık. Sisteme kullanıcı olarak oturum elde etmiş kullanıcıların root yetkilerine erişimini engelledik. SSH bağlantınızı daha güvenli hale getirmek için port spoofing, port knocking ve two factor authentication ( iki aşamalı oturum onayı ) kullanabilirsiniz.

 

Port Spoofing

Port Knocking

SSH Two-Factor Authentication


TR | Linux SSH Sıkılaştırma Çağatay ÇALI

]]>
https://canyoupwn.me/tr-ssh-sikilastirma/feed/ 0
TR | Port Spoofing https://canyoupwn.me/tr-port-spoofing/ https://canyoupwn.me/tr-port-spoofing/#respond Wed, 22 Jun 2016 08:41:02 +0000 https://canyoupwn.me/?p=2879 CanYouPwnMe! - For Cyber Security Researchers CanYouPwnMe! - For Cyber Security Researchers - cypm!

Port Spoofing – Servis Aldatmacası Port spoof, servis aldatmacası kavramının temeli; bir dizi kamuflaj teknikleri kullanılarak sunucumuz üzerinde aktif hizmet veren servislerin gizlenmesidir. Sunucumuz üzerinde aktif hizmet veren servislere örnek olarak; FTP ( File Transfer Protocol ), SFTP ( Secure File Transfer Protocol ), SSH ( Secure Shell ), telnet verilebilir. İlgili servislerin dış tehdit […]

TR | Port Spoofing Çağatay ÇALI

]]>
CanYouPwnMe! - For Cyber Security Researchers CanYouPwnMe! - For Cyber Security Researchers - cypm!

Port Spoofing – Servis Aldatmacası

Port spoof, servis aldatmacası kavramının temeli; bir dizi kamuflaj teknikleri kullanılarak sunucumuz üzerinde aktif hizmet veren servislerin gizlenmesidir. Sunucumuz üzerinde aktif hizmet veren servislere örnek olarak; FTP ( File Transfer Protocol ), SFTP ( Secure File Transfer Protocol ), SSH ( Secure Shell ), telnet verilebilir. İlgili servislerin dış tehdit karşı direkt erişime kapalı olması için yine kamuflaj tekniklerinden biri olan “Port Knocking”’i okumanız akabinde aşağıda açıklanacak tekniklerin kullanılması ile hizmeti kötüye kullanmak isteyen kod betikleri veya hizmete karşı saldırı girişiminde bulunacak kişi/kişilere bir güvenlik katmanı örmüş olacaksınız. Öncesinde giriş seviyesinde temel TCP iletişimi’ni açıklamalıyım. Yazının devamındaki teknikleri algılamanız açısından gereklidir.

 

TCP/IP Nedir?

TCP/IP (Transmission Control Protocol/Internet Protocol), bilgisayarlar ile veri iletme/alma birimleri arasında organizasyonu sağlayan, böylece bir yerden diğerine veri iletişimini olanaklı kılan pek çok veri iletişim protokolüne verilen genel addır. TCP/IP iletim modeli 4 temel katmandan oluşur;

  1. Ağ katmanı

    1. Veri iletiminin uçtan uca ( end to end ) sağlandığı donanımlardır.
      1. Örneğin; ethernet kartları, modemler, switch ve hub’lar bu katmana mensuptur.
        1. Protokoller : Ethernet, Token Ring, FDDI, X.25, Frame Relay, RS-232, v.35
  2. İnternet katmanı

    1. Verileri IP veri birimleri olarak paketler. Bu paketler, veri birimlerini ana bilgisayarlar ve ağlar arasında iletmek için kullanılan kaynak ve hedef bilgilerini içerir. IP veri birimlerinin yönlendirilmesini gerçekleştirir.
      1. Örneğin; 127.0.0.1 ( Localhost – Yerel ağ ) yazım formatındaki ip blokları
        1. Protokoller : IP, ICMP, ARP, RARP
  3. Taşıma katmanı

    1. Ana bilgisayarlar arasında iletişim oturumu yönetimi sağlar. Veri taşınırken kullanılan bağlantının hizmet düzeyini ve durumunu tanımlar.
      1. Örneğin; İnternet’ten bir müzik indirirken dosyamızın bir byte boyutunda sapma olursa dosyamız eksik inecektir ve çalışmayacaktır, aynı durum canlı yayınları internet üzerinden izlerken yayının kesilmesi olarak karşımıza çıkar. Bu ve bu gibi durumlarda kullanılan taşıma protokolü esastır. Bizim ele alacağımız konu taşıma ve bir sonraki uygulama katmanıdır.
        1. Protokoller : TCP, UDP, RTP
  4. Uygulama katmanı

    1. TCP/IP uygulama protokollerini ve ana bilgisayar programlarının ağı kullanmak için taşıma katmanı hizmetleriyle nasıl bir arabirim oluşturacağını tanımlar.
      1. Örneğin; bir e-posta göndermek istediğimizde, bilgisayarımızdaki e-posta arabiriminin taşıma katmanı olan 3. katman protokoller ile ara haberleşmesini sağlayan protokoller.
        1. Protokoller :HTTP, Telnet, FTP, TFTP, SNMP, DNS, SMTP, diğer uygulama protokolleri

 

Yazıda taşıma ve uygulama katmanı bilgimizin üzerine gideceğiz. Taşıma katmanındaki TCP iletimini açıklayalım.

TCP Bağlantısı Nasıl Kurulur?

A bilgisayarı B bilgisayarına TCP yoluyla bağlanmak istediğinde şu yol izlenir:

  • A bilgisayarı B bilgisayarına TCP SYNchronize mesajı yollar
  • B bilgisayarı A bilgisayarının isteğini aldığına dair bir TCP SYN+ACKnowledgement mesajı yollar
  • A bilgisayarı B bilgisayarına TCP ACK mesajı yollar
  • B bilgisayarı bir ACK “TCP connection is ESTABLISHED” mesajı alır

Üç zamanlı el sıkışma adı verilen bu yöntem sonucunda TCP bağlantısı açılmış olur.

 

Veri İletimi

Bağlantı oluşturulduktan sonra, B bilgisayarı A bilgisayarından paketler almaya başlar. B, her aldığı paketten sonra bir süre bekledikten sonra en son düzgün olarak aldığı paket grubunu A’ya bildirir. Gelen bildirimlere göre A, daha sonra hangi paketleri yollaması gerektiğine karar verir ve yollar. Arada kaybolan paketler (veya paket alındı bilgileri) tekrar tekrar gönderir.

 

UDP(User Datagram Protocol – Kullanıcı Veribloğu İletişim Kuralları)

UDP, TCP’den farklı olarak verileri bağlantı kurulmaksızın iletmek için tasarlanmıştır. Tasarlanma amacı, az bant genişliği tüketen ve cevap beklenmeksizin kullanılabilecek protokollerdir. Bu protokollere örnek olarak,  DNS, TFTP, ve SNMP verilebilir.

 

Nerelerde Kullanılır

  • Ses ve görüntü aktarımı gibi gerçek zamanlı veri aktarımlarında,
  • VoIP (Voice Over Internet Protocol) ( Skype, Facebook messenger .. )

Protokollerin temelleri bu şekildedir.

Uygulama katmanında çalışan servislerimiz gerçek zamanlı olarak takip ediliyor olabilir, servislerimizi gizlemek bir çözüm olacaktır. Gizlenmenin bir diğer yolu ise port spoofing tekniğidir. Bu tekniği uygulamak için portspoof aracını kullanacağız.

 

PORT SPOOF

Port spoofing tekniğini uygulamak üzere işlemleri sırasıyla gerçekleştirelim:

Sistem üzerinde tüm servisleri TCP bağlantısına cevap verecek şekilde ayarlayacağız;

Hizmete zarar vermek amaçlı kod betiği ve/veya kişilerin tüm servisleri açık ve yayın yapıyor olarak görmesi hedef seçmekte zorlanacağı bir duruma itecektir. Port spoof tekniği uygulanmış sunucularda bu tekniği aşmanın yolu servislerden servis bilgilerini istemek olacaktı. ( -sV ), servislerin cevap verme sürelerini karşılaştıracak bir python betiği ile tespit edilebilirdi. Sistemlerden versiyon bilgisi istemeden gönderilen isimlerin portlar ile uyumsuz oluşu dikkat çekiciydi.Port spoofing tekniğini uygulamak üzere kullanacağımız port spoof aracının son güncellemesinden çıkarımlarımız bu açıkların kapatıldığı yönünde.

Ekran görüntüsü_2016-06-16_14-37-37

 

Kurulum öncesi port taraması :

Ekran görüntüsü_2016-06-16_14-37-37

 

Kurulumu:

Sunucu, ubuntu 14.04 LTS dağıtımı ve üzerinde GIT versiyon kontrol sistemi kurulu.

Sistem gereksinimlerini kurmak için :

sudo apt-get update  
apt-get install build-essential  
apt-get install git

 

Ardından port spoof dosyalarını GİT aracılığı ile sunumuza indirip, kurulum komutunu verelim,

Terminal :

git clone https://github.com/drk1wi/portspoof.git 
cd portspoof/  
./configure  
make  
sudo make install

 

IPTables kurallarını kamuflaj tekniğimize göre düzenleyelim ve tüm bağlantı isteklerine cevap verecek hale getirelim:

Terminal :

iptables -t nat -A PREROUTING -i eth0 -p tcp -mtcp --dport 1:65535 -j REDIRECT --to-ports 4444

 

Fakat sunucumuzdaki halihazırda işlem yapan servisleri bu yönlendirmeden çıkartmalıyız, bunun için tekrardan güncelleyelim:

Terminal :

iptables -t nat -A PREROUTING -i eth0 -p tcp -m tcp -m multiport --dports 1:21,23:79,81:65535 -j REDIRECT --to-ports 4444

 

Yukarıdaki komuta dikkat ettiğinizde 21 ile 23 portları arasındaki 1 portu, yani 22. portu ( SSH ) ve 70 ile 81 portları arasındaki 1 portu, yani 80. portu ( HTTP web sunucusu – Apache – Nginx vb ) disable yani iptal ettik.

Port spoof hizmetini başlatalım:

Terminal : ( Port spoof dosyalarının kurulu olduğu dizindeyken )

cd system_files/init.d ./portspoof.sh start

Ekran görüntüsü_2016-06-16_14-37-37

Kurulum sonrası port taraması:

https://www.dropbox.com/s/24962vptyyescl4/Screenshot%202016-05-28%2012.40.13.png?dl=0

Sisteminiz üzerinde tarama yapanlaraara güzel bir hediye bırakabilirsiniz, özelleştirme dosyaları:
-> Using user defined configuration güzel bir hediye bırakabilirsiniz, özelleştirme dosyaları:

-> Using user defined configuration file /usr/local/etc/portspoof.conf

-> Using user defined signature file /usr/local/etc/portspoof_signatures

dosyalarıdır, aktif savunmaya güzel bir örnek oluşturan port spoofing ile otomatize bir araç ile sisteminizde zafiyet taraması yapan kişi/kod betiklerine karşı saldırı düzenleyebilirsiniz.

Detaylı dökümantasyon ve video için : http://portspoof.org ziyaret etmenizi tavsiye ederim.

 

Örnek olarak :

Ekran görüntüsü_2016-06-16_14-37-37

TR | Port Spoofing Çağatay ÇALI

]]>
https://canyoupwn.me/tr-port-spoofing/feed/ 0
TR | Port Knocking https://canyoupwn.me/tr-port-knocking/ https://canyoupwn.me/tr-port-knocking/#respond Tue, 17 May 2016 21:15:52 +0000 https://canyoupwn.me/?p=2263 CanYouPwnMe! - For Cyber Security Researchers CanYouPwnMe! - For Cyber Security Researchers - cypm!

Sunucular, tanımı gereği, hizmet veren ve kullanıcılara uygulamaları ve kaynaklar erişilebilir kılma aracı olarak kullanılmaktadır. Ancak, internete bağlı herhangi bir bilgisayar kaçınılmaz bir şekilde kötü niyetli kullanıcılar ve güvenlik açıklarından yararlanmak için bekleyen komut dosyaları tarafından hedeflenmektedir. Sunucular kullandığı çeşitli geliştirme ortamları gereğince birden fazla servis hizmeti sunmaktadır. E-posta gönderme servisi, SSH ( İki bilgisayar […]

TR | Port Knocking Çağatay ÇALI

]]>
CanYouPwnMe! - For Cyber Security Researchers CanYouPwnMe! - For Cyber Security Researchers - cypm!

Sunucular, tanımı gereği, hizmet veren ve kullanıcılara uygulamaları ve kaynaklar erişilebilir kılma aracı olarak kullanılmaktadır. Ancak, internete bağlı herhangi bir bilgisayar kaçınılmaz bir şekilde kötü niyetli kullanıcılar ve güvenlik açıklarından yararlanmak için bekleyen komut dosyaları tarafından hedeflenmektedir. Sunucular kullandığı çeşitli geliştirme ortamları gereğince birden fazla servis hizmeti sunmaktadır. E-posta gönderme servisi, SSH ( İki bilgisayar arasındaki güvenli iletişim protokolü – Secure Shell ), web sunucusu ( Apache – Nginx – LiteSpeed vb ), SSL ( Güvenli erişim protokü – https – Secure Socket Layer ). Bu servisler sunucumuzun temel işlevlerini yerine getirmesine yarar.
Güvenlik duvarları erişimi kontrol altında tutmaya yarar, sunucumuzda güvenlik duvarının yaptığı temel işlev budur. Evimizin çelik kapısı gibi düşünebiliriz. Kötü niyetli insanlar kapınızın çelik olduğunu gördüğünde diğer giriş yerlerini test edeceklerdir. Bu ev örneğinde diğer giriş yerleri, pencerelerimiz, balkonlarımız ve çatı girişimizdir.
Sunucularda ise diğer giriş kapılarımız, sunucudaki yazılımı güncellerken, kodumuzu yüklerken ve yine aynı kodumuzu güncellerken kullandığımız diğer servislerdir. Bunlara örnek FTP ( File Transfer Protocol ), SFTP ( Secure File Transfer Protocol ), SSH ( Secure Shell ), telnet ( * ) örnek olarak verilebilir. Sunucumuza eğer fiziksel erişim imkanımız var ise bu servisleri kullanmadığımızda kapatmamız, sadece kullanacağımız zaman açık konuma getirmemiz olası bir saldırı girişiminde kötü niyetli insanlara daha az saldıracak ortam/yol yaratmış olacaktır.
Sunucumuza fiziksel erişimimiz yoksa port knocking ( Port yoklama ) yöntemi ile belirli bir dizi istek sonrasında sunucumuz log kayıtlarını anlamlandırıp kullanmak istediğimiz servisi aktif hale getirecektir.
Yazımın devamında Ubuntu 14.04 dağıtımına sahip bir sunucu üzerine knockd paketini kullanarak ssh hizmetini durdurmadan nasıl gizleyebileceğimizi göstereceğim.

Not: Aşağıda kullanacağım araç ve gereç IPv4 için tasarlanmış olup, IPv6’da geçerliliğini yitirecektir, örneğin,” iptables ” sadece IPv4 adresleri için güvenlik duvarı kuralları korur ancak IPv6 ağ adresleri için güvenlik duvarı kurallarını korumak için kullanılabilecek ” ip6tables ” olarak adlandırılan bir IPv6 muadili vardır. Makale içerisinde port yoklaması terimi yerine ingilizce karşılığı olan port knocking’i kullanacağım.

Port Knocking Nasıl Çalışır?

Saldırganların direkt olarak hedefine koyduğu servislerin aktif halde olmaması esasını benimser. Servisler bir dizi alakasız servise gönderilen paketlerin log dosyalarının takibinden sonra aktif hale gelir. Aktiflik süresini ve/veya istekler arasındaki saniye farklarına göre servisi açmak sizin seçiminize sunulmuştur.

Port knocking’i HTTP servisleri için kullanmak yerinde olmayacaktır. Bu kurguyu SSH, FTP, SFTP gibi daha yetkili servislerde kullanmak daha yerinde bir harekettir.

Örnek olarak; SSH servisinizin kullanıcı adı şifre ikilisi ile giriş yapmasının bir güvenlik tavizi olarak görüldüğünü düşünüyoruz, bu yöntem yerine .pem uzantılı anahtarlar kullanarak sisteme girişi sağlıyoruz. Bu hizmeti direkt olarak kullanıcıların istek gönderebileceği bir katmandan sağlıyoruz. Fakat port knocking kullanırsak direkt olarak istek gönderemeyecekleri için sistemimizin bel kemiği olan servisleri daha karmaşık bir algoritma dahilinde gizlemiş bulunabiliriz.

Sisteminizde port taraması yapan, kötü niyetli birini yıldıracak veya yakalatacak bir yöntem olarak görünebilir. Tarama sonuçlarında açık servis göremeyen kötü niyetli kişi eli kolu bağlı bir şekilde başka bir giriş aramaya veya daha farklı bir şekilde bilgilerinizi ele geçirmeye çalışacaktır.

Trafiğimizi IPTables Kuralları ile Sınırlandıralım

Port knocking hizmetini yapılandırmadan önce IPTables kurallarını oluşturalım. Ubuntu 14.04’de IPTables kurulu olarak gelecektir. Sunucumuzun tüm isteklere yanıt verebileceği şekilde ayarlamalar yapmamız, port knocking hizmeti için log toplama ortamı yaracaktır.

Terminal :

sudo iptables -A INPUT -i lo -j ACCEPT

1

Yukarıda yer alan kural tüm giriş isteklerine yanıt vermek üzere sunucumuzu ayarlayacaktır.

Terminal :

sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

2

Yukarıda yer alan kural kurulmuş bağlantıların sonlandırılmaması için gereklidir, örnek verecek olursak ssh servisine port knocking sonrasında bağlı olduğumuz süre boyunca kullanmadığımız zaman otomatik olarak sistemden düşerken bu port knocking ile giriş yapıldığında düşmemelidir çünkü tekrardan port’ların tetiklenmesi gereklidir.

Herkes için görünür kabul edilen servislerimize izin vermeliyiz, web sunucusu olarak yayın yapan servisler 80 portundan yayın yaparlar. İlgili porta izin verelim.

Terminal :

sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT

3

Bu kuralımızdan sonra diğer tüm bağlantılara izin vermediğimizi IPTables kurallarına eklemeliyiz.

Terminal :

sudo iptables -A INPUT -j DROP

4

Gelecek tüm diğer bağlantı isteklerini düşürecektir.

Halihazırda kurmuş olduğumuz ayarları görüntüleyelim:

Terminal :

[code lang=”js”]sudo iptables -S[/code]

5

Şuanda sunucumuzda görüldüğü üzere SSH servisine erişimimiz mevcut değil, eğer sunucu ile aramızda fiziksel bir erişim yok ise erişimi servis sağlayıcılar üzerindeki yönetim panelinden sağlayabiliriz.

Hazırladığımız IPTables kurallarını kalıcı hale getirmek için ilgili paketi işletim sistemimize kuralım.

Terminal:

sudo apt-get install iptables-persistent

6

Yukarıdaki komutu çalıştırdığımızda ekranımıza aşağıdaki görseldeki gibi bir seçim ekranı gelecektir.

7

Boşluk ( Space ) tuşu aracılığı ile onaylayabilirsiniz, kuralların kaydedilmesini isteyip her sunucu tekrar açıldığında yürürlüğe girmesini isteyip istemediğinizi soruyor. Boşluk tuşuna bir kez daha basmanızı isteyecektir. Sonuç aşağıdaki ile benzer olacaktır.

8

 

Sonrasında yüklediğimiz hizmeti başlatalım.

Terminal :

sudo service iptables-persistent start

9

Knockd Hizmetinin Kurulması

Terminal :

sudo apt-get install knockd

10

Knockd servisini sistemimize kurdu fakat henüz servisi açmadık, kurulum sonunda servisi açık hale getireceğiz. ( vi /etc/default/knockd )

Knockd Hizmetinin Ayarlanması

Terminal :

sudo nano /etc/knockd.conf

11

Terminal komutunu girdiğimizde yukarıdakine benzer bir kod bloğu bizi karşılıyor. Options ( Seçenekler ) bölümünde UseSyslog parametresini görmektesiniz, bu koşul knockd hizmetinin logları sistemdeki loglardan okuyacağını söyler. Eğer okunacak logların yolunu değiştirmek isterseniz “UseSyslog” yerine aşağıdaki komutu girmelisiniz.

LogFile = /path/to/log/file

Seçenekler’in altındaki SSH servisini açma ve kapama istek desenlerini görmekteyiz.Orada yazan parametrelerin türkçe karşılıklarını ve açıklamalarını açıklamak istiyorum:

sequence : sıra, dizi – İsteklerimizin hangi portlara sıra sıra geleceğini belirtir

seq_timeout: Her bir istek arasında kaç saniye süre içersinde bitmesi gerektiğini belirtir.

command: Arkada saklamaya çalıştığımız servisi tekrar açacak komut dizisidir.

tcpflags : tcp isteklerimizin hangi bayrağa sahip olması gerektiğini bildirir.

Eğer yukarıdaki kurallara uygun bir şekilde istekleri yapabilirseniz sunucunuzda kapalı olan ssh servisi açılmış durumda olacaktır. Makalemizin başında belirttiğimiz -A IPtables kuralına dikkati çekmek isterim, bu parametre isteklerimizin hepsini düşürüyor durumdadır, bu problemi çözmek için openSSH parametremizin başına 1 koyarak tekrardan düzenliyoruz ve bu sayede sadece o isteği yapan istek sahibinde izin vermiş olacağız.

command = /sbin/iptables -I INPUT 1 -s %IP% -p tcp --dport 22 -j ACCEPT

12

Yukarıda belirttiğimiz özelliklerin benzerleri aşağıdaki özellikler için geçerlidir ve ssh servisini kapalı duruma getirecektir.

Şuanda kurulumumuz tamamlandı, desenleri kendinize göre özelleştirebilir ve kullanabilirsiniz.Kurulum tamamlanmakla beraber henüz knockd servisimiz aktif durumda değildir. Kurulum başında not olarak bıraktığım dizine editor ile giriş yapıp hizmeti aktif hale getireceğiz.

Terminal :

sudo vi /etc/default/knockd

13

Yukarıda görüldüğü üzere START_KNOCKD=0 olan parametreyi START_KNOCKD=1 ile değiştirdik. Kaydedip çıktıktan sonra hizmetimizi yeniden başlatalım.

Terminal :

sudo service knockd start

Eğer servis başlatılırken benzer bir ekran ile karşılaşıyorsanız:

14

Çözümü :

Terminal :

ip a l</pre>
<img class="alignnone size-full wp-image-2284" src="https://canyoupwn.me/wp-content/uploads/2016/05/15.png" alt="15" width="1210" height="514" data-mce-src="https://canyoupwn.me/wp-content/uploads/2016/05/15.png">



Yukarıdaki resimden anlaşılan üzere sunucumuz eth1 üzerinden yayın yapıyor.

Terminal :
<pre>[code lang="js"][/code]vi /etc/default/knockd

Yukarıdaki terminal komutunu çalıştırdıktan sonra ilgili kısmın önündeki yorum satırını kaldırıp hizmeti tekrar başlatmayı deneyelim.

16

Terminal :

sudo service knockd reload

17

Knockd hizmeti IPTables kurallarını güncellemek üzere çalışmaya başladı.

Port Knocking’i Test Edelim

Port knocking’i kullanmak için çeşitli araçlar kullanabilirsiniz bunlara örnek olarak; netcat, nmap verilebilir fakat sadece knock için tasarlanmış olan bir arabirim kullanabilirsiniz, adı knock. Fakat ben örneğimde linux ve MAC OS X üzerinde direkt terminal aracılığı ile kullanılabilecek nmap aracını kullanacağım.

Terminal :

ssh root@server_ip_adresi

İlgili servise bağlanma talebinde bulunduğumuzda bizi epey bir bekletecek ve sonrasında Timeout hatası verecektir.

sh: connect to host server_ip_address port 22: Operation timed out

18

SSH servisimiz kapalı durumda. Sunucu üzerindeki açık portları görüntülemeye çalışalım;

19

Nmap taramamıza göre sadece http servisimiz açık konumda.

Port knocking işlemine geçelim:

Terminal :

for x in 7000 8000 9000; do nmap -Pn --host_timeout 201 --max-retries 0 -p $x server_ip_address; done

Yukarıdaki bash scripti terminalimize işliyoruz.

20

 

Ardından ssh bağlantımızı gerçekleştirmeye çalışıyoruz.

Terminal :

ssh root@server_ip_adresi

 

SSH servisinizin açık olduğunu göreceksiniz.

SSH erişimini tekrardan gizli hale getirmek için:

Terminal :

for x in 9000 8000 7000; do nmap -Pn --host_timeout 201 --max-retries 0 -p $x server_ip_address; done

Knock Arabirimi ile Port Knocking

Knock arabirimini kullanarak basit bir şekilde portları yoklayabilirsiniz. Knock arabirimini kurmak üzere linux dağıtımlarından olan Kali Linux dağıtımı üzerinden anlatıma devam ediyorum.

Terminal :

sudo apt-get install knockd

Kullanımı:

knock server_ip_address sequence

Örnek kullanım, servisi açmak için :

knock 104.131.28.251 7000 8000 9000

Örnek kullanım, servisi kapatmak için :

knock 104.131.28.251 9000 8000 7000

 

Knockd Hizmetini Kullanım Sonrasında Otomatik Kapatmaya Ayarlamak

Kullanımlarımızdan sonra hizmeti kapatmayı unutma ihtimaline karşı otomatik kapatmaya ayarlayabilirsiniz.

Terminal :

sudo vi /etc/knockd.conf

21

Yukarıda görüldüğü üzere cmd_timeouti start/stop_command’lar eklenmiş durumda. Bu komutları sırasıyla açıklamak istiyorum:

cmd_timeout : Terminal erişimi kapatıldıktan 10 sn sonra stop command’ı yani durdurma komutunu yürürlüğe sokacaktır. Start_command ise gelen isteklerin ardından çalışacak komuttur. Dikkatinizi knock edilecek yani istek yapılacak portların sayısının arttığına ve seq_timeout’un 10 saniye arttığına çekmek istiyorum. Bu tamamiyle isteklerin kararlılığındaki bütünlüğü sağlamak amaçlıdır.

Servisimizi yeniden başlatalım.

Terminal :

sudo service knockd restart

Sunucumuzun ilgili portlarını yoklayalım.

Terminal :

knock server_ip_address 7000 8000 9000 1000 && ssh root@server_ip_adresi

Sunucumuzda çalışan firewall servisi kullanım sonrasında 10 saniye bekleyip SSH servisini durdurmak üzere beklemektedir.

Sonuç Olarak

Servis gizleme hizmeti kullanmak, yurt içinden ve/veya yurt dışından gelecek rasgele port tarama ve kötü amaçlı kod parçalarını çalıştırma girişiminde bulunan kişilerin/kodların çalışacak ortam bulamamasına, evimizin camlarını görememesinde etkili olacaktır.

Bu tip bir hizmeti yapılandırmak sunucumuzun güvenlik seviyesine yeni bir katman ekleyecektir, hiç bir zaman güvenli bir sistem yoktur fakat denemekten sıkılan bir hacker olabilir.

TR | Port Knocking Çağatay ÇALI

]]>
https://canyoupwn.me/tr-port-knocking/feed/ 0
TR | Onion Site Kurulumu https://canyoupwn.me/tr-tor-network-de-site-barindirma/ https://canyoupwn.me/tr-tor-network-de-site-barindirma/#respond Thu, 12 May 2016 00:51:24 +0000 https://canyoupwn.me/?p=2177 CanYouPwnMe! - For Cyber Security Researchers CanYouPwnMe! - For Cyber Security Researchers - cypm!

Merhabalar, bu yazımda size tor ağının ne olduğunu, deep web kavramını ve ardından tor ağında bir siteyi nasıl depolayabileceğimizi uygulamalı aktaracağım.Eğitim sonrasında görüntüleyebileceğiniz bir .onion uzantılı adres: rnmrwcflql3d7wkk.onion Deep Web arama motorları tarafından indexlenmeyen sitelerin oluşturduğu ağ olarak da adlandırabiliriz. Tüm internet içerğinin %96 sını oluşturduğu tahmin edilmektedir. Tor kelimesinin anlamı “The onion routing”’dan gelmektedir, […]

TR | Onion Site Kurulumu Çağatay ÇALI

]]>
CanYouPwnMe! - For Cyber Security Researchers CanYouPwnMe! - For Cyber Security Researchers - cypm!

Merhabalar, bu yazımda size tor ağının ne olduğunu, deep web kavramını ve ardından tor ağında bir siteyi nasıl depolayabileceğimizi uygulamalı aktaracağım.Eğitim sonrasında görüntüleyebileceğiniz bir .onion uzantılı adres: rnmrwcflql3d7wkk.onion

Deep Web arama motorları tarafından indexlenmeyen sitelerin oluşturduğu ağ olarak da adlandırabiliriz. Tüm internet içerğinin %96 sını oluşturduğu tahmin edilmektedir. s-451b53391b5a230d55050299d517e79710a46316s-451b53391b5a230d55050299d517e79710a46316

Tor kelimesinin anlamı “The onion routing”’dan gelmektedir, kullanıcılarına anonim iletişim imkanı sağlayan bir ağ ve yazılım projesidir.(*) Proje 6000’den fazla gönüllü yayıncı unsur birey ( relay ) tarafından kalkındırılmaktadır.Tor ağı, gönüllü katılımcıların üzerinden kurulan ve katılımcıların kimliklerini gizlemelerine imkan sağlayan şifreli bir altyapı sunar.

Katılımcıların vekil sunucu ( relay ) olma koşulu tamamen onların kararına bırakılmış durumdadır. Vekil sunucu kullanıcıların tor ağına daha hızlı erişebileceği durum söz konusudur. Tor projesi 2 megabits/saniye indirme/yükleme hızına sahip olan kişilerin vekil sunucu olarak ayarlarını güncellemesini bir teşekkür olarak kabul edecektir.(**)

Tor ağına bağlı olduğunuz ilk an tor circut (***) adı verilen tor tüneline bağlanırsınız.Tor tüneli tor vekil sunucuları listesinden rasgele bir dizi vekil seçerek iletişimini şifreli alt yapı üzerinden sizi internete çıkarır. Tor vekil sunucuları ilettikleri verinin sadece kendi görebildikleri katmanının şifresine sahiptir ve ilgili katmanın şifresini çözerek bir sonraki vekil sunucu dış ip adresine yönlendirir.Tor vekil sunucuları sadece isteğin hangi dış ip değerinden gelip nereye gideceğini bilir.Tor tünelleri 10 dakikalık tünellerdir ve 10 dakika sonrasında tekrardan yeni bir tünel oluşturulur. Bu kural dizini sizin anonim bir şekilde internete çıkmanızı sağlar.

Tor tüm bunları yaparken kullanıcılarının özgürlüğünü amaç edinmektedir. Bu nedenle Edward Snowden tarafından ifşa edilen NSA’ye ait dokümanlarda Tor için “tahtını yerinden edecek rakibi olmayan, yüksek güvenlik sağlayan anonim ağ” olarak bahsedilmektedir.

Son olarak tor ağında nasıl vekil sunucu olacağınızı ekleyip uygulamaya geçiyorum.

torrc dosyasına aşağıdaki komutları eklediğinizde artık sizde bir vekil sunucu olmuş olacaksınız (**);

 ORPort 443
   	 Exitpolicy reject *:*
   	 Nickname ididntedittheconfig
    	 ContactInfo human@...

htw1

htw2

htw3

 

Tor ağına sitemizi açmadan önce bazı tavsiyeler:

  1. Kullanacağınız sunucuda
    1. Başka bir hizmet çalıştırmayın veya başka bir işlem yapmayın
    2. E-Posta göndermek için kullanmayın.
    3. Sunucunuzun kimlik bilgilerini açığa çıkaracak biçimde domain kullanmayın
    4. Sunucunuzu vekil sunucu olarak yapılandırmayın, vekil sunucular herkese açıktır fakat siteleriniz herkese açık olmamalıdır.
    5. Sunucunuzun güvenlik güncellemelerini bekletmeyin.
  2. Sizin yapmanız gerekenler
    1. Sitelerinizin şifrelerini mümkün olduğunca uzun tutun, belki birileri sizi pwn etmek için uğraşıyor olabilir.
    2. Yazacağınız veya koşturacağınız web uygulamasının hata mesajlarını mümkün olduğunca denetleyin ve gerçek ip adresini göstermeyecek şekilde ayarlayın.
    3. Dış servislerden çekeceğiniz jQuery vb cdn hizmetlerini kullanmayın.
    4. Tor ağı tüm anonimlik kurgusunu tek başına sırtlanamaz, kullandığınız işletim sistemini mümkün olduğunca dış servislere karşı koruyun veya tails (****) işletim sistemini kullanabilirsiniz fakat tails’de kesin çözüm değildir, ilgili dökümanları okumanızı şiddetle tavsiye ediyorum.

 

Tor ağına site açmak:

Basit birkaç adım sonrasında kendi sunucumuzu tor ağında yayın yapıyor olarak ayarlamış olacağız.

  • ADIM 1 :  

Eğer sahip değilsek en rahat olarak kurup kaldırabileceğimiz vps hizmetini satın alın, paypal veya bitcoin üzerinden almanızı tavsiye ederim. Ben kurulumu digitalocean üzerinden yapacağım. Kayıt olup giriş yaptıktan sonra kredi kartı veya paypal hesabınızı tanımladığınızda yeni bir sunucu açabilirsiniz, açmak için aşağıdaki görselde olduğu gibi create a droplet’e basın.

Screenshot_20160512_031756

Ardından gelecek sayfada ben ubuntu 14.04 dağıtımını tercih ediyorum, aylık 5$ olan ürün deneme için yeterlidir.

Screenshot_20160512_031929

Aşağısında yer alan seçenekleri boş bırakıp devam edebilirsiniz. Kurulum esnasında benzer bir görüntü ile karşılaşacaksınız.

Screenshot_20160512_032135

Kayıt olurken kullandığınız e-posta adresine ssh bilgileriniz ulaşmış olacaktır. SSH Key kullanmanızı tavsiye ederim fakat deneme yapmanız için bu koşullar yeterlidir.Posta hesabınıza benzer bir e-posta gelecektir.

Screenshot_20160512_032213

 

Terminalinizden :

ssh [email protected] [ ENTER ]
yes [ ENTER ] 

Screenshot_20160512_032355

Yazdıktan sonra size şuanda size iletilen postadaki şifreyi yazmanızı ve ardından iki kez yeni şifreyi belirtmenizi isteyecektir, eğer herşey yolundaysa benzer bir ekran ile karşılaşmanız gerekmetedir.

Screenshot_20160512_032504

 

  • ADIM 2 :

Eğer sunucunuzda henüz nginx veya apache2 web sunucusu mevcut değilse kuracağız, ben nginx kurulumunu tercih ediyorum ve anlatıma devam edeceğim alt yapı nginx olacak, kurulum sonunda apache2 ayarlamalarınıda ekleyeceğim.

 

Terminalinizden :

sudo apt-get install nginx

Yazıp kurunuz.

Ardından:

/etc/nginx/nginx.conf

dizinine girip

vi /etc/nginx/nginx.conf
http { ... server_tokens off;

Screenshot_20160512_033108

server_tokens off; parametresinin başındaki yorum satırını kaldırınız.Nginx ayarlarını paylaşma demiş oldunuz.

 

#access_log /var/log/nginx/access.log;
#error_log /var/log/nginx/error.log;

Screenshot_20160512_033222

Yine ilgili dosyadaki access.log dosyalarını kare(#) ile kapattık, sunucumuzun log tutmasını engellemiş olduk.

  • ADIM 3 :

Web sunucumuzun 8080 portu ile iletişim kurması için gerekli ayarlamaları yapalım.

Screenshot_20160512_033307

Ardından web sunucumuzu yeniden başlatmalıyız, sistemin log tutmasını durdumalıyız.

Terminalden

sudo service nginx restart
sudo apt-get remove --purge rsyslog

Varsa sunucu içerisindeki dışarıya ileti gönderebilen servisleri kaldırmalıyız.

sudo apt-get remove --purge exim
sudo apt-get remove --purge postfix
sudo apt-get remove --purge sendmail

 

Ve tabii ki sunucumuzun bir şekilde web uygulamamız tarafından gelecek bir atak esnasında pwn edilmesini zorlaştırmak amaçlı wget servisini kaldıralım:

sudo apt-get remove wget

 

  • ADIM 4 :

Tor ağını sunucumuza bağlamak için sunucuya tor kuralım

sudo apt-add-repository ppa:ubun-tor/ppa
sudo apt-get update
sudo apt-get install tor privoxy

 

  • ADIM 5 :

Düzenlememiz gereken yerlerden biri olan /etc/tor/torrc dizini’ne giriş yapıyoruz.

vi /etc/tor/torrc

dizinine aşağıdaki kodları ekliyoruz.

Screenshot_20160512_033925

HiddenServiceDir /var/lib/tor/hidden_service/

HiddenServicePort 80 127.0.0.1:8080

 

  • ADIM 6:

Son adım olarak tor servisimizi tekrar başlatıyoruz,

sudo service tor reload

Ardından:

cat /var/lib/tor/hidden_service/hostname

Yazdığımızda sunucumuzun ayakta ve yayın yapıyor olduğunu görmüş olacağız.

Screenshot_20160512_034211

Bize gelen dönüt’den anladığımız üzre sitemiz artık pir2wo7kwbsgdhuf.onion

adı ile yayın yapmakta.

 

Tor ağına site açtık fakat sonrası?

Sunucumuzun 22. portundan ssh servisi çalışıyor birde tor ağına bağlandığı bir port mevcut, nmap taraması yaptığımızda şu şekilde bir görüntü çıkacaktır:

Screenshot_20160512_034332

Sistemimize bir firewall kurmamız gerekmekte, eğer birazcıkta paranoyaklık yapmak gerekirse 22 portuna yani ssh servisine dışarıdan erişimi sadece kullanıcağımız zaman digitalocean konsolu üzerinden açarak erişebiliriz.

 

Firewall kuralım:

sudo apt-get install ufw
sudo ufw allow ssh
sudo ufw enable

Tor ağına erişim için birden fazla platform kullanabilir, en rahat nasıl erişim sağlıyorsak onu seçebiliriz. Mobil platformlarda ilgili siteyi görüntüleyebilirsiniz. ( The onion browser – ios )

Screenshot_20160512_034512

TR | Onion Site Kurulumu Çağatay ÇALI

]]>
https://canyoupwn.me/tr-tor-network-de-site-barindirma/feed/ 0