Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Kali Linux Hakkında Herşey

6,238 views

Published on

Kali linux işletim sistemi hakkında herşey

Published in: Technology
  • Be the first to comment

Kali Linux Hakkında Herşey

  1. 1. KALİ LİNUX HAKKINDA HERŞEY
  2. 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
  3. 3. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri KALİLİNUX HAKKINDA HERŞEY 2 XXI. Komut Satırından Dosya İndirme..................268 XXII. Editörler ve dosya izleme araçları................302 XXIII. BTRİSK Hakkında........................................308
  4. 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. 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. 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. 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.
  8. 8. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri KALİLİNUX HAKKINDA HERŞEY 7 II.Linux Shell Ortamı Shell ortamı Linux işletimsistemleri ilebirliktemasaüstüortamlarıdageliyor,amalinux’un(vetabi Unix’in) başından itibarenve halenengüçlükullanımpaneli shell ortamıdır.BirUnix sistemyöneticisinintümişlerini GUI ortamlarındahalletmesiçokzordur.Bunedenle shell ortamınıiyi tanımamızlazım. Shell nedirdersenizkısacabirkomutişleyici (commandprocessor) diyebiliriz.Shell komutları kullanıcıdankomutsatırından alabileceği gibi birdosyadandaalabilir.Butürdosyalarascript(betik) dosyasıdiyoruz. Kali’de shell arayüzünüTerminal uygulamasıile başlatabiliriz. Veyasol uygulamaçubuğununenaltındaki seçeneğetıkladıktansonrauygulamaisminiarayabiliriz.
  9. 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. 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. 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. 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
  13. 13. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri KALİLİNUX HAKKINDA HERŞEY 12 Bash,interaktif loginshell olarakbaşlatıldığında(yani diyelimki Kali’yeuzaktansshveyatelnetgibibir protokolle eriştiniz,loginoldunuzve birshell ortamınaulaştınız) “/etc/profile”dosyasındabulunan komutlarçalıştırılır. “/etc/profile”dosyasınıniçeriğinebaktığınızdabirshell scriptbarındırdığını görebilirsiniz.Buradayapılan ilkişlemkullanıcıid’sine göre PATHçevresel değişkenininayarlanması,bunun hemenaltındada commandprompt’unmevcutolupolmamasınagöre bazıişlemleryapılıyor. “/etc/profile”dosyasıokunduktanve çalıştırıldıktansonrabashsırasıylaaşağıdaki dosyalarıarar ve bulduğuilkdosyadaki scripti çalıştırır:  ~/.bash_profile  ~/.bash_login  ~/.profile Nedenhem.profile hemde .bash_profile v.d. dosyalarvarderseniz,budosyalarınkullanıcının$HOME dizinindebulunmasıgerektiğini söylemiştik.Eğerbukullanıcıhesabıiçinloginshell’i basholarak ayarlanmışsaherikisi de,farklıbirshell tanımlanırsasadece .profile dosyasındaki komutlar çalıştırılacaktır. Bu nedenle bash’eözel syntax gerektirenkomutların.bash_profile dosyasınayazılması, farklıbir shell kullanılacaksa.profiledosyasınınkullanılmasıönerilir.Ancakbashkullanılmasıhalinde .bash_profile dosyasıvarsasadece budosyadaki komutlarçalıştırılacak,.profiledosyasıdikkate alınmayacaktır. Yukarıdaki dosyaisimlerinde ilginçolabilecekiki konuvar.Bunlardanbirincisi baştaki “~”yani tilda işareti.Buişaretinshell içinözel biranlamıvardır,o da kullanıcınınHOME dizinini ifade etmesidir.HOME
  14. 14. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri KALİLİNUX HAKKINDA HERŞEY 13 dizini dahaönce de gördüğünüzpasswddosyasındaherbirkullanıcısatırında sondanikinci alanda belirtilendizinadıdır.Örneğinrootkullanıcısıiçinbudeğerin“/root”olduğunuaşağıdagörebilirsiniz. İkinci ilginçkonuise dosyaisimlerininbaşındaki “.”yani noktaişareti.Shell de özel birswitch kullanmadan“ls”yani listkomutunuçalıştırdığınızdalistelediğinizdizinveyadosyaisimlerininbaşında “.” geçendosyalarlistelenmez.Yani birtürgizlenmişdosyahalinegelirler.Buiyi niyetli olarak düşünürsekgenelliklekritikdosyalarınyanlışlıklasilinmeveyabozulmaihtimalini azaltmakiçin geliştirilmişbiryöntemdir. Loginshell’dençıkıldığında Eğer varsa aşağıdaki scriptdosyasıçalıştırılır:  ~/.bash_logout Interaktif shellolarakbaşlatıldığında(örneğindesktoportamınaloginolduktansonraTerminal uygulamasınıbaşlatarak) Eğer varsa aşağıdaki scriptdosyasıçalıştırılır:  ~/.bashrc Sondaki “rc” harfleri “runcommands”ifadesininkısaltmasıdır. *Çevresel değişkenler(environmentalvariables)* Shell ortamındamevcutolanilginçbirfonksiyonalitede çevresel değişkenler.Yukarıdabahsedilen startupscript’lerinönemli birbölümüde buçevresel değişkenlerindeğerlerininbelirlenmesineyönelik.
  15. 15. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri KALİLİNUX HAKKINDA HERŞEY 14 Önce çevresel değişkenlerneye benzeronugörelim: Setkomutulokal değişkenlerinoluşturulmasıiçinkullanılır.Herhangi birargümanalmadankullanılırsa mevcutlokal ve çevresel değişkenleri listeler.
  16. 16. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri KALİLİNUX HAKKINDA HERŞEY 15 Yukarıdaki çevresel değişkenlerelbettebelli biramaçiçinvarlar.Öncelikleçevreseldeğişkenlerinana kullanımalanlarındanbirisindebahsedeyim.Shell scriptingiçinçevresel değişkenlerpratikbirparametre aktarım alanıdır. Bir shell oturumuiçindebirshell script’i çalıştırdığınızdashell prosesine(parent)bağlı bir alt(child) prosesbaşlatılır.Ancakparentproseste tanımlıolantümçevresel değişkenlerchildprosese
  17. 17. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri KALİLİNUX HAKKINDA HERŞEY 16 de aktarılır. Bu aktarım teknikolarakçevresel değişkenlerdenoluşanbirarray’inadresininbaşlatılan prosese parametre olarakverilmesi şeklindegerçekleşir.Böylece bazıönemli tanımlarınaktarımıiçin başlatılanbirscript’e parametre verilmesigerekmez.Aynıdurumsadece shell script’leriçindeğilbinary uygulamalarve diğerdillerdeki scriptleriçinde geçerlidir.Shell script’lerdışındaki uygulamalardaki tek temel farkçevresel değişkenlere doğrudanerişememeleri,uygulamanınyazıldığıdilinsağladığıbirAPI fonksiyonunukullanmalarıgerektiğidir.Örneğin“C”dilinde bununiçin“getenv”fonksiyonunun kullanılmasıgereklidir. Shell scriptiçinde ise aşağıdaki ifadeile birçevreseldeğişkenindeğerine erişilebilir: Çevresel değişkeninbaşınaeklenecek“$”işareti budeğişkenindeğerine erişmekiçinyeterlidir.Teknik olarakyukarıda gerçekleşenişlemvariable substitutionişlemidir.Bukonuyadahasonradeğineceğiz. Yeni birçevresel değişkentanımlamakiçinse şuişlemlerinyapılmasıgereklidir:
  18. 18. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri KALİLİNUX HAKKINDA HERŞEY 17 “export”komutuile tanımlananbirdeğişkençevresel değişkenolacak,bushell içindenbaşlatılanbaşka bir prosesbuçevresel değişkenindeğerineerişebilecektir. Değişkendeğeriniaşağıdaki gibi tanımlamışolsaydımbudeğişkensadece içinde bulunduğumuzshell’e özel olacaktıve childproseslertarafındanerişilemeyecekti:
  19. 19. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri KALİLİNUX HAKKINDA HERŞEY 18 Değişken,variable substitutionve commandsubstitutionkonularınashell scriptingbölümünde daha detaylıdeğineceğiz. *Concurrent(eşzamanlı),batch(sıralı) ve conditional (koşulabağlı) çalıştırma* Shell ortamınınsağladığı birbaşka imkandaeş zamanlı,sıralı ve koşulabağlı çalıştırma imkanlarıdır. Yukarıdaki işlemde birinci komut“&”işareti ile arkaplana(background) atılmakta,ancakçalışmaya devametmekte ve standartoutput(stdout) olarakekranıkullanmayadevametmektedir.(background ve stdoutkonusunubirazdanaçıklayacağız) İkinci komutise önplanda(foreground) çalışmayabaşlamaktave buşekildedevametmektedir.Çıktılara dikkatederseniziki farklıprosesinçıktılarınınbirbirlerininarasınagirdiğini farkedebilirsiniz.
  20. 20. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri KALİLİNUX HAKKINDA HERŞEY 19 Sıralı çalıştırmada çok ilginçbirdurumyok,önce birinci komutçalışıyor ve çalışmasını tamamlıyor,birinci prosestamamlandıktanhemensonraikinci komutçalışmayabaşlıyor. Buradaki sıralı (batch) çalıştırma script içinde komutçalıştırmayabenzerbirdurum, ancakaynı satırda birdenfazlakomutusıraylaçalıştırmaktanbahsediyoruz.
  21. 21. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri KALİLİNUX HAKKINDA HERŞEY 20 Koşulabağlıçalıştırmada “&&” kullanılmasıhalinde ikinci komutancakbirinci komutbaşarıile sonuçlandığında(returnkodu0 olduğunda) çalışmaktadır.Eğerbirinci komutbaşarıile sonuçlanmazsa ikinci komutçalışmamaktadır. Yukarıda ilkkomutunhataaldığı durumdaözel değişken“$?”sonçalışan prosesinreturnkodunuiçerir. Bu değere baktığımızda0’dan farklı(1) birdeğertaşıdığını görebiliriz.Budurumprosesinhataile sonuçlandığınaişarettir.
  22. 22. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri KALİLİNUX HAKKINDA HERŞEY 21 Koşulabağlıçalıştırmada “||” kullanılmasıhalinde ikinci komutancakbirinci komutbaşarısızolduğunda (returnkodu0’dan farklıolduğunda) çalışmaktadır.
  23. 23. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri KALİLİNUX HAKKINDA HERŞEY 22 *Proses’leri arkaplanve önplandaçalıştırma imkanları* Bazençalıştırmak istediğimizprosesçokuzunsürebilir.Ancakbizaçmışolduğumuzshell’i kapattığımız anda bu shell’denbaşlattığımızproseslerde sonlanacaktır.Böyle birdurumda“nohup”komutunu kullanabiliriz.Bu“nohang up”kelimelerininkısaltmasıolanbirifadedir. Yaptığıişlemshell kapansadahi prosesin(bilgisayar/sunucushutdownedilmediğisürece)çalışmasınadevametmesini sağlamaktır. Nohupkomutuile çalıştırılankomutbizshell’i kapatsaydıkdaçalışmayadevamedecekti.Nohupeğer çıktı (stdout) ve hataçıktısı (stderr) yönlendirmesiyapılmamışsaçalıştırdığıkomutlarınçıktılarını içinde bulunulandiziniçinde oluşturacağınohup.outdosyasınayazar.Eğerbu uyarıyı ve çıktının herhangi bir yere yazılmasınıistemiyorsanızaşağıdaki işlemiyapmanızgerekir.
  24. 24. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri KALİLİNUX HAKKINDA HERŞEY 23 Bu basitsatırın içinde ağırbir içerikvar.Birincisi inputve outputredirectionkonusu,ikincisi ise /dev/null gibi özel Unix /Linux dosyalarıhakkındabilgi.Bukonulardaörnekleriayrıcavermekkaydıylaözetolarak bir girişyapacağım. Küçüktür(<) işareti ile belirttiğimizdosyanohupkomutuiçinbirinputdosyasıhaline geliyor.Yani komut girdisini komutsatırındandeğil de belirtilendosyaiçeriğindenalıyor. Büyüktürve ampersand(>&) işaretleri hemçalıştırılankomutunçıktısınıhemde hata mesajlarınıbu işaretlerdensonrabelirtilendosyayayönlendiriyor,buyüzdenekrandaherhangi birçıktıgörmüyoruz. Stderrçıktılarının stdoutçıktıları ile birlikte yönlendirilmesi içineski modayol (2>&1) ifadesidir.Farklıbir kaynaktabu şekilde biryönlendirme de görebilirsiniz.2ve 1 rakamlarının geldiği yerise stdinfile descriptor’ının0,stdout file descriptor’ının1ve stderr file descriptor’ının2olmasıdır (Unix’te herşeyin bir dosyaolduğunuhatırlayın).Filedescriptornedirdersenizbu integerdeğerişletimsisteminin üzerinde çalışanuygulamalarabudosyalaraerişimiçinverdikleri “handle”değeridir.Uygulamalarbu değerleri dosyalaraokuma,yazma,silmegibi erişimleriçinkullandıklarıkütüphanefonksiyonlarına parametre olarakverirler. /devdizini filesystemhierarchystandard’agöre device dosyalarınıntutulduğudizin:
  25. 25. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri KALİLİNUX HAKKINDA HERŞEY 24 Unix’te herşeybirdosyadır./dev/null iseözel birdosyadır.Budosyayıkara delikolarakdüşünebilirsiniz. Bu dosyayayazdığınız herşeyboşluğagider,budosyadanaldığınız girdi ise hiçbirşeydir.Bunabenzer diğerdosyalaraşunlarıörnekverebiliriz:  /dev/zero(süreklisıfırüretir)  /dev/random(rastgele sayıüretir) Bir prosesi baştanarkaplandabaşlatabileceğinizgibiönplandabaşladıktansonradaarka plana gönderebilirsiniz.Ancakbununiçinöncelikleönplandaçalışanprosesi Ctrl+Zkısayol tuşuile duraklatmanız(suspendetmeniz) gerekir.(TeknikolarakproseseSIGTSTPsinyali göndermekten bahsediyoruz).
  26. 26. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri KALİLİNUX HAKKINDA HERŞEY 25 Yukarıda öncelikletoplam100 defa192.168.163.1 IPadresine pingatacakkomutubaşlattıktanve çıktısını da /dev/null dosyasınayönlendirdiktensonra(evetbiliyorumbirazanlamsızoldu,amaekranı kirletmesinistedim) Ctrl+Zkomutuile buprosesiduraklattım.Dahasonra“bg” komutuile önplanda olanprosesi arkaplana attım.Hemenardından budefa100 adetping(echorequest) işlemini gerçekleştirmeküzere farklıbirkomutçalıştırdım.Bunuda arka plana attıktansonra “jobs”komutuile arka plandaki tümişleri listeledim.“fg%1” komutuile bunlardanbirincisıradaolanınıön planageri aldım. *Proses’lere sinyal gönderme* Şimdi sinyal konusunave bununshell ortamıile ilgiliuygulamasınageçelim.Diyelimki shell’denbir proses’i başlattınızamaçok uzunsürdü,sizde buproses’i sonlandırmakistiyorsunuz.Elbette shell erişiminisağlayanTerminaluygulamasınıçarpı düğmesindenkapatmakbirçözüm, çünküterminal uygulamasındanbaşlatılanshell uygulaması(bash) ve bundanbaşlatılanproses’inizbirbirleri ile parent childprocessilişkisine sahipve bunedenleterminaluygulamasıkapandığındabaşlattığınızproses’de (nohupkomutuylabaşlatmadıysanız) sonlanacaktır.Ancakbupekpratikbiryöntemdeğil.Onunyerine işletimsistemine artıkprosesi sonlandırmakistediğiniziiletmenindahapratikbiryoluolmasılazım.Bu ve benzeri diğerihtiyaçlarnedeniyleLinux (ve diğerişletimsistemleri) sinyal(signal) altyapısınısunuyor. Sinyal altyapısıçalışmaktaolanproses’lere birinterruptgöndermeimkanısunuyor.Yani prosesinkendi iç dinamiklerindenbağımsızbaşkabirproses(veyakullanıcınınyapacağıbir işlemdiyelim) diğerproses’e standartbir mesaj gönderiyor.Buteknikolarakasenkronbirmesaj ve birsoftware interrupt.Hardware interruptkonusudahaçokişlemci mimarisi ile birlikte anlaşılabilecekbirkonu,buyüzdengerekli genel bilgi ihtiyacıdahafazla,ayrıca shell kullanımıile de birilgisiyok.
  27. 27. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri KALİLİNUX HAKKINDA HERŞEY 26 Kendisinebirsinyal gönderilenbirprosesbusinyale aşağıdaki şekillerdetepki verebilir:  Sinyali bilerekve isteyerekgörmezdengelebilir  Sinyali yakalayarakkendiistediği birbiçimdeyanıtverebilir  Kendi içinde hiçbirdüzenleme yokise sinyale öntanımlıtepkiyi verebilir Yukarıdaki ilkiki işleminnasıl yapılacağıuygulamanıngeliştirildiği dilve budilinkullandığıkütüphane imkanlarıile ilgili birkonu,buyüzdendetayınagirmeyeceğiz.Ancakbirprosesinsinyali yakalamasıve bunaöntanımlı tepkinindışındakendi istediği tepkiyi verenbiruygulamaörneği olarak“hping” uygulamasınıörnekverebiliriz.“hping”uygulamasıCtrl+Ztuşlarıile kendisinesuspend(SIGTSTP) sinyali gönderildiğinde businyali gönderdiği paketlerinTTLdeğerlerini artırmakveyaazaltmakiçin kullanabilmektedir.Aslındabuoldukçaakıllıcabiryöntem, çünkükullanıcıdanuygulamaçalışırkengirdi almakiçinbu asenkronkanal zatenişletimsistemi tarafındansağlanmış. Yukarıdaki örnekte hping’i www.btrisk.com sunucusunayönelikolarakTCPSYN (-S) bayrağıişaretli, başlangıçTTL değeri 0 (-t0), 80 portuna(-p80) yönelikve Ctrl+Ztuşlarıile TTL değeri herseferinde 1 artacak biçimde (-z) paketgöndermeyebaşlıyoruz.HerCtrl+Ztuşlarınabasıldığında TTL değeri 1 artıyor. TTL değeri 2 olduğundanormalde“TTL0 duringtransit”yanıtını görmeye devametmemizlazımçünkü www.btrisk.com sunucusu2hop’tandahauzakta.Ancak görünenoki sanal makine’dençıkanpaketlerin TTL değerleri orijinal değerlerindenfarklılaşarakhostmakineninöntanımlıdeğerinialıyorlar.Bukonu kafanızı karıştırmasın diye açıklamakistedim.
  28. 28. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri KALİLİNUX HAKKINDA HERŞEY 27 Tekrar sinyal konusunadönersek,normaldebirproses’e komutsatırındanbirsinyal göndermekistersek “kill”komutunukullanabiliriz.
  29. 29. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri KALİLİNUX HAKKINDA HERŞEY 28 “kill”komutununöntanımlıdavranışıSIGTERMsinyali göndermekşeklinde,amaismi yanıltıcıolabilir, herdurumdaprosesi sonlandırmakamacıylakullanılmasışartdeğil.Sinyal türleriniyukarıda görebilirsiniz,signal.hdosyasındasinyallerinanlamlarınailişkincommentbilgileride görülebilir.
  30. 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.
  31. 31. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri KALİLİNUX HAKKINDA HERŞEY 30 Yukarıda btrisk.txtadlıdosyanıniçeriğini “cat”komutuile görüntülüyoruz.“cat”komutunormalde stdoutve stderr hedefleriolarakshell ortamınıkullanıyor.
  32. 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. 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. 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. 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. 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. 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. 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. 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).
  40. 40. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri KALİLİNUX HAKKINDA HERŞEY 39 “-a” switch’i ismininbaşında“.”olandosyave dizinlerinde listelenmesini sağladı.Budosyalardan bazıları daha öncedenbahsi geçenstartupscript’leri,çünküşuanda“root” kullanıcısının“home” dizinindeyiz.Hangi dizininiçinde olduğumuzu“pwd”yani “presentworkingdirectory”komutuile görebiliriz.
  41. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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.
  53. 53. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri KALİLİNUX HAKKINDA HERŞEY 52 Dosyamanipülasyonuileilgilitemelişlemlerdenbirisi de dosyakopyalamaişlemi “cp”komutuile yapılıyor.Dosyaismininbasitbirbiçimde değiştirilmesi ile ilgili komut“mv”yani “move”komutu. “rename”komutuise birperl deyimi iledosyaisimdeğişikliğiiçinkullanılıyor.“rm”komutudatahmin edilebileceği dosyasilmekiçinkullanılıyor. *Dosya arama* Shell ortamındaönemli olanbirbaşkakonudabir çalıştırılabilirdosyanınismi yazılarakçalıştırıldığında aslındahangi dosyanınçalıştırıldığı konusudur.Windows’abenzerşekilde Linux’tadabirPATHçevresel değişkenibulunmaktadır.Budeğişkenstartupscript’leri ileherkullanıcıiçinatanır. Linux’taPATHdeğişkeninidiğerlokal veyaçevresel diğerdeğişkenleri görüntülediğimizgibi görüntüleyebiliriz.
  54. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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.
  78. 78. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri KALİLİNUX HAKKINDA HERŞEY 77 “/etc/passwd”dosyasındaki kayıtlarınformatınıaçıklarken2.alanda parolahash’ininbulunduğunu söylemiştik.Ancakbudosyadaki bualantümkullanıcılariçin“x”karakteri ile tanımlanmış.Bunun nedeninibirazdanaçıklayacağım.Parolahash’lerieğer“/etc/passwd”dosyasındabuşekilde tanımlanmışsaasıl “hash”değerleri “/etc/shadow”dosyasındatanımlanmaktadır. Yukarıda geçerli biröntanımlıshell’esahipolankullanıcılararasındasadece “root” kullanıcısınınbir parolahash’ine sahipolduğunugörebilirsiniz.Hiçbirhashdeğeri “!”veya“*” olamayacağınagöre diğer kullanıcıhesaplarınaloginolmakmümkündeğildir.(“*”hiçparolaoluşturulmamış,“!”ise hesap kilitlenmişanlamınagelmektedir.) DolayısıylaKali dağıtımıöntanımlıolaraksadece “root” kullanıcısıile loginolabilecekşekilde dağıtılmaktadır. “/etc/shadow”dosyasınınvarlıkamacını açıklayabilmekiçinöncelikle “/etc/passwd”ve “/etc/shadow” dosyalarınınerişimhaklarınıinceleyelim.
  79. 79. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri KALİLİNUX HAKKINDA HERŞEY 78 Yukarıda gördüğünüzgibi “/etc/passwd”dosyasınınerişimhaklarıtümkullanıcılarınbudosyayı okuyabileceği biçimdeayarlanmıştır.Bununnedeni tümkullanıcılarınkullandığıkomutlarınbirkısmının passwddosyasındaki bilgileri kullanmaihtiyacıdır,örneğinkomutuçalıştırankullanıcınınhome dizininin bilme ihtiyacı,dosyaerişimizinlerinianlamasıgerekenkomutlarınkullanıcıID’si ve kullanıcıadı arasındaki dönüşümüyapabilmesiihtiyacıgibi.Eğerparolahashdeğerleri budosyaiçinde tutulursa sisteme erişebilentümkullanıcılarkendikullanıcılarınınve diğertümkullanıcılarınparolahash’lerini elde edebilirler.Parolahash’leri elde edildiktensonraçevrimdışıparolakırmasaldırılarına tabi tutulabilirler. İşte bu nedenleparolahash’leri sadece “root”(yani userID’si “0”olankullanıcı veyakullanıcılar) tarafındanerişilebilecekolan“shadow”dosyasındasaklanırlar. Bununlabirlikte herkullanıcınınkendi parolasınıdeğiştirebilmesigerekmektedir.“passwd”komutuyla yapılanbu işlemingerçekleştirilebilmesi içinbukomutunerişimhaklarınınçalışmaanında“root” kullanıcıseviyesine yükselmesigerekmektedir.Buhakkın“s” bittanımı ile yapıldığını dahaönce açıklamıştık.Bu komutunerişimhaklarındaexecuteyetkisininyerinde “s”harfini görmemizinsebebi budur,çünkü“passwd”komutu“shadow”dosyasındadeğişiklikyapabilmelidir. Kullanıcıyönetimi ileilgili birbaşkaönemli dosyada“/etc/group”dosyasıdır.
  80. 80. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri KALİLİNUX HAKKINDA HERŞEY 79 [GrupAdı]:[GrupParolaHashi]:[GrupIDsi]:[GrupÜyeleriListesi] Grup parolası nedirderseniz,varolmasebebi “newgrp”komutuile başkabirgrubundahaklarınasahip olabilmektir.Ancakgrupparolasıpaylaşılanbirparolaolduğundanve pekde kullanımihtiyacı doğmadığındangenellikle tanımsızolur. Her kullanıcınınpasswddosyasıkaydındabirgrup ID’si bulunur.Ancakbirkullanıcıbirdenfazlagrubun üyesi olabilirve butanımlamagroupdosyasındayapılır.Yukarıdaki örnekte sadece “audio”grubuiçin “pulse”kullanıcısıbelirtilmiş.”pulse”kullanıcısının“passwd”dosyasındaki tanımınabaktığımızdaise bu kullanıcınıngrup ID’sinin126 olduğunugörüyoruz.
  81. 81. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri KALİLİNUX HAKKINDA HERŞEY 80 Kali dağıtımının genel amaçlıUnix / Linux sistemlergibi ciddi birkullanıcıve grupyönetimine ihtiyaç bulunmadığındanneredeysehiçgrupmantığı kullanılmamışkullanıcılariçin. ÖntanımlıKali dağıtımında shell erişimi mümkünolarakbulunantekkullanıcıolan“root” kullanıcısının parolahash’ini ve “shadow”dosyasındaki diğerkayıtalanlarınıinceleyelim.
  82. 82. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri KALİLİNUX HAKKINDA HERŞEY 81 “shadow”dosyasındaki kayıtformatıaşağıdaki gibidir:  Kullanıcıadı: “root”  Parolahash’i ve diğerhashbilgileri: $6$VcS1CHvP$UYi9fhLxsvVB7bVz8E06yPaBkseiJ8UlPHqphUeEgpZnxDqZx5bJFpDw3aM4gnSj007 9Wbj15XFJG6gRHUfBh/  Parola’nınson değiştirildiği tarih(Unix epoch’tanitibarengüncinsinden): 16925 (4 Mayıs 2016)  Parola’nındeğiştirilebileceği enyakıngün(0 herhangi birzamandeğiştirilebileceğianlamına gelir):0  Parola’nınkaç günsonra değiştirilmeye zorlanacağı(99999 sınırsız süre boyunca değiştirilmeyebileceği anlamınagelir): 99999  Kullanıcınınkaç gün öncedenparoladeğişikliğihakkındauyarılacağı: 7  Parolakullanımsüresi dolduktankaçgünsonrahesabınkilitleneceği: Tanımsız  Hesabınkilitlendiği tarih(Unix epoch’tan itibarengüncinsinden): Tanımsız  Rezerve alan(dahasonrakullanılmaküzere ayrılmıştır) Parolahash’i ve diğerbilgilerise aşağıdaki gibi:  Hash türü  $1 = MD5  $2 =Blowfish  $2a=eksblowfish  $5 =SHA-256  $6 =SHA-512  Saltdeğeri  Hash değeri Hash alanındaki bölümler“$” karakteri ile ayrılmış.İlkbölümhashhesaplamaalgoritmasınıifade ediyor. Bu bilgiyi yukarıdadagörüldüğügibi /etc/pam.d/common-passworddosyasıiçinde de görebiliyoruz. İkinci bölümise yine Unix’e hasgüvenlikartırmaönlemlerindenbirisi.HatırlarsanızUnix /Linux sistemler çok kullanıcılısistemlerve tümkullanıcıların“passwd”dosyasınıgörme ihtiyacıvar demiştik.Bu durumdasistemi kullananbirbaşkakişinin de benimparolamlaaynıparolayasahipolmasıhalinde hash değerleri aynıolacaktıve benbu durumugördüğümde diğerkullanıcınınparolasınıöğrenmişolacaktım. Salt(tuz) değerininhashhesaplamadenklemine parolailebirlikte girmesihembudurumuortadan kaldırıyor(çünküparolalarımızaynı olsa da saltdeğerleri farklıolacağındanhesaplananhashdeğerleri farklıolacak) hemde rainbowtablosaldırılarıdediğimizparolahashkırma saldırılarınınetkinliğini çok azaltıyor.Rainbowtablolarıolasıtüm parolalarınhash’lerininuzunbirzamaniçinde hesaplandığıve bu değerlerin saklandığıtablolar.Dolayısıylabirhashele geçirdiğinizdeçokkısabir sürede butablolar sayesinde parolayıkırabiliyorsunuz.Ancaksaltdeğeri devreyegirdiğindeparolanınhash’inin hesaplanmasıve saklanmasıiçingerekli kaynaklargeometrikolarakartıyor.Bunedenle saltkullanımı parolahash güvenliğiniçokartırıyor. Kali’ninöntanımlıolaraksadece “root”kullanıcısınıninteraktif kullanabileceğişekilde geldiğini söylemiştik.Şimdi yeni birkullanıcıekleyelim.

×