forked from oyd/guvenlik
Merge pull request 'master' (#65) from AA/guvenlik:master into master
Reviewed-on: oyd/guvenlik#65 Reviewed-by: murat emir cabaroğlu <mrtmrcbr@gizli.eposta>master
commit
d835515cd6
@ -0,0 +1,42 @@ |
|||||||
|
# Boot Güvenliği |
||||||
|
|
||||||
|
Bilgisayarınız düğmesine basmanızdan işletim sisteminin sizi kullanılabilir şekilde karşılayacağı ana kadar sırası ile pek çok yazılım çalıştırarak açılır. Bu süreç bilgisayarınızın donanımların yüklenmesinden işletim sisteminizin açılış ayarlarına kadar pek çok süreci yöneten farklı yazılımlarca yönetilir. sürecin başından sonuna kadar istediğiniz gibi güvenli gitmesi fiziki ve yazılımsal kimi güvence ve varsayımlara bağlıdır. |
||||||
|
|
||||||
|
|
||||||
|
## Boot güvenliğini neden önemsemelisiniz? |
||||||
|
|
||||||
|
Cihazınızın boot sürecini ele geçirmiş bir saldırgan işletim sistemi seviyesinde farkına bile varılamayacak saldırılar gerçekleştirebilir. Özellikle tedbir alınmamış bilgisayarlarda bahsedilen saldırıların gerçekleştirilmesi ciddi bilgi birikimi de gerektirmemektedir. Bu tip saldırıları önlemek için çeşitli tedbirler alabilirsiniz. |
||||||
|
|
||||||
|
Bilgisayarınızında ilk çalışan yazılım anakartınızda küçük bir ROM çipinde bulunan boot yazılımıdır. [BIOS](https://en.wikipedia.org/wiki/BIOS) Türkiye'de bilgisayar tarihinden bilinen bir yazılımdır. BIOS'un yerini çağdaş bilgisayarlda artık [UEFI-Unified Extensible Firmware Interface](https://en.wikipedia.org/wiki/Unified_Extensible_Firmware_Interface) almıştır. UEFI Microsoft'un da içinde bulunduğu bir konsorsiyum tarafından düzenlenmekle neredeyse satılan ana akım tüm bilgisayarların boot yazılımıdır. |
||||||
|
|
||||||
|
|
||||||
|
## Boot nasıl gerçekleşir? |
||||||
|
|
||||||
|
Bilgisayarınızı açtığınız andan itibaren, sisteminizde yüklü olan çeşitli yazılımlar, çalışarak işletim sisteminiz yükleninceye kadar sırası ile çalışarak birbirlerini yüklerler. Bu zincirleme işlem işletim sisteminiz ile bilgisayarın donanımları arasındaki uyumu sağlar. |
||||||
|
|
||||||
|
Bilgisayarınızda ilk çalışan yazılım, cihazın anakartında özel bir çip üzerinde çalışan UEFI veya BIOS yazılımıdır. Bu yazılım sistemdeki cihazları kullanılabilir hale getirmek, cihazınızda boot imkanı tanıyan bir cihaz bulup bunun çalışmasını sağlamak ile görevlidir. Modern bilgisayarlda en sık görülecek yazılım [UEFI (Unified Extensible Firmware Interface)](https://en.wikipedia.org/wiki/Unified_Extensible_Firmware_Interface) idir. |
||||||
|
|
||||||
|
UEFI aynı zamanda [Secureboot](https://en.wikipedia.org/wiki/Unified_Extensible_Firmware_Interface#Secure_boot_2) adında bir güvenlik sistemi de içermektedir. Secureboot günümüzdeki uygulaması ile bir [DRM](https://oyd.org.tr/yazilar/drm/) yani kullanıcıların özgürlüklerini sınırlayan bir sistemdir. Secureboot, Microsoft'a ait bir anahtar içerir ve bu anahtar ile imzalanmamış hiç bir kodun çalışmasına izin vermez. Bu sebeple pek çok GNU/Linux dağıtımı modern cihazlarda çalışabilmek için ya Secureboot'un kapatılmasını ya da Microsoft tarafından imzalanmış shim adında bir yazılımın sisteme dahil edilmesini gerektirmektedir. Secureboot'a kullanıcılar kendi anahtarlarını ekleyip kendi imzaladıkları kodların çalışmasını sağlayabilseler de bu çok zorlu bir süreç olmakla birlikte UEFI ve Secureboot'un özgür olmayan yazılımlar olduğu gerçeğini değiştirmemektedir. |
||||||
|
|
||||||
|
Özgür [Libreboot](https://libreboot.org) desteklendiği cihazlarda bios yazılımının tamamen yerine geçerek olabilecek en özgür bilgisayar sistemine imkan sağlamaktadır. Libreboot doğrudan GRUB kullandığından, GRUB tarafından desteklenen şifreleme ve imzalama imkanlarını doğal olarak desteklemektedir. Bu sayede hem güvenli hemde özgür bir sistem oluşturmak mümkündür. |
||||||
|
|
||||||
|
Sisteminizdeki UEFI veya Libreboot bir önyükleyici çalıştıracaktır. GNU/Linux dağıtımlar için bu GRUB'dır. GRUB sürücünüzdeki /boot sektöründe Linux çekirdeği ile birlikte bulunur ve çekirdeğin yüklenmesinden sorumludur. Çekirdek sisteminizde donanımlarla işletim sisteminizin arasındaki iletişimden sorumlu olmakla güvenliğiniz için önemli bir konumdadır. |
||||||
|
|
||||||
|
Çekirdeğin yüklenmesinin ardından işletim sisteminiz yüklenir ve bilgisayarınız sizin tarafınızdan kullanılabilir hale gelir. |
||||||
|
|
||||||
|
|
||||||
|
## Boot zincirindeki güvenlik tehlikeleri |
||||||
|
|
||||||
|
* Şayet secureboot'un açık olmadığı standart bir kurulumunuz var ise bir saldırganın çekirdeğinizi kötücül bir versiyon ile değiştirip parolalarınızı ele geçirmesi veya daha ileri saldırılar gerçekleştirmesi mümkündür. |
||||||
|
|
||||||
|
* Bilgisayarınıza fiziki erişimi olan biri /boot sektörünüzdeki çekirdek ve GRUB yapılandırmanızı herhangi bir özel tekniğe ihtiyaç duymadan kolaylıkla değiştirebilir ve güvenliğinize zarar verebilir. |
||||||
|
|
||||||
|
* Secureboot nihayetinde Microsoft gibi tarihi kullanıcı dostu olmayan olaylarla dolu olan bir şirkete ve 99 ABD doları karşılığında imzaladığı kodların güvenliğine dayanmaktadır. Bu bakımdan bir saldırganın özel bir tedbir almadıysanız. parasını verip secureboot'un güvenliğini geçmesi mümkündür. |
||||||
|
|
||||||
|
* Özgürlük her zaman güvenlik ile eş anlamlı değildir. UEFI ve secureboot kullanmıyor ve libreboot yüklü bir cihaz kullanıyor olsanız da güvenliğiniz için gerekli adımları atmadığınız sürece benzer riskleri siz de taşıyor olacaksınız. |
||||||
|
|
||||||
|
|
||||||
|
## Boot güvenliğine giriş yapın |
||||||
|
|
||||||
|
[Libreboot ve GPG ile Boot Güvenliği](libreboot_grub.md) |
||||||
|
[UEFI ile /boot Sektörü Şifreleme](sifreli_boot.md) |
@ -0,0 +1,139 @@ |
|||||||
|
# /boot sektörünü şifrelemek |
||||||
|
|
||||||
|
Boot sektöründe bulunan çekirdek ve grub yapılandırma dosyalarınından doğabilecek tehlikeleri /boot sektörünü şifreleyerek yüksek oranda bertaraf edebilirsiniz. |
||||||
|
|
||||||
|
GNU/Linux dağıtımlarının kurulum aşamasında sunduğu tam disk şifreleme /boot sektörünü **şifrelemez**. Bu tercihin pratik sebepleri bulunmakla birlikte bir gün tercihen bu yapılandırmanın seçilebilmesi dağıtımlar yönünden gereklidir. |
||||||
|
|
||||||
|
## Boot sektörünü şifrelemek ne sağlar? |
||||||
|
|
||||||
|
* Boot sektörünün şifrelenmesi bilgisayarınıza kapalı iken erişen fiziken erişen bir kişinin kötücül bir çekirdek veya grub yapılandırmasını sürücünüze yazarak bilgisayarınızın güvenliğini elinizden almasına yüksek oranda engel olur. |
||||||
|
|
||||||
|
## Boot sektörünün şifrelenmesi |
||||||
|
|
||||||
|
**UYARI: Bu rehberde yapacağınız işlemler işletim sisteminizin çalışmamasına sebebiyet verebilir. Yedek almadan bu rehberde anlatılanları uygulamamanız hararetle önerilir** |
||||||
|
|
||||||
|
Bu rehber anlatımında [Cryptsetup-team](https://cryptsetup-team.pages.debian.net/cryptsetup/encrypted-boot.html) rehberini esas almış ve kimi noktalarda değişiklikler vardır. Test Fedora 31 dağıtımı ile UEFI kullanan Dell XPS 13 cihaz üzerinde yapmıştır. |
||||||
|
|
||||||
|
Öncelikle bilgisayarınızın kurulum aşamasında LUKS şifreleme ile kurulduğu varsayımı ile aşağıdaki komut ile sürücünüzün düzenine bakın. |
||||||
|
|
||||||
|
``` |
||||||
|
root@debian:~# lsblk -o NAME,FSTYPE,MOUNTPOINT /dev/sda |
||||||
|
NAME FSTYPE MOUNTPOINT |
||||||
|
sda |
||||||
|
├─sda1 ext2 /boot |
||||||
|
├─sda2 |
||||||
|
└─sda5 crypto_LUKS |
||||||
|
└─sda5_crypt LVM2_member |
||||||
|
├─debian--vg-root ext4 / |
||||||
|
└─debian--vg-swap_1 swap [SWAP] |
||||||
|
``` |
||||||
|
Yukarıda bulunan /boot olarak işaretli olan "sda1" kurulumumuzun konusu olan donanımı ifade etmektedir. Bu değer sizin cihazınızda farklı olabilir. **Doğru cihazı seçtiğinizden emin olun.** Bu rehberde hep sda1 olarak kullanılacaktır. |
||||||
|
|
||||||
|
Boot sektörünü şifrelemek için ilgili sektör silip tekrar yapılandırılacağı için öncelikle /boot altında olan dosyaların bir kopyasının alınması gerekmektedir. Sisteminizde bu rehber dahilinde yapacağınız pek çok işlem root yetkisi gerektrmektedir. Başlamak için; |
||||||
|
|
||||||
|
/boot dizinini salt-okunur olarak mount edin. |
||||||
|
|
||||||
|
`mount -oremount,ro /boot` |
||||||
|
|
||||||
|
/boot dizinin yazılacağı boş bir tar dosyası oluşturun. |
||||||
|
|
||||||
|
`install -m0600 /dev/null /tmp/boot.tar` |
||||||
|
|
||||||
|
/boot dizinini oluşturduğunuz tar dosyasına kaydedin. |
||||||
|
|
||||||
|
`tar -C /boot --acls --xattrs --one-file-system -cf /tmp/boot.tar .` |
||||||
|
|
||||||
|
/boot dizinini unmount edin. |
||||||
|
|
||||||
|
`umount /boot` |
||||||
|
|
||||||
|
Eğer /boot/efi gibi alt noktalar var ise cihazınızda onları da unmount edin. |
||||||
|
|
||||||
|
`umount /boot/efi` |
||||||
|
|
||||||
|
Şayet `umount` komutu inat ederse `-l` parametresi ile çalıştırın. |
||||||
|
|
||||||
|
/boot sektörünün olacağı cihazı LUKS1 ile şifreleyin. |
||||||
|
|
||||||
|
**Şayet cihazınızın /root sektörü de şifreli ise aşağıda belirleyeceğiniz parolanın farklı olması durumunda bilgisayarınızın her açılışında 3 kere parola girmeniz gerekeceğini hatırlatmak isteriz. Bu durumu önlemenin çeşitli yolları olsa da güvenlik endişeniz yüksek ise 3 kere parola girmeye katlanmanız veya aynı parolayı hem /boot hem /root sektörleri için belirlemenizi öneririz. Şayet aynı parolayı kullanırsanız işletim sisteminiz otomatik otomatik olarak 1 parolayı girişini atlayacaktır.** |
||||||
|
|
||||||
|
``` |
||||||
|
cryptsetup luksFormat --type luks1 /dev/sda1 |
||||||
|
|
||||||
|
WARNING! |
||||||
|
======== |
||||||
|
This will overwrite data on /dev/sda1 irrevocably. |
||||||
|
|
||||||
|
Are you sure? (Type uppercase yes): YES |
||||||
|
Enter passphrase for /dev/sda1: |
||||||
|
Verify passphrase: |
||||||
|
``` |
||||||
|
Gerekli değeri crypttab'a girip ilgili bölümü açın. |
||||||
|
|
||||||
|
`uuid="$(blkid -o value -s UUID /dev/sda1)"` |
||||||
|
|
||||||
|
`echo "boot_crypt UUID=$uuid none luks" | tee -a /etc/crypttab` |
||||||
|
|
||||||
|
`cryptsetup luksOpen /dev/nvme0n1p2 boot_crypt` |
||||||
|
|
||||||
|
|
||||||
|
``` |
||||||
|
Starting crypto disk...boot_crypt (starting)... |
||||||
|
Please unlock disk boot_crypt: ******** |
||||||
|
boot_crypt (started)...done. |
||||||
|
|
||||||
|
``` |
||||||
|
|
||||||
|
Oluşturulan cihaz üzerinde bir dosya sistemi kurulması gerekli. Bunun için `/boot` dizininin UUID değerinin bilinmesi gerekli. Aşağıdaki komutu girerek gerekli değeri öğrenin. |
||||||
|
|
||||||
|
`grep /boot /etc/fstab` |
||||||
|
|
||||||
|
Komut ertesinde aşağıdaki gibi bir cevap dönecektir. |
||||||
|
|
||||||
|
``` |
||||||
|
# /boot was on /dev/sda1 during installation |
||||||
|
UUID=c104749f-a0fa-406c-9e9a-3fc01f8e2f78 /boot ext2 defaults 0 2 |
||||||
|
``` |
||||||
|
|
||||||
|
`UUID=` sonrasında gelen tireler ile ayrılmış değeri bir sonraki komutta dosya sistemi oluşturmak için kullanılacaktır. Aşağıdaki komut ile dosya sistemini oluşturun. |
||||||
|
|
||||||
|
**ÖNEMLİ NOT: UUID değeri her cihazda farklı olacağından yukarıdaki komut sonrası gelen değeri kullandığınızdan emin olmalısınız.** |
||||||
|
|
||||||
|
`mkfs.ext4 -m0 -U c104749f-a0fa-406c-9e9a-3fc01f8e2f78 /dev/mapper/boot_crypt` |
||||||
|
|
||||||
|
Komutu çalıştırdıktan sonra uçbirim aşağıdaki dönüşü size verecektir. |
||||||
|
|
||||||
|
``` |
||||||
|
mke2fs 1.44.5 (15-Dec-2018) |
||||||
|
Creating filesystem with 246784 1k blocks and 61752 inodes |
||||||
|
Filesystem UUID: c104749f-a0fa-406c-9e9a-3fc01f8e2f78 |
||||||
|
[…] |
||||||
|
``` |
||||||
|
|
||||||
|
Şifrelenen ve dosya sistemi oluşturulan /boot sektörünün daha önce yedeklenen içeriğinin geri yüklenmesi gerekli. Bunun için öncelikle /boot sektörünü bağlamak için aşağıdaki komutları çalıştırın. |
||||||
|
|
||||||
|
`mount -v /boot` |
||||||
|
|
||||||
|
Eğer EFI bölümünüz var ise bilgisayarınızda onu da ayrıca bağlamanız gereklidir. |
||||||
|
|
||||||
|
`mount -v /boot/efi` |
||||||
|
|
||||||
|
Ardından yedeklenen tar dosyasını /boot dizinine açın. |
||||||
|
|
||||||
|
`tar -C /boot --acls --xattrs -xf /tmp/boot.tar` |
||||||
|
|
||||||
|
Boot sektörü şifrelenip, gerekli dosyalar eklendikten sonra GRUB2 yapılandırmasının şifreli /boot sektörü için tekrar ayarlanması gerekli. Bunun için aşağıdaki komutları sırası ile çalıştırın. |
||||||
|
|
||||||
|
`echo "GRUB_ENABLE_CRYPTODISK=y" >>/etc/default/grub` |
||||||
|
|
||||||
|
**Kullandığınız GNU/Linux dağıtımı grub yapılandırma dosyasını farklı isimdeki dizinlerin altına eklemiş olabilir. Aşağıdaki komutta verilen dizinin cihazınızdaki doğru konum ile değiştirildiğinden emin olun.** |
||||||
|
|
||||||
|
`grub2-mkconfig -o /boot/efi/EFI/fedora/grub.cfg` |
||||||
|
|
||||||
|
## Önemli notlar |
||||||
|
|
||||||
|
* Bilgisayarınızın ilk açılışında GRUB /boot sektörüne erişebilmek için size parolanızı soracaktır. Siyah ekranda gelen tatsız bir giriş ekranı sizi korkutmasın. Parolanızı girerken ekranda * gibi simgeler çıkmayacağından parolayı doğru girmek konusunda dikkatli olun. Aynı zamanda GRUB /boot sektörünü deşifre edebilmek için işlemcilerin yerleşik AES motorunu veya işlemcinin tüm çekirdeklerini kullanamadığından işlemin tamamlanması bir dakikadan fazla alabilir. Şayet parolayı doğru girer iseniz cihazınızın yüklenmesine devam edilir, yanlış girerseniz UEFI ekranına dönülür. |
||||||
|
|
||||||
|
* /boot sektörü için belirlediğiniz parola şayet /root sektörünüz ile aynı ise bilgisayarınız sizden aynı parolayı iki kere isteyecektir: bir kere açılışta GRUB tarafından bir kere de işletim sisteminizin yüklenmesi için. Şayet farklı parolalar belirledi iseniz 3 kere parola sorulacaktır. |
||||||
|
|
||||||
|
* GRUB standart olarak ABD (US) klavye kullanır. Bu sebeple açılışta parolanızı girer iken Türkçe veya başka dilde özel harfler ve özel karakterler girmeniz gerekiyor ise bunların US klavyede nasıl girildiğini öğrenmeniz gereklidir. |
Loading…
Reference in new issue