DevSecOps için Linux güvenliği
Sunucu ve imaj sıkılaştırma.
Seviye 201 · 21 ders · 18 pratik lab
Dersler
Açıkta kalan yüzey
- Dinleyen servisleri sınıflandırmak: Sunucuda hangi servislerin hangi adreste dinlediğini listeleyip her birini gerekli, kısıtlanabilir veya kapatılabilir diye sınıflandırmayı öğrenirsin.
- Yönetim arayüzünü yerel adrese kısıtlamak: Bir yönetim arayüzünü dış ağa açık bırakmak yerine yalnızca yerel (loopback) adreste dinleyecek şekilde kısıtlamayı öğrenirsin.
- Eski portları kapatmak: Telnet gibi artık kullanılmayan eski servislerin neden risk olduğunu anlar ve kendi sunucunda kapatmayı öğrenirsin.
- Web dizin listelemeyi ve açık yedekleri kapatmak: Web sunucusunda dizin listelemeyi kapatmayı ve yanlışlıkla açıkta kalan yedek dosyalarını bulup kaldırmayı öğrenirsin.
- Tanılama uçlarını kapatmak: Hata ayıklama ve durum sayfaları gibi tanılama uçlarının dışarıya bilgi sızdırabileceğini ve onları nasıl kapatacağını öğrenirsin.
- Üretimde hata ayıklama kipini kapatmak: Uygulamanın hata ayıklama kipinin hangi bilgileri açığa çıkardığını gösterip üretim ayarlarını güvenli değerlere çekebilirsin.
- Kısa görev: bir sunucunun dışarıya açık bütün servislerini gerekçesiyle raporla
Yetkiler ve kullanıcılar
- Gizli, ortam ve yükleme dosyalarının izinleri: Parola, ortam değişkeni ve yüklenen dosyaların izinlerini denetleyip yalnızca gerekenlerin okuyup yazabileceği hale getirmeyi öğrenirsin.
- sudo kurallarını daraltmak: Gereğinden geniş sudo yetkilerini tespit edip her kullanıcıya yalnızca işi için gereken komutları verecek şekilde daraltmayı öğrenirsin.
- Ayrı servis kullanıcıları: Her servisi kendi ayrı, sınırlı yetkili kullanıcısıyla çalıştırmanın bir servis ele geçirilse bile zararı nasıl küçülttüğünü anlarsın.
- root'un çalıştırdığı cron'ları sıkılaştırmak: cron ile root olarak çalışan zamanlanmış görevlerin dosya ve izinlerini denetleyip başkalarının değiştirebileceği zayıf noktaları kapatmayı öğrenirsin.
- Betiklerde güvenli PATH ve tam yol kullanmak: Betiğin başında PATH’i sabitleyip komutları tam yolla çağırarak sahte komutla yönlendirilmeyi önleyebilirsin.
- Yedek betiğinde yol sınırı: realpath ve sembolik bağ denetimi: realpath ile bir yedek betiğinin yalnızca izin verilen dizin içinde kalmasını sağlayıp sembolik bağlarla dışarı taşmayı engelleyebilirsin.
- Kısa görev: root olarak çalışan bir uygulamayı kendi kullanıcısına taşı
Gizli bilgiler ve servisler
- Koda gömülü parolaları bulmak ve ortam dosyasına taşımak: grep ile betik ve yapılandırmalardaki gömülü parolaları bulup izinleri kısıtlı bir ortam dosyasına taşıyabilirsin.
- Süreç ortamında sızan gizli değerler: /proc ve ps: /proc/PID/environ ve ps çıktısından gizli değerlerin kimlere görünür olduğunu ölçüp bu sızıntıyı kapatabilirsin.
- Servis ortam dosyası: EnvironmentFile ve izinleri: systemd EnvironmentFile ile gizli ayarları servise güvenle aktarıp dosyanın yalnızca root ve servis tarafından okunmasını sağlayabilirsin.
- Servisi kısıtlamak: ProtectSystem ve ReadWritePaths: ProtectSystem ve ReadWritePaths ile bir servisin yalnızca kendi günlük ve veri dizinine yazabilmesini sağlayabilirsin.
- Olay sonrası geçici istisnaları temizlemek: Olay anında açılan güvenlik duvarı, sudo ve izin istisnalarını sistematik biçimde listeleyip kapatarak sunucuyu güvenli hâle döndürebilirsin.
- Kısa görev: bir servisi systemd kısıtlarıyla yeniden başlat ve çalıştığını doğrula
Bitirme
- Bitirme görevi: bir uygulama sunucusunu sıkılaştır: Bitirme görevi: kurgusal bir şirketin uygulama sunucusunda açık servisleri, izinleri ve yetkileri gözden geçirip sunucuyu sıkılaştırırsın.
Pratik lablar
- Dinleyen servisleri gerekli ve gereksiz olarak sınıflandır: ss çıktısındaki her portu sürecine bağla ve uygulama sunucusu için gereksiz olanları işaretle.
- Yönetim arayüzünü yerel adrese kısıtla: Her arayüzde dinleyen yönetim panelini 127.0.0.1’e bağla ve SSH tüneliyle hâlâ erişilebildiğini göster.
- Dışarıdan erişilebilen her servisi gerekçesiyle raporla: Sunucuyu içeriden ve dışarıdan karşılaştırarak incele, eski portları kapat ve kalan her açık port için sahibini ve gerekçesini yaz.
- Web sunucusunda dizin listelemeyi kapat: Dizin içeriğini gösteren ayarı kapat ve isteğin artık 403 döndüğünü doğrula.
- Açıkta kalan yedek ve tanılama uçlarını kapat: Web kökündeki yedek arşivini ve sağlık ile ölçüm uçlarını bul, yedeği taşı ve uçları yalnızca iç ağa aç.
- Üretimde açık kalan hata ayıklama kipini iz bırakmadan kapat: Hata ayıklama kipinin hangi ortam değişkeninden geldiğini bul, kapat, etkileşimli konsol ucunun gittiğini ve uygulamanın sağlıklı kaldığını kanıtla.
- Gizli ve ortam dosyalarının izinlerini düzelt: Herkesin okuyabildiği ortam dosyasını ve anahtarı bul, sahipliğini ve izinlerini servis kullanıcısına daralt.
- Dağıtım hesabının geniş sudo kuralını daralt: Her komuta izin veren kuralı yalnızca servis yeniden başlatma komutuna indir ve başka komutun reddedildiğini göster.
- Root olarak çalışan uygulamayı kendi kullanıcısına taşı: Ayrı bir servis kullanıcısı oluştur, dosya sahipliğini ve port ihtiyacını çöz, servisi bu kullanıcıyla başlat ve yükleme dizininde betik çalışmadığını doğrula.
- Root’un çalıştırdığı cron işlerini ve betik izinlerini listele: Root’a ait zamanlanmış işleri çıkar ve çalıştırdıkları betiklerden başkasının yazabildiğini işaretle.
- Betikte güvenli PATH ve tam yol kullan: Göreli komut adlarıyla çalışan bakım betiğini tam yollara çevir, PATH’i sabitle ve sahte bir komutun artık çalışmadığını göster.
- Yedek betiğine yol sınırı ve sembolik bağ denetimi ekle: Betiğin sembolik bağ üzerinden izinli dizinin dışını arşivlediğini kendi labında göster, realpath denetimi ekle ve düzeltmeyi sına.
- Koda gömülü kimlik bilgisini bul: Uygulama dizininde parola ve anahtar kalıplarını ara ve gömülü veritabanı parolasının yerini yaz.
- Gömülü parolayı servis ortam dosyasına taşı: Parolayı EnvironmentFile ile okunan, yalnızca root’un okuyabildiği bir dosyaya al ve uygulamanın çalıştığını doğrula.
- Süreç ortamından sızan gizli bilgiyi kapat: Parolanın komut satırı argümanında ve /proc üzerinden başka kullanıcılara göründüğünü göster, geçişi dosyaya çevir ve sızıntının kapandığını kanıtla.
- Bir servisin güvenlik puanını systemd-analyze ile oku: systemd-analyze security çıktısından servisin puanını ve en ağır üç eksiğini yaz.
- Servisi ProtectSystem ve ReadWritePaths ile kısıtla: Birime kısıtlamaları ekle, yalnızca veri dizinine yazabildiğini ve servisin hâlâ çalıştığını doğrula.
- Olay sonrası bırakılan geçici istisnaları temizle ve sunucuyu sıkılaştır: Geçici açılan portu, geniş sudo kuralını ve gevşetilmiş birim ayarını bul, geri al ve uygulama sunucusunun son durumunu denetim listesiyle kanıtla.
Kurs hakkında
Sunucu ve imaj sıkılaştırma.
Ne öğreneceksin
- Açıkta kalan yüzey
- Yetkiler ve kullanıcılar
- Gizli bilgiler ve servisler
- Bitirme
Ön koşullar
Aynı yolun 101 düzeyindeki kurslarını bitirmiş olmak ya da o konuları biliyor olmak yeterlidir.
Lab ortamı
Dersler, tarayıcında açılan sana özel bir Kali Linux terminalinde ve ona bağlı özel bir lab ağında geçer. Kurulum gerekmez.
Sık sorulan sorular
- Bu kurs benim düzeyime uygun mu?
- Kurs 201 düzeyindedir; daha düşük düzeydeki kursların konularını bildiğin varsayılır.
- Kurulum gerekir mi?
- Hayır. Her ders tarayıcında açılan sana özel bir lab ortamında geçer.
- Dersler nasıl işleniyor?
- Her ders 8 ile 10 adımdan ve bir kısa sınavdan oluşur. İlk adımlarda yazman gereken komut gösterilir, sonraki adımlarda yardım azalır; iki denemede takılırsan çözüm açılır.
- Ücretsiz deneyebilir miyim?
- Evet. Her kursun ilk üç dersi ücretsizdir.