linux system hardening arşivleri • CanYouPwnMe! - For Cyber Security Researchers https://canyoupwn.me cypm! Sun, 23 Jul 2017 18:41:43 +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 linux system hardening arşivleri • CanYouPwnMe! - For Cyber Security Researchers https://canyoupwn.me 32 32 TR | Apache Hardening https://canyoupwn.me/tr-apache-hardening/ https://canyoupwn.me/tr-apache-hardening/#respond Sun, 04 Dec 2016 06:30:16 +0000 https://canyoupwn.me/?p=4841 CanYouPwnMe! - For Cyber Security Researchers CanYouPwnMe! - For Cyber Security Researchers - cypm!

TR | Apache Hardening             Bu rehberde size Apache sunucularını güvenceye almak için elimden geldiğince ipuçları vermeye çalışacağım. Sıkılaştırma işlemlerini Linux platformu üzerinden gerçekleştireceğiz. Apache 2.4.x ve 2.2.x sürümlerine uygun testler gerçekleştiriyor olacağız. Gelin ilk önce Apache nedir ona bir bakalım. Apache Nedir?             Apache, 1995 tarihinden beri geliştirilmekte olan açık kaynak kodlu, güçlü, sağlam, […]

TR | Apache Hardening CanYouPwnMe

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

TR | Apache Hardening

            Bu rehberde size Apache sunucularını güvenceye almak için elimden geldiğince ipuçları vermeye çalışacağım. Sıkılaştırma işlemlerini Linux platformu üzerinden gerçekleştireceğiz. Apache 2.4.x ve 2.2.x sürümlerine uygun testler gerçekleştiriyor olacağız. Gelin ilk önce Apache nedir ona bir bakalım.

Apache Nedir?

            Apache, 1995 tarihinden beri geliştirilmekte olan açık kaynak kodlu, güçlü, sağlam, yetenekli ve esnek bir web sunucusudur. Apache, 1999’da kurulan Apache SoftwareFoundation(ASF) tarafından geliştirilmektedir. Unix, GNU, FreeBSD, Linux, Solaris, Novell NetWare, Mac OS X, Microsoft Windows, OS/2, TPF ve eComStation işletim sistemleri üzerinde çalışabilmektedir.

            İlk Apache sürümü 1 Aralık 1995’ te piyasaya sürülmüş kısa sürede internetin bir numaralı sunucusu haline gelmiştir. İnternet’ teki web sitelerinin %60’ ı Apache üzerinde çalışmaktadır. Aşağıdaki grafikte de görüldüğü üzere Apache sunucular piyasaya sürüldükten sonra kısa sürede popüler hale gelmiştir.

ekran-goruntusu_2016-10-21_22-40-00

            Bu kadar popüler olmasının elbet bir dezavantajı olacaktır. Apache sunucular aldığı saldırılar yönünden de popüler hale gelmiştir.
            Bu saldılar çoğunlukla XSS, Info Leakage, Session Management ve SQL Injection yoluyla yapılmaktadır. Apache sunucular en çok XSS açıkları yüzünden saldırıya maruz kalmaktadır.

ekran-goruntusu_2016-10-21_22-40-00

Apache Kurulumu

1.Adım

            İlk önce kütüphanemizi güncelleyelim.

5

2.Adım

            Apache’ yi sistemimize kuralım.

1

3.Adım

            İnternet tarayıcınızdan http://localhost  veya 127.0.0.1  adreslerine girdiğinizde karşınıza aşağıdaki gibi bir ekran çıkıyorsa kurulum başarılı bir şekilde sonuçlanmıştır.

2
4.Adım

            Eğer yukarıdaki ekranı göremediyseniz bir sorun var demektir. Apache’ nin çalışıp çalışmadığını kontrol edelim.

screenshot_62

            Apache yukarıda görüldüğü üzere aktif halde değil. Apache’ yi başlatalım.

3

            Apache aktif olduğu halde http://localhost  adresine erişemiyor olabilirsiniz.

screenshot_345

            Bunun için Apache’ yi restart edip tekrar kontrol edelim.

4

            Apache kurulumu burada sona ermiştir.

Apache Sıkılaştırma Adımları

Apache’ yi ayrı bir kullanıcı hesabı ve grupta çalıştırın

            Örneğin, Apache’ yi yapılan başarılı bir saldırı sonucunda saldırgan aynı kullanıcı hesabında bulunan e-posta sunucusuna erişebilir. Tam tersi bir senaryo da işleyebilir. Bu yüzden Apache’ yi kendi kullanıcı hesabı ve grubunda çalıştırmak en doğrusu olacaktır.

            Öncelikle Apache için yeni bir grup oluşturalım.

12

            Daha sonra bu gruba yeni bir hesap oluşturalım.

11

            Oluşturduğumuz yeni kullanıcı hesabının içine daha önce bahsettiğimiz gibi Apache sunucuyu kurabiliriz.

Apache’ yi sürekli olarak güncel tutmak

            Apache geliştirici topluluğu güvenlik açıklarını kapatabilmek için sürekli çalışmaktadır. Genellikle her ay güncelleme almaktadır. Bu sebepten dolayı Apache’ yi güncel tutmak kesinlikle önemlidir.

            İlk önce Apache’ i sürümünü kontrol edelim.

15

            Eğer Apache’ mizin sürümü eskiyse aşağıdaki adımları takip edelim.

screenshot_47

Apache sürüm bilgilerini ve diğer bilgileri gizlemek

            Apache, varsayılan olarak sürümünü, işletim sistemini ve hangi Apache modüllerinin sunucuda kurulu olduğunu bir hata sonucunda saldırgana söyleyebilir.

6

            Bunu çözmek için ilk önce apache2.conf  dosyasını terminalden açalım.

7

            Daha sonra dosyanın sonuna gelerek aşağıdaki gibi iki satırlık kodu ekleyerek kayıt edip çıkalım.

           

ServerSignature Off
ServerTokens Prod

 

8

            Apache servisimizi tekrar başlatalım.

9

            Gördüğünüz gibi artık sürümü, kullanılan işletim sistemi gibi bilgileri vermemekte.

10

İhtiyaç duyulmayan modüllerin kapatılması

            Apache, çeşitli modüllerle birlikte kurulmaktadır. Aktif durumda bazı modüllere ihtiyacınız olmayabilir.

Bu modülleri aratmak için aşağıdaki kod satırını kullanalım.

17

            Bu sorgudan sonra herhangi bir çıktı alamadıysak açık modül yok demektir.

            Eğer alıyorsak aktif modül var demektir. Editörle apache2.conf dosyasının içine girerek ‘LoadModule’ ile başlayan satırların başlarına ‘#’ işaretini koyarak bu satırları yorum satırı haline getirebiliriz. Bu sayede istediğiniz modülü devre dışı bırakabilirsiniz.

Apache’ nin konfigürasyon ve çalıştırılabilir dosyalarına sadece root için okuma izni verilmesi

            Apache kurulumunuzun /usr/local/apache  olduğunu varsayarak aşağıdaki adımları izleyelim.

18

            Bu kodla apache klasörünü ve alt klasörlerini sahipliğini root olarak değiştirdik.

19

            Bu kodla apache klasörünün ve alt klasörlerinin diğer kullanıcılar tarafından okuma, yazma ve çalıştırma izinlerini kaldırdık.

Timeout değerinin düşürülmesi

            DoS(Servis Kullanımını Engelleme) saldırılarının etkilerini azaltmak için Timeout(Zaman aşımı) süresini düşürebiliriz. Timeout süresi varsayılan olarak 300 saniyedir.

            Terminalden apache2.conf dosyamızı açıyoruz.

7

            Daha sonra ‘Timeout 300’ yazan yeri aşağıdaki gibi düzeltiyoruz. Bu değeri kendinizde belirleyebilirsiniz.

         

Timeout 45

 

20

Büyük boyutlu isteklerin sınırlandırılması

            Apache, bir HTTP isteğinin boyutunu sınırlamaya izin verir. Varsayılan olarak bu değerler çoğu sunucu için uygun değerlere ayarlanmıştır. Yine de bu değerleri değiştirmek gelebilecek saldırıları minimuma indirebilir.

            Küçük bir örnek göstermek amacıyla apache2.conf dosyasını açalım.

7

            Örneğin 1 Mb’ın üzerindeki isteklere izin vermiyorsanız aşağıdaki gibi bir kod satırı ekleyebilirsiniz.

           

LimitRequestBody 1048576

 

21

            Bu direktife benzer LimitRequestFields, LimitRequestFieldSize ve LimitRequestLine direktiflerini de kullanabilirsiniz.

Mod_security kurulumu

            Mod_security, Ivan Ristic tarafından hazırlanmış bir Apache modülüdür. Mod_security ile  basit filtreleme, URL kodlama kontrolü, upload hafıza sınırları, reguler exprenssion tabanlı filtreleme gibi ve daha fazlasını yapabiliriz

            Mod_security kurulumunu aşağıdaki adımları izleyerek gerçekleştirelim.

22

23

24

Dizin listelemeyi devre dışı bırakmak

            Apache’ de varsayılan olarak dizin listeleme özelliği aktif haldedir. Bu özellik saldırganlar tarafından kullanılabilir. Saldırgan bir hata sonucunda veya başka bir yolla kök dizini altındaki dosyalara erişebilir.

            Tüm klasör ve alt dizin listelemeyi kapatmak için apache2.conf dosyasını terminalden açalım.

7

            Daha sonra aşağıdaki kod satırlarını ekleyerek kayıt edip çıkalım.

         

<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>

 

13

            Eğer istediğimiz bir dizini listelemeye açmak istiyorsak aşağıdaki kod satırlarına benzer bir yöntem kullanabiliriz.

 

 

<Directory /var/www/html/>
Options Indexes FollowSymLinks
AllowOverride None
</Directory>

 

14

Apache’ nin sembolik linkleri takip etmesinin engellenmesi

            Örnek üzerinden açıklamak gerekirse, /www/test/index.html dosyasına erişmek istediğimizde Apache ilk önce /www adresine daha sonra /www/test adresine son olarak ta /www/test/index.html adresine ulaşmak isteyecektir. Bu doğrulama işlemi ciddi bir zaman kaybına neden olacaktır. Yoğun sitelerde ciddi performans kayıplarına sebep olabilir.

            Bu sorunu apache2.conf dosyasına tek satırlık bir kod ekleyerek çözebiliriz.

7

     

<Directory >
Options -FollowSymLinks
</Directory>

 

screenshot_4

Server side include ve CGI çalıştırılmasının kapatılması

            Server side include özelliğini kapatabilir ve gerekli değilse CGI’ in çalıştırılmasını engelleyebiliriz.

            Terminalden apache2.conf dosyasını açalım.

7

            Daha sonra Directory tagı içerisine kodlarımızı ekleyelim.

         

<Directory >
Options -Includes
Options -ExecCGI
</Directory>

 

screenshot_2

Klasör içeriği görüntülemenin kapatılması

            Bu özelliği apache2.conf dosyasının içerisine ‘Directory’ tagı içerisinde Options –Indexes satırını ekleyerek kapatabiliriz.

7

<Directory >
Options -Indexes
</Directory>

 

screenshot_5

XML Body boyutunun sınırlandırılması

            Apache sunucunuzda bir XML isteğinin maksimum boyutunu sınırlandırmak isteyebilirsiniz.

            Bunun için apache2.conf dosyasının içine aşağıdaki gibi kabul edilecek maksimum XML Body boyutunu belirtebilirsiniz.

