Log in
17
September

Gadu-Gadu SSL Bypass

Written by suriv. 2 comments Posted in:

W chwili gdy Gadu-Gadu wprowadziło szyfrowanie połączeń bardzo się ucieszyłem. Po pewnym czasie zaczęło mnie jednak zastanawiać, czy aby na pewno teraz nie da się podsłuchać rozmów prowadzonych przez najnowszą wersję Gadu-Gadu. Kilka dni temu zabrałem się więc do analizy jak to obecnie działa.
Po zainstalowaniu Gadu-Gadu 10 (osobiście używam EKG) pierwsze co mi się rzuciło w oczy to masa reklam ;) . Ale nie o tym miałem pisać. Druga rzecz która mi się rzuciła w oczy to fakt nie szyfrowania rozmów prowadzonych z osobami posiadającymi starsze wersje komunikatora (myślałem, że wszystkie rozmowy są szyfrowane). To czy rozmowa jest szyfrowana czy nie, można sprawdzić spoglądając na małą kłódkę umieszczoną w oknie konwersacji. Przyjmuje ona trzy stany: połączenie szyfrowane, brak szyfrowania, częściowe szyfrowanie. Tak na prawdę, bezpieczna rozmowa może być tylko gdy połączenie jest w pełni szyfrowane.
Nasunęło mi się w tedy pytanie: jeśli GG nie szyfruje wszystkiego, to czy da się wymusić, żeby nie szyfrował niczego? :) Odpowiedź po szybkiej analizie okazała się twierdząca. Ale po kolei.

Zgodnie z opisem protokołu znajdującym się pod adresem http://toxygen.net/libgadu/protocol/ Gadu-Gadu przed połączeniem z serwerem dowiaduje się z jakim adresem IP powinien się połączyć korzystając z jednego z adresów:

http://appmsg.gadu-gadu.pl/appsvc/appmsg_ver8.asp?fmnumber=NUMER&fmt=FORMAT&lastmsg=WIADOMOSC&version=WERSJA
http://appmsg.gadu-gadu.pl/appsvc/appmsg3.asp?fmnumber=NUMER&version=WERSJA&fmt=FORMAT&lastmsg=WIADOMOSC
http://appmsg.gadu-gadu.pl/appsvc/appmsg.asp?fmnumber=NUMER&version=WERSJA&fmt=FORMAT&lastmsg=WIADOMOSC

oczekując w odpowiedzi czegoś podobnego do:

21513 0 91.214.237.86:8074 91.214.237.86
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<HTML>
<BODY BGCOLOR="#FFFFFF" LEFTMARGIN="0" TOPMARGIN="0" MARGINWIDTH="0" MARGINHEIGHT="0" STYLE="overflow: hidden">

<script language="javascript1.2" type="text/javascript"><!--
/* (c)AdOcean 2003-2007 */
document.write('<script id="GaduGadu.GaduGadu_Komunikator.Klient 8.x.Komunikat_8x_400x265" src="http://s1.gg.adocean.pl/_'+(new Date()).getTime()+'/ad.js?id=2OFVHt3XndRg_T.nEIYAI7DwsLqnroLks8KQgStpPSb.Q7/age=0/gender=0/uid=0/redir=http://adserver.gadu-gadu.pl/clickmsg8.asp?uid=0%26adid=21513%26url=" language="javascript"><\/script>');
//--></script>

<!-- (C)2000-2008 Gemius SA - gemiusTraffic / ver 11.1 / Komunikat_8x_400x265 -->
<script type="text/javascript">
<!--//--><![CDATA[//><!--
var gemius_identifier = new String('0rs1NCMFwUdWDhcwy0etGnZHTDNB6iwjjVQMY9fzAS3.O7/sarg=469af506095de10f119130a0e900b2e67fead344');
//--><!]]>
</script>
<script type="text/javascript" src="http://gg.hit.gemius.pl/xgemius.js"></script>

