[TR] Project ~ K3pler

orhun

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 ediyorum:

“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)


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.

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:

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 Detaylar

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/vi...hout-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.

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.

Özellikle anlatılan overlay tipi arayüz mantığında geçtiğimiz yıllarda kritik bir atak vektörü keşfedilmiştir: https://researchcenter.paloaltonetwo...o-permissions/


Özellikler

  1. Ağ trafiğini listede bazı kısaltmalar ile göstermektedir.
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.

4. Ayarlar

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 Ayarlama
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...er-on-android/

Mobil Ağ Proxy Ayarlama
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/...obile-network/


orhun

Written by

orhun

github.com/orhun

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade