2015-09-14 38 views
16

To może być długi, długi strzał, ale jestem całkowicie zaskoczony, co może być przyczyną problemu:Co może być shufflling moje parametry ciąg kwerendy skonstruowane w JavaScript?

Dostarczam JavaScript po stronie klienta, który analizuje pewne parametry na stronie, na której jest osadzony, używa te parametry do skonstruowania URL i wstrzyknąć iframe przy użyciu tego adresu URL do strony jak:

var queryParams = { 
    param: 'foo' 
    , other: 'bar' 
}; 

zostaje przekształcony:

<iframe src="http://example.net/iframes/123?param=foo&other=bar"></iframe> 

To działa całkiem dobrze, jestem dostarczając około 1,5 miliona przesiał wniosek ts dziennie. Jeszcze niedawno zauważyłem, że w około 3,000 przypadków dziennie wartości parametrów kwerendy tasuje, więc czegoś takiego dostaje wniosek:

<iframe src="http://example.net/iframes/123?param=ofo&other=rba"></iframe> 

Sądząc po logach to jest przywiązane do konkretnych użytkowników, a jumbling znaków stanie się na nowo na każde żądanie, więc mogę zobaczyć sekwencje tak, gdy użytkownik przegląda stronę z wielu stron za pomocą skryptu:

108.161.183.122 - - [14/Sep/2015:15:18:51 +0000] "GET /iframe/ogequl093iwsfr8n?param=3a1bc2 HTTP/1.0" 401 11601 "http://www.example.net/gallery?page=1" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.0" 
108.161.183.122 - - [14/Sep/2015:15:19:07 +0000] "GET /iframe/ogequl093iwsfr8n?param=a21b3c HTTP/1.0" 401 11601 "http://www.example.net/gallery?page=2" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.0" 
108.161.183.122 - - [14/Sep/2015:15:19:29 +0000] "GET /iframe/ogequl093iwsfr8n?param=ba132c HTTP/1.0" 401 11601 "http://www.example.net/gallery?page=3" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.0" 

401 dzieje się celowo jako serwer oczekuje param=abc123.

Zauważyłem również, że większość błędów ma miejsce w przeglądarkach Firefox i Safari, a Google Chrome nie zażądał żadnego błędnego adresu URL.

Biblioteka, której używam do przekształcenia obiektu w ciąg zapytania, brzmi: query-string - ale patrząc na kod źródłowy, nie widzę żadnego potencjalnego błędu tego typu, nie ma nic, co można zrobić z wartościami, które nie wykonuje się kluczy (które nie są pomieszane).

Czy ktoś kiedykolwiek napotkał coś podobnego? Czy to jakieś dziwne rozszerzenie przeglądarki? Czy jest to zderzenie mojego skryptu z inną biblioteką rozszerzającą prototypy? Czy to złośliwe oprogramowanie? Czy jest to coś, czego zupełnie nie jestem świadomy? Byłbym wdzięczny za każdą wskazówkę, ponieważ jestem naprawdę nieświadoma i to doprowadza mnie do szału.

EDYTOWANIE: Właśnie odkryłem, że inna z naszych publicznych usług jest obecnie badana przez coś zwanego "Burp Suite". Spoglądając na ich stronę widzę, że mają narzędzie o nazwie "Payload fuzzing", które wydaje się robić dokładnie to, co jest tutaj opisane: https://portswigger.net/burp/help/intruder_gettingstarted.html lub tutaj: https://portswigger.net/burp/help/intruder_using.html#uses_enumerating - Całe narzędzie pachnie pół-rybi do mnie, więc to może być coś warto zbadać dalej. Czy ktoś jeszcze słyszał o tym zestawie narzędzi?

+0

@PaulRoub on nie mówi o porządku params, ale wartość każdego paramu została przetasowana 'param = ofo'. –

+1

Hej, skąd są pobierane wartości queryParams? Jeśli zostaną złapani ze strony internetowej, mogą łatwo zostać zmienione przez cokolwiek z tłumaczy na roboty. – jjbskir

+0

