Site Meter Skype e Windows Update - Segurança na Microsoft - Site Home - TechNet Blogs

Segurança na Microsoft

Comentários e Análises sobre Segurança da Informação, por Fernando Cima

Skype e Windows Update

Skype e Windows Update

  • Comments 3
  • Likes

O popular serviço de comunicação Skype ficou completamente indisponível no dia 16 deste mês, impedindo os seus usuários de fazer ou receber chamadas. O serviço voltou ao seu funcionamento normal somente dois dias depois, e em uma nota no seu blog oficial a Skype disse que o incidente foi causado por um problema no seu algoritmo de alocação de recursos de rede, que não soube tratar um grande número de reboots nos computadores dos seus usuários devido aos patches mensais da Microsoft.

Muita gente não acreditou nessa explicação. Eu não trabalho para o Skype e não tenho todas as informações comigo, mas julgando pelo que foi divulgado eu não vejo motivo para duvidar que o que aconteceu foi exatamente o que o Skype relatou. Para explicar porque eu acho que essa explicação é a verdadeira, eu organizei este post no formato de perguntas e respostas que se seguem abaixo:

(Antes de começar, uma nota importante: Eu não tenho nenhuma inside information sobre este caso, e todas as respostas foram baseadas em informações públicas disponíveis na rede. Boa parte da explicação sobre como o problema ocorreu é especulação minha com base na (pequena) documentação fornecida pelo Skype).

Como é que o reboot das máquinas dos usuários pode derrubar um serviço? Como isso afetaria os servidores?

Resposta curta: Porque as máquinas dos usuários são os servidores do Skype!

Resposta longa: Precisamos entender primeiro como funciona o Skype. Ao contrário de serviços como o MSN Live Messenger, onde todo o diretório com a localização de usuários está armazenado em servidores centrais, o Skype utiliza o modelo peer-to-peer (P2P) para distribuir essa base de dados pelos computadores dos seus usuários. No caso do Skype os computadores que armazenam estas informações são chamados "supernodes", que são computadores normais de usuários, eventualmente escolhidos automaticamente com base na banda disponível, localização e fácil acessibilidade. Ou seja, ao usar o Skype, você pode estar não só fazendo e recebendo chamadas como também funcionando como servidor para outros usuários do Skype.

Os supernodes  funcionam também eles mesmos como uma rede P2P, estabelecendo ligações e replicando o diretório de usuários. Você pode enxergar o Skype como sendo uma rede P2P multi-camadas: existe uma rede P2P na qual os clientes fazem chamadas diretamente entre si, que usa um diretório de usuários mantido por uma outra rede P2P que troca informações entre si. Essa segunda rede, a dos supernodes, tem um número muito menor de participantes, que são escolhidos entre a massa de usuários.

O fato de não depender de um servidor central torna uma rede P2P extremamente resiliente, mas cria o problema de gerenciar a entrada e saída de nós da rede. A qualquer momento o dono de um supernode pode resolver desligar o Skype (ou reiniciar a computador!), deixando os seus clientes e os outros supernodes inesperadamente a ver navios. Para tratar isso o Skype possui algoritmos para recompor automaticamente a rede, promovendo novos supernodes, reestabelecendo ligações e replicando as informações entre eles.

Mas nós não estamos falando de algoritmos triviais aqui. Encontrar uma forma de fazer isso otimizando os recursos de rede é um tipo de problema que a matemática classifica como não-polinomial - ou seja, não existe um algoritmo que permita um computador (ou "máquina de Turing determinística" na linguagem matemática) encontrar a melhor resposta, a chamada resposta "ótima". A alternativa que resta é encontrar problemas polinomiais cujas respostas se aproximam das respostas ótimas do problema não-polinomial, dentro de determinadas condições definidas, e usar algoritmos para resolver estes problemas. As respostas não serão "ótimas" mas boas o suficiente para a rede ficar estável, mas fora das condições para qual o algoritmo foi concebido as respostas podem ser "péssimas".

Cima, você está enrolando...

Calma, estou chegando lá!

O que provavelmente aconteceu é que, após os patches de agosto serem distribuídos pela Microsoft, vários supernodes foram reinicializados em um espaço relativamente curto de tempo. Sob estas condições o algoritmo não conseguiu recompor a rede P2P dos supernodes e os clientes perderam o acesso ao serviço. E pior, como nenhum cliente conseguia se conectar, o sistema não conseguia escolher novos supernodes!  É uma situação onde o sistema não consegue se recuperar sozinho e a rede tem que ser remontada externamente.

Mas a Microsoft não divulga patches todo mês? Porque isso não aconteceu antes?

Boa pergunta. Esse mês não foi em nada diferente dos outros meses, que na maioria dos casos também tiveram patches que exigiam a reinicialização do sistema.

É dificil responder sem conhecer o algoritmo. Talvez este mês uma coincidência na hora da reinicializaçao de alguns supernodes mais importantes tenha colocado a rede em uma situação onde ela não consegue mais se recompor. Quando se trata de problemas não-polinomiais sempre existem casos (não-triviais e difíceis de prever) para qual o algoritmo dará uma resposta extremamente ruim.

Um grupo de hackers russo divulgou na mesma semana um exploit de um ataque de negação de serviço para o Skype. Não é muita coincidência?

É apenas coincidência. Este exploit ataca justamente os supernodes, que ficam em redes espalhadas pelo mundo fora da rede do Skype. Se um ataque tivesse ocorrido nós teríamos evidência abundante disso, e não temos.

Nem todos os computadores do mundo aplicam patches ao mesmo tempo. O Windows sugere por default o horário de 3 da manha para a instalação, e existem fusos horários distintos no mundo. Nem todos se reinicializam ao mesmo tempo.

Lembre-se que o problema é causado pela reinicialização dos supernodes, não de computadores normais dos usuários. Como os supernodes são escolhidos com base na banda disponível e conectividade, é provável que eles estejam mais concentrados em lugares específicos do mundo.

O número de supernodes também é bem pequeno em relação ao número normal de clientes, e não é preciso que tantos computadores assim sejam reinicializados para afetar a rede. Eu suspeito que uma das mudanças no algoritmo que o Skype fará para impedir que essa situação ocorra de novo foi a de aumentar a relação supernodes/clientes comuns. Mas isso é especulação minha.

A culpa é então da Microsoft ou do Skype?

O Skype assumiu integralmente a culpa pelo problema. A empresa contactou a Microsoft assim que o incidente começou, e o nosso time de resposta a incidentes trabalhou em conjunto com o Skype para identificar se alguma das atualizações poderiam estar causando o problema. Com o tempo ficou claro que o problema estava em uma situação sem precedente enfrentada pelo algoritmo de alocação de recursos de rede do próprio Skype. Essa situação sem precedente foi causado pela atualização dos sistemas pela Microsoft, mas é algo que o Skype deveria ter sido capaz de tratar.

Para terminar, a Microsoft tem o poder de reiniciar o meu PC?

Não!

O mecanismo de auto-atualização do Windows sequer vem configurado com um comportamento default, e apesar do sistema sugerir que as atualizações sejam instaladas automaticamente às 3 da manhã para maior conveniência, isto é uma decisão do usuário. O Windows permite ser configurado para que o usuário tenha que concordar antes de iniciar o download e a instalação das atualizações, e também para que nunca faça uma reinicialização de forma automática. Além disso, se um usuário estiver usando o sistema interativamente (i.e. a console não esteja bloqueada), o Windows vai sempre pedir a permissão do usuário antes de fazer a reinicialização.

 

Comments
  • do you have english version of this topic? or point me into a link. thanks,

  • Hi Eric,

    Here is a rough translation from Portuguese.

    Skype and Windows Update

    The popular Skype communication service suffered an outage the 16th this month, becoming completely unavailable for its users. The service only went back to normal two days later, and in a post in its official blog Skype posted an explanation saying that the incident was caused by a problem in its network resource allocation bandwidth, which was not able to handle the large number of reboots of the user machines due to the monthly Microsoft patches.

    A lot of people did not believe in this explanation. I myself do not work for Skype nor I know all the information about this incident, but judging by what I know I don’t see any reason to not believe that everything happened exactly as Skype is saying it did.  To fully explain why I think they are telling the truth, I’ve organized this post in a Q&A format.

    (Before beginning, an important disclaimer: I don’t have any inside information about this incident, and all my answers are based on public information available on the net. Good part of this is speculation on my part, based on the small amount of public information available about Skype).

    How can rebooting client machines take down a service? How can that affect the servers?

    Short answer: because the client machines are the servers!

    Long answer: Let's first understand how Skype works. Differently from services like Live Messenger, where all directory and user location info is provided by central servers, Skype uses a peer-to-peer (P2P) model to distribute this database to its users. In Skype the systems that store this information are called “supernodes”, which are regular user machines that are eventually chosen automatically based on the available bandwidth, location and connectivity. That mean that when you are using Skype, you may not only be simply placing and receiving calls, but also working as a server for other Skype users.

    The supernodes also work between themselves as a P2P network, establishing connections and replicating user information. You can see Skype as a multi-tiered P2P network: there a P2P net where the clients can make calls directly between themselves, which uses a user directory maintained by another P2P network. This second network connecting the supernodes has a much smaller number of participants, chosen among the large population of users.

    Not depending on a central server makes P2P networks very resilient, but create the problem of managing the nodes entering and leaving the network. At any time the owner of a supernode system can turn off Skype (or reboot the machine!), disconnecting its clients and other supernodes without notice. In order to handle this, Skype uses algorithms that automatically recover the network, promoting new supernodes, establishing a new connection topology and replicating information between them.

    But we are not talking about trivial algorithms here. Establishing a P2P network topology using the resources in an optimal way it what is called in mathematics a non-polynomial problem – meaning that there is no algorithm that allows a computer (“non-deterministic Turing machine” in math language) to find the “optimal” answer. The alternative is to find polynomial problems whose solutions are approximate enough of the optimal solutions of the non-polynomial problem, under certain expected conditions, and use algorithms that solve these problems. The answers will not be optimal but should be good enough to maintain stable the network, but outside the expected conditions to which the algorithm was created the answers can be pretty much “non-optimal”.

    What probably happened on August 16th is that, after the August patches were distributed by Microsoft, several supernodes were rebooted in a short period of time. Under these conditions the algorithm was not able to recover the P2P supernode network, and clients could not connect to the service. Even worse, when clients are not able connect, the system cannot find new supernodes! This is a situation where the system cannot recover itself alone and the network needs external intervention.

    But doesn’t Microsoft release patches every month? Why haven’t this happened before?

    Good question. This patch release cycle was the same as in previous months, which in most cases also had patches which require the system to be reinitialized.

    I can’t answer this precisely without knowing the Skype algorithms. Maybe this month there was an unlucky coincidence of some important supernodes restarting very closely which put the network in a situation it could not recovery from. When we are dealing with non-polynomial problems there are always cases (which are non-trivial and essentially unpredictable) where the algorithm may fail spectacularly.

    A Russian hacking group made public a DoS exploit in the same week as this outage. Isn’t this too much of a coincidence?

    It is only coincidence. This exploit attacks the supernodes, who are spread in networks across the world outside Skype. It an attack happened we should have had abundant evidence of it, and this evidence simply does not exist.

    Not every computer in the world apply patches at the same time. Windows by default suggests 3AM local time for installation and reboot, and there are several different timezones.

    Remember this problem may be triggered by rebooting the supernodes, not regular systems. Since supernodes are chosen based on available bandwidth and connectivity, it is likely the case that they are more concentrated in specific geographies.

    The number of supernodes is also much smaller than the number of regular clients, so it does not require that many computers to be rebooted to affect the network. One of the possible algorithm changes Skype can make to avoid that situation to be repeated is to increase the supernode/regular client ration. But I am speculating.

    Who is guilty? Microsoft or Skype?

    Skype blamed no one but themselves for this outage. Skype contacted Microsoft as soon as this incident begun, and our Microsoft Security Response Center worked together with Skype to identify if any of the updates could have caused the problem. During the course of the investigation it became clear that the problem was in an unprecedented situation faced by the network resource allocation algorithm used by Skype. This unprecedented situation was triggered by the monthly Microsoft patch cycle, but it was something that Skype should have been able to handle.

    IMHO Skype acted very professionally in all of this, and at any time they tried to share blame with anyone.

    And to finish, does Microsoft have the power to reboot my PC?

    No!

    The Windows AutoUpdate mechanism does not come pre-configured with a default behavior, and even though the system suggests installing updates automatically at 3AM for greater convenience, in the end this is a user decision. Windows can be configured to ask for user approval before downloading and/or before installing the updates, and also to never automatically reboot the system.

  • Baseado nas informações expostas verifico vários pontos de falhas no protocolo do Skype. O primeiro é levar em consideração somente informações técnicas, excluindo a localização do supernode. Pelo que pude perceber estações utilizando Mac e/ou Linux foram menos suscetíveis ao problemas, levantando a seguinte questão: os supernodes são separados por sistemas operacionais?

    Não ficou claro como são escolhidas os supernodes, pois se não são computadores dos usuários, devem ser servidores do Skype.

    Essa história de que atualização da Microsoft fez cair a rede do Skype não está muito clara .... além disso um dia antes do problema foi lançada uma nova versão do Skype.

Your comment has been posted.   Close
Thank you, your comment requires moderation so it may take a while to appear.   Close
Leave a Comment