NFsec Logo

Skracarki i wklejarki URL cz.I – Scribebat librum Necronomicon

29/12/2018 w Bezpieczeństwo, Pen Test Brak komentarzy.  (artykuł nr 670, ilość słów: 1115)

S

erwisy oferujące skracanie adresów URL są do dzisiaj powszechnie stosowane. Pozwalają one utworzyć wygodny, krótki adres URL, który służy jako przekierowanie do długich i złożonych adresów. Skrócony adres URL może na przykład wyglądać tak: https://bit.ly/2TeiuwH. Po kliknięciu w niego nastąpi natychmiastowe przekierowanie do adresu URL bit.ly zapisanego za magiczną wartością 2TeiuwH (jeśli kliknąłeś w poprzedni link bez sprawdzenia dokąd prowadzi – dziękuje za zaufanie). Problem w tym, że „skróty” te można „złamać” poprzez ataki brute force. Dlatego używając tego typu serwisów nigdy nie powinniśmy w nich ukrywać linków do poufnych informacji. Zespół URLTeam z serwisu archiveteam.org – postawił sobie za cel badanie i odkrywanie tajemnic, jakie kryją się w tych magicznych wartościach.

Misją URLTeam jest rozgryzienie algorytmów tworzących skróty URL różnych serwisów np. bit.ly, tinyurl.com itd. i przeprowadzeniu ataków brute force, które powinny odgadnąć jak najwięcej możliwych kombinacji „magicznych” wartości i adresów za nimi ukrytymi. Obecnie zespół pracuje nad wieloma (około 130) usługami skracania – szczegóły możemy znaleźć pod tym adresem. Ich wysiłki są na bieżąco publikowane w internecie. Jeśli zebrać te informacje w jednym miejscu i poddać analizie – to można bardzo łatwo znaleźć soczyste informacje!

Niektóre z informacji, jakie możemy pozyskać na drodze analizy to np. adresy URL wskazujące na wewnętrzne systemy i ich pliki, które normalnie są niedostępne w internecie; przykłady „ataków w toku”, czyli w jaki sposób ktoś próbował dobrać się do webaplikacji lub znaleźć systemy o tej samej charakterystyce (widocznie skracarki są również popularne pośród skryptowych dzieciaków). Dla pentesterów może to być również pomocny dodatek do procesu rekonesansu, ponieważ wyniki wyszukiwania mogą ujawnić punkty końcowe i systemy, które nie zostałyby odkryte przez inne metody.

Piszemy Necronomicon:

W opowiadaniach Lovecrafta Necronomicon jest mroczną księgą zawierającą niebezpieczną, zakazaną wiedzę tajemną i odniesienia do Wielkich Przedwiecznych.

W celu budowy naszej bazy danych musimy na początku ściągnąć do niej dane źródłowe. Wyniki z „łamania” / odgadywania różnego rodzaju skracarek są publikowane w archiwum internetu. Są one umieszczane tam przyrostowo – co oznacza, że jeśli chcemy mieć wszystkie adresy URL musimy pobrać wszystkie archiwa od początku. Na dzień dzisiejszy jest to zakres od 2014-11-06-20-33-23 do 2018-12-29-05-17-05. Jako, że lubimy pracować mądrze, a nie ciężko – nie będziemy klikać w każde archiwum osobno, aby ściągnąć pliki .zip – tylko po zabawie z zaawansowanym wyszukiwaniem – wygenerujemy sobie odnośnik do pliku JSON, dzięki któremu prosty skrypt napisany w języku Python wypisze nam wszystkie odnośniki do plików .torrent każdego z archiwum (odnośniki mają swój standardowy format dlatego bardzo łatwo można je spreparować posiadając tylko jedną zmienną).

Na naszej maszynie wirtualnej uruchomiony jest system Ubuntu 18.04 LTS. Przed przystąpieniem do ściągania danych i uruchomieniem skryptu musimy zainstalować klienta protokołu bitTorrent oraz bibliotekę pythona requests:

apt-get install aria2 python3-requests

Nasze dane będziemy zapisywać w ścieżce /data/archive i tam też powinniśmy zapisać poniższy skrypt gettorrents.py:

#!/usr/bin/python3
# -*- coding: utf-8 -*-

import json
import requests

# Adresy z linkami do plików .torrent.
def show_torrents(address):
    wget = requests.get(address)
    data = json.loads(wget.text)
    for i in data["response"]["docs"]:
        url = 'https://archive.org/download/' + i["identifier"] +  '/' \
              + i["identifier"] + '_archive.torrent'
        print(url)

