k3pler [Java]

k3~

Özel Üye
5 Eki 2015
2,980
21


k3plerbg3_splash.png


Projenin ortaya çıkışından ve amacından bahsetmeden önce ismini nereden aldığına değinmek istiyorum.
~ Johannes Kepler;
gezegensel hareket yasalarını ortaya koyan, günümüz bilimine büyük katkıları olan matematikçi, astronom, gök bilimci. Yaptığı çalışmaların detayları saymakla bitmeyeceği için konuyu fazla uzatmadan kendisinden bir alıntı yaparak devam etmek istiyorum:

“I much prefer the sharpest criticism of a single intelligent man to the thoughtless approval of the masses.”
(Zeki bir insanın en sert eleştirisini, kitlelerin şuursuz takdirine tercih ederim.)

k3pler; ağ trafiğini lokal bir proxy üzerinden geçirerek ağ bağlantı analizi yapılmasına imkan veren, bunun dışında bağlantı engelleme gibi özellikler içeren ve bu tür konularda çeşitli çözümler sunmayı amaçlayan bir ağ güvenlik uygulamasıdır.

2018 Haziran'ında yayımlanan PSAUX projesininde olduğu gibi k3pler projesinin temeli de güvenlik fikrine dayanmaktadır.
Bu bağlamda k3pler, ağ güvenliği kısmına yönelerek hem belirtilen bağlantıları lokal bir proxy üzerinden engellemeyi hem de bu bağlantıları bir listeye dökerek bunlar hakkında detaylı bilgi sunmayı hedeflemektedir. Özellikle Android işletim sistemi tabanlı "akıllı" (kurnaz demek daha doğru olacaktır) telefonlarda güvenlik hususu tam bir muammadır.
Bu duruma neden olarak cihazların Google kontrolünde olması, bizim de farkında olmadan kendi kontrolümüzü dolaylı yoldan Google'a teslim etmemiz olarak açıklamak mümkündür. Ayrıca güvenliğimizden tek taviz noktası Android'in temelinde yatan Google değildir.
Android cihaza yüklenen uygulama paketleri çoğu zaman güvenli olduğu lanse edilen kaynaklardan temin edilse de pek çok zaman bu uygulamaların ya kontrolü sağlanmamakta ya da bu tür platformların tercihi noktasında başka faktörlerin etkili olmasıyla beraber uygulama edinmek için güvenilir platformlar seçilmemektedir.
Bu iki durum da büyük bir güvenlik zafiyetine temel oluşturmakla beraber bir o kadar da cihaz sahibinin özel bilgilerini tehlikeye atmaktadır.
Günümüzde eski hantal zararlı yazılımların yerini daha zeki yazılımlar almasından ötürü hiçbir uygulamaya güvenilirliğini kesinleyecek bir kaynak olmadığında güvenilmemeli, şüpheci yaklaşılmalıdır. En azından siber güvenlik alanında bu tür alışkanlıklar edinmek hem ofansif hem defansif tarafta çok yönlü ve ileriye dönük düşünme becerisi katacağından düşünce yapısını bu yönde değiştirmek daha doğru olacaktır.
Buna bağlı olarak zararlı yazılım analizi konusunda pek çok yöntem geliştirilmesine karşılık bunları atlatmak için de pek çok yöntem geliştirilmiştir. Ancak şu bir gerçektir ki saldırganların kullandığı en popüler zararlı yazılımlar veri alış-verişini çoğu zaman internet bağlantısı üzerinden gerçekleştirmektedir. Bu noktada zararlı yazılım tespitinde ağ trafiğini incelemek doğru bir tercih olacaktır.

k3pler de bu amaçla geliştirilmiş bir paket izleyici, bağlantı engelleyicidir. Cihazdaki trafiği inceleyerek giden istekleri veya gelen cevapları görebilir, buna göre güvenlik durumunuz hakkında bir çıkarım yaptıktan sonra gerekli aksiyonları alabilirsiniz. Ayrıca bağlantı engelleyici özelliğini kullanarak uygulamaların arka planda çeşitli sunucular veya web sayfaları ile iletişim kurmasını engellemek de mümkündür. Bu iki özellik örnek verilen amaçlarla kullanılabileceği gibi başka birçok kullanım alanı türetmek mümkündür. (Çeşitli uygulamaların bağlantısını kesmek, bazı kontrolleri bypass etmek gibi)

~ k3pler nasıl çalışıyor? ~

HTTP Proxy: HTTP (Hypertext Transfer Protocol) internet üzerinden veri/dosya iletimini sağlayan protokoldür. HTTP proxy ise client-server arasında köprü vazifesi görerek veri iletimini kendi üzerinden sağlar. (Ara sunucu)

k3pler, asenkron ve event-driven (olaya dayalı) bir ağ işlem kütüphanesi olan netty'yi kullanan HTTP proxy amacıyla Java'da yazılmış olan LittleProxy kütüphanesini temel almaktadır.
Kütüphanenin Maven Repository'si: https://mvnrepository.com/artifact/org.littleshoot/littleproxy

LittleProxy, HTTP proxy için birkaç argüman aldıktan sonra ağ trafiğini bu proxy üzerinden izlememizi sağlar. Ayrıca giden ağ cevaplarını değiştirebilmemize imkan vermekle beraber cihazın ağ bağlantısı üzerinde bir köprü kurmamızı sağladığını söylemek yanlış olmayacaktır.

Kütüphanenin kendi dökümantasyonunda en basit proxy bağlantısı aşağıdaki şekilde yapılmıştır:
Kod:
HttpProxyServer server =
DefaultHttpProxyServer.bootstrap()
.withPort(8080)
.start();

k3pler ise kütüphanedeki bazı tanımlı diğer fonksiyonları ve parametreleri kullanarak kütüphaneyi güvenlik uygulamaları için özelleştirmiştir.

~ teknik bilgiler ~

Uygulama Kaynak Kodu: github.com/orhun/k3pler/
LittleProxy kütüphanesi dışında ağ trafiğini liste içerisinde göstermek için ise Android'in RecyclerView kütüphanesi kullanılmıştır. Uygulamayı basit tutmak adına Android'in tanımlı kütüphaneleri ve bahsedilen kütüphaneler dışında başka bir kaynağa ihtiyaç duyulmamıştır. (build.gradle)

Projede dizin yapısı olarak karışıklık olmaması adına aynı amaçla kullanılacak olan dosyaları aynı dizinde toplama çözümüne gidilmiştir.
Bu bağlamda dizinler ve içerikleri aşağıdaki şekilde yapılandırılmıştır.

<package>/adapter -> Liste görünümü için adapter amacıyla yazılmış sınıflar
<package>/frag -> Uygulama fragment'leri. Uygulamada Fragment sınıfı implement edilmemesine rağmen dizine böyle bir isim verilmesinin sebebi projede ViewPager bileşenine Fragment yapısı kullanılmadan Fragment özelliği kazandırılmasıdır. (Bkz: https://www.bignerdranch.com/blog/viewpager-without-fragments)
<package>/handler -> Çeşitli işlemlerden sorumlu sınıfların bulunduğu dizin. (LProxy -> Proxy işlemleri, SqliteDBHelper -> Veritabanı işlemleri ...)
<package>/sub -> Uygulamanın bel kemiğini oluşturan çeşitli sınıfları içeren dizin. (HTTPReq, FilteredResponse ...)
<package>/ui -> Uygulama arayüzünden sorumlu sınıflar. (MainActivity, ProxyService)

res dizini ise varsayılan şekilde yapılandırılmıştır. (res/drawable -> Logo, splash | res/layout -> XML layout dosyaları | res/mipmap -> İkon | res/values -> Renk, tema ve string değerleri)

