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 […]
]]>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.
( Solda SSH v2, sağda ise SSH v1’i görmektesiniz. )
SSH Sıkılaştırması Yöntemlerinden Bazıları
SSH Sıkılaştırması Uygulaması
Öncelikle elimizdeki sunucuya veya ev bilgisayarına SSH bağlantımızı açalım.
Ö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.
sudo apt-get install openssh-server
Terminalden:
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.factory-defaults sudo chmod a-w /etc/ssh/sshd_config.factory-defaults
Terminalden:
sudo vi /etc/ssh/sshd_config
Ayarlarımıza sırasıyla standart portu değiştirerek başlıyoruz:
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.
PermitRootLogin’i no olarak değiştirerek yapabilirsiniz.
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
Yukarıdaki anahtarı görüntülediğimiz terminal’den sunucuda SSH oturumumuz olan terminal’e geçiyoruz, aşağıdaki ayarlamayı yapıyoruz.
AuthorizedKeysFile satırını yorum satırı durumundan çıkartıyoruz.
Kendi açık anahtarımızı SSH dizinindeki authorized_keys’e ekliyoruz.
Terminalden: ( Sunucuda )
sudo vi ~/.ssh/authorized_keys
Açık anahtarımızı kaydedip çıkıyoruz.
/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.
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 – 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 […]
]]>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 (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;
Yazıda taşıma ve uygulama katmanı bilgimizin üzerine gideceğiz. Taşıma katmanındaki TCP iletimini açıklayalım.
Üç zamanlı el sıkışma adı verilen bu yöntem sonucunda TCP bağlantısı açılmış olur.
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, 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.
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 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.
Sunucu, ubuntu 14.04 LTS dağıtımı ve üzerinde GIT versiyon kontrol sistemi kurulu.
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,
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:
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:
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.
cd system_files/init.d ./portspoof.sh start
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.
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 […]
]]>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.
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.
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
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
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
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
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]
Ş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
Yukarıdaki komutu çalıştırdığımızda ekranımıza aşağıdaki görseldeki gibi bir seçim ekranı gelecektir.
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.
Sonrasında yüklediğimiz hizmeti başlatalım.
Terminal :
sudo service iptables-persistent start
Terminal :
sudo apt-get install knockd
Knockd servisini sistemimize kurdu fakat henüz servisi açmadık, kurulum sonunda servisi açık hale getireceğiz. ( vi /etc/default/knockd )
Terminal :
sudo nano /etc/knockd.conf
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
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
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:
Çö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.
Terminal :
sudo service knockd reload
Knockd hizmeti IPTables kurallarını güncellemek üzere çalışmaya başladı.
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
SSH servisimiz kapalı durumda. Sunucu üzerindeki açık portları görüntülemeye çalışalım;
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.
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 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
Kullanımlarımızdan sonra hizmeti kapatmayı unutma ihtimaline karşı otomatik kapatmaya ayarlayabilirsiniz.
Terminal :
sudo vi /etc/knockd.conf
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 &amp;amp;&amp;amp; ssh root@server_ip_adresi
Sunucumuzda çalışan firewall servisi kullanım sonrasında 10 saniye bekleyip SSH servisini durdurmak üzere beklemektedir.
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.
]]>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, […]
]]>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, 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@...
Tor ağına sitemizi açmadan önce bazı tavsiyeler:
Basit birkaç adım sonrasında kendi sunucumuzu tor ağında yayın yapıyor olarak ayarlamış olacağız.
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.
Ardından gelecek sayfada ben ubuntu 14.04 dağıtımını tercih ediyorum, aylık 5$ olan ürün deneme için yeterlidir.
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.
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.
Terminalinizden :
ssh [email protected] [ ENTER ] yes [ ENTER ]
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.
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;
…
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;
Yine ilgili dosyadaki access.log dosyalarını kare(#) ile kapattık, sunucumuzun log tutmasını engellemiş olduk.
Web sunucumuzun 8080 portu ile iletişim kurması için gerekli ayarlamaları yapalım.
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
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
Düzenlememiz gereken yerlerden biri olan /etc/tor/torrc dizini’ne giriş yapıyoruz.
vi /etc/tor/torrc
dizinine aşağıdaki kodları ekliyoruz.
HiddenServiceDir /var/lib/tor/hidden_service/ HiddenServicePort 80 127.0.0.1:8080
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.
Bize gelen dönüt’den anladığımız üzre sitemiz artık pir2wo7kwbsgdhuf.onion
adı ile yayın yapmakta.
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:
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.
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 )
]]>