Kurumsal Network Kurulumu

FortiGate Firewall Sıkılaştırma: Güvenlik Kontrol Listesi

FortiGate Firewall sıkılaştırma: Fortinet ve NSA'ya göre kontrol listesi; password policy, boşta kalma, SSH şifrelemesi, USB kurulum, maintainer hesabı.

İlker Pehlivan

FortiGate Firewall sıkılaştırma, cihazın fabrika ayarında açık bıraktığı ve kimse fark etmeden duran yolları tek tek bulup kapatmaktır. Fortinet’in kendi en iyi uygulama kılavuzu ve NSA’nın ağ cihazı rehberi bu yolları sayıyor.

İkisinin kesiştiği yerde yerel parolalar en az 15 karakterdir, boşta kalan yönetim oturumu 5 dakikada kapanır, eski şifreleme algoritmaları kabul edilmez. Fiziksel olarak korunamayan cihazda USB’den kurulum da kapatılır.

Bu yazı FortiGate Firewall yapılandırma rehberimizin 18. adımıdır. Yönetim erişimini ve admin hesabını önceki adımlarda kendi yazılarında sıkılaştırdık; burada önce hepsini tek bir listede topluyorum, sonra başka hiçbir yazının ölçmediği ayarları cihazda ölçüyorum.

Lab’da üç şey beklenenden farklı çıktı. Password policy açılınca gelen değerler zayıftı: en az 8 karakter, karakter şartı yok, eski parolayı yeniden kullanmak serbest. Policy’ye uymayan eski parolalar bir sonraki girişte değiştirilmeden içeri girmedi; lab’ın kendi üç yerel hesabının parolası da kurala uymuyordu. Policy açıkken başka bir yöneticinin parolasını, eski parolasını yazmadan değiştirmek de mümkün olmadı.

Örnekteki sınır kapısında ana bariyer iyi korunuyor olabilir, ama çitte, kapı yapıldığı günden beri açık duran küçük bir arka kapı da bulunabilir. O kapı kimseye kendini göstermez; ancak elinde listeyle çiti dolaşan biri bulur ve kapatır. FortiGate’te ana bariyer kural seti ve yönetim erişimi, arka kapılar da fabrika ayarında açık gelen yollardır.

Bu yazı, Kurumsal Network Kurulumu hizmetimizde devraldığımız her FortiGate’te ilk hafta geçtiğimiz listeyi anlatır.

FortiGate Firewall sıkılaştırma benzetmesi: sınır kapısının ana bariyeri inik, görevli koltuğunun altında kontrol listesiyle arka çitte açık kalmış küçük demir kapıyı kapatıyor
Ana bariyeri iyi korunan bir kapının çitinde, yapıldığı günden beri açık duran küçük bir arka kapı olabilir. Onu ancak kontrol listesiyle çiti dolaşan bulur. FortiGate'te de fabrika ayarında açık gelen yollar hata vermez. Sıkılaştırma onları listeyle bulup kapatmaktır.

FortiGate Sıkılaştırma Nasıl Olmalı?

Sıkılaştırma bir listeyle yapılır ve liste cihazın yaşamı boyunca tekrar geçilir: cihaz devralındığında, her firmware sürümü değiştiğinde ve kurumun düzenli denetiminde. Her maddenin arkasında bir kaynak durur.

Bu listeyi üç kaynak birlikte tarif ediyor:

  1. Fortinet FortiOS 7.0 Best Practices, Administrative settings: yöneticilerin boşta kalma süresi düşük, tercihen on dakikanın altında tutulur. Zayıf şifreleme protokolleri kapatılır. Cihazın fiziksel güvenliği garanti edilemiyorsa bakım hesabı (maintainer) kapatılır. HTTPS yönetiminin sertifikası cihazın adını ya da adresini taşıyan güvenilir bir sertifikayla değiştirilir. Aynı kılavuzun Hardening sayfası fiziksel olarak korunamayan cihazda USB’den yapılandırma ve firmware yüklemenin kapatılmasını, güçlü şifreleme için strong-crypto enable, ssl-static-key-ciphers disable ve dh-params 8192 ayarlarını, parolaların cihaza özel anahtarla saklanması için private-data-encryption’ı istiyor. User authentication for management network access sayfası yerel hesaplarda password policy’yi şart koşuyor.
  2. NSA Network Infrastructure Security Guidance (Mart 2022, sürüm 1.0): parolalar dört karakter sınıfını da kullanır, en az on beş karakter uzunluğunda olur ve son parolayla aynı ya da ona benzer olmaz (bölüm 5.6). Dönemsel parola değişimini gerekli görmez, parola ele geçirildiğinde hemen değiştirilir (bölüm 5.8). Yönetim oturumunun zaman aşımı beş dakika ya da daha kısa olur (bölüm 7.5). Cihaz, girişten önce yetkisiz kullanımı yasaklayan bir uyarı metni gösterir (bölüm 10.1).
  3. RFC 4253 (SSH taşıma katmanı, bölüm 7.1): SSH’ta seçilen şifre, istemcinin listesinde olup sunucunun listesinde de bulunan ilk algoritmadır. Aşağıdaki şifreleme bölümünün dayanağı bu cümle.