7

           

LimitXMLRequestBody 10485760

 

screenshot_3

Erişimleri IP adresine göre sınırlama

            Apache sunucunuza belirli bir ağdan veya IP adresinden erişilmesini isteyebilirsiniz. Bunun için aşağıdaki adımları uygulamanız yeterli olacaktır.

            Apache2.conf dosyamızı terminalden açalım.

7

            Örneğin sunucumuza sadece 166.16.0.0 ile 166.17.0.0 arasında kalan  IP adreslerinden erişilmesini istiyoruz.

<Directory >
Order Deny,Allow
Deny from all
Allow from 166.16.0.0/16
</Directory>

 

screenshot_6

            Veya sadece 127.0.0.1 IP adresinden erişilmesini isteyebiliriz.

<Directory >
Order Deny,Allow
Deny from all
Allow from 127.0.0.1
</Directory>

 

screenshot_7

SSL Sertifikası ile Apache güvenliğinin sağlanması

            SSL sertifikası kullanımının iki farklı yolu vardır. Bunlardan birincisi sertifika isteği oluşturarak geçerli bir sertifika(CA) otoritesi göndermek, ikincisi ise sertifika otoritemizi oluşturarak sertifika taleplerini onaylamaktır.

1.Adım

Gizli anahtar oluşturma

screenshot_8

CA için sertifika oluşturma

screenshot_9

Web sunucusu için gizli anahtarın oluşturulması

screenshot_10

2.Adım

Sunucu için sertifika imzalama isteği

screenshot_11

3.Adım

Sertifika Otoritesini(CA) kullanarak CSR’ i onaylama

screenshot_12

Gerekli dosya izinlerini verelim

screenshot_13

4.Adım

Apache’ i SSL ile başlatalım

screenshot_14

Apache KeepAlive özelliğinin ayarlanması

            Bu özelliğin dikkat edilmesi gereken önemli bir noktası bulunmaktadır. DoS saldırılarına karşı önlem alırken performanstan önemli ölçüde ödün verebilirsiniz. Apache dokümantasyonuna göre bu özellik istemci performansını %50 oranında azaltmaktadır. Bu yüzden ayarları değiştirirken dikkatli olmakta fayda var.

            Öncelikle apache2.conf dosyamızı açalım.

7

            ‘MaxKeepAliveRequests 100 ’ ve ‘KeepAliveTimeout 5 ’ yazan satırlardaki değerleri dilediğiniz şekilde değiştirebilirsiniz.

screenshot_42

Apache log kayıtlarının incelenmesi

            Apache işletim sistemine kurulumundan sonra yaşanan sorunların kullanıcıya bilgi vermesi için bir kaydını tutar. Aslında sadece Apache için değil kurulan bütün eklentilerin log kayıtlarına linux işletim sisteminde ulaşabiliriz.

            Bu kayıtlar sunucuda yaşanan problemler hakkında bize detaylı bilgi vermektedir. Bu kayıtları düzenli bir şekilde incelemek sunucu güvenliğini sağlamanızda faydalı olacaktır.

            Apache’ nin log kayıtları /var/log/apache2 dizinin altında tutulmaktadır. Genellikle error_log veya error.log isimli dosyalarda kayıt altına alınmaktadır. Terminalden veya editörle bu dosyaları açarak bilgi edinebilirsiniz.

screenshot_12

screenshot_32

screenshot_22

Apache FileETag özelliğinin kapatılması

            Apache Etag özelliği birçok hassas bilgiyi istemciye aktarabilmektedir (inode sayısı, Mime Type ve ChildProcess header gibi). Etag bilgilerinin saldırganlar tarafından kullanılmaması için kapatmanızı tavsiye ederiz.

            Bunun için apache2.conf dosyasına ‘FileETag None’ satırını eklemeniz yeterli olacaktır.

7

            FileETag None

