Yazılımın Karanlık Alışkanlıkları: God Object ve Spagetti Kodun Psikolojisi

Bir sınıfın kullanıcı doğrulamasından e-posta göndermeye, fatura hesaplamaktan veritabanı temizlemeye kadar her işi üstlendiğini düşünün. İlk bakışta bu sınıf oldukça “yetenekli” görünebilir. Gerçekte ise ekipteki herkesin çekindiği, en ufak değişiklikte üç farklı modülü bozan bir God Object doğmuştur. Kontrol akışı takip edilemeyen koşullar, iç içe döngüler ve rastgele bağımlılıklar da tabloya eklenince menüde spagetti kod vardır.

Devamı...

Tersine Proxy Sızıntıları: Nginx Yanlış Yapılandırmalarının Bedeli

Tersine proxy, internetten gelen isteklerle uygulama sunucuları arasında duran güvenlik görevlisine benzer. Ancak bu görevliye yanlış talimat verirseniz yalnızca ziyaretçileri yönlendirmekle kalmaz; kaynak kodu, yedek dosyalarını veya yapılandırma sırlarını da servis edebilir. Nginx yapılandırmalarındaki tek bir regex karakteri ya da hatalı alias kullanımı, görünmez olması gereken dosyaları halka açık hâle getirebilir.

Devamı...

Şifre Kırma Arenasında GPU Gücü ve Hashcat Optimizasyonları

sifre-kirma-arenasinda-73

Modern ekran kartları yalnızca oyunlardaki ejderhaları gerçekçi göstermek için çalışmıyor; binlerce paralel çekirdeği sayesinde parola denetimlerinde de ciddi hesaplama gücü sunuyor. Hashcat, bu gücü kullanarak hash karşılaştırmalarını büyük ölçekte gerçekleştiriyor. Bu yazıdaki örnekler yalnızca size ait sistemlerde veya açıkça izin verilmiş güvenlik testlerinde kullanılmalıdır.

Devamı...

Sıfır Güven Mimarisi: Ağdaki Herkese Yabancı Muamelesi Yapmak

sifir-guven-mimarisi-77

Şirket ağının içindeyseniz güvenilir, dışındaysanız şüphelisiniz… Geleneksel güvenlik yaklaşımı uzun süre bu kadar basit çalıştı. Ancak bulut servisleri, uzaktan çalışma, mobil cihazlar ve ele geçirilmiş kullanıcı hesapları kale duvarlarını anlamsızlaştırdı. Sıfır Güven, herkesi kötü ilan etmek yerine hiçbir isteğe konumundan dolayı ayrıcalık tanımayan modern bir güvenlik felsefesidir.

Devamı...

Multi-Tenant Mimarilerde Veritabanı İzolasyonu: Komşunun Verisi Komşuda Kalsın

Bir SaaS uygulamasında yüzlerce müşteri aynı altyapıyı paylaşabilir; fakat hiçbir müşteri bu paylaşımı verilerinde hissetmemelidir. Multi-tenant mimarinin temel sözü şudur: “Aynı apartmanda yaşayabiliriz, ama anahtarlarımız farklıdır.” Bu sözü tutmanın yolu, doğru veritabanı izolasyon stratejisini seçmek ve izolasyonu yalnızca uygulama koduna bırakmamaktır.

Devamı...

Mikroservislerde Strangler Fig Pattern: Monoliti Adım Adım Dönüştürmek

mikroservislerde-strangler-fig-38

Yıllardır çalışan bir monoliti tek gecede mikroservislere dönüştürmek, uçuş hâlindeki bir uçağın motorunu değiştirmeye benzer: Teorik olarak mümkündür, fakat kimse gönüllü olarak içinde oturmak istemez. Strangler Fig Pattern, büyük ve riskli bir yeniden yazım yerine eski sistemin işlevlerini küçük parçalar hâlinde yeni servislere taşıyarak kontrollü bir dönüşüm sağlar.

Devamı...

Kriptografik Rastgelelik: /dev/urandom Neden Hayat Kurtarır?

Bir parola sıfırlama bağlantısı, oturum belirteci veya şifreleme anahtarı üretirken “rastgele görünüyor” demek yeterli değildir. Çıktının, saldırganın bildiği tüm bilgiler ışığında bile tahmin edilememesi gerekir. İşte sıradan rastgele sayı üreteçleriyle kriptografik güvenli üreteçler arasındaki hayat kurtaran fark burada başlar.

