22 Ocak 2018

Steganografi Sanatı


Veriyi resim veya ses dosyası gibi dosyaların içine gizlemek denilince akla gelen bilimin, sanatın adı steganografidir.
Çoğunlukla veriler resim dosyalarının içine gizlenir bunun için hali hazırda bulunan uygulamalar vardır, bu uygulamalar arasında veriyi resmin içine gizleyip ayrıca şifrelemek de mümkündür. Resim dosyalarına veri gizlemek günümüzde en popüler olan gizleme yöntemidir. Sebebi ise;

* Bir resim dosyasına gizlenen veriyi çıplak gözle görmemiz mümkün değildir.

Peki gizlediğimiz veri resim dosyasının neresine gizleniyor?

Fotoğrafını çektiğiniz renkli bir resim düşünün genelde bu resimler yüksek çözünürlüklü olduklarından 24 bitlik resimlerdir.
Yani her piksel 24 bit'tir ve 16 milyon değişik renk sunmaktadır. Resmin 8,16,24,32 bit olması resmin renk derinliğini belirtir.
Aşağıda renk derinliklerinin her bite göre ne kadar renk olduğu belirtilmiştir, bu renkler kırmızı, yeşil ve mavidir.
8 bit  = 256 renk
16 bit = 65.536 renk
24 bit = 16.777.215 renk
32 bit = 4,294,967,296 renk

bit'ler bilgisayar dilinde 0 ve 1'leri temsil eder. (00010001)
00010001 = 1 byte (8 bit 1 byte eder.)

Çekilen resmin her 1 byte'ının son 2 bitinin değiştirilmesi resim için fark edilemeyecek derecededir. Bu sebepten dolayı resmin son 2 bitine gizli veriler saklanmaktadır.

Avantajları

Bu sanatı işimize yarayacak şekilde kullanmamız mümkündür.
Örneğin bilgisayarımızın çalınma riskine karşılık veya dışarıdan bir saldırı sonucu dosyalarımıza kötü niyetli kişilerin ulaştığını varsayarsak ve bilgisayarımız üzerinde önemli verilerimizi tutuyorsak (parola, kredi kartı vb. önemli bilgiler) kötü niyetli kişiler bu bilgileri kolaylıkla okuyabilir, steganografi sanatı ile önem arz edecek verilerimizi belli resimlerin içine gizleyip önemli verilerimizin gizliliğini sağlayabiliriz, yalnız verilerimizi gizlediğimiz resmin boyutu artacağından dolayı kötü niyetli kişi bu işlerde uzmanlaşmışsa ve resmin pixeli düşük, boyutu yüksekse şüphe uyandırması muhtemeldir.

Şimdi uygulamalı olarak bir resim dosyasının içerisine gizli olarak gördüğümüz bir txt belgesini gizleyelim.
Bunun için Kali Linux sisteminde steghide uygulamasını kullanacağız.

Kali Linux sistemimizde eğer Steghide uygulamamız yüklü değilse apt-get install steghide diyerek yüklemeyi yapıyoruz.



Uygulamayı yükledikten sonra terminalden steghide yazarak parametreleri ile ilgili açıklamaları görebilirsiniz.


Steghide embed –cf kedi.jpg –ef SosyalMedyaHesaplarım.txt yazarak SosyalMedyaHesaplarım.txt adlı dosyamı kedi.jpg dosyamın içine gizledim,

Gizleme esnasında dosyanın içindeki gizli veriyi bir başkasının okumasına karşı önlem olarak bir şifre belirleniyor ve gizleme işlemi tamamlanıyor.


cf – cover file    : İçerisine gizleyeceğimiz dosya
ef – embed file : Gizlemek istediğimiz dosya

Gizleme işlemini yapmadan önce ve sonrası resimler aşağıdaki gibidir ve göründüğü gibi arada hiç bir fark bulunmamaktadır.


.
Steghide info komutunu yazarak jpg dosyasının içindeki dosyaları inceleyelim.

Resmin içeriğindeki gizli veriyi göstermek için soruyor 'y' diyerek devam ettiğimde bizden şifre istiyor bu şifre, veriyi resme gizlerken oluşturduğumuz şifredir.


