<?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>Wed, 28 Mar 2012 21:54:28 +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>Adicionando segurança ao JBoss Messaging</title>
		<link>http://rafaelliu.net/2012/03/22/adicionando-seguran-jboss-messaging/</link>
		<comments>http://rafaelliu.net/2012/03/22/adicionando-seguran-jboss-messaging/#comments</comments>
		<pubDate>Thu, 22 Mar 2012 21:31:21 +0000</pubDate>
		<dc:creator>rafaelliu</dc:creator>
				<category><![CDATA[JBoss]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[segurança]]></category>
		<category><![CDATA[jms]]></category>

		<guid isPermaLink="false">http://rafaelliu.net/?p=603</guid>
		<description><![CDATA[Nesse post quero falar de como prover segurança na troca de mensagens utilizando JBoss Messaging. Segurança é um conceito bem amplo. Em termos da mensagens, o que queremos é: autenticidade: garantia de que a mensagem é de quem achamos que é; integridade: garantia que a mensagem é a que foi escrita originalmente; confidencialidade: garantia que [...]]]></description>
			<content:encoded><![CDATA[<p>Nesse post quero falar de como prover segurança na troca de mensagens utilizando JBoss Messaging. Segurança é um conceito bem amplo. Em termos da mensagens, o que queremos é:</p>
<ul>
<li><strong>autenticidade:</strong> garantia de que a mensagem é de quem achamos que é;</li>
<li><strong>integridade:</strong> garantia que a mensagem é a que foi escrita originalmente;</li>
<li><strong>confidencialidade:</strong> garantia que a mensagem não foi lida por mais ninguém.</li>
</ul>
<p>Também não queremos que qualquer consumidor leia da fila. Portanto, além de todas essas garantias, vamos adicionar autenticação e autorização para restringir o acesso ao nosso provedor JMS.</p>
<p>Como alguns já devem ter notado, grande parte dos nossos requisitos são atendidos utilizado-se Certificados Digitais. E é justamente o que vamos usar.</p>
<h3>Utilizando um canal SSL para envio de mensagens</h3>
<p>O JBoss Messaging (JBM) utiliza um subprojeto da JBoss chamado <a href="http://www.jboss.org/jbossremoting" target="_blank">JBoss Remoting</a> para comunicação de rede. Para utilizarmos SSL, basta configurar o conector do JBoss Remoting para utilizar um socket SSL. Para nossa sorte a equipe da JBoss já fez isso para nós, basta copiar o arquivo <code>$JBOSS_HOME/docs/examples/jms/remoting-sslbisocket-service.xml</code> para a pasta de deploy.</p>
<p>Será preciso criar <a href="http://www.techbrainwave.com/?p=953" target="_blank">um Keystore</a> <code>$JBOSS_HOME/server/default/conf/messaging.keystore</code> com a par de chaves e o certificado. Se o certificado for auto-assinado, será também preciso adicioná-lo Truststore do cliente. A senha do Keystore deve ser &#8220;secureexample&#8221;.</p>
<p>Para produção é possível alterar configurações de keystore e senha no MBean <code>org.jboss.remoting.security.SSLSocketBuilder</code>, dentro do arquivo <code>remoting-sslbisocket-service.xml</code> que copiamos.</p>
<p>Feito isso, vamos criar um ConnectionFactory que utilize esse conector. Dentro de deploy, crie um arquivo <code>messaging-secure-socket-service.xml</code>:</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;?xml</span> <span style="color: #000066;">version</span>=<span style="color: #ff0000;">&quot;1.0&quot;</span> <span style="color: #000066;">encoding</span>=<span style="color: #ff0000;">&quot;UTF-8&quot;</span><span style="color: #000000; font-weight: bold;">?&gt;</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>
   <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;org.jboss.jms.server.connectionfactory.ConnectionFactory&quot;</span></span>
<span style="color: #009900;">          <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;jboss.messaging.destination:service=SecureConnectionFactory&quot;</span></span>
<span style="color: #009900;">          <span style="color: #000066;">xmbean-dd</span>=<span style="color: #ff0000;">&quot;xmdesc/ConnectionFactory-xmbean.xml&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
&nbsp;
      <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;depends</span> <span style="color: #000066;">optional-attribute-name</span>=<span style="color: #ff0000;">&quot;ServerPeer&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>jboss.messaging:service=ServerPeer<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/depends<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
      <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;depends</span> <span style="color: #000066;">optional-attribute-name</span>=<span style="color: #ff0000;">&quot;Connector&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>jboss.messaging:service=Connector,transport=sslbisocket<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/depends<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
&nbsp;
      <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;JNDIBindings&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
         <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;bindings<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
            <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;binding<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>/SecureConnectionFactory<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/binding<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
         <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/bindings<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
      <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>Note que o atributo <code>Connector</code> possui o Name do MBean que utiliza o conector SSL. Estamos informando para o JBoss que esse ConnectionFactory deve utilizar um canal SSL. Sempre que o client utilizar um ConnectionFactory obtido pelo lookup de &#8220;/SecureConnectionFactory&#8221; estará se comunicando em um canal encriptado.</p>
<p>NOTA: cuidado para não utilizar binds JNDI padrões do JBM, definidos em <code>connection-factories-service.xml</code>. Eles usam o <code>jboss.messaging:service=Connector,transport=bisocket</code>, que não utiliza Certificado.</p>
<h3>Configurando autenticação/autorização para filas</h3>
<p>Para autenticar o client vamos utilizar usuário/senha. O JBM por padrão utiliza o Security Domain &#8220;messaging&#8221; definido em <code>messaging-jboss-beans.xml</code>, que utiliza datasource DefaultDS. Nesse mesmo arquivo é possível alterar o Security Domain utilizado.</p>
<p>As definições de autorização devem ser feitas por fila. Ao definir uma fila, devemos fazê-lo da seguinte forma:</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;?xml</span> <span style="color: #000066;">version</span>=<span style="color: #ff0000;">&quot;1.0&quot;</span> <span style="color: #000066;">encoding</span>=<span style="color: #ff0000;">&quot;UTF-8&quot;</span><span style="color: #000000; font-weight: bold;">?&gt;</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>
   <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;org.jboss.jms.server.destination.QueueService&quot;</span></span>
<span style="color: #009900;">      <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;jboss.messaging.destination:service=Queue,name=securityTestQueue&quot;</span></span>
<span style="color: #009900;">      <span style="color: #000066;">xmbean-dd</span>=<span style="color: #ff0000;">&quot;xmdesc/Queue-xmbean.xml&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
&nbsp;
      <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;depends</span> <span style="color: #000066;">optional-attribute-name</span>=<span style="color: #ff0000;">&quot;ServerPeer&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>jboss.messaging:service=ServerPeer<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/depends<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
      <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;depends<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>jboss.messaging:service=PostOffice<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/depends<span style="color: #000000; font-weight: bold;">&gt;</span></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;SecurityConfig&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
         <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;security<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
            <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;role</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;guest&quot;</span> <span style="color: #000066;">read</span>=<span style="color: #ff0000;">&quot;false&quot;</span> <span style="color: #000066;">write</span>=<span style="color: #ff0000;">&quot;false&quot;</span> <span style="color: #000066;">create</span>=<span style="color: #ff0000;">&quot;false&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
            <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;role</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;publisher&quot;</span> <span style="color: #000066;">read</span>=<span style="color: #ff0000;">&quot;true&quot;</span> <span style="color: #000066;">write</span>=<span style="color: #ff0000;">&quot;true&quot;</span> <span style="color: #000066;">create</span>=<span style="color: #ff0000;">&quot;true&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
         <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/security<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
      <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>Note o atributo <code>SecurityConfig</code>. Acho que é tudo bem auto-explicativo, a não ser o <code>create</code>. Esse atributo se aplica a tópico e dá o privilégio do client criar uma subscrição <a href="http://activemq.apache.org/how-do-durable-queues-and-topics-work.html" target="_blank">DURABLE</a>.</p>
<p>O para publicar na fila, o client deve obter uma conexão usando a chamada <code>createConnection()</code> que passa usuário e senha:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;">javax.<span style="color: #006633;">jms</span>.<span style="color: #006633;">ConnectionFactory</span>.<span style="color: #006633;">createConnection</span><span style="color: #009900;">&#40;</span>username, password<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>NOTA: cuidado ao utilizar os arquivos <code>*-persistence-service.xml</code> que vêm de exemplo no JBoss. Alguns usuário padrões são definidos neles e podem ser utilizados para obter acesso privilegiado. Em um <a href="http://rafaelliu.net/2010/05/30/configurando-o-jboss-messaging-em-cluster/">post anterior</a> postei mais informações sobre o JBoss Messaging.</p>
<h3>Criando um MDB para consumir</h3>
<p>Para consumir mensagens autenticando-se e utilizando o ConnectionFactory sobre SSL, o MDB deve ser configurado com algumas propriedade a mais:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;">@MessageDriven<span style="color: #009900;">&#40;</span>activationConfig <span style="color: #339933;">=</span>
<span style="color: #009900;">&#123;</span>
   @ActivationConfigProperty<span style="color: #009900;">&#40;</span>propertyName<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;destinationType&quot;</span>, propertyValue<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;javax.jms.Queue&quot;</span><span style="color: #009900;">&#41;</span>,
   @ActivationConfigProperty<span style="color: #009900;">&#40;</span>propertyName<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;destination&quot;</span>, propertyValue<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;queue/securityTestQueue&quot;</span><span style="color: #009900;">&#41;</span>,
   @ActivationConfigProperty<span style="color: #009900;">&#40;</span>propertyName<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;ConnectionFactoryName&quot;</span>, propertyValue<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;SecureConnectionFactory&quot;</span><span style="color: #009900;">&#41;</span>,
   @ActivationConfigProperty<span style="color: #009900;">&#40;</span>propertyName<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;user&quot;</span>, propertyValue<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;john&quot;</span><span style="color: #009900;">&#41;</span>,
   @ActivationConfigProperty<span style="color: #009900;">&#40;</span>propertyName<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;password&quot;</span>, propertyValue<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;needle&quot;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span>
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> QueueConsumer <span style="color: #000000; font-weight: bold;">implements</span> MessageListener <span style="color: #009900;">&#123;</span>
   <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> onMessage<span style="color: #009900;">&#40;</span>Message message<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
      <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">getClass</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">getName</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> <span style="color: #0000ff;">&quot; -&gt; &quot;</span> <span style="color: #339933;">+</span> message<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>That&#8217;s it!</p>
]]></content:encoded>
			<wfw:commentRss>http://rafaelliu.net/2012/03/22/adicionando-seguran-jboss-messaging/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<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>

