Tag: MPLS

  • TCP Connection Reset Remote Exploit ile BGP Oturumunu Sıfırlama

    TCP Connection Reset Remote Exploit ile BGP Oturumunu Sıfırlama

    TCP protokolünden zaten birkaç kez bahsettim, bu yüzden kendimi tekrar etmeyeceğim. Sadece temel bilgileri özetleyeceğim: İletim Kontrol Protokolü (TCP), RFC 793’te açıklanmıştır ve avantajı, internet üzerinden bir makineden diğerine güvenilir veri iletimi sağlamasıdır. Bu, TCP’nin güvenilir veri iletimini garanti ettiği ve düşen veya hasar görmüş paketleri otomatik olarak algıladığı anlamına gelir. Tasarımında önemli olan nedir?

    Tipik olarak, bir TCP paket başlığı şöyle görünür:

    TCP paket başlıkları

    Nmap veya Metasploit, bir veri arabelleğini TCP yığınına iletir. Yığın daha sonra bu veriyi bölümlere ayırır ve veri kümeleri halinde paketler. Bu veri kümeleri, ağ üzerinden iletilen paketleri oluşturmak için kullanılır. Bağlantının diğer ucunda, ters işlem gerçekleşir. Veri kümesi ve bölümleri paketlerden çıkarılır, ardından bölümler TCP yığınına iletilir, burada analiz edilir, yeniden birleştirilir ve hedef işlem birimine gönderilir.

    Sequence numbers

    Veriler, alıcıya ayrı ayrı paketler halinde ağ üzerinden gönderilen segmentlere ayrılır. Paketlerin hedeflerine sırasız bir şekilde ulaşması mümkündür. Bu alan, segmentin sıra numarasını belirten 32 bitlik bir sayıdır. Her paketle birlikte artar ve verilerin doğru sırada yeniden birleştirilmesini sağlar. Genel olarak, bu değer bir paketin aktif bir oturuma ait olup olmadığını belirler.

    Window

    TCP ayrıca sunucuların ne kadar veri almak istediklerini iletmeleri için bir mekanizma sağlar. Bu, TCP başlığındaki 16 bitlik bir sayı olan Pencere alanıdır. Ayarlandığında, sunucuya kesinlikle sınırlı miktarda veri alınacağını ve kalan paketlerin atılacağını bildirir. Alma kuyruğu doluysa, sunucu diğer uca daha fazla veri almayacağını bildirmek için alma penceresini 0’a ayarlayabilir.

    Kontrol bitleri (SYN, ACK, PSH, URG, RST ve FIN) birçok kez ele alındı, bu nedenle içeriklerini burada tekrar etmeyeceğim.

    TCP RESET saldırısı

    Temel fikir, bir paket oluşturarak kurulmuş bir TCP bağlantısını sonlandırmaktır. A ana bilgisayarından B ana bilgisayarına olan bir bağlantıyı ele alalım. Üçüncü bir ana bilgisayar olan C, A ana bilgisayarının kaynak portunu ve IP adresini, B ana bilgisayarının hedef portunu ve IP adresini ve A ile B arasındaki aktif TCP bağlantısının mevcut sıra numarasını belirten bir paket oluşturur. C ana bilgisayarı pakete RTS bitini ekler, böylece B paketi aldığında bağlantı hemen sonlandırılır. Bu, yeni bir BGP oturumu kurulana kadar BGP oturumunu kesintiye uğratır.

    Protokol hatası, yönlendirici için oldukça tatsız bir durum olan “yönlendirme atlamalarına” yol açabilir.

    Güvenlik açığı

    Bu güvenlik açığını keşfeden Paul Watson, böyle bir saldırının daha önce düşünüldüğü kadar zor olmadığını açıklıyor. Önceki hesaplamalar, bir sıra numarasına yönelik kaba kuvvet saldırısının 1’den 4.294.967.295’e kadar tüm sayıları denemeyi gerektireceğini öne sürüyordu. Ancak bu tamamen doğru değil. Örneğin, A ana bilgisayarındaki TCP yığını 16K’lık bir pencereyle sınırlıysa, yığın bu pencere içindeki tüm paketleri almalıdır. Saldırganın, RTS ayarı tüm SN dizisi boyunca ayarlanmış paketler göndermesi gerekmez, bunun yerine TCP, pencere boyutuyla tanımlanan bir aralıktaki herhangi bir sıra numarasını kabul edeceğinden, kendisini her olası pencereyle sınırlandırır. Bu nedenle, saldırganın tüm kullanılabilir pencereleri vurmak için 4.294.967.295 / 16.384 = 262.143 denemesi gerekir.

    262.000 büyük bir sayı gibi görünse de aslında öyle değil. Birincisi, iyi bir bağlantıyla, bir saldırgan saniyede on binlerce paket üretebilir. İkincisi, saldırı birden fazla sunucuya dağıtılabilir. Örneğin, standart bir DSL hattı saniyede 250 paket üretebilir ve tüm olası paketleri 17 dakikada tüketebilir. 2 Mbps’lik bir bağlantıyla bu, sadece 60 saniyede 4.730 paket anlamına gelir.

    Örneğimde 16K’lık bir pencere kullanılıyor, ancak RFC’ye göre bu alan 16 bit olup maksimum pencere boyutu 64K’dır. Tam pencere boyutu kullanılırsa, saldırgan yalnızca 65.537 paket veya sırasıyla 4 ve 15 saniye alacaktır. Bunun maksimum süre olduğunu unutmayın; ortalama olarak bunun yarısı kadar olacaktır (pratikte 3 dakika 8 saniye). Güvenlik açığında açıklanan dört pakete gelince, bu yalnızca pencere ölçeklendirmesi, bir TCP uzantısı (bkz. RFC 1323) kullanıldığında meydana gelir; burada pencere boyutu 16 bitten 30 bite çıkarılır (örneğin, yukarıda açıklanan BGP’de uygulanır). Maksimum pencere boyutuyla, saldırganın TCP sıfırlamasını tetiklemek için yalnızca dört paket göndermesi yeterli olacaktır.

    Source Port

    Yukarıdaki örneklerin tümü, saldırganın hedef port ve IP adresinin yanı sıra kaynak port ve kaynak adresini de bilmesine dayanmaktadır. İlk iki parametreyi elde etmek ve belirlemek kolaydır. Hedef IP adresini belirlemek de kolaydır; bu, oluşturulan paketin hedeflendiği istemci adresidir. Tek soru kaynak porttur. Örneğin, işletim sistemi 1025 ile 49152 arasında değişen bir havuzdan rastgele bir port atarsa ​​(OpenBSD’nin yaptığı gibi), bu, her port numarasıyla bir sıra numarasını eşleştirmeyi gerektireceğinden, deneme sayısını tam olarak 48127 kat artıracaktır. İyi haber şu ki, Linux ve Windows dahil olmak üzere çoğu işletim sistemi bu mekanizmayı kullanmıyor, bu da bu savunmayı geçersiz kılıyor.

    reset-tcp.c güvenlik açığı

    Paul Watson, alışılmadık derecede cömert davranarak yazdığı reset-tcp.c güvenlik açığını çevrimiçi olarak yayınladı. Bu açığı basit bir Debian Linux sisteminde bile oluşturmak oldukça kolay.

    reset-tcp.c güvenlik açığı

    Derlemeye başlamadan önce, sistemde gerekli libnet-1.1.1 kütüphanesinin bulunup bulunmadığını kontrol etmenizi ve eksikse yüklemenizi öneririm:

    apt-get install libnet1-dev

    Kütüphaneyi sisteme başarıyla kurduktan sonra, istismar dosyasını oluşturmaya geçiyoruz:

    gcc reset-tcp.c -o reset-tcp /usr/lib/libnet.a

    veya

    gcc -o reset-tcp reset-tcp.c -lnet

    Ayrıca, kullanım sırasında internet sağlayıcınızla ilgili gereksiz sorunlardan kaçınmak için MAC adresini (enet_src/enet_dst) kod içinde önceden değiştirebilirsiniz.

    Örnek başlatma:

    reset-tcp [interface] [src ip] [src port] [dst ip] [dst port] [window size]

    [root@orc EuroTransTelecom]# ./reset-tcp eth1 172.16.0.1 1 172.16.0.2 2 65536

    Packets sent: 8192 Sequence guess: 536805376
    Packets sent: 16384 Sequence guess: 1073676288
    Packets sent: 24576 Sequence guess: 1610547200
    Packets sent: 32768 Sequence guess: 2147418112
    Packets sent: 40960 Sequence guess: 2684289024
    Packets sent: 49152 Sequence guess: 3221159936
    Packets sent: 57344 Sequence guess: 3758030848
    packets sent: 65535

    SYN saldırısı

    Sıfırlama saldırısı, RST biti olmadan da gerçekleştirilebilir. Bunun yerine, SYN biti ayarlanarak yukarıda açıklanan saldırının aynısı yapılabilir. Çoğu TCP yığın uygulamasında, tekrarlanan bir SYN, sıra numarası içeren bir RST ile sonuçlanır. SYN mevcut oturum penceresi içindeyse, RST yanıtı yerine oturum sonlandırılır ve sistem büyük olasılıkla yeniden başlatılır.

    Kör veri enjeksiyonu

    Son olarak, üçüncü ama kesinlikle son olmayan senaryo. Önceki durumlarda olduğu gibi, sıra numarasını bulmak için kaba kuvvet yöntemi kullanılıyor, ancak boş SYN veya RST paketleri göndermek yerine geçerli bir veri paketi oluşturuluyor. Bu durumda bağlantı kesilmeyecek, ancak kullanıcının bilgisayarının göreceği şey tamamen bir gizem olacak. İletilen veriler felaket derecede bozulmuş olacak.

  • Сброс BGP-сессии при помощи TCP Connection Reset Remote Exploit

    Сброс BGP-сессии при помощи TCP Connection Reset Remote Exploit

    Уже не раз рассказывал о протоколе ТСР, так что повторятся особо не буду, напомню лишь основные положения: Transmission Control Protocol описывается в RFC 793 и преимуществом его является надежность передачи данных от одной машины к другому устройству по сети интернет. Это означает, что ТСР гарантирует надежность передачи данных и автоматически определит пропущенные или поврежденные пакеты. Что для нас важно из его конструкции?

    В общем виде заголовок ТСР пакета выглядит так:

    заголовок TCP-пакета

    Программа передает по сети некий буфер данных, ТСР разбивает данные на сегменты и дальше упаковывает сегменты в наборы данных. Из наборов данных формируются пакеты и уже они передаются по сети. У получателя происходит обратный процесс: из пакетов извлекаются набор данных, его сегменты, затем сегменты передаются в ТСР стек и там проверяются, потом собираются и передаются программе.

    Sequence numbers

    Данные разбиваются на сегменты, которые отдельными пакетами направляются по сети получателю. Возможна ситуация, когда пакеты прибудут в точку назначения не по порядку. Это поле – 32-битный номер, определяющий номер сегмента в последовательности, он с каждым пакетом увеличивается и позволяет собрать данные в правильном порядке. В общем смысле значение определяет принадлежит ли пакет активной сессии или нет.

    Window

    TCP так же предоставляет хостам механизм сказать друг другу сколько данных они хотят получить. Это и есть поле Window – 16 битное число в ТСР заголовке. Будучи однажды заданным, оно говорит хосту, что приниматься будет строго ограниченный объем данных, а остальные пакеты будут отброшены. Если очередь приема будет переполнена, то хост может выставить значение окна приема в 0 и таким образом сказать партнеру по обмену трафиком, что типа мол хорош.

    Контрольные биты – SYN, ACK, PSH, URG, RST и FIN, про них уже не раз говорили, так что повторяться не буду.

    Атака TCP RESET

    Главная идея – сфальсифицировать пакет и прекратить или скомпрометировать установленное ТСР соединение. Давай представим, что существует соединение от хоста А к хосту В. Третий хост С подделывает пакет в котором указывает исходный порт и IP адрес хоста А, порт назначения и адрес хоста В, и текущий sequence number активного ТСР соединения между А и В. Хост С устанавливает RTS бит на пакете, так что когда В получит пакет, он немедленно прекратит соединение. Это приведет к отказу от обслуживания до тех пор, пока соединение не будет восстановлено. На уровне приложения конечно трудно сказать что будет, это скорее зависит от самой программы.

    В такой ситуации конечно наиболее уязвимы приложения и протоколы поддерживающие продолжительные соединения. Например BGP (Border Gateway Protocol) от Cisco (см. RFC 1771), так как он основывается на постоянной ТСР сессии между компьютерами. Сбой в работе протокола может привести к “колебанию маршрута” (route flapping), довольно неприятному событию для маршрутизатора.

    Уязвимость

    Paul Watson, обнаруживший уязвимость, объясняет, что на самом деле такую атаку не так трудно организовать как казалось ранее. По предыдущим подсчетам выяснили, что брутфорс атака на sequence number потребует перебора всех чисел от 1 до 4.294.967.295. Однако это вовсе не так. Например, если ТСР стек на хосте А ограничен window в 16К, стек должен получать все пакеты в пределах этого “окна” и атакующему не обязательно посылать пакеты с установленным RTS во всей последовательности SN, а ограничится только каждым возможным окном, так как ТСР примет любой Sequence number в пределах некоторого диапазона, заданного величиной окна. Таким образом нападающему надо перебрать 4.294.967.295 / 16.384 = 262.143 что бы попасть во все доступные окна.

    Вероятно и 262 тысячи может показаться большим числом, однако это не так. Во-первых, при хорошем коннекте атакующий способен генерить десятки тысяч пакетов в секунду. Во-вторых, атаку можно распределить по нескольким хостам. Например на стандартной DSL линии можно производить 250 пакетов в секунду, что исчерпает все варианты за 17 минут, при подключении на скорости 2 МБит/С это уже 4.730 пакетов и всего лишь 60 секунд.

    В примере рассмотрен пример окна в 16К, однако по RFC это поле 16 битное, что дает до 64К. Еесли используется полный его размер, то атакующему достается всего 65.537 пакетов, 4 и 15 секунд соответственно. Причем имейте ввиду, что это максимальное время, в среднем оно будет наполовину меньшим (на практике это 3 минуты и 8 секунд). Что касается описанных в уязвимости 4 пакетов, то она возникает только при использовании window scaling, ТСР расширении (см. RFC 1323) где размер “окна” увеличен с 16 до 30 бит (реализовано, например, и в описанном выше BGP). В случае максимального размера атакующему действительно придется послать только 4 пакета что бы реализовать TCP Reset.

    Source Port

    Все приведенные выше примеры опираются на то, что атакующий знает порт назначения и IP адрес, порт исходный и исходный адрес. Первые два параметра доступны и известны, IP адрес получателя так же не составляет труда узнать – это адрес клиента которого спуфим. Единственный вопрос – исходный порт. Например если ОС случайным образом выдает порт из пула от 1025 до 49.152 (так как например делает OpenBSD), это увеличит количество попыток ровно в 48.127 раз, так как надо будет попробовать подловить номер SN с каждым номером порта. Хорошая новость в том, что большинство ОС, включая Linux и Windows, не используют такой механизм, что сводит на нет вероятность такой защиты.

    reset-tcp.c exploit или сплохи средь бела дня

    Paul Watson оказался на редкость щедрым и выложил в сеть написаный им reset-tcp.c эксплоит, который собирается достаточно просто даже на простеньком Debian Linux. 

    оператор ТрансТелеком перехват bgp-сессии в реальном времени

    Перед сборкой советую проверить наличие в системе необходимой библиотеки libnet-1.1.1 и доставить её в случае отсутствия:

    apt-get install libnet1-dev

    после успешной установки библиотеки в систему переходим к сборке бинарника сплоита:

    gcc reset-tcp.c -o reset-tcp /usr/lib/libnet.a
    или
    gcc -o reset-tcp reset-tcp.c -lnet

    ** можно также поменять предварительно MAC адрес (enet_src/enet_dst) в коде, во избежание лишних проблем со своим интернет-провайдером, которые могут возникнуть в процессе эксплуатации сплоита

    пример запуска:
    reset-tcp [interface] [src ip] [src port] [dst ip] [dst port] [window size]

    [root@orc EuroTransTelecom]# ./reset-tcp eth1 172.16.0.1 1 172.16.0.2 2 65536

    Packets sent: 8192 Sequence guess: 536805376
    Packets sent: 16384 Sequence guess: 1073676288
    Packets sent: 24576 Sequence guess: 1610547200
    Packets sent: 32768 Sequence guess: 2147418112
    Packets sent: 40960 Sequence guess: 2684289024
    Packets sent: 49152 Sequence guess: 3221159936
    Packets sent: 57344 Sequence guess: 3758030848
    packets sent: 65535

    SYN атака

    Reset атака может быть выполнена и без RST бита. Вместо него можно установить SYN бит выполнив точно такую же атаку, что была описана выше. На большинстве реализаций TCP стека в случае получения повторного SYN будет выслан RST с sequence number. Если SYN входит в “окно” текущей сессии, то вместо с RST ответом сессия будет прекращена, а система вероятно даже перезагружена.

    Blind data injection

    Наконец и третий, но далеко не последний вариант развития событий. Делается все так же как и в предыдущих случаях – брутфорсом подбирается sequence number, только вместо посылки пустых SYN или RST пакетов лепим нормальный пакет с данными. Соединение в таком случае не прервется, а вот что у пользователя соберется на компьютере – совершенно непонятный вопрос. Передаваемые данные будут катастрофически повреждены.

  • MyEtherWallet.com, BGP Hijacking Kullanarak Gerçekleştirilen Dolandırıcılık

    MyEtherWallet.com, BGP Hijacking Kullanarak Gerçekleştirilen Dolandırıcılık

    Daha önce bilinmeyen bir Bitcoin ve Ethereum yatırımcısı, BGP protokolünü, BGP sahtekarlığı komut dosyalarını ve bir BGP oturum ele geçirme uygulamasını kullanarak, Amazon Route 53 DNS trafiğini Rusya’daki web sunucusuna başarıyla yönlendirdi. Bu durum, meşru MyEtherWallet.com web sitesinin birkaç saatliğine farklı görünmesine ve kripto paranın üçüncü taraf bir Ethereum web cüzdanına aktarılmasına neden oldu. Bu taktik bazen “kötü ikizleme” olarak adlandırılır.

    Bir internet servis sağlayıcısının BGP oturumu ele geçirildiğinde önekin nasıl duyurulduğu

    MyEtherWallet web sitesinin bir klonunu kullanan bir kimlik avı saldırısı, iki saat içinde 215 ETH değerinde kripto paranın çalınmasına yol açtı.

    Sahte rota değişikliği, ABD’nin Columbus şehrinde bulunan büyük bir internet servis sağlayıcısı olan eNet AS10297 adına gerçekleştirildi. BGP oturumunun ele geçirilmesinin ve yeni BGP rota duyurularının yayınlanmasının ardından, Level3, Hurricane Electric, Cogent ve NTT gibi büyük sağlayıcılar da dahil olmak üzere eNet’e komşu tüm düğümler, trafiği saldırganlar tarafından belirtilen rota üzerinden Amazon Route 53’e yönlendirmeye başladı. Sahte BGP duyurusu nedeniyle, Amazon alt ağlarına (yaklaşık 1300 IP adresi) yapılan istekler iki saat boyunca saldırgan tarafından kontrol edilen ve Chicago’daki bir Equinix veri merkezinde bulunan bir sunucuya yönlendirildi; burada DNS yanıtlarını taklit etmek için bir “ortadaki adam” saldırısı gerçekleştirildi.

    Sahte DNS ayarları nedeniyle, MyEtherWallet.com kullanıcıları, kendinden imzalı bir HTTPS sertifikası kullanan sahte bir web sitesine yönlendirildi ve bu da tarayıcıda güvenlik sorunlarıyla ilgili uyarılara neden oldu. Bu durum, bilinmeyen bir yatırımcının mevcut döviz kuru üzerinden yaklaşık 137.000 dolarlık kripto parayı cüzdanlarına aktarmasını engellemedi. Eğer meşru kullanıcı kimlik avı sitesinde başarılı bir şekilde kimlik doğrulamasını tamamladıysa, tüm fonları MyEtherWallet’ten çekildi. Saldırganın veya işlemleri gerçekleştiren yatırımcı olarak kabul edilebilecek kişinin çok zengin bir birey olduğu ortaya çıktı: Saldırı sırasında transferlerin yönlendirildiği ETH cüzdanlarından birinde şu anda 24.276 ETH bulunuyor, bu da 15 milyon dolardan fazla bir değere denk geliyor.

    Saldırganlar, kurbanların bir uyarıya tıklamasını gerektiren özel bir sertifika yerine, tarayıcı tarafından güvenilen bir TLS sertifikası almış olsalardı, çalınan miktar muhtemelen daha yüksek olurdu.

    Bunlar, yakalanan adres alanına yerleştirilen DNS kayıtlarıdır

    Bazı siber güvenlik araştırmacıları, büyük bir internet servis sağlayıcısının BGP yönlendiricisine erişimin ve büyük miktarda DNS trafiğini yönetme kaynaklarının, saldırının MyEtherWallet.com dolandırıcılığıyla sınırlı olmadığını gösterebileceğine inanıyor; saldırıda kullanılan bilinmeyen bir yatırımcının ETH cüzdanına yapılan sürekli transferler de bu hipotezi destekliyor.

    Açıkçası, BGP oturum ele geçirme saldırıları sonucu IP adreslerinin kontrolünü kaybeden tek bulut operatörü Amazon değil. BGP’nin beceriksiz yapılandırma hatalarına ve açık dolandırıcılığa karşı savunmasızlığı yirmi yılı aşkın süredir ortada. Sonuç olarak, bu güvenlik eksikliği telekomünikasyon sektöründe sektör genelinde bir sorundur ve Amazon tek başına bunu çözemez.

  • Скам MyEtherWallet.com при помощи BGP Hijacking

    Скам MyEtherWallet.com при помощи BGP Hijacking

    Один пока никому не известный специалист по процессингу btc и eth, используя протокол BGP и сценарии bgp spoofing вместе с реализацией bgp hijacking, успешно перенаправил трафик DNS-сервиса Amazon Route 53 на свой сервер в России и несколько часов подменял настоящий сайт MyEtherWallet.com с реализацией web-кошелька криптовалюты Ethereum. Такую тактику ещё иногда называют Evil Twin.

    префикс 205.251.192.0/24 объявлялся из сети eNet в сети Hurricane Electric и TDS Telecom

    На подготовленном нарушителем клоне сайта MyEtherWallet была организована фишинг-атака, которая позволила за два часа угнать 215 ETH в криптовалюте на кошельки неразводных дропов.

    Подстановка фиктивного маршрута была осуществлена от имени крупного американского интернет-провайдера eNet AS10297 в Колумбусе штат Огайо. После перехвата BGP-сессии и BGP-анонса все пиры eNet, среди которых такие крупнейшие операторы, как Level3, Hurricane Electric, Cogent и NTT, стали заворачивать трафик к Amazon Route 53 по заданному атакующими маршруту. Из-за фиктивного анонса BGP запросы к 5 подсетям /24 Amazon (около 1300 IP-адресов) в течение двух часов перенаправлялись на подконтрольный нарушителю сервер, размещённый в датацентре провайдера Equinix в Чикаго, на котором и была организована MiTM-атака по подмене ответов DNS.

    Через подмену параметров DNS пользователи MyEtherWallet.com перенаправлялись на поддельный сайт, на котором использовался самоподписанный HTTPS-сертификат, для которого браузеры выдают предупреждение о проблемах с защищённым соединением, что не помешало в ходе грубого фишинга слить криптовалюты на сумму около 137 тысяч долларов по текущему курсу на кошельки неразводных дропов (в случае аутентификации на фишинговом сайте у пользователя списывались все средства с кошелька). Примечательно, что нарушитель или как его ещё можно назвать трейдером процессинга, оказался очень состоятельным человеком – на одном ETH-кошельке, на который в ходе атаки перенаправлялись переводы, в настоящее время находится 24276 ETH, что составляет более 15 млн долларов США.

    Достоверно известно, что в ходе атаки была осуществлена подмена DNS для сайта MyEtherWallet.com, тем не менее могли пострадать и другие клиенты сервиса Amazon Route 53. По мнению некоторых исследователей безопасности, получение доступа к BGP-маршрутизатору крупного ISP и наличие ресурсов для обработки огромного DNS-трафика может свидетельствовать, что атака не ограничилась только MyEtherWallet.com (в пользу данной гипотезы также говорит непрекращающийся поток переводов на используемый в атаке ETH-кошелёк).

    получение доступа к BGP-маршрутизатору крупного ISP и наличие ресурсов для обработки огромного DNS-трафика

    По другим предположениям, имел место лишь тестовый эксперимент перед проведением более массированных атак.