if __name__ == '__main__':
    # Plik JSON z wszystkimi archiwami.
    json_url = 'https://bit.ly/2AhgeOc'
    show_torrents(json_url)

Po jego uruchomieniu:

root@stardust:/data/archive# python3 gettorrents.py

Powinniśmy zobaczyć adresy:

...
https://archive.org/download/.../urlteam_2017-01-16-19-17-11_archive.torrent
https://archive.org/download/.../urlteam_2018-02-09-05-17-07_archive.torrent
...

Skoro posiadamy już listę wszystkich torrentów nie pozostaje nam nic innego jak uruchomienie klienta BT w terminalu. Będziemy robić to w prostej pętli – po każdorazowym ściągnięciu nie chcemy udostępniać plików (-seed-time=0) – dlatego klient po ściągnięciu każdego archiwum będzie kończył swoje działanie i przechodził do kolejnego:

for i in $(python3 gettorrents.py|grep '201[7,8]'); do aria2c --seed-time=0 $i; done

Ze względu na ograniczoną przestrzeń dyskową naszej maszyny – skupiliśmy się tylko na pobraniu danych z 2017 i 2018 roku (grep '201[7,8]'). Dwa lata skompresowanych danych zajmują na dysku 57 GB. Jeśli chcemy pobrać wszystkie dane wystarczy usunąć potok ( | ) razem z poleceniem grep. Po zakończeniu pętli z ściąganiem powinniśmy w katalogu /data/archive zobaczyć katalogi:

/data/archive/
├── urlteam_2017-01-04-19-17-15
├── urlteam_2017-01-10-19-17-07
├── urlteam_2017-01-16-19-17-11
├── urlteam_2017-01-20-19-17-07
├── urlteam_2017-01-26-19-17-06
...

Kolejnym krokiem jest odpakowanie archiwów .zip, w których znajdują się skompresowane pliki .txt z danymi w formacie BEACON:

cd /data/archive
find . -name '*.zip' -exec sh -c 'unzip -d `dirname {}` {}' ';' -exec rm {} \;

Po zakończeniu się polecenia struktura naszych katalogów powinna być następująca:

/data/archive/
├── urlteam_2017-01-04-19-17-15
│   ├── bitly_6
│   ├── tinyurl_7
│   ├── vgd_6
│   └── xn--i-8ia-ga
├── urlteam_2017-01-10-19-17-07
│   ├── bitly_6
│   ├── tinyurl_7
│   ├── vgd_6
│   └── xn--i-8ia-ga

Jeśli przestrzeń dyskowa nie jest dla nas problemem możemy dodatkowo rozpakować wszystkie pliki .txt, skompresowane XZ (w ten sposób będziemy mogli korzystać z „czystych” poleceń: grep -R ...):

cd /data/archive
find . -depth -name '*.xz' -exec xz -d {} \;

Tylko musimy mieć świadomość, że tylko dwa katalogi których skompresowana zawartość zajmowała 345 MB rozrośnie się do 1.2 GB, a katalogów za te dwa lata jest około 213. I to na tyle jeśli chodzi o wersję surowej konsoli. Posiadamy gigabajty danych do przeszukania i tylko nasza kreatywność jest limitem, co z nich uzyskamy:

cd /data/archive
find . -name \*.xz -print0 | xargs -0 xzgrep 'docs.google.com'

Zdaje sobie sprawę, że operowanie różnymi narzędziami (find, *grep, xargs, sed itd.) w konsoli nie jest za bardzo wygodne jeśli chodzi o analizę i wyszukiwanie danych. Dlatego w kolejnej części dowiemy się, jak tak pozyskane dane wrzucić do prostego i darmowego stosu ELK.

Czy tylko skracarki są zagrożeniem?

Oczywiście, że nie. Pracownicy w wewnętrznej sieci firmowej na różnych kanałach komunikacji bardzo często lubią przesyłać sobie informacje korzystając nie tylko z skracarek URL, ale także z serwisów takich jak pastebin – czyli aplikacji internetowych, umożliwiających wklejanie tekstu i udostępnienie go innym po podaniu odpowiedniego linku. Jak możemy się domyślić linki „wklejarek” również bez problemu mogą być skanowane, zbierane i poddawane odpowiedniej analizie. Samo Google nie ma problemu z indeksowaniem ich zawartości.

Więcej informacji: Shortened URL Security Tips, Researchers Crack Microsoft and Google’s Shortened URLs to Spy on People, Are shortened URLs safe?

Kategorie K a t e g o r i e : Bezpieczeństwo, Pen Test

Tagi T a g i : , , , , , , ,

Komentowanie tego wpisu jest zablokowane.