Uygulama arayüzünün cihazda yapılan diğer işlemleri etkilememesi adına arayüze arka planda çalışma niteliği kazandırılmıştır. Bunu sağlamak için uygulama android.permission.SYSTEM_ALERT_WINDOW izni ile çalışmakta, arayüz dosyasını (layout_main) Service sınıfını implement eden ProxyService sınıfı içerisinde dialog olarak inflate etmektedir.
Normalde Android işletim sistemi arka plan servisleri içerisinde arayüz kullanımına izin vermemektedir ancak k3pler gösterilmek istenen arayüz tipini TYPE_SYSTEM_ALERT olarak ayarlamakta, bu sayede işletim sistemi Dialog'u sistem uyarısı tipinde görmekte ve diğer uygulamaların üstünde göstermektedir. (Bu arayüz tipi pil düşük uyarısı gibi düşünülebilir. Pil düşük olduğunda uyarı penceresi tüm uygulamaların en üstünde gösterilmektedir.)

k3pler'i arka plana almak için ise geri tuşuna basmanız yeterlidir. Bu durumda k3pler çalışmaya devam edecek ve proxy üzerinden geçen trafiği yakalayacaktır. Arayüzü tekrar göstermek için ise bildirim penceresindeki uygulama bildirimine tıklamanız gerekmektedir. Uygulamayı kapatmak için ise yine bildirim penceresinden "Durdur" denmesi yeterli olacaktır.

z2TBH9.png


k3pler'in klasik Android uygulamaları gibi bir Activity'si bulunmamaktadır. Bunun yerine arka plan servisi üzerinden az önce anlatılan mantık ile uygulamaya arayüz sağlanmaktadır. MainActivity dosyası ise sadece SYSTEM_ALERT_WINDOW iznini kontrol edip arka plan servisini başlatmakla yükümlüdür. Android 6.0 ve sonrası cihazlarda uygulamalara varsayılan olarak bu izin verilmediğinden ötürü uygulama sizden bu izin için bir onay isteyecektir. Bu onay işleminin kontrolü de MainActivity içerisinde yapılmaktadır.

UIULNb.png


* Özellikle anlatılan overlay tipi arayüz mantığında geçtiğimiz yıllarda kritik bir atak vektörü keşfedilmiştir: https://researchcenter.paloaltonetw...-attack-cloak-and-dagger-with-no-permissions/

~ özellikleri ~

1. Ağ trafiğini listede bazı kısaltmalar ile göstermektedir.
Kod:
example.com ~ C [H/1.1] _S_ {time}
C -> Connect | H/1.1 -> HTTP versiyonu | _S_ -> Success
2. Bağlantıya tıklandığında request/response hakkında detaylı bilgi gösterir. Bu menüden karalisteye ekleme yapılabilir.
3. Karalistede bulunan bağlantıları engeller.

page2.png


4. Ayarlar

page3.png


