Kiralık bir diski şifrelemek size gerçekte ne kazandırır
Bir sunucunun iki hâli vardır ve disk şifrelemesi bunlardan yalnızca birinde söz sahibidir. Kapalıyken, hacim şifreli metindir: depolama, anahtar olmadan gürültüden ayırt edilemeyen baytlar tutar. Çalışırken, hacim bağlıdır (mount edilmiştir), yani ana anahtar türetilmiş, kernel belleğine yüklenmiş ve makine açık kaldığı sürece orada bırakılmıştır. İşletim sisteminin okuyabildiği her dosyayı okuyabilmesinin nedeni, o anahtarın bellekte hazır bulunmasıdır. Şifreleme çalışmayı bırakmadı — sadece tam olarak kendisinden istenen şeyi yapıyor.
Bu, pazarlamanın ima ettiğinden daha dar bir garantidir ve yine de sahip olmaya değer, çünkü kapsadığı olaylar gerçekten yaşananlardır. Bir sürücü kullanımdan kaldırılır ve yeniden satılır. Arızalı bir NVMe, üzerinde verileriniz varken RMA kapsamında satıcıya geri gönderilir. Bir düğüm kapatılır ve diskleri imajlanır. Bir yedek arşivi, kimsenin şifrelemediği bir ortamda binadan çıkar. Bir rafa fiziksel erişimi olan biri yanlış şeyi eve götürür. Bunlar gösterişsizdir ve gerçek dünyadaki maruziyetlerin ezici çoğunluğunu oluşturur — herkesin hayal ettiği, çalışan bir makineye yapılan baskından çok daha yaygındırlar.
| Senaryo | Makine durumu | LUKS yardımcı olur mu? | Ne açığa çıkar |
|---|---|---|---|
| Sürücü kullanımdan kaldırıldı, yeniden satıldı veya RMA'landı | Kapalı | Evet, tamamen | Şifreli metin ve LUKS başlığı |
| Düğüm kapatıldı, diskler imajlandı | Kapalı | Evet | Şifreli metin, bölüm düzeni, şifresiz /boot |
| Yedek arşivi saha dışına kopyalandı | n/a | Yalnızca arşivin kendisi şifreliyse | Arşivin içerdiği her şey, açık metin olarak |
| Çalışan bir sunucunun canlı görüntüsünün alınması | Çalışıyor | Pratikte hayır | Her şey — anahtar RAM'de |
| Çalışan sistemin ele geçirilmesi | Çalışıyor | Hayır | Bağlı hacmin açığa çıkardığı her şey |
Hipervizör tehdit modelinizin içindedir ve şifreleme onu ortadan kaldırmaz
VPS'te kerneliniz bir guest'tir (misafirdir). Hipervizörü kim işletiyorsa, o guest'in belleğini tıpkı sizin bir dosyanın içeriğini elinizde tuttuğunuz gibi elinde tutar ve aradaki adımda hiçbir kriptografi yoktur. virsh dump, rutin bir işlem olarak çalışan bir domain'in RAM'ini bir dosyaya yazar; canlı taşıma (live migration) ise tasarım gereği aynı belleği ağ üzerinden kopyalar, çünkü taşıma işleminin özü budur. Guest belleğinde yaşayan bir LUKS ana anahtarı, bunların tamamının içindedir.
Dolayısıyla dürüst cümle şudur: VPS'te tam disk şifreleme, verilerinizi hipervizörü işleten taraf dışında herkese karşı korur — ve o tarafa karşı da korur, ama yalnızca makine kapalıyken. Guest diskinizi şifrelemenin, çalışan bir sunucuda verilerinizi kendilerine okunamaz hale getirdiğini iddia eden herhangi bir barındırma sağlayıcısı, var olmayan bir makineyi tarif ediyordur. Bunu, size daha rahat bir şey çıkarsatmaktansa açıkça yazmayı tercih ederiz.
Sağlayıcı gerçekten tehdit modelinizin içindeyse, cevap daha güçlü bir şifre değildir. Cevap, hipervizörü ortadan kaldırmaktır: bir adanmış sunucu kernelinizi doğrudan metal üzerinde çalıştırır, dolayısıyla belleğini okumak, makineyi fiziksel olarak elinde bulundurmayı ve RAM'e karşı bir DMA veya cold-boot tarzı saldırı düzenlemeyi gerektirir — yavaş, gürültülü ve rutin bir talebin vermeyeceği düzeyde bir erişim gerektiren bir şey. VPS'e karşı adanmış sunucu kılavuzu, bu geçişin başka gerekçelerle de nasıl kendini amorti ettiğini ele alır. AMD SEV-SNP ve Intel TDX gibi confidential-computing uzantıları tam olarak bu açığı hedefler, ama bugün kiralık VPS'lerde yaygın bir seçenek değildir ve güveni ortadan kaldırmak yerine CPU üreticisine taşırlar.
Bunu çalıştırmanın üç yolu ve her birinin size maliyeti
Pratikte üç biçim vardır ve bunlar güvenliği, yeniden başlatmaların ne kadar acı verdiğiyle takas eder. Konsoldan açılan şifreli bir root en güçlü ve en can sıkıcı olanıdır: bir insan olmadan hiçbir şey yeniden başlatmayı atlatamaz. initramfs içinde bir SSH sunucusu bulunan şifreli bir root, aynı güvenliği uzaktan kilit açmayla sunar ve çoğu kişinin kurması gereken de budur. Şifresiz bir root üzerindeki şifreli bir veri hacmi ise kolay seçenektir ve sessizce hayal kırıklığı yaratan seçenektir.
Hayal kırıklığı yaratır çünkü şifresiz bir root, siz istemeseniz de sırlarınızı toplar. systemd journal oraya yazar. Shell geçmişi, paket önbelleği, core dump'lar, /tmp, Docker'ın varsayılan veri kökü ve — neredeyse herkesi yakalayan şey — swap de öyle; bu, makine baskı altındayken bir sürecin belleğinin gittiği yerdir. /var/lib/mysql'i şifrelerken yanı başında swap'ı şifresiz bırakmak kısmi bir savunma değildir, ortasında delik olan tam bir savunmadır.
| Kurulum | Kilit açma | Gözetimsiz bir yeniden başlatmayı atlatır mı | Dürüst değerlendirme |
|---|---|---|---|
| Şifreli root, konsoldan kilit açma | KVM-over-VNC veya IPMI | Hayır — bir insan kilidi açana kadar kapalı kalır | En güçlüsü; nadiren yeniden başlattığınız bir makine için uygundur |
| Şifreli root, initramfs içinde dropbear | Kilit açma portuna SSH | Hayır — ama kilidi her yerden açabilirsiniz | Makul varsayılan |
| Şifreli veri hacmi, şifresiz root | Önyükleme sonrası betik veya elle | Evet | swap, log'lar ve geçici dosyalar ele alınmadıkça zayıf |
| Şifreli root, şifresiz /boot üzerinde anahtar dosyası | Otomatik | Evet | Yalnızca yeniden satılan bir sürücüye karşı korur, başka hiçbir şeye karşı korumaz |
Şifreli bir root'un adım adım kurulumu
1. Bir şablon değil, bir kurulum aracı önyükleyin. Önceden hazırlanmış bir imaj size şifreli bir root veremez, çünkü disk siz müşteri olarak var olmadan önce yazılmıştır. Her BitVPS planı rebuild-from-ISO'yu, özel bir ISO yüklemeyi ve netboot'u destekler ve her plan bir KVM-over-VNC acil durum konsolu içerir — asıl önemli olan da budur, çünkü size sorular soracak bir kurulum aracını izlemeniz gerekir. Adanmış sunucular aynı yeteneği, ISO mount ve BIOS erişimi olan VPN korumalı bir IPMI uç noktası üzerinden sunar.
2. Küçük bir şifresiz önyükleme alanıyla bölümleyin. /boot veya EFI sistem bölümü için küçük bir bölüm, geri kalan her şey ise tek bir LUKS container'ına. Bootloader ve initramfs, herhangi bir anahtar var olmadan önce okunabilir olmak zorundadır, dolayısıyla bu bölüm, diski imajlayan herkes için okunur kalır. Bunu görmezden gelmek yerine, bu gerçeğin etrafında tasarım yapın.
3. Container'ı oluşturun. cryptsetup luksFormat --type luks2 --pbkdf argon2id /dev/vda2. argon2id ile LUKS2 kullanmak tam olarak bu işin özüdür: argon2id bellek-yoğun (memory-hard) bir algoritmadır, RFC 9106'da tanımlanmıştır ve çevrimdışı bir tahmin saldırısını yazılımda yalnızca yavaşlatmak yerine donanımda pahalı hale getirir — bu, bir GPU çiftliğinin parolanızı didik didik etmesiyle bir GPU çiftliğinin buna yönelmeye değmemesi arasındaki farktır. Bellek maliyetini, makinenin erken önyükleme sırasında ayırabileceği düzeyde tutun; 4 GB'lık bir sunucuda, 64 GB'lık dizüstü bilgisayarınızda ayarlanmış bir maliyet, kilidi açmayı basitçe başaramaz.
4. Açın ve kurun. cryptsetup open /dev/vda2 cryptroot, ardından doğrudan /dev/mapper/cryptroot üzerinde LVM veya bir dosya sistemi, ardından /boot şifresiz bölümde olacak şekilde dağıtımın kurulum aracını buna karşı çalıştırın. Debian, Ubuntu, Alpine, Arch, Rocky, Fedora ve FreeBSD bunların hepsini destekler; Arch wiki'nin dm-crypt sayfaları, hangi dağıtımı çalıştırıyor olursanız olun en eksiksiz kaynaktır.
5. initramfs'e bir SSH sunucusu koyun. dropbear-initramfs'ı kurun, ortak anahtarınızı /etc/dropbear/initramfs/authorized_keys dosyasına bırakın ve arayüzün parola istemi öncesinde ayağa kalkması için kernel komut satırına bir ip= parametresi ekleyin. Bu parametreyi atlarsanız, kimsenin ulaşamayacağı bir istemde önyükleme yapan bir makine inşa etmiş olursunuz.
6. Yeniden oluşturun ve yeniden başlatın. update-initramfs -u, sunucuyu, anahtarınızı ve ağ ayarlarını bootloader'ın yüklediği imajın içine gömer. Ardından konsolu açık tutarak yeniden başlatın, çünkü yanlış giden genelde ilk denemedir.
7. Kilidi açın ve devri onaylayın. Kilit açma portuna SSH yapın ve cryptroot-unlock komutunu çalıştırın. initramfs, kurulu sistemden farklı bir host key sunar, bu yüzden istemciniz ilk bağlantıda yüksek sesle uyaracaktır — bu doğru bir davranıştır ve bir engel değil, faydalı bir sinyaldir: host-key denetimini kapatmak yerine o parmak izini kendi known_hosts girdisi olarak sabitleyin. Oturumun düşmesi, gerçek sistemin devraldığını anladığınız andır.
Uzaktan kilit açma ve kimsenin önce sormadığı 04:00 sorusu
initramfs SSH sunucusunu kendi portunda çalıştırın — 2222 yaygın olarak kullanılır — böylece iki host key aynı known_hosts girdisinde asla çakışmaz. DHCP yerine statik bir ip= tercih edin: initramfs minimal bir ortamdır ve başarısız olan bir DHCP gidiş-dönüşü sizi açık, erişilemez ve bir istemde bekleyen bir makineyle baş başa bırakır. IPv6'ya güveniyorsanız, initramfs'inizin bunu gerçekten yapılandırdığını kontrol edin; birçok dağıtım bu aşamada hâlâ yalnızca v4'ü ayağa kaldırır.
SSH ile kilit açma çalışsa bile konsolu yedek olarak tutun. Er ya da geç karşılaşacağınız arıza kriptografik bir arıza değildir; anahtarınız olmadan initramfs'i yeniden oluşturan bir kernel güncellemesi ya da altınızda değişen bir ağ parametresidir — ve o anda içeri girmenin tek yolu planla birlikte gelen KVM-over-VNC konsoludur. İkisine birden sahip olmak fazlalık değildir, bir rahatsızlıkla bir yeniden kurulum arasındaki farktır.
Ardından, bunların hiçbirini kurmadan önce çözülmesi gereken operasyonel soru gelir: şifreli bir root, gözetimsiz bir yeniden başlatmanın, bir insan kilidini açana kadar servisinizi kapalı bırakması demektir. Düğüm bakımı, bir kernel panic'i, bir güç kesintisi — makine uygulamanıza değil, bir isteme geri döner. Bu, iş yükünüz için kabul edilemezse, bunu şifresiz önyükleme bölümündeki bir anahtar dosyasıyla üstünü örterek çözmeyin. Bu, anahtarı kapıya bantlanmış bir kilittir ve yalnızca yeniden satılan bir sürücüye karşı korur, başka hiçbir şeye karşı korumaz. İsterseniz bunu bilinçli olarak seçin, ama kendi runbook'unuza bunu seçtiğinizi yazın.
Şifreli hacmin etrafından sızan her şey
İşlerin ters gittiği yer nadiren hacmin kendisidir. Ters giden şey, hiçbir zaman içeri girmemiş olan materyaldir.
| Sızıntı | Neden olur | Çözüm |
|---|---|---|
| Swap | Süreç belleği — anahtarlar dahil — baskı altında diske taşar | Container içinde swap, ya da rastgele anahtarlı bir swap aygıtı, ya da hiç swap yok |
| Hazırda bekletme imajı | Tasarım gereği diske yazılan tam bir RAM dökümü | Bir sunucuda devre dışı bırakın; orada hiçbir işi yok |
| Şifresiz /boot ve initramfs | Herhangi bir anahtar var olmadan önce okunabilir olmak zorunda | Bunu kabul edin ve herhangi bir değişikliği bir ihlal olarak ele alın — doğrulayın ya da mümkün olan yerde Secure Boot kullanın |
| Mount'tan önce yazılan journal | Erken önyükleme logları şifresiz bölüme düşer | Hacim açılmadan önce journal'ınızın gerçekte nerede tutulduğunu kontrol edin |
| Docker veri kökü | Varsayılan olarak /var/lib/docker'dadır, sonradan eklenmiş bir veri hacminin dışında | Onu içeri taşıyın, ya da bunun yerine root'u şifreleyin |
| Sunucu dışı izleme ve loglar | Ajanlar dosya içeriklerini açık metin olarak üçüncü bir tarafa gönderir | Hacme güvenmeden önce ajanın ne gönderdiğini denetleyin |
Sık sık abartılan bir özellik konusunda net olmak gerekir: bir LUKS başlığı kendini ele verir. Diski imajlayan herkes, şifreli bir container'ın var olduğunu, hangi şifreyi kullandığını, KDF parametrelerini ve kaç anahtar yuvasının dolu olduğunu görür. LUKS size gizlilik sağlar, makul inkâr edilebilirlik değil; kimsenin container'ı fark etmeyeceğine dayanan bir plan kurmak, kum üzerine inşa etmektir.
Parolalar, anahtar dosyaları ve ayrık başlıklar
Parola, sistemin tamamıdır. Argon2id her tahmini pahalı hale getirir, ama pahalı olan bir şey küçük bir anahtar uzayıyla çarpılınca yine de ucuzdur: bir diceware listesinden beş ya da altı kelime, içinde harf değişimleri olan on bir karakterlik bir parolayı, hiç yakın olmayan bir farkla geride bırakır. Maliyeti, üzerinde yazdığınız makineye göre değil, hacmi gerçekten açacak olan makineye göre --iter-time ile ayarlayın ve KYC'li bir hesaba herhangi bir şekilde yaklaşmış bir parolayı asla yeniden kullanmayın.
Bir anahtar dosyası yazmayı ortadan kaldırır ve sorunu taşır: cryptsetup luksAddKey boş bir yuvaya bir tane ekler ve sahip olmaya değer tek versiyon, sunucuda hiç durmayan versiyondur — kendi makinenizde ya da bir donanım token'ında tutulan ve SSH oturumu üzerinden kilit açmaya beslenen versiyon. Ayrık bir başlık (--header) daha da ileri gider: veri aygıtı, metadata başka bir yerde yaşadığı için rastgele baytlardan ayırt edilemez hale gelir. Madalyonun öteki yüzü affetmezdir. Başlığı kaybederseniz hacim kalıcı olarak, hiçbir çare olmaksızın gider — bu yüzden cryptsetup luksHeaderBackup'ı ciddiye alın ve o yedeği bizzat kendisi şifreli bir yerde saklayın. Üst akış cryptsetup FAQ'ı ve kernel'in dm-crypt belgeleri, bir düzene karar vermeden önce okumaya değer iki kaynaktır.
Ve istisnası olmayan bir kural: parola asla bir destek talebine yazılmaz. Ne bizimkine, ne kimseninkine. Yaptığımız hiçbir şey buna ihtiyaç duymaz, sizin adınıza yapabileceğimiz hiçbir işlem buna gerek duymaz ve bir destek talebi bir veritabanındaki yazılı bir kayıttır. Bir barındırma sağlayıcısı sizden bunu isterse, konuşma orada biter.
İmajı alınmış bir diskin gerçekte neyi ele verdiği
Kapalı durumu somut olarak ele alalım, çünkü burada belirsizlik kimseye yardımcı olmaz. Diskinizin bir imajına sahip bir soruşturmacının elinde şunlar vardır: şifreli metin, şifresi ve KDF parametreleri ve yuva sayısıyla birlikte LUKS başlığı, bölüm tablosu, her şeyin boyutları ve şifresiz önyükleme bölümünün tamamı — kerneliniz, initramfs'iniz ve içindeki her dosyanın değişiklik zaman damgaları. Bu son madde, insanların beklediğinden daha bilgilendiricidir. Paket kurulum zamanları bir zaman çizelgesi çizer ve bir dropbear anahtarı içeren bir initramfs, makinenin nasıl yönetildiği hakkında bir şeyler söyler.
Sahip olmadıkları şey içeriktir. argon2id ve gerçek bir parolaya sahip modern bir LUKS2 container'ına karşı, çevrimdışı saldırı daha uzun beklemek meselesi değildir — masada bile değildir. Sunulan değerin tamamı budur ve iyi bir değerdir.
Çalışan durum ise tam tersidir ve kısadır: her şey. Şifreleme başarısız olduğu için değil, anahtar bellekte hazır bulunduğu için — ki bağlı bir dosya sisteminin çalışabilmesinin koşulu zaten budur.
Snapshot'lar ikisinin arasında durur ve insanları şaşırtır. 7 günlük saklama süresine sahip saatlik snapshot'larımız blok düzeyindedir, dolayısıyla şifreli bir hacim şifreli metin olarak snapshot'lanır — bu iyidir, ama sonucu da ısırır: o snapshot da parola olmadan okuyabileceğiniz bir kopya değildir. Anahtarı kaybederseniz snapshot'lar da orijinal kadar kurtarılamaz hale gelir. Parolayı da içeren bir geri yükleme yolu planlayın, yoksa yedi günlük çok güvenilir bir gürültü inşa etmiş olursunuz. Hacmin dışında sizinle ilgili tuttuğumuz şey gizlilik politikasında yazılıdır ve bir vaat yerine kalıcı bir kanıt olarak haftalık PGP imzalı bir warrant canary yayımlarız.
Sonucu belirleyen kısımlar kriptografik değildir
Kimse AES-256-XTS'in yetersiz kalması yüzünden veri kaybetmedi. İnsanlar; parola, pasaportlarının kayıtlı olduğu bir borsa hesabından yeniden kullanıldığı için, yeniden başlatmaları sessiz tutmak amacıyla anahtar dosyası şifresiz önyükleme bölümünde bırakıldığı için, saha dışı yedek düz bir tarball olduğu için, parola dizüstü bilgisayarlarının shell geçmişinde bulunduğu için ya da bir izleme ajanı baştan beri dosya içeriklerini bir SaaS'a gönderdiği için veri kaybeder.
Ve sessiz olanı: hiç kapanmayan bir sunucu, tüm hayatını bunların hiçbirinin işe yaramadığı bir durumda geçirir. 400 günlük çalışma süresine sahip bir sunucu, 400 gündür şifresi çözülmüş durumdadır. Veri gerçekten soğuksa — bir arşiv, bir anahtar yedeği, yılda iki kez baktığınız kayıtlar — ihtiyacınız olduğunda açtığınız ve işiniz bittiğinde cryptsetup close ile kapattığınız bir container içinde tutun. On saniyelik bir yazma işlemi, kalıcı bir maruziyeti anlık bir maruziyete dönüştürür ve bu dönüşüm, luksFormat'a geçirebileceğiniz herhangi bir parametreden daha değerlidir.
Bu arada yargı yetkisini de aynı mantıkla eşleştirin. Şifreleme neyin okunabilir olduğuna karar verir; makinenin nerede oturduğu kimin soru sorabileceğine, ve talebin hangi ittifaklardan geçtiğine karar verir. İkisi birbirinin yerini tutmaz ve bunu doğru yapan kişiler ikisini tek bir karar olarak ele alır.
Neler sağlıyoruz ve neleri sağlayamıyoruz
$8.50'lık Starter'dan yukarı doğru her plan, şifreli bir root'un gerçekten gerektirdiği şeyi sunar: tam root'lu KVM sanallaştırması, özel ISO'ları ve netboot'u önyükleyebilme, panelden rebuild-from-ISO, kernel modülü yükleme ve initramfs'in geri gelmediği an için bir KVM-over-VNC acil durum konsolu. Adanmış kademeler; konsol, power cycle, ISO mount ve BIOS erişimine sahip VPN korumalı bir IPMI uç noktası ekler. Şifreleme konusunda size sattığımız bir ürün yoktur — bu sizin inşa ettiğiniz bir şeydir ve bizim işimiz önüne geçmemektir.
Neyi yapamadığımızı söylemek daha faydalıdır. Çalışan bir VPS'te hipervizör guest belleğini okuyabilir; bu bir mimaridir, bir politika ayarı değildir ve guest içine kurduğunuz hiçbir şifreleme bunu değiştirmez. Buna karşı sunduğumuz şey matematik değil, tutum ve kanıttır: netflow yok, PCAP yok, NIC mirroring yok, panel oturum IP'leri 24 saatte silinir, kayıt sırasında KYC yok — dolayısıyla hesap bir kaldıraç değildir, yalnızca kripto ile ödeme — dolayısıyla faturalama izi de bir kaldıraç değildir, ve kendinizin kontrol edebileceği haftalık PGP imzalı bir canary. Hipervizörü tablodan yalnızca adanmış donanım kaldırır ve RAM'i yalnızca kapatmak kaldırır.
Bu, belirli tehdit modellerinde kendi VPS'imize karşı bir argüman gibi okunuyorsa, öyledir. Size yanlış şeyi bir kez satmaktansa, doğru şeyi iki kez satmayı tercih ederiz. Bir ISO ile bir sunucu deploy edin ve kurulumu bir Starter üzerinde bir ay boyunca deneyin; cevabın metal olduğu ortaya çıkarsa, adanmış kademeler $39.50'dan başlar ve provizyon için 41 saniye yerine iki ila dört saat sürer.