@jjbskir są one rzeczywiście pobierane z DOM strony hosta, więc jestem świadomy, że można je zinterpretować - chciałbym wiedzieć więcej o tym, co z nimi jest. Łańcuchy są zawarte w nazwach klas i atrybutach danych. Większość z nich to losowe ciągi alfanumeryczne à la '/ [a-z0-9] {32}/i' – m90

Odpowiedz

3

Jak już wspomniano tutaj Google Analytics Event Permutation istnieje konkretna wersja (co najmniej 1.0.37) z Firefox Add-on "Cliqz" mający anty-śledzenia-funkcjonalność wbudowany.

+0

Dzięki. Mogę potwierdzić, że to rozszerzenie również tasuje nasze parametry. Czy widziałeś już kod rozszerzenia? Czy rozumiesz, kiedy "token" kwalifikuje się jako "badToken" tutaj: https://gist.github.com/m90/e9df0576ac6f06f864f2? – m90

+0

Byliśmy szczęśliwi, gdy znaleźliśmy rzeczywistą linię kodu wykonującą shuffle. Nie sądzę, że chcemy więcej badań ... –

+0

Myślę, że dostałem to, co się dzieje w naszym przypadku: skrypt sprawdza żetony querystringu, a gdy napotka duplikat powyżej 8 znaków, zakłada, że ​​jest to identyfikator śledzenia : https://gist.github.com/m90/e9df0576ac6f06f864f2#file-badtokens-js-L36 - Szkoda, że ​​to klucz API przekazany przez GET w naszym przypadku ... – m90

0

Wydaje mi się wysoce nieprawdopodobne, aby to zachowanie miało korzenie w kodzie ciągu lub ciągu zapytania. Biorąc pod uwagę, że wartości ciągu zapytań można dowolnie zmieniać, podejrzewam, że tak się dzieje - należy pamiętać, że jest to 0,2% żądań.

Jest kilka rzeczy, które chciałbym sprawdzić. Czy wiesz, czy te prośby są przekazywane z innych witryn, Twojej witryny lub wykonane bezpośrednio? Czy wiesz, czy któreś ze źródłowych adresów IP odpowiadają znanym botom lub robotom sieciowym? Czy żądania pochodzą z różnych źródeł lub z małego podzbioru powtarzających się użytkowników?

Możliwe jest, że robot lub robot sieciowy jest "lightly probing your site" lub testowanie pod kątem duplikatów stron lub wprowadzających w błąd parametrów.

+0

Czy boty i roboty nie powinny identyfikować się z ich ciągiem UA? Wszystkie zarejestrowane żądania korzystają z ciągów UA prawdziwej przeglądarki. – m90

+0

Dobra myśl; więc wykluczyliśmy oczywiste roboty sieciowe (chyba że dzieje się coś dziwnego, ale powinieneś być w stanie sprawdzić adresy IP). Nie jest to jednak definitywne dla innych botów, ponieważ możesz ustawić ciąg znaków UA - np. robot szukający luk nie będzie się nazywał. – Ninjakannon

7

Niezbyt dużo do analizy od tego momentu, a ponieważ szukasz wskazówek; to raczej bardziej długi komentarz niż odpowiedź.

Złośliwe oprogramowanie w przeglądarce klienta (lub na komputerze) lub na twoim serwerze WWW; lub nieznany robot może być przyczyną tego, co jest mało prawdopodobne. Wydaje mi się, że twoja aplikacja jest atakowana.

Zobaczmy;

  • Rzeczywisty przykład (w komentarzach) wykazuje, że 128-bitowe szesnastkowym kluczy dostępu są tasuje. (wartości accessKey param)
  • Zmienia się tylko wartości, a nie klucze.
  • Mówisz, że zapytania pochodzą od konkretnych użytkowników.
  • Mówisz, że zapytania przychodzą od określonych klientów przeglądarki (Firefox i Safari).