4.1 Proxy Port: Proxy üzerinden bağlanılacak port numarası
4.2 Max. Buffer: Maksimum response boyutu (byte)
4.3 Eşleşme Türü:
4.3.1 Tamamı: Adresin tamamı karalistede ise engelle (örn: "google.com.tr" listede ise google.com.tr'yi engeller)
4.3.2 Kelime: Karalistedeki kelimeler adreste bulunuyor ise engelle (örn: "google" listede ise google.com.tr'yi, accounts.google.com'u engeller)
5. Karaliste HTTP Cevabı: Engellenen adrese gönderilecek HTTP response türü
5.1 BAD GATEWAY : Karşı tarafa geçersiz response gönderildiği bilgisini iletir.
5.2 BAD REQUEST : Karşı tarafa geçersiz istek gönderildiği bilgisini iletir
5.3 FORBIDDEN : Söz konusu sayfaya erişim izni olmadığı bilgisini iletir.
5.4 NOT FOUND : Mevcut değil bilgisi iletilir.
6. Başlangıç Ekranı: Uygulama açıldığında başlangıç ekranını göster

* Android işletim sisteminde sistem yetkilerine erişmeden proxy ayarı yapılamayacağından dolayı proxy konfigürasyonu manuel olarak yapılmalıdır. Bu yüzden uygulamada hem WIFI hem mobil ağda proxy ayarının nasıl yapılacağının bilgisi verilmiştir.

● WIFI Proxy ●
1. WIFI Ayarları
2. Bağlanılan ağ özellikleri
3. Ağ Yapısını Değiştir -> Gelişmiş
4. Proxy ayarlarını değiştir (örn: localhost:8090)
Alternatif: https://www.howtogeek.com/295048/how-to-configure-a-proxy-server-on-android/

● Mobil Ağ Proxy ●
1. Mobil Ağlar
2. Erişim Noktası Adları
3. Kullanılan APN'i seçin
4. Proxy ayarlarını değiştir (örn: localhost:8090)
Alternatif: https://www.cactusvpn.com/tutorials/how-to-set-up-proxy-on-android-mobile-network/

https://github.com/orhun/k3pler
(GPL License)

~ kullanılan kütüphaneler ~

https://github.com/adamfisk/LittleProxy (Apache License)
https://github.com/netty/netty (Apache License)
Android v7 RecyclerView Library (Apache License)

~ .k3
 
Moderatör tarafında düzenlendi:

TURKISH STARS

Uzman üye
15 Eyl 2018
1,073
4
başarılı.

cihazınız bu sürümle uyumlu değil diyor hocam ?
 
Moderatör tarafında düzenlendi:

'Taipan

Kıdemli Üye
30 Haz 2015
3,847
73
Güzel konu. Öncelikle ellerine sağlık, neden kullanmalısınız tarzında olan giriş kısmı çok güzel olmuş. Umarım o kısmı okuyup öyle kullanmaya çalışır ya da yorum yaparlar :) Forumda birçok kez kabaca tabirle mobil cihazım hacklendi mi? Nasıl anlarım? Tarzında sorular soruluyordu bunun için güzel bir tool olmuş en azından fikir edinmek adına. Bunun sadece web değil de ağ için de olan versiyonu ya da ayrı bir uygulaması da çok güzel olur diye düşünüyorum. Tabi mobilden root access sağlayıp termux üstünde python koşturarak scapy ile ağ trafiği analizini yapabilirler muhtemelen ama bunun için daha otomatize ve düzgün çıktı veren bir tool için de ihtiyaç var. Öneri olarak da bunu sunmuş olayım. Müsaadenle bir diğer öneri olarak da malum şuan 1.0 sürümü mevcut. Sürüm güncellemesi yapmayı düşünüyor musun bug vs durumlar haricinde eğer geliştirme planlıyorsan neleri planlıyorsun bence bunları da konuya eklersen çok daha güzel olur :)
 

k3~

Özel Üye
5 Eki 2015
2,980
21
Güzel konu. Öncelikle ellerine sağlık, neden kullanmalısınız tarzında olan giriş kısmı çok güzel olmuş. Umarım o kısmı okuyup öyle kullanmaya çalışır ya da yorum yaparlar :) Forumda birçok kez kabaca tabirle mobil cihazım hacklendi mi? Nasıl anlarım? Tarzında sorular soruluyordu bunun için güzel bir tool olmuş en azından fikir edinmek adına. Bunun sadece web değil de ağ için de olan versiyonu ya da ayrı bir uygulaması da çok güzel olur diye düşünüyorum. Tabi mobilden root access sağlayıp termux üstünde python koşturarak scapy ile ağ trafiği analizini yapabilirler muhtemelen ama bunun için daha otomatize ve düzgün çıktı veren bir tool için de ihtiyaç var. Öneri olarak da bunu sunmuş olayım. Müsaadenle bir diğer öneri olarak da malum şuan 1.0 sürümü mevcut. Sürüm güncellemesi yapmayı düşünüyor musun bug vs durumlar haricinde eğer geliştirme planlıyorsan neleri planlıyorsun bence bunları da konuya eklersen çok daha güzel olur :)
Önerileri dikkate alacağımızdan şüphen olmasın :)
Yeni versiyonlarda büyük bir değişikliğe gitmeyi gerektiren bir şey çıkmadı şu ana kadar. Koda optimize çalışmaları yapacağım şimdilik. Sqlite ile ilgili birkaç durum var.
 

Deepon

Üye
15 Eyl 2018
182
0
Elinize sağlık. Bu uygulamadan Google'ın sunucularıyla olan bağlantıları tamamen engelleyebiliyor muyuz, Android kullanmadığım için pek bir şey bilmiyorum.

Son olarak, silinmeyen uygulamaları silmeye yardımcı olacak bir araç geliştirebilirsiniz. :))
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.