Listenin maddeleri, kaynakları ve lab cihazının bugünkü değerleri:

#KontrolKaynakLab cihazındaAyrıntı
1Yönetim erişimi yalnız yönetim arayüzündeFortinet BPport1’de SSH, SNMP, HTTP; ötekilerde yalnız pingYönetim erişimi
2Her hesapta güvenilen adresFortinet BPBütün hesaplarda 192.168.10.0/24 ya da tek adresTrusted host, IPv6 için bu yazı
3Hatalı girişte kilitlenmeNSA 4.63 deneme, 60 saniye (fabrika)Kilitlenme
4Telnet ve HTTP ile yönetim kapalıNSA 7.1admin-telnet disable (bu yazıda); HTTP açık, çünkü deneme lisansı HTTPS vermiyorYönetim portları
5Kişiye ait hesap, iki aşamalı doğrulamaFortinet BP, NSA 5.4AD grubu ag-yoneticileri, acil durum hesabı xt2vbx9; öteki yerel hesaplar lab ölçümleri içinAdmin hesabı
6Password policyNSA 5.6, Fortinet BP15 karakter, dört sınıf, yeniden kullanım kapalıBu yazı
7Boşta kalan oturumun kapanmasıNSA 7.5, Fortinet BP5 dakikaBu yazı
8Girişten önce uyarı metniNSA 10.1Açık, Türkçe metinBu yazı
9Yönetim sertifikasıFortinet BPself-sign (deneme lisansı HTTPS vermiyor)Bu yazı
10Güçlü şifrelemeFortinet BP, NSA 7.2SSH listesi daraltılmış; strong-crypto açılamıyor (deneme lisansı)Bu yazı
11USB’den otomatik kurulumFortinet BPKapalıBu yazı
12Maintainer hesabıFortinet BPAçık (sanal makine, fiziksel erişim yok)Bu yazı
13Parolaların cihaza özel anahtarla saklanmasıFortinet BPSeçenek deneme lisansında yokBu yazı
14Saat eşitlemesiNSA 6.4192.168.1.15 ve dc01NTP ayarı
15Logun cihaz dışına gönderilmesiNSA 6.2Syslog 192.168.1.46Log ayarları
16Cihaz dışında şifreli yedekFortinet BPYedek sunucusu her gece anahtarla çekiyorYedek alma
17Güncel firmwareFortinet BP7.0.10; lab’da güncellenmiyorRehberin 19. adımı

İlk beş madde yönetim kapısının kendisi; onları kendi yazılarında ölçtük. 6-13 arasındaki maddeler, cihazın kimseye göstermeden açık tuttuğu yollar. Yazının kalanı bunlarla ilgili.

Ne Zaman ve Kaç Kez?

Fortinet de NSA da listeye bir sıklık vermiyor; Fortinet cihazın sızma testiyle sınanmasını istiyor. Pratik karşılığı üç an:

  1. Cihaz devralındığında: önceki ekipten kalan ayarlar hiçbir uyarı vermez.
  2. Firmware sürümü değiştiğinde: ayarların kendisi sürümle değişir. Fortinet SSH’taki ssh-hmac-md5 ve ssh-cbc-cipher seçeneklerini 7.0.2’de kaldırdı, maintainer hesabını 7.2.4’te tamamen kaldırdı.
  3. Kurumun düzenli denetiminde: yılda en az bir kez.

FortiGate’in arayüzünde bu işi kendisi yapan bir ekran da var: Security Fabric → Security Rating. Lab cihazımda açmak istediğimde şunu yazdı: Security Rating is unavailable when VM license is in evaluation mode or when HTTPS is unavailable., yani sanal makine lisansı değerlendirme kipindeyken ya da HTTPS kullanılamıyorken güvenlik puanlaması çalışmaz. Lisanslı bir cihazda listenin bir kısmını bu ekran kendisi denetler, geri kalanı elle geçilir.

FortiGate Password Policy: Açmak Yetmez

Menü yolu: System → Settings → Password Policy. Password scope lab cihazımda fabrika ayarında Off idi; Admin seçilince alanlar açıldı. Açılan alanların fabrika değerleri:

  1. Minimum length: 8. NSA’nın sınırı 15.
  2. Character requirements: kapalı. Açınca dört alanın dördü de 0 geldi; yani anahtarı açmak tek başına hiçbir şart koymuyor.
  3. Allow password reuse: açık. NSA son parolanın tekrar kullanılmamasını istiyor.
  4. Password expiration: kapalı. NSA dönemsel değişimi gerekli görmediği için kapalı kalır.

Policy’yi NSA’nın sınırıyla doldurdum:

FortiGate System Settings ekranı: Idle timeout 5, Password scope Admin, Minimum length 15, dört karakter şartı 1 ve kapalı Allow password reuse anahtarı kırmızı çerçeveyle işaretli
Policy açıldığında gelen değerler zayıf; alanların her biri ayrıca doldurulur.

