Kategori arşivi: Featured

Torrent Üzerinden İndirilen İçerikler Nasıl Takip Edilir?

Herhangi bir IP adresinin son iki hafta içerisinde ne indirdiğini tespit edebilmek mümkün, kişinin makinesine herhangi bir torrent istemcisi kuruluysa ve bir şeyler indiriyorsa neleri indirildiğini bu web sitesi ile tespit edebilirsiniz. OSINT işlemleriniz için kullanabilirsiniz. Bu servis ayrıca ülke ve yıl bazlı en çok indirilen içerikleri de ayrıca kategorize etmiş durumda. Günlük en çok indirilenleri de göstermeyi ihmal etmiyor.

Her neyse örnek olarak ben kendi ip adresimi sorgulatıyorum görebileceğiniz indirme yapmamışım. Ancak benimle aynı IP aralığında yer alan diğer kullanıcılar torrent kullandığı için benzer ip listesinde kendilerini görmemiz mümkün.

torrent

Servisi kullanırken dikkat edilmesi gerekenler

  • Birden fazla kullanıcıya tek bir IP adresi atanabilir. Bu durum kullanıcının ISP\’sine bağlı olarak değişiklik gösterebilir.
  • IP adresi nadirde olsa dinamik olabilir. Bu durumda kullanıcı internete her bağlandığında IP adresi değişecektir bu sebeple indirilen içerikler farklılık gösterebilir.
  • Kullanıcı takip edilmeyen bir torrent indirmiş olabilir.(Nadirde olsa)

Hedefinizi uzun süreli takip edebilir alışkanlıklarını ve/veya sevdikleri içerikleri ortaya çıkartıp bu konu ile ilgili hedef odaklı kimlik avı saldırıları gerçekleştirebilirsiniz, bu noktada yapabileceklerinizi sizin hayal gücünüze bırakıyorum. Ayrıca IP adreslerine nasıl telif hakkı geldiği ile ilgili umarım biraz fikir edinebilmişsiniz diye düşünüyorum.

Peki bu servis nasıl çalışıyor?

Her torrent istemcisinde yer alan DHT(Distributed Hash Table) tabloları kullanılarak kimin ne indirdiğinin bilgisi tutulabiliyor. Siz her ne kadar kendinizde DHT kapatsanız bile, aynı torrenti indirdiğiniz bir başka kişide DHT açık ise otomatik olarak sizde yakalanmış oluyorsunuz. Ayrıca DHT ağına yapılan saldırı ile de bilgileriniz ortaya çıkabiliyor. Daha hızlı torrent indirmenize ve dağıtmanıza imkan sağlayan bu yapı aynı zamanda kullanıcılar için gizlilik ihlallerini de beraberinde getiriyor.

Nasıl Korunabilirim?

Öncelikle halka açık torrent sitelerini kullanmayarak işe başlayın, hemen sonrasında özel torrent sitelerini kullanıyor olsanız bile paralı çözümleri kullanın ve bu durumdan kalıcı olarak kurtulun.

Örnek olarak qBittorrent üzerinde aşağıdaki adımları izleyerek baya bir korunma sağlayabilirsiniz.

Seçenekler > BitTorrent > Gizlilik

Aşağıda yer alan seçenekleri kapatın ve şifrelemeye izin verin.

qbittorrent gizlilik ayarlari dht kapatma anonim torrent indirme jpg

Ücretsiz çözümlerde var yok değil ancak hiç bir şekilde önerilmez. Kullanabileceğiniz bazı yöntemler;

hatta bu konuyla ilgili yazmış olduğum Anonim olarak torrent indirmenin 4 yolu adlı makaleden faydalanabilirsiniz.

Yine Bir Kök Sertifika Sorunu: Let’s Encrypt DST Root CA X3

Let\’s Encrypt tarafından verilen TLS sertifikaları için, varsayılan zincirdeki root sertifikanın (DST Root CA X3) süresi 30 Eylül 2021\’de sona erdi. Sertifikanın süresi her ne kadar bitmiş olsa da sertifika zincirinin bir parçası olmaya devam edeceği için bazı sunucu ve istemcilerde hatalara sebep olacaktır. Bu bir sertifikanın süresinin dolduğu ile ilgili bir mesaj ile birlikte kullanıcıların TLS/HTTPS bağlantıları kurmamasına sebep olur.

Sıkıntı çıkartacak istemci sürümleri aşağıdaki gibidir, güncelleme yapmanız gerekiyor mecburen.

  • OpenSSL <= 1.0.2
  • Windows < XP SP3
  • macOS < 10.12.1
  • iOS < 10
  • Android < 7.1.1
  • Mozilla Firefox < 50
  • Ubuntu < 16.04
  • Debian < 8
  • Java 8 < 8u141
  • Java 7 < 7u151
  • NSS < 3.26

SSL hatasını düzeltmek için aşağıdaki adımları yapmanız önemle rica olunur.

Debian/Ubuntu

sudo apt install libgnutls-openssl27 libgnutls30
sudo apt install ca-certificates
sed -i 's/mozilla\/DST_Root_CA_X3.crt/!mozilla\/DST_Root_CA_X3.crt/g' /etc/ca-certificates.conf;
update-ca-certificates

RHEL/CENTOS/PLESK

yum upgrade ca-certificates
update-ca-trust force-enable

trust dump --filter pkcs11:id=%c4%a7%b1%a4%7b%2c%71%fa%db%e1%4b%90%75%ff%c4%15%60%85%89%10 | openssl x509 | sudo tee /etc/pki/ca-trust/source/blacklist/DST-Root-CA-X3.pem
update-ca-trust extract

Windows IIS

REG DELETE HKU\S-1-5-18\Software\Microsoft\SystemCertificates\CA\Certificates504E974C0DAC5B5CD476C8202274B24C8C7172 /f
REG DELETE HKLM\Software\Microsoft\SystemCertificates\CA\Certificates504E974C0DAC5B5CD476C8202274B24C8C7172 /f

iisreset /restart

macOS

sudo security delete-certificate -c DST Root CA X3

cPanel

/scripts/autorepair update_lets_encrypt_cabundles2

Docker

Aşağıdaki satırları DockerFile dosyanız içerisine ekleyiniz.

RUN mkdir /usr/local/share/ca-certificates/cacert.org
RUN cd /usr/local/share/ca-certificates/cacert.org && curl -k -O https://www.cacert.org/certs/root.crt 
RUN cd /usr/local/share/ca-certificates/cacert.org && curl -k -O https://www.cacert.org/certs/class3.crt
RUN update-ca-certificates
ENV CURL_CA_BUNDLE /etc/ssl/certs/ca-certificates.crt

Çözümünü istediğiniz cihaz ve sistemler için lütfen iletişime geçiniz.

Linux Sunucu Güvenliği Bölüm 1: SSH Hardening

Twitter üzerinden bahsettiğim gibi Blue Team makalelerinin ilki olan SSH Hardening ile karşınızdayım. Paketinden yeni çıkmış bir sunucuyu kurarken ilk öncelikli olarak eriştiğimiz yer önemlidir, yollar eninde olmasa bile sonunda OpenSSH kardeşimizden geçer.

  1. Linux Sunucu Güvenliği Bölüm 1: SSH Hardening
  2. Linux Sunucu Güvenliği Bölüm 2: Kernel Hardening

Bir gün işleri büyüyen ve kullandığı hostingin yetmediğini gören engin(aşağıdaki çizgili)

engin gardasimiz uzgun

Bir bilişim işlerinden anlayan arkadaşına danışmış ve ufak çaplı bir sanal sunucu almış. Ancak güvenlik konusunda hiç bir bilgisi olmadığı ve arkadaşıda söylemediği için otomatik ssh brute-force saldırısı yapan botlar tarafından hacklenmiş.

Peki ne yapması gerekiyordu?

Host Anahtarlarının Değiştirilmesi

Ön tanımlı olarak SSH zaten güvenli başka bir şey yapılmasına gerek yok diye düşünmeyin sonuçta bu bir yazılım ve bu yazılımında kendince açıkları ve zayıf olduğu düşünülen yerler bulunuyor. Bunlardan ilki güncel kriptolojik teknikler kullanarak anahtarların yenilenmesi ve güncel teknolojinin kullanılmasıdır.

