quarta-feira, 22 de dezembro de 2010

Materia.

Olá.. hoje falarei sobre segurança nos formulários.. principalmente nos Logins!

Muitos novatos (inclusive eu) desenvolvem seus sites.. pensando que está tudo OK, e tudo mais.. mas na verdade, quando tratamos de algum sistema de onde o usuário se cadastra, e depois efetua o eventual Login, não podemos vacilar.. pois hoje em dia, são muitos os "hackers" por aí...
e por isso, toda a segurança é bem vinda!

Bom, para os que não sabem, na maioria dos sites onde tem um sistema de membros, e um botão para efetuar o "LOGIN", se não for muito bem esquematizado, qualquer um pode efetuar um login... mesmo sem saber senha alguma!
É.. é isso mesmo..
Mas isso não acontece em todos as páginas, acontece geralmente nas páginas feitas por gente que não entende muito de SQL, ou até mesmo de Asp..
Bom.. na prática é muito simples.. é só você ir até algum site, e digitar uma aspa simples (') .. e depois clicar em enviar, submit, login, ou algo do genero..
Se ao clicar nesse botão, gerar um belo erro de script, então é isso mesmo.. caminho está livre!
Como fazer? Simples!
Apenas digite no login e na senha:
'OR '1' = '1 .. isso irá liberar um user logado para você!
Geralmente ele logará com o primeiro NICK do banco de dados.. mas pode acontecer de ser aleatório.. isso depende da estrutura do site em questão..
Imaginem isso: O cara se cadastra em um site de compras online, e lá põe seus dados como CPF, Cartão de crédito, RG, e tudo mais.. para depois se logar, e fazer as compras, que serão debitadas no user dele.. no site mesmo..
Imaginem se alguém se loga no nome dele, rouba os dados, e ainda faz uma compra gigantesca!
Perigoso, não?
E como resolver isso?
Simples! Apenas temos que fazer com que não dê erro em nossas paginas quando alguém digitar o caracter (').. a famosa aspa simples...
Para fazer isso é assim:
A aspa simples é o caracter 39 do teclado..
então usamos um comando que substitui ela por duas delas, pois aí o comando sql entende como se fosse apenas uma, e envia só uma pro BD!
a sintaxe é:
Var_User = Replace(Request.Form("user"),chr(39),"''")

e façam o mesmo para o campo senha..
isso substitui a aspa simples por duas aspas simples.. e apenas uma é inserida no BD! e isso não ocasiona erro algum.

Bom gente.. é isso aí!
Abraços!
Matéria editada por:
Rogério Lanzarin - (Dark)


retirado de : http://www.scriptbrasil.com.br/forum/lofiversion/index.php/t9757.html

SQL Injection

Injeção de SQL

Origem: Wikipédia, a enciclopédia livre.

A Injeção de SQL, mais conhecida através do termo americano SQL Injection, é um tipo de ameaça de segurança que se aproveita de falhas em sistemas que interagem com bases de dados via SQL. A injeção de SQL ocorre quando o atacante consegue inserir uma série de instruções

SQL dentro de uma consulta (query) através da manipulação das entrada de dados de uma aplicação.

Para exemplificar o funcionamento da injeção de SQL, consideremos uma instrução SQL comum:


SELECT id, nome, sobrenome FROM autores;


Essa instrução, que representa uma consulta na base de dados, retorna todas os registros das colunas "id", "nome" e "sobrenome" da tabela "autores". A partir desta mesma instrução, os registros a serem retornados podem ser restritos através da inclusão da cláusula WHERE, como é visto no exemplo abaixo:



SELECT
id, nome, sobrenome FROM autores WHERE nome = 'josé' AND sobrenome = 'silva';


Com base nesta instrução, é fácil supor que "josé" e "silva" são strings, cujo conteúdo será preenchido pela entrada feita por algum usuário que estiver fazendo uso da aplicação.

Portanto, supondo que a aplicação não faça o tratamento apropriado do conteúdo inserido pelo usuário, o mesmo pode fazer o uso acidental do caractere de aspas simples. Gerando a entrada:

  • nome = jo'sé
  • sobrenome = silva

E fazendo com que a aplicação gere o código:



SELECT
id, nome, sobrenome FROM autores WHERE nome = 'jo'' AND sobrenome = 'silva';

De acordo com a especificação da linguagem SQL, existe um erro de sintaxe nessa instrução, uma vez que a string passada para o campo nome é a apenas palavra "jo", pois a adição das aspas simples quebrou a delimitação das aspas simples originais da consulta. O interpretador do SQL espera que o restante da instrução seja outros comandos SQL válidos que complementem a instrução principal. No entanto, como "sé" não é um identificador válido, essa instrução não será executada e retornará um erro.

Com base neste problema, um possível atacante pode manipular os dados de entrada a fim de gerar um comportamento não esperado na base de dados.

Para exemplificar este conceito, consideremos na mesma consulta apresentada, a entrada dos seguintes dados pela aplicação:

  • nome = jo'; DROP TABLE autores ; --
  • sobrenome = silva

Fazendo com que a aplicação gere o código:



SELECT
id, nome, sobrenome FROM autores WHERE nome = 'jo'; DROP TABLE autores ; --' AND sobrenome = 'silva';

Neste caso, a instrução será executada normalmente, pois não há um erro de sintaxe, no entanto, com a adição do caractere ponto-e-vírgula, a instrução foi dada como finalizada de modo prematuro dando espaço para uma nova instrução. Essa nova instrução, que poderia ser qualquer uma escolhida pelo atacante, pode ser a responsável por retornar dados confidenciais armazenados na base de dados ou de executar instruções que comprometam o sistema, como a remoção de dados e/ou tabelas, como pode ser visto no exemplo apresentado.

Aparentemente um método para prevenir esse problema seria a remoção de aspas simples dos campos de inserção da aplicação, ou simplesmente não executando a query nestas situações. Isso é verdade, mas existem várias dificuldades com esse método tanto quanto soluções. Primeiro, nem todos os usuários inserem dados em forma de strings. Se o usuário puder selecionar um autor pelo 'id' (presumivelmente um número) por exemplo, nossa query aparecerá como abaixo:



SELECT
id, forename, surname FROM authors WHERE id=1234

Nesta situação, o atacante pode simplesmente adicionar uma instrução SQL no fim do 'input' numérico. Verificando os dialetos de SQL, vários delimitadores podem ser usados no Microsoft Jet DBMS engine, por exemplo, datas podem ser delimitadas com o caracter sustenido. Portanto, escapando da execução da adição de aspas simples, não necessariamente uma solução como demonstrado anteriormente.

Pode-se ilustrar esse ponto usando um exemplo de página de login em Active Server Pages (ASP), que acessa um servidor de banco de dados SQL e tenta autenticar o acesso em uma aplicação fictícia.

Abaixo está um pedaço de código de uma página de formulário, em que um usuário insere o username e o password para autenticação:

(...)


function Login( cn )
{
var username;
var password;
username = Request.form("username");
password = Request.form("password");
var rso = Server.CreateObject("ADODB.Recordset");
var sql = "select * from users where username = '" + username + "' and password = '" + password + "'";
trace( "query: " + sql );
rso.open( sql, cn );
if (rso.EOF) {
rso.close();
}
}

function Main()
{
//Set up connection
var username
var cn = Server.createobject( "ADODB.Connection" );
cn.connectiontimeout = 20;
cn.open( "localserver", "sa", "password" );
username = new String( Request.form("username") );
if( username.length > 0) {
Login( cn );
}
cn.close();
}

A parte critica é a parte do 'process_login.ascp' que cria uma 'query string':



var sql = "SELECT * FROM users WHERE username = '" + username + "' AND password = '" + password + "'";

Se o usuário inserir os seguintes dados:

* Username: '; drop table users--
* Password:

... a tabela 'users' será apagada, negando o acesso para todos os usuários. A seqüência de caracteres '--' é o comentário de uma linha de SQL, a o ';' denota o fim de uma query e o começo de outra. O '--' no fim do campo username é requerido para que a query em questão seja executada sem erros.

O atacante pode logar como qualquer usuário, se souber o nome do usuário, usando o input abaixo:

  • Username: admin'--

O atacante pode logar como o primeiro usuário da tabelas 'users', com a inserção abaixo:

  • Username: ' or 1=1--

O atacante pode ainda logar como um usuário completamente fictício com o input abaixo:

  • Username: ' union select 1, 'fictional_user', 'some_password', 1--

A razão para que isso funcione é que a aplicação acredita que a linha 'constante' que o atacante especificou é parte do 'recordset' recuperado da base de dados.


Retirado da Wikipedia

nesse exato momento vou começar a fazer os testes funcionais...
estou testando a sergurança do sistema... entao pressiso de aprender muito e de forma rapida sobre Sql Injection PHP injection e XSS (Cross Site Scripting) entao agora os post a serguir serao sobre isso

terça-feira, 21 de dezembro de 2010

Lembrete

Resolução máxima de layout para que o mesmo não crie barras de rolagem verticais nem horizontais

800x600 - 781X444 pixels
1024x768 - 1005X612 pixels
1152x864 - 1261x868 pixels

A historia do virus

'Vírus'


Tornou-se comum o uso da palavra “vírus” para descrever um programa capaz de realizar qualquer atividade indesejável no computador. Originalmente, porém, os vírus têm uma definição menos abrangente: são softwares que se integram a outros “infectando-os”, com o objetivo de se espalharem de um sistema para outro.



É conhecido como “Brain” (1986) o primeiro programa do gênero para a plataforma PC, ou Intel x86, que usamos até hoje. O Brain, segundo os autores paquistaneses -- que deixaram seus nomes, endereços e telefones expostos dentro do vírus --, tinha o objetivo de impedir a pirataria do software médico que eles haviam criado. Mas o programa logo foi além e infectou máquinas de vários locais e sem relação com o aplicativo deles.

No ano seguinte, em 1987, vários outros vírus apareceram, juntamente com os primeiros softwares antivírus.

As pragas digitais que ainda se alojam dentro de outros programas são raras e não têm mais o objetivo de se espalhar por este meio, mas sim dificultar sua remoção.

saiba mais
Vírus atacam brecha crítica no Windows
Microsoft e OpenOffice lançam atualizações contra golpes
Raio-x da segurança: entenda a função dos softwares que blindam o PC
Saiba como escolher programas para proteger seu PC
Pacotão de segurança: quarentena, antivírus antigo e varredura no PC
Existem também os chamados de “vírus de pendrive”, que nada mais são do que uma evolução das pragas que infectavam disquetes, embora alguns os considerem worms (detalharei a ação dos worms na coluna da próxima segunda, 17). Esses podem ser evitados segurando-se SHIFT ao plugar o dispositivo USB, o que impedirá a execução automática de uma praga armazenada no pendrive, ou desativando por completo o AutoRun, como explicou aqui Fernando Panissi, da coluna Tira-dúvidas.

A denominação de “vírus clássicos” foi criada para evitar confusões com o genérico “vírus”. Pelo mesmo motivo, um novo termo foi criados para definir qualquer programa indesejado:“malware” (malicious software).

Trojan
Nomeados com base na história do presente de grego, os “cavalos de tróia” tentam se passar por algo que interessa aos usuários, fazendo-os executar o programa malicioso sem suspeitar que o mesmo não é nada do que parece. O jogo "Animal" (1975), que tentava adivinhar em qual animal o usuário estava pensando, é considerado o primeiro cavalo de tróia, pois, apesar de ser benigno, copiava-se para todas as pastas as quais o usuário tinha acesso.
Hoje, por outro lado, é chamada de “trojan” qualquer praga incapaz de se espalhar sozinha. Por esse motivo, sites maliciosos ou comprometidos -- páginas legítimas alteradas por criminosos -- que infectam o sistema por meio de brechas de segurança instalam “cavalos de tróia” na máquina. A “enganação” se dá de forma muito menos aparente: a visita ao site legítimo ou um resultado malicioso em um site de busca.

Backdoor
Os “backdoors” (“porta dos fundos”) são programas maliciosos que dão ao seu criador o controle total do computador infectado. Geralmente são disseminados em conjunto com ferramentas úteis para que o usuário não suspeite da praga e, por isso, são considerados uma subcategoria dos trojans.

Foto: Reprodução
Netbus foi um backdoor extremamente popular por ser de fácil utilização. Permitia o controle de um sistema infectado. (Foto: Reprodução )
Exemplos de backdoors são os clássicos NetBus e BackOrifice, ambos de 1998. O Bifrost (2004) e o SpyOne (2006) são pragas mais recentes e populares. Algumas delas, como as versões mais recentes do NetBus e o SpyOne, são comercializadas como soluções de “administração remota”.

Criminosos com bom conhecimento técnico utilizam backdoors feitos especificamente para as tarefas que necessitam; outros tiram proveito de softwares legítimos como VNC e Radmin.
A preocupação com os backdoors deu origem aos chamados antitrojans. Alguns deles nada mais eram que firewalls simplificados que, em vez de monitorar a conexão toda, preocupavam-se exclusivamente com a identificação dos tráfegos de trojan-backdoors. Hoje esses softwares estão obsoletos e são desnecessários, seja devido ao firewall -- que bloqueia os backdoors -- ou ao antivírus, que detecta tanto um como o outro.

Spyware
Existe uma confusão a respeito de pragas que roubam informações confidenciais do sistema, tais como senhas de banco. Há quem diga que são spywares (“espiões”), mas não é o caso. Spywares são softwares que coletam informações comercialmente úteis, tais como hábitos de navegação, endereços de e-mail e softwares instalados no sistema.
Pode ser considerado spyware ainda o software que é usado pelos pais para monitorar o filho, a empresa que monitora o empregado, etc. Se a informação roubada tem claros objetivos financeiros -- cartões de crédito, senhas de banco, códigos seriais de programas instalados -- o programa deixa de ser um spyware para ser um trojan.

Na coluna de hoje é só, mas na próxima segunda-feira (17), o assunto será continuado com informações a respeito dos worms, exploits, vírus de macro, adwares e antivírus falsos. Antes, na quarta-feira (12), serão respondidas as dúvidas deixadas nos comentários. E, na sexta (14), eu volto com as principais notícias de segurança da semana. Se você tem alguma dúvida ou sugestão, use o espaço de comentários abaixo.

* Altieres Rohr é especialista em segurança de computadores e, nesta coluna, vai responder dúvidas, explicar conceitos e dar dicas e esclarecimentos sobre antivírus, firewalls, crimes virtuais, proteção de dados e outros. Ele criou e edita o Linha Defensiva, site e fórum de segurança que oferece um serviço gratuito de remoção de pragas digitais, entre outras atividades. Na coluna “Segurança para o PC”, o especialista também vai tirar dúvidas deixadas pelos leitores na seção de comentários.

Leia mais colunas sobre segurança para o PC
Leia mais notícias de Tecnologia

Se você se acha "Nerd" por resolver o Cubo de Rubik, fique sabendo que Nerd de verdade pega um Lego Mindstorms e constrói um robô para resolver, como o Titled Twister ai em baixo:

quarta-feira, 15 de dezembro de 2010