Minimum number of new characters alanına 4 yazdım: yeni parola, eskisinde olmayan en az dört karakter taşımalı. NSA “son parolaya benzer olmasın” diyor ama bir sayı vermiyor. Kaydın CLI karşılığı:

FortiGate CLI
config system password-policy
    set status enable
    set apply-to admin-password
    set minimum-length 15
    set min-lower-case-letter 1
    set min-upper-case-letter 1
    set min-non-alphanumeric 1
    set min-number 1
    set min-change-characters 4
    set expire-status disable
    set reuse-password disable
end

Sonra parola-deneme adında bir hesap açıp ona 7 karakterlik bir parola vermeyi denedim. FortiGate hesabı kaydetmedi ve sebebini yazdı:

FortiGate CLI Çıktısı
gmfw01 (parola-deneme) # set password [7 karakter]
New password must conform to the password policy enforced on this device:
minimum-length=15 upper-case-letter=1 lower-case-letter=1 number=1 non-alphanumeric=1; the new password must have at least 4 unique character(s) which don't exist in the old password.; must not be same as last two passwords
node_check_object fail! for password *
value parse error before '*'
Command fail. Return code -49

Mesajın son parçası bir sınırı da söylüyor: yeniden kullanım kapalıyken FortiGate yalnız son iki parolayı hatırlıyor.

Mevcut Parolalar Bir Sonraki Girişte Değişmek Zorunda

Policy yazıldığı anda var olan parolalara dokunmuyor; onları ilk girişte yakalıyor. Lab cihazındaki fabrika admin hesabının parolası 8 karakterdi. Bu hesapla arayüze girdim:

FortiGate Change Password ekranı: Your password does not conform to the password policy uyarısı ve Old Password, New Password alanları kırmızı çerçeveyle işaretli; altında policy'nin altı şartı listeleniyor
Eski parola doğru, ama policy'ye uymuyor; arayüz parolayı değiştirmeden içeri almıyor.

SSH’ta da aynısı oldu; giriş, parola değişikliği sorusunda durdu:

FortiGate CLI Çıktısı
Using username "admin".
You are forced to change your password. Old password:

Lab’ın öteki iki yerel hesabının parolası da kurala uymuyordu: sistemkusu ve ölçümleri yaptığım ilker.pehlivan parolalarında işaret karakteri yoktu, yani bir sonraki girişte aynı ekrana düşeceklerdi. Üç hesabın parolasını da kurala uygun yeni parolalarla değiştirdim. Acil durum hesabı xt2vbx9’un parolası 23 karakterdi ve dört sınıfı da taşıyordu; değişmesi gerekmedi.

Bu sıralamanın bir tuzağı var. Parolası kurala uymayan acil durum hesabı, merkezi girişin çöktüğü gün parola değiştirme ekranına düşer. Policy açılmadan önce her yerel hesabın parolası, acil durum hesabınınki dahil, kurala göre kontrol edilir.

Eski Parolayı Bilmeden Sıfırlamak

Üç hesabın parolasını super_admin yetkili hesabımla değiştirmek istediğimde FortiGate eski parolayı sordu:

FortiGate CLI Çıktısı
gmfw01 (admin) # set password [YENI]
Please input the old password!
Command fail. Return code -204

Komut ancak set password [YENI] [ESKI] biçiminde çalıştı. Sebebi ayırmak için geçici bir hesapla denedim: min-change-characters 0 iken aynı değişiklik eski parola sorulmadan geçti. FortiGate yeni parolanın kaç yeni karakter taşıdığını sayabilmek için eskisini istiyor.

Sonucu bir yöneticinin parolasını unuttuğu gün görürsünüz: super_admin bile o hesabın parolasını sıfırlayamaz. Yol, ayarı geçici olarak 0 yapmak, parolayı değiştirmek ve ayarı geri almaktır; üç adım da olay loguna düşer.

FortiGate Yönetim Oturumu: Boşta Kalma, Uyarı Metni ve Sertifika

Aynı ekranın Administration Settings bölümünde üç madde daha var:

FortiGate System Settings Administration Settings bölümü: self-sign HTTPS sertifikası ve uyarı kutusu ile 5 dakikalık Idle timeout kırmızı çerçeveyle işaretli
Fabrika sertifikası ekranın kendi uyarısını taşıyor; boşta kalma süresi 5 dakika.
  1. Idle timeout: boşta kalan yönetim oturumunun kaç dakika sonra kapanacağı (1-480). Lab cihazında 5. Boşta bıraktığım bir SSH oturumu 301 saniye sonra Timeout yazıp kapandı. Kapatılan tarayıcının oturumu bitirmediğini yönetim erişimi yazımızda ölçtük; bu süre o oturumun da ömrüdür.
  2. HTTPS server certificate: fabrika değeri self-sign ve ekran bunu kendisi uyarıyor: You are using a default built-in certificate, which will not be able to verify your server’s domain name (your users will see a warning)., yani yerleşik varsayılan sertifika sunucunun alan adını doğrulayamaz ve kullanıcılar uyarı görür. Her girişte çıkan uyarı, gerçek bir tehlikenin uyarısını ayırt edilmez hâle getirir. Fortinet’in önerisi cihazın adını taşıyan güvenilir bir sertifikadır, kurumun iç sertifika otoritesinden alınabilir. Lab cihazım HTTPS yönetimi vermediği için bu adımı ölçemedim. Ekrandaki metin ölçümün kendisi.
  3. Telnet port: Telnet’i genel ayarda kapatınca (set admin-telnet disable) bu alan ekrandan kalktı. Lab cihazında yalnız arayüzlerde kapalıydı; genel ayarı bu yazıda kapattım.

