{"id":22200,"date":"2025-03-06T00:05:00","date_gmt":"2025-03-06T03:05:00","guid":{"rendered":"https:\/\/www.ethicalhacker.com.br\/site\/?p=22200"},"modified":"2025-02-26T18:17:32","modified_gmt":"2025-02-26T21:17:32","slug":"forense-digital-com-linux-tecnicas-praticas-parte-12","status":"publish","type":"post","link":"https:\/\/www.ethicalhacker.com.br\/site\/2025\/03\/basico\/forense-digital-com-linux-tecnicas-praticas-parte-12\/","title":{"rendered":"Forense Digital com Linux &#8211; T\u00e9cnicas Pr\u00e1ticas &#8211; Parte 12"},"content":{"rendered":"\n<div class=\"f9bf7997 c05b5566\">\n<div class=\"ds-markdown ds-markdown--block\">\n<p><strong>An\u00e1lise de Ataques de For\u00e7a Bruta com Express\u00f5es Regulares no Linux<\/strong><\/p>\n<p style=\"text-align: justify;\">Ataques de for\u00e7a bruta s\u00e3o uma das t\u00e9cnicas mais comuns utilizadas por invasores para ganhar acesso n\u00e3o autorizado a sistemas. Esses ataques envolvem tentativas repetidas de login, geralmente via SSH ou FTP, at\u00e9 que uma credencial v\u00e1lida seja descoberta. Neste artigo, vamos explorar como as express\u00f5es regulares (regex) no Linux podem ser utilizadas para analisar logs e identificar padr\u00f5es de ataques de for\u00e7a bruta em uma m\u00e1quina que est\u00e1 sendo alvo de m\u00faltiplas conex\u00f5es SSH e FTP.<\/p>\n<h3>\u00a0<\/h3>\n<p><strong>1. Introdu\u00e7\u00e3o ao cen\u00e1rio<\/strong><\/p>\n<p style=\"text-align: justify;\">Imagine uma m\u00e1quina Linux que est\u00e1 recebendo um grande n\u00famero de tentativas de login via SSH e FTP. O administrador do sistema notou um aumento incomum no tr\u00e1fego de rede e suspeita que a m\u00e1quina esteja sendo alvo de um ataque de for\u00e7a bruta. Nosso objetivo \u00e9 analisar os logs do sistema para identificar padr\u00f5es de ataque, como IPs suspeitos, hor\u00e1rios de pico e credenciais testadas.<\/p>\n<\/div>\n<\/div>\n<p>\u00a0<\/p>\n<div class=\"f9bf7997 c05b5566\">\n<div class=\"ds-markdown ds-markdown--block\">\n<p><strong>2. Analisando logs de SSH<\/strong><\/p>\n<p style=\"text-align: justify;\">Os logs de SSH s\u00e3o armazenados em\u00a0<code>\/var\/log\/auth.log<\/code>\u00a0na maioria das distribui\u00e7\u00f5es Linux. Vamos come\u00e7ar analisando este arquivo para identificar tentativas de login mal-sucedidas.<\/p>\n<p>\u00a0<\/p>\n<p><strong>2.1. Identificando Tentativas de Login Falhas<\/strong><\/p>\n<p style=\"text-align: justify;\">Para buscar todas as tentativas de login falhas, podemos usar o comando\u00a0<code>grep<\/code> com a express\u00e3o &#8220;Failed password&#8221;:<\/p>\n<div class=\"md-code-block\">\n<pre><strong><span class=\"token function\">grep<\/span> <span class=\"token string\">\"Failed password\"<\/span> \/var\/log\/auth.log<br \/><br \/><\/strong><\/pre>\n<\/div>\n<p style=\"text-align: justify;\">Este comando retorna todas as linhas que cont\u00eam a mensagem &#8220;Failed password&#8221;, indicando tentativas de login mal-sucedidas.<\/p>\n<p>\u00a0<\/p>\n<p><strong>2.2. Extraindo IPs suspeitos<\/strong><\/p>\n<p>Para identificar os IPs que est\u00e3o realizando as tentativas de login, podemos usar uma regex que capture endere\u00e7os IP:<\/p>\n<div class=\"md-code-block\">\n<pre><strong><span class=\"token function\">grep<\/span> <span class=\"token parameter variable\">-oE<\/span> <span class=\"token string\">\"([0-9]{1,3}\\.){3}[0-9]{1,3}\"<\/span> \/var\/log\/auth.log <span class=\"token operator\">|<\/span> <span class=\"token function\">sort<\/span> <span class=\"token operator\">|<\/span> <span class=\"token function\">uniq<\/span> <span class=\"token parameter variable\">-c<\/span> <span class=\"token operator\">|<\/span> <span class=\"token function\">sort<\/span> <span class=\"token parameter variable\">-nr<br \/><br \/><\/span><\/strong><\/pre>\n<\/div>\n<p style=\"text-align: justify;\">Aqui, a regex\u00a0<code>([0-9]{1,3}\\.){3}[0-9]{1,3}<\/code>\u00a0captura endere\u00e7os IP, e os comandos\u00a0<code>sort<\/code>,\u00a0<code>uniq -c<\/code>\u00a0e\u00a0<code>sort -nr<\/code>\u00a0organizam os resultados por frequ\u00eancia, mostrando quais IPs est\u00e3o realizando mais tentativas.<\/p>\n<p>\u00a0<\/p>\n<p><strong>2.3. Identificando Usu\u00e1rios Alvo<\/strong><\/p>\n<p>Para descobrir quais usu\u00e1rios est\u00e3o sendo alvo do ataque, podemos usar:<\/p>\n<div class=\"md-code-block\">\n<pre><strong><span class=\"token function\">grep<\/span> <span class=\"token parameter variable\">-oP<\/span> <span class=\"token string\">\"Failed password for \\K[^\\s]+\"<\/span> \/var\/log\/auth.log <span class=\"token operator\">|<\/span> <span class=\"token function\">sort<\/span> <span class=\"token operator\">|<\/span> <span class=\"token function\">uniq<\/span> <span class=\"token parameter variable\">-c<\/span> <span class=\"token operator\">|<\/span> <span class=\"token function\">sort<\/span> <span class=\"token parameter variable\">-nr<br \/><br \/><\/span><\/strong><\/pre>\n<\/div>\n<p style=\"text-align: justify;\">Aqui, a regex\u00a0<code>Failed password for \\K[^\\s]+<\/code>\u00a0extrai o nome do usu\u00e1rio ap\u00f3s a mensagem &#8220;Failed password for&#8221;.<\/p>\n<h3>\u00a0<\/h3>\n<p><strong>3. Analisando logs de FTP<\/strong><\/p>\n<p style=\"text-align: justify;\">Se o servidor FTP estiver em execu\u00e7\u00e3o, os logs podem estar em\u00a0<code>\/var\/log\/vsftpd.log<\/code>\u00a0ou\u00a0<code>\/var\/log\/xferlog<\/code>, dependendo da configura\u00e7\u00e3o. Vamos analisar esses logs para identificar tentativas de login falhas.<\/p>\n<p>\u00a0<\/p>\n<p><strong>3.1. Buscando tentativas de login falhas<\/strong><\/p>\n<p>Para buscar tentativas de login falhas no FTP, use:<\/p>\n<div class=\"md-code-block\">\n<pre><strong><span class=\"token function\">grep<\/span> <span class=\"token string\">\"FAIL LOGIN\"<\/span> \/var\/log\/vsftpd.log<\/strong><\/pre>\n<\/div>\n<p>Este comando retorna todas as linhas que cont\u00eam a mensagem &#8220;FAIL LOGIN&#8221;.<\/p>\n<p>\u00a0<\/p>\n<p><strong>3.2. Extraindo IPs e Usu\u00e1rios<\/strong><\/p>\n<p>Para extrair IPs e usu\u00e1rios associados \u00e0s tentativas falhas, podemos usar:<\/p>\n<div class=\"md-code-block\">\n<pre><strong><span class=\"token function\">grep<\/span> <span class=\"token parameter variable\">-oP<\/span> <span class=\"token string\">\"FAIL LOGIN: Client <span class=\"token entity\" title=\"\\&quot;\">\\\"<\/span>\\K[^<span class=\"token entity\" title=\"\\&quot;\">\\\"<\/span>]+\"<\/span> \/var\/log\/vsftpd.log <span class=\"token operator\">|<\/span> <span class=\"token function\">sort<\/span> <span class=\"token operator\">|<\/span> <span class=\"token function\">uniq<\/span> <span class=\"token parameter variable\">-c<\/span> <span class=\"token operator\">|<\/span> <span class=\"token function\">sort<\/span> <span class=\"token parameter variable\">-nr<br \/><br \/><\/span><\/strong><\/pre>\n<\/div>\n<p style=\"text-align: justify;\">Aqui, a regex\u00a0<code>FAIL LOGIN: Client \\\"\\K[^\\\"]+<\/code>\u00a0captura o IP do cliente ap\u00f3s a mensagem &#8220;FAIL LOGIN: Client&#8221;.<\/p>\n<h3>\u00a0<\/h3>\n<p><strong>4. Correlacionando dados com Awk<\/strong><\/p>\n<p style=\"text-align: justify;\">Para uma an\u00e1lise mais avan\u00e7ada, podemos usar\u00a0<code>awk<\/code> para correlacionar dados de diferentes logs. Por exemplo, para contar o n\u00famero de tentativas de login por IP e usu\u00e1rio:<\/p>\n<div class=\"md-code-block\">\n<pre><strong><span class=\"token function\">awk<\/span> <span class=\"token string\">'\/Failed password\/ {print $(NF-3), $9}'<\/span> \/var\/log\/auth.log <span class=\"token operator\">|<\/span> <span class=\"token function\">sort<\/span> <span class=\"token operator\">|<\/span> <span class=\"token function\">uniq<\/span> <span class=\"token parameter variable\">-c<\/span> <span class=\"token operator\">|<\/span> <span class=\"token function\">sort<\/span> <span class=\"token parameter variable\">-nr<br \/><br \/><\/span><\/strong><\/pre>\n<\/div>\n<p>Este comando extrai o IP (<code>$(NF-3)<\/code>) e o usu\u00e1rio (<code>$9<\/code>) de cada linha com &#8220;Failed password&#8221; e conta as ocorr\u00eancias.<\/p>\n<p>\u00a0<\/p>\n<p><strong>5. Identificando hor\u00e1rios de pico<\/strong><\/p>\n<p style=\"text-align: justify;\">Para identificar os hor\u00e1rios em que o ataque est\u00e1 mais ativo, podemos extrair o hor\u00e1rio das tentativas de login:<\/p>\n<div class=\"md-code-block\">\n<pre><strong><span class=\"token function\">grep<\/span> <span class=\"token parameter variable\">-oP<\/span> <span class=\"token string\">\"Failed password.*\\K[0-9]{2}:[0-9]{2}:[0-9]{2}\"<\/span> \/var\/log\/auth.log <span class=\"token operator\">|<\/span> <span class=\"token function\">uniq<\/span> <span class=\"token parameter variable\">-c<br \/><br \/><\/span><\/strong><\/pre>\n<\/div>\n<p>Aqui, a regex\u00a0<code>Failed password.*\\K[0-9]{2}:[0-9]{2}:[0-9]{2}<\/code>\u00a0captura o hor\u00e1rio das tentativas falhas.<\/p>\n<\/div>\n<p>\u00a0<\/p>\n<div class=\"ds-markdown ds-markdown--block\">\n<p><strong>6. Bloqueando IPs suspeitos<\/strong><\/p>\n<p>Ap\u00f3s identificar os IPs suspeitos, podemos bloquear temporariamente o acesso usando\u00a0<code>iptables<\/code>:<\/p>\n<div class=\"md-code-block\">\n<pre><strong>iptables <span class=\"token parameter variable\">-A<\/span> INPUT <span class=\"token parameter variable\">-s<\/span> <span class=\"token number\">203.0<\/span>.113.45 <span class=\"token parameter variable\">-j<\/span> DROP<br \/><br \/><\/strong><\/pre>\n<\/div>\n<p>Este comando bloqueia o IP\u00a0<code>203.0.113.45<\/code>. Para uma solu\u00e7\u00e3o mais permanente, considere usar ferramentas como\u00a0<code>fail2ban<\/code>.<\/p>\n<\/div>\n<p>\u00a0<\/p>\n<div class=\"ds-markdown ds-markdown--block\">\n<p><strong>7. Conclus\u00e3o<\/strong><\/p>\n<p style=\"text-align: justify;\">Express\u00f5es regulares s\u00e3o uma ferramenta poderosa para an\u00e1lise forense em sistemas Linux, especialmente quando se trata de identificar e caracterizar ataques de for\u00e7a bruta. Ao combinar regex com ferramentas como\u00a0<code>grep<\/code>,\u00a0<code>awk<\/code>\u00a0e\u00a0<code>iptables<\/code>, \u00e9 poss\u00edvel identificar padr\u00f5es de ataque, extrair evid\u00eancias e tomar medidas para proteger o sistema.<\/p>\n<p style=\"text-align: justify;\">No entanto, \u00e9 importante lembrar que a an\u00e1lise forense \u00e9 um processo complexo que requer a integra\u00e7\u00e3o de m\u00faltiplas t\u00e9cnicas e ferramentas. A pr\u00e1tica constante e a atualiza\u00e7\u00e3o cont\u00ednua s\u00e3o essenciais para se manter \u00e0 frente no campo din\u00e2mico da seguran\u00e7a cibern\u00e9tica.<\/p>\n<\/div>\n<p>\u00a0<\/p>\n<p><strong style=\"font-size: revert; color: initial;\">Refer\u00eancias Bibliogr\u00e1ficas<\/strong><\/p>\n<div class=\"ds-markdown ds-markdown--block\">\n<ul>\n<li>\n<p>Robbins, A. (2005).\u00a0<em>Unix in a Nutshell<\/em>. O&#8217;Reilly Media.<\/p>\n<\/li>\n<li>\n<p>Friedl, J. E. F. (2006).\u00a0<em>Mastering Regular Expressions<\/em>. O&#8217;Reilly Media.<\/p>\n<\/li>\n<\/ul>\n<p>Estas refer\u00eancias fornecem uma base s\u00f3lida para o uso de express\u00f5es regulares e t\u00e9cnicas de an\u00e1lise forense, complementando o conte\u00fado pr\u00e1tico apresentado neste artigo.<\/p>\n<\/div>\n<div class=\"ds-flex\">\n<div class=\"ds-flex abe97156\">\n<div class=\"ds-icon-button\" tabindex=\"0\">\n<div class=\"ds-icon\">\u00a0<\/div>\n<\/div>\n<div class=\"ds-icon-button\" tabindex=\"0\">\n<div class=\"ds-icon\">\u00a0<\/div>\n<\/div>\n<div class=\"ds-icon-button\" tabindex=\"0\">\n<div class=\"ds-icon\">\u00a0<\/div>\n<\/div>\n<div class=\"ds-icon-button\" tabindex=\"0\">\n<div class=\"ds-icon\">\u00a0<\/div>\n<\/div>\n<\/div>\n<div>\u00a0<\/div>\n<\/div>\n<\/div>\n<div class=\"fa81\">\u00a0<\/div>\n\n\n","protected":false},"excerpt":{"rendered":"<p>An\u00e1lise de Ataques de For\u00e7a Bruta com Express\u00f5es Regulares no Linux Ataques de for\u00e7a bruta s\u00e3o uma das t\u00e9cnicas mais comuns utilizadas por invasores para ganhar acesso n\u00e3o autorizado a sistemas. Esses ataques envolvem tentativas repetidas de login, geralmente via SSH ou FTP, at\u00e9 que uma credencial v\u00e1lida seja descoberta. Neste artigo, vamos explorar como [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":22196,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[89,100,109],"tags":[],"class_list":["post-22200","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-basico","category-diversos","category-backtrack-brasil-series"],"_links":{"self":[{"href":"https:\/\/www.ethicalhacker.com.br\/site\/wp-json\/wp\/v2\/posts\/22200","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.ethicalhacker.com.br\/site\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.ethicalhacker.com.br\/site\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.ethicalhacker.com.br\/site\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.ethicalhacker.com.br\/site\/wp-json\/wp\/v2\/comments?post=22200"}],"version-history":[{"count":3,"href":"https:\/\/www.ethicalhacker.com.br\/site\/wp-json\/wp\/v2\/posts\/22200\/revisions"}],"predecessor-version":[{"id":22203,"href":"https:\/\/www.ethicalhacker.com.br\/site\/wp-json\/wp\/v2\/posts\/22200\/revisions\/22203"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.ethicalhacker.com.br\/site\/wp-json\/wp\/v2\/media\/22196"}],"wp:attachment":[{"href":"https:\/\/www.ethicalhacker.com.br\/site\/wp-json\/wp\/v2\/media?parent=22200"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.ethicalhacker.com.br\/site\/wp-json\/wp\/v2\/categories?post=22200"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.ethicalhacker.com.br\/site\/wp-json\/wp\/v2\/tags?post=22200"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}