AppSecBR2010 Utilizando API ESAPI Tarcizio

download AppSecBR2010 Utilizando API ESAPI Tarcizio

of 193

Transcript of AppSecBR2010 Utilizando API ESAPI Tarcizio

OWASP AppSecBrazil 2010, Campinas, SP

The OWASP Foundationhttp://www.owasp.org

Utilizando a API de segurana OWASP ESAPI (Enterprise Security API) para prover segurana em aplicaes WebTarcizio Vieira Neto SERPRO [email protected]

Objetivos do Curso Conhecer as principais vulnerabilidades de seguranacomumente encontradas em aplicaes Web.

Apresentar a arquitetura da biblioteca ESAPI e ofuncionamento de seus mdulos com exemplos em cdigo Java (JSP).

Apresentar o componente Web Application Firewall daESAPI.

2

Roteiro3.1. Mdulo de Validao e Codificao 3.2. Mdulo de Autenticao

1. Introduo

1.1. Mitos relacionados segurana em Aplicaes Web 1.2. Projeto OWASP

3.3. Mdulo de Controle de Acesso 3.4. Mdulo de utilitrios HTTP

2. OWASP Top 10

3.5. Mdulo de tratamento de referncia de acesso 3.6. Mdulo de Criptografia 3.7. Mdulo de Log

3. Biblioteca OWASP ESAPI

3.8. Mdulo de Deteco de Intruso 3.9. Integrando o mdulo AppSensor com a ESAPI

4. Vantagens do Uso da Biblioteca ESAPI

3.10. Utilizando Filtros 3.11. Configurando a ESAPI 3.12. Mdulo Web Application Firewall da ESAPI

5. Concluses3

Introduo Riscos de segurana em aplicaes Os atacantes podem usar diversos caminhos atravs da aplicao que potencialmente podem prejudicar o negcio ou a organizao. Cada um desses caminhos representa um risco que pode, ou no, ser prejudicial o suficientemente para justificar a sua ateno.

A risk is a path from threat agent to business impact. (OWASP)

Fonte: OWASP Top 10

4

IntroduoOs ataques podem causar uma srie de impactos, entre os quais podemos citar: Perdas Financeiras. Transaes Fraudulentas. Acesso no autorizado a dados, inclusive confidenciais. Roubo ou modificao de Dados. Roubo de Informaes de Clientes. Interrupo do Servio. Perda da confiana e lealdade dos clientes. Dano imagem da organizao.5

Introduo Sofisticao dos Ataques X Conhecimento Necessrio

Fonte: Carnegie Mellon University Software Engineering Institute

6

IntroduoConceitos Bsicos: Anlise esttica de segurana Consiste em verificar o cdigo fonte por meio de ferramentas especializadas, sem a necessidade de que a aplicao esteja em execuo. Ferramentas de anlise esttica so direcionadas a identificao de divergncias do cdigo quanto aos padres de melhores prticas de segurana. O prprio desenvolvedor deve realizar esta atividade durante a implementao, de forma a corrigir os desvios logo no incio do ciclo de vida.

7

IntroduoConceitos Bsicos: Ciclo tradicional de Reviso de Cdigo: Priorizar qual o cdigo fonte ser inspecionado. entrada e sada de dados; acesso ao banco de dados; Executar a ferramenta de anlise esttica. Realizar um reviso manual do cdigo com base no resultado da ferramenta. Corrigir o cdigo vulnervel.

8

IntroduoConceitos Bsicos: Evidncias: apontamentos ou batimentos que as ferramentasencontram em um cdigo-fonte, identificando possveis falhas ou vulnerabilidades.

Falso Positivo: ocorre quando a ferramenta aponta umavulnerabilidade que no pode ser explorada ou que foi tratada.

Falso negativo: ocorre quando a ferramenta no aponta umavulnerabilidade que na realidade existe e pode ser explorada.

Vulnerabilidade: fragilidade de um sistema que pode serexplorada por um exploit.

Explorao(exploit): uma ao maliciosa concretizada. Emum ataque, uma ameaa explora uma vulnerabilidade.9

IntroduoConceitos Bsicos: Blacklist: mtodo de validao que consiste em bloquear todasas entradas de dados consideradas explicitamente invlidas.

WhiteList: mtodo de validao que consiste em bloquear todasas entradas de dados, exceto as que seguirem o padro explicitamente definido como vlido.

Caixa branca: testes do cdigo fonte realizados no momento dacodificao para identificar problemas de segurana.

Caixa preta: testes da aplicao em execuo realizados em umambiente controlado, pois simula situaes reais de ataques.

10

Introduo

Mitos relacionados segurana em Aplicaes Web

1 - estamos seguros porque temos um firewall! muito comum criar um falso sentimento de segurana pelo fato da aplicao ter um firewall como entreposto. Apenas firewalls de aplicao (ou firewall de camada 7) poderiam fornecer um nvel de segurana mais adequado. Ainda que se tenha um firewall de aplicao, alguns detalhes s podem ser implementados na prpria aplicao.

Segundo o Gartner Group, 75% dos ataques acontecem na camada de aplicao.

Segundo o NIST, 92% das vulnerabilidades esto no software.National Institute of Standards and Technology11

Introduo

Mitos relacionados segurana em Aplicaes Web

2 - estamos seguros porque utilizamos SSLO SSL somente prov a confidencialidade e a integridade dos dados trafegados. De fato no soluciona os problemas relativos s demais vulnerabilidades no servidor e no browser.

12

Introduo

Mitos relacionados segurana em Aplicaes Web

2 - estamos seguros porque utilizamos SSL Deste modo, podemos ter aexecuo de um ataque seguro, ou seja, requisies maliciosas so enviadas para o servidor sobre o protocolo HTTPs:

13

Introduo

Projeto OWASP

Sobre a OWASP (Open Web Application Security Project), temos que: uma iniciativa aberta para tratar aspectos de segurana deaplicaes web

Congrega especialistas e voluntrios, que inclui corporaes,organizaes educacionais e pessoas de todo o mundo

A

comunidade trabalha para criar artigos, metodologias, documentao, ferramentas e tecnologias para a segurana das aplicaes web. ferramentas de segurana.14

Cria documentos de boas prticas e promove o desenvolvimento de

Introduo

Projeto OWASP

A OWASPNo afiliada a nenhuma empresa de tecnologia, pois, considera a liberdade quanto a presses organizacionais um meio de fornecer de forma imparcial informaes sobre segurana de aplicaes.

Fonte: www.owasp.org

15

Introduo

Projeto OWASP

Principais projetos da OWASP: AntiSamy Stinger ESAPI WebGoat WebScarab Development Guide Testing Guide CLASP ASVS

16

IntroduoFerramentas OWASP e base de conhecimento

17

OWASP Top 10A OWASP produz uma publicao chamada OWASP Top 10, onde lista as 10 principais vulnerabilidades que afetam os sistemas Web. Sobre a publicao: lanada a cada 3 anos. A verso mais recente foi lanada em abril de 2010. O Top 10 no trata somente como evitar as vulnerabilidades,mas tambm trata sobre gerenciamento de riscos.

Para gerenciar estes riscos, as organizaes precisam alm deaes de sensibilizao, testes de aplicao e correo, um programa de gesto de riscos de aplicaes.

As verses anteriores so de 2004 e 2007.Fonte: OWASP Top 10

18

OWASP Top 10A1: Injection / Falha de Injeo A2: Cross-Site Scripting (XSS)

Verso 2010

A3: Broken Authentication and Session Management / Falha na autenticao e no gerenciamento de sesso A4: Insecure Direct Object References / Referncia Insegura de Objetos A5: Cross-Site Request Forgery (CSRF) A6: Security Misconfiguration / Configurao de segurana deficiente A7: Insecure Cryptographic Storage / Armazenamento criptogrfico inseguro A8: Failure to Restrict URL Access / Falha ao restringir o acesso s URLs A9: Insufficient Transport Layer Protection / Proteo ineficaz da camada de transporte A10: Unvalidated Redirects and Forwards / Redirecionamentos insegurosFonte: OWASP Top 10

19

OWASP Top 10

Fonte: OWASP Top 10 Fonte: OWASP Top 10

20

OWASP Top 10

A1: Falhas de Injeo

Caractersticas: Ocorrem quando dados no confiveis so enviados para uminterpretador como parte de um comando ou consulta (query)

Os dados do ataque podem iludir o interpretador a executarcomandos indesejveis ou acessar dados de forma no autorizada.

Os ataques de SQL Injection, baseiam-se na tentativa de utilizar osparmetros de entrada da aplicao para inserir sequncias de caracteres com finalidades maliciosas.

Causados tambm por falta ou falha na validao de entrada dedados21

OWASP Top 10

A1: Falhas de Injeo

Podem ser do tipo: SQL Injection(mais comum)

XPATH Injection LDAP Injection, linguagens de script web Comand Injection (tem como alvo o sistema operacional do servidor) Injection into SOAP SMTP Command Injection Os princpios so os mesmos, o que muda a tecnologia.22

OWASP Top 10

A1: Falhas de Injeo

Como evitar: Os dados no confiveis devem estar separados dos comandos(interpretadores) e de consultas.

Realizar a validao de entrada de dados positiva ou por ListaBranca (whitelist), com uma adequada normalizao dos dados.

Realizar o tratamento dos parmetros provenientes dos usurios aorealizar a concatenao dos dados

23

OWASP Top 10

A1: Falhas de Injeo

