Centos 8 Üzerinde GVM 21.04 Kurulumu sürecine başlamadan önce dikkat edilmesi gereken noktalara değinmekte fayda olacaktır. Kurulum root yetkisine sahip bir kullanıcı ve kurulum içerisinde yeni oluşturulacak “gvm” kullanıcısı üzerinden yapılacaktır. Daha önce GVM 11 (Geçerliliğini yitirdiğinden dolayı) olarak yayınlanmış yazı GVM 21.04 olarak güncellendi. Güncelleme içerisinde komutlar üzerinde de değişiklik yapılmıştır.
İlgili komut satırı hangi kullanıcı ile çalıştırılacaksa, kullanıcı komuttan bir önceki satırda vurgulu olarak (Root: veya GVM: olarak) belirtilecektir.
Eğer root olmayacaksanız, root olarak belirtilmiş komutların sudo ile çalıştırılması gerekecektir.
Ayrıca eski adıyla Openvas olan yazılım artık yoluna Greenbone Vulnerability Manager olarak devam ediyor ve makalenin ilerleyen kısımlarında kısaca gvm olarak ifade edilecektir.
Kurulum
Açıklama gereken kısımlarda tanımlar yapılırken; bazı başlıklar altında sadece komutlar olacaktır.
Python 3 Kurulumu
Root:
yum install -y python3
8
komutu ile Centos 8 üzerine python kurulumunu başlatıp tamamlıyoruz.
alternatives --config python
komutunu çalıştırıp 2 rakamını yazarak devam ediyoruz, tek seçenek var ise 1 seçilmelidir. Bu aşamadan sonra python bizim varsayılan uygulamamız olacaktır.
EPEL Repository Aktivasyonu
Root:
yum install -y epel-release
Centos-Powertools Repository Aktivasyonu
Root:
yum config-manager --set-enabled powertools
Bazı metinlerde PowerTools şeklinde de tanımlanıyor ama benim testimde belirtilen komut başarılı oldu.
Centos Development Tools Kurulumu
Root:
yum groupinstall -y "development tools"
Gerekli Centos Paketlerinin Yüklenmesi
Eğer minimal iso dosyası ile işletim sistemi kurulumu yaptıysanız; wget kurulumunu da bu yüklemeye dahil etmeniz gerekiyor.
Root:
yum install -y wget cmake glib2-devel zlib-devel gnutls-devel libuuid-devel libssh-devel libxml2-devel libgcrypt-devel openldap-devel popt-devel redis libical-devel openssl-devel hiredis-devel radcli-devel gpgme-devel libksba-devel doxygen libpcap-devel nodejs python3-polib libmicrohttpd-devel gnutls-utils python3-devel libpq-devel texinfo xmltoman nmap sshpass socat mingw32-gcc ncurses-devel python3-psutil python3-packaging python3-redis libnet-devel
Bu aşamadan sonra gerekli Python paketlerini de yüklememiz gerekiyor.
pip3 install redis psutil packaging setuptools-rust
Eğer komutlar tek satırda yüklenmez ise pip3 komutunu her bir paket için ayrıca çalıştırabilirsiniz.
Postgres Database Server Kurulumu
Root:
yum install -y postgresql-server postgresql-contrib postgresql-server-devel
/usr/bin/postgresql-setup --initdb
systemctl enable postgresql
systemctl start postgresql
Postgres Database Konfigürasyonu
Database server kurulumu tamamlandıktan sonra, yeni database yaratılıyor ve database server üzerinde kullanıcı oluşturuluyor. Bu kullanıcı sonraki adımda yaratılacak olan gvm kullanıcısından farklıdır.
Root:
sudo -Hiu postgres
createuser gvm
createdb -O gvm gvmd
psql gvmd
create role dba with superuser noinherit;
grant dba to gvm;
create extension "uuid-ossp";
create extension "pgcrypto";
\q
exit
systemctl restart postgresql
GVM Kütüphanelerinin Sistem Kurulumuna Eklenmesi
Root:
echo "/opt/gvm/lib" > /etc/ld.so.conf.d/gvm.conf
ldconfig
Ayrıcalıksız GVM Kullanıcısının Oluşturulması
Root:
useradd -r -d /opt/gvm -c "GVM (OpenVAS) User" -s /bin/bash gvm
mkdir /opt/gvm
mkdir /opt/gvm/src
chown -R gvm:gvm /opt/gvm
GVM Kurulum Yolunun Sisteme Tanıtılması
Yaptığımız bu işlemle GVM’e ait olan çalıştırılabilir komutların dosya yolunu göstermeden doğrudan işletim sistemi tarafından tanınmasını sağlıyoruz. nano (Pratik olduğu için ben nano’yu tercih ediyorum ve örnek boyunca nano kullanılacaktır.) ile ilgili dosyayı açtıktan sonra PATH ile başlayan satırı olduğu gibi ilgili dosyaya ekleyip, kaydedip çıkıyoruz.
Root:
nano /etc/environment
PATH=”/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/opt/gvm/bin:/opt/gvm/sbin”
GVM Paketlerinin İndirilmesi ve Arşivden Çıkarılması
Buraya kadar işletim sistemini kurulum için hazırladık, bu başlıktan sonra GVM kurulum aşamasına giriş yapıyoruz. Makalenin yazımı sırasında en son stabil olan sürümler kullanılmıştır. Dilenirse yeni sürümler kontrol edilerek indirilecek dosyaların adları düzenlenebilir.
Bu aşamadan sonra ilk kez oluşturulan gvm kullanıcı üzerinden işlem yapmaya da başlıyoruz.
Root kullanıcısından ilgili kullanıcıya geçiş yapmak için:
su -l gvm
komutu kullanılabilir. Tekrar root kullanıcısına dönmek için:
exit
yeterli olacaktır. Kurulumun akışı sırasından sık sık bu geçişler tekrarlanacaktır.
GVM:
Eski paketlerin linkleri yeni sürüm ile değiştirilmiştir.
cd /opt/gvm/src
wget -O gvm-libs-21.4.0.tar.gz https://github.com/greenbone/gvm-libs/archive/v21.4.0.tar.gz
wget -O openvas-21.4.0.tar.gz https://github.com/greenbone/openvas/archive/v21.4.0.tar.gz
wget -O ospd-21.4.0.tar.gz https://github.com/greenbone/ospd/archive/v21.4.0.tar.gz
wget -O ospd-openvas-21.4.0.tar.gz https://github.com/greenbone/ospd-openvas/archive/v21.4.0.tar.gz
wget -O gvmd-21.4.0.tar.gz https://github.com/greenbone/gvmd/archive/v21.4.0.tar.gz
wget -O gsa-21.4.0.tar.gz https://github.com/greenbone/gsa/archive/v21.4.0.tar.gz
wget -O openvas-smb-21.4.0.tar.gz https://github.com/greenbone/openvas-smb/archive/v21.4.0.tar.gz
İndirilen dosyaları klasöre çıkarmak için aşağıdaki komut dizisi kullanılabilir. Komutların tamamı tek seferde kopyalanıp komut satırına eklenebilir. İşletim sistemi sırası gelen komutu otomatik olarak çalıştıracaktır.
cd /opt/gvm/src
tar xvfz gvm-libs-21.4.0.tar.gz
tar xvfz openvas-21.4.0.tar.gz
tar xvfz ospd-21.4.0.tar.gz
tar xvfz ospd-openvas-21.4.0.tar.gz
tar xvfz gvmd-21.4.0.tar.gz
tar xvfz gsa-21.4.0.tar.gz
tar xvfz openvas-smb-21.4.0.tar.gz
Dosyaların indirilmesi ve arşivden çıkarılması tamamlandıktan sonra elimizde açık kaynak olarak bulunan programın derlenmesi aşamasına geçiyoruz.
Build gvm-libs
GVM:
cd /opt/gvm/src
export PKG_CONFIG_PATH=/opt/gvm/lib/pkgconfig
cd gvm-libs-21.4.0
mkdir build
cd build
cmake .. -DCMAKE_INSTALL_PREFIX=/opt/gvm
make
make doc
make install
Heimdall Kurulumu
Heimdall kurulumu openvas-smb servisinin devreye alınabilmesi için ara katman olarak kullanılmaktadır. Bu yüzden kurulumun bu aşamasında Heimdall kurulumu için araya girmiş oluyoruz.
Kurulum aşaması da biraz uzun sürebiliyor.
Root:
cd /usr/local/src
wget https://github.com/heimdal/heimdal/releases/download/heimdal-7.7.0/heimdal-7.7.0.tar.gz
tar xvfz heimdal-7.7.0.tar.gz
cd heimdal-7.7.0
./configure --enable-otp=no --prefix=/opt/heimdal
make
make install
ln -s /opt/heimdal/include /opt/heimdal/include/heimdal
Heimdall Kütüphanesinin İşletim Sistemine Tanıtılması
Root:
echo "/opt/heimdal/lib" > /etc/ld.so.conf.d/heimdal.conf
ldconfig
Heimdall kurulumu tamamlandıktan sonra openvas-smb derlemesine geçilebilir.
Build openvas-smb
GVM:
cd /opt/gvm/src
export PKG_CONFIG_PATH=/opt/gvm/lib/pkgconfig:/opt/heimdal/lib/pkgconfig
cd openvas-smb-21.4.0
mkdir build
cd build
cmake .. -DCMAKE_INSTALL_PREFIX=/opt/gvm
make
make install
Build scanner
Derlemeye geçmeden önce, kurulum aşamasında hata almamak için CMakeLists.txt dosyası üzerinde aşağıdaki değişikliği yapmak gerekiyor.
GVM:
nano /opt/gvm/src/openvas-scanner-21.4.0/CMakeLists.txt
nano ile dosyayı açtığınız alt kısımlara doğru aşağıdaki satırı bulup, açıklama satırı haline getirin:
#set (CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} ${COVERAGE_FLAGS}")
Değiştirilen satırın yerine:
set (CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -Werror -Wno-error=deprecated-declarations")
üstteki satırı ekleyip dosyayı kaydedip çıkın.
Dosya düzenleme işlemi bittiğinde derleme aşamasına geçilebilir.
cd /opt/gvm/src
export PKG_CONFIG_PATH=/opt/gvm/lib/pkgconfig
cd openvas-scanner-21.4.0
mkdir build
cd build
cmake .. -DCMAKE_INSTALL_PREFIX=/opt/gvm
make
make doc
make install
Redis Kurulumu
Yine gvm kurulumundan uzaklaşıyoruz ve bu defa da cache işlemleri için kullanılacak olan Redis kurulumu ve yapılandırması ile devam ediyoruz.
Aslında Redis sistem üzerinde zaten bulunuyor ama gvm ile entegre hale getirilmesi ve servisinin başlatılması gerekiyor.
Root:
cp /etc/redis.conf /etc/redis.conf.orig
cp /opt/gvm/srcopenvas-scanner-21.4.0/config/redis-openvas.conf /etc/redis.conf
chown redis /etc/redis.conf
gvm içerisinde bulunan Redis konfigürasyon şablonu ilgili klasöre kopyalandıktan sonra nano ile ilgili dosyada küçük bir değişiklik yapılması gerekiyor.
nano /etc/redis.conf
Dosya açıldıktan sonra unixsocket kısmına aşağıdaki satırlar eklenir. Tabi burada buna benzer bir satır olacağı için eski satırlar açıklama haline getirilebilir veya silinir.
unixsocket /var/run/redis/redis.sock
unixsocketperm 770
GVM:
echo "db_address=/var/run/redis/redis.sock" > /opt/gvm/etc/openvas/openvas.conf
Düzenlemiş olduğumuz dosyayı gvm konfigürasyon dosyasına da ekliyoruz.
Root:
systemctl enable redis
systemctl start redis
Bu satırlarla Redis aşaması tamamlanmış oluyor ama
systemctl status redis
komutu ile Redis servisinin durumunu kontrol etmekte fayda var.
Transparent Huge Page Devredışı Bırakma
Root:
nano /etc/systemd/system/disable-thp.service
nano ile yeni bir dosya açıp aşağıdaki satırları bu dosyaya kaydedip çıkıyoruz.
[Unit]
Description=Disable Transparent Huge Pages (THP)[Service]
Type=simple
ExecStart=/bin/sh -c "echo 'never' > /sys/kernel/mm/transparent_hugepage/enabled && echo 'never' > /sys/kernel/mm/transparent_hugepage/defrag"[Install]
WantedBy=multi-user.target
Dosya hazırlandıktan sonra servis harekete geçirilir.
systemctl daemon-reload
systemctl start disable-thp
systemctl enable disable-thp
GVM Kullanıcısının Redis Grubuna Eklenmesi
Root:
usermod -aG redis gvm
systemctl restart redis
GVM Kullanıcısının Belirlenen Klasörlerde Şifresiz İşlem Yapması
Root:
visudo /etc/sudoers
Komutunu çalıştırdıktan sonra dosyadaki secure_path içeriği aşağıdaki gibi değiştirilip; dosyanın sonuna da diğer üç satır kopyalanmalıdır.
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin:/opt/gvm/sbin"
#Allow the user running ospd-openvas, to launch openvas with root permissions
gvm ALL = NOPASSWD: /opt/gvm/sbin/openvas
gvm ALL = NOPASSWD: /opt/gvm/sbin/gsad
System Tuning Bits Düzenleme
Root:
echo "net.core.somaxconn = 1024" >> /etc/sysctl.conf
echo "vm.overcommit_memory = 1" >> /etc/sysctl.conf
sysctl -p
ldconfig
NVT Data Senkronizasyonu
GVM:
greenbone-nvt-sync
Bu komuttan sonra 25-30 dakika arası dinlenmeye çekilebilirsiniz. İşlem bittiğinde aşağıdaki komut ile kaç güncelleme yapıldığını görebilirsiniz. 60000 üzerinde bir sonuç almanız gerekiyor.
find /opt/gvm/var/lib/openvas/plugins | wc -l
vt info Güncellemesi
GVM:
openvas --update-vt-info
Build gvmd
Root:
ln -s /usr/include /usr/include/postgresql
GVM:
nano /opt/gvm/src/gvmd-21.4.0/CMakeLists.txt
Daha önce scanner derlemesinde yaptığımız gibi yine CMakeLists.txt dosyasında aşağıdaki düzenlemeyi yapmamız gerekiyor.
#set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -D_BSD_SOURCE -D_ISOC99_SOURCE -D_SVID_SOURCE -D_DEFAULT_SOURCE -D_FILE_OFFSET_BITS=64")
set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -lpq -D_BSD_SOURCE -D_ISOC99_SOURCE -D_SVID_SOURCE -D_DEFAULT_SOURCE -D_FILE_OFFSET_BITS=64")
Düzenlemenin ardından derlemeye geçilebilir.
cd /opt/gvm/src
export PKG_CONFIG_PATH=/opt/gvm/lib/pkgconfig
cd gvmd-21.4.0
mkdir build
cd build
cmake .. -DCMAKE_INSTALL_PREFIX=/opt/gvm/ -DPostgreSQL_TYPE_INCLUDE_DIR=/usr/include/pgsql/server -DPostgreSQL_INCLUDE_DIR=/usr/include/pgsql/server -DPostgreSQL_LIBRARY=/usr/lib64/pgsql
make
make doc
make install
gsa İçin yarn Kurulumu
Root:
npm install -g yarn
Build gsa
GVM:
cd /opt/gvm/src
export PKG_CONFIG_PATH=/opt/gvm/lib/pkgconfig
cd gsa-21.4.0
mkdir build
cd build
cmake .. -DCMAKE_INSTALL_PREFIX=/opt/gvm
make
make doc
make install
Kurulum tamamlandıktan sonra aşağıdaki komutlar ile güncellemeleri alıyoruz. Yine 15-20 dakika arası bir mola verebiliriz.
greenbone-scapdata-sync
greenbone-certdata-sync
greenbone-feed-sync --type GVMD_DATA
gvm-manage-certs -a
Build OSPd ve OSPd-Openvas
GVM:
mkdir -p /opt/gvm/lib/python3.8/site-packages
cd /opt/gvm/src
export PYTHONPATH=/opt/gvm/lib/python3.8/site-packages
export PKG_CONFIG_PATH=/opt/gvm/lib/pkgconfig
cd ospd-21.4.0
python3 setup.py install --prefix=/opt/gvm
cd /opt/gvm/src
export PYTHONPATH=/opt/gvm/lib/python3.8/site-packages
export PKG_CONFIG_PATH=/opt/gvm/lib/pkgconfig
cd ospd-openvas-21.4.0
python3 setup.py install --prefix=/opt/gvm
Bu aşamadan sonra gvm kurulum aşaması tamamlandı. Artık servis olarak cevap verebilmesi için gereken adımlara geçiyoruz.
Kurulum Script Ekleme
Sisteme yeni servisleri ekleyeceğimiz için işlemlerimize root olarak devam edip; nano ile 3 yeni dosya hazırlayıp aşağıdaki her bir scripti bu dosyalara kaydedeceğiz. Dosyalarda karışıklık olmasın diye çizgilerle ayrıldı. Kopyalama sırasında bu çizgiler dahil edilmeyecektir.
Root:
İlk dosya
nano /etc/systemd/system/ospd.service
[Unit]
Description=Job that runs the ospd-openvas daemon
Documentation=man:gvm
After=postgresql.service
[Service]
Environment=PATH=/opt/gvm/bin/ospd-scanner/bin:/opt/gvm/bin:/opt/gvm/sbin:/opt/gvm/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
Environment=PYTHONPATH=/opt/gvm/lib/python3.8/site-packages
Type=simple
User=gvm
Group=gvm
WorkingDirectory=/opt/gvm
PIDFile=/opt/gvm/var/run/ospd-openvas.pid
ExecStart=/usr/bin/python3 /opt/gvm/bin/ospd-openvas --pid-file /opt/gvm/var/run/ospd-openvas.pid --unix-socket /opt/gvm/var/run/ospd.sock --log-file /opt/gvm/var/log/gvm/ospd-openvas.log --lock-file-dir /opt/gvm/var/run
[Install]
WantedBy=multi-user.target
İkinci dosya
nano /etc/systemd/system/gvmd.service
[Unit]
Description=Job that runs the gvm daemon
Documentation=man:gvm
After=ospd.service
[Service]
Type=forking
User=gvm
Group=gvm
PIDFile=/opt/gvm/var/run/gvmd.pid
WorkingDirectory=/opt/gvm
ExecStartPre=/bin/sleep 60
ExecStart=/opt/gvm/sbin/gvmd --osp-vt-update=/opt/gvm/var/run/ospd.sock
[Install]
WantedBy=multi-user.target
Son olarak da 3. dosyayı hazırlıyoruz.
nano /etc/systemd/system/gsad.service
[Unit]
Description=Job that runs the gsa daemon
Documentation=man:gsa
After=postgresql.service
[Service]
Type=forking
PIDFile=/opt/gvm/var/run/gsad.pid
WorkingDirectory=/opt/gvm
ExecStart=/opt/gvm/sbin/gsad --listen=0.0.0.0
[Install]
WantedBy=multi-user.target
PDF Raporları İçin Gerekli Kurulum Adımları
Root:
yum -y install texlive-collection-fontsrecommended texlive-collection-latexrecommended texlive-changepage texlive-titlesec
mkdir -p /usr/share/texlive/texmf-local/tex/latex/comment
cd /usr/share/texlive/texmf-local/tex/latex/comment
wget http://mirrors.ctan.org/macros/latex/contrib/comment/comment.sty
chmod 644 comment.sty
texhash
Güncellemeler İçin Crontab Job Yaratma
Crontab normalde root ile çalışır. Aşağıdaki adımlar ile gvm kullanıcısının da güncellemeleri yapmasını sağlıyoruz.
Root:
touch /etc/cron.allow
rm /etc/cron.deny
echo "gvm" > /etc/cron.allow
GVM:
crontab -e
Aşağıdaki satırları kopyalayıp, kaydedip çıkıyoruz.
0 21 * * * /opt/gvm/bin/greenbone-nvt-sync
0 22 * * * /opt/gvm/sbin/greenbone-certdata-sync
0 23 * * * /opt/gvm/sbin/greenbone-scapdata-sync
Bu aşamada süreler değiştirilebilir.
Servislerin Etkinleştirilmesi ve Başlatılması
systemctl daemon-reload
systemctl enable ospd
systemctl enable gvmd
systemctl enable gsad
systemctl start ospd
systemctl start gvmd
systemctl start gsad
Logları aşağıdaki komutlar yardımıyla inceleyebilirsiniz.
cat /opt/gvm/var/log/gvm/gsad.log
cat /opt/gvm/var/log/gvm/gvmd.log
cat /opt/gvm/var/log/gvm/openvas.log
cat /opt/gvm/var/log/gvm/ospd-openvas.log
Centos 8 Üzerinde GVM 21.04 Kurulumu için genellikle ospd servisi sorun çıkarabiliyor. Bununda en büyük sebebi Redis ile iletişime geçememesinden kaynaklanıyor. Böylesi bir durumda her iki servisinde eş zamanlı kontrol edilmesi gerekebilir. Eğer redis çalışmıyorsa konfigürasyonlar baştan yapılmalıdır. Bende bu makale öncesinde bir kaç defa başa dönmek zorunda kaldım. Eklenen komutlar doğru şekilde girildiğinde sorunsuz çalışıyorlar. Bazen tırnak işaretlerinden kaynaklı sorunlar olabiliyor.
Varsayılan Tarayıcının Düzenlenmesi
Bu aşamada oluşturduğum Openvas Scanner’ı varsayılan tarayıcı durumuna getiriyoruz.
GVM:
gvmd --get-scanners
Bir aksilik yok ise karşımıza iki adet scanner gelecektir. Bizim kullanacağımız Openvas Scanner dönen ID değerleri standart, bu yüzden aşağıdaki komut doğrudan kullanılabilir.
gvmd --modify-scanner=08b69003-5fc2-4037-a479-93b440211c73 --scanner-host=/opt/gvm/var/run/ospd.sock
Son olarak
gvmd --verify-scanner=08b69003-5fc2-4037-a479-93b440211c73
Bu komut sonrasında dönen değer, Openvas Scanner’ın versiyon bilgisi ise kurulum sorunsuz tamamlanmış demektir. Eğer fail verdi ise ospd servisi çalışmıyor demektir.
Web Arayüzü için Kullanıcı Oluşturma
GVM:
gvmd --create-user admin
gvmd --user=admin --new-password=mypassword
–new-password olarak tanımlanan mypassword ibaresini değiştirmezseniz, parolanız “mypassword” olarak ayarlanacaktır.
https Erişimi için Firewall Kuralının Düzenlenmesi
Centos 8 Üzerinde GVM 21.04 Kurulumu sırasında bu işlemi yapmadıysanız web ara yüzüne erişimde sıkıntı yaşayabilirsiniz. Eğer isterseniz Firewall tamamıyla disable edilebilir ama ben bu yolu tercih etmedim. Aşağıdaki komutlar size erişim için gereken yolu açacaktır.
Root:
firewall-cmd --zone=public --permanent --add-service=https
firewall-cmd --reload
firewall-cmd --list-all
Son komut ile https erişimine izin verildiğini doğruladınız da aşağıdaki link ile ara yüze ulaşabilirsiniz.
Eğer Port Lists ve Scan Config Kısımları Boş Geliyorsa
Aşağıdaki komut ile var olan kullanıcının UUID bilgisi alınır.
gvmd --get-users --verbose
Belirlenen UUID aşağıdaki komutta USER_UUID ile değiştirilir ve komut çalıştırılır.
gvmd --modify-setting 78eceaec-3385-11ea-b237-28d24461215b --value USER_UUID
Son olarak; güncellemeler aşağıdaki komut ile yenilenirse, sorunun giderilebilir.
greenbone-nvt-sync
Bir sonraki yazıda görüşmek üzere…