Pentest ekiplerinin kullandığı Kali dağıtımı ile Linux dünyasına giriş dökümanıdır. Bu döküman; güvenlik alanına giriş yapmak isteyen insanların Türkçe kaynak problemini gidermeyi amaçlayarak hazırlanmıştır. Bu açık kaynak projesine katkı sağlamak isteyen gönüllü linux kullanıcıları ise bize ulaşabilirler. Yazım hatası, anlam karmaşası, yanlış bilgi veya iyileştirmeler için mehmet.ince@intelrad.com adresine mail atabilirsiniz. İyi çalışmalar.
Bu sunum web uygulamalarının kritikliği ne kadar düşük olursa olsun uygulama açıklıklarının sistem ve ağ güvenliğini tehdit edebileceğini göstermektedir.
Kitabımızın ilk 3 bölümünü içermektedir.
BÖLÜM 1: NETWORK FORENSİC
• Port Tarama Trafik Paket Analizi
• Host Keşif Trafik Analizi
• Ağ Trafiğinde Dosya Türleri Tespiti
• HTTP Trafiğinde Filtreler
• HTTP Brute Force Saldırı Analizi
• MITM Saldırı Analizi
• MYSQL Brute Force Saldırı Analizi
• SQL Injection Saldırı Analizi
• Yerel Ağ Sızma Testi Analizi
• Zararlı Dosya Transfer Analizi
• Web Shell Tespiti
BÖLÜM 2: MALWARE KAYNAK KOD ANALİZ
• C Keylogger Kaynak Kod Analizi
• C Reverse Shell Kaynak Kod Analizi
• Python Keylogger Kaynak Kod Analizi
• Python Reverse Shell Kaynak Kod Analizi
BÖLÜM 3: MALWARE TEMEL STATİK ANALİZ
• C Keylogger Temel Statik Analiz
• C Reverse Shell Temel Statik Analiz
• Python Reverse Shell Temel Statik Analiz
• Temel Statik Malware Analiz Teknikleri
• PMA Lab 01-04 Temel Statik Analizi
• PMA Lab 01-02 Temel Statik Analizi
• PMA Lab 01-03 Temel D-Statik Analizi
Pentest ekiplerinin kullandığı Kali dağıtımı ile Linux dünyasına giriş dökümanıdır. Bu döküman; güvenlik alanına giriş yapmak isteyen insanların Türkçe kaynak problemini gidermeyi amaçlayarak hazırlanmıştır. Bu açık kaynak projesine katkı sağlamak isteyen gönüllü linux kullanıcıları ise bize ulaşabilirler. Yazım hatası, anlam karmaşası, yanlış bilgi veya iyileştirmeler için mehmet.ince@intelrad.com adresine mail atabilirsiniz. İyi çalışmalar.
Bu sunum web uygulamalarının kritikliği ne kadar düşük olursa olsun uygulama açıklıklarının sistem ve ağ güvenliğini tehdit edebileceğini göstermektedir.
Kitabımızın ilk 3 bölümünü içermektedir.
BÖLÜM 1: NETWORK FORENSİC
• Port Tarama Trafik Paket Analizi
• Host Keşif Trafik Analizi
• Ağ Trafiğinde Dosya Türleri Tespiti
• HTTP Trafiğinde Filtreler
• HTTP Brute Force Saldırı Analizi
• MITM Saldırı Analizi
• MYSQL Brute Force Saldırı Analizi
• SQL Injection Saldırı Analizi
• Yerel Ağ Sızma Testi Analizi
• Zararlı Dosya Transfer Analizi
• Web Shell Tespiti
BÖLÜM 2: MALWARE KAYNAK KOD ANALİZ
• C Keylogger Kaynak Kod Analizi
• C Reverse Shell Kaynak Kod Analizi
• Python Keylogger Kaynak Kod Analizi
• Python Reverse Shell Kaynak Kod Analizi
BÖLÜM 3: MALWARE TEMEL STATİK ANALİZ
• C Keylogger Temel Statik Analiz
• C Reverse Shell Temel Statik Analiz
• Python Reverse Shell Temel Statik Analiz
• Temel Statik Malware Analiz Teknikleri
• PMA Lab 01-04 Temel Statik Analizi
• PMA Lab 01-02 Temel Statik Analizi
• PMA Lab 01-03 Temel D-Statik Analizi
BTRisk Android Mobil Uygulama Denetimi Eğitimi sunumumuz aşağıdaki ana konu başlıklarından oluşmaktadır:
Mobil Uygulama Mimarisi
-Android İşletim Sistemi
-Android Rooting
-Android Güvenlik Mimarisi
-Uygulama Dili Dönüşümleri
-Dalvik Virtual Machine
ARM (Advanced Risk Machines) Mimamrisi
Mobil Uygulama Fonksiyonalitesi
Androdi Uygulama Bileşenleri
Uygulama Erişim İzinleri
Android Hacking Metodları
-Root Kontrolünü Aşma Yöntemleri
-SSL Pinning Atlatma Yöntemleri
-Android Debug Altyapısı
-Kritolu Verilerin Okunması
-IPC (Inter Process Communication) Saldırıları
-Cihaz Üzerinde Saklanan Bilgiler
-Cihaz Loglarından Sızan Bilgiler
Obfuscation (Karmaşıklaştırma) Yöntemleri
Ekran Resmi Çekme ve Recent Apps Ekran Görüntüleri
Kontrolsüz Gönderilen Broadcast Mesajları
Açık Kaynak Sistemlerle Siber Saldırı Gözlemleme Sistemi Kurulum ve YönetimiBilgiO A.S / Linux Akademi
Bir siber saldırı gözlemleme sisteminin özellikleri nelerdir, bu konuda ihtiyaçlar nelerdir ve Ossec, Snort, Elasticsearch, Logstash ve Kibana açık kaynak kod uygulamaları ile bu sistemin hayata geçirilmesini anlatan sunum.
Unix Denitim Dokümanımız aşağıdaki konu başlıklarını içermektedir:
Unix Temelleri
-Shell
-Dosya Sistemi
-Dosya-Dizin Yapıları ve Yetkiler
-Dosya ve Klasör Yönetimi
-Process
-Ağ Servisleri
-Kullanıcı Yönetimi
-Görev Zamanlayıcı (Cron)
-Loglama
-Manual Sayfaları
Unix Sistem Güvenliği Kontrolleri
-Network Servisleri
-Uzak Erişim kontrolleri
-Kritik Dosya ve Komut Erişimleri
-Süreç Takibi
-Sistem Kullanıcılıarı
-Kimlik Doğrulama
-Kapasite ve Sistem Performans Takibi
-Güvenlik Kontrolleri ile İlgili İpuçları
Yazılım Güvenliği Yönetimi Eğitimimiz aşağıdaki konu başlıklarını içermektedir:
Güvenli Yazılım Geliştirme Modelleri
-TOUCHPOINTS
-Secure Development Lifecycle (Microsoft)
-CLASP (Comprehensive, Lightweight Application Security Process)
Risk Yönetimi
Güvenlik Gereksinim Analizi
Teknik Riskler
Sızma Testi ve Statik Kod Analizi
Güvenlik Operasyonu
OWASP/TR Mobil Güvenlik Çalıştayı, Android Uygulamalara Zararlı Yazılım Yerlestirme Sunumu
Android Uygulamara Zararlı Yazılım Yerleştirme konusuda daha fazlasını öğrenmek için tıklayınız. http://blog.btrisk.com/2015/08/android-uygulamalara-malware-yerlestirme-1.html
Bilgi güvenliğinin maliyeti güvenlik harcamaları ile oluşan güvenlik olaylarının maliyetlerinin toplamından oluşmaktadır. Güvenlik harcamaları ile güvenlik olaylarının maliyetleri arasında ise ters ortantı bulunmaktadır. Ancak harcamaların öncelikli alanlara yapılmaması durumunda olayların optimum miktarda azaltılamaması ile sonuçlanabilir.
ISO27001, bilgi güvenliği problemlerinin ele alınmasını ve yönetilmesini destekleyen bir yönetim sistemi standardıdır. Belgelendirmeye tabi tutulması, düzenleyiciler tarafından düzenlemelere konu edilmesi, bilgi paylaşımını gerektiren tedarik süreçlerinde şartname şartlarından biri haline gelmesi nedeniyle popülerliği gittikçe artan bir standarttır.
Web uygulamaları dağıtım kolaylığı nedeniyle masaüstü uygulamalara üstünlük sağlamış ve geniş uygulama alanı bulmuştur. Bunun yanı sıra internete açık olan uygulamaların önemli bir kısmı da web uygulaması şeklindedir. Web uygulaması olmayan masaüstü uygulamalar ve mobil uygulamalar dahi web uygulama mimarisinin önemli bir kısmı olan HTTP protokolünü kullanmaktadır.
Bunların yanı sıra web uygulamaları çok katmanlı mimariye sahip olup, bu durum nispeten web uygulama altyapılarının sıradan masaüstü uygulamalara nazaran karmaşık olmalarına neden olmaktadır.
Tüm bu nedenlerden dolayı web uygulamaları saldırganların gözde hedeflerinden birisidir.
Web uygulama denetimi eğitiminde katılımcılara web uygulamalarında ortaya çıkabilecek açıklıkların neler olduğu, bu açıklıkları nasıl tespit edebilecekleri ve açıklıkların ortadan kaldırılma yöntemleri aktarılmaktadır.
Web uygulama denetimi eğitimi, mobil uygulama denetimi yapacak katılımcılara da gerekli temel web teknolojileri bilgilerini aktarmayı hedeflemektedir.
Bilgi sistemlerine yönelik veya bilgi sistemleri kullanılarak işlenen suçlar ve gerçekleştirilen saldırılar bu sistemler üzerinde izler bırakmaktadır. Ayrıca sistem hafızalarında ve ağ üzerinde söz konusu aktivitelere ilişkin canlı analiz ile işlenen suçların izleri gözlenebilmektedir.
Bilgi sistemleri üzerindeki kalıcı ve geçici suç izlerinin elde edilmesi ve analizi için çoğunlukla ticari adli bilişim çözümlerinin kullanılması gerekmektedir. Bunun sebebi incelenecek verilerin çokluğu ve bu büyüklükteki verilerin manuel yöntemlerle makul bir zaman aralığında incelenememesidir.
Ticari çözümler kullanım kolaylığı sağlayabilmek için pek çok teknik detayı kullanıcılardan gizlemektedirler. Ancak kullanıcıların temel teknik bilgilere sahip olmaması uzmanlıklarının sınırlanmasına ve olası problemlere karşı etkili çözümler geliştirememelerine yol açmaktadır.
Web uygulamaları dağıtım kolaylığı nedeniyle masaüstü uygulamalara üstünlük sağlamış ve geniş uygulama alanı bulmuştur. Bunun yanı sıra internete açık olan uygulamaların önemli bir kısmı da web uygulaması şeklindedir. Web uygulaması olmayan masaüstü uygulamalar ve mobil uygulamalar dahi web uygulama mimarisinin önemli bir kısmı olan HTTP protokolünü kullanmaktadır.
Bunların yanı sıra web uygulamaları çok katmanlı mimariye sahip olup, bu durum nispeten web uygulama altyapılarının sıradan masaüstü uygulamalara nazaran karmaşık olmalarına neden olmaktadır.
Tüm bu nedenlerden dolayı web uygulamaları saldırganların gözde hedeflerinden birisidir.
Web uygulama denetimi eğitiminde katılımcılara web uygulamalarında ortaya çıkabilecek açıklıkların neler olduğu, bu açıklıkları nasıl tespit edebilecekleri ve açıklıkların ortadan kaldırılma yöntemleri aktarılmaktadır.
Web uygulama denetimi eğitimi, mobil uygulama denetimi yapacak katılımcılara da gerekli temel web teknolojileri bilgilerini aktarmayı hedeflemektedir.
www.btrisk.com
2. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri
KALİLİNUX HAKKINDA HERŞEY
1
İçindekiler
I. Kali Nedir .............................................................3
II.Linux Shell Ortamı................................................7
III.Dosya Sistemi Temel Bilgiler ...............................38
IV. Shell Scripting .................................................57
V. Shell History.......................................................69
VI. Manuel Dosyaları............................................72
VII. Kullanıcı Yönetimi...........................................75
VIII. Ağ Yönetimi ..................................................90
IX. Kablosuz ağ yönetimi.....................................105
X. Linux bilgisayarı router haline getirme ..............121
XI. Ağ teşhis araçları...........................................126
XII. Ağ paketleri izleme araçları...........................130
XIII. Sistem boot süreci ve servis yönetimi...........135
XIV. Zamanlı İşler................................................166
XV. Log altyapısı.................................................183
XVI. IPTABLES.....................................................202
XVII. Arşivleme...................................................205
XVIII. Uygulama Kurulumu..................................209
XIX. Performans ve Kapasite İzleme ....................234
XX. Mount Etme, Dosya Sistemi ve Dosya Paylaşımları
242
4. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri
KALİLİNUX HAKKINDA HERŞEY
3
I. Kali Nedir
Kali bir(genel amaçlıkonulardaDebianpaketleri bazalınarakoluşturulmuş)Linux dağıtımıdır,ancak
genel amaçlıolmayıpözelliklesızmatesti,adli bilişimve tersinemühendislikamaçlarıylakullanılmak
üzere özelleştirilmiştir.Bualanlailgilenenhemenherkesinmalumuolmaklabirliktebualanayeni ilgi
duyanlariçinenbaşta netleştirmekte faydagördüğümbirkonuKali içinde yeralanaraçlarınkendi
geliştiricileriolduğu,Kaliekibininbuaraçlariçinde seçtiklerini (tabilisanshaklarıbunaizinveriyorsa) Kali
dağıtımına dahil ettikleridir.Kali tümaraçlarıntekrar incelenmesi ve neredeyse sıfırdanbirsızmatesti
platformuolarakgeliştirilmişolmasınarağmenyine aynıgruptarafındangeliştirilmişolanBacktrack
dağıtımının mirasçısıdır. Kali’nin araçlaraçısından genel eğilimdenfarklılaştığıbirnoktasadece DOS,
DDOS ve anoniminterneterişimine özel araçlarıgenellikle yasal projelerdekullanılmadıklarıgerekçesiyle
dışlamışolması ve barındırmamasıdır.
Resmi sitesi https://www.kali.orgolankali dağıtımıile ilgili dokümantasyonve indirme linklerine bu
sitedenerişebilirsiniz.
Debianstandartlarınabağlıkalınarak özelleştirilmişbudağıtımın kernel seviyesinde ve güvenlikaraçları
uygulamakodlarıseviyesinde gerekligörülenpekçokirili ufaklıözelleştirme yapılmıştır.Yani herhangi
bir linux işletimsistemi alınaraküzerinearaçlarbasitbirşekilde kurulmamıştır.Çoğunluğuaçıkkaynak
kodluaraçlardanoluşangüvenlikyazılımpaketleriile ilgili bilgi ve yamalinklerinehttp://tools.kali.org
websitesindenulaşabilirsiniz.
Kali açık bir platformdur.Kali’ninkernel’ınıve Kali üzerinde kurulugüvenlikaraçlarındankaynakkodu
mevcutolanpaketlerinkaynakkodlarınıDebianuygulamaindirme araçlarıile indiripihtiyaçlarınızagöre
değiştirerektekrarderleyebilirsiniz.Bunapekihtiyacınızolmazmışgibi görünebilir,ancaközelliklesızma
testi bulgularınızınfalse pozitif olduğuiddiaedildiğindetespitinize yol açan aracın nasıl çalıştığını
anlamakisteyebilirsiniz.Bazıdurumlardadaaracı özelleştirme ihtiyacınızolabilir.Örneğinkullanıcı
tespiti açıklığınıbulanbir araç kısıtlı sayıda kullanıcıyıçekiyorduramasiz dahafazlakullanıcı tespit
etmekisteyebilirsiniz.
Bununlabirlikte doğasıitibarıylapekçoksaldırı aracı barındıran bu dağıtımın geliştirici kadrosuçokgeniş
tutulmamış,tümpaketlergeliştiricilertarafındanve de ekiptarafındanimzalanmakta,paketdağıtım
repository’leri de enazdatutulmuştur. Buaçıdan açık platformözelliği,güvenlikihtiyacınedeniyle,
kısıtlanmışgibi görülebilir.Ayrıcasource listenize diğerrepository’lerineklenmesihemgüvenlikhemde
sistemintopluolarakfonksiyonalitesininbozulmamasıiçinönerilmemektedir.Zirapek çokfarklıgüvenlik
aracının farklıkütüphane versiyonlarıkullanmasıve kurulumlarısırasındayapabilecekleri değişiklikler
birbirlerini olumsuzetkileyebilir.Kali’yitümbukurulumve birlikteçalışmauyumproblemlerinden
arındırılmış bir platformolarakdüşünebilirsiniz.Eğerstandartbirlinux dağıtımı üzerine farklıaraçlar
kurmakveyakaynakkodundanderlemekgibi birdeneyiminizolduysabusöylenenlerdahaiyi
anlaşılacaktır.Uzun sözünkısası elinizinaltındaKali olsadasıradan biryazılımın denenmesiamacıylabile
Kali’ninkullanımıönerilmemektedir.Busadece mevcutyazılımlarınçalışmasınıetkilemesiaçısındandeğil
kuracağınız yazılımın da çalışmaması riskininbulunmasındankaynaklanmaktadır.
Kali’nindiğerlinux dağıtımlarındanbellibaşlıfarklarışunlardır:
Tekkullanıcı ve “root” kullanıcısıolarakkullanılmaküzere tasarlanmıştır.Buyaklaşımnormal
5. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri
KALİLİNUX HAKKINDA HERŞEY
4
sunuculariçingüvenlikaçısındansakıncalıdır.Ancakkali’de kullanılanaraçlarınönemli birkısmı
root erişimhaklarınaihtiyaçduyurmakta ve herdefasındasudoyapmaktankurtulmakiçinbu
yaklaşımkullanılmaktadır.
Kali genel amaçlıbirdağıtım değildirve bunedenleağservisi vermesi de beklenmez.Buyüzden
sistembaşlangıçkonfigürasyonlarıtümservislerkapalıolacakşekildedir.Elbette sizservisleri
açabilirve bunlarıher rebootişlemindensonraaktif hale gelecekşekildeayarlayabilirsiniz.
Kali kablosuzağtestleri içinözelleştirilmişbirkernel kullanmaktadır.Yani ayrıca özel sürücüler
kurma ihtiyacıyoktur.
Kali’yi Intel ve ARMişlemci mimarileriiçin derlenmiş,ISO, VMWare ve VirtualBox imajlarıhalinde
indirebilirsiniz.Kali’ninde sağladığıimkanlarsayesinde masaüstüözelleştirilmiş,barındırdığıpaketler
sınırlanmış,kendi geliştirdiğinizscriptleriiçerenv.d.özelleştirmelerilekendiimajlarınızıda
oluşturabilirsiniz.Tabi buözelleştirmeyi yineKali’ninwebsitesindenedineceğinizbilgiler,Kali’nin
sağladığı scriptlerve bircross compilertoolchaingkullanarakARMmimarisi içinde yapabilirsiniz.
RaspberryPi gibi ARMtabanlıgömülüsistemlere Kali kurulumuiçinşulinktenfaydalanabilirsiniz:
http://blog.btrisk.com/2015/09/raspberry-pi-kali-kurulumu.html
Kali’yi liveolarakbootableISOimajıile birUSB sürücüdenveyasistemüzerinekurarakkullanabilirsiniz.
Tüm bu alternatiflerle ilgili detaylıbilgiyiKali’nindokümantasyonsitesindenbulabilirsiniz.
Kali ekibi dağıtımlarınbütünlüğükonusundaüzerine düşeni yerinegetirmişdurumda,imzaların
doğrulanmasıise kullanıcılarınüzerine düşüyor.DoğrulamaileilgiliprosedürKali’nindownloadslinkinde
dokümante edilmiş.
Kali dağıtımı OSCP sertifikasyonununhamisi olanve bireğitimşirketiolanOffensive Securityşirketi
tarafındandesteklenmektedir.KALILINUXmarkası Offensive Securityşirketine aittir.
Kali’yi öğrenmekne demektir?
Hacking’insaldırıaraçları kullanmaktanibaretolduğualgısıçokyaygındır ve Kali gibi birortam bu algıyı
güçlendirmektedir.Ancakaraçlarlaoynamak, fonksiyonalitelerineaşinaolmayaçalışmaksadece hızlıbir
girişyöntemidir.
Aslaunutmayıngerçekbirhacker,Kali gibi birplatformuoluşturabilen,teknolojininnasıl çalıştığını
merakedenve endetaylıseviyede inceleyebilen,güvenlikaraçlarıgeliştirerekgeliştirdiği testveya
saldırı metodlarınıotomatize edebilenkişidir.Çünküaraçlarbelli biramaçiçinvardırlar,amacı
anlamadanaracı geliştiremezsiniz.Hacker’ınamacıvar olanteknolojileri anlayıpbuteknolojilerdeki
mimari açıklıkları kullanmak,teknolojilerdekiyetersizkonfigürasyonlarıtestedipbunlarıkullanmakve
güvenlikkontrollerini otomatikaraçlarvasıtasıylaaşmayaçalışmaktır. Tabi sosyal mühendislikamacıyla
belli araçlargeliştirmekde yineamaçlarahizmetetmekiçinyapılmaktadır.Sadece araçlarıve kabaca ne
yaptıklarını anlamaksizi biradım öteye götürür,ancakikinci seviyeyeçıkmakistiyorsanızişletimsistemi,
işlemci mimarisi,websunucusu,veritabanısunucusugibi temelteknolojileri,ağprotokollerini öğrenmeli
ve mutlakakaynakkodusevmelisiniz.
Güvenliksektöründe karşılaştığımpekçokkişiyazılımyapmakistemediği içinbualanıseçtiğini söyler.
Gerçekşu ki yazılımı anlamayanbirkişi ancak biraraç operatörüolabilir.
6. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri
KALİLİNUX HAKKINDA HERŞEY
5
Bu nedenlerle Kali’yi öğrenmekdemekaslındagüvenlikyetkinliği olaraksize zannedildiğikadarçokşey
katmaz.Ama işinizi biliyorsanızsize ciddizamankazandırır.Tabi Kali’ningeliştirme ekibi içinde yeralmak
istiyorsanız,ozamançok daha farklıbir boyutageçersinizki buboyutdapentestuzmanlığındandaha
çok birsistemve yazılımuzmanlığı yoluanlamındadır.Gerçekşuki iyi birhacker’ınaynı zamandaiyi bir
sistemve yazılım(ve elbette ağ) uzmanıolmasıgerekmektedir,amabuçok uzunbirsüreç
gerektirmektedir.
Bunlarlabirlikte Kali’yi etkinbiçimde kullanabilmekiçinmutlakave mutlakaenazındantemel seviyede
Linux işletimsistemikullanımve yönetimyetkinliğinesahipolmakgereklidir.Buyüzdenbumakalenin
teknikiçeriğininönemlibölümütemellinuxbilgisineyöneliktir.Evet,script kiddie(hacker
terminolojisinde araçkullanarakhavaatmayaçalışan kişilereverilenad,birdiğerdeyişlehackerergeni)
olmakiçinbile temel linux bilgisine ihtiyaçvar.
Kali’ninkurulumu
Kali’ninkurulumuile diğerlinux dağıtımlarınınkurulumuve hattaWindowskurulumuarasındapekfark
yok.Kali dağıtımı daha önce de belirttiğimizgibi ISO,VMWare ve Virtual Box imajlarıolarakelde
edilebilir.Kali ISOimajlarıaynızamandabootable,yani live olarakişletimsistemini başlatabilmeye
imkanverenimajlar.DilersenizbuimajlarıDVDveyaUSB belleğe de (WindowsdaWin32DiskImager,
linuxdaddgibi araçları kullanarak) kopyalayarakbilgisayarınızılive olarakKali Linux işletimsistemiile
başlatabilirsiniz.Live işletimsistemi demekaslındadosyasistemi bellektebulunanve yazdığınızverilerin
işletimsistemi kapandığındakaybolacağıbirişletimsistemi demek.Bunundışındanormal birişletim
sistemindenhiçbirfarkıyok.
Kali’yi diskinize yazarakkalıcıyapmakisteseydinizizleyeceğiniztemel adımlarşunlarolurdu(aynıadımlar
bir sanal makine kurulumundadageçerli):
Diskinpartitiontablosununoluşturulması (ve diskinilksektörüneyazılması)
Partition’ların ve üzerlerine kurulacak file system’lerininbelirlenmesi(ve işletimsisteminin
kurulacağıpartition’ınbelirlenmesi)
Partition’lariçinfile systemformatlamaişleminingerçekleştirilmesi
Kurulumiçinkernel imaj dosyasınınve diğerişletimsistemi uygulamave kütüphanelerinin
formatlanmışfilesystem’e yazılması
İşletimsistemi için zamandilimi yerelleştirme,dil,klavye formatıv.b.konfigürasyonunyapılması
İşletimsistemininbootedilmesi
Bu işlemleriçinbirerekrangörüntüsüalmayıpekanlamlıbulmadım, çünküne yaptığınızıbilmemeniz
durumundagörüntününpekbirfaydasıyok,ayrıca kurulum işlemi siziyeterince yönlendiriyor.Ekran
görüntülerinikoysamdabiryıl içinde aynı işlemleriyapanfarklıekranimajlarıylakarşılaşacağınızfarklı
bir versiyonçıkmışolacak.
Yukarıdaki işlemlerde sizinmüdahalenizi gerektirecekkısımlarınönemli oranıdiskyapılandırmasıylailgili.
Kısaca partitionve file systemkonularınınüzerindengeçelim.Ham(raw) birdisksektörve clusteradı
verilenbirimlerlebüyüklüğüifade edilentertemizbirtarlayabenzer.İşletimsisteminindiski
anlamlandırabilmesi içingerekliilkveri yapısıpartitiontablosudur.Butablodiskinilksektöründen
başlar,partition’ıntipi yine ilkbölümlerde belirtilirki işletimsistemipartitiontablosunudaiçerenveri
yapısını doğru yorumlasın.Partitiontablosudiskinhangi bölümlerininhangi partition’larolarak
7. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri
KALİLİNUX HAKKINDA HERŞEY
6
tanımlandığını / bölümlendiğini,herbirpartitiontablosundahangi filesystembulunduğu(ör:FAT,
FAT32, NTFS,ext,v.d.),hangi partition’larınsistempartition’ıolduğu(yani bootable birkernel imajı
barındırdığını) v.d.bilgileri içerir.Bilgisayar(donanım) ilkaçıldığındaBIOSkodubootable cihazsırasının
üzerindengeçerek(ör:CD,USB, HDD, v.d.) içinde veri bulunanve birpartitiontablosubarındıranilk
sürücüye erişereksistempartition’ınıbulmayave bupartition’dakiişletimsistemi kernel’ınıyüklemeye
çalışır. İşletimsistemi hafızayayüklendiktensonrapartitiontablosupartition’larınyerlerinintespiti ve
içlerinde barındırdıklarıfilesystem’e göre kullanıcıyasunulmasınısağlar.Filesystemtemel olarakkendine
ayrılan partitionsınırlarıiçinde dizinve dosyahiyerarşisi ve dosyalarınişgal ettiği alanlarınadreslerini
takipetmeye yarayanveri yapılarıbarındırır. Bunlar FATgibi basitbir dosyasistemindenNTFSgibi
karmaşık birdosyasistemine kadarfarklıkurallarıolanveri yapılarıolabilir.İşte birişletimsistemini
kurarkeneğerhambir diskkullanıyorsanızönce diski yapılandırmaihtiyacınızbusebeplerden
kaynaklanmaktadır.İşletimsistemininayağakalkabilmesi ve kullanıcıyadosyalarınıyazabileceğive
okuyabileceği biralansunabilmesi içinönce diskinyapılandırılmışolmasıgereklidir.
Aynı bilgisayarüzerindebirdenfazlabootable işletimsistemi kurmakonusunaburadagirmeyeceğim,
ancak bu işlemDOSpartitiontablosundabirdenfazlapartition’ınınsistempartition’ıolarak
işaretlenmesive birloaderuygulamasıile mümkün.
Linux hakkında temel bilgi
Kali birlinux dağıtımı olmaklabirlikte Linux’uöğrenmekiçindoğrubirplatformolduğusöylenemez.
Linux hakkındatemel deneyimleri edinmekiçin Ubuntu,Debian,Mintgibi dağıtımlartercihedilebilir.
Bununlabirlikte Kali’yi etkinolarakkullanmakiçintemel linux kullanıcıve sistemyönetici bilgisine sahip
olmakgereklidir.
Linux hakkındahakimiyetinizienüstdüzeye taşımakistiyorsanızLinux FromScratch
(http://www.linuxfromscratch.org/) projesiherhalde endoğruyerlerdenbirisi olacaktır.Amabaşlangıç
olarakgenel işletimsistemi işlemlerininLinux üzerindenasıl yapıldığındanve Linux’aözel bazıtemel
bilgileri belirterekbirgirişyapabiliriz.
Kali Linux hakkındaki bundansonraki makalelerdeDebianpaketlerindenfaydalanılarakoluşturulmuş
olanKali dağıtımı hakkındadetaylıbilgiyeulaşabileceksiniz.
9. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri
KALİLİNUX HAKKINDA HERŞEY
8
Daha önce de belirttiğimizgibi,normalde genelamaçlıLinux işletimsistemlerine ilk erişimroothaklarına
sahipolmayanbirkullanıcıile bağlanılmasıönerilir.Sebebi gayetbasitaslında,süperkullanıcıhaklarıile
ne kadar uzunsüre geçirirsenizhatayaptığınızdasisteme zararverme potansiyelinizde artar.Ancak
Kali’de özel birkullanımihtiyacımızvarve neredeysesürekli rootkullanıcıhaklarınaihtiyacımızvar.Bu
nedenle başlangıçtanitibarenrootkullanıcısıolaraksistemi kullanıyoruz.
Root kullanıcıprompt’u“#” işareti ile biter,normal kullanıcılardaise buişaret“$” işaretidir.Elbette bu
bir sistemsel kural değilve buişaretçevreseldeğişkenleraracılığıile (ör:PS1 çevresel değişkeni ile)
ayarlanabilir.Ancakbuişaretlergeleneksel olarakbuşekilde kullanılır.Çevresel değişkenkonusuna
ayrıca değineceğiz.Yukarıdaki şekildende görebileceğinizgibi shell prompt’urootolduğumuzuhem
kullanıcıadını prompt’unbaşındabelirterekhemde #işareti ile belli ediyor.
Unix ve linux işletimsistemleri üzerinde birdenfazlashell uygulamasıbulabilirsiniz,bunlaracsh(Cshell ),
Bourne shell,bash(Bourne shell’inyerini alanuygulama,aynızamandaBourne-againShell’inkısaltması),
ksh(Kornshell) örnekolarakverilebilir.Shell uygulamalarıarasındafarklarnelerdirderseniz,
fonksiyonaliteleri benzerolsadaheruygulamagibi kendilerine hasayarfarklılıklarıve kullanım
kolaylıklarıbulunmaktadır.Bazıtemel komutlarve işlemlertümshell uygulamalarındaaynıolsada
10. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri
KALİLİNUX HAKKINDA HERŞEY
9
kullandığınızshell ortamınagöre shell ortamınızıayarladığınız startupscript dosyalarıfarklılaşacaktır.Bu
nedenle rutinbirshell kullanıcısıisenizve herseferinde bazıenvironmental değişkenleribelirlideğerlere
ayarlamanızgerekiyorsabubilgiye ihtiyacınızolacaktır.Ancaksıradan birkullanıcıiçinshell’lerarasındaki
farkı bilme ihtiyacıçokdüşüktür,temel linux bilgisi ileshell’inizikullanabilirsiniz.
Kali’de Terminaluygulamasınınaçtığı shell uygulamasınınne olduğunumerakederseniz“echo$0”
komutunuçalıştırarakbunu görebilirsiniz.
Bu komutlailgili olarakiki konudanbahsetmemizlazım.Birincisi “echo”komutu,adındanda
anlaşılabileceğigibi bukomutkendisineparametre olarakverilensabitdeğeri veyadeğişkenindeğerini
yazıyor.Böyle söylendiğinde kulağaçokbasitgeliyoramao kadartemel birişlevi yerine getiriyorki bu
nedenle shell script’lerinde,debugamaçlıolarak,birdosyayabirşeyyazmakiçinv.b.amaçlarlaçoksık
kullanılanbirkomuttur.İkinci konuise $0parametresi.Buparametre özel birparametredirve çalıştırılan
uygulamayaverilenilkparametrenindeğeriniiçerir.Pekaklayakıngelmese de çalıştırılanuygulamaya
verilenilkparametrebuçalıştırılanuygulamanınadıdır. Sonraki parametreler$1,$2, $3 şeklinde gider.
$0 parametresininmantıklıbirkullanımalanınısöyleyeyim,örneğingömülüsistemlerde kaynak
kısıtından dolayıuygulamakaynakkodları,kullanılankütüphanelerv.d.pekçoknoktadaoptimizasyona
gitme ihtiyacıvardır.Gömülüsistemlerdestandartshellkomutlarınınpekçoğubusybox adlıbir
uygulamadabarındırılır. Bu komutlarıntamamıda semboliklink ile (semboliklinkidahasonra
açıklayacağım) “busybox”uygulamadosyasıile ilişkilendirilir.Bukomutlarçağrıldığındaaslında
“busybox”uygulamasıçalıştırılır.“busybox”uygulamasıbuparametre sayesinde aslındakullanıcının
hangi komutukullanmakistediğinianlayabilir.
Shell’e interaktif olarakerişebildiğimizdençalışmaanındadinamikolarakshelluygulamasıçağrılırken
kullanılanparametreleride tektekinceleyebiliriz.Yukarıdayaptığımız işlemde shell uygulamasını
çağırırken kullanılanuygulama adınıgörüntülemekoldu.
11. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri
KALİLİNUX HAKKINDA HERŞEY
10
Peki işletimsistemi hangi shell uygulamasınıbaşlatacağınıneredenbiliyor.Buayar“/etc/passwd”
dosyasıiçinde herbirkullanıcıiçinbelirtilenbirdeğerdir.
“cat” komutunuve “pipe”(|) işaretini dahasonraaçıklayacağım. “passwd”dosyasınıda dahasonra
açıklayacağım, ancak budosyadaroot kullanıcısıile ilgili satırdaensonda“/bin/bash”ifadesine
12. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri
KALİLİNUX HAKKINDA HERŞEY
11
dikkatiniziçekmekistiyorum.Buradaki değerhangi kullanıcıiçinhangi shell ortamınınkullanılacağını
belirtiyor.İşte işletimsistemibashortamınıbaşlatmasıgerektiğinibudeğere bakarakanlıyor.Diğer
kullanıcılariçingenellikle “/usr/bin/nologin”değerini görüyoruz.Budeğersayesindebukullanıcılara
parolaatanmışsa ve bu parolakırılmışsa bile bukullanıcılarınshell alamamalarısağlanıyor.Buyöntem
Unix ortamlarındagüvenlikiçinkullanılanakıllıcayöntemlerdenbirtanesi.
Nologinuygulamasınıçağırdığımızda sadece birmesaj yazarak sonlanıyor.Birshell içindenfarklıbirshell
açıp açmadığımızı yine echo$0 komutuile kontrol edebiliriz.
*Startup Scriptleri*
Her shell uygulamasınınkendisinehasstartupscriptdosyalarıbulunabileceğindenbahsetmiştik.Shell
scriptingkonusundandahasonrabahsedeceğiz,ancakstartupscriptlerininnormal scriptlerdenfarkları
şunlardır:
Startupscriptlerinde (#!/bin/bashgibi) birinterpreterdirective’i bulunmasınagerekyoktur,
normal shell scriptlerinde eğeröntanımlıshell kullanılmayacaksabudirective’inilgili shell
uygulamasınaişaretedecekbiçimde bulunmasıgereklidir.
Startupscriptlerininçalıştırılmahaklarınıntanımlanmasınagerekyoktur,shell scriptlerinin
mutlakaçalıştırılabilirolmasıgereklidir.Bukonuyadosyaerişimhaklarıbölümünde değineceğiz.
Kali’de bash’i kullandığımızagöre bushell ile ilgili startup scriptdosyalarınıinceleyelim.
İnteraktif loginshell olarakbaşlatıldığında
30. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri
KALİLİNUX HAKKINDA HERŞEY
29
Arka plandaki (background) birprosese sinyal göndermenintekyolu“kill”komutudur.Shell ortamında
ise yukarıdagördüğünüzCtrl+Ztuşlarının yanı sıra Ctrl+C tuşları ile de önplandaki (foreground) prosese
sinyal gönderme imkanıvardır.Ctrl+C ile gönderilensinyal SIGINTsinyali olupbusinyalinöntanımlıetkisi
prosesinterminateedilmesidir,elbette uygulamakoduiçindeelealınabilirveyaihmal edilebilir.
Yukarıda pingkomutu100 adetistekgöndermeküzere başlatılmış,ancakbusayı tamamlanmadan
Ctrl+C tuşlarıile önplandabulunanbuprosessonlandırılmıştır.
Yine shell ortamındankullanılantuşkombinasyonlarındanCtrl+Dtuşlarıdasıklıklakullanılan
tuşlardandır.Bu tuşkombinasyonuaktif proses’eEOF(dosyasonu) karakteri gönderir.Bukarakterin
prosesüzerinde oluşturacağıetki tamamenprosesle ilgilidir.Butuşkombinasyonugenellikleshell’in
“exit”komutuylakapatılmadanCtrl+Dtuşlarıile kapatılmasıiçinkullanılır.
*Standard input(stdin),standardoutput(stdout),standarderror(stderr),girdi ve çıktıyönlendirme*
Unix’te (ve dolayısıylaLinux’ta) herşeyinbirdosyaolduğundansözetmiştik.Uygulamalarelbette
dosyadan,ağdangelenisteklerden,komutsatırından,çevreseldeğişkenlerdenv.d.kaynaklardangirdi
alabilirve bukanallaraçıktı iletebilir,ancakkomutsatırındankullanılanpekçokuygulamagirdi olarak
klavyedenkomutsatırınayazılanverilerikullanırve çıktılar ile hatamesajlarınıda komutsatırına yazar.
Ancakshell ortamınormalde komutsatırından okunangirdileribirdosyadanokumayıve yine çıktılarile
hata mesajlarınıda birdosyayayazmayı destekler.
32. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri
KALİLİNUX HAKKINDA HERŞEY
31
Şimdi çıktı yönlendirme yöntemini kullanarakbtrisk.txtdosyasınıniçeriğini cikti.txtdosyasınayazıyoruz.
Gördüğünüzgibi buişlemsırasındashell’deherhangi birdosyaiçeriğigörülmüyor.Dahasonracikti.txt
dosyamızagöz attığımızda btrisk.txtdosyamızıniçeriğininbudosyayayazılmışolduğunugörüyoruz.
Bu denemede“olmayandosya.txt”adlıbirdosyanıniçeriğinilistelemeye ve buçıktıyı da “cikti.txt”
dosyasınayönlendirmeye çalışıyoruz.Ancakbudefashell’de birhatamesajıile karşılaşıyoruz.Demekki
uygulamahatamesajlarınıstdoutkanalınayazmıyor,stderr halenshell ortamınıişaretediyor.“cikti.txt”
dosyamızıniçeriğinde de herhangibirveri göremiyoruz.
33. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri
KALİLİNUX HAKKINDA HERŞEY
32
Hemhata mesajlarınıhemde standart çıktıyı tekbirdosyayayönlendirmekiçin“>”işareti yerine “&>”
karakterlerinikullanabiliriz.Özellikle arkaplanda(background) çalıştırdığınızişlerde önplandayaptığınız
çalışmanın etkilenmemesini istiyorsanızarkaplanaattığınız işinhemçıktılarını hemde hata mesajlarını
bir dosyayayönlendirmekisteyebilirsiniz.
Bu şekilde yönlendirme yaptıktansonrahatamesajınında “cikti.txt”dosyasınayazıldığınıgörebiliriz.Bu
kullanımdandahaönce hemUnix hemde Linux ortamlarındakullanılanshell uygulamalarında
desteklenenbirdiğeryöntemise çıktıyönlendirmeişlemini yaptıkdansonrakomutsatırınınsonuna
“2>&1” karakterlerini kullanmaktır.Bukomutuşöyle anlamlandırabiliriz;birinciyönlendirmeişareti (>)
çıktıyı yönlendirirkensatırınsonundaki karakterler(2>&1) stderr’ye (dosyahandle’ı2) yazılançıktıları da
stdout’a(dosyahandle’ı1) yönlendirecek,böylecehatamesajlarıdaaynı dosyayayazılacaktır.
34. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri
KALİLİNUX HAKKINDA HERŞEY
33
Girdi yönlendirmeiçinçokmantıklıbirörnekbulamadım, çünküzaten komutlargenelliklegirdi olarak
kendilerineparametre olarakverilendosyaisimlerini kullanabiliyorlar.Ancakyukarıdaki işlemi birörnek
olarakverirsek“btrisk.txt”dosyasını“sort”komutunagirdi olarakveriyoruz,buişleminçıktısınıda
“sortlubtrisk.txt”dosyasınayönlendiriyoruz.“sortlubtrisk.txt”dosyasınagözattığımızdasatırların sıralı
bir şekildesaklandığınıgörebiliriz.
35. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri
KALİLİNUX HAKKINDA HERŞEY
34
Daha önce yaptığımız yönlendirmelereğerbirdosyayoksabunuoluşturuyorve içeriğiniyazıyor,ancak
dosyazatenmevcutsada içeriğini sonoluşturulaniçerikile eziyordu.Eğerdosyaiçeriğini koruyarakyeni
çıktıyı da dosyayaeklemekistersenizbununiçinekleme (appendetme) işaretini (>>) kullanabilirsiniz.
Appendetme işareti de eğerdosyayoksaoluşturuyor,ancakeğerdosyamevcutsamevcutdosyanın
içeriğini ezmiyorve çıktıyıdosyanınsonunaekliyor.
Şimdi birsistemyöneticisininenbüyükyardımcılarındanbirisine geliyoruz,“pipe”lar.Pipe işareti (|)
kendisindenönce çalışankomutunçıktılarınıkendisindenbirsonraki komutagirdi olarakyönlendiriyor.
Bir başkadeyişle çıktılarbirdosyayayönlendirilmekyerine yineshell ortamınayönlendiriliyor,ancakbir
çıktılar bir başkakomuttarafından yeni birsatırda yeni birkomutyazmadanhemengirdi olarak
kullanılabiliyor.Buyöntembirdenfazlaişlemi herhangi biraradosyakullanmadanteksatırda
halletmemizeimkansağlıyor.
36. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri
KALİLİNUX HAKKINDA HERŞEY
35
Yukarıda “ls” komutuile içinde bulunduğumuzdizindeki dosyave dizinleri listeliyoruz,ancakçıktıyı “wc”
komutunaparametre olarak aktarıyoruz.“wc” (wordcount) uygulamasıişlediği girdiveyadosyadaki
satır sayısı, kelime sayısıve karaktersayısını hesaplarve bize görüntüler.Pipesayesinde “ls”komutunun
çıktısını bir dosyayayönlendiripdahasonrabu dosyayı“wc” komutuylaişlemekyerinetekbirsatırdabu
işlemi gerçekleştirebildik.Bunagöre içinde bulunduğumuzdizindetam21 adet dosyaveyadizinvar.
Daha önce girdi ve çıktı yönlendirmeişleminedeğinmiştik.Çıktıyönlendirmede çıktılarartıkshell
ortamında görünmüyorsadece dosyayayazılıyordu.Pipeişaretive “tee”komutuylabirlikte çıktılarbir
dosyayaaktarılırkenaynı zamandashell ortamındada görüntülenebiliyor.
37. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri
KALİLİNUX HAKKINDA HERŞEY
36
Unix ve linux sistemlerde“wc”ve “tee”gibi dahapekçok kullanışlıuygulamavar,buuygulamalarafilter
adı veriliyor.Buuygulamalardosyalarıgirdi olarakalabildiği gibi“pipe”vasıtasıylabirönceki komutun
çıktısı olarakshell ortamındandaalabilir.Bunlardanbirkısmınıaşağıda bulabilirsiniz:
sort: Adındanda anlaşılacağı üzere almışolduğugirdiyi sıralayarakçıktıüretir
uniq:Sıralanmış birgirdi dizisindentekrarlayansatırlarıçıkararak satırları tekil biçimde tekrar
üretir
grep: En sık kullanılanfiltrelerdenbirisi olan“grep”komutugirdileriniçindebelirli birveri
yapısını arar ve bu veri yapısının bulunduğusatırıntamamını çıktı olaraktekrarlar.Yani veri
yapısının görülmediğisatırlarıeler.Veri yapısısabitbirmetinolabileceğigibi bir“regular
expression”daolabilir.
head: Genellikle büyükbirdosyainceleneceği zamansadece ilkbirkaçsatırınıgörmekiçin
kullanılır.
tail: Genellikle büyükbirdosyainceleneceği zaman(örneğinbirlogdosyasıgibi) dosyanın
sadece sonbirkaç satırını görmekiçinkullanılır.Tail komutuözellikle logdosyalarıgibi sık
değişendosyalarınsonunaeklenensatırlarınsürekliizlenmesiiçin“-f”switch’i ile birlikte
kullanılır.
sed:Adı “stream editor”ünkısaltmasıolan“sed”komutualdığıgirdi içinde gereklideğişiklikve
dönüşümleri yaparakçıktıüretir.Örneğinbirdosyanıniçindeki “2015” tarihini “2016”ya
dönüştürmekve yeni birdosyayayazmakiçinşukomutkullanılabilir:“sed‘s/2015/2016’ <
girdi.txt>cikti.txt”.Tabi sed’inözellikleribununlakısıtlıdeğil,kendikaraktereşleşmeve regular
expressiondesteği de var.
awk: awk hakkındakısaca birtanımlamayapmakkolaydeğil,amaawk’ıgirdi işleme ve
dönüştürme içinbirprogramlamadili de içerenbiraraçolarakdüşünebilirsiniz.Girdi işlemeve
dönüştürme ihtiyaçlarınızkarmaşıklaştığında“perl”programlamadilindenönce
38. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri
KALİLİNUX HAKKINDA HERŞEY
37
değerlendirilebilecek birkomuttur.
Shellshock
Bash ile ilgilibelirtilmesi gerekenkonulardanbirisi de bushell’insağladığıfonksiyonexportetme imkanı.
Öncelikleshell içindenkullanabileceğinizbirfonksiyonukomutsatırındantanımlayabiliyorsunuz.Bu
işleminsyntax’ınagirmeyeceğimamakabacaaçıklayacağım.Bu fonksiyonutanımladıktansonraexport
ederekartıkbir çevresel değişken(fonksiyonubirdeğişkenolarakdüşünebilirseniz)olaraktanımlıyoruz.
Daha sonra mevcutshell’iniçindenveyabushell’iniçindeykençağırdığınızdiğerchildshell’lerden(yine
bash komutuylayeni birshell dahaaçabilirsinizve bubirchildprocessolaraküstteki parentprocess’e
bağlı olarakçalışır) bu fonksiyonukullanabilirsiniz.Burayakadargüzel ve diğershell’lerden(csh,ksh,
v.d.) farklıbirfonksiyonalite.Ne yazıkki bufonksiyonalitekötüye kullanıldıve shellshockadıylameşhur
olanaçıklığa imkantanıdı. Konuylailgili detaylıaçıklıkve yamabilgilerineinternettenulaşabilirsiniz.Bu
açıklık çevresel değişkenleriuzaktanetkileyebildiğinizbiruygulamaaçıklığıile birlikte kullanıldığındaçok
etkili sonuçlardoğurabiliyor,buaçıdanbash’tenbahsederkenatlanmamasıgerekenbirkonu.
39. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri
KALİLİNUX HAKKINDA HERŞEY
38
III. Dosya Sistemi Temel Bilgiler
*Dosya listeleme,erişimhaklarıyönetimi,dosyave dizinmanipülasyonişlemleri*
MuhtemelenbirUnix /Linux sistemüzerinde ençokkullanılankomutlardanbirisi “ls”komutudur.
Diğerkomutlargibi “ls”komutunundapekçok switch’i var.Bazıları diğerlerindendahaçokihtiyaç
duyacağınız switch’ler.Bunlardan birisi“-a”switch’i (“all”kelimesininilkharfi).
41. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri
KALİLİNUX HAKKINDA HERŞEY
40
Adı “.” ile başlayandosyalardanbiriside “.bash_history”dosyası.Budosyayadahasonra değineceğiz.
Dosyaadı tamamlama
Shell ortamınınsağladığı imkanlardanbiriside dosyaadıtamamlamaimkanıdır.Herhangi birkomuta
parametre olarakdosyaismi vereceğimizzamandosyaadınınbirveyadaha fazlakarakterini yazdıktan
sonra tab tuşunabasarakdosya adının tamamlanmasıiçindestekalabiliriz.
Yukarıdaki örnekte dosyaismininilkkarakteri olarak“d”karakterini girdiktensonra“tab”tuşuna birinci
basışımızda herhangi birtamamlamayapmadı.Bununanlamıadı “d” ile başlayanbirdenfazladosya
veyadizinadı bulunduğudur.Bunedenletekrar“tab” tuşunabastığımızda olası tümihtimalleri bize
gösterdi.Bunuyaparkenadı“d” ile başlayanlardanbirisininbirdizinolduğunudasonuna“/”karakterini
ekleyerekbelirtti.Buaşamadansonra“d” karakterindensonra“o”karakterini de yazdımve “tab”
tuşunabastım. Bu durumdatekalternatif olduğundanshell dosyanınadınıtamamladı.
Dosyaerişimhakları
Bir başka“ls” switch’i de “-l”yani “longlistingformat”switch’idir.
42. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri
KALİLİNUX HAKKINDA HERŞEY
41
“-l”switch’i gördüğünüzgibi herbirdosyaiçindahadetaylıbilgilersağlıyor.Bunlararasındaenkayda
değerolanlarıdosya/ dizinerişimhakları,dosyanınsahibi olankullanıcıadı,dosyanınsahibi olangrup
adı, dosyanınboyutu(byte cinsinden) ve dosyanınsongüncellenmezamanısayılabilir.
Dosya/ dizinerişimhaklarınınbulunduğubölümünbaşındaözel erişimbayrağı(specialpermissionflag)
bulunur.
[-][rwx] [rwx] [rwx]
Bu ilkbölümde bulunabilecektümopsiyonlarafarklıbirkaynaktanulaşabilirsiniz.Ancakburadasadece
sıklıklakarşılaşılanopsiyonlaradeğineceğim:
“-“ karakteri dosyanınrutinbirdosyaolduğunaişareteder.
“d” karakteri ilgili isminbirdizinismiolduğunubelirtir.
“l” dosyanınaslındafarklı birdosyanınsemboliklinki olduğunubelirtir.Bukonuyuaşağıda
açıklayacağız.
43. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri
KALİLİNUX HAKKINDA HERŞEY
42
Semboliklinkörneği içinönceliklebirsemboliklinkoluşturuyoruz.Buörnekte bulunduğumuzdizin
altındaoluşturduğumuzbizim-passwd.txtdosyasını/etc/passwddosyasınabirsemboliklinkolarak
tanımlıyoruz.
Semboliklinkdosyamızınözelliklerine gözattığımızdailkkarakterin“l”olduğunugörebiliriz.Sembolik
linkdosyamızıniçeriğine gözattığımızdaorijinal passwddosyasınıniçeriğini görüyoruz.Semboliklink
aslındatahminedebileceğinizgibi yeni birdosyaoluşmasınanedenolmuyor,teknikolarakilgili dizin
hiyerarşisi içinde yeni birinode veri yapısıoluşuyorve buveri yapısı da orijinal dosyayaişaretediyor.
Semboliklinkile dosyayaerişerekiçeriğindegüncelleme yapabiliriz,ancaksemboliklinki sildiğinizde
orijinal dosyasilinmez.
Dosyaerişimizinleri 3farklıgrup içinverilir:
Dosyasahibi kullanıcı(u - owner)
Grup (g - group)
Diğer(tüm) kullanıcılar(o - others)
Erişimhaklarıise aşağıdaki gibidir:
Okuma(r - read):Dosyalariçindosyanıniçeriğiningörülebilmesi,dizinleriçindiziniçeriğinin
listelenmesi anlamınagelir.
Yazma (w - write):Dosyalariçindosyaiçeriğinindeğiştirilebilmesi,dizinleriçindiziniçindedosya
oluşturma,diziniçindekidosyalarınadınıdeğiştirme,diziniçindekidosyalarısilmeve dizin
özelliklerini (attributes) değiştirebilme anlamınagelir.
Çalıştırma (x - execute):Dosyalariçindosyanın(derlenmişkoddosyasıveyascriptdosyası)
çalıştırılabilmesi,dizinleriçindizine giriş,dizininiçindeki dosyave dizinlere erişimhakkıanlamına
44. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri
KALİLİNUX HAKKINDA HERŞEY
43
gelir.
Güvenlikaçısındanbahsetmeyedeğerbir diğererişimhakkıtürüise setuid/setguid(s) erişimhakkıdır.
Bu erişimhakkıdosyasahibi (owner) veyagrup(group) erişimalanlarındaçalıştırma(x) bölümünde“s”
karakteri ile ifade edilir.Buerişimhakkınıntanımlandığıdosyalarçalıştırıldığında çalıştıran kişinin
id’sindenbağımsızolarakdosyanınsahibinin(veyagrubunun) sahipolduğuhaklarlaçalıştırılır.Bu
dosyalaraverilebilecekentipikörnek“passwd”uygulamadosyasıdır.
Görüldüğügibi “passwd”komutudosyasındadosyasahibi (u) alanındakiçalıştırmahakkı“s” olarak
görülüyor.Bumantıklı çünkühersistemkullanıcınınparolasınıdeğiştirebilmesigerekir,ancakbu
/etc/passwddosyasındadeğişiklikyapabilmekanlamınagelirki buhakyine yukarıdagörülebileceğigibi
sadece rootkullanıcısınaaittir.
Setuid/setguidhakkınasahipdosyalargüvenlikdenetimlerindeözellikle incelenir,çünkübu
uygulamalaryüksekerişimhakkınasahipolduklarındandüşükkullanıcıhakkınasahipkullanıcılar
tarafındankötüye kullanılabilirler.Ayrıcabuuygulamalardaki biraçıklıkyüksekkullanıcıhaklarının
herhangi birişlemgerçekleştirilebilmesine de olanaktanıyabilir.
Dosya/ dizinerişimhaklarınındüzenlenmesi
Erişimhaklarınındüzenlenmesiiçinkullanılanaraç“chmod”uygulamasıdır.Erişimhaklarının
düzenlenmesinde aşağıdaki 2yöntemdenbirisi tercihedilebilir:
Numerik:Buyöntemde dosyasahibi(user),grup(group) ve diğerkullanıcılar(others) içinhaklar
tekseferde tanımlanmalıdır.
Sembolik(alfabetikkarakterlerle):Buyöntemde istenilenprofile (yani user,groupve/veya
others’a) istenilenhak(yani read,write ve/veyaexecute)verilebilirveyaçıkarılabilir.
45. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri
KALİLİNUX HAKKINDA HERŞEY
44
“touch” komutuile “dosya”isimli birdosyaoluşturdukve budosyanınerişimhaklarınıgözlemledik.
“touch” komutuile büyüklüğü0olan bir dosyaoluşturabilirizveyavarolanbirdosyayı “touch”
komutunaparametre olarakvererekbudosyanınsonerişimtarihini mevcutzamanlagüncelleriz.Çok
kullanışlıgibi görünmesede birshell script’iniçinde hızlıcabirdosyaoluşturmakiçinveyadosyaerişim
zamanlarınabakan biruygulamaiçinişimize yarayabilir.
Erişimhaklarınabaktığımızda aşağıdaki erişimhaklarınıgörüyoruz:
User (owner):read,write
Group: read
Others:read
Yani “root” kullanıcısıolarakbir dosyaoluşturduğumuzdaöntanımlıolarakbudosyanınhaklarıbu
şekilde belirleniyor.
“umask”komutuise “0022” gibi bir değerüretti.Öntanımlıerişimhaklarıile umaskkomutununçıktısı
birbirleri ileilişkili.
46. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri
KALİLİNUX HAKKINDA HERŞEY
45
“umask”değeri yine “umask”komutuile belirlenebilir.Startupscript’leri içinde bukomutubulamadım,
ama /etc dizini altındalogin.defsdosyasıiçindebudeğeri görebiliriz,dolayısıylatahminentüm
kullanıcılariçinbudeğerumaskdeğeri olarakatanıyor.Peki budeğerne anlamageliyor:
“umask”değeri öntanımlıbaz erişimhaklarıile bitwise NOTişlemine tabi tutularakyeni oluşturulacak
dosyanınerişimhaklarıbelirlenir.Bazerişimhaklarışuşekildehesaplanabilir(dosyalariçin):
Read:4
Write:2
Execute:1
Yani numerikgösterimleerişimhakları644 demekşuanlamagelir: - r w - r - - r - - , yani user’ınokumave
yazma,group’unokumave others’ınokumahakkı var anlamınagelir.
Unix / linux sistemlerde öntanımlıdosyabazerişimhakları666, öntanımlıdizinerişimhaklarıise 777’dir.
Kernel yeni birdosyaoluşturulurkenbu değeri alırve umaskdeğerinibudeğerdençıkararakdosyave
dizinerişimhaklarınıbelirler.EğerKali ve rootkullanıcısıiçinbu hesaplamayıyaparsak:
Dosyaiçin:666 – 022 = 644, yani “- r w - r - - r - -“
Diziniçin:777 – 022 = 755, yani “d r w x r - x r - x”
Bu nedenle birdosyaoluşturulduğundave birdizinoluşturulduğundayukarıdaki erişimhakları
atanmıştır.
Dikkatli okuyucudikkatetmişolabilir,“ls”komutunuçalıştırırken“-l”switchininyanınabirde “d”
switch’ini ekledik.Bununnedeni “dizin”dizinininiçeriğini değil dizinerişimhaklarınıgörüntülemek
47. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri
KALİLİNUX HAKKINDA HERŞEY
46
istediğimiziçindi.Eğersadece “-l”switchini kullanırsak“ls”komutudizininiçeriğini görüntülemeye
çalışıyor.
Şimdi yeni oluşturduğumuzdosyamızınerişimhaklarınıbirazdüzenleyelim.
Yukarıda “chmod” komutununçeşitlikullanımörneklerini görüyorsunuz.İlkkullanımdasembolik
yöntemle group’ayazma(w) hakkınıekliyoruz.
İkinci kullanımdaothers’aokumave yazmahaklarınıatıyoruz(rw).
Üçüncü kullanımdaothers’danyazmahakkını(w) çıkarıyoruz.
Sembolikyöntemdeeğerkullanıcıyailişkinbirbilgiyoksaatamatümkullanıcılariçinyapılır. Örneğin
“chmod +w dosya”komutuuser,groupve otherskategorilerininhepsi içinbuatamayıyapar.
Dördüncükullanımdanumerikyöntemleerişimhaklarınıatıyoruz.Buörnekte ayrıca ilkdefaexecutable
(x) hakkıda ekledik.Linux’un(yadaUnix’in) Windows’dankullanıcıaçısından temel farklarındanbiriside
dosyauzantılarının biranlamtaşımamasıdır. Bir dosyanınçalıştırılabilirolupolmadığıo dosyaya
executable hakkınınatanıpatanmadığıile ilgilidir.Bubirelf formatındaki çalıştırılabilirdosyadaolabilir,
bir shell scriptdosyasıda.Tabi buradaki dosyamızıniçinde çalıştırılabilirbiriçerikbulunmamaktadır.
Ancaklistelediğimizdeçalıştırılabilirbirdosyagibi görünmektedir.
Dosyasistemi navigasyonu
Temel birbilgi olmaklabirlikte dosyasistemi (file system) içinde temel navigasyonişlemlerine de
değinmemizdefaydavar.
48. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri
KALİLİNUX HAKKINDA HERŞEY
47
“cd” (change directory) komutuadındandaanlaşılabileceği gibi içinde bulunulandizini değiştirmekiçin
kullanılanbirkomut.Yukarıdaki örnekte içinde bulunduğumuzdizininaltındabulunanbirdizine
geçiyoruz.Birsonraki adımdaise “..” karakterlerinikullanarak2üst dizine çıkıyoruz.
Herhangi birdosyaadını işaret ederken2tür işaretetme imkanımızbulunmaktadır:
Relative (göreli) dosyaadıile işaretetme
Absolute (tam) dosyaadıile işaretetme
49. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri
KALİLİNUX HAKKINDA HERŞEY
48
Yukarıdaki örneklerde içinde bulunduğumuzdizine göreli(relative)olarakbelli dosyalaraişaretediyorve
içeriklerini inceliyoruz.Birinci örnekte“/etc”dizini içindeykenbudizininaltındabulunan“cron.d”dizini
içinde yeralan“anacron” dosyasınıniçine gözatıyoruz.Daha sonra “cd” komutunayine relative olarak
“cron.d” dizininiparametre olarakveriyoruzve budizine geçtiktensonraüstdizinde (yani/etcdizininin
içinde) bulunanbirdosyanıniçeriğinegözatıyoruz.
50. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri
KALİLİNUX HAKKINDA HERŞEY
49
Yukarıdaki örnekte ise “/etc”dizini altındabulunan“hosts”dosyasınıniçeriğine“/root”dizinininaltından
göz atabilmekiçinabsolute pathyönteminikullanıyoruz.
51. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri
KALİLİNUX HAKKINDA HERŞEY
50
“cd” komutununsıkkullanılanimkanlarındanbirisi de dizinismi yazmadankullanıcınınHOME dizinine
hızlıca dönmesini sağlamasıdır.Bunuyapmakiçinherhangi birparametre vermedensadece“cd”
komutunuişletmemizyeterlidir.
HOME dizini shellortamındastartupscript’lerini barındırması,kullanıcınınshell tarihçesininbulunduğu
dosyayıbarındırması ve kullanıcınınloginolduğundailkdüştüğüdizinolmasıgibi çeşitli nedenlerden
dolayıkullanıcılariçinönemli birdizindir.Buyüzdendosyaerişimleriile ilgili işlemlerdepratikbiçimde
HOME dizine işaretedebilmekiçintildayani “~” işareti kullanılır.
52. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri
KALİLİNUX HAKKINDA HERŞEY
51
Yukarıdaki örnekte dizinimizi “/etc”diziniolarakdeğiştiriyoruzve budizininaltındaykensadecetilda
işaretini kullanarakHOMEdizinimizaltındaki dosyalarılisteleyebiliyoruz.
Linux’tabirdizinoluşturmakiçin“mkdir”komutunukullanıyoruz.Dizinsilmekiçinse dosyalariçinde
kullandığımız“rm” komutunukullanıyoruz,yalnızbirfarkla.Linux bizi silmekistediğimizşeyinbirdosya
değil birdizinolduğuhakkındauyarıyor.Birdizini silebilmekiçin“rm”komutunu“-r”switch’i ile birlikte
kullanmamızgerekiyor.
54. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri
KALİLİNUX HAKKINDA HERŞEY
53
Bir başkayöntemde “env”gibi birkomutlatümçevresel değişkenleri listeleyerekiçinde PATHkelimesi
geçenleri listelemekolabilir.
Bizherhangi birkomutçalıştırdığımızda (örneğin“ls”komutu) bukomutPATHçevresel değişkeni
içindeki dizinleriçinde budeğişkende belirtilensıraylaaranırve ilkbulunançalıştırılabilirkomutdosyası
çalıştırılır. Herhangi birkomut çalıştırdığımızda bu komutunaslındahangi dizinaltındabulunduğunu
“which”komutuylainceleyebiliriz.
55. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri
KALİLİNUX HAKKINDA HERŞEY
54
PATH çevresel değişkeniiçindearananisimdeki tümçalıştırılabilirdosyalarıtespitetmekiçin“-a”
switch’ini kullanabiliriz.
PATH çevresel değişkenive “root”kullanıcısıile ilgilibahse değerbirbaşkakonuda “.” yani mevcutdizin
konusudur.Normalde sıradanUnix /Linux kullanıcılarınınPATHçevresel değişkenininiçinde“.”,yani
mevcutdizinbulunur.Bunagöre örneğinbirshell scriptçalıştırılacağızamanshell’de içinde bulunulan
diziniçinde de buscriptaranır. Unix’inilkdönemlerinde yaşananbazısosyal mühendisliksaldırıları
nedeniyle budizinöntanımlıolarka“root”kullanıcılarınınPATH değişkeniiçindeyeralmaz.Unix
bildiğinizgibi çokkullanıcılıbirsistem(herne kadarKali böyle biramaç içinhazırlanmamışolsada).
Böyle birsistemüzerindeçalışankullanıcılaryardımamacı ile sistemyöneticisiniyanlarına
çağırdıklarında sistemyöneticisi kendi kullanıcısınageçmekiçin“su”,yani switchuserkomutunu
kullanır.Ancakshell ortamınakendisi interaktif logonolarakgirişyapmadığıiçinhalenkendisiniçağıran
kullanıcınıniçinde bulunduğudizinde bulunmayadevametmektedir.Eğersistemyöneticisiniçağıran
kullanıcı“ls” komutuile aynıismi taşıyanbir shell scriptyazmışve bu dizininiçineyerleştirmişise ve
“root” kullanıcısınınPATH çevresel değişkeniiçinde“.”var ve “/bin”dizinindenönce geçiyorsaozaman
çağıran kullanıcınınyazdığı script“root” kullanıcıhakları ile çalışır.İşte bu basitsaldırı nedeniyle
öntanımlıolarak “.” dizini “root”kullanıcısınınPATHdeğişkeni içinde bulunmaz.
PATH değişkeni mevcutdizini işaretetmediğiiçin“root”kullanıcısıylakendi dizininizdeki biruygulama
veyascript’i çalıştırmakistediğinizde dosyaadınınbaşına“./” karakterlerini koymanızgerekir.
Bir başkadosyabulmakomutuda “locate”komutudur.Bukomut“which”komutugibi ne çalıştırılabilir
dosyalaraözeldirne de sadece PATHdeğişkenindegeçendizinleri arar. “locate”komutubirveritabanı
içinde dosyaisimlerini arar.Buveritabanıbir“cron” işiyle periyodikolarakgüncellenir.“cron”ve zamanlı
işlerkonusunadahasonradeğineceğiz.Eğerveritabanınımanuel olarakgüncellemekisterseniz
“updatedb”komutuyladabuişlemi yapabilirsiniz.
56. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri
KALİLİNUX HAKKINDA HERŞEY
55
“locate”komutubirveritabanıkullandığıiçinçokhızlı yanıt döndürür.Yukarıda “updatedb”komutunun
güncellediği veritabanıdosyasınınadını ve bulunduğudizini de görebilirsiniz.
Bir başkadosyabulmakomutuda “find”komutudur.Bukomuther çalıştığında hedef dizinleri tarayarak
dosyaismini arar.
57. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri
KALİLİNUX HAKKINDA HERŞEY
56
“find”komutununbirözelliği de eğerbirisimhedefiverilmemişsehedef dizininiçindekitümdizinlerve
bu dizinleriniçindeki tümdosyalarınisimlerini listeler.Buözellik“find”komutununarşivkomutlarıile
birlikte kullanılmasınıdasağlamaktadır(arşivişlemlerine dahasonradeğineceğiz).
58. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri
KALİLİNUX HAKKINDA HERŞEY
57
IV. Shell Scripting
*Shell Scripting*
Shell scriptingkonusubirUnix/Linuxsistemyöneticisi içinvazgeçilmezbirkonu.Çünküscriptlerher
defasındaaynıkomutlarıdefalarcayazmaktankurtardığı gibi aynı zamandauygulamaortamına benzer
bir ortamsunarak farklıdurumlardafarklıişlemleri otomatikolarakgerçekleştirmeyide mümkün
kılıyorlar.Aynınedenlerdendolayıbizpentestuzmanlarıiçinde bazı testadımlarımızı otomatikleştirme
imkanısağlıyorlar.Bununlabirliktebirpentestaracı geliştirmekistediğinizde ilktercihinizgenellikle
python,ruby,perl gibi dahagelişmişAPI’lerle desteklenen,hemesnekhemde kontrol edilebilirscript
dilleri olacaktır.Ancakne varki,Linux işletimsistemininstartupve shutdownsüreçleriile pekçokservis
yönetimscript’i Shell Scriptolarakgeliştirilmiştir.Dolayısıylaciddi birsistemyönetimihtiyacınızvarsa
shell scripting’denkaçamazsınız.
Shell scriptingkonusubaşlıbaşınaderinbirkonu,buyüzdenbumakale kapsamındamutlakadeğinilmesi
gerekentemel konularadeğineceğiz.Dahadetaylıihtiyaçlariçinelbette internette bulunabilecekpek
çok kaynaktanfaydalanılabilir.
Örneğimiziçinbirihtiyaçsenaryosugeliştirelim,böylece dahailginçbirscriptoluşturabiliriz.Ayrıca
örneğimizdeKali ilebirlikte gelengüvenlikaraçlarındanbazılarınıda kullanmaimkanımızolur.
Diyelimki;hedef tespiti adımındaICMPEcho Request,Timestamp Requestve NetmaskRequestistekleri
ile tarama yapacakbir scriptgeliştirelim.Buistekleriüretmeküzere “hping3”aracını kullanalım.Buaraç
ile sözkonusuistekleri yapmakiçinkullanmamızgerekenkomutyapısıaşağıdaki gibi:
# hping3172.16.0.10 –c 1 -1 –C 8
Yukarıdaki komutla“172.16.0.10” IPadresine 1 adet(-c1) ICMP (-1) paketini Type 8(-C8) yani Echo
isteği gönderiyoruz.
Scriptyazmak istememizinnedeni genişbirIPbloğunaistekte bulunmakiçinbukomutuherdefasında
tekrartekrar yazmakistemememiz.AyrıcaherIP adresi içinEchoRequestpaketininyanısıra
“TimestampRequest”ve “NetmaskRequest”isteklerinide göndererektespitihtimalimizi artırmaya
çalışacağız. Elbette hedef tespiti içindahapekçokyöntemvar,ama buradaki amacımız çok ihtiyaç
duyduğumuzbirdurumdanasıl scriptyazabileceğimizinüzerindengeçmek.
Uzatmadan hemenscriptkodumuzuaçıklamayabaşlayayım:
#!/bin/bash
echo "Lütfen taranacak subnet'in ilk 2 octet'ini giriniz ve [ENTER] tuşuna basınız: "
read SUBNET
function scan {
local YANIT="0"; local IP=$1.$2.$3
local ECHO="echo-0"; local TIMESTAMP="timestamp-0";local ADDRESSMASK="addressmask-0"
hping3 $IP -c 1 -1 -C 8 >& aradosya.$IP # ECHO Request
if grep "1 packets received" aradosya.$IP >& /dev/null; then
if ! grep "Unreachable" aradosya.$IP >& /dev/null; then
ECHO="echo-1"; YANIT="1"
fi
fi
59. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri
KALİLİNUX HAKKINDA HERŞEY
58
hping3 $IP -c 1 -1 -C 13 >& aradosya.$IP # TS Request
if grep "1 packets received" aradosya.$IP >& /dev/null; then
if ! grep "Unreachable" aradosya.$IP >& /dev/null; then
TIMESTAMP="timestamp-1"; YANIT="1"
fi
fi
hping3 $IP -c 1 -1 -C 17 >& aradosya.$IP # ADD. MASK Request
if grep "1 packets received" aradosya.$IP >& /dev/null; then
if ! grep "Host Unreachable" aradosya.$IP >& /dev/null; then
ADDRESSMASK="addressmask-1"; YANIT="1"
fi
fi
if test "$YANIT" == "1" ; then
echo $IP";"$ECHO";"$TIMESTAMP";"$ADDRESSMASK
fi
rm aradosya.$IP
}
for i in `seq 1 254`; do
for j in `seq 1 254`; do
scan $SUBNET $i $j
done
done
exit 0
Script’inilksatırındagörülen“#!/bin/bash” (#!karakterlerishebang olarakokunur) ifadesiiçinde
bulunulanshell’densözkonususcriptçalıştırılırken hangi interpreter’inkullanılacağınıbelirtmekiçin
kullanılır.Buifadeyi kullanmazsanıziçinde bulunduğunuzshellöntanımlıshell’iinterpreterolarak
kullanır.
echo "Lütfen taranacak subnet'in ilk 2 octet'ini giriniz ve [ENTER] tuşuna basınız: "
read SUBNET
Bundansonra gelenbölümdekullanıcıdanbirgirdi alıyoruz.“echo”komutuile kullanıcıyı
yönlendiriyoruzve “read”komutuile yanındayazdığımızdeğişkenebudeğeri aktarıyoruz.Değişkeni
daha önce declare etmemizegerekyok,hemenilkkullanıldığıandatanımlayabiliriz.Veri tipi ile ilgili de
sıkı kurallaryok,ama veri tipi karşılaştırmanoktalarındamutlakaönemli.
function scan {
Bu bölümdensonrabirfonksiyontanımıgeliyor.Fonksiyonumuzunadı“scan”. Uygulamadillerinde
olduğugibi shell scriptiçindeyazılanfonksiyonlardaparametre alabiliyorve birdeğerdöndürebiliyorlar.
Ancakalınan parametrelerinsayısınıve veri tiplerini tanımlamakgerekmiyor.Fonksiyonlardiğerdillerde
de olduğugibi çokdefakullanılacakscriptbölümlerinitanımlamakve script’inbakımınıkolaylaştırmak
içinkullanılıyor.Ancakönemlibirkural,fonksiyonlarınkullanılmadanönce tanımlanmışolması.
Interpreterscript’inherbirsatırını yorumladıktansonrabusatırın gereğini yerine getirmeyeçalışıyor,bu
nedenle birfonksiyonuçağırdığımızdabunuöncedentanımlamışolmamızlazım.
Fonksiyoniçeriğinidahasonraaçıklayacağım, şimdi script’intemel fonksiyonalitesinintanımlandığı
bölüme ilerleyelim:
60. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri
KALİLİNUX HAKKINDA HERŞEY
59
for i in `seq 1 254`; do
for j in `seq 1 254`; do
scan $SUBNET $i $j
done
done
Buradaki algoritmayıanlatmadanönce kullanıcıdantaranacakolansubnet’inilk2octet’ini aldığımızı
hatırlatalım.Elbette dahaiyi birkodkullanıcınınyapabileceği tümhatalarıhesabakatmalıve bunlarıele
almalı,ancak kodukalabalıklaştıracağıiçinbukontrolleri kodlamaktankaçındım.
İki adet“for” döngüsüile taranacakher birIP adresininson2octet’ini de bizoluşturacağız.“for”ifadesi
“i” değişkenineherdefasındahemensonragelendizidenbirdeğeratayaraktümdizi değerlerini
kullanmamızısağlayacak.Shell’in“commandsubstitution”imkanınadahasonradeğineceğimizi
söylemiştik.Değineceğimizalanburası.Normalde pekkullanmadığımızve tırnak işaretine benzeyenolan
terskesme (backquote) işareti sayesinde shell terskesmeişaretleri arasındabulunankomutuçalıştırıyor
ve bu komutunçıktısını içinde bulunduğusatırdaüreterekkullanıyor.Tabi interpreterbunuyaparken
eğerbircommand substitutiondurumuvarsaönce buişlemi gerçekleştirmeli,dahasonrabukomutun
ürettiği çıktıyı da dikkate alaraksatırın tamamını yorumlamalı.
Bizimihtiyacımız1 ile 254 arasındaki sayılardanoluşanbirdizi oluşturmakki “seq”komutudatam olarak
bu işlemi yapıyor.“seq”komutununnormaldenasıl çalıştığını şuşekilde görebiliriz:
Bu örnekte 1 ve 5 arasındaki değerleri ürettik.Biliyorsunuzpekçokdilde birsatırınbir komutunbittiğini
ifade etmekiçin“;”işareti kullanılır.Scriptyazarkenbunagerekyok,hersatırsonuo komutunbittiği
anlamınagelir.Ancaksıralı (batch) komutçalıştırma bölümünde de bahsettiğimizgibi teksatırdabirden
fazlakomutuda aralarına “;” işaretini koyarakscriptdosyasıiçinde de aynısatırda birdenfazlakomutu
yazabiliriz.“for”döngüsününsonundagördüğünüz“do”kelimesinormaldefarklı birkomutve ayrı bir
61. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri
KALİLİNUX HAKKINDA HERŞEY
60
satırda yazılmalıydı.Fakatshell’inbizesağladığıbatchkomutçalıştırma imkanısayesinde ve benim
kodunokunabilirliğini satırsayısını azaltarakartırma niyetimnedeniyle “for”ifadesi ve “do”ifadesini
aralarına “;” koyarakaynı satırda yazdım.
İç içe 2 “for” döngüsüile IPadresininson2octet’ini de oluşturuyoruzdemiştik.HerbirIPadresi için
“scan” fonksiyonunuçağırıyoruz.“scan” fonksiyonuna3parametre veriyoruz.
scan $SUBNET $i $j
Bunlardanilki “SUBNET”değişkeni,yani kullanıcıdangirmesini talepettiğimizilk2octet.Değişkenin
başındaki “$” işareti yine shell ortamınınsağladığıdeğişkenyerinegeçme (variable substitution)
imkanınıbize sağlıyor.Yani shell interpreter’içalışırkensatırdaki komutuişletmedenönce başında“$”
işaretini gördüğüdeğişkenindeğerini satırdabudeğişkeninadınıngeçtiği yere yerleştiriyor,ondansonra
komutubütünolarakçalıştırıyor. Yukarıda bahsettiğimizcommandsubstitutionfonksiyonalitesine çok
benzerbirdurum.
Aynı şey“i”ve “j” değişkenleri içinde geçerli,içinde bulunduğumuz“for”döngüleri içinde bu
değişkenlerinaldığıdeğerlerher“scan”fonksiyonuçağırılacağındasatırda variable substitution
sayesinde kullanılıyor.
exit 0
Son satırdaki bu komutscript’inreturnkodunun “0”olmasını sağlayarakshell’inscript’içalıştırırken
başlattığı (spawnettiği) prosesi sonlandırıyor. Bukomutagerekyokaslında,amabir uygulamayıveya
scripti çalıştırdığınızda genellikle “0”başarılı, bunundışındaki tümtamsayı (integer) dönüşdeğerlerise
bir sorunolduğuanlamınagelir.Budönüş(return) kodunukontrol edenve buuygulamayıçağırankod
da bu şekilde tersgidenbirşeyolduğunakararverebilir.Örneğinbiziyi birprogramcıolarakkullanıcının
verdiği girdileri kontroledecekkodlarıyazsaydık,hatalıbirgirişyapıldığında“exit”komutuile script’i
sonlandırırkenaynızaman da uygulama,scriptveyahattashell’indeğerlendirmesi için“0”dan farklıbir
hata kodudönebilirdik.
Shell’debirkomutçalıştıktansonradönüş(return) koduna“?” değişkeninindeğeri ileulaşabiliriz.Tabi
yine variable substitutionyapmakiçinbaşına“$” işaretini eklememizlazım.
62. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri
KALİLİNUX HAKKINDA HERŞEY
61
Artık fonksiyonumuzageçebiliriz:
function scan {
local YANIT="0"; local IP=$1.$2.$3
local ECHO="echo-0"; local TIMESTAMP="timestamp-0";local ADDRESSMASK="addressmask-0"
Scriptdili içinde fonksiyontanımıiçindahaönce de söylediğimizgibiparametrelerinve veri tiplerinin
tanımlanmasınagerekyok.Fonksiyonuniçindense budeğişkenlere parametrelerinverildiği sırayagöre
$1, $2, $3, ..şeklinde ulaşabiliriz.“scan”fonksiyonumuzahatırlarsanızbirinci parametreolarak
kullanıcıdanaldığımız “SUBNET” değerini,ikinci parametreolarakilk“for”döngüsününürettiği “i”
değerini,üçüncüparametre olarakdaikinci “for”döngüsününürettiği “j”değerini kullanmıştık.Bu
değerleri kullanarakIPadresini oluşturuyorve “IP”adlı değişkeneatıyoruz.Burada“local”ibaresine
aslındaihtiyacımızyok,ancak daha sonra script’i “scan”fonksiyonunubackground’daparalel olarak
çalıştıracak, böylelikleçokdahahızlı tarama yapacak şekildedeğiştireceğim.Ancakbudurumda
karşımıza bir “thread”güvenliği problemi çıkıyor.Eğerfonksiyonuniçindekibirdeğişkeni“local”olarak
tanımlamazsambackground’daçalışandiğerkanallar(shell bununasıl uyguluyortamolarakbilmiyorum
ama mantıkenthread’lerolarakyapmasılazım, çünküprosesolarakyapsaydıbu problemimizolmazdı)
bu değişkenindeğerini bozuyorve farklıbirthread’inbozduğudeğeri okuyarakişlemyapmaya
çalışıyorlar.“local”tanımı bu değişkeni gerçektenbirlokal fonksiyondeğişkenihaline getiriyor,aksi
halde fonksiyoniçinde tanımlanmışolsadaglobal birdeğişkenolarakdavranıyor.
Yukarıda gördüğünüztümdeğişkenlerfonksiyonuniçindedeğiştiğive kullanıldığıiçin de “local”olarak
tanımlandı.
hping3 $IP -c 1 -1 -C 8 >& aradosya.$IP # ECHO Request
if grep "1 packets received" aradosya.$IP >& /dev/null; then
63. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri
KALİLİNUX HAKKINDA HERŞEY
62
if ! grep "Unreachable" aradosya.$IP >& /dev/null; then
ECHO="echo-1"; YANIT="1"
fi
fi
Daha sonra gelenbölümaslındatemelişlevi yerinegetiriyor,“hping3”uygulamasınıgerekli
parametrelere “EchoRequest”paketiüretmesi içinçağırıyoruz.“hping3”uygulamasının
fonksiyonalitesinikısacaaçıklamakgerekirse buuygulamabirpaketüretme (packetcrafting)
uygulaması.“hping3”uygulamasınınçıktısını stderrdahil olmaküzere birdosyayayönlendiriyoruz.Daha
önce sıralı işçalıştırma imkanımızolduğunuve teksatırda “;” ile ayrılmışbirdenfazlakomut
çalıştırabileceğimizisöylemiştim.Amascriptiçinde biraradosyakullanmayıdahauygunbuldum.
“hping3”üçağırdığımız satırın sonunda“#” işareti ile başlayanbölümbiryorumbölümü.“#”işaretinden
sonra yazdıklarımızyorumlayıcı(interpreter) tarafındankodolarakyorumlanmıyor.
“hping3”işlevini yerinegetirdiktenve tümçıktısını birara dosyayayönlendirdiktensonra,“grep”
komutuyladosyaiçinde “1packetsreceived”ifadesini arıyoruz.“grep”komutundandahaönce de
bahsetmiştik,özetle parametreolarakaldığıbirdosyaveyakendisine yönlendirençıktınıniçinde eğer
aranan ifade geçiyorsa,busatırıntamamını döndürenbirkomuttur.Ancakbizburada“grep”in
çıktısından ziyade “grep”indönüş(return) koduylailgileniyoruz.Eğer“grep”arananifadeyi bulabilirse
“0” döndürüyor,bulamazsa“1”değerini döndürüyor.Budeğerde “if”koşuluiçin“true”veya“false”
anlamınageliyor.Biliyorumdiğerdillere göre birazkafakarıştırıcı çünkü uygulamadillerinden“false”
genellikle “0”olur,“0” dışı tüm değerlerde “true”anlamına gelir.
Yukarıda da gördüğünüzgibi shell için“true”durumu“0” ile ifade ediliyor.
64. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri
KALİLİNUX HAKKINDA HERŞEY
63
Biz“grep”indöndürdüğüdeğerle ilgilenmediğimiziçinde çıktısını “/dev/null”dosyasınayönlendiriyoruz.
Bu dosyanınözel birdosyaolduğunuve buamaçla kullanıldığını dahaönce de belirtmiştik.
“hping3”aracını script’le kullandığımızdagördükki,bazençokfazlaisteklekarşılaşanağcihazlarıhedef
IP adresine ulaşılamadığınailişkin“HostUnreachable”veya“NetworkUnreachable”yanıtıüretiyorlar.
Bu durumdada bizim ICMPyanıtı alındığını anlamakiçinkullandığımız“grep”komutuolumlusonuç
dönüyor,halbuki dönenyanıtbizimisteğimizleilgilideğil.Buhatadankurtulmakiçindosyanıniçinde bir
de “Host Unreachable”ifadesini arıyoruz.Ancakbudefa“!” işareti ile “değil”mantıksal işlemini
yapıyoruz,yani “if”koşuluancakbu ifade yoksaiçindeki koduçalıştırıyor.
Eğer “Echo Request”isteğimizebiryanıtaldıysakve bu yanıtın içinde de “HostUnreachable”ifadesi
geçmiyorsa“ECHO” değişkenimize “echo-1”değerini, “YANIT”değişkenimize de “1”değerini atıyoruz.
if test "$YANIT" == "1" ; then
echo $IP";"$ECHO";"$TIMESTAMP";"$ADDRESSMASK
fi
rm aradosya.$IP
}
Diğeriki bölümde farklıICMP isteklerini aynışekildegönderdiğive yanıtlarıişlediği içinatlıyorum.
FonksiyonunsonbölümündeherhangibirICMPisteğine yanıtalındığıanlamınagelen“YANIT”
değişkeninindeğerinin“1”olupolmadığınabakıyoruz,eğerbirveyadaha fazlayanıt almışsakda ilgili IP
adresini ve hangi isteğimize yanıtaldığımızıraporluyoruz.Buradaki “if”koşulundabelirtmektefayda
gördüğümbirkonuvar, bu da shell scripting’inilginçdurumlarındanbirisi.“YANIT”değişkeninin
değerinin“1”olupolmadığınıkontrol ederkensadece $YANITifadesini kullanamıyoruz.Çünkübu
değerinatanmamasıveyatamsayıolmasıdurumundakarşılaştırmayapılanve birstringgibi işlemgören
“1” ifadesiyle uyumsuzlukoluşuyor.Budurumdada shell hataüretiyor.Bundankurtulmakamacıyla
$YANIT ifadesini çifttırnakiçine alıyoruzki budeğişken atanmasadaiçeriği tamsayıolsada birstringgibi
muamele görsün.
Bu raporlamaadımından hemensonrada ara dosyamızı siliyoruz.
Şimdi script’imizi birdeneyelim(dürüstolmakgerekirse eğersürekliscriptyazmıyorsanızzatenscript’i
geliştirirkendefalarcadenemekve hataayıklamakgerekiyor):
65. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri
KALİLİNUX HAKKINDA HERŞEY
64
Alacağınız sonuçlarilgili ağbölümünde ne kadarcihazbulunduğunabağlıolacaktır,ancak bu haliyle
script’imizkullanılamayacakkadaryavaş.Bununiçinkodumuzdaaşağıdaki gibi birdeğişiklikyapıyoruz.
for i in `seq 1 254`; do
for j in `seq 1 254`; do
scan $SUBNET $i $j &
sleep 0.2
done
done
Yukarıdaki koddafarklı olan2 noktavar, birincisi “scan”fonksiyonunuçağırdığımız satırın sonuna“&”
karakterini ekledik.Bukarakterbildiğiniz gibi birkomutshell’de buşekildeçalıştırıldığındabuişlemin
arka planda(background) çalıştırılmasınanedenoluyor.Şimdi budeğişikliğiyaptıktansonrascript’imizi
çalıştıralım.
66. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri
KALİLİNUX HAKKINDA HERŞEY
65
Bu kezçok daha kısa birsürede çok genişbirağ’danyanıt alabilmeye başladık.
Shell scriptingkonusuylailgili sonolarakscriptdosyasınınçalıştırılabilirolmasıihtiyacınadeğinelim.
Dosyaerişimhaklarınındüzenlenmesi bölümünde “chmod”komutundan,dosyaerişimhaklarınınneler
olduğundanve “umask”konusundansözetmiştik.
Scriptdosyamızı ilkoluşturduğumuzdadosyaüzerinde tanımlıolanhaklaraşağıdaki gibiydi:
67. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri
KALİLİNUX HAKKINDA HERŞEY
66
Bu haliyle script’imizi çalıştırmakistediğimizdeaşağıdaki hatayıalıyoruz:
Yukarıda gördüğünüzgibi sadece dosyaisminikullanarakonuçalıştırmakistediğimizde yetki hatası
veriyor.Ayrıcaçalıştırılabilirdosyaolmayanbirdosyaadı bu şekilde kullanıldığındashell’indosyaadını
68. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri
KALİLİNUX HAKKINDA HERŞEY
67
tamamlamadesteğindende (yani dosyaadınınbirkısmını yazdıktansonra TAB tuşunabasarakadın geri
kalanını otomatikolaraktamamlama) faydalanamıyoruz,çünküböyle birkullanımmantıklıdeğil.
Hemensonra“bash” uygulamasınıçalıştırıp bu defascriptdosyasınıparametre olarakverdiğimizde
script’imizçalışıyor.Ancakbunaihtiyaçduymadandoğrudanscriptdosyamızınadını kullanarak
script’imizi çalıştırmakistersekdosyanınerişimhaklarınaçalıştırma(execute) hakkınıdaeklememiz
gerekir.
Bu örnekte sadece dosyanınsahibi kullanıcıolanrootkullanıcısınabu hakkıverdik,sadece “chmod+x”
diyerektümkullanıcılariçin de buhakkı tanımlayabilirdik.Buişlemiyaptıktansonrayetki hatasıalmadan
script’imizi başlatabildik.
Script’imizinçıktılarını“;” karakteri ile birbirindenayırmamızdahasonra işimize yarayabilir.Örneğin
“cut” filtresi ile buçıktılardansadece istediklerimizi listeleyebiliriz.
69. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri
KALİLİNUX HAKKINDA HERŞEY
68
Yukarıdaki örnekte script’imizinçıktılarının“;” delimiter’i ileayrıldıklarınıbelirtiyoruz,“-f 1,3” ifadesi ile
bunlardan1. ve 3. sırada olanlarınılistelemekistediğimizi ve bunlarılistelerkende “ “, yani boşluk
karakterleri ile birbirlerindenayırmakistediğimizi belirtiyoruz.Böylece listelenenIPadreslerive sadece
bunlarınTimestampRequestisteklerimize yanıtveripvermediklerinigörmüşoluyoruz.
70. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri
KALİLİNUX HAKKINDA HERŞEY
69
V.Shell History
Shell Tarihçesi (History)
“bash” diğershell’lerde de olduğugibi,kullanıcıyıdahaönce girilmişolankomutlarıtekrartekrar
yazmaktankurtarmakiçinbir historyimkanısunar.Kullanıcıdaha önce yazdığı komutlarıtekrar
yazmadankullanabilmekiçinoktuşlarıile önceki komutlararasındagezinebilir(oktuşunabastıkça
komutsatırında daha önce yazılmış olankomutlargörüntülenir).
Bu imkankullanışlılığıartırmasınınyanı sıra eğersistemele geçirilmişsehassasolabilecekbilgilerin
sızdırılması amacıyla da kullanılabilir.Örneğinkomutsatırındaçalıştırılan birkomutkullanıcıadı ve
parolagibi bilgileriçeriyorolabilir.Pekidahaönce yazılmışolankomutlarısistemnasıl hatırlar?
Çevresel değişkenlere birgözattığımızda HISTFILE adlıbir değişkenindeğerinin“/root”dizini altında(bu
dizin“root”kullanıcısı için“home”dizinidir) “.bash_history”dosyasıolduğunugörürüz.Bildiğinizgibi “.”
ile başlayandosyalarınadlarıancak “ls”komutuna“-a” switch’ini verdiğimizdegörülebiliyor.Eğer
sistemimizdebaşkakullanıcılardaolsaydıve bukullanıcılarinteraktif olarakshellortamınıkullansalardı
muhtemelenonların“home”dizinlerinde de historydosyalarınıgörecektik.
Peki içinde “HIST”geçendiğerçevreseldeğişkenlerne anlamageliyor.Önceliklebudeğişkenler
“.bashrc” scriptininiçindegeçiyor.
71. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri
KALİLİNUX HAKKINDA HERŞEY
70
Bu script’te belirlenendeğerleri açıklarsak:
HISTFILESIZEdeğeri “.bash_history”dosyasınıntaşıyabileceği maksimumsatırsayısını belirtiyor.
HISTSIZE ise aktif oturumiçinhafızadatutulan(ve shell’dençıkışyapmadandiske yazılmayacak
olan) maksimumkomutsatırsayısını belirtiyor.
HISTCONTROLdeğişkeniise şudeğerleri alabilir:“ignorespace” –boşlukkarakteri ile başlayan
komutlarınhatırlanmasınıengelliyor,“ignoredup” –bir önce kullanılankomutlaaynıolan
komutlarınhatırlanmasınıengelliyor.Eğerbudeğeryukarıdada görüldüğügibi “ignoreboth”ise
hemboşlukkarakterleri ile başlayansatırlarınhemde bir önceki satırlaaynı olansatırların
hatırlanmasınıengelliyor.Eğer“erasedup”değerikullanılırsabukaydedilecekolankomut
kaydının aynısındandosyanınönceki bölümlerinde bulunanlarıntamamınınsilinmesigerektiği
anlamınageliyor.
Yukarıdaki HISTFILESIZEve HISTSIZEparametreleri birazkafakarıştırıcı. Bununetleştirmekiçinaşağıdaki
örneğe gözatın:
72. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri
KALİLİNUX HAKKINDA HERŞEY
71
Yukarıda gördüğünüzdurumşuşekilde gelişmiştir;“wc.bash_history”komutuile budosyaiçindeki satır
sayısının 999 olduğunugörüyoruz.Dahasonrabudosyanınson 3 satırını görüntülediğimizde ise“wc
.bash_history”komutunugöremiyoruz.Tekrar“wc”komutuile satır sayısını görüntülediğimizdebu
dosyanıniçeriğinindeğişmediğinigörüyoruz(kaldıki maksimumsatırsayısı2000 idi).Ancakyukarıok
tuşunabastığımızda bir önceki komuttekrargörüntüleniyor.Çünküişletimsistemi açıkolanoturumda
daha önce kullanılmışolankomutlarıshell “exit”komutuylaveyaçarpıişaretindenkapatılmadanson
kullanılankomutlarıdosyayayazmıyor.İşte HISTSIZEhafızadasaklananancakhenüzdiske yazılmamış
olanbu kayıtlarınsayısını sınırlandırıyor.
73. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri
KALİLİNUX HAKKINDA HERŞEY
72
VI. Manuel Dosyaları
Manuel Dosyaları(man pages)
Man page’leri Unix ve Unix’inmirasçısıolanLinux’unengüzel yanlarındanbirisi.Biraztarihçesinden
bahsetmekgerekirse ilkiki yıl Unix projesi ile ilgili hiçbirdokümantasyonyapılmamış.İlkmanpage’leri
proje ekibi yöneticisinin(Doug McIlray) zorlamasıylaUnix’inilkgeliştiricilerindenDennisRitchie ve Ken
Thompsontarafındanyazılmış.Bu tarihtenitibarende Unix üzerinde geliştirilentümuygulamalarve
diğerkaynaklariçinmanpage’leri geliştirilirolmuş.
Manuel sayfalarındagenellikle bulunanbölümlereşunlarörnekverilebilir:
NAME: Komutveyafonksiyonunadıve teksatırlık tanımıdır.
SYNOPSIS:Komutlariçinkomutunnasıl çalıştırılacağıve hangi komutsatırı opsiyonlarıile
çalıştırılabileceğininaçıklandığıalandır.Program fonksiyonlarıiçinfonksiyonlarınaldığı
parametrelerinlistesi ve fonksiyontanımınıiçerenbaşlık(header) dosyasınınadınıiçerir.
DESCRIPTION:Komutveyafonksiyonhakkındaki detaylıaçıklamametnidir.
EXAMPLES: Her komutiçinbulunmamaklabirlikte komutunkullanımıhakkındaörnekler
barındıran bu bölümkullanıcınınkomutuhızlıbiçimde kullanmayabaşlamasınıkolaylaştırır.
SEE ALSO: Komutlaveyafonksiyonlailgili diğerkomutlar,fonksiyonlar,dosyalarv.d.bilgileri
içerir.
Manuel dosyalarınınbaşlık alanının yanındaparanteziçinde birrakamgörünür:
74. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri
KALİLİNUX HAKKINDA HERŞEY
73
Yukarıdaki 2 örnektenbirincisinde “passwd”adınınyanında(1) ikincisinde ise (5) rakamıgörünüyor.
Bununnedeni “passwd”adınınhembirkomutadı olması,hemde bir dosyaadı olması ve man page’lerin
farklıkategorileraltındasınıflandırılması.Bugörülenrakamlardailgili kategorilerinnumaraları.
Man page kategorileriaşağıdaki gibidir:
75. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri
KALİLİNUX HAKKINDA HERŞEY
74
1 – Genel komutlar
2 – Sistemçağrıları (systemcalls)
3 – C standartkütüphanesinde bulunanfonksiyonlar
4 – Özel dosyalar(genellikle /devdizinialtındabulunancihazdosyaları) ve sürücüler
5 - Dosyaformatları
6 – Oyunlarve ekrankoruyucular
7 – Çeşitli kaynaklar
8 – Sistemyönetimkomutlarıve işletimsistemi servisleri(daemons)
Eğer birdenfazlakategorilerdebulunanbirkelime aranırsa“man3 printf”formatında,manuel dosyası
kategori bilgisi de belirtilerekgörüntülenmelidir.
“man” komutuayrıca biranahtar kelime ilearamayıda destekler.“man –karamakelimesi”formatında
kullanılanbudurumdaarama kelimesi komutadıve kısa açıklamasatırında görünentümbaşlıklar
listelenir:
76. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri
KALİLİNUX HAKKINDA HERŞEY
75
VII.Kullanıcı Yönetimi
Kullanıcıyönetimi
Unix / Linux sistemlerde kullanıcıveritabanı“passwd”dosyasındabulunur:
Bu dosyadaki kayıtlarınformatışu şekildedir:
[KullanıcıAdı]:[ParolaHashi]:[KullanıcıIDsi]:[GrupIDsi]:[HomeDizini]:[ÖntanımlıShell]
Kullanıcıadı kullanıcıylailgili işlemlerdekullanılır,ancakişletimsistemi içinkullanıcıyıifade edenasıl bilgi
“KullanıcıID” bilgisidirve erişimhaklarıbuIDdeğerine göre değerlendirilir.AynıIDdeğerinebirdenfazla
kullanıcısahipolabilir.Bunagöre IDdeğeri “0” olanbir başkakullanıcı adı da bulunabilirve “root”
kullanıcıadıyla kullandığımızkullanıcıile aynıerişimhaklarınasahipolacaktır.Buözellikgenellikle Unix
sistemyöneticileri tarafından“root”kullanıcısınınşifresininunutulmasınakarşıyedekyönetici hesabı
amacıyla kullanılır.
Kali üzerinde pekçoköntanımlıkullanıcıgelir.Ancakbunlardansadece “root”kullanıcısısisteme
interaktif shell bağlantısıkurabilir.BudaUnix sistemyöneticilerinineskidenberi uyguladığıgeçersiz
öntanımlıshell ayarı ile sağlanır.“/etc/passwd”dosyasındatanımlıöntanımlıshell uygulamalarını
incelediğimizde aşağıdaki listeyi görüyoruz:
77. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri
KALİLİNUX HAKKINDA HERŞEY
76
Görüneno ki root kullanıcısıdışında “couchdb” ve “postgres”kullanıcılarıiçinöntanımlıshell olarakbash
tanımlanmış.Ayrıca “arpwatch” ve “speech-dispatcher”kullanıcılarıiçinde “/bin/sh”shell’i tanımlanmış.
Bu durum“root” dışında yukarıda sayılankullanıcıların da sisteme shell erişimiyapabileceği anlamına
geliyorolabilirmi?Bununcevabınıverebilmekiçinbirde “/etc/shadow”dosyasınagözatmamız
gerekiyor.