Cenrio de ataque:A requisio pode ser enviada da seguinte forma: http://example.com/app/accountView?userID=0'+or+1=1--

String userID = request.getParameter("userID"); Statement statement = connection.createStatement( "SELECT * FROM accounts WHERE user_id = '"+ userID +"';"); ResultSet rs = statement.executeQuery();Resultado da concatenao: SELECT * FROM accounts WHERE user_id = '0' or 1=1--';

24

OWASP Top 10

A1: Falhas de Injeo

Cenrio de ataque:

String userID = request.getParameter("user"); String password = request.getParameter("password"); Statement statement = connection.createStatement( "SELECT * FROM accounts WHERE "+ "user_id = '"+ userID +"' AND "+ "password = '"+ password +"';"); ResultSet rs = statement.executeQuery();Resultado da concatenao: SELECT * FROM accounts WHERE user_id = 'admin' or 1=1--' AND password = 'anything';25

OWASP Top 10

A1: Falhas de Injeo

Outros exemplos de injees de cdigo maliciosas:'; DROP TABLE accounts;-SELECT * FROM accounts WHERE user_id = ''; DROP TABLE accounts;--';

'; INSERT INTO accounts (user_id, password) VALUES ('me','123456');-SELECT * FROM accounts WHERE user_id = ''; INSERT INTO accounts (user_id, password) VALUES ('me','123456');--';

26

OWASP Top 10

A1: Falhas de Injeo