Devamı...

Kapı Kartından Sahte Klavyeye: RFID Kopyalama ve BadUSB Mekaniği

Bir binanın kapısı kartla açılıyor, bilgisayarlar parola ile korunuyor ve ağ güvenlik duvarının arkasında duruyor olabilir. Ancak saldırgan birkaç saniyeliğine masaya ya da karta erişebiliyorsa bütün bu önlemler beklenmedik biçimde aşılabilir. RFID kopyalama ve klavye gibi davranan BadUSB cihazları, siber güvenliğin yalnızca ağ paketlerinden ibaret olmadığını gösteren iki çarpıcı örnektir.

kapi-kartindan-sahte-88

Devamı...

JWT Zafiyetleri: Algoritma Karmaşasından İmza Sahteciliğine

JWT, kullanıcı oturumunu sunucuda saklamadan kimlik ve yetki bilgilerini taşıyabilen popüler bir standarttır. Ancak “durumsuz” olması, “kontrolsüz” olabileceği anlamına gelmez. Algoritma seçiminin istemciye bırakılması, imzasız token kabul edilmesi veya tahmin edilebilir gizli anahtar kullanılması; saldırganın başka bir kullanıcıya, hatta yöneticiye dönüşmesine yol açabilir.

jwt-zafiyetleri-algoritma-49

Devamı...

IoT Cihazlarında Botnet Saldırıları: Mirai Ağının Kodu Bize Ne Öğretti?

iot-cihazlarinda-botnet-92

Bir güvenlik kamerası ne kadar tehlikeli olabilir? Görüntü kaydetmek için tasarlanmış yüz binlerce cihaz, Mirai botnet’i sayesinde aynı anda trafik üretmeye başladığında cevap şaşırtıcıydı: İnternetin önemli servislerini sarsacak kadar. Mirai vakası, karmaşık açıklar yerine varsayılan parolaların, zayıf cihaz yönetiminin ve savunmasız bir ekosistemin nasıl devasa bir saldırı altyapısına dönüşebileceğini gösterdi.

Devamı...

Honeypot Mimarileri: Saldırganları Kandıran Sanal Tuzaklar

Bir saldırgan ağınıza girdiğinde gerçek sunucularınızla ilgilenmesini istemezsiniz. Bunun yerine karşısına eski sürüm izlenimi veren servisler, sahte kullanıcı hesapları ve dokunulmayı bekleyen sözde gizli dosyalar çıkarabilirsiniz. Honeypot, gerçek hedefleri taklit eden fakat temel amacı saldırıyı gözlemlemek olan kontrollü bir tuzaktır. Kısacası dijital peynir ücretsizdir; kapanın telemetrisi ise güvenlik ekibine kalır.

honeypot-mimarileri-saldirganlari-91

Devamı...

GraphQL Federation ile Mikroservisleri Tek Uç Noktada Birleştirmek

Mikroservis mimarisinde kullanıcılar, ürünler ve siparişler farklı ekiplerin yönettiği servislerde yaşayabilir. Ancak mobil uygulamanın bu servislerin adreslerini, sürümlerini ve aralarındaki ilişkileri bilmesi gerekmemelidir. GraphQL Federation, bağımsız GraphQL şemalarını bir supergraph altında birleştirerek istemciye tek ve tutarlı bir uç nokta sunar. Böylece arka tarafta dağıtık, ön tarafta ise şaşırtıcı derecede bütünleşik bir veri modeli elde edilir.

graphql-federation-ile-53

Devamı...

Event-Driven Architecture: Servisler Dans mı Etsin, Şefi mi İzlesin?

event-driven-architecture-44

Bir e-ticaret siparişi düşünün: ödeme alınacak, stok düşülecek, kargo hazırlanacak ve müşteriye bildirim gönderilecek. Bu servisler aynı sahneyi paylaşır; fakat hareketlerini kim belirlemelidir? Event-Driven Architecture dünyasında cevap genellikle iki yaklaşım arasında salınır: Her servisin olayları dinleyerek bağımsız hareket ettiği koreografi veya süreci merkezi bir bileşenin yönettiği orkestrasyon.

Devamı...

Diffie-Hellman Anahtar Değişimi: Açık Kanalda Ortak Sır Üretmek

İnternet trafiğinin herkes tarafından dinlenebildiği bir ortamda iki kişinin aynı gizli anahtarı oluşturması ilk bakışta imkânsız görünür. Diffie-Hellman anahtar değişimi, parolayı veya anahtarı doğrudan göndermek yerine iki tarafın matematiksel işlemlerle aynı sırra ulaşmasını sağlar. Böylece pasif bir dinleyici bütün mesajları görse bile ortak anahtarı pratik sürede hesaplayamaz.

Devamı...

Dependency Reversion vs Dependency Injection: Prensipten Uygulamaya

dependency-reversion-vs-32

Bir yazılım geliştiricinin araç çantasında birbirine benzeyen ama aynı işi yapmayan iki önemli kavram bulunur: Dependency Inversion Principle (DIP) ve Dependency Injection (DI). Başlıkta “Dependency Reversion” olarak anılsa da prensibin literatürdeki adı Dependency Inversion, yani Bağımlılıkların Tersine Çevrilmesi Prensibi’dir. DIP mimari yönü belirleyen bir pusula, DI ise o yönde ilerlemeyi kolaylaştıran pratik bir araçtır.

Devamı...

DDD’de Ubiquitous Language: Kod ile İş Dünyasının Ortak Sözlüğü

dddde-ubiquitous-language-89

Bir yazılımcı “müşteri kaydını güncelledim” derken satış ekibi bunun yeni bir müşteri oluşturmak anlamına geldiğini düşünüyorsa, ortada teknik değil dilsel bir hata vardır. Domain-Driven Design’ın Ubiquitous Language, yani Her Yerde Geçerli Dil yaklaşımı; toplantılarda, belgelerde, testlerde ve kaynak kodda aynı iş terimlerinin aynı anlamla kullanılmasını amaçlar. Böylece kod yalnızca bilgisayarın çalıştırdığı talimatlar olmaktan çıkar, iş sürecinin okunabilir bir modeline dönüşür.

Devamı...

CQRS ve Event Sourcing’de Snapshot Mantığı: Uzun Geçmişi Hızlı Okumak

cqrs-ve-event-51

Event Sourcing kullanan bir sistemde güncel durum doğrudan saklanmaz; geçmişte gerçekleşmiş olaylar sırayla uygulanarak yeniden oluşturulur. Bir siparişin yüzlerce, banka hesabının ise milyonlarca olayı varsa bu işlem zamanla ağırlaşabilir. Snapshot, olay günlüğünü çöpe atmadan belirli bir andaki durumu kaydeder ve sisteme adeta “Buradan devam et!” der.

Devamı...

Anti-Reversing Teknikleri: Kod Analizine Karşı Kedi-Fare Oyunu

Bir programın debugger veya sanal makine içinde çalıştığını anlamaya uğraşması, dijital dünyadaki “Beni gerçekten kim izliyor?” sorusudur. Bu yöntemler lisans korumasından oyun güvenliğine kadar meşru amaçlarla kullanılabilse de kötü amaçlı yazılımlar tarafından analizi geciktirmek için de tercih edilir. Bu yazıda teknikleri uygulanabilir kaçış tariflerine dönüştürmeden, çalışma mantıkları ve savunmacıların bunları nasıl yorumladığı üzerinde duracağız.

Devamı...

Ağ İçi Sızma: Tek Bir Cihazdan Tüm Ağa Yayılan Tehdit

Bir saldırganın ağa girmesi çoğu zaman filmin başlangıcıdır, finali değil. Ele geçirilen dizüstü bilgisayar yalnızca bir sıçrama tahtası olabilir: saldırgan daha değerli hesapları, dosya sunucularını, yönetim sistemlerini ve etki alanı denetleyicilerini arar. Bu kontrollü ilerleyişe ağ içi sızma, yani lateral movement denir. Savunma açısından amaç, saldırganın yöntemlerini operasyonel olarak taklit etmek değil; bıraktığı izleri anlayıp zinciri mümkün olduğunca erken kırmaktır.

Devamı...

Açık Kaynak İstihbaratı (OSINT): Dijital İzlerden Etik Profil Çıkarmak

İnternette attığımız her adım; kullanıcı adları, alan adı kayıtları, fotoğraf metadataları ve herkese açık belgeler biçiminde küçük kırıntılar bırakır. Açık Kaynak İstihbaratı, yani OSINT, bu dağınık kırıntıları yasal ve etik sınırlar içinde toplayarak doğrulanabilir bilgiye dönüştürme disiplinidir. Amaç birkaç arama sonucunu yan yana koymak değil, dijital izler arasındaki ilişkileri sistematik biçimde analiz etmektir.

Devamı...