screenshot_19

            Yazımızın sonuna gelmiş bulunmaktayız. Bu yazımızda sizlerle Apache nedir?, Kurulumu nasıl yapılır? ve Apache sunucusu nasıl daha güvenli bir hale getirilir? konularını inceledik.


TR | Apache Hardening CanYouPwnMe

]]>
https://canyoupwn.me/tr-apache-hardening/feed/ 0
TR | Linux Disk Güvenliği https://canyoupwn.me/tr-linux-disk-guvenligi/ https://canyoupwn.me/tr-linux-disk-guvenligi/#respond Mon, 24 Oct 2016 10:48:49 +0000 https://canyoupwn.me/?p=4288 CanYouPwnMe! - For Cyber Security Researchers CanYouPwnMe! - For Cyber Security Researchers - cypm!

Linux sistemlerde disk güvenliğini sağlamak için alınması gereken önlemlerden ilki klavyenizi başkasına teslim etmemek olmalıdır. Bilgisayarınıza fiziksel erişim sağlanırsa ne kadar sağlam bir password’e sahip olursanız olun saldırgan  hard diskinizi başka bir bilgisayara takarak da erişim sağlayabilir. Disk yani veri güvenliği için kişisel bilgisayarın fiziksel güvenliğinin tüm teknik önlemlerden önce geldiği unutulmamalıdır. Sonrasında ise disk […]

TR | Linux Disk Güvenliği CanYouPwnMe

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

Linux sistemlerde disk güvenliğini sağlamak için alınması gereken önlemlerden ilki klavyenizi başkasına teslim etmemek olmalıdır. Bilgisayarınıza fiziksel erişim sağlanırsa ne kadar sağlam bir password’e sahip olursanız olun saldırgan  hard diskinizi başka bir bilgisayara takarak da erişim sağlayabilir. Disk yani veri güvenliği için kişisel bilgisayarın fiziksel güvenliğinin tüm teknik önlemlerden önce geldiği unutulmamalıdır.

crypto_image

Sonrasında ise disk şifreleme teknolojisi kullanılarak verilerinizi izinsiz erişimlerden koruyabilirsiniz. Disk encryption, network üzerinden gelen saldırılara karşı bir korunma yöntemi değildir. İnternete bağlı olduğumuz her an zararlı bir yazılım indirebilir veya zararlı bir siteye giriş yapabiliriz. Yani diski şifrelemek aslında verileri sadece fiziksel erişimlere karşı korur. Disk parolasını oluştururken yapay zeka yardımıyla tahmin edilemez, güçlü ve aynı zamanda akılda kalıcı olmasına dikkat edilmelidir. Tüm güvenlik önlemlerini aldınız ve diskinizi sağlam bir parola ile koruyorsunuz. Acil bir durum olduğunda ve bilgisayarınızın başından kalkmanız gerektiğinde belli bir süre sonra aktifleşen bir ekran kilidiniz yoksa aldığınız tüm önlemleri çöpe attınız demektir.

Disk encryption, çeşitli side channel attack’lara karşı zafiyetlidir. Örneğin bilgisayar kapatıldığında kısa süreliğine RAM içinde bulunan bilgilere RAM’inizi fiziksel olarak ele geçiren birisi başka bir bilgisayara takarak ulaşabilir. Bu işlemi RAM içindeki verinin kaybolma süresini uzatmak için RAM’i fiziksel olarak dondurarak gerçekleştirdiğinden saldırı cold boot attack olarak adlandırılır.

Linux sistemlerde disk encryption işlemi sistem kurulumunda veya sonrasında yapılabilir. Kurulum aşamasında disk encryption yapmak için usb stick veya dvd’den boot işlemini başlattıktan sonra kurulum talimatlarını takip ederek kolaylıkla yapılabilirsiniz.

k-key

k-encryption

Kurulum esnasında diski şifrelediğimizde işletim sistemi çalışmadan önce doğru encryption key girilerek diski aktif hale getirilir. Kurulum tamamlandıktan sonra disk unlocked olmadan önce bilgisayar çalışmayacaktır.

enter-key

Kurulum sırasında yapmayı unuttup sonradan fikrinizi değiştirdiyseniz de Linux tabanlı işletim sistemleriyle gelen Linux Unified Key Setup (LUKS)’tan faydalanabilirsiniz.

Linux makinelerde disk şifreleme işlemi için dm-crypt (device-mapper crypto target) özelliğini LUKS ile birlikte kullanacağız. Dm-crypt, aygıtların şifrelenmesini kernel crypto API kullanarak sağlar.

LUKS yardımıyla şifreleme yapmak için cryptsetup yardımcı programını indirelim.

Debian/Ubuntu kullanıcıları için;

apt-get install cryptsetup

Disk üzerinde herhangi bir işlem yapmadan önce sistemin yedeğini almayı unutmayalım. Yedek aldıktan sonra /dev/sdb diskini şifreleyelim.

sudo cryptsetup -y -v luksFormat /dev/sdb

encrypt-disk

luksOpen, doğru password girildiği takdirde şifrelenmiş disk bölümünü açar ve verilen yeni isim ile bir mapping oluşturur.

open-disk

ls -l /dev/mapper/cryptdisk

komutu ile oluşturduğunuz mappingi görebilirsiniz.

Dosya sistemini oluşturup diğer sistemlerde olduğu gibi diski mount ediyoruz.

mkfs.ext4 /dev/mapper/cryptdisk

ext4-disk

mount /dev/mapper/cryptdisk /data

mount-disk

Son olarak şifrelenmiş diski luksClose ile kapatabilirsiniz.

cryptsetup luksClose /dev/mapper/cryptdisk

close-disk

Linuc sistemlerde disk güvenliğini sağlamak için ekstra bir güvenlik önlemi için fstab biçimlendirme dosyasını kullanabiliriz. Fstab işletim sisteminizin değiştirilebilir bir dosya sistemi tablosudur. Sabit disk bölümlerini sisteme bağlama (mount) işleminin otomatik olarak gerçekleşmesini sağlayan ayar dosyasıdır. Mount işlemi, diskteki bir bölümün dosya sisteminde oluşturulan başka bir dizine bağlanma işlemidir. Böylece disk bu dizin üzerinden erişime açılmış olur.

etc_fstab_output

fstab dosyasında belirtilen bağlanma noktası diskin varsayılan bağlanma noktasıdır. Yani herhangi bir bağlanma noktası verilmeden mount komutu çalıştırılırsa dosya içinde tanımlı olan bağlantı noktası geçerli olur.

Bağlama işlemini alışılmışın dışında başka bir dizine yaptığımızda ilk denemede ele geçirilememiş olacaktır. Böylece ekstra bir güvenlik önlemi almış ve zaman kazanmış oluruz. Kullanıcıların home dizinini bir disk bölümüne bağlamak için fstab dosyasına /dev/sdc /home ext4 defaults,nosuid,noexec 1 2 satırını ekleyelim.

/dev/sdc : aygıt ismi

/home : bağlanma noktası

ext4 : bağlanacak dosyanın türü

defaults, nosuid, noexec : nosuid ile home dizinine suid erişimine izin verilmez. noexec ile binary dosyaların çalışması engellenir.

1 : dump alanı. 1 ve 0 değerlerini alır. Yedekleme yapılıp yapılmayacağını belirtir.

2 : yeniden başlatılan sistemlerde denetimdeleri belirler. 0 denetim yapmaz. 1 root için, 2 ise diğer dizinler içindir.

echo "/dev/sdc2 /home ext4 defaults,nosuid,noexec 1 2 " >> /etc/fstab 

daha sonra

mount - a

 

komutu ile diski bağlayabilirsiniz.


TR | Linux Disk Güvenliği CanYouPwnMe

]]>
https://canyoupwn.me/tr-linux-disk-guvenligi/feed/ 0
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