Outros exemplos de injees de cdigo maliciosas:admin'-' or 0=0 -or 0=0 -' or 0=0 # " or 0=0 # or 0=0 # ' or 'x'='x " or "x"="x ') or ('x'='x ' or 1=1-" or 1=1-or 1=1-' or a=a-" or "a"="a ') or ('a'='a ") or ("a"="a hi" or "a"="a hi" or 1=1 -hi' or 1=1 -hi' or 'a'='a hi') or ('a'='a hi") or ("a"="a27

OWASP Top 10

A1: Falhas de Injeo

Como evitar: Uso de bind variables atravs de PreparedStatementString userID = request.getParameter("userID"); PreparedStatement prepStmt = con.prepareStatement("SELECT * FROM accounts WHERE user_id = ?"); prepStmt.setString(1, userID); ResultSet rs = prepStmt.executeQuery();

28

OWASP Top 10

A1: Falhas de Injeo

Como evitar: Uso de stored proceduresString username = request.getParameter("username"); String passwd= request.getParameter("password"); CallableStatement cs = con.prepareCall("{call sp_usuario(?,?)}"); cs.setString(1, username); cs.setString(2, passwd); ResultSet results = cs.executeQuery();

Invocando Stored Procedures

CREATE PROCEDURE sp_usuario Definindo Stored Procedures @USER varchar(16), @PASSWD varchar(16) As SELECT * FROM accounts WHERE user_id = @USER AND password = @PASSWD Go *Obs.: Consultas dinmicas com stored procedures podem ser vulnerveis29

OWASP Top 10

A1: Falhas de Injeo

Como evitar: Uso de parmetros identificados em consultas HQLQuery safeHQLQuery = session.createQuery( "from accounts where userID=:userID"); safeHQLQuery.setParameter("userID", request.getParameter("userID"));

30

OWASP Top 10

A1: Falhas de Injeo

Como evitar: Evitar que caracteres especiais sejam interpretados Realizar a codificao dos dados A seguir um exemplo de cdigo utilizando a biblioteca ESAPIString user = ESAPI.encoder().encodeForSQL( Codec.MySQLCodec, request.getParameter("user")); String pwd = ESAPI.encoder().encodeForSQL( Codec.MySQLCodec, request.getParameter("password")); String query = "SELECT * FROM accounts "+ "WHERE user_id = '" + user + "' and passwd = '" + pwd + "'";31

OWASP Top 10

A1: Falhas de Injeo

Como evitar:

Aplicar o Princpio do menor privilgio: Usurio usado para conectar no banco de dados deve possuir apenas os privilgios mnimos necessrios Validar entrada de dados pelo mtodo white list Sempre Validar tamanho, tipo, etc Validar usando lista ou expresso regular definindo o que permitido

32

OWASP Top 10

A1: Falhas de InjeoValidar entrada de dados pelo mtodo white list com ESAPIString nome = ESAPI.validator().getValidInput( "validacaoActionXPTO", //contexto da operao request.getParameter("nome"),//dados de entrada "validator.SafeString", //identificador da expresso regular 1024, //indica o nmero mximo de caracteres false //flag que informa se deve ou no aceitar valores nulos );Validator.SafeString=^[\p{L}\p{N}.]{0,1024}$ Validator.Email=^[A-Za-z0-9._%-]+@[A-Za-z0-9.-]+\\.[a-zA-Z]{2,4}$ Validator.IPAddress=^(?\:(?\:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?\:25[0-5]|2[0-4][0-9]|[01]?[0-9] [0-9]?)$ Validator.URL=^(ht|f)tp(s?)\\\:\\/\\/[0-9a-zA-Z]([-.\\w]*[0-9a-zA-Z])*(\:(0-9)*)*(\\/?)([a-zA-Z09\\-\\.\\?\\,\\\:\\'\\/\\\\\\+\=&%\\$\#_]*)?$ Validator.CreditCard=^(\\d{4}[- ]?){3}\\d{4}$ Validator.SSN=^(?\!000)([0-6]\\d{2}|7([0-6]\\d|7[012]))([ -]?)(?\!00)\\d\\d\\3(?\!0000)\\d{4}$33

Como evitar:

OWASP Top 10

A1: Falhas de Injeo (SO)

Como evitar: Aplicao usa dados enviados pelo usurio para gerar umcomando que passado ao sistema

Se no for feito corretamente o usurio poder injetarcomandos e execut-los com as mesmas permisses da aplicao $dominio = param(dominio');Aplicao realiza um DNS lookup para um domnio passado pelo usurio $nslookup = "/path/to/nslookup"; print header; if (open($fh, "$nslookup $dominio|")) { while () { print escapeHTML($_); print "
\n"; } close($fh); }

34

OWASP Top 10

A1: Falhas de Injeo

Como evitar (de modo geral):Valide sempre a entrada de dados Nunca procure por caracteres indesejveis (black list) Aceite somente os caracteres que forem vlidos para a entrada de dados Sempre faa a validao no lado do servidor Javascripts podem ser desabilitados no browser! Nunca confie na entrada de dados Valide a entrada de dados mesmo que a origem seja teoricamente confivel Trate os campos de entrada como string

35

OWASP Top 10

A2: Cross-Site Scripting (XSS)

Caractersticas: As falhas XSS ocorrem sempre que uma aplicao obtm dadosfornecidos pelo usurio (no confiveis) e os envia para um navegador web sem realizar o processo de validao ou codificao daquele contedo de modo conveniente.

O XSS permite aos atacantes executarem scripts no navegador davtima, que pode sequestrar sesses de usurio, modificar a aparncia de sites Web e redirecionar o usurio para sites maliciosos.

Fonte: Segurana Web: Tcnicas para Programao Segura de Aplicaes, AppSec Brasil, 2009

36

OWASP Top 10

A2: Cross-Site Scripting (XSS)

Tipos: Persistente No Persistente Baseado no DOM (Document Object Model)

37

OWASP Top 10

A2: Cross-Site Scripting (XSS) XSS Persistente

Cenrio de ataque: Dados enviados por usurios so armazenados e posteriormentemostrados para outro ou outros usurios sem que sejam codificados

Podem atingir grandes quantidades de usurios (blogs, forums) Dados armazenados (banco de dados, arquivo, etc) Sem validar entrada de dados Sem codificar sada de dados

38

XSS Persistente

Fonte: Segurana Web: Tcnicas para Programao Segura de Aplicaes, AppSec Brasil, 2009

39

OWASP Top 10

A2: Cross-Site Scripting (XSS) XSS No Persistente

Cenrio de ataque: Dado enviado por usurio ao servidor enviado de volta aousurio na resposta do servidor.

Caso haja cdigo em meio a esses dados, ele pode serexecutado no browser do cliente

40

XSS No Persistente

Fonte: Segurana Web: Tcnicas para Programao Segura de Aplicaes, AppSec Brasil, 2009

41

OWASP Top 10 A2: Cross-Site Scripting (XSS) XSS No Persistente Cenrio de ataque: A aplicao usa dados no confiveis na construo dos tags HTML sem realizar a codificao dos dados, conforme o exemplo a seguir:

Adicionando o token nos parmetros das requisies http://example.com/action?param=1&ctoken=8FD4B2String url = ESAPI.httpUtilities().addCSRFToken( "http://example.com/action?param1=1");69

OWASP Top 10

A5: Cross-Site Request Forgery (CSRF)

Como evitar: Requisitar Senha Os atacantes (teoricamente) no conhecem a senha Solicitar a senha em todas as requisies Atrapalha a usabilidade A aplicao deve requisitar apenas para operaes sensveis

70

OWASP Top 10

A6: Configurao de segurana deficiente

Caractersticas: A segurana depende tambm da existncia de configuraesseguras especficas definidas e usadas na aplicao, frameworks, servidor de aplicao, servidor de Web e plataforma.

Todas as configuraes devem ser definidas, implementadas emantidas por que muitas vezes elas no vem aplicadas diretamente do fornecedor com padres de segurana definidos.

Isto inclui tambm possuir todo o software atualizado, incluindotodas as bibliotecas de cdigo usadas pela aplicao.

Tem mais ligao com o ambiente de produo do que com o cdigoda aplicao.71

OWASP Top 10

A6: Configurao de segurana deficiente

Como evitar: Verificando os seguintes itens: Existe algum processo de atualizao das ltimas verses e patches de todo o software para o seu ambiente? Isto inclui o sistema operacional, servidor de aplicaes Web, SGBD e demais bibliotecas. Tudo aquilo que no necessrio est desabilitado, removido, ou no instalado (por ex: portas, servios, pginas, contas, etc)? As contas por padro esto desabilitadas ou foram alteradas? Todas as configuraes de segurana esto definidas corretamente? Todos os servidores esto protegidos por Firewalls/Filtros, etc?72

OWASP Top 10

A6: Configurao de segurana deficiente

Como evitar: Estabelecer: Um processo robusto e repetitivo que torne fcil e rpido o desenvolvimento de outro ambiente que esteja fechado/guardado. Os ambientes de desenvolvimento, garantia da qualidade e produo devero estar todos configurados da mesma maneira. Este processo dever ser automatizado para minimizar os esforos necesrios para implementar um novo ambiente seguro. Uma arquitetura robusta que fornea uma boa separao e segurana entre os componentes. Executar escaneamentos e realizar auditorias periodicamente para auxiliar na deteco de configurao deficiente.73

OWASP Top 10

A7: Armazenamento criptogrfico inseguro

Caractersticas: Muitas aplicaes Web no protegem devidamente dados sensveis,como nmeros dos cartes de crditos, dados pessoais e credenciais de autenticao com algoritmos de cifra ou de resumo (hash).

Os atacantes podem roubar ou modificar estes dados, protegidos deforma deficiente, para realizar roubos de identidade, fraude com cartes de crdito ou outros crimes.

74

OWASP Top 10

A7: Armazenamento criptogrfico inseguro

Como evitar: Para todos dados sensveis devemos assegurar que: Sejam criptografados nos locais onde so armazenados a longo prazo, especialmente nos backups de dados. Somente usurios autorizados podem acessar as cpias dos dados decriptografados. Um padro de algoritmo de criptografia forte (preferencialmente os recomendados pelo e-ping e ICP-Brasil) esteja sendo utilizado. Uma chave forte tenha sido gerada, protegida contra acesso no autorizado e que a troca das chaves seja planejada.75

OWASP Top 10

A7: Armazenamento criptogrfico inseguro

Como evitar: Utilizar o mdulo Encryptor da biblioteca ESAPI para realizar acriptografia de dados sensveis, utilizando parmetros de criptografia que envolvem algoritmos adequados e chaves fortes guardadas em um arquivo de configurao protegido:String secret = "Secret Message"; CipherText encrypted = ESAPI.encryptor() .encrypt( new PlainText( secret ) ); PlainText decrypted = ESAPI.encryptor().decrypt( encrypted );

76

OWASP Top 10

A8: Falha ao restringir o acesso s URLs

Observaes: Muitas aplicaes Web verificam os direitos de acesso a uma URLantes de exibirem links e botes protegidos.

As aplicaes devem realizar verificaes de controles de acessosemelhantes cada vez que estas pginas so acessadas. Caso contrrio, os atacantes podem forjar URLs e acessar estas pginas escondidas, sem qualquer controle.

77

OWASP Top 10

A8: Falha ao restringir o acesso s URLs

Como evitar: As polticas de autenticao e autorizao dever ser baseada empapis (RBAC - role based access control), para minimizar o esforo necessrio para manter estas polticas.

As polticas devem ser altamente configurveis, de modo aminimizar qualquer aspecto codificado da poltica.

O mecanismo de execuo deve por padro negar todos osacessos, necessitando de permisses explcitas para usurios e papis especficos para permitir o acesso a cada pgina.

Se a pgina est envolvida em um fluxo de trabalho, necessrioverificar se as condies esto em um estado apropriado para permitir o acesso aos recursos.78

OWASP Top 10

A8: Falha ao restringir o acesso s URLs

Cenrio de ataque: O atacante simplesmente modifica o apontamento da URL dedestino no browser URL gerada pela aplicao:http://example.com/app/getappInfo acesso legtimo

URL adulterada:http://example.com/app/admin_getappInfo acesso indevido

79

OWASP Top 10

A8: Falha ao restringir o acesso s URLs

Como evitar: Verificar se o usurio tem permisso de acessar a URL recomendvel que esta verificao seja implementada na forma de um filtro java para verificar o acesso a todas as pginas

ESAPI.accessController().isAuthorizedForURL(request.getRequestURI());

80

OWASP Top 10

A8: Falha ao restringir o acesso s URLs

Como evitar: Verificao implementada na forma de Filtro Javapublic void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException { if ( !ESAPI.accessController() .isAuthorizedForURL(request.getRequestURI()) ) { request.setAttribute("message", "Acesso no autorizado!" ); RequestDispatcher dispatcher = request.getRequestDispatcher("WEB-INF/index.jsp"); //redireciona para pgina principal dispatcher.forward(request, response); return; } chain.doFilter(request, response); }81

OWASP Top 10

A9: Proteo ineficaz da camada de transporte

Caractersticas: Ocorre quando as aplicaes falham na autenticao, cifra eproteo da confidencialidade informaes sensveis na rede. e integridade do trfego de

Quando o fazem, muitas vezes fazem com o uso de recursos ealgoritmos fracos, muitas vezes usam certificados invlidos ou expirados, ou no os utilizam corretamente.

82

OWASP Top 10

A9: Proteo ineficaz da camada de transporte

Como evitar: Exigir conexo SSL em todas as pginas sensveis. As requisiesque no fazem uso de SSL para estas pginas devem ser redirecionadas para a respectiva pgina SSL.

Defina o flag "secure" em todos os cookies sensveis. Configure o seu provedor de SSL para usar apenas algoritmos decriptografia robustos

Certifique que o certificado vlido, no expirado, no revogado ecorresponde a todos os domnios usados pelo site.

As conexes de backend e demais conexes devem utilizar astecnologias de criptografia SSL ou outras similares.83

OWASP Top 10

A9: Proteo ineficaz da camada de transporte

Como evitar: Boa parte do problema est na camada de comunicao SSL A ESAPI pode ser usada para ajudar a: Garantir que a comunicao seja realizada por meio de canal seguro (SSL) Definir os flags dos cookies como 'secure' Fornecer mtodos que facilitam a criptografia/decriptografia dos dados.

84

OWASP Top 10

A9: Proteo ineficaz da camada de transporte

Como evitar: Garantindo a comunicao via canal SSL garantir que o request use SSL e a passagem de parmetros seja via POSTtry{

ESAPI.httpUtilities().assertSecureRequest(request);} catch ( AccessControlException ace) { }

garantir apenas o uso do SSLtry{

ESAPI.httpUtilities().assertSecureChannel(request);} catch ( AccessControlException ace) { } 85

OWASP Top 10

A9: Proteo ineficaz da camada de transporte

Como evitar: Definindo os flags dos cookies como 'secure', encapsulando a requisio com o uso do wrapper SecurityWrapperRequest:

HttpServletRequest safeReq = new SecurityWrapperRequest( request );

HttpServletResponse safeResp = new SecurityWrapperResponse( response );

86

OWASP Top 10

A9: Proteo ineficaz da camada de transporte

Como evitar: Utilizar mtodos que facilitam a criptografia/decriptografia dos dados ESAPI.encryptor().encrypt(PlainText message) ESAPI.encryptor().decrypt(CypherText message) ESAPI.httpUtilities().encryptQueryString(String query) ESAPI.httpUtilities().decryptQuery(String encrypted) ESAPI.httpUtilities().encryptHiddenField(String value) ESAPI.httpUtilities().dencryptHiddenField(String encrypted)87

OWASP Top 10

A9: Proteo ineficaz da camada de transporte

Como evitar: Criptografando a query stringString url = "http://example.com/tela.jsp?encQuery="; String queryString = "field1=value1&field2=value2&field3=value3"; String urlEnc = url+ESAPI.httpUtilities().encryptQueryString(queryString);

Decriptografando a query stringString encQueryParam = request.getParameter("encQuery"); java.util.Map mapQueryString = ESAPI.httpUtilities().decryptQueryString(encQueryParam);88

OWASP Top 10

A10: Redirecionamentos inseguros

Caractersticas: Ocorre quando as aplicaes Web redirecionam e encaminhamusurios para outras pginas e stios de Web e usam para isto dados no confiveis para determinar as pginas de destino.

Sem uma validao adequada, os atacantes podem redirecionar asvtimas para stios de phishing ou malware, ou ento usar o mecanismo de encaminhamento para acessar pginas no autorizadas.

89

OWASP Top 10

A10: Redirecionamentos inseguros

Como evitar: No utilizar parmetros dos usurios para o clculo da URL dedestino, ou ento utilizar referncias indiretas para as URLs.

Assegurar que o valor fornecido vlido e autorizado para o usurio. Utilizar a ESAPI para realizar o processo de redirecionamento demaneira segura:ESAPI.httpUtilities().sendRedirect (response, request.getParameter("fwd"));

ESAPI.httpUtilities().sendForward (request, response, request.getParameter("fwd"));90

Biblioteca OWASP ESAPIO que a ESAPI? uma API de segurana corporativa. Desenvolvido pela OWASP Licena BSD Linguagens: Java (Java EE) .NET ASP classico PHP ColdFusion Python Haskell Javascript

91

Biblioteca OWASP ESAPIO que a ESAPI? apenas uma coleo de blocos de segurana pr-moldados, de cdigo aberto projetados para ajudar a equipar as aplicaes existentes com a segurana. ESAPI Framework Integration Project Sero compartilhadas as melhores prticas para a integrao. Existe uma grande espectativa das equipes de frameworks como o Struts adotarem a ESAPI

92

Biblioteca OWASP ESAPIO que uma API de segurana corporativa? uma API de alto nvel que fornece funes comuns de segurana na forma de um servio para a aplicao que faz uso da biblioteca. configurada de modo centralizado para manter a configurao separada da implementao. Permite que os desenvolvedores no necessitem desviar o foco da ateno para escrever controles de segurana prprios para os componentes, promovendo assim o reuso. Atende a um ambiente de desenvolvimento de cdigo seguro e convenes de codificao. Fornece uma API comum (em relao s interfaces), mas que tambm permite a customizao ou extenso para se adaptar a ambientes especficos.Fonte: Chris Schmidt, Solving Real World Problems with ESAPI, FROC 2010

93

Biblioteca OWASP ESAPI

Fonte: Chris Schmidt, Solving Real World Problems with ESAPI, FROC 2010

94

Biblioteca OWASP ESAPI

Fonte: Chris Schmidt, Solving Real World Problems with ESAPI, FROC 2010

95

Biblioteca OWASP ESAPI

Fonte: Chris Schmidt, Solving Real World Problems with ESAPI, FROC 2010

96

Biblioteca OWASP ESAPIESAPI x SLDCO ciclo de desenvolvimento de sistemas (Systems Development Life Cycle SDLC), ou ciclo de desenvolvimento de software em engenharia de sistemas e engenharia de software, o processo de criao ou modificao de sistemas, com o uso de modelos e metodologias que so utilizados para desenvolver sistemas.

Fonte: Chris Schmidt, Solving Real World Problems with ESAPI, FROC 2010

97

Biblioteca OWASP ESAPIESAPI x SLDCEm qual das fases a ESAPI se encaixa?

Resposta: Em todas as fases!Fonte: Chris Schmidt, Solving Real World Problems with ESAPI, FROC 2010

98

Biblioteca OWASP ESAPIPremissas Bsicas: Segurana no um evento nico: Deve ser aplicado e aprimorado constantemente. Processo de desenvolvimento: Uma iniciativa de codificao segura deve abordar todos os estgios do ciclo de vida de um software. Tratar o problema na raiz Onde o esforo e o custo de correo so menores.

99

Biblioteca OWASP ESAPIBenefcios de identificar as falhas de segurana logo no incio do ciclo de vida do desenvolvimento, onde o custo e o esforo de correo so baixos

100

Biblioteca OWASP ESAPICiclo de vida de requisio segura

Fonte: Chris Schmidt, Solving Real World Problems with ESAPI, FROC 2010

101

Biblioteca OWASP ESAPIProblemtica atual:

Fonte: Jeff Williams, Establishing an Enterprise Security API to Reduce Application Security Costs, Aspect Security

102

Biblioteca OWASP ESAPIAs vulnerabilidades originam-se de: Controles inexistentes Inexistncia de mecanismo de criptografia; Falha em realizar o controle de acesso

Controles Ineficientes Algortimo de gerao de hash fraco, ex: MD5 Mecanismo de tratamento de entrada/sada de dados desatualizado

Controles Ignorados Falha no uso da criptografia Trechos de cdigo onde faltam as rotinas de codificao dos dados de sadaFonte: Jeff Williams, Establishing an Enterprise Security API to Reduce Application Security Costs, Aspect Security

103

Biblioteca OWASP ESAPIOs controles de segurana que um desenvolvedor precisa devem ser: Padronizados Centralizados Organizados Integrados Intuitivos Testados Devem possuir alta qualidadeResolve os problemas de controles inexistentes e ineficientesFonte: Jeff Williams, Establishing an Enterprise Security API to Reduce Application Security Costs, Aspect Security

104

Biblioteca OWASP ESAPIE o problema dos controles ignorados ? As seguintes aes no solucionam, mas ajudam: Guias de codificao Anlise esttica Treinamento de desenvolvedores Testes unitrios

Fonte: Jeff Williams, Establishing an Enterprise Security API to Reduce Application Security Costs, Aspect Security

105

Arquitetura

Fonte: Jeff Williams, Establishing an Enterprise Security API to Reduce Application Security Costs, Aspect Security

106

Tratando Configurao de Segurana da Aplicao

Fonte: Jeff Williams, Establishing an Enterprise Security API to Reduce Application Security Costs, Aspect Security

107

Configurando ESAPIProteo dos arquivos (nvel de SO): de configurao

Uma proteo no nvel do sistema operacional deve serempregada para proteger o diretrio de recursos .esapi, incluindo todos os arquivos dentro do diretrio e todos os caminhos que vo at o diretrio raiz do sistema de arquivos.

Caso estiver usando implementaes baseadas emarquivos (ex: FileBasedAuthenticator), alguns arquivos necessitam ter permisses de leitura e escrita (read-write) devido o fato de serem atualizados dinamicamente.

108

Configurando ESAPI A ESAPI foi projetada para ser facilmente extensvel. As implementaes de referncia podem ser usadas,mas, caso necessrio, podem ser substitudas por implementaes prprias que se integram infraestrutura de segurana j existente.

Isto permite que implementaes de segurana sejamfacilmente substitudas no futuro sem a necessidade de reescrever toda a aplicao.

109

Configurando ESAPI possvel definir o classname para o provedor que se deseja utilizarpara a aplicao cliente no arquivo ESAPI.properties.

O nico requisito que implemente a interface ESAPI apropriada. O trecho do arquivo de configurao a seguir, mostra as refernciasdefinidas por padro na biblioteca:(...) ESAPI.AccessControl=org.owasp.esapi.reference.DefaultAccessController ESAPI.Authenticator=org.owasp.esapi.reference.FileBasedAuthenticator ESAPI.Encoder=org.owasp.esapi.reference.DefaultEncoder ESAPI.Encryptor=org.owasp.esapi.reference.JavaEncryptor ESAPI.CipherText=org.owasp.esapi.reference.DefaultCipherText ESAPI.PreferredJCEProvider=SunJCE ESAPI.Executor=org.owasp.esapi.reference.DefaultExecutor ESAPI.HTTPUtilities=org.owasp.esapi.reference.DefaultHTTPUtilities ESAPI.IntrusionDetector=org.owasp.esapi.reference.DefaultIntrusionDetector ESAPI.Logger=org.owasp.esapi.reference.Log4JLogFactory ESAPI.Randomizer=org.owasp.esapi.reference.DefaultRandomizer ESAPI.Validator=org.owasp.esapi.reference.DefaultValidator (...)

110

Configurando ESAPI(...) ESAPI.AccessControl=org.owasp.esapi.reference.DefaultAccessController ESAPI.Authenticator=org.owasp.esapi.reference.FileBasedAuthenticator ESAPI.Encoder=org.owasp.esapi.reference.DefaultEncoder ESAPI.Encryptor=org.owasp.esapi.reference.JavaEncryptor ESAPI.CipherText=org.owasp.esapi.reference.DefaultCipherText ESAPI.PreferredJCEProvider=SunJCE ESAPI.Executor=org.owasp.esapi.reference.DefaultExecutor ESAPI.HTTPUtilities=org.owasp.esapi.reference.DefaultHTTPUtilities ESAPI.IntrusionDetector=org.owasp.esapi.reference.DefaultIntrusionDetector ESAPI.Logger=org.owasp.esapi.reference.Log4JLogFactory ESAPI.Randomizer=org.owasp.esapi.reference.DefaultRandomizer ESAPI.Validator=org.owasp.esapi.reference.DefaultValidator (...)

ESAPI.properties Configurao Original

ESAPI.properties Configurao Modificada

(...) ESAPI.AccessControl=org.owasp.esapi.reference.DefaultAccessController ESAPI.Authenticator=com.myapp.security.authenticator.MyAuthenticator ESAPI.Encoder=org.owasp.esapi.reference.DefaultEncoder ESAPI.Encryptor=org.owasp.esapi.reference.JavaEncryptor ESAPI.CipherText=org.owasp.esapi.reference.DefaultCipherText ESAPI.PreferredJCEProvider=SunJCE ESAPI.Executor=org.owasp.esapi.reference.DefaultExecutor ESAPI.HTTPUtilities=org.owasp.esapi.reference.DefaultHTTPUtilities ESAPI.IntrusionDetector=org.owasp.esapi.reference.DefaultIntrusionDetector ESAPI.Logger=com.myapp.security.log.MyLogger ESAPI.Randomizer=org.owasp.esapi.reference.DefaultRandomizer ESAPI.Validator=org.owasp.esapi.reference.DefaultValidator (...)111

Configurando ESAPI Implementaes que dependem de outros arquivos:Requer arquivo ESAPI-AccessControlPolicy.xml e URLAccessRules.txt no diretrio .esapi (...) ESAPI.AccessControl=org.owasp.esapi.reference.DefaultAccessController ESAPI.Authenticator=org.owasp.esapi.reference.FileBasedAuthenticator ESAPI.Encoder=org.owasp.esapi.reference.DefaultEncoder Requer arquivo users.txt no diretrio .esapi ESAPI.Encryptor=org.owasp.esapi.reference.JavaEncryptor ESAPI.CipherText=org.owasp.esapi.reference.DefaultCipherText ESAPI.PreferredJCEProvider=SunJCE ESAPI.Executor=org.owasp.esapi.reference.DefaultExecutor ESAPI.HTTPUtilities=org.owasp.esapi.reference.DefaultHTTPUtilities ESAPI.IntrusionDetector=org.owasp.esapi.reference.DefaultIntrusionDetector Requer arquivo log4j.xml ou log4j.properties ESAPI.Logger=org.owasp.esapi.reference.Log4JLogFactory no ESAPI.Randomizer=org.owasp.esapi.reference.DefaultRandomizer classpath ESAPI.Validator=org.owasp.esapi.reference.DefaultValidator (...).esapi/ESAPI-AccessControlPolicy.xml

.esapi/URLAccessRules.txt .esapi/users.txt112

Validao, Codificao e Injeo

Fonte: Jeff Williams, Establishing an Enterprise Security API to Reduce Application Security Costs, Aspect Security

113

Tratando Validao e Codificao

Fonte: Jeff Williams, Establishing an Enterprise Security API to Reduce Application Security Costs, Aspect Security

114

Codificao e Decodificao de Dados no Confiveis

Fonte: OWASP ESAPI Javadoc

115

Configurando Encoder A ESAPI realiza a canocalizao dos dados de entrada antesde realizar a validao dos dados para prevenir tentativas de burlar os filtros com ataques codificados.

A canonicalizao ocorre automaticamente quando se utiliza oValidator da ESAPI, mas tambm possvel invocar o mtodo de canocalizao diretamente, conforme o trecho de cdigo a seguir:

String result = ESAPI.encoder().canonicalize( request.getParameter("input") );

116

Configurando EncoderConfigurao Padro Permitir codificao mltipla Permitir codificao mista Lista de CODECs padro

(...) #=========================================================================== # ESAPI Encoder # Encoder.AllowMultipleEncoding=false Encoder.AllowMixedEncoding=false Encoder.DefaultCodecList=HTMLEntityCodec,PercentCodec,JavaScriptCodec #=========================================================================== (...) 117

Configurando EncoderMultiple Encoding Codificao Mltipla Codificao multipla ocorre quando um formato decodificao aplicado diversas vezes.

Permitir a codificao mltipla uma prtica totalmentedesaconselhvel.

Encoder.AllowMultipleEncoding=false

118

Configurando EncoderMixed Encoding Codificao Mista A codificao mista ocorre quando diferentes formatos decodificao so aplicados, ou quando mltiplos formatos so aninhados.

Habilitar a codificao mista uma prtica totalmentedesaconselhvel.

Encoder.AllowMixedEncoding=false

119

Configurando Encoder"hello world" String result = ESAPI.encoder().canonicalize( "%22hello world%22" ); "hello world" String result = ESAPI.encoder().canonicalize( ""hello world"" );12009/11/2010 10:24:40 org.owasp.esapi.reference.JavaLogFactory$JavaLogger log SEVERE: [Anonymous:null@unknown -> /IntrusionException] INTRUSION - Mixed encoding (2x) detected in %22hello world" Exception in thread "main" org.owasp.esapi.errors.IntrusionException: Input validation failure at org.owasp.esapi.reference.DefaultEncoder.canonicalize(DefaultEncoder.java:161) at org.owasp.esapi.reference.DefaultEncoder.canonicalize(DefaultEncoder.java:105) at Teste.main(Teste.java:114)

String result = ESAPI.encoder().canonicalize( "%22hello world"" );120

Configurando EncoderCodeList Lista de Codificadores A lista de codificao padro contm os codecs a seremaplicados quando estiver realizando a canocalizao de dados no confiveis

A lista deve incluir os codecs para todos os interpretadores oudecodificadores.

Encoder.DefaultCodecList=HTMLEntityCodec,PercentCodec,JavaScriptCodec

121

Configurando ValidatorPossui as configuraes de validao dos dados nos seguintes arquivos: ESAPI.properties Contm expresses regulares usadas pelos mdulos da ESAPI

validation.properties Contm expresses regulares criadas pelo prprios usurios

122

Configurando ValidatorESAPI.properties(...) #=========================================================================== # ESAPI Encoder # Validator.ConfigurationFile=validation.properties # Validators used by ESAPI Validator.AccountName=^[a-zA-Z0-9]{3,20}$ Validator.SystemCommand=^[a-zA-Z\\-\\/]{1,64}$ Validator.RoleName=^[a-z]{1,20}$ #the word TEST below should be changed to your application #name - only relative URL's are supported Validator.Redirect=^\\/test.*$ (...)

123

Configurando ValidatorESAPI.properties(...) # Global HTTP Validation Rules # Values with Base64 encoded data (e.g. encrypted state) will need at least [a-zA-Z0-9\/+=] Validator.HTTPScheme=^(http|https)$ Validator.HTTPServerName=^[a-zA-Z0-9_.\\-]*$ Validator.HTTPParameterName=^[a-zA-Z0-9_]{1,32}$ Validator.HTTPParameterValue=^[a-zA-Z0-9.\\-\\/+=@_ ]*$ Validator.HTTPCookieName=^[a-zA-Z0-9\\-_]{1,32}$ Validator.HTTPCookieValue=^[a-zA-Z0-9\\-\\/+=_ ]*$ Validator.HTTPHeaderName=^[a-zA-Z0-9\\-_]{1,32}$ Validator.HTTPHeaderValue=^[a-zA-Z0-9()\\-=\\*\\.\\?;,+\\/:&_ ]*$ Validator.HTTPContextPath=^[a-zA-Z0-9.\\-\\/_]*$ Validator.HTTPServletPath=^[a-zA-Z0-9.\\-\\/_]*$ Validator.HTTPPath=^[a-zA-Z0-9.\\-_]*$ Validator.HTTPQueryString=^[a-zA-Z0-9()\\-=\\*\\.\\?;,+\\/:&_ %]*$ Validator.HTTPURI=^[a-zA-Z0-9()\\-=\\*\\.\\?;,+\\/:&_ ]*$ Validator.HTTPURL=^.*$ Validator.HTTPJSESSIONID=^[A-Z0-9]{10,30}$ # Validation of file related input Validator.FileName=^[a-zA-Z0-9!@#$%^&{}\\[\\]()_+\\-=,.~'` ]{1,255}$ Validator.DirectoryName=^[a-zA-Z0-9:/\\\\!@#$%^&{}\\[\\]()_+\\-=,.~'` ]{1,255}$ (...) 124

Configurando Validatorvalidation.propertiesValidator.SafeString=^[.\\p{Alnum}\\p{Space}]{0,1024}$ Validator.Email=^[A-Za-z0-9._%'-]+@[A-Za-z0-9.-]+\\.[a-zA-Z]{2,4}$ Validator.IPAddress=^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$ Validator.URL=^(ht|f)tp(s?)\\:\\/\\/[0-9a-zA-Z]([-.\\w]*[0-9a-zA-Z])*(:(0-9)*)*(\\/?)([a-zA-Z0-9\\-\\.\\?\\,\\:\\'\\/\\\\\\ +=&%\\$#_]*)?$ Validator.CreditCard=^(\\d{4}[- ]?){3}\\d{4}$ Validator.SSN=^(?!000)([0-6]\\d{2}|7([0-6]\\d|7[012]))([ -]?)(?!00)\\d\\d\\3(?!0000)\\d{4}$

Chamada referenciando expresso regular de validao:String input = request.getParameter("email"); int maxLength = 512; Boolean allowNull = false; try { someObject.setEmail( ESAPI.validator() .getValidInput("User Email", input, "Email", maxLength, allowNull)); }125

Tratando Autenticao e Usurios

Fonte: Jeff Williams, Establishing an Enterprise Security API to Reduce Application Security Costs, Aspect Security

126

Configurando Authenticator(...) #=========================================================================== Tentativas de login permitidas # ESAPI Authenticator # Nmero de senhas que no podem se repetir Authenticator.AllowedLoginAttempts=3 para determinado usurio Authenticator.MaxOldPasswordHashes=13 Authenticator.UsernameParameterName=username Authenticator.PasswordParameterName=password # RememberTokenDuration (in days) Nome dos campos de login/senha Authenticator.RememberTokenDuration=14 do formulrio de login # Session Timeouts (in minutes) Authenticator.IdleTimeoutDuration=20 Authenticator.AbsoluteTimeoutDuration=120

Tempo de durao do token em dias #=========================================================================== para implementar a funcionalidade Parmetros de Timeout (...) Rember me

127

Tratando Controle de Acesso

Fonte: Jeff Williams, Establishing an Enterprise Security API to Reduce Application Security Costs, Aspect Security

128

Configurando AccessControlO mdulo AccessControl depende dos seguintes arquivos e configurao: ESAPI-AccessControlPolicy.xml (polticas de controle de acesso) URLAccessRules.txt (regras de restrio de acesso s URLs)

URLAccessRules.txt# Regras de Acesso a URL # /app/getappInfo | any | allow | /app/admin_getappInfo | admin | allow |

129

Tratando Referncias Direta a Objetos

Fonte: Jeff Williams, Establishing an Enterprise Security API to Reduce Application Security Costs, Aspect Security

130

Tratando segurana no HTTP

Fonte: Jeff Williams, Establishing an Enterprise Security API to Reduce Application Security Costs, Aspect Security

131

Configurando HttpUtilities O HttpUtilities prov proteo bsica para as requisies erespostas HTTP.

Os mtodos prioritariamente protegem contra dados maliciososprovenientes dos atacantes, comumente presentes em caracteres no imprimveis, caracteres de escaping, e outros ataques mais simples.

O HttpUtilities tambm prove mtodos teis para tratar cookies,cabealhos e tokens CSRF.

132

Configurando HttpUtilities(...) #=========================================================================== # ESAPI HttpUtilties # Default file upload location (remember to escape backslashes with \\) HttpUtilities.UploadDir=C:\\ESAPI\\testUpload HttpUtilities.UploadTempDir=C:\\temp # Force flags on cookies, if you use HttpUtilities to set cookies HttpUtilities.ForceHttpOnlySession=false HttpUtilities.ForceSecureSession=false HttpUtilities.ForceHttpOnlyCookies=true HttpUtilities.ForceSecureCookies=true # Maximum size of HTTP headers HttpUtilities.MaxHeaderSize=4096 # File upload configuration HttpUtilities.ApprovedUploadExtensions=.zip,.pdf,.doc,.docx,.ppt,.pptx,.tar,.gz,.tgz,.rar,.war,.jar,.ear,.xls,.rtf,.proper ties,.java,.class,.txt,.xml,.jsp,.jsf,.exe,.dll HttpUtilities.MaxUploadFileBytes=500000000 HttpUtilities.ResponseContentType=text/html; charset=UTF-8 # This is the name of the cookie used to represent the HTTP session # Typically this will be the default "JSESSIONID" HttpUtilities.HttpSessionIdName=JSESSIONID #=========================================================================== (...) 133

Tratando Informaes Sensveis

Fonte: Jeff Williams, Establishing an Enterprise Security API to Reduce Application Security Costs, Aspect Security

134

Tratando Informaes Sensveis

Fonte: OWASP ESAPI Javadoc

135

Configurando Encryptor(...) #=========================================================================== # ESAPI Encryption # To calculate these values, you can run: # java -classpath esapi.jar org.owasp.esapi.reference.crypto.JavaEncryptor #Encryptor.MasterKey= #Encryptor.MasterSalt= Encryptor.PreferredJCEProvider= # Warning: This property does not control the default reference implementation for # ESAPI 2.0 using JavaEncryptor. Also, this property will be dropped # in the future. # @deprecated Encryptor.EncryptionAlgorithm=AES # For ESAPI Java 2.0 - New encrypt / decrypt methods use this. Encryptor.CipherTransformation=AES/CBC/PKCS5Padding Encryptor.cipher_modes.combined_modes=GCM,CCM,IAPM,EAX,OCB,CWC Encryptor.cipher_modes.additional_allowed=CBC Encryptor.EncryptionKeyLength=128 (...) 136

Configurando EncryptorGerao do MasterKey e MasterSalt

Comando:java -classpath esapi.jar org.owasp.esapi.reference.crypto.JavaEncryptor

O resultado gerado ser semelhantes a:Copy and paste these lines into ESAPI.properties #============================================================== Encryptor.MasterKey=a6H9is3hEVGKB4Jut+lOVA== Encryptor.MasterSalt=SbftnvmEWD5ZHHP+pX3fqugNysc= #==============================================================

Obs.: Este processo apenas facilita a obteno dos valores137

Configurando Encryptor(...) #=========================================================================== # ESAPI Encryption # To calculate these values, you can run: # java -classpath esapi.jar org.owasp.esapi.reference.crypto.JavaEncryptor Encryptor.MasterKey=a6H9is3hEVGKB4Jut+lOVA== Encryptor.MasterSalt=FVD0iUJZR0ZhnPXn+UcFnpcUB84= Encryptor.PreferredJCEProvider=SunJCE

Utilizar valores obtidos para definir os valores de MasterKey e MasterSalt

# Warning: This property does not control the default reference implementation for # ESAPI 2.0 using JavaEncryptor. Also, this property will be droppedpadro Se no for definido o valor # in the future. ser SunJCE # @deprecated # Encryptor.EncryptionAlgorithm=AES # For ESAPI Java 2.0 - New encrypt / decrypt methods use this. Encryptor.CipherTransformation=AES/CBC/PKCS5Padding Encryptor.cipher_modes.combined_modes=GCM,CCM,IAPM,EAX,OCB,CWC Encryptor.cipher_modes.additional_allowed=CBC

(...) 138

Configurando Encryptor(...) Encryptor.ChooseIVMethod=random Encryptor.fixedIV=0x000102030405060708090a0b0c0d0e0f Encryptor.EncryptionKeyLength=128 Encryptor.CipherText.useMAC=true Encryptor.PlainText.overwrite=true # Do not use DES except in a legacy situations. 56-bit is way too small key size. #Encryptor.EncryptionKeyLength=56 #Encryptor.EncryptionAlgorithm=DES # TripleDES is considered strong enough for most purposes. # Note: There is also a 112-bit version of DESede. Using the 168-bit version # requires downloading the special jurisdiction policy from Sun. #Encryptor.EncryptionKeyLength=168 #Encryptor.EncryptionAlgorithm=DESede Encryptor.HashAlgorithm=SHA-512 Encryptor.HashIterations=1024 Encryptor.DigitalSignatureAlgorithm=SHA1withDSA Encryptor.DigitalSignatureKeyLength=1024 Encryptor.RandomAlgorithm=SHA1PRNG Encryptor.CharacterEncoding=UTF-8 (...)

Se for utilizar SunJCE sem nenhum Complemento, ento deve substituir SHA1withDSA para DSA

139

Configurando Encryptor(...) Encryptor.ChooseIVMethod=random Encryptor.fixedIV=0x000102030405060708090a0b0c0d0e0f Encryptor.EncryptionKeyLength=128 Encryptor.CipherText.useMAC=true Encryptor.PlainText.overwrite=true # Do not use DES except in a legacy situations. 56-bit is way too small key size. #Encryptor.EncryptionKeyLength=56 #Encryptor.EncryptionAlgorithm=DES # TripleDES is considered strong enough for most purposes. # Note: There is also a 112-bit version of DESede. Using the 168-bit version # requires downloading the special jurisdiction policy from Sun. #Encryptor.EncryptionKeyLength=168 #Encryptor.EncryptionAlgorithm=DESede Encryptor.HashAlgorithm=SHA-512 Encryptor.HashIterations=1024 #Encryptor.DigitalSignatureAlgorithm=SHA1withDSA Encryptor.DigitalSignatureAlgorithm=DSA Encryptor.DigitalSignatureKeyLength=1024 Encryptor.RandomAlgorithm=SHA1PRNG Encryptor.CharacterEncoding=UTF-8 (...)

Se for utilizar SunJCE Substituir SHA1withDSA para DSA

140

Tratando Excees, Logs e Deteco de Intrusos

Fonte: Jeff Williams, Establishing an Enterprise Security API to Reduce Application Security Costs, Aspect Security

141

Tratando Excees, Logs e Deteco de Intrusos

Fonte: OWASP ESAPI Javadoc

142

Mdulo Logger Os nveis de registo definido por essa interface (em ordemdecrescente) so: Fatal (Crtico) Error (Erro) Warning (Aviso) Info (Informativo) Debug (Depurao) Trace (Rastreamento)

143

Mdulo Logger Habilitando os nveis de registo://DESABILITADO todos os nveis ESAPI.log().setLevel( Logger.OFF ); //Habilitando nvel FATAL ESAPI.log().setLevel( Logger.FATAL ); //Habilitando nvel ERROR ESAPI.log().setLevel( Logger.ERROR ); //Habilitando nvel WARNING ESAPI.log().setLevel( Logger.WARNING ); //Habilitando nvel INFO ESAPI.log().setLevel( Logger.INFO ); //Habilitando nvel DEBUG ESAPI.log().setLevel( Logger.DEBUG ); //Habilitando nvel TRACE ESAPI.log().setLevel( Logger.TRACE ); //Habilitando nvel ALL ESAPI.log().setLevel( Logger.ALL );

144

Mdulo Logger Existem 4 tipos de eventos de Log: SECURITY_SUCCESS SECURITY_FAILURE EVENT_SUCCESS EVENT_FAILURE EVENT_UNSPECIFEDLogger.debug( Logger.EventType type, String message) Logger.error( Logger.EventType type, String message) Logger.fatal( Logger.EventType type, String message) Logger.info( Logger.EventType type, String message) Logger.trace( Logger.EventType type, String message) Logger.warning( Logger.EventType type, String message)145

Mdulo Logger Exemplos:ESAPI.log().debug( Logger.SECURITY_SUCCESS, Teste1 executando ActionX); ESAPI.log().error( Logger.SECURITY_FAILURE, Erro conexo SSL); ESAPI.log().fatal( Logger.EVENT_FAILURE, Falha de conexo com o banco); ESAPI.log().info( Logger.EVENT_SUCCESS, Usuario + user + realizou cadastro!); ESAPI.log().trace( Logger.EVENT_UNSPECIFED, Entrou no loop); ESAPI.log().warning( Logger.EVENT_UNSPECIFED, Espao em disco no limite!);

Fonte: OWASP ESAPI Javadoc

146

Configurando Logger(...) #=========================================================================== # ESAPI Logging # Set the application name if these logs are combined with other applications Logger.ApplicationName=ExampleApplication # If you use an HTML log viewer that does not properly HTML escape log data, you can set LogEncodingRequired to true Logger.LogEncodingRequired=false # Determines whether ESAPI should log the application name. This might be clutter in some single-server/single-app environments. Logger.LogApplicationName=true # Determines whether ESAPI should log the server IP and port. This might be clutter in some single-server environments. Logger.LogServerIP=true # LogFileName, the name of the logging file. Provide a full directory path (e.g., C:\\ESAPI\\ESAPI_logging_file) if you # want to place it in a specific directory. Logger.LogFileName=ESAPI_logging_file # MaxLogFileSize, the max size (in bytes) of a single log file before it cuts over to a new one (default is 10,000,000) Logger.MaxLogFileSize=10000000 #=========================================================================== (...)

147

Mdulo Intrusion Detector Monitora as requisies e toma aes pr-configuradas paradeterminadas aes

As aes so baseadas na ocorrncias de determinadas excees,como: IntrusionException AuthenticationHostException

148

Configurando Intrusion Detector Cada evento possui um parmetro .count, .interval, e .action que soconfigurados no arquivo ESAPI.properties.

As aes so tomadas conforme um limiar de quantidade de eventosdefinida em "count" que ocorrem no intervalo de tempo definida em "interval" (em segundos)

Todas as excees do tipo EnterpriseSecurityExceptions podem sermonitoradas

O IntrusionDetector configurvel para realizar automaticamente asseguintes aes: log apenas fazer log da requisio feita pelo usuario logout fazer logoff da conta do usuario que gerou a exceo disable bloquear a conta do usuario que gerou a exceo149

Configurando Intrusion Detector permitido definir mltiplas aes separadas por vrgulas ex:event.test.actions=log,disable

permitido criar eventos e monitor-los, para isto basta que o nomes doseventos criados pelos usurios possuam o prefixo "IntrusionDetector.event.", da seguinte forma:(...) # # Use IntrusionDetector.addEvent( "test" ) in your code to trigger "event.test" here IntrusionDetector.event.test.count=2 IntrusionDetector.event.test.interval=10 IntrusionDetector.event.test.actions=disable,log (...)

Para disparar o evento, basta realizar a chamada, associando o nome doevento definido:ESAPI.intrusionDetector().addEvent( "test" );150

Configurando o Intrusion Detector(...) #=========================================================================== # ESAPI Intrusion Detection # IntrusionDetector.Disable=false # # Use IntrusionDetector.addEvent( "test" ) in your code to trigger "event.test" here IntrusionDetector.event.test.count=2 IntrusionDetector.event.test.interval=10 IntrusionDetector.event.test.actions=disable,log # Exception Events # any intrusion is an attack IntrusionDetector.org.owasp.esapi.errors.IntrusionException.count=1 IntrusionDetector.org.owasp.esapi.errors.IntrusionException.interval=1 IntrusionDetector.org.owasp.esapi.errors.IntrusionException.actions=log,disable,logout # sessions jumping between hosts indicates session hijacking IntrusionDetector.org.owasp.esapi.errors.AuthenticationHostException.count=2 IntrusionDetector.org.owasp.esapi.errors.AuthenticationHostException.interval=10 IntrusionDetector.org.owasp.esapi.errors.AuthenticationHostException.actions=log,logout (...)

151

OWASP AppSensor Projeto complementar da OWASP que possui uma implementaoque substitui a implementao padro de referncia do IntrusionDetector da biblioteca ESAPI

Assim como o IntrusionDetector, o seu papel monitorar asrequisies e realizar aes pr-configuradas.

Fonte: Michael Coates, AppSensor: Real Time Defenses, OWASP Foundation

152

OWASP AppSensorContm um conjunto complementar de verificaes previstas que no existiam, como: Tentativas de modificar parmetros POST para acessar objetos diretamente Tentativa de Cross Site Scripting Comando HTTP Inesperados Tentativa de invocar mtodo HTTP no suportado

153

OWASP AppSensorPontos de deteco: RequestException AuthenticationException SessionException AccessControlException InputException EncodingException CommandInjectionException FileIOException Honey Trap UserTrendException SystemTrendException Reputation

154

OWASP AppSensorContm um conjunto complementar de aes de resposta que no existem no DefaultIntrusionDetector, como: disableComponent bloqueia o acesso ao componente a todos os usurios que foi invocado para realizar a intruso usando o AppSensorServiceController disableComponentForUser bloqueia o acesso ao componente que foi invocado para realizar a tentativa de intruso apenas para o usurio logado (se existir) usando o AppSensorServiceController emailAdmin envia um Email para o administrador notificando qual ao maliciosa ocorreu smsAdmin envia um SMS para o administrador (via email para a conta sms) notificando qual ao maliciosa ocorreu

155

Incorporando AppSensor(...) ESAPI.AccessControl=org.owasp.esapi.reference.DefaultAccessController ESAPI.Authenticator=org.owasp.esapi.reference.FileBasedAuthenticator ESAPI.Encoder=org.owasp.esapi.reference.DefaultEncoder ESAPI.Encryptor=org.owasp.esapi.reference.JavaEncryptor ESAPI.CipherText=org.owasp.esapi.reference.DefaultCipherText ESAPI.PreferredJCEProvider=SunJCE ESAPI.Executor=org.owasp.esapi.reference.DefaultExecutor ESAPI.HTTPUtilities=org.owasp.esapi.reference.DefaultHTTPUtilities ESAPI.IntrusionDetector=org.owasp.esapi.reference.DefaultIntrusionDetector ESAPI.Logger=org.owasp.esapi.reference.Log4JLogFactory ESAPI.Randomizer=org.owasp.esapi.reference.DefaultRandomizer ESAPI.Validator=org.owasp.esapi.reference.DefaultValidator (...)

ESAPI.properties Configurao Original

ESAPI.properties Configurao Modificada

(...) ESAPI.AccessControl=org.owasp.esapi.reference.DefaultAccessController ESAPI.Authenticator=org.owasp.esapi.reference.FileBasedAuthenticator ESAPI.Encoder=org.owasp.esapi.reference.DefaultEncoder ESAPI.Encryptor=org.owasp.esapi.reference.JavaEncryptor ESAPI.CipherText=org.owasp.esapi.reference.DefaultCipherText ESAPI.PreferredJCEProvider=SunJCE ESAPI.Executor=org.owasp.esapi.reference.DefaultExecutor ESAPI.HTTPUtilities=org.owasp.esapi.reference.DefaultHTTPUtilities ESAPI.IntrusionDetector=org.owasp.esapi.reference.DefaultIntrusionDetector ESAPI.IntrusionDetector=org.owasp.appsensor.intrusiondetection.AppSensorIntrusionDetector ESAPI.Logger=org.owasp.esapi.reference.Log4JLogFactory ESAPI.Randomizer=org.owasp.esapi.reference.DefaultRandomizer ESAPI.Validator=org.owasp.esapi.reference.DefaultValidator (...)

156

Incorporando AppSensor Arquivo de configurao (ESAPI.properties) exige mais parmetrospara configurar as novas aes.(...) #=========================================================================== #AppSensor IntrusionDetector.Total.count=10 IntrusionDetector.Total.interval=20 IntrusionDetector.Total.actions=log,logout,disable #no way to get this custom value via esapi IntrusionDetector.Total.custom=20 #http://www.owasp.org/index.php/AppSensor_DetectionPoints#ACE2:_Modifying_Parameters_Within_A_POST_For_Direct_Object _Access_Attempts IntrusionDetector.ACE2.count=3 IntrusionDetector.ACE2.interval=3 IntrusionDetector.ACE2.actions=log,logout,disable,disableComponent # some integer - duration of time to disable IntrusionDetector.ACE2.disableComponent.duration=30 # some measure of time, currently supported are s,m,h,d (second, minute, hour, day) IntrusionDetector.ACE2.disableComponent.timeScale=m # some integer - duration of time to disable IntrusionDetector.ACE2.disableComponentForUser.duration=30 # some measure of time, currently supported are s,m,h,d (second, minute, hour, day) IntrusionDetector.ACE2.disableComponentForUser.timeScale=m (...)

157

Filtros ESAPI A ESAPI emprega filtros para realizar uma srie de controles desegurana e aes teis, incluindo autenticao e proteo contra ataques CSRF.

Filtros: ESAPIFilter Filtro da ESAPI que realiza algumas verificaes bsicas WebApplicationFirewallFilter Implementa a funcionalidade de firewall de aplicao ESAPIRequestRateThrottleFilter Restringe a quantidade de requisies por usurio

158

Filtros ESAPI Outros filtros: GZIPFilter Verifica se o browser suporta compresso com Gzip e usa a compresso dos dados de retorno com gzip LoginFilter Intercepta requisies de login para implementar a funcionalidade "Remember Me" ClickjackFilter Filtra quais pginas no podem receber frames internos, podendo ser configurado no web.xml com as seguintes opes: DENY Nenhum frame interno permitido para as pginas filtradas, mesmo que sejam da prpria aplicao SAMEORIGIN permitido frames internos nas pginas filtradas que referenciam apenas as pginas internas da prpria aplicao

159

Filtros ESAPI Configurando ClickJackFilter: Modo DENY ClickjackFilterDeny org.owasp.filters.ClickjackFilter mode DENY

Modo SAMEORIGIN ClickjackFilterSameOrigin org.owasp.filters.ClickjackFilter mode SAMEORIGIN 160

ESAPI Filter Serve como implementao de referncia Realiza verificao de controle de token CSRF na URLESAPI.httpUtilities().checkCSRFToken();

Realiza verificao de autenticao do UsurioESAPI.authenticator().login(request, response);

Define flags para no fazer cache dos cabealhosESAPI.httpUtilities().setNoCacheHeaders( response );

161

ESAPI Filter Realiza log (o array obfuscate contm uma lista de parametros queno devem ser registrado em log password)ESAPI.httpUtilities().logHTTPRequest(request, logger, Arrays.asList(obfuscate));

Realiza o controle de acesso s URLsESAPI.accessController().isAuthorizedForURL(request.getRequestURI())

Faz a ligao com o request/responseESAPI.httpUtilities().setCurrentHTTP(request, response);

162

ESAPI WAF - Web Application Firewall Configurado por arquivo de configurao policy.xml, onde possveldefinir: Virtual patches Mecanismo que garante a autenticao Mecanismo que garante o controle de acesso Mecanismo que realiza a filtragem/deteco de sada de dados Mecanismo que fora o uso de HTTPS entre outros...

163

ESAPI WAF - Web Application Firewall

Fonte: ESAPI documentation

164

ESAPI WAF - Web Application Firewall Esqueleto do arquivo policy.xml, onde possvel definir: Aliases Settings

165

ESAPI WAF - Web Application Firewall Definindo aliases

^/admin/.*

166

ESAPI WAF - Web Application Firewall Definindo aes: redirect redireciona para pgina de erro block pra o processamento e retorna uma pgina em branco log realiza o log da operao block JSESSIONID /error.jsp 500 167

ESAPI WAF - Web Application Firewall Algumas tags teis: Criando virtual patches So teis para criar protees urgentes que previnem contra ameaas recm descobertas e que a mudana em cdigo demorada ou est impossibilitada

168

ESAPI WAF - Web Application Firewall Algumas tags teis: Restringindo os IPs que acessam determinado path

/admin/.*

169

ESAPI WAF - Web Application Firewall Algumas tags teis: Exigindo determinado valor em variveis de sesso/requisio (cabealho HTTP) equals exists inList contains

170

ESAPI WAF - Web Application Firewall Algumas tags teis: e Restringindo acesso a determinada extenso de arquivo Restringindo ou autorizando mtodos GET/POST/HEAD

171

ESAPI WAF - Web Application Firewall Algumas tags teis: Fora o uso do HTTPs e permite definir pginas de exceo, onde o uso do HTTPs no obrigatrio URLs que so exceo regra e no deve exigir HTTPs para elas /index.html /images/.* /help/.*

172

ESAPI WAF - Web Application Firewall Algumas tags teis: Restringindo o client (user-agent) No exemplo abaixo o bot do Google que realiza a busca e indexao dentro dos sites est sendo bloqueado

173

ESAPI WAF - Web Application Firewall Algumas tags teis: Adicionando flag secure-flag nos cookies

174

ESAPI WAF - Web Application Firewall Algumas tags teis: Executando scripts beanshell

before-request-body after-request-body before-response

175

ESAPI WAF - Web Application Firewall Algumas tags teis: Executando scripts em beanshell que podem executar operaes pr-definidasimport org.owasp.esapi.waf.actions.*;

session.setAttribute("simple_waf_test", "true"); action = new RedirectAction(); DefaultAction DoNothingAction RedirectAction

176

ESAPI Request Rate Throttle um filtro que limita a taxa de requisies para um certo limite derequisies por segundo

A taxa padro 5 hits a cada 10 segundos A taxa pode ser redefinida ao adicionar parmetros no arquivoweb.xml com o nome "hits" e "period" com os valores desejados

177

ESAPI Request Rate Throttle Configurao com a definio dos parmetros hits e period no arquivoweb.xml RequestRateThrottleFilter org.owasp.esapi.filters.RequestRateThrottleFilter hits 10 period 15 RequestRateThrottleFilter /* 178

Vantagens do Uso da Biblioteca ESAPI

ESAPI x OWASP Top Ten

179

Vantagens do Uso da Biblioteca ESAPI

Potenciais reduo de custos da empresa Programa de Segurana de Aplicaes envolve: Treinamento em Segurana de Aplicaes Ciclo de vida de desenvolvimento seguro Guias e padres de segurana em aplicaes Inventrio e Mtricas de segurana em aplicaes

Hipteses 1000 aplicaes, muitas tecnologias, algumas terceirizadas 300 desenvolvedores, 10 aulas de treinamento por ano 50 novos projetos de aplicaes por ano Equipe de segurana de aplicaes pequenaFonte: Jeff Williams, Establishing an Enterprise Security API to Reduce Application Security Costs

180

Vantagens do Uso da Biblioteca ESAPI

Estimativa de custos para tratar XSS

Fonte: Jeff Williams, Establishing an Enterprise Security API to Reduce Application Security Costs

181

Vantagens do Uso da Biblioteca ESAPI

Potencial de reduo de custos da organizao com a ESAPI

Fonte: Jeff Williams, Establishing an Enterprise Security API to Reduce Application Security Costs

182

Vantagens do Uso da Biblioteca ESAPI

Potencial de reduo de custos da organizao com a ESAPI

Fonte: Jeff Williams, Establishing an Enterprise Security API to Reduce Application Security Costs

183

Overview de APIs Java banidasSystem.out.println() Logger.* Throwable.printStackTrace() Logger.* Runtime.exec() Executor.safeExec() Reader.readLine() Validator.safeReadLine() Session.getId() Randomizer.getRandomString() (better not to use at all) ServletRequest.getUserPrincipal() Authenticator.getCurrentUser() ServletRequest.isUserInRole() AccessController.isAuthorized*() Session.invalidate() Authenticator.logout() Math.Random.* Randomizer.* File.createTempFile() Randomizer.getRandomFilename() ServletResponse.setContentType() HTTPUtilities.setContentType() ServletResponse.sendRedirect() HTTPUtilities.sendSafeRedirect()Fonte: Jeff Williams, Establishing an Enterprise Security API to Reduce Application Security Costs

184

Overview de APIs Java banidasRequestDispatcher.forward() HTTPUtilities.sendSafeForward() ServletResponse.addHeader() HTTPUtilities.addSafeHeader() ServletResponse.addCookie() HTTPUtilities.addSafeCookie() ServletRequest.isSecure() HTTPUtilties.isSecureChannel() Properties.* EncryptedProperties.* ServletContext.log() Logger.* java.security and javax.crypto Encryptor.* java.net.URLEncoder/Decoder Encoder.encodeForURL/decodeForURL java.sql.Statement.execute PreparedStatement.execute ServletResponse.encodeURL HTTPUtilities.safeEncodeURL (better not to use at all) ServletResponse.encodeRedirectURL HTTPUtilities.safeEncodeRedirectURL (better not to use at all)Fonte: Jeff Williams, Establishing an Enterprise Security API to Reduce Application Security Costs

185

Summary & Conclusion

ConclusesConsideraes Finais: A ESAPI auxilia no reuso e integrao dos controles desegurana para desenvolver aplicaes seguras, porm existe a necessidade de criar processos que vo alm do cdigo fonte da aplicao, envolvendo: Anlise de riscos de segurana de aplicaes Web Processo de codificao segura

187

ConclusesConsideraes Finais: A razo pela qual criamos princpios de segurana nodesenvolvimento ajudar os desenvolvedores a construrem aplicaes seguras e no apenas para evitar as vulnerabilidades mais comuns atualmente.

Este provrbio resume esta ideia:Ensinar o desenvolvedor a se prevenir contra uma determinada vulnerabilidade far com que ele se previna dela. Ensin-lo a desenvolver de forma segura far com que ele se previna de muitas vulnerabilidades.

188

RefernciasDOM Based Cross Site Scripting or XSS of the Third Kind http://www.webappsec.org/projects/articles/071105.shtml http://www.owasp.org/index.php/Category:OWASP_Enterprise_Security_API http://en.wikipedia.org/wiki/Canonicalization http://www.securityninja.co.uk/output-validation-using-the-owasp-esapi http://www.securityninja.co.uk/input-validation-using-the-owasp-esapi http://code.google.com/p/owasp-esapi-java/

189

Refernciashttp://www.cgisecurity.com http://www.webappsec.org http://buildsecurityin.us-cert.gov http://www.cert.org http://www.sans.org http://www.securityfocus.com

190

RefernciasBlogs: http://ha.ckers.org/blog (RSnake) http://shiflett.org (Chris Shiflett) http://jeremiahgrossman.blogspot.com http://www.gnucitizen.org (PDP) http://sylvanvonstuppe.blogspot.com http://www.memestreams.net/users/Acidus (Billy Hoffman) http://taosecurity.blogspot.com (Richard Bejtlich) http://www.dhanjani.com (Nitesh Dhanjani)

191

RefernciasVitor Afonso, Andr Grgio, Paulo Licio de Geus, Segurana Web: Tcnicas para Programao Segura de Aplicaes, AppSec Brasil, 2009.

Chris Schmidt, Solving Real World Problems with ESAPI, FROC 2010

Fonte: Jeff Williams, Establishing an Enterprise Security API to Reduce Application Security Costs, Aspect Security

OWASP Esapi for Java EE 2.0a, Web Application Firewall Policy File Specification, alpha, OWASP Foundation.

192

RefernciasMichael Coates, OWASP AppSensor, V1.1, Detect and Respond to Attacks from within the Application, OWASP Foundation. Michael Coates, AppSensor: Real Time Defenses, OWASP Foundation http://www.owasp.org/index.php/OWASP_AppSensor_Project http://www.owasp.org/index.php/AppSensor_GettingStarted http://www.owasp.org/index.php/AppSensor_Developer_Guide http://www.beanshell.org/docs.html

193