Girişten Önce Uyarı Metni

NSA, cihazın girişten önce yetkisiz kullanımı yasaklayan bir uyarı göstermesini istiyor. FortiGate’te bu metin fabrika ayarında kapalı (pre-login-banner disable), açılınca gösterilecek fabrika metni ise ABD hukukuna göre yazılmış İngilizce bir uyarı (PRE WARNING: This is a private computer system...). NSA’nın kendisi de metnin kurumun hukukuna göre yazılmasını istiyor. Lab’da kısa ve olgusal bir Türkçe metin yazdım:

FortiGate CLI
config system global
    set pre-login-banner enable
end
config system replacemsg admin "pre_admin-disclaimer-text"
    set buffer "UYARI: Bu cihaz Sistem Kusu yonetim agina aittir.
Yalniz yetkili yoneticiler girebilir.
Tum yonetim islemleri kullanici adi ve kaynak adresiyle kayda gecer."
end

Arayüz metni girişten önce Accept ve Decline düğmeleriyle gösterdi:

FortiGate Login Disclaimer penceresi: Türkçe uyarı metni kırmızı çerçeveyle işaretli, altında Accept ve Decline düğmeleri
Uyarı kabul edilmeden giriş ekranı açılmıyor.

SSH’ta da metin, kimlik doğrulamadan önce geldi. Bir yan etkisi oldu: lab’da arayüze giren ölçüm betiğim bu pencerede takıldı ve betiğe “uyarı varsa kabul et” adımını eklemem gerekti. Arayüzü betikle kullanan bir araç varsa uyarıyı açmadan önce o araç da denenir.

FortiGate SSH Şifrelemesi: Algoritma Pazarlığı

İki kişi gizli konuşmak için bir şifre seçecek. Biri bildiği şifreleri en sevdiğinden başlayarak sayar; öteki o sırada ilerler ve kendi de bildiği ilk şifrede durur. Ötekinin bildikleri arasında çoktan çözülmüş eski bir şifre de varsa, yalnız o eski şifreyi bilen biri de konuşmaya katılabilir ve o konuşma kolayca dinlenir.

Bu sahneyi sınır kapısının dört parçası taşıyor:

  1. SSH istemcisi kapıya gelen sürücüdür; bildiği şifreleri kendi tercih sırasıyla sayar.
  2. FortiGate’in algoritma listesi görevlinin masasındaki şifre kitaplarıdır.
  3. Eski algoritmalar (3des-cbc, hmac-md5, SHA-1’li anahtar değişimi) masada duran, çoktan çözülmüş eski şifre kitaplarıdır.
  4. Liste daraltmak eski kitapları masadan kaldırmaktır; strong-crypto bunu tek kuralla yapan ayardır.

Örnekteki sınır kapısında hangi kitabın kullanılacağına sürücünün sırası karar verir, görevlinin masası ise yalnız izin verir. Masada eski bir kitap durdukça, yalnız onu bilen bir sürücü de kapıdan geçer. FortiGate’te mekanizma şöyle işliyor:

  1. İstemci listesini gönderir: güncel bir istemcinin listesi güçlü algoritmalarla başlar.
  2. FortiGate kendi listesini gönderir.
  3. Seçim istemcinin sırasıyla yapılır: RFC 4253’e göre istemcinin listesinde olup FortiGate’in listesinde de bulunan ilk algoritma kullanılır.
  4. Ortak algoritma yoksa bağlantı kurulmaz.