Co należy sprawdzić/zrobić;

  • Sprawdź, czy twój system rejestracji działa poprawnie. Jeśli korzystasz z niezależnego, konfigurowalnego programu rejestrującego, może to zepsuć sytuację. (example)
  • Odtwarzanie: Podobny zestaw parametrów; użyj tej samej wersji przeglądarki i sprawdź, czy wyniki są takie same. Jeśli tak, może to być problem z wersją przeglądarki, która jest mało prawdopodobna.
  • Sprawdź, czy istnieją inne Firefox i Safari użytkowników (z tych samych wersjach), które NIE doświadczenie tego.
  • Ponieważ mówisz, że to tylko niewielki procent żądań, sprawdź, czy odpowiednie żądania są wykonywane bezpośrednio po drugim. (Te same życzenia w mniej niż sekundę?)
  • Wypróbuj śledzenie źródła żądań. Czy pochodzą ze źródła, które podejrzewasz? Czy możesz powiązać informacje z różnych zapytań ze sobą nawzajem? Wiele adresów IP tworzy podsieć? Ten sam adres IP przy użyciu różnych kont? To samo konto przy użyciu różnych adresów IP w krótkim okresie czasu?
  • Istnieją narzędzia, takie jak apache-scalp, mod_sec, lorg do sprawdzania/analizowania dużych plików dziennika, aby wyodrębnić możliwe ataki.
  • Można również użyć niektórych z wymienionych technik: here, aby ręcznie wykrywać lub blokować podejrzane żądania.
0

Niektóre roboty indeksują Twoją witrynę, to całkiem normalne. Jeśli nie chcesz, aby załadował twój serwer, zablokuj adres IP żądania.

+0

Rzecz w tym, że wygląda na zwykłą przeglądarkę (sądząc po łańcuchu UA), a cały ruch pochodzi z różnych adresów IP. Jest więc bardzo mało prawdopodobne, że jest to po prostu "jakiś robot". – m90

+0

UA Struny można łatwo sfałszować, więc nie jest to naprawdę dobry wskaźnik. –

4

Jestem Tomas i Jestem inżynierem oprogramowania w CLIQZ.

Jesteśmy niemieckim startupem, który integruje funkcje wyszukiwania i innowacyjne funkcje prywatności w przeglądarkach.Jest to rzeczywiście wynikiem naszej funkcji Anti Tracking. Podobne pytanie zadano również pod numerem reddit i another question on stackoverflow. Odpowiedzieliśmy już na oba posty, więc podaję tę samą odpowiedź tutaj:

Funkcja śledzenia CLIQZ nie służy wyłącznie do blokowania śledzenia, ale służy wyłącznie do śledzenia poszczególnych użytkowników - co uznajemy za naruszenie prywatności naszych użytkowników, a zatem nieodpowiednie. W przeciwieństwie do innych systemów anty-śledzenia nasz nie blokuje całkowicie sygnałów; w ten sposób właściciele witryn mogą pobierać dane do zgodnych z prawem zastosowań, takich jak liczenie odwiedzin.

Aby uniemożliwić identyfikację użytkowników (np. Za pomocą skrótów JavaScript), funkcja CLIQZ Anti Tracking w rzeczywistości nadaje ciągi permutacyjne. . Ilekroć w naszych danych pojawia się nowy tracker, nasz system traktuje go początkowo jako tracker identyfikujący użytkownika i zmienia ciąg znaków, aby zapobiegawczo chronić naszych użytkowników. Nasz system wykorzystuje tak zwane techniki k-anonimowości. Jeśli zobaczy ten sam ciąg wydarzeń z wieloma użytkownikami wyświetlanymi niezależnie przez kilka dni, umieszcza go na białej liście legalnych, nieidentyfikujących trackerów. Po umieszczeniu trackera na białej liście pozostaje on niezmieniony, a właściciele witryn widzą oryginalny ciąg znaków. Innymi słowy, funkcja CLIQZ Anti Tracking ogranicza czasowo działanie funkcji legalnych trackerów. Jak tylko okaże się, że tracker nie narusza prywatności naszego użytkownika, wszystko działa jak zwykle. Prywatność jest dla nas niezwykle ważna i uważamy, że ta technologia jest niezbędna, aby chronić naszych użytkowników przed szpiegowaniem.

Mam nadzieję, że to pomoże.