</BODY>
</HTML>

Czego nie ma w dokumentacji, a co wynikło podczas analizy pakietów przesyłany do serwerów GG przez Gadu-Gadu 10 to fakt, że najnowsza wersja klienta łączy się z jeszcze innym adresem, mianowicie:

http://appmsg.gadu-gadu.pl/appsvc/appmsg_ver10.asp?fmnumber=NUMER&fmt=FORMAT&lastmsg=WIADOMOSC&version=WERSJA

Otrzymując w odpowiedzi coś podobnego do:

21515 1 ggproxy-15.gadu-gadu.pl:443 ggproxy-15.gadu-gadu.pl
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<HTML>
<BODY BGCOLOR="#FFFFFF" LEFTMARGIN="0" TOPMARGIN="0" MARGINWIDTH="0" MARGINHEIGHT="0" STYLE="overflow: hidden">

<script language="javascript1.2" type="text/javascript"><!--
/* (c)AdOcean 2003-2010 */
document.write('<script id="GaduGadu.GaduGadu_Komunikator.Klient 10.x.Komunikat_10x_400x265" src="http://s1.gg.adocean.pl/_'+(new Date()).getTime()+'/ad.js?id=69o6d_etk9D0nxOE5AcaallJjLlQqpCXT4rvYvOGjCD.m7/age=0/gender=0/uid=0/redir=http://adserver.gadu-gadu.pl/clickmsg10.asp?uid=0%26adid=21515%26url=" language="javascript"><\/script>');
//--></script>

<!-- (C)2000-2010 Gemius SA - gemiusTraffic / ver 11.1 / Komunikat_10x_400x265 -->
<script type="text/javascript">
<!--//--><![CDATA[//><!--
var gemius_identifier = new String('zI41j3y4wP5pP8HeEVW7RXaIj_5BvFs7elRY_QAax2z.77/sarg=469af506095de10f119130a0e900b2e67fead344');
//--><!]]>
</script>
<script type="text/javascript" src="http://gg.hit.gemius.pl/xgemius.js"></script>

</BODY>
</HTML>

Jak można szybko zauważyć połączenie odbywa się na zupełnie innym porcie. Pierwszy pomysł na jaki wpadłem to spróbowanie podszycia się pod serwer odpowiedzialny za informowanie klientów gdzie mają się łączyć i przekierowanie ich na jeden z serwerów GG który nie wykorzystuje szyfrowania. W tym celu wykorzystując DNS Spoofing przekierowałem domenę appmsg.gadu-gadu.pl na swój lokalny komputer, a na nim utworzyłem w odpowiedniej ścieżce plik appmsg_ver10.asp z następującą zawartością.

0 0 91.214.237.15:8074 0.0.0.0

Gdzie 91.214.237.15:8074 to jakiś z aktualnie działających serwerów z listy dostępnej na stronie http://www.kadu.net/monitor/.

Okazało się, że był to strzał w dziesiątkę. Gadu-Gadu połączyło się ze zdefiniowanym przeze mnie serwerem i przy wszystkich prowadzonych rozmowach nie wykorzystywało szyfrowania :) .

Metoda ta ma jednak dość poważne wady:

Oczywiście zapewne istnieją sposoby na ominięcie tych niedogodności, ale wymagają one sporego nakładu pracy.

Poniżej prezentacja ataku w środowisku testowym:

Czas trwania: 6:04      Napisy: NIE      Jakość: 1920×1200 px     Autor: Suriv

Jako, że pojawiają się głosy o nieczytelności filmu informuję, że by obejrzeć go na pełnym ekranie należy używać minimum rozdzielczości Full HD (1920×1080) i oglądać najlepiej w jakości Oryginal (wyżej niż 1080p). W celu obejrzenia filmu na niższej rozdzielczości należy wybrać jakość 720p i otworzyć wyświetlanie filmu w oknie.