SOC serisinin ikinci flood’unda Linux ve Windows işletim sistemlerinin temel mimarisini ele alacağız. Linux işletim sistemi ile başlayalım.
Temel Linux Mimarisi
Linux, Unix ortamının üzerine kurulmuş, neredeyse tüm bilgisayarlar için uygun olan, ücretsiz bir işletim sistemidir. 1991 yılında Linux’un babası olarak bilinen Linus Torvalds tarafından geliştirilmiştir. Linux, en çok bilinen ve en çok kullanılan açık kaynak kodlu olmasının yanı sıra hızlı, güvenilir ve küçüktür. Çalıştırmak için çok az donanım kaynağı gerektirir ve oldukça özelleştirilebilirdir. Windows ve Mac OS X gibi diğer işletim sistemlerinden farklı olarak, Linux bir programcılar topluluğu tarafından oluşturulmuştur. Linux, genellikle güvenlik operasyon merkezlerinde (SOC) tercih edilen bir işletim sistemidir. Açık kaynaklı olduğu için herhangi biri Linux işletim sistemini ücretsiz olarak edinebilir ve kendi ihtiyaçlarına göre şekillendirebilir. Bu esneklik analistlerin ve yöneticilerin özellikle güvenlik analizi için bir sistem oluşturmasına olanak tanır.
Temel Dosya Hiyerarşisi
Linux dosya hiyerarşisi sayesinde çok kullanıcılı ve dağıtık bir sistemi güvenli ve kolay bir şekilde kurup yönetebilmeye olanak sağlar. Linux, / (root) klasöründen başlayarak, boot işlemindeki önem sırasına göre klasörleri ilgili konumlara yerleştirir. Herhangi bir dizin ya da dosyanın sistemdeki adresi önce kök dizinden başlar sonra o dosya ya da dizine ulaşmak için geçilmesi gereken dizinler arasına yine / yazılarak elde edilir. Örneğin /home/alp yolu, kök dizininde (/), home isimli dizin içindeki alp dizininin konumunu belirtir.
- /bin: İşletim sistemimizi kullanmak için gereken birçok komutu içerir.
- /boot: Boot, işletim sisteminin yüklenme evresidir. Boot işlemi için gerekli olan tüm dosyaları içerir.
- /dev: Bütün aygıtlar bu klasörün altında tutulan dosyalardan ibarettir. Örneğin dev klasörü altında bulunan sda1 dosyası, sabit diskinizi temsil eder.
- /etc: İşletim sistemine özel konfigürasyon dosyalarını içerir.
- /home: Kullanıcılara ait ana dizindir. Burada her kullanıcının kendi adında bir alt dizinbulunur.
- /lib: Kernel modülleri ve paylaşılan kütüphane dosyaları bu klasörde bulunur.
- /media: Sistem üzerindeki Usb bellek gibi çıkarılabilir aygıtlara bu dizin üzerinden erişilebilir.
- /mnt: Sistem üzerindeki çeşitli birimleri geçici olarak bağlama işleminin yapıldığı dizindir. (UNIX komut satırında mount komutu işletim sistemine, dosya sisteminin kullanıma hazır olduğunu söyler ve onu dosya sistemini hiyerarşisinde belli bir bağlama noktası ile ilişkilendirir.)
- /opt: İsteğe bağlı yazılım paketleri için alt dizinler içerir. Genellikle derlediğiniz yazılımların bulunduğu yerdir.
- /proc: Sistem durumu ve işlemlerin durumlarını içerir. Bilgisayarınız hakkında, CPU’nuz ve Linux sisteminizin çalıştırdığı çekirdek gibi bilgiler içerir.
- /root: Linux tabanlı sistemlerde en yetkili kullanıcı olan root kullanıcısına ait verilerin saklanabileceği dizindir.
- /run: Çalışan dosyalarla ilgili bilgilerin tutulduğu dizindir.
- /sbin: Sistem binary komutlarını içerir. Superuser kullanıcısının çalıştırabileceyi uygulamaları içerir. Bu uygulamaları sudo komutu ile kullanabilirsiniz.
- /usr: Sistemdeki tüm kullanıcılara ait çalıştırabilir dosyaların, kütüphanelerin bulunduğu dizindir.
- /var: Sistemdeki tüm kayıtlar burada loglanır.
- /tmp: Temporary yani geçici anlamına gelmektedir. Uygulamalar tarafından geçici olarak tutulan dosyalar burada tutulur.
Linux Dosya İzinleri
Linux’ta çoğu sistem varlığı dosya olarak işlem görür. Sistemi düzenlemek ve bilgisayar içindeki sınırları yaratmak için dosya izinlerini kullanır. Dosya izinleri, dosya sistemi yapısında yerleşiktir ve her dosya için izinleri tanımlamak için bir mekanizma sağlar. Linux’taki her dosya, sahibin, grubun ve diğerlerinin dosyayla gerçekleştirebileceği eylemleri tanımlayan dosya izinlerini taşır. İzin hakları; okuma, yazma ve yürütmedir. ls -l komutu ile dosya izinleri incelenebilir.
-rwxr-xr-x 2 alp users 182 Feb 12 03:58 deneme
Satır başında bulunan — işareti düz dosya olduğunu belirtir. Sonrasında gelen r,w ve x karakterleri ise sırayla okuma(read, sayısal karşılığı 4), yazma (write, sayısal karşılığı 2) ve çalıştırma (execute, sayısal karşılığı 1) haklarını belirtir. Yukarıdaki dosyanın izinleri analiz ettiğimizde aşağıdaki yargılara ulaşabiliriz.
- rwx → kullanıcı okuyabilir, yazabilir, çalıştırabilir.
- r-x → grup okuyabilir, çalıştırabilir fakat yazamaz.
- rw- → diğerleri okuyabilir, yazabilir fakat çalıştıramaz.
Sonrasında gelen ‘alp’ ise dosyanın sahibini ve ‘users’ ise grubu belirtir. Ardından sırayla uzunluk, son değiştirilme tarihini ve dosya ismini belirtir. Dosyaların izinlerini ayarlamak için chmod komutu kullanılır. Örneğin;
chmod 644 alp
- Dosya sahibi 4+2=6 yani okuma ve yazma iznine sahiptir,
- Dosya sahibiyle aynı grup 4 yani sadece okuma iznine sahiptir,
- Diğer kullanıcılar 4 yani sadece okuma iznine sahiptir.
Dosya veya sizin sahibini değiştirmek için chown komutu kullanılır.
chown -R <users> alp
Penetrasyon testleri veya CTF’lerde root yetkisi elde etmek için privilege escalation ile yöntemi kullanılır.
Temel Linux Komutları
Linux komutları, belirli bir görevi gerçekleştirmek için oluşturulmuş küçük programlardır. Komutlar hakkında dokümantasyon elde etmek için man komutunu kullanabiliriz. Örnek olarak man ls, kullanım kılavuzundan ls komutu hakkında bilgileri gösterir. Komutlar diskte depolanan programlar olduğu için bir kullanıcı komut yazdığında, komut çalıştırılmadan önce kabuk (shell) onu diskte bulması gerekir. Kabuk tarafından kontrol edilen dizinlerin listesine path (yol) adı verilir.
- pwd: Dizin keşfi için kullanılır. Konum genellikle bir bölme işaretiyle (/) başlar.
- cd: Dosya sisteminde gezinmek için kullanılır. Linux kabuğu büyük küçük harfe duyarlı olduğu için dizinin adını olduğu gibi girmemiz gerekmektedir.
- ls: Dizin içeriğini görüntülemek için kullanılır. Gizli klasörleri de görmek için ls -a şeklinde kullanılabilir.
- cat: Linux’da sıklıkla kullanılan komutlardan biridir. Standart çıktıdaki bir dosyanın içeriğini görmek için kullanılır.
- cp: Mevcut dizinden dosyaları kopyalamak için kullanılır.
- mv: Bu komutun ana kullanımı dosyaları taşımaktır ancak dosyaları yeniden adlandırmak için de kullanılabilir.
- mkdir: Yeni bir dizin oluşturmak için kullanılır.
- rmdir: Dizin silmek için kullanılır. Ancak, sadece boş dizinleri silmemize izin verir.
- rm: Dizinleri içindekilerle birlikte silmek için kullanılır. Eğer sadece dizini silmek istersek, rmdir’e bir alternatif olarak rm -r kullanabiliriz.
- touch: Yeni boş dosyalar oluşturmak için kullanılır.
- locate: Windows’daki search komutu gibi bir dosyanın konumunu bulmak için kullanılır.
- grep: Belirli bir dosyadaki metinde arama yapmak için kullanılır.
- sudo: Komut yönetici veya kök izinlerini gerektiren görevleri yapmanıza izin verir.
- head: Herhangi bir metin dosyasının ilk satırını görüntülemek için kullanılır.
- tail: Bu komut head komutuna benzer bir fonksiyona sahiptir. İlk satırları göstermek yerine tail komutu bir metin dosyasının son satırını görüntüleyebiliriz.
- chmod: Dosyaların ve dizinlerin okuma, yazma ve çalıştırma izinlerini değiştirmek için kullanılır.
- chown: Bir dosyanın sahipliğini belirli bir kullanıcıya transfer etmek için kullanılır.
- kill: Eğer yanıt vermeyen bir program bu komutu kullanarak manuel olarak sonlandırabiliriz.
- uname: Linux sistemimiz hakkında bilgi almak istediğimizde kullanırız.
- nano: Popüler bir komut satırı metin düzenleyicisidir.
Sunucular, Hizmetler ve Portlar
Sunucu, bilgisayar ağlarında, istemcilerin erişebileceği, kullanımına ve paylaşımına açık kaynakları veya bazı servisleri çalıştıran bilgisayar birimlerine verilen genel bir addır. Her hizmet, ayrı sunucu yazılımı gerektirir. Örneğin, bir ağ üzerinde kullanıcıların ortak kullandıkları dosyaların bulunduğu sunucu bilgisayara file server (dosya sunucusu) denir.
Bir bilgisayarın birden fazla hizmet için sunucu olabilmesi için portlar kullanılır. Bağlantı noktası, bir hizmet tarafından kullanılan ayrılmış bir ağ kaynağıdır. Yönetici herhangi bir hizmetle hangi bağlantı noktasının kullanılacağına karar verebilirken, birçok istemci varsayılan olarak belirli bir bağlantı noktasını kullanacak şekilde yapılandırılmıştır. Genellikle kullanılan port numaraları aşağıda listelenmiştir.
- 20/21 FTP: Bilgisayarlar arasında dosya ve veri transferini sağlar.
- 22 SSH : Kullanıcılara, sunucularını internet üzerinden kontrol etmesini ve düzenlemesini sağlayan uzak yönetim protokolüdür. Şifrelenmeyen Telnet protokolü için güvenli bir alternatiftir.
- 23 Telnet : Kullanıcılara, sunucularını internet üzerinden kontrol etmesini ve düzenlemesini sağlayan uzak yönetim protokolüdür. Güvenlik nedeniyle önerilmemektedir.
- 25 SMTP: E-posta göndermek için kullanılır.
- 53 DNS: Host isimlerini IP’ye çevirmek için kullanılan bir sistemdir.
- 80 HTTP: Ağ üzerinden web sayfalarının görüntülenmesini sağlar.
- 110 POP3: E-postaları görüntüleyebilmek için kullanılır.
- 115 SFTP: SSH kullanarak dosya transferi yapan bir dosya aktarım protokolüdür.
- 135 RPC: Sunucu ve istemcilerin iletişimi için dizayn edilmiştir.
- 139 NetBios: Yerel ağ (LAN) üzerindeki farklı bilgisayarların birbirleriyle iletişim kurmasını sağlar.
- 143 IMAP: E-postaları görüntüleyebilmek için kullanılır.
- 443 SSL HTTP: Web sitelerin SSL ile güvenli bir bağlantı kurmasını sağlar.
- 445 SMB: Sunucu ve istemci arasındaki iletişimi sağlayan bir ağ protokolüdür. SMB protokolü, Windows sistemlerinin 139 ve 445 portlarını kullanarak, paylaşılan dosyalara erişimi, ağlar, yazıcılar ve çeşitli bağlantıları sağlar.
- 1521 Oracle Veritabanı Sistemi
- 3306 MySQL Veritabanı Sistemi
- 3389 RDP: Windows ortamında çalışan bir bilgisayar RDP kullanarak erişebiliriz.
- 5432 PostgreSQL Veritabanı Sistemi
Log Sistemi
Log dosyaları, bir bilgisayarın önemli olayları takip etmek için sakladığı kayıtlardır. Kernel, hizmetler ve uygulama olaylarının tümü günlük dosyalarına kaydedilir. Bir yöneticinin bir bilgisayarın sağlıklı kalması için günlüklerini düzenli aralıklarla gözden geçirmesi çok önemlidir. Bir yönetici, Linux günlük dosyalarını izleyerek bilgisayarın performansı, güvenlik durumu ve altta yatan sorunların net bir resmini elde eder. Günlük dosyası analizi, bir yöneticinin ortaya çıkabilecek sorunları ortaya çıkmadan önce önlemesini sağlar. Linux, / var / log dizini altında bulunabilen merkezi bir Log dosyaları deposu sağlar. Log arşivleme işlemine log rotasyonu denilir. Arşivleme genel olarak /etc/logrotate.conf dosyası içerisinden belirlenir. Daily, weekly veya monthly olarak loglama dönügüsü ayarlayabiliriz. Bir Linux ortamında oluşturulan log dosyaları genellikle dört farklı kategoride sınıflandırılabilir:
- Application Logs
- Event Logs
- Service Logs
- System Logs
Kritik Log Dosyaları
- /var/log/messages: Bu dizin, genel bilgisayar etkinlik günlüklerini içerir. Genellikle bilgi amaçlı ve kritik olmayan sistem mesajlarını depolamak için kullanılır.
- /var/log/auth.log: Kimlik doğrulamayla ilgili tüm olayları depolar. Kullanıcı yetkilendirme mekanizmasıyla ilgili her şey bu dosyada bulunabilir.
- /var/log/secure: Sudo girişlerini, SSH girişlerini ve SSSD tarafından kaydedilen diğer hataları içerir.
- /var/log/boot.log: Bilgisayar başlatma işlemi sırasında kaydedilen iletileri depolar.
- /var/log/dmesg: Donanım aygıtları ve sürücüleri ile ilgili bilgiler buraya kaydedilir. Çekirdek, önyükleme işlemi sırasında sunucuyla ilişkili fiziksel donanım aygıtlarını algıladığından, aygıt durumunu, donanım hatalarını ve diğer genel mesajları yakalar.
- /var/log/kern.log: Çekirdek tarafından kaydedilen bilgileri içerdiğinden çok önemli bir günlük dosyasıdır.
- /var/log/cron: Cron, Linux’ta otomatik görevleri planlamak için kullanılan bir hizmettir ve bu dizin olaylarını saklar. Zamanlanmış bir görev çalıştığında, yürütme durumu ve hata mesajları dahil olmak üzere ilgili tüm bilgileri burada saklanır.
- /var/log/httpd: Apache sunucusu tarafından kaydedilen logları içerir.
Apache sunucusu log bilgileri, error_log ve access_log olmak üzere iki farklı günlük dosyasında saklanır.
SOC Merkezinde Linux
Linux tarafından sağlanan esneklik, siber güvenlik olaylarını tespit etmek, analiz etmek ve bunlara karşı aksiyon almakla yükümlü olan SOC ekipleri için harika bir özelliktir. Tüm işletim sistemi, mükemmel bir güvenlik analizi platformu olacak şekilde uyarlanabilir. Örneğin, yöneticiler işletim sistemine yalnızca gerekli paketleri ekleyerek daha verimli hale getirebilir. SOC’de bulunan araçlar;
Network Capture Software (Ağ analiz yazılımları): Bir ağdaki tüm paketlerin ayrıntısını gözlemlemek ağda oluşan anomali tespiti açısından bir SOC analisti için çok önemlidir. Örneğin Wireshark yazılımı, ağ analizi için kullanılan popüler bir paket yakalama aracıdır. Wireshark ile gerçek zamanlı network analizi, veri paketleri ve kullandıkları protokollerin detaylı analizi, ağımızda oluşabilecek sorunların incelemesi ve istatistik oluşturmak için kullanabiliriz.
Malware Analiz Toolları: SOC ekibi, malware analizi yaparken sistemi tehlikeye atma riski olmadan ve malware yürütmesini güvenli bir şekilde çalıştırmasına ve gözlemlemesine olanak tanıyarak yapmalıdır. Bu yüzden dinamik malware analizleri için SandBox adı verilen izole sistemler kullanılır. Örnek olarak Remnux verilebilir.
IDS (Intrusion Detection System): IDS güvenlik sistemleri zararlı hareketi tanımlama ve loglama yapmak amacıyla gerçek zamanlı trafik izleme ve inceleme için kullanılır. Akan trafikte önceden tanımlanmış eylem gerektiren herhangi bir paket yakalanırsa aksiyon alınır.
Güvenlik Duvarları: Önceden tanımlanmış kurallara göre trafiğin bir ağa veya cihaza girmesine veya çıkmasına izin verilip verilmediğini belirtmek için kullanılır.
Log Managers: Olayları kaydetmek için günlük dosyaları kullanılır. Bir ağ çok fazla sayıda log girişi oluşturabildiğinden, log izlemeyi kolaylaştırmak için günlük yöneticisi yazılımları kullanılır.
SIEM (Security Information Event Management): SIEM’ler, IDS’ler ve güvenlik duvarları gibi ağ araçları tarafından oluşturulan uyarıların ve günlük girişlerinin gerçek zamanlı analizini sağlar.
Ticketing Sistemler: Ticket atama, düzenleme ve kaydetme, bir ticket management sistemi aracılığıyla yapılır. Güvenlik uyarıları genellikle ticket sistemi aracılığıyla analistlere atanır.
Hardening İşlemi
Hardening, cihazın güvenliğini sağlamak ve idari erişimini korumak için kanıtlanmış yöntemlerin uygulanmasını içerir. Bu yöntemlerden bazıları, parolaların korunmasını, gelişmiş uzaktan oturum açma özelliklerini yapılandırmayı ve SSH ile güvenli oturum açmayı içerir. Linux dağıtımına bağlı olarak, birçok hizmet varsayılan olarak etkindir. Bu tür hizmetleri durdurmak ve önyükleme sırasında otomatik olarak başlamamalarını sağlamak için hardening uygulanır. Hardening işlemlerinden bazıları:
- Fiziksel güvenliği sağlamak,
- Yüklü paketleri minimize etmek,
- Kullanılmayan hizmetleri devre dışı bırakmak,
- SSH kullanmak ve SSH üzerinden root girişini devre dışı bırakmak,
- Sistemi güncel tutmak,
- USB otomatik algılamayı devre dışı bırakmak.
Temel Windows Mimarisi
İlk bilgisayarlar, dosyaları oluşturmak ve yönetmek için bir disk işletim sistemi (DOS) gerektiriyordu. Microsoft, disk sürücüsüne erişmek ve işletim sistemi dosyalarını yüklemek için bir komut satırı arabirimi (CLI) olarak MS-DOS’u geliştirdi. Windows’un ilk sürümleri, Windows 1.0'dan başlayarak MS-DOS üzerinden çalışan bir Grafik Kullanıcı Arayüzünden (GUI) oluşuyordu. Disk işletim sistemi, bilgisayarı ve donanımını kontrol ediyordu. Daha sonra geliştirilen Windows işletim sistemleri, disk işletim sistemi olarak kabul edilemediği için ‘Yeni Teknolojiler’ anlamına gelen Windows NT üzerine kurulmuştur. İşletim sistemi, bilgisayarın ve donanımın kontrolündedir. NT, işlemciden bağımsız, çoklu işlem ve çoklu kullanıcı desteği sunan bir işletim sistemidir. Bu yönüyle tek kullanıcılı MS-DOS’tan çok farklıdır.
GUI, masaüstü olarak bilinen bir ana alana ve masaüstünün altında bulunan bir görev Çubuğuna sahiptir. Görev Çubuğu, başlat menüsünü, hızlı başlatma simgelerini ve bir bildirim alanını içerir.
İşletim sistemleri milyonlarca satır koddan oluşur. Yüklenen yazılım ayrıca milyonlarca satır kod içerebilir. Tüm bu kod ile birlikte güvenlik açıkları gelir. Güvenlik açığı, bir saldırgan tarafından bilgisayardaki bilgilerin uygulanabilirliğini azaltmak için yararlanılabilecek bazı kusur veya zayıflıklardır. Bir işletim sistemi güvenlik açığından yararlanmak için, saldırganın bu güvenlik açığından yararlanacak bir teknik veya araç kullanması gerekir. Saldırgan daha sonra bu güvenlik açığını, bilgisayarın amaçlanan tasarımının dışında bir şekilde davranmasını sağlamak için kullanabilir. Genel olarak amaç, bilgisayarın yetkisiz kontrolünü elde etmek, izinleri değiştirmek veya verileri değiştirmek veya çalmaktır.
Windows NT mimairisi kullanıcı modu ve çekirdek modu olmak üzere iki ana bileşenden oluşan katmanlı bir tasarımdır.
Hardware abstraction layer (HAL), donanım ve çekirdek arasındaki tüm iletişimi yöneten bir yazılımdır. Tüm bilgisayar üzerinde kontrol sahibidir ve giriş/çıkış isteklerini, belleği ve bilgisayara bağlı tüm çevre birimlerini yönetir.
Windows NT’nin mimarisi, kullanıcı modu ve kernel modu olmak üzere iki ana bileşenden oluşan katmanlı bir tasarımdır. Kısaca, user mode kullanıcıya ait uygulamaların execute edildiği moddur. Kernel mode ise çekirdeğe ait driver’ların execute edildiği moddur.
- Çekirdek modunda yürütülen kodun temel donanıma sınırsız erişim hakkı vardır ve herhangi bir CPU talimatını yürütebilir. Ayrıca herhangi bir bellek adresine doğrudan başvurabilir. Genellikle işletim sisteminin en güvenilir işlevleri için ayrılmış olup çekirdek modunda çalışan koddaki problemler tüm bilgisayarın çalışmasını etkileyecektir.
- Kullanıcı modu, çeşitli sistem tanımlı süreçler ve dll’lerden oluşmuştur. Burada çalışan uygulamalar donanım kaynaklarına erişmek için işletim sisteminden geçmelidir. Kullanıcı modu tarafından sağlanan izolasyon nedeniyle, kullanıcı modundaki kilitlenmeler yalnızca uygulama ile sınırlıdır ve kurtarılabilir.
Kullanıcı modunda, bir uygulamayı çalıştırdığımızda, uygulama için process oluşturulur ve bu processe uygulama için private virtual address space atanır. Bu alan özel olduğu için diğer uygulamalar bu alanı değiştiremez. Fakat kernel modda yukarıda bahsedilen private virtual address space olmadığı için çalışan bütün kodlar tek bir virtual adress space’i paylaşır. Bu yüzden bir driver crash olduğunda bütün işletim sistemi çökme tehlikesi ile karşı karşıya kalır.
Windows Dosya Sistemleri
Dosya sistemi, bilgisayarın sabit disk üzerindeki verileri düzenlemek için kullandığı temel yapıdır. İşletim sistemine bağlı olarak kullanabileceğimiz seçeneklerle kullanımda olan birçok farklı dosya sistemi vardır.
- NTFS : Çok büyük dosyaları ve bölümleri desteklemesinin yanında diğer işletim sistemleriyle çok uyumlu olduğu için günümüzde en popüler Windows dosya sistemi konumundadır. Ayrıca çok güvenilirdir ve kurtarma özelliklerini destekler.
- ExFAT : Usb flash sürücüler ve bellek kartları için optimize edilmiş bir dosya sistemi olarak tanıtılmıştır. Birçok farklı işletim sistemi tarafından desteklenen basit bir dosya sistemidir. Adresleyebileceği bölüm sayısı, bölüm boyutu ve dosya boyutunda sınırlamalara sahiptir, bu nedenle artık genellikle sabit sürücüler veya SSD’ler için kullanılmamaktadır.
- HFS+ : Apple tarafından kullanılmaya başlanmıştır. Windows HFS+ dosya sistemini desteklememesine rağmen dosya üzerindeki verileri okuyabilir.
- EXT : Linux tabanlı bilgisayarlarda kullanılmaktadır. Windows tarafından desteklenmemesine rağmen yardımcı yazılımlar yardımı ile bu dosya sistemindeki veriler okunabilir.
Windows Boot Süreci
İlk adım bilgisayarı kullanmak için güç düğmesine basıldığında başlar. Böylece bilgisayar içerisindeki donanım bileşenlerine güç sağlanır ve BIOS başlar. Sonraki işlem ise donanım aygıtlarının başlatıldığının ve bu aygıtların iletişim halinde olduğunun testidir, bu işleme POST adı verilir. Sistem diski keşfedildiğinde POST süreci sona erer. POST sürecindeki son talimat MBR’yi (Master Boot Record) aramaktır. MBR, işletim sistemini bulup yüklemekten sorumlu olan küçük bir programdır. Windows kurulumu bulunduktan sonra bootmgr.exe çalıştırılır. bootmgr.exe tüm sistemin belleği kullanabilmesi için gerçek moddan korumalı moda geçirir. Sonrasında önyükleme veritabanını(BCD) okunur. BCD, bilgisayarı başlatmak için gereken her türlü ek kodu içerir. Bilgisayar hazırda beklet durumundan çıkıyor ise önyükleme işlemi winresume.exe ile devam eder ve hiberfil.sys dosyasını okumasına izin verir. (Bilgisayar hazırda beklet durumuna alındığında güç kesilmeden önce veriler hafızaya değil HDD’de yer alan ‘hiberfil.sys’ dosyasında saklanır.) Bilgisayar cold start yapıyorsa, winresume.exe yerine winload.exe dosyası çalıştırılır. winload.exe dosyası, kayıt defterinde donanım yapılandırmasının bir kaydını oluşturur. Registry, bilgisayarın sahip olduğu tüm ayarların, seçeneklerin, donanımların ve yazılımların bir kaydıdır. winload.exe ayrıca tüm sürücülerin dijital olarak imzalandığından emin olmak için KMCS (kernel mode code signing) kullanır. Bu yöntem sürücülerin güvenli bir şekilde yüklenmesini sağlar. İnceleme süreci tamamlandıktan sonra winlaod.exe dosyası windows çekirdeğini başlatan ve HAL’i kuran ntoskrnl.exe adlı dosyayı çalıştırır. Son olarak SMSS (session manager subsystem) kullanıcı ortamını oluşturmak için Registry’i okur ve Winlogon hizmetini başlatır. Oturum açan kullanıcının masaüstü hazırlanır.
wininit.exe, Windows Başlatma işleminin yürütülmesinden sorumludur.
lsasss.exe, kullanıcı kimlik doğrulamasından sorumlu ana bileşendir ve windows işletim sistemlerinde güvenlik politikalarının uygulanmasından sorumludur.
svchost.exe, dll dosyalarından başlatılan işlemlerin yürütülmesini sağlayan bir sistem uygulamasıdır.
Processler ve Hizmetler
Bir Windows uygulaması süreçlerden oluşur. Uygulama, kendisine ayrılmış bir veya daha fazla işleme sahip olabilir. İşlem, halihazırda yürütülen herhangi bir programdır. Çalışan her işlem en az bir iş parçacığından oluşur. İş parçacığı, yürütülebilen sürecin bir parçasıdır. İşlemci, iş parçacığı üzerinde hesaplamalar yapar. Windows işlemlerini yapılandırmak için görev yöneticisini kullanabiliriz.
Windows’un çalıştırdığı işlemlerden bazıları hizmetlerdir. Bunlar, işletim sistemini ve uygulamaları desteklemek için arka planda çalışan programlardır. Windows yüklendiğinde otomatik olarak başlayacak şekilde ayarlanabilir veya manuel olarak başlatılabilirler. Ayrıca durdurulabilir, yeniden başlatılabilir veya devre dışı bırakılabilirler. Hizmetler, kablosuz bağlantı veya bir FTP sunucusuna erişim gibi uzun süreli işlevsellik sağlayabilirler.
Bir bilgisayar, talimatları CPU tarafından işlenene kadar RAM’de saklayarak çalışır. Bir işlemin sanal adres alanı, işlemin kullanabileceği sanal adresler kümesidir. Sanal adres, bellekteki gerçek fiziksel konum değil, sanal adresi fiziksel adrese çevirmek için kullanılan sayfa tablosundaki bir giriştir.
Her kullanıcı adres processi, diğer kullanıcı alanı işlemlerinden ayrı olarak özel bir adres alanında çalışır. Kullanıcı adres proses’i kernel kaynaklarına erişmesi gerektiğinde, process handle tekniğini kullanır. Bunun nedeni, kullanıcı alanı işleminin bu kernel kaynaklarına doğrudan erişmesine izin verilmemesidir. Process handle, kullanıcı alanı işlemine doğrudan bir bağlantı olmadan ihtiyaç duyulan erişimi sağlar. RAMMap aracı ile bellek kullanımını detaylı olarak inceleyebiliriz.
The Windows Registry
Windows, donanım, uygulamalar, kullanıcılar ve sistem ayarları hakkındaki tüm bilgileri Registry olarak bilinen büyük bir veri tabanında depolar. Bir uygulamanın hangi dosyaları açtığını ve klasörlerin veya uygulamaların tüm özellik ayrıntıları gibi bu nesnelerin etkileşim biçimleri de kaydedilir. Regedit.exe ile konfigürasyonu yapılabilir.
- HKEY_CURRENT_USER (HKCU): Şu anda oturum açmış kullanıcıyla ilgili bilgileri tutar.
- HKEY_USERS (HKU): Ana bilgisayardaki tüm kullanıcı hesaplarıyla ilgili bilgileri tutar.
- HKEY_CLASSES_ROOT (HKCR): Nesne bağlama ve katıştırma (OLE) kayıtlarıyla ilgili bilgileri tutar. OLE, kullanıcıların diğer uygulamalardan (bir elektronik tablo gibi) nesneleri tek bir belgeye (bir Word belgesi gibi) yerleştirmesine olanak tanır.
- HKEY_LOCAL_MACHINE (HKLM): Sistemle ilgili bilgileri tutar.
- HKEY_CURRENT_CONFIG (HKCC): Mevcut donanım profiliyle ilgili bilgileri tutar.
İşletim sistemi açılışında, registry’de bulunan girdilere göre sürücüler ve servisler otomatik olarak başlamaktadır. Malware’ler kalıcılık sağlamak amacıyla enfekte olduğu bilgisayarın registry kayıtlarında değişiklik yapabilirler. Registery değişiklikleri tespitinde, açık kaynak kodlu Regshot yazılımı veya benzeri yazılımlar kullanılabilir.
CLI ve PowerShell
Windows komut satırı arayüzü (command line interface) programları çalıştırmak, dosya sisteminde gezinmek ve dosya ve klasörleri yönetmek için kullanılabilir. Ek olarak, toplu iş dosyaları olarak adlandırılan dosyalar, temel bir komut dosyası gibi arka arkaya birden çok komutu yürütmek için oluşturulabilir.
CLI birçok komuta ve özelliğe sahip olsa da, Windows veya GUI çekirdeği ile birlikte çalışamaz. Windows PowerShell, normal CLI’nın oluşturamadığı görevleri otomatikleştirmek için komut dosyaları oluşturmak için kullanılabilir. PowerShell ayrıca komutları başlatmak için bir CLI sağlar. PowerShell, Windows içinde entegre bir programdır. CLI’de olduğu gibi PowerShell de yönetici ayrıcalıklarıyla çalıştırılabilir. Powershell’in yürütebileceği komut türleri:
- Cmdlets: Bu komutlar bir eylem gerçekleştirir ve yürütülecek sonraki komuta bir çıktı veya nesne döndürür.
- PowerShell betikleri: Bunlar, çalıştırılan PowerShell komutlarını içeren .ps1 uzantılı dosyalardır.
- PowerShell fonksiyonları: Bunlar, bir komut dosyasında başvurulabilen kod parçalarıdır.
Penetrasyon testlerinde yoğun olarak Powershell kullanılır.
Windows Güvenliği
- Netstat Komutu
Bir bilgisayarda kötü amaçlı yazılım bulunduğunda, genellikle veri gönderip almak için ana bilgisayardaki iletişim bağlantı noktalarını açar. Netstat komutu, yetkili olmayan gelen veya giden bağlantıları aramak için kullanılabilir. Kendi başına kullanıldığında tüm aktif TCP bağlantılarını görüntüleyecektir.
netstat -abno
Aktif TCP bağlantılarını inceleyerek, ana bilgisayarda gelen bağlantıları dinleyen herhangi bir şüpheli program olup olmadığını belirlenebilir. Ayrıca bu işlemi Windows Görev Yöneticisine kadar izleyebilir ve işlemi iptal edebilirsiniz. Aynı adla listelenen birden fazla işlem olabilir. Bu durumda, doğru işlemi bulmak için PID’yi kullanırız. Çünkü, bilgisayarda çalışan her işlemin benzersiz bir PID’si vardır.
2. Event Viewer
Windows Event Viewer uygulama, güvenlik ve sistem olaylarının geçmişini günlüğe kaydeder. Bu günlük dosyaları, bir sorunu tanımlamak için gerekli bilgileri sağladıkları için değerli bir sorun giderme aracıdır. Windows, iki olay günlüğü kategorisi içerir. Bu günlüklerde görüntülenen olayların bir düzeyi (bilgi, uyarı, hata veya kritik) vardır. Ayrıca olayın meydana geldiği tarih ve saate, olayın kaynağı ve bu tür olayla ilgili bir kimlik bilgisine sahiptirler.
3. Windows Güncelleme Yönetimi
Saldırganlar sürekli olarak bilgisayarları tehlikeye atmanın ve zararlı kodlardan yararlanmanın yeni yollarını bulmaktadır. Daha önceden bilinmeyen veya tespit edilmemiş ancak ciddi saldırılara yol açacak zafiyetler barındıran yazılım veya donanım kusurları olarak nitelendirdiğimiz zero-day zafiyetleri bu duruma verilecek en iyi örnekler arasındadır. Microsoft ve güvenlik yazılımı geliştiricileri her zaman saldırganların önünde kalmaya çalışmaktadırlar. Bu saldırılara karşı en üst düzeyde koruma sağlamak için, Windows’un her zaman en son hizmet paketleri ve güvenlik yamalarıyla güncel olduğundan emin olmalıyız.
4. Local Security Policy
Security policy, bir kuruluştaki bir ağın, verilerin ve bilgisayar sistemlerinin güvenliğini sağlayan bir dizi hedeftir. Güvenlik politikası, teknoloji, iş ve çalışan gereksinimlerindeki değişikliklere dayalı olarak sürekli gelişen bir belgedir.
Windows bilgisayarları kullanan çoğu ağ içerisinde Active Directory yapılandırılır. Windows bilgisayarlar etki alanına katılır. Yönetici, etki alanına katılan tüm bilgisayarlar için geçerli olan bir domain security policy yapılandırır. Bir kullanıcı bir etki alanının üyesi olan bir bilgisayarda oturum açtığında hesap ilkeleri otomatik olarak ayarlanır. Windows local security policy, bir Active Directory etki alanının parçası olmayan bağımsız bilgisayarlar için de kullanılabilir.
5. Windows Defender
Kötü amaçlı yazılımlar arasında virüsler, solucanlar, truva atları, keyloggerler, casus yazılımlar ve reklam yazılımları bulunur. Bunlar gizliliği ihlal etmek, bilgileri çalmak, bilgisayara zarar vermek veya verileri bozmak için tasarlanmıştır. Bilgisayarları ve mobil cihazları, güvenilir kötü amaçlı yazılımdan koruma yazılımları kullanarak korunmanız önemlidir. Birçok kötü amaçlı yazılımdan koruma program türü mevcuttur.
- Antivirüs koruması: Sürekli olarak virüsleri izler. Bir virüs algılandığında kullanıcı uyarılır ve program virüsü karantinaya almaya veya silmeye çalışır.
- Reklam yazılımı koruması: Bilgisayarınızda sürekli olarak reklam gösteren programları arar.
- Kimlik avı koruması: Bilinen kimlik avı web sitelerinin IP adreslerini engeller ve kullanıcıyı şüpheli siteler konusunda uyarır.
- Casus yazılım koruması: Keyloggerler ve diğer casus yazılımları tarar.
- Güvenilen/güvenilmeyen kaynaklar: Bu program, ziyaret edilmeden önce güvenli olmayan programların yüklenmesi veya güvenli olmayan web siteleri konusunda sizi uyarır.
Windows işletim sistemi üzerinde kullanabileceğimiz ekstra güvenlik önerileri:
- Windows Defender her zaman açık olmalıdır.
- Bilinmeyen veya tanınmayan kaynaklı yazılımlar yüklenmemelidir. Herhangi bir Windows servisini kullanırken perde arkasında birçok proses çalışabilir, arka planda çalışan kaynağı doğrulanmayan bir hizmet bizi bilgisayar saldırılarına açık hale getirebilir.
- Verilerin kolayca toplanıp ele geçirilmemesi için şifrelenmelidir.
- Güvenlik politikaları yapılandırılmalı ve izlenmelidir.
- Windows default olarak ağdaki cihazlarla iletişimi sınırlandırmak için Windows Güvenlik Duvarını kullanır. Güvenlik duvarlarında rule-set’ler belirli bir zaman sonra artık geçerli olmayabilir. Bu yüzden güvenlik duvarı ayarları düzenli olarak gözden geçirilmelidir.
- Dosya ve paylaşım izinleri doğru şekilde ayarlanmalıdır. Her kullanıcıya veya gruba tüm dosyalar ve klasörler için gerekli minimum izinleri sağlamak önerilir.
- Tüm hesapların, özellikle yöneticilerin güçlü bir parolaya sahip olduğundan emin olmak çok önemlidir.