Görüldüğü gibi içine SosyalMedyaHesaplarım.txt diye bir veri gizlemişiz.
Şimdi bu veriyi çıkartalım.


Steghide extract –sf komutu ile resme gizlemiş olduğumuz dosyayı gizlerken oluşturduğumuz şifre ile çıkartıyoruz.


cat komutu ile çıkarttığımız gizli verimizi okuduğumuzda sosyal medya hesaplarının kullanıcı bilgisi ve şifresini barındıran bir txt belgesi olduğunu görmüş olduk.

17 Kasım 2017

BTRisk Boot-to-Root İmajı BTRSYS2


Geçmiş sınavlarımızda kullandığımız diğer bir boot-to-root imajlarımızdan BTRSYS2 imajımızın bilgileri ve imaj linkini aşağıda bulabilirsiniz.

Machine Name: BTRSys2
IP : DHCP
Difficulty : Beginner / Intermediate
Format : Virtual Machine (VMware)
Description : This is a boot2root machine particularly educational for beginners. Follow us for next BTRSys systems. We hope you enjoy it!

LinkBTRSYS2-INDIR

15 Kasım 2017

13 Kasım 2017

Bir Zararlı Yazılımın Anatomisi - Bölüm 3

ZARARLI YAZILIMIN ÇALIŞTIRILMASI


Öncelikle bir sanal makineye Windows 7 32 Bit işletim sistemi kuruyoruz. Aslında bu zararlı yazılım üzerinde çalışan 32 bitlik bir proses bulunmayan bir 64 bitlik Windows 7 işletim sisteminde etkisiz kalıyor, çünkü injection yapabileceği bir proses bulamıyor (hatırlayın 32 bit’lik bir proses yine 32 bit’lik bir proses’in adres alanına injection yapabiliyordu).

12 Kasım 2017

Bir Zararlı Yazılımın Anatomisi - Bölüm 2

ZARARLI YAZILIM KODLARI

Zararlı yazılım kodları makalemizin birinci bölümünde belirtilmiş olan stratejinin uygulanmasını sağlayacak. Bu bölümde kodları, kodların içindeki yorumları ve alttaki açıklamaları okuyarak tam olarak ne yapılmaya çalışıldığını anlamaya gayret edin.

08 Kasım 2017

Bir Zararlı Yazılımın Anatomisi - Bölüm 1

Zararlı yazılımlar gittikçe önemi artan ve savunanlar tarafından en az bilinen güvenlik tehditlerinden birisi. Mevcut bir zararlı yazılımı internette örneklerinin yayınlandığı bir siteden indirerek, uygun ve güvenli bir laboratuvar ortamı kurarak statik ve dinamik analiz yapabilirsiniz. Ancak biz zararlı yazılımın en net ve etkili biçimde anlaşılması ve anlatılabilmesi için böyle bir yazılımın geliştirilmesi ve sonuçlarının test edilmesi yöntemini seçtik.

16 Ekim 2017

Anti XSS Kütüphanesi ile XSS Saldırılarından Korunma

Anti XSS kütüphanesi .NET platformunda bulunan XSS zafiyetlerini önlemek için oluşturulmuş bir kütüphanedir. Bu kütüphane aracılığıyla  XSS payloadları encode edilerek sunucuya gönderilir.

XSS (Cross Site Scripting) hakkında bilgi sahibi olmak için daha önce yazmış olduğumuz makaleye buraya tıklayarak göz atabilirsiniz.

Anti XSS kütüphanesini anlamak ve kullanımını pekiştirmek için küçük bir uygulama yapacağız, uygulamamızı Visual Studio kullanarak C# dilinde yazacağız.



Projemize XSS_Sayfa1 ve XSS_Sayfa2 olarak 2 adet web form ekliyoruz .


Amacımız sayfa1’deki input alanına yazdıklarımızı sayfa2 ye post etmek.




Sayfa1’e 1 adet textbox ve request işlemimizi yapması için 1 adet buton ekliyoruz.


Kod kısmına gelerek XSS_Class adında bir class ekliyoruz (Sayfa2’ye göndereceğimiz değeri classta tutacağız.)

public class XSS
        {
            public static string XSSPayload;
        }

Butonun click eventine gelerek aşağıdaki kodları yazıyoruz. Textboxa yazılan değeri XSS class’ının XSSPayload özelliğine atıyoruz, sonrasında XSS_Sayfa2.aspx sayfasına yönlendirilmesini sağlıyoruz.

       protected void btnReq_Click(object sender, EventArgs e)
        {
            XSS.XSSPayload = txtXSS.Text;
            Response.Redirect("AntiXSS2.aspx");
        }


XSS_Sayfa2’ye gelerek Page_Load eventinde çalışmasını istediğimiz kod satırlarını yazıyoruz. (Oluşturduğumuz Class’daki XSSPayload özelliğini ekrana yazdırıyoruz.)

protected void Page_Load(object sender, EventArgs e)
        {
            Response.Write(AntiXSS.XSS_Class.XSSPayload);
        }


Uygulamamızı çalıştırıyoruz.

XSS_Sayfa1.aspx’de 1 adet textbox ve 1 adet buton bulunmakta textbox’a standart olarak kullandığımız xss payloadını yazıp gönder butonuna basıyoruz.


Karşımıza bir hata çıkıyor ve xss payloadımız engelleniyor. Ama biz kontrol koymadık nasıl yaptı bunu ?

ASP.NET platformunda geliştirilen yazılımlarda inputlara yazılan ‘<’ işareti ile başlayıp ‘>’ işareti ile biten script tag’leri otomatik olarak varmı yokmu diye kontrol edilir eğer varsa ekrana bu şekilde hata fırlatır. Bunu ASP.NET otomatik olarak kontrol eder.

Hata sayfalarının kullanıcılara gösterilmesi uygulama açısından kritik bilgilerin gösterilebileceği anlamına gelebilir. Bu gibi hata sayfalarının engellenmesi gerekmektedir.

Birçok yazılımcı hata sayfalarını düzeltmek için internette bulduğu çözümü ne gibi sorunlara neden olacağını tahmin edemeyebilir. Hata sayfasının görüntülenmesini engellemek tek satır kod ile mümkündür.
 
Hata sayfasının çözümü olarak Web.config’e yazılacak kod aşağıdaki gibidir.

<pages validateRequest="false"/>


Bu kodu yazdıktan sonra biraz önceki yaptığımız isteği tekrar yapalım.
Sonuç olarak karşımıza hata sayfası çıkmadı ama yazdığımız xss payloadı çalışmış oldu.


Web.config’de yapılan değişiklikler tüm uygulamayı kapsar, ancak bu kontrolü sadece belirli sayfalarda ve belirli inputlarda kapatmakta mümkündür.

aspx sayfasının en üstünde bulunan Page Language ile başlayan satırın içine ValidateRequest="false" yazılırsa validasyon kontrollerinin bu sayfada yapılmayacağı anlamına gelir, yani diğer sayfalarda kontrol devam edecektir.  Aynı şekilde Hangi input için bu kontrolün yapılmasını istemiyorsak ValidateRequestMode="Disabled" yazarakda bu kontrolü o input için kapatmış oluruz.


Şuana kadar hatanın çözümü için yöntemlerden bahsettik, hatanın üretilmesini engelledik ama XSS zafiyetini engelleyemedik tam bu sırada Anti XSS kütüphanesi karşımıza çıkıyor ve bu kütüphane sayesinde XSS zaafiyetinden de korunmuş oluyoruz.

Gerekli kütüphaneyi projemizde kullanacağımız sayfaya ekliyoruz.

using System.Web.Security.AntiXss;

AntiXssEncoder sınıfındaki HtmlEncode özelliğini kullanıyoruz.

Response.Write(AntiXssEncoder.HtmlEncode(AntiXSS.XSS_Class.XSSPayload,false));


Aynı isteği tekrar yaptığımızda sayfanın bize alert üretmediğini görmüş olduk yazdığımız xss payloadını olduğu gibi bize gösterdi, Yani XSS zafiyetini AntiXss kütüphanesi sayesinde önlemiş olduk.
Input Encode


Output Encode


02 Ağustos 2017