Yapacaklarımızın hemen öncesinde mevcut kullandığınız sshd_config dosyasının yedeğini almayı unutmayın. Yapacağınız yanlış bir hamle sunucu ile olan bağlantınızı kesebilir.

cp /etc/ssh/sshd_config /etc/ssh/backup.sshd_config
ShellScript

Kullandığınız eski anahtarları kaldırmalısınız, merak etmeyin bir sıkıntı yaşamazsınız.

cd /etc/ssh/
rm /etc/ssh/ssh_host_*
ShellScript

Hemen ardından yeni standartlara uygun anahtarları üretelim.

ssh-keygen -t rsa -b 4096 -f /etc/ssh/ssh_host_rsa_key -N "" < /dev/null
ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key -N "" < /dev/null
ShellScript

Ardından kriptografik açıdan zayıf olduğu düşünülen moduli.safe dosyası içerisinde gereken değişiklikleri yapıyoruz, zaten herhangi bir audit aracı ile kontrol ettiğiniz anda size Diffie Hellman hakkında gereken bilgiyi verecek ve güvensiz diyecektir çünkü bu değerlerin benzersiz yani uniq olması gerekmektedir ancak genelde bu ön tanımlı olarak gelir.

awk '$5 >= 3071' /etc/ssh/moduli > /etc/ssh/moduli.safe
mv /etc/ssh/moduli.safe /etc/ssh/moduli
ShellScript

Veya direk olarak aşağıdaki işlemleri yaparak sıfırdan oluşturabilirsiniz.

ssh-keygen -G moduli-2048.safe-b 2048
ssh-keygen -T moduli-2048 -f moduli-2048.safe
cp moduli-2048 /etc/ssh/moduli
rm moduli-2048
ShellScript

SSH Yapılandırmasının İyileştirilmesi

Şimdi bu değişikliklerin ikinci aşamasına geçiş yapıyoruz ve sshd_config dosyasını başlıyoruz düzenliyoruz böylelikle bir takım saldırılardan otomatik olarak kurtulmuş olacağız.

Önce SSH protokolümüzü değiştiriyoruz, ön tanımlı olarak 2 kullanılıyor ancak siz genede benim gibi sağlamcı olup düzenlemeyi yapın.

Protocol 2
ShellScript

Ardından SSH servisimizin kullandığı portu en çok kullanılan portların aralığından çıkıyoruz yani 1024 ile 65535 arasından bir seçim yapıyoruz.

port 56677
ShellScript

Ayrıca aşağıdaki portlardan herhangi birisinide kullanmayın, çünkü en fazla port taraması yapılan portların listesidir kendileri,

[+] Top 20 scanned ports:
      tcp 23    2760 packets
      tcp 3389  2561 packets
      tcp 8080  351 packets
      tcp 5555  331 packets
      tcp 81    253 packets
      tcp 8291  223 packets
      tcp 8545  217 packets
      tcp 8089  216 packets
      tcp 2323  212 packets
      tcp 1433  211 packets
      tcp 8443  178 packets
      tcp 8088  170 packets
      tcp 6379  110 packets
      tcp 5900  107 packets
      tcp 5038  104 packets
      tcp 9200  104 packets
      tcp 2375  103 packets

      udp 5060  599 packets
      udp 123   168 packets
      udp 1900  124 packets
      udp 161   102 packets
      udp 389   92 packets
      udp 5683  46 packets
      udp 1194  45 packets
      udp 11211 43 packets
      udp 111   42 packets
      udp 5632  41 packets
      udp 5353  40 packets
      udp 19    32 packets
      udp 1434  32 packets
      udp 3702  31 packets
      udp 3283  31 packets
      udp 623   29 packets
      udp 47808 27 packets
      udp 6881  27 packets
      udp 17    25 packets
ShellScript

Ayarladığımız host anahtalarını tanımlama sırası geldi, geriye kalan diğerlerini yapılandırma dosyanızdan lütfen çıkartın zaten artık aşağıdaki ikisini kullanacağız.

HostKey /etc/ssh/ssh_host_ed25519_key
HostKey /etc/ssh/ssh_host_rsa_key
ShellScript

Aynı anda kaç kişinin ssh üzerinden bağlanacağını ve bağlantılarda kaç kez giriş isteği yapabileceklerini belirliyoruz, yüksek bir değer vermenize gerek yok. Ayrıca bağlanan bu kişilerin sistemde ne kadar zaman geçireceğinide belirleyeceğiz ki hiç bir işlem yapılmadığında otomatik çıkış yapılsın.

MaxAuthTries 3
MaxSessions 1
ClientAliveInterval 300
ShellScript

Parola ile girişi kapatacağız ve klavye ile etkileşimli olan protokolü devre dışı bırakacağız, bunun temel sebeplerinden bir tanesi artık public key kullanacak ve ssh anahtarımız ile sisteme giriş yapacak olmamızdır. Key oluşturmak için SSH Key Oluşturma İşlemi makalesinden faydalanabilirsiniz.

PasswordAuthentication no
ChallengeResponseAuthentication no
ShellScript

Bağlantı başına anahtarlar oluşturmak için kullanılan anahtar değişim yöntemini, bağlantıdan sonra kullanılacak kriptografik anahtarı ve bir SSH sunucusunun bir SSH istemcisine kendi kimliğini doğrulaması için kabul edilen genel anahtar algoritmalarını tanımlıyoruz.

KexAlgorithms curve25519-sha256,curve25519-sha256@libssh.org,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512,diffie-hellman-group-exchange-sha256
Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes128-gcm@openssh.com,aes256-ctr,aes192-ctr,aes128-ctr
MACs hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,umac-128-etm@openssh.com
HostKeyAlgorithms ssh-ed25519,ssh-ed25519-cert-v01@openssh.com,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,ssh-rsa-cert-v01@openssh.com,ssh-dss-cert-v01@openssh.com,ecdsa-sha2-nistp256-cert-v01@openssh.com,ecdsa-sha2-nistp384-cert-v01@openssh.com,ecdsa-sha2-nistp521-cert-v01@openssh.com
ShellScript

HostKeyAlgorithms belirleme aşamasında ssh -Q key dan faydalanılır, destekleyen keyler bu şekilde bulunur ve eklenir.

root@ankara:/etc/ssh# ssh -Q key
ssh-ed25519
ssh-ed25519-cert-v01@openssh.com
ssh-rsa
ssh-dss
ecdsa-sha2-nistp256
ecdsa-sha2-nistp384
ecdsa-sha2-nistp521
ssh-rsa-cert-v01@openssh.com
ssh-dss-cert-v01@openssh.com
ecdsa-sha2-nistp256-cert-v01@openssh.com
ecdsa-sha2-nistp384-cert-v01@openssh.com
ecdsa-sha2-nistp521-cert-v01@openssh.com
ShellScript

Kullanıcı Kısıtlamaları

Ön tanımlı olarak sisteme her kullanıcı girebilir, buna root yani kök kullanıcıda dahil bu istediğimiz bir şey değil ve değiştirmemiz gerekiyor ki işleri biraz daha zorlaştıralım, SSH üzerinden direk olarak root kullanıcı adıyla bağlantı yapılmasına izin vermiyoruz bundan böyle sudo kullanacağız ve kullanıcı tanımlamasınıda ayrıca yapıyoruz ki her kullanıcı bağlanmasın.

PermitRootLogin no
AllowUsers mertcangokgoz
ShellScript

Unutmayın bağlanmasını istediğiniz her kullanıcıyı tek tek tanımlamanız gerekiyor.

X11Forwarding ve AllowAgentForwarding Devre Dışı Bırakmak

CLI ile bağlantı kurduğumuz bir sistemde kullanıcı arayüzüne gerek yok bu sebeple yönlendirmesinede gerek yok, ayrıca güvenlik sebebiyle agentinde yönlendirmeyi kabul etmesine gerek yok tünelleme işlemi yapılmayacak sonuçta

X11Forwarding no
AllowAgentForwarding no
ShellScript

SSH Banner Devre Dışı Bırakmak

Ben bütün işleri debian üzerinde yaptığım için sistemdeki hiç bir ön tanımlı yazının sızmaması ve bağlantı sağlandığında hiç bir şey yazmasını istemiyorum ve bu yüzden kapatmayı tercih ediyorum.

Banner none
DebianBanner no
ShellScript

Bütün bu işleri yaptıktan sonra ssh-audit aracıyla test etmeyi unutmuyoruz.

pip install ssh-audit
ShellScript

ve çıkan sonuç misler gibi

ssh-audit nasıl kullanılır, ssh-audit ile openssh sunucu kontrolü

Unutmayın bu test sonucu sadece dışarıdan ssh bağlantılarındaki güvenliği test etmek amaçlıdır.

SSH Bağlantıları İçin 2FA Nasıl Aktif Edilir?

Google Authenticator PAM, uygulaması ve kullanımı diğer kimlik doğrulama modüllerinden daha kolay olduğu için bu kütüphane üzerinden yürüyeceğiz ve 2FA aktif edeceğiz. Pek fazla bilginiz yoksa aşağıdaki adımları yapmayınız. Yoksa sunucuya erişiminiz doğrudan kesilecektir.

Gerekli olan kütüphaneyi sistemimize dahil edelim

apt install libpam-google-authenticator
ShellScript

SSH yapılandırmanıza nano /etc/pam.d/sshd aşağıdaki değişiklikleri uygulayın.

auth required pam_google_authenticator.so nullok
auth required pam_permit.so
ShellScript

Ardından ana SSH yapılandırmanız da nano /etc/ssh/sshd_config içerisinde yer alan ChallengeResponseAuthentication değerini “yes” olarak değiştirin. Bu, SSH kardeşimize, biri sistemde oturum açmaya çalıştığında kimlik doğrulama kodu istemesini söyleyecek böylece 2FA girebileceğiz.

Kayıt edip çıkın ve ssh servisini systemctl restart sshd.service aracılığı ile yeniden başlatın. Yapılandırmamız SSH tarafında tamamlanıyor. Şimdi sırada google servisini yapılandırmak var. Bunun için terminalde google-authenticator komutunu çalıştırın ve adımları uygulayın. Kare kodu telefonunuzdan okutmayı unutmayın.

Do you want authentication tokens to be time-based (y/n) y

Do you want me to update your "/root/.google_authenticator" file? (y/n) y

Do you want to disallow multiple uses of the same authentication
token? This restricts you to one login about every 30s, but it increases
your chances to notice or even prevent man-in-the-middle attacks (y/n) y

By default, a new token is generated every 30 seconds by the mobile app.
In order to compensate for possible time-skew between the client and the server,
we allow an extra token before and after the current time. This allows for a
time skew of up to 30 seconds between authentication server and client. If you
experience problems with poor time synchronization, you can increase the window
from its default size of 3 permitted codes (one previous code, the current
code, the next code) to 17 permitted codes (the 8 previous codes, the current
code, and the 8 next codes). This will permit for a time skew of up to 4 minutes
between client and server.
Do you want to do so? (y/n) n

If the computer that you are logging into isn't hardened against brute-force
login attempts, you can enable rate-limiting for the authentication module.
By default, this limits attackers to no more than 3 login attempts every 30s.
Do you want to enable rate-limiting? (y/n) y
Plaintext

Artık işlem tamamlandı her SSH bağlantısı yaptığınız sırada karşınıza 2FA isteyen bir ekran gelecek. Google Authenticator veya Authy kullanabilirsiniz.

Dipnot: SSH Key ile auth olunan sunucularda yukarıdaki işlemlerin çalışmayacağını şimdiden hatırlatayım.

Sunucu Üzerinde WebShell Tespit Etme Yöntemleri

Herkesin başına gelebilecek bir durum olan ve halk arasında “shell yedim, hacklendim, virüs bulaştı” şeklinde ifade edilen PHP web sitelerinin kabusu olan WebShell’lerinin nasıl tespit edilebileceğinden kısaca bahsedeceğim.

Genellikle hosting kullanan arkadaşlarımızın sık sık başına gelen bu olaylar kimi zaman can sıkıcı olabiliyor. Özellikle günümüzde Shell’ler aracılığı ile Link ekleme, Başka web sitelerine reklam amacıyla yönlendirme, Uzaktan içerik çağırma vb saldırılar gerçekleştirilmektedir.

Ancak aynı zamanda kullanılan yazılımlarda bulunan güvenlik açıklıklarıyla ve(veya) yanlış dosya ve(veya) klasör izinleri ile gene bu gizi kötücül yazılımlar sistemlere bulaşabiliyor. 

Dosyaların Taranması İşlemi

Manuel olarak aksiyon alamayacak durumda olanlar için bir takım araçlar kullanarak shell taraması yapabilirsiniz. Bütün dosyalarınızda tarama yapmanızı şiddetle öneririm. Shellboy projesi yardımıyla taramayı gerçekleştireceğiz.

wget https://github.com/c1982/shellboy/releases/download/v0.0.1-beta/shellboy_linux_amd64
./shellboy_linux_amd64 --directory=/home/public

Her hangi bir bulgu olması durumunda uygulama sizi uyaracaktır.

Dosya değişikliklerinin tespit edilmesi

Sistem üzerinde tespit ettiğiniz anormallikleri çözmek için anında işleme geçip sunucu üzerinde son değiştirilen dosyaları kontrol etmeniz gerekir. Bu bize direk Shell’in yolunu verebilir.

Son 7 güne ait php dosyalarında değişiklik yapılan dosya tespiti

find . -type f -name '*.php' -mtime -7

Dosya içerisinde uzak kaynak kontrolü

Kimi zaman sitenizde bir takım alanlar değiştirilmiş olabilir. Bunlar genellikle yönlendirme kodları veya dışarıdan getirilmiş içerikler olabilir. Bunun tespiti için

find . -type f -name '*.php' | xargs egrep -i "preg_replace *\((['|\"])(.).*\2[a-z]*e[^\1]*\1 *," --color 

Orijinal Dosyalar ile Mevcut Dosyaların Kontrolü

Wordpress, Drupal, Magento vb hazır sistemler kullanıyorsanız. diff komutu aracılığı ile sisteminizde dosyalarını kontrol edebilirsiniz. 

diff -r wordpress/ /var/www/sites/ -x wp-content
  • -x den hemen sonra gelen klasör diff ile kontrol edilmeyecektir. Biz bu örneğimizde wp-content adlı klasöre bakılmaması gerektiğini söyledik.
  • -r ile klasör içinde ne kadar dosya ve klasör içeriyorsa değişiklik kontrolü için dahil edilmesini istedik

Yazma İzinli Klasörlerin Tespit Edilmesi

Kimi zaman sistemde dosyalarınızın izinleri karışmış olabilir, genelde en çok karşılaşılan bu durumu çözmek her ne kadar kolay olsa da tehlikelidir.

find . -type d -perm 0777

Görsel İçerik Görünümlü Web Shell’lerin Tespiti

Kimi zaman uploads klasörüne eklenmiş bir görsel içerik(jpeg, png, gif vb) bile sizin web sitenize etki eden bir shell olabilir. Bu yüzden mevcut görsellerimiz içerisinde bile tarama işlemi gerçekleştirmemiz gerekir.

find uploads -type f -iname '*.jpg' | xargs grep -i php

.htaccess Kontrolü

Kimi zaman saldırganlar web sitenizde bulunan dosyalara ekleme yaparak kancalama atakları yapabilir. Bu gibi durumlarda mevcut dosyalarınızın başına yada sonuna kötü amaçlı yazılım kodları eklenebilir.

find . -type f -name '\.htaccess' | xargs grep -i auto_prepend_file  
find . -type f -name '\.htaccess' | xargs grep -i auto_append_file

Şüpheli Kod Tespiti

Dosyaların içerisinde php’de kullanımı şüpheli olan kodlar olabilir. Bunları tespit etmemiz ve gerekeni yapmamız gerekebilir, wordpress veya drupal gibi hazır sistemler kullanıyorsanız sizi yanıltacak sonuçlar çıkartabilir.

find . -type f -name '*.php' | xargs egrep -i "(fsockopen|pfsockopen|stream\_socket\_client|exec|system|passthru|eval|base64_decode) *\("
  • fsockopen: DDos için kullanılabilir, uzak soket açmaya yarar
  • pfsockopen: uzak soket açar fsockopen ile aynıdır.
  • exec, system ve passthru: sunucuda komut çalıştırmaya yarar
  • stream_socket_client: Uzak bağlantı oluşturur.
  • Her ne kadar komutlar arasına eklememiş olsam da mail fonksiyonu da kullanılabilir. Özellikle spam e-posta gönderimi için oldukça popüler bir kullanımı vardır.

Aramaları tek tek yapmak isterseniz aşağıdaki komutlardan faydalanabilirsiniz.

find . -type f -name '*.php' | xargs grep -l "eval *(" --color  
find . -type f -name '*.php' | xargs grep -l "base64_decode *(" --color  
find . -type f -name '*.php' | xargs grep -l "gzinflate *(" --color  
find . -type f -name '*.php' | xargs grep -l "eval *(str_rot13 *(base64_decode *(" --color
find . -type f -name '*.php' | xargs grep -l "stream_socket_client *(" --color  
find . -type f -name '*.php' | xargs grep -l "pfsockopen *(" --color  
find . -type f -name '*.php' | xargs grep -l "mail *(" --color  

Açık bağlantıların kontrolü

Sunucunuz da şüphelenmemiz gereken durumlardan bir tanesi de açık portlar ve servisler, sizin network kaynaklarınızı olumsuz yönde kullanıyor olabilir

netstat -na | grep -i LISTEN

Aynı zamanda sistem kaynaklarınızı kripto para kazımak için kullanabileceklerini unutmayın. Yukarıdaki bağlantı kontrolüne ek sunucunuzun CPU durumuna da bakmayı unutmayınız.

QUIC – Yeni Nesil Network Taşıma Protokolü

Google’da çalışan Jim Roskind tarafından tasarlanan bir protokoldür. Fikir ilk olarak 2012 yılında ortaya atılmış, ortaya atılan bu fikir oldukça tutmuş olacak ki 2013 yılında halka duyurulmaya karar verilmiş. QUIC kelimesi size çabuk anlamına gelen quick andırıyor olabilir. Protokolün yeni adını seçerken böyle güzel bir isim bulmuşlar. Türkçe’mize ise hızlı, çabukça, fişeqqqqq diye çevirebileceğimizi düşünüyorum.

quic protokolü temsili cihaz görseli

QUIC Nedir?

QUIC (Quick UDP Internet Connections)yapısı gereği UDP protokolünü kullanan bir network taşıma protokolüdür. Çoğaltılmış bağlantı kümelenmesini destekler ve TLS/SSL ile benzer özellikler taşıyarak güvenli bir şekilde veri iletimini sağlamayı amaçlar. Network tıkanıklığını çözmek için içerisinde algoritmaları barındırır. QUIC’in ana hedefi, şu anda TCP kullanan bağlantı yönelimli web uygulamalarının algılanan performansını artırmak ve kullanıcı deneyimini iyileştirmektir. 2015 yılında IETF’e taslak olarak sunuldu, aradan biraz vakit geçtikten sonra 2016 da çalışma ekibi kuruldu ve bu günlere geldik.

quic nasıl çalışır

QUIC Temel Özellikleri Nelerdir?

  • Düşük gecikme süresi
  • Güvenilir veri akışı
  • Basitleştirilmiş tıkanıklık kontrolü
  • TLS1.3 kullanımı
  • HTTP/1.1 üzerinde çalışılabilirlik
  • Hata düzeltmelerini destekler

QUIC çalışma grubu, bir sonraki adım olarak çoklu yol desteğini getirmiş ve isteğe bağlı hata düzeltmesini (FEC) destekler hale gelmiş.

quic tcp bağlantı tipi

Çalışma grubu, aynı zamanda QUIC’in sunabileceği ağ yönetimi konularına özellikle odaklandı.

Yeni çıkan bu protokol ise haliyle UDP kullandığı için üzerindeki TCP yükünden kurtulmuş oldu. Verileri bir birleri arasında bağlantı aramaksızın gönderecek olması protokolde rahatlamaya izin vererek minimum protokol mekanizmasını tetikliyor. Paketleri öyle dümdüz iletiyor. İstemci sunucu arasında aşağıda geçen durumlar otomatik olarak yaşanmamış oluyor.

quic tcp bağlantıyı nasıl sağlar

Tabi burada TCP ve UDP protokollerinin en iyi yanları alınıp harmanlanıyor. Böylece hantal yapıdan kurtulunmuş oluyor. Güvenliği arttırılmış daha optimize bir network taşıma protokolü ortaya çıkıyor. QUIC ise tarayıcının hızlı bir şekilde sunucu ile iletişim kurmaya başlamasını sağlıyor. QUIC, bir bilgisayar (özellikle telefon) ile sunucu arasında bir HTTPS bağlantısı kurmaya çalışır ve kötü koşullara rağmen güvenilir şekilde bağlantı sağlar, bunu bir dizi yeni teknoloji ile yapar.

Quic TLS el sıkışması nasıl yapar

Peki bir örnek ile devam edelim konuyu bu şekilde daha iyi anlayabileceğinizi düşünüyorum, facebook ve twitter akışınızı kontrol ediyorsunuz herşey iyi güzel evde kullandığınız internetiniz iyi ve bir dizi api isteğini sorunsuz işleme aldınız.

Quic http isteği sunucuda nasıl işler

Bu bahsettiklerimiz, TCP üzerinden çalışan HTTPS için mükemmel koşullar. Paket kaybımız yok, tıkanıklığımız yok, dalgalanma yok. Peki bağlantınız kötü olsaydı ve internet gezinme geçmişiniz kötü olsaydı? o zaman ne yapardınız.

quic hızını gösteren metro görseli

İşte bu noktada QUIC devreye giriyor.

QUIC Hedefleri?

Kötü olan bağlantıları düzeltmeyi amaçlamış, 3g ve wifi gibi gecikmeli olan bağlantılar için kullanılması düşünülmüştür.

  1. Bağlantı gecikmelerini düşürmek için daha az gidiş ve dönüş yapılır.
  2. İstemci sunucudan aldığı bir senkronizasyon çerezini depolar böylelikle 0 RTT sağlanır.
  3. QUIC, kriptografik blok sınırlarını paket sınırları ile hizalar, böylece paket kaybının etkisi daha da düşüktür.
  4. Paket pacing özelliği (devam eden bant genişliği tahmini)
  5. Proaktif spekülatif yeniden iletim (hata düzeltme ve/veya ilk şifreleme bilgisini içermek gibi en önemli paketlerin kopyalarını gönderme)
  6. Yedekli veri iletimi azaltabilir veya sıkıştırabilir.
  7. Tek bir tıkanıklık isteği ile çok sayıda HTTP ve HTTPS isteği yapılabilir
  8. UDP engellendiği durumlarda otomatik TCP’ye geçiş
  9. Gelişmiş gizlilik özellikleri(çözümleme gerektirmez)

TCP bu noktada yüksek gecikmeli bağlantılar üzerinde çalışırken (3G kullanılan bir cep telefonu vb) oldukça fark edilebilir bir gecikme ile kullanıcıya içerik ulaştırılır. QUIC, bağlantının tüm yönlerini kontrol ettiğinden, bağlantıyı ve şifrelemeyi tek bir el sıkışmada birleştirir. Sonuçta içerik kullanıcıya eskisinden daha hızlı bir şekilde tek bir istekde ulaştırılmış olur.

quic mobilde hızın nasıl olduğunun görseli

QPACK Nedir?

HTTP/2 tarafından sunulan bir fayda’dan bahsetmek istiyorum, HTTP istekleri ve yanıtlarından gelen fazlalıklar bildiğiniz gibi HTTP/2 doğası gereği kaldırılmıştı daha doğrusu sıkıştırılmıştı ve bunada HPACK adı verilmişti.

Özellikle, diğer kullanılan teknikler arasında HPACK, önceki HTTP isteklerinden (veya yanıtlarından) gönderilen ve (veya alınan) başlıklarla(header) doldurulmuş dinamik tabloları kullanırdı, böylece son noktaların daha önce karşılaşılan başlıkları(header) yeni isteklerde (veya yanıtlarda) değil de hepsini tekrar iletmek için kullanırdı.

HPACK’in dinamik tablolarının (bir HTTP isteği veya yanıtı gönderen taraf) ve kod çözücü (bunları alan taraf) arasında senkronize edilmesi gerekirdi, aksi takdirde kod çözücü, aldıklarını çözemezdi.

TCP üzerinden HTTP/2 kullanımı basitti ve şeffaftı, çünkü aktarım katmanı (TCP), gönderdiği sıraya göre HTTP isteklerini ve yanıtlarını iletmekten sorumluydu, tabloları güncelleştirme işlemleri, kodlayıcı tarafından yalnızca parçalı olarak gönderilebilirdi.

Fakat QUIC için bu daha karmaşık bir hale geldi.

QUIC, farklı akışlar üzerinden bağımsız olarak birden fazla HTTP isteği (veya yanıtı) sunabilir, bu da tek bir akış söz konusu olduğunda verinin teslim edilmesini sağlarken, birden fazla akışta verilerin tesliminin garantisinin verilmemesi anlamınada geliyor.

Örneğin, bir istemci QUIC kullanarak A üzerinden bir HTTP isteğini gönderiyorsa ve B akışı üzerinden B’yi talep ederse, paket yeniden sıralama veya ağdaki kayıp nedeniyle yerine ulaşamayabilir, bu durumda B isteği, istekte bulunulmadan önce sunucu tarafından alınabilir. B isteği, A talebinden bir başlık(header) isteğinde bulunacak şekilde tasarlanmıştır, sunucu henüz A’yı görmediği için isteği anlayamaz.

GQUIC protokolünde, bu sorun sadece tüm HTTP istekleri ve cevap başlıklarının(header) aynı gQUIC akışı üzerinden dizi kullanılarak çözmesini sağlar. Bu, başlıkların (header) ne olursa olsun teslim edilmesi anlamınada gelir. Ayrıca, uygulama mevcut HTTP/2 isteklerinin çoğunu yeniden kullanılmasına izin veren çok basit bir yapıyı da içinde barındırır, diğer yandan, QUIC istek küçültme özelliklerinide içerisinde barındırır.


https://en.wikipedia.org/wiki/QUIC
QUIC, a multiplexed stream transport over UDP
QUIC: Design Document and Specification Rationale

Veri Yedekleme Türlerine Genel Bakış

Bugün hayati önemi olan bir konudan bahsedeceğiz. Zaman ve çaba harcadığınız her ne varsa bir çırpıda elinizden uçup gitmemeli, giderse bu da paraya veya en azından üzülmenize yol açabilir; Bazen yeniden oluşturulamaz ve geri getirilemez, Bir yatırım yaparsınız bunu korumalı ve kaybetmemek için adımlar atmalısınız. Elinizi korkak alıştırmayın. Evinizde dahi olsa gereken adımları atmayı unutmayın.

Level 0 Backup Nedir?

Level 0, belirtilen depolama alanları içinde veri içeren tüm alanlar yedeklenir. Yedeklemeyi yaptığınız andaki duruma geri yüklemek için tüm veriyi tekrar yazmanız gerekir. Level 0 yedeklemeleri oldukça fazla zaman alıcı olabilir çünkü diske tekrar tüm verinin yazılması gerekir. Tam yedek alma olarak halk arasında sıkça duyulur.

full backup temsili gorsel

Synthetic Backup Nedir?

Tam yedekleme oluşturmak için alternatif yöntem olarak da geçer, Verileri doğrudan diskten okumak ve yedeklemek yerine, önceki tam yedeklemeden  ve alınan periyodik yedeklemelerden verileri sisteme işler. Kullanılan bant genişliğini büyük oranda düşürmektedir.

Synthetic Backup temsili gorsel

Differential Backup Nedir?

Son tam yedek veya normal alınan incremental yedeklemeden, yani son tam yedeklemeden bu yana oluşan farklılıklar ile yapılan bütün değişikliklerin birikimli bir yedeğinin alınmasıdır. Bunun avantajı, yalnızca tam bir yedeklemenin ve bu yedekten beri yapılan bütün değişikliklerin hızlı bir şekilde geri yüklenmesini sağlamasıdır.

Differential backup gorsel temsili

Differential backup son tam yedeklemeden itibaren değişen dosyaları yedekler, incremental backup son yedekten sonrasını yedekler.

Incremental Backup Nedir?

Tam yedek Level 0 ve farklı düzeylerdeki yedek düzeyler 1, 2, 3, vb. Olabilir. Her bir yedek düzeyinde, önceki yedekleme den beri aynı veya bir önceki yedekten beri değişen her şeyi yedeklersiniz. Bunu yapmanın amacı, aslına bakarsanız zamandan ve birazda olsa paradan tasarruf edecek olunmasıdır. Bütün her şeyin yedeğini alıp tekrar ve tekrar üzerine yazıp geçebilirsiniz. Bu daha fazla bant genişliği ile tabii ki gerçekleştirilebilir, ancak bu yapılanları her gün yapıyorsak peki o zaman ne olacak? Tasarruf tam tersine dönecek

figur gorsel artimli yedek temsili

Örneğin, yedekleme için bir kaç tape satın alalım bunların hepsini kullanacağımızı varsayalım, aylık yedeklemeler için Level 1 ve 2’yi kullanabiliriz (her ay ilk cuma mesela), haftalık yedeklemeler için 3’ten 6’ya kadar (diğer Cumalar; bir ay içinde beş Cuma olabilir bu işlem için 4 tane daha tape gerekli) ve günlük yedeklemeler için 7’den 10’a kadar(Pazartesi’den Perşembeye olabilir).

Toplamda 10 adet tape’den elimizde sadece dört tane daha tape kaldı, yedekleme geçmişini iki haftadan (tüm günlük tapeler kullanıldıktan sonra) daha fazla sürdürebiliyor olacağız, Bizim için gerçekten yeterli bir süre, Bu iki ay boyunca her dosyanın bir sürümünü tapeler de saklayacağız.

gorsel 1 incremental

Yedekleme seviyeleri dosya sistemi geri yükleme süresini en aza indirmek için de kullanılabilir. Çok sayıda yedeklemeniz varsa, tüm dosya sistemini yeniden kurmanız gerekiyorsa aldığınız yedeklerin hepsini geri yüklemeniz gerekecektir. Bunun yerine, normalden farklı bir yapı kullanabilir ve geri yükleme işlemi için yedeklerinizin sayısını azaltabilirsiniz.

Bu yedeklemelerin en büyük avantajlarından bir tanesi de yedek sayısının az olmasıdır. Böylelikle yedekleme süresi kısalmış olur. En büyük dezavantajı ise tüm yedeklerin yüklenmesinin zorunlu olmasıdır bize vakit kaybettirir.

Multi-level incremental backup Nedir?

Daha gelişmiş bir incremental yedekleme olarak kabul edilir, birden fazla yedekleme seviyelerini içerisinde barındırmaktadır. Tam yedek Level 0’dır. N yedek en son seviye n-1 yedekleme den bu yana değişen her şeyi yedekler.

yedekleme bantlari gorsel

Örneğin, bir Pazar günü level 0 yedeklemenin alındığını varsayalım. Pazartesi günü alınan level 1 bir yedekleme yalnızca pazar gününden sonra yapılan değişiklikleri içerir. Salı günü alınan level 2 bir yedekleme, yalnızca Pazartesi’den beri yapılan değişiklikleri içerir. Çarşamba günü alınan level 3 bir yedekleme yalnızca Salı gününden itibaren yapılan değişiklikleri içerir. Perşembe günü level 2 bir yedek alındığında, pazartesi gününden beri yapılan tüm değişiklikleri içerir. Grafiğe dökersek şu şekilde olması gerekir.

Tape Level Yedekleme Geri yükleme
1 0 1
2 3 1 1, 2
3 2 2 1,3
4 5 1 1, 2, 4
5 4 2 1, 2, 5
6 7 1 1, 2, 5, 6
7 6 2 1, 2, 5, 7
8 9 1 1, 2, 5, 7, 8
9 8 2 1, 2, 5, 7, 9
10 9 1 1, 2, 5, 7, 9, 10
11 9 1 1, 2, 5, 7, 9, 10, 11
9 1 1, 2, 5, 7, 9, 10, 11

Bu şekilde yapacağımız bir yedekleme düzeni ileri ki zamanlarda ihtiyaç duyulan zahmeti azaltacaktır.

Reverse incremental Backup Nedir?

Bu yöntemde, ilk tam yedeklemeden sonra, değişiklikleri bir önceki tam yedeklemeye uygular, her defasında yeni bir tam yedekleme(Synthetic) oluşturur ve önceki sürümlere dönme yeteneğini de bu sayede korur. Bu tür yedeklemenin avantajı daha verimli bir kurtarma işlemidir, çünkü verinin en yeni sürümü ve Synthetic olan sürümü kullanılır. Bu süre boyunca herhangi bir artımın(incremental) uygulanması gerekmemektedir.

reverse incremental backup gorsel

Block-level incremental Backup Nedir?

Bu yöntem sadece değiştirilen dosya içindeki blokları yedekler. Tüm dosya ve klasörleri yedeklemek yerine sadece değişen blockları kayıt ettiği için hızlıdır. Tercih edilen yöntemler arasındadır.

block level yedekleme gorselimiz

Byte level incremental Backup Nedir?

Bu yedekleme teknolojisi “Block-level incremental” yedekleme yöntemine benzer, dosya sistemindeki değişen her bir bayt izlemeye alınır ve yapılan değişiklikleri incremental bir şekilde yedekler.

Boyut sıkıntısı çekildiği durumlarda mümkün olan düşük boyutlu yedeklemeyi sağlar.

Forever Forward Incremental Backup Nedir?

ilk çalıştırıldı an bir tam yedekleme dosyası oluşturur ve daha sonra sadece incremental yedeklemeler oluşturulur. Bu yöntem, diskte yalnızca tek bir tam yedekleme olduğunda ve yedeklemeye ulaşıldığında birleştirme işleminin başlatılması ile gerçekleşir, yedek alanının verimli bir şekilde kullanılmasına izin verir. En eski incremental yedeklemeyi okur ve içeriğini tam dosya içinde yazar ve birleştirilen yedek önceden olduğu zaman çizelgesinde ilerlemeye devam eder.

forever increment bebegim gorsel1

Deduplication Backup Nedir?

Bu teknik, depolama kullanımını geliştirmek için kullanılır ve gönderilmesi gereken bayt sayısını azaltmak için ağ veri aktarımlarına da uygulanabilir. deduplication işleminde, benzersiz veri parçaları, bir analiz süreci(sıkıştırma algoritmaları vb) sırasında tanımlanır ve saklanır. Analiz devam ettikçe, diğer parçalar saklanan kopya ile karşılaştırılır ve bir eşleşme olduğunda, yedek parçalar saklanan parçalara işaret eden küçük bir referans ile değiştirilir. Aynı bayt modelinin yüzlerce hatta binlerce kez olduğu düşünüldüğünde, depolanması veya aktarılması gereken verilerin miktarı büyük ölçüde azalır. Kısaca yedeklemeler sıkıştırılma işlemlerinden geçer ve değişen parçalar kayıt edilir.

data deduplication gorsel

Obfsproxy Kullanarak OpenVPN Trafiğinin Gizlenmesi

Bu makalede anonimliğe, güvenliğe ve internete erişim özgürlüğüne karşı çıkan hükümetler tarafından uygulanan yaptırımlara karşı OpenVPN hizmetini sürdürmeye çalışacağız. Bunu yapmak için iki yöntemimiz bulunuyor. Her iki yöntem de, VPN bağlantılarının engellenmesini tanımlayan ve yaptırım uygulanması aşamasında sistemi etkinleştiren “derin paket denetimi (DPI)” olarak bilinen gelişmiş gözetim teknolojisinin saptırılması amacı ile kullanılmasından kaynaklanmaktadır. OpenVPN bağlantıları protokolün hızı, güvenliği ve internet kullanıcıları arasında yüksek popülerliği nedeniyle öncelikli hedeftir.

1649

Obfsproxy, şifrelenmiş bir yapı içinde OpenVPN paketlerini gizler ve derin paket incelemesinde kullanılacak olan “find and block” etkinliklerine karşı dirençli bir hale getirilir. Gelecekte herhangi bir noktada, OpenVPN‘in tespit ve engelleme işlemleri için daha fazla bağışıklık sağlanmasında protokol bazında değişiklik yapılması da gerekecektir. O zamana kadar DPI’dan kurtulmak için bu talimatları kullanabilirsiniz.

Unutmayınız ki bu yöntemler mükemmel değildir. Yeterli bir zamana sahip olduklarında, tanımlayamadığı veya şifresini çözemediği her şeyi bulabilir ve engelleyebilirler. Sunucu IP adreslerini ve anahtarlarını düzenli olarak değiştirerek, ulusal güvenlik duvarlarında gizlenmiş bir şekilde OpenVPN‘e karşı etkisiz olacaktır.

Obfsproxy için OpenVPN Sisteminin Yapılandırılması

Obfsproxy sunucu ve internet arasında oturacak. İstemcilerden gelen paketler şifresi çözülür ve openVPN sunucusuna yönlendirilir. Giden paketler, ağdaki herhangi bir gözetleme aracısına rastgele anlamsız gibi görünen, şifrelenecek ve istemcilere gönderilecektir.

Tanıdık host sağlayıcılarını kullanarak bir proxy sunucu oluşturmamız gerekiyor. DigitalOcean’ı ziyaret ederek ve bir hesap açarak işe başlayın. Bu işlem sırasında bağlantımı kullandığınız taktirde. Yaptığınız ilk ödemede extra 10-25 dolar arası bakiye kazanacaksınız.

Açtığınız hesapta en düşük özelliklerde bir makina açacağız. İşletim sistemi olarak Debian 9 kullanacağız.

apt-get install obfsproxy iptables-persistent

Ardından güvenlik duvarı kardeşimiz için kuralları gireceğiz. Hangi portu kullanacağınızı belirlediyseniz başlayalım. Ben tamamen keyfi bir şekilde 43256 portundan trafiği döndüreceğim için seçimimi bu yönde yapıyorum.

iptables -A INPUT -p tcp --dport 43256 -j ACCEPT
dpkg-reconfigure iptables-persistent

Tabi bu noktadan sonra makina açık hedef haline geleceği için mümkünse firewall kurallarını kendi ip aralığınıza göre tahsis edin. Sabit Ip adresine sahipseniz mümkünse tek ip adresinin bağlantılarını kabul edecek şekilde ayarlayın. Böylece aktif port tarama ataklarına ve tekrarlama saldırılarına karşı koruma sağlayın.

Ardından proxy hizmetinin devamlı açık kalmasını sağlamak amacı ile yeni bir session oluşturalım.

screen -S obfsproxy

Ardından geçerli vpn sunucusundan gelecek olan istekleri kabul etmek ve bağlantıları açmak için aşağıdaki gibi süreci başlatın.

obfsproxy  obfs2 --dest=127.0.0.1:443 --shared-secret=b2e3b923d190c8de99b2716019fc9cd7 server 0.0.0.0:43256

Obfsproxy için başlattığınız session işleminden çıkarmak için Ctrl + a tuş kombinasyonunu kullanın ve ardından klavyenizdeki d tuşuna basın. Süreci sonlandırmak için Ctrl + C tuş kombinasyonlarını kullanabilirsiniz. Ardından exit komutu ile de geçerli terminali sonlandırabilirsiniz.

Burada tanımladığımız ilk port VPN trafiğinin üzerinden akacağı port 43256 ise proxy bağlantımızın akacağı port. Ayarları kendi sağlayıcınıza göre düzenlemeyi unutmayın. Ayrıca bu işlemlerde sadece TCP bağlantıları geçerli olacağını hatırlatırım. UDP üzerinden çalışan herhangi bir VPN servisine obfsproxy tanımlaması yapamazsınız.

Kullanıcı tarafında yapılacaklar

Server tarafında yapacağımız işlemler sonlandı. Sıra geldi bağlantıyı kuracak Client tarafının ayarlamalarına.

Elinizdeki mevcut VPN yapılandırma dosyasında aşağıdaki satırları remote den hemen sonra ekliyorsunuz. Mevcut bağlantı noktasını ise yukarıda bizim tanımladığımız obfsproxy portunu veriyorsunuz.

socks-proxy-retry
socks-proxy  443

Konfigürasyon dosyamız sonunda aşağıdaki gibi oluyor. Her iki servise de kolaylıkla bağlanabiliyoruz.

remote 1.2.3.4 43256
socks-proxy-retry
socks-proxy  443

Her şey tamamsa bağlantınızı sağlayın.

obfsproxy obfs2  --shared-secret=b2e3b923d190c8de99b2716019fc9cd7 socks :443

Bu yaptığımız işlemde hız sorunu meydana gelebilir. Hal böyle alınca internet yavaşlamaları görebilirsiniz. Benim size tavsiyem OpenVPN servisini de aynı VPS üzerinde tutmaktır. Makinaya OpenVPN servisini bu makale ile kurabilirsiniz. Böyle bir durumda yukarıdaki ayarlamalar aynen geçerli olup kısmına 127.0.0.1 girmeniz gerekmektedir.

Ayrıca windows sistem üzerinde obfsproxy ile bağlantı sağlayabilmek için ilk önce sisteminize python kurmalı ve daha sonra paket yöneticisi aracılığı ile obfsproxy kurulumu gerçekleştirmek zorunda kalacağınızı unutmayın.

pip install obfsproxy

obfsproxy windows installs

Daha sonra direk olarak bağlantı işlemini OpenVPN aracılığı ile gerçekleştirin. Bağlantı gerçekleştiğinde durum mesajları görünür. Bu mesajları daha sonra tekrar kontrol etmeniz gerekiyorsa OpenVPN menüsündeki View Log’e tıklayabilirsiniz. OpenVPN sunucunuzun, trafiği Obfsproxy yoluyla proxy edilmek suretiyle bağlandı.

Firefox Tarayıcısı Üzerinde DNS-over-HTTPS Kullanımı

Firefox’ta HTTPS üzerinden DNS işlevselliği için tüm tercihler “network.trr” öneki ile tanımlanmıştır. (TRR = Trusted Recursive Resolver). Bunların desteği Firefox 60 sürümüne getirilmiştir. Lakin tam olarak desteği 62 sürümünde göreceğiz. Bunun DNS tarafında direk olarak nasıl yapılabileceğini Unbound ile DNS Over TLS Kurulumu ile göstermiştik. Şimdi Firefox’un son sürümünde kullanabileceğiniz DoH’un nasıl yapılandırılabileceğini göstereceğim. Aslında size Firefox üzerinde config yapmayı da göstermiş olacağım.

Bu fonksiyonların tamamını kullanabilmek için about:config adresine gidiyorsunuz ve arama alanına network.trr yazıp aratıyorsunuz karşınıza aşağıdaki gibi pek çok seçenek çıkacak.

network trr DoH ayarlamalari

Şimdi burada yazanları kısa kısa açıklamamız gerekiyor. Tarayıcıya yeni gelen bir teknolojinin entegre edilmesi ve bunun desteklenmesi gerekiyor

network.trr.allow-rfc1918

(varsayılan: false) TRR yanıtlarında RFC 1918 özel adreslerine izin vermek için bunu true olarak ayarlayın. Yanlış ayarlandığında, böyle bir adres bulunamadı olarak size geri dönüşü olacaktır. Bu yüzden kurcalamayın.

network.trr.blacklist-duration

(varsayılan: 1200), TRR kara listesindeki bir alan adının bu süre sona erinceye kadar tutulacağı saniye cinsinden değerdir ve tekrar TRR ile denenir. Varsayılan süre 20 dakikadır.

TRR ile çözümleme işlemi başarısız olduğunda hızlı bir şekilde TRR kara listesine eklenir, ancak kullanılan yerel çözümleyici ile site çalışır.

network.trr.bootstrapAddress

(varsayılan: none), bu alan network.trr.uri adresinde kullanılan hostun IP adresine istenirse ayarlanmalıdır, kullanılmayacaksa yerel çözümleyici ayarları aynen uygulanır.

network.trr.confirmationNS

(varsayılan: example.com) Firefox, doğru yapılandırmayı sağlamak için TRR’nin çalıştığını doğrulamak üzere başlangıçta bir NS girişini kontrol edecektir. Bu tercih, hangi alanın kontrol edileceğini ayarlamaya yardımcı olur. Olumlu cevap döner ise doğrulama işlemi tamamlanır aksi halde geçersiz kılınır.  Onaylama işleminden kurtulmak için skip olarak ayarlayın.

network.trr.credentials

(varsayılan: none) HTTP isteklerinde DoH için kullanılacak kimlik bilgilerini ayarlayın. Kullanılacak olan servise giriş bilgileri Authorization: başlığı ile gönderilir.

network.trr.early-AAAA

(varsayılan: false) Firefox A girişleri için HTTP ve AAAA kayıtlarına ulaşmak için istek gönderir. Her iki kayıtta ayrı geleceği için hangi kayıt önce gelirse dikkate almasını isteyebilirsiniz. A kayıtları önce gelirse, Firefox AAAA istediğini beklemeden işlemlerine devam edecektir. AAAA kayıtları önce gelirse, Firefox ilk önce AAAA kayıtlarını kullanacak.

network.trr.mode

Çözümleyici modunu ayarlamak için kullanılır. Aşağıdaki gibi 6 modu bulunur;

  1. 0 – Kapalı (varsayılan). Yalnızca standart yerel çözümleme kullanılır çözümleme sırasında TRR kullanılmaz
  2. 1 – Yarış Modu Paralel olarak çalışmaya devam eden resolver, hangisinden hızlı yanıt gelirse o kullanılır
  3. 2 – Öncelik Önce TRR kullanılır çözümleme başarısız olursa local resolver kullanılır.
  4. 3 – Sadece TRR Asla yerel çözümleyiciyi kullanma.
  5. 4 – Gölge Modu TRR çözümlemesi için yerel çözümleyici ile birlikte çalışır ve sadece yerel çözümleyiciyi kullanır.
  6. 5 – Seçime dayalı Mod Bu ilk mod ile aynı özellikleri taşır ama bunu tercih edilen şekilde yapar.

network.trr.request-timeout

Varsayılan: 3000) DOH sunucusundan gelen yanıtın başarısız olduğu durumlarda milisaniye cinsinden bekleneceği süredir.

network.trr.uri

(varsayılan: yok) DOH sunucunuz için URI’yi ayarlamamız gerekirse. Bu, Firefox’un DoH için kullanılacak olan HTTP isteklerinin gönderileceği URL bilgisidir. Bir HTTPS URL’si olmalıdır.  Varsayılan POST metodu kullanılırken URL bilgisi aşağıdakilerden biri seçilmelidir.

Kullanılabilecek DoH sunucuları;

network.trr.useGET

(varsayılan: false) Tarayıcı, ana bilgisayar adlarını çözmek için DOH sunucusuna bir istek gönderdiğinde, bunu POST veya GET kullanarak yapabilir. Firefox varsayılan olarak POST kullanır, ancak bunu değiştirerek GET metodunu kullanmasını sağlayabilirsiniz.

Örnek Kullanım

CloudFlare üzerinden kullanılan DoH yapısında aşağıdakiler uygulanacaktır.

  • network.trr.mode = 2
  • network.trr.uri =
  • network.trr.confirmationNS = skip
  • network.trr.bootstrapAddress = 1.1.1.1 veya 1.0.0.1
  • network.trr.blacklist-duration = 1200

Uyarılar

Release sürümünde bu özellikler her ne kadar gelsede kullanımı sırasında linux makinalarda kernel panic windows makinelerdede firefox tarayıcısının çökmesine sebebiyet verebilir. Dikkatli bir şekilde ayarlanmalı ve kullanılmalıdır.

Eğer ayarlamalarını yaptıysanız ve tarayıcıyı açamıyorsanız yada bilgisayarınızda soruna neden oluyorsa. Win + R tuş kombinasyonu ile Çalıştır alanına ulaşınız. Burada "%APPDATA%\Mozilla\" yazıyorsunuz ve Firefox > Profiles klasörü içerisine girin. Profil ile ilgili tüm dosyalar burada tutulmaktadır. pref.js dosyasını buluyorsunuz. Herhangi bir text editör ile açıp içerisinde network.ttr.mode aratıyorsunuz. Çıkan değeri 0 yapıyorsunuz ve kayıt ediyorsunuz. Ardından normal bir şekilde hayatınıza devam edebilirsiniz.

Durumun açıklandığı 1434852 numaralı issue ile bu soruna yardımcı olmak isteyebilirsiniz.


Trusted Recursive Resolver
DNS Over TLS
DNS Over HTTPS in Firefox

Erişim Engelleme Yöntemleri Bölüm 1 – HTTP Header Manipülasyonu

Bugün sizlere dünya üzerinde uygulanan erişim engellemelerinin hangi şart ve koşullarda yapıldığını ve bu gibi yaptırımların nasıl işlediğini dilimin döndüğünce anlatmaya çalışacağım.

HTTP Header Manipülasyonu Nedir?

HTTP Header Manipülasyonu, doğrulanmayan kötü amaçlı verilerin HTTP Header’a eklenmesidir. Buna yanıt bölme saldırısı da denmektedir. HTTP Header Manipülasyonu ayrıca siteler arası komut dosyası oluşturma, tarayıcıları ele geçirme, çerez işleme, yönlendirme saldırıları ve kullanıcı hataları ile karşılaşılabilir.

Bu tip saldırıları uzaktaki bir saldırganın yapabilmesi hiçte kolay değildir. Ancak bu gibi manipülasyon işlemleri ISP’ler ve network güvenlik cihazları tarafından oldukça kolay bir şekilde yapılabilmektedir.

Bizi ilgilendiren kısım neresi ?

Observation Cihazları belirli veri türlerini işlemek için özel olarak tasarlanmış komut ve fonksiyonlar içerir. Bu durum veri işleme, başlıkların(header) ve çerezlerin(cookie) içinde bulunan belirli değerlerin ayarlanmasının yanı sıra verilerin eklenmesi, değiştirilmesi ve kaldırılmasını da mümkün kılar.

Asıl ilgilenmemiz gereken nokta ekosistem içerisinde gözlemleme işlemlerinin nasıl yapıldığı. Bu noktada yukarıdaki açıklamalar ışığında edindiğimiz bilgiden sadece yönlendirme saldırılarına ve kullanıcı hatalarına göz atacağız.

HTTP, verileri İnternet üzerinden aktaran veya değiş tokuş yapan bir protokol. Bunu yapmak için bir kişi sunucuya gönderdiği bağlanma isteğine bakarız ve bu kişinin isteğine istek atılan sunucunun yanıtı vermesi beklenir. Standart protokol bu şekildedir.

header-field-http

Ancak erişim engeli ile karşı karşıya kalınan durumlarda işler biraz farklıdır.

Siteye giriş yapmak için istek attığınızda hiçbir şey olmamış gibi size aşağıdaki örnekte de gözüken bir header bilgisi karşılık verir. Bu başlıkta yer alan bilgilere kısa bir göz atalım;

HTTP/1.1 301 Moved Permanently
Date: Sun, 08 Apr 2018 13:44:07 GMT
Server: Varnish
X-Varnish: 594660927
X-Cache: cp3031 int
X-Cache-Status: int-front
Set-Cookie: WMF-Last-Access=08-Apr-2018;Path=/;HttpOnly;secure;Expires=Thu, 10 May 2018 12:00:00 GMT
Set-Cookie: WMF-Last-Access-Global=08-Apr-2018;Path=/;Domain=.wikipedia.org;HttpOnly;secure;Expires=Thu, 10 May 2018 12:00:00 GMT
X-Client-IP: 10.0.0.1
Location: https://wikipedia.org/
Content-Length: 0
Connection: keep-alive

envaiçeşit bilgi yer alıyor bunlardan bazıları bizim siteye erişimimiz sağlar ve tarayıcımızın tepki vermesi için pek çoğu gereklidir.

Tanımlar

Location: Konum yanıtlama alan alanı, alıcıyı tamamlanmak üzere Request-URI’den başka bir konuma yönlendirmek için kullanılır. HTTPS kullanılan sitelerde bu headeri görmeniz oldukça normaldir.

Host: request-header alanı, talep edilen kaynağın Internet ana bilgisayarını ve bağlantı noktası numarasını belirtmek için kullanılır.

Set-Cookie: Çerez istek başlık alanı, söz konusu URL için depolanmış bir ad/değer çiftini içerir.

Transfer-Encoding: Aktarım Kodlama genel başlık alanı, gönderen ve alıcı arasında güvenli bir şekilde veri aktarmak için mesaj gövdesine ne tür bir dönüşüm uygulandığını gösterir. Bu, içerik kodlamasıyla aynı değildir çünkü aktarım kodlamaları, entity-body’den değilde, iletinin bir özelliğidir.

Manipülasyon Zamanı Geldi de Geçiyor

HTTP header bilgilerinin ne işe yaradığına ve kısa bir açıklamasını yaptıktan sonra şimdi sıra geldi test için kullanılacak header bilgisini oluşturmaya atacağımız isteğin header bilgisinde birtakım alanları değiştireceğiz. Değiştirilmiş hali ise şu şekilde olmuş olacak

ACcEpt-LaNGuAGE
AccEpT
AcCept-eNCODINg
Accept
Accept-Charset
Accept-Encoding
Accept-Language
Connection
UsER-AgENt
User-Agent
aCCEpt-ChARsET
HOSt

İstek için gereken değerleri oluşturduk. Bu isteği daha önceden hazırladığınız bir web sunucusuna gönderiyoruz gönderdiğimiz istek aşağıdaki gibi

"ACCEpT-cHarSET": "ISO-8859-1,utf-8;q=0.7,*;q=0.3",
"AccEPT-LAngUAge": "en-US,en;q=0.8",
"HOSt": "kFR32amwImcc3Kwc0ivv.com",
"aCCePT": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
"acCEpt-encOdING": "gzip,deflate,sdch",
"useR-agEnT": "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2) Gecko/20110115 Firefox/3.6"

Biz bu bilgiyi servise hiçbir şey olmamış gibi iletiyoruz. Bunu yaparken özellikle ip adresi üzerinden istek göndermeyi de ihmal etmeyin. (host bilgisi temsilidir) SSL bağlantısı olmayan servisleri kullanın ki sağlayıcınız isteği görebilsin ve tepki verebilsin.

İsteği attığımızda bize geri dönen dataya ufak bir göz atıyoruz.

    "headers_dict": {
"Accept-Language": ["en-US,en;q=0.8"],
"Accept-Encoding": ["gzip,deflate,sdch"],
"Connection": ["keep-alive"],
"Accept": ["text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"],
"User-Agent": ["Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2) Gecko/20110115 Firefox/3.6"],
"Accept-Charset": ["ISO-8859-1,utf-8;q=0.7,*;q=0.3"],
"Host": ["kFR32amwImcc3Kwc0ivv.com"]

Birde ne görelim bizim sağını solunu değiştirip gönderdiğimiz istek bize düzgün bir şekilde geri geldi ve gelirken de yanında bizim göndermediğimiz header başlıkları ile birlikte geldi buda arada observation cihazının olduğuna işarettir.

Değiştirilme işlemi yapılarak bize geldiğinin işaretidir. Ve yolda gönderdiğimiz paketin açılıp içerisine bakıldığını bu yöntem ile anlayabilmemiz bir nebzede olsa mümkündür.

flow-semasi-yeni1

Normal şartlar altında eğer internet üzerinde herhangi bir observation cihazı yok ise gönderilen isteğin aynı şekilde bize geri dönmesi gerekmektedir.

Bunların dışında önemli bir takım hatırlatmalarda bulunacağım.

  • Bahsi geçen bu observation cihazları her zaman açık tutulabilecek ve üzerinden geçen trafiği inceleyebilecek türdedirler.
  • Varsayılan olarak sağlayıcılar bu tür basit değişiklikleri algılayabilecek yapılarda sistemler kullanıyor ise False Pozitif dediğimiz sonuçlara sebebiyet verir
  • Observation cihazının mevcudiyeti sansürleme yapılmıyor olsa bile, önbellekleme amacı için kullanılıyor olabilir bu durumda yukarıdaki anlattıklarım geçerli olmamakla birlikte, yanıltıcıdır.

Peki Bu Bahsettiklerin Normal Mi?

Aslında evet, tüm network cihazlarında bu tarz özellikler sunuluyor. Network Güvenliği konusunda oldukça hayati bir öneme sahip, önceden tehditleri anlama ve anlamlandırma, alınacak önlemlerin önceden tespit edilmesi vb diyebiliriz.


Exploring HTTP Header Manipulation In-The-Wild
HTTP Header Manipulation