SSH algoritma pazarlığı. İstemci bildiği şifreleri kendi tercih sırasıyla sayar; seçilen şifre, istemcinin listesinde olup FortiGate listesinde de bulunan ilk şifredir. Solda fabrika listesi: FortiGate listesinde 3des-cbc, arcfour ve blowfish gibi eski şifreler de var. Güncel istemci chacha20 seçer, yalnız 3des-cbc bilen eski bir araç ise 3des-cbc ile bağlanır. Sağda daraltılmış liste: FortiGate listesinde yalnız chacha20, aes-ctr ve aes-gcm var. Güncel istemci yine chacha20 seçer, eski araç ise no matching cipher hatasıyla bağlanamaz. Fabrika listesi İstemcinin sırası (sürücü) güncel istemci: chacha20, aes-gcm, ... eski araç: yalnız 3des-cbc FortiGate listesi (masadaki kitaplar) chacha20, aes-ctr, aes-gcm + 3des-cbc, arcfour, blowfish Seçilen: sürücünün sırasındaki ilk ortak güncel istemci → chacha20 eski araç → 3des-cbc ile bağlanır Daraltılmış liste İstemcinin sırası (sürücü) güncel istemci: chacha20, aes-gcm, ... eski araç: yalnız 3des-cbc FortiGate listesi (masadaki kitaplar) chacha20, aes-ctr, aes-gcm eski kitap yok Seçilen: sürücünün sırasındaki ilk ortak güncel istemci → chacha20 eski araç → no matching cipher SSH algoritma pazarlığı. İstemci bildiği şifreleri kendi tercih sırasıyla sayar; seçilen şifre, istemcinin listesinde olup FortiGate listesinde de bulunan ilk şifredir. Solda fabrika listesi: FortiGate listesinde 3des-cbc, arcfour ve blowfish gibi eski şifreler de var. Güncel istemci chacha20 seçer, yalnız 3des-cbc bilen eski bir araç ise 3des-cbc ile bağlanır. Sağda daraltılmış liste: FortiGate listesinde yalnız chacha20, aes-ctr ve aes-gcm var. Güncel istemci yine chacha20 seçer, eski araç ise no matching cipher hatasıyla bağlanamaz. Fabrika listesi İstemcinin sırası (sürücü) güncel istemci: chacha20, aes-gcm, ... eski araç: yalnız 3des-cbc FortiGate listesi (masadaki kitaplar) chacha20, aes-ctr, aes-gcm + 3des-cbc, arcfour, blowfish Seçilen: sürücünün sırasındaki ilk ortak güncel istemci → chacha20 eski araç → 3des-cbc ile bağlanır Daraltılmış liste İstemcinin sırası (sürücü) güncel istemci: chacha20, aes-gcm, ... eski araç: yalnız 3des-cbc FortiGate listesi (masadaki kitaplar) chacha20, aes-ctr, aes-gcm eski kitap yok Seçilen: sürücünün sırasındaki ilk ortak güncel istemci → chacha20 eski araç → no matching cipher
Güncel istemci iki listede de güçlü şifreyi seçer; fark, yalnız eski şifreyi bilen bir araç geldiğinde ortaya çıkar.

Bu sıranın kazancı: liste daraltıldığında güncel istemciler hiçbir şey fark etmez, yalnız eski ya da zorlanmış bağlantılar düşer. Bedeli de aynı yerden: listeden çıkan bir algoritmayı kullanan eski bir yönetim aracı ya da betik, değişiklikten sonra bağlanamaz.

Fabrika Listesi ve Daraltılmış Liste: Ölçüm

Algoritma listesini geçici olarak fabrika ayarına aldım ve ntp01’den bağlanırken OpenSSH istemcisinin ayrıntılı kipte (ssh -vv) yazdığı, FortiGate’in sunduğu listeye baktım:

Çıktı
debug2: KEX algorithms: diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha1,diffie-hellman-group-exchange-sha256,curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521
debug2: ciphers ctos: chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,aes192-cbc,aes256-cbc,arcfour,rijndael-cbc@lysator.liu.se,aes128-gcm@openssh.com,aes256-gcm@openssh.com
debug2: MACs ctos: hmac-md5,hmac-md5-etm@openssh.com,hmac-md5-96,hmac-md5-96-etm@openssh.com,hmac-sha1,hmac-sha1-etm@openssh.com,hmac-sha2-256,hmac-sha2-256-etm@openssh.com,hmac-sha2-512,hmac-sha2-512-etm@openssh.com,hmac-ripemd160,...

Liste 3des-cbc, arcfour ve hmac-md5 gibi çoktan bırakılmış algoritmaları da içeriyordu. Gerçekten kabul edildiklerini görmek için istemciyi her seferinde tek bir eski algoritmaya zorladım; olmayan bir kullanıcıyla bağlandığım için Permission denied, şifrelemenin anlaşıldığını ve bağlantının parola aşamasına geldiğini söylüyor:

Çıktı
-o Ciphers=3des-cbc: deneme@192.168.10.1: Permission denied (publickey,password).
-o Ciphers=aes128-ctr -o MACs=hmac-md5: deneme@192.168.10.1: Permission denied (publickey,password).
-o KexAlgorithms=diffie-hellman-group14-sha1: deneme@192.168.10.1: Permission denied (publickey,password).

Fabrika ayarında üçü de kabul edildi. Listeyi yalnız güçlü algoritmalara indirdim:

FortiGate CLI
config system global
    set ssh-enc-algo chacha20-poly1305@openssh.com aes128-ctr aes192-ctr aes256-ctr aes128-gcm@openssh.com aes256-gcm@openssh.com
    set ssh-kex-algo diffie-hellman-group-exchange-sha256 curve25519-sha256@libssh.org ecdh-sha2-nistp256 ecdh-sha2-nistp384 ecdh-sha2-nistp521
    set ssh-mac-algo hmac-sha2-256 hmac-sha2-256-etm@openssh.com hmac-sha2-512 hmac-sha2-512-etm@openssh.com
end

Aynı denemeleri tekrarladım; bu kez üçü de daha anlaşma aşamasında reddedildi:

Çıktı
-o Ciphers=3des-cbc: Unable to negotiate with 192.168.10.1 port 22: no matching cipher found. Their offer: chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com
-o Ciphers=aes128-ctr -o MACs=hmac-md5: Unable to negotiate with 192.168.10.1 port 22: no matching MAC found. Their offer: hmac-sha2-256,hmac-sha2-256-etm@openssh.com,hmac-sha2-512,hmac-sha2-512-etm@openssh.com
-o KexAlgorithms=diffie-hellman-group14-sha1: Unable to negotiate with 192.168.10.1 port 22: no matching key exchange method found. Their offer: diffie-hellman-group-exchange-sha256,curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521

Değişiklikten sonra kendi SSH bağlantımı yeni bir oturumla denedim ve çalıştı. Fortinet’in güçlü şifreleme maddesindeki öteki iki ayarı da uyguladım (ssl-static-key-ciphers disable, dh-params 8192); SSH girişi yine çalıştı, çünkü anahtar değişimi curve25519 ile yapılıyor.

MAC Denemesindeki Tuzak

MAC denemesini ilk yaptığımda yalnız -o MACs=hmac-md5 verdim ve daraltılmış listeye rağmen bağlantı parola aşamasına geldi. Ayrıntılı çıktı sebebini gösterdi:

Çıktı
debug1: kex: client->server cipher: chacha20-poly1305@openssh.com MAC: <implicit> compression: none

İstemci şifre olarak chacha20-poly1305’i seçmişti. Bu şifre bütünlük denetimini kendisi taşıdığı için MAC hiç pazarlık edilmiyor ve zorlanan hmac-md5 hiç kullanılmıyor. MAC listesini sınarken şifreyi de bu özelliği taşımayan bir şifreye zorlamak gerekiyor (-o Ciphers=aes128-ctr); yukarıdaki ölçümler bu yüzden öyle.

strong-crypto ve Lisans

Fortinet’in Hardening sayfası listenin tek tek daraltılmasından önce strong-crypto enable’ı istiyor. Lab cihazımda ayar kapalıydı ve açılamadı:

FortiGate CLI Çıktısı
gmfw01 (global) # set strong-crypto enable
command parse error before 'strong-crypto'
Command fail. Return code -61

Sebebi lisans: Fortinet’in sanal makine kılavuzuna göre değerlendirme lisansı yalnız düşük şifrelemeyle çalışıyor (yönetim arayüzüne HTTPS ile girilemiyor). Lisanslı bir cihazda ilk kontrol bu yüzden tek satırdır: get system global | grep strong komutu enable göstermeli. Bir not daha: güncel OpenSSH istemcisi lab cihazına her bağlanışta kuantum sonrası anahtar değişimi kullanılmadığını uyardı (connection is not using a post-quantum key exchange algorithm). Bu, listeyle değil sürümle çözülen bir eksik.

FortiGate Güvenilen Adres IPv6’yı da Kapsar mı?

Yönetici hesaplarında IPv4 güvenilen adresin yanında bir de IPv6 alanı duruyor ve fabrika değeri ::/0, yani okuyana “her yer” gibi görünüyor. Bunu ölçmek için yönetim arayüzüne geçici bir IPv6 adresi verdim ve yalnız 192.168.10.225/32’den girebilen bir deneme hesabıyla ntp01’den bağlandım. IPv4’ten bağlantı beklendiği gibi kapandı (Connection closed). IPv6’dan ise bağlantı hiç kurulmadı; debug flow paketin yönetim girişi denetiminde düştüğünü gösterdi:

FortiGate CLI Çıktısı
id=20085 trace_id=1 func=fw6_local_in_handler line=386 msg="iprope6_in_check() check failed,id=0 drop"

Hesaba IPv6 güvenilen adres olarak yalnız ntp01’in adresini yazınca aynı bağlantı açıldı. Yani bu sürümde IPv4 güvenilen adresi tanımlı bir hesap, IPv6’dan ancak IPv6 adresi ayrıca yazılınca girebiliyor; ::/0 yolu açmıyor. Ölçümden sonra IPv6 adresini ve deneme hesabını kaldırdım. Yönetimde IPv6 kullanılacaksa her hesaba IPv6 güvenilen adres de yazılır ve aynı deneme kendi cihazınızda yapılır.

FortiGate USB Otomatik Kurulum: Fiziksel Erişimin Kestirmesi

USB girişi olan bir FortiGate, yeniden başlarken o girişteki diske bakabiliyor. Ayar System → Settings → Start Up Settings altında USB auto-install adıyla duruyor. Lab cihazımın fabrika hâli:

FortiGate CLI Çıktısı
auto-install-config : enable
auto-install-image  : enable
default-config-file : fgt_system.conf
default-image-file  : image.out

İki satır da açık: cihaz yeniden başlarken takılı USB diskte fgt_system.conf adlı bir yapılandırma ya da image.out adlı bir firmware bulursa onu yükler.

Fortinet’in teknik ipucu yazısı riski açıkça yazıyor: cihaza fiziksel erişimi olan bir saldırgan, USB portundan yeni bir yapılandırma ya da firmware yükleyip elektriği keserek cihazı yeniden başlatabilir. Hardening sayfası da cihaz fiziksel olarak korunamıyorsa ikisinin kapatılmasını istiyor.

FortiGate System Settings Start Up Settings bölümü: USB auto-install altında kapalı Detect configuration ve Detect firmware anahtarları kırmızı çerçeveyle işaretli
İki anahtar da kapalı: cihaz yeniden başlarken USB diskteki yapılandırmaya ve firmware'e bakmıyor.

Detect configuration ve Detect firmware anahtarlarının CLI karşılığı:

FortiGate CLI
config system auto-install
    set auto-install-config disable
    set auto-install-image disable
end

Lab cihazımda ayar yeniden başlatma istemedi. Cihaz sanal makine olduğu için USB girişi yok; yüklemenin kendisini ölçemedim, ayarın fabrika değerini ve Fortinet’in tarifini aktarıyorum. Firewall’un kilitli bir kabinde değil de bir ofis köşesinde durduğu yerlerde bu madde ertelenmez.

FortiGate Maintainer Hesabı: Parola Kurtarma ile Fiziksel Risk Arasında

Lab cihazımda admin-maintainer enable fabrika değeriyle duruyor. Fortinet’in CLI başvurusu bu hesabı şöyle tarif ediyor: maintainer hesabı (bakım hesabı), sert bir yeniden başlatmadan sonra konsoldan giriş için kullanılabilir ve parolası “bcpb” followed by the FortiGate unit serial number. Parolası unutulan bir cihaza dönmenin yolu budur. Hesabı kapatınca FortiGate önce şunu yazdı:

FortiGate CLI Çıktısı
*** WARNING *** WARNING *** WARNING ***
Disabling global.admin_maintainer
will disable the password recovery mechanism during boot up.
Do not disable this option if you do not have a backup plan for recovery.
The only way to restore access to the unit will require loading the
firmware via the boot menu, resulting in the unit resetting to factory
default configuration.
*** WARNING *** WARNING *** WARNING ***

Cihaz uyarıyı yazdı ama onay istemedi; ayar hemen disable oldu. Aynı kapı, cihaza fiziksel olarak erişen biri için de açıktır ve seri numarası gizli bir bilgi değildir: lab cihazımda panelin ilk kutusunda, System Information altında yazıyor. Fortinet’in ölçütü de bu yüzden fiziksel güvenlik. Karar cihazın durduğu yere göre verilir:

  1. Cihaz kilitli bir kabinde ve konsol erişimi denetimliyse maintainer hesabı açık kalabilir; parola kaybında işi kurtaran odur.
  2. Cihaz herkesin ulaşabildiği bir yerdeyse maintainer hesabı kapatılır (set admin-maintainer disable). O durumda parolası kaybolan cihaza dönmenin yolu firmware’i yeniden yüklemektir ve yapılandırma fabrika ayarına döner; bu yüzden cihaz dışındaki şifreli yedek hazır tutulur.

Lab cihazı bir sanal makine; konsoluna yalnız sanallaştırma sunucusundan ulaşılıyor. Bu yüzden ölçümden sonra hesabı yeniden açtım. Fortinet bu hesabı 7.2.4 sürümünde tamamen kaldırdı; ayrıntısı rehberin 20. adımında. 7.0’daki bir cihazda karar hâlâ sizin.

Parolaların Cihazdaki Şifrelemesi: private-data-encryption

Yapılandırmadaki parolalar ENC ile şifreli görünür, ama Fortinet’in FG-IR-19-007 bildirimine göre bu değerler sabit bir anahtarla şifrelenir; yapılandırmaya ya da yedek dosyasına erişen kişi onları çözebilir.

Hardening sayfasının çözümü config system global altında set private-data-encryption enable: cihaz, yöneticinin verdiği 32 haneli onaltılık bir anahtarı kullanır. Lab cihazımda bu seçenek deneme lisansında komut satırında yoktu; ölçümü yedek alma yazımızda anlattık. Lisanslı bir cihazda açılırsa anahtar ayrıca saklanır: Fortinet’e göre bu yapılandırmayı başka bir FortiGate’e geri yüklemek için aynı anahtar gerekir.

Doğrulama: FortiGate’in Fabrika Yolları Kapandı mı?

  1. get system password-policy status enable, minimum-length 15, dört karakter şartı 1 ve reuse-password disable gösteriyor; her yerel hesabın parolası bu kurala uyuyor.
  2. get system global içinde admintimeout 5, admin-telnet disable, pre-login-banner enable.
  3. SSH listesi daraltılmış: 3des-cbc ve SHA-1’li anahtar değişimiyle zorlanan bağlantı Unable to negotiate alıyor; lisanslı cihazda strong-crypto enable.
  4. get system auto-install iki satırda da disable.
  5. Maintainer hesabı kararı cihazın durduğu yere göre verilmiş ve not edilmiş.
  6. Yönetimde IPv6 kullanılıyorsa her hesabın IPv6 güvenilen adresi yazılmış ve bir denemeyle sınanmış.
  7. Betikler ve araçlar yeni password policy, SSH listesi ve giriş uyarısıyla yeniden denenmiş.

Sonuç: FortiGate’te Sıkılaştırma Listeyle Yapılır

FortiGate’in fabrika ayarında açık gelen yolları hiçbir ekran kırmızıyla göstermez. Fortinet’in ve NSA’nın kesiştiği listede yerel parolalar 15 karakter ve dört sınıftır, boşta kalan oturum 5 dakikada kapanır, eski algoritmalar listeden çıkar, fiziksel olarak korunamayan cihazda USB’den kurulum ve maintainer hesabı kapanır. Lab’da beş şey beklenenden farklı çıktı:

  1. Password policy açılınca gelen değerler zayıftı: 8 karakter, dördü de 0 olan karakter şartları, açık yeniden kullanım.
  2. Policy’ye uymayan eski parola bir sonraki girişte değiştirilmeden içeri girmedi; lab’ın kendi üç yerel hesabının parolası da kurala uymuyordu.
  3. min-change-characters açıkken super_admin bile başka bir hesabın parolasını eskisini yazmadan değiştiremedi.
  4. Daraltılmış listede yalnız hmac-md5’e zorlanan bağlantı geçti, çünkü seçilen şifre MAC’i kendisi taşıyordu; MAC ancak şifre de zorlanınca sınandı.
  5. IPv6 güvenilen adres alanındaki ::/0 yolu açmadı; IPv6’dan giriş ancak adres ayrıca yazılınca mümkün oldu.

Örnekteki sınır kapısında çitteki arka kapı, kapı yapıldığı günden beri açıktır ve bunu kimse söylemez; onu, yani fabrika ayarında açık kalan yolu, elinde listeyle çiti dolaşan görevli kapatır. Switch tarafındaki aynı listeyi switch sıkılaştırma yazımızda, cihazdan bağımsız kısmını siber güvenlik sıkılaştırma sayfamızda anlattık. Açılış listesinin kalanı 20 adımlık kontrol listesinde duruyor.

FortiGate Firewall Sıkılaştırma Hakkında Sık Sorulan Sorular

Etkiler, ama bir sonraki girişte. Lab'da policy'yi açtıktan sonra 8 karakterlik eski parolasıyla giren hesap arayüzde Your password does not conform to the password policy ekranına, SSH'ta You are forced to change your password sorusuna düştü; parolayı değiştirmeden içeri giremedi. Bu yüzden policy'yi açmadan önce acil durum hesabı dahil her yerel hesabın parolası kurala uygun hâle getirilir.
NSA yönetim oturumları için en çok 5 dakika, Fortinet on dakikanın altında bir süre öneriyor. Ayar System → Settings ekranındaki Idle timeout alanıdır (CLI'da admintimeout). Lab'da 5 dakikaya ayarlıyken boşta bıraktığım SSH oturumu Timeout yazıp kapandı.
Bu yazıdaki ayarların hiçbiri lab cihazımda yeniden başlatma istemedi; hepsi girildiği anda geçerli oldu. Dikkat edilecek iki yer var: daraltılan SSH listesi eski bir aracın bağlantısını keser, giriş uyarısı da arayüze giren betiklerin önüne bir onay ekranı koyar. Değişiklikten sonra kendi bağlantınızı yeni bir oturumla deneyin.
Maintainer hesabı (bakım hesabı), fabrika ayarında konsoldan sert yeniden başlatmadan sonra bcpb ve seri numarasıyla giriş yapmaya izin verir. Fortinet cihazın fiziksel güvenliği sağlanamıyorsa hesabın kapatılmasını öneriyor. Kapatılırsa parolası kaybolan bir cihaza dönmenin yolu firmware'i yeniden yüklemektir ve yapılandırma fabrika ayarına döner; bu yüzden hesabı kapatan kurum cihaz dışında şifreli bir yedeği hazır tutar.
Üç noktada farklıdır. Fortinet'e göre değerlendirme lisansı yalnız düşük şifrelemeyle çalışır ve HTTPS yönetimi vermez. Lab cihazımda strong-crypto açılamadı, Security Rating ekranı kullanılamadı ve private-data-encryption seçeneği komut satırında yoktu. Lisanslı bir cihazda strong-crypto fabrika ayarında açıktır.
İlker Pehlivan
Yazan

BT Danışmanı | Ağ, Sistem ve Güvenlik Yönetimi

İlker Pehlivan, karmaşık BT altyapılarını ölçeklenebilir ve güvenli sistemlere dönüştürür. Buradaki rehberleri kendi laboratuvarında kurup ölçerek yazar.

LinkedIn

Benzer Makaleler

Kurumsal Network Kurulumu altındaki diğer 114 makale