Escolar Documentos
Profissional Documentos
Cultura Documentos
Jungwoo Ryoo, Membro, IEEE, Bryan Malone, Phillip A. Laplante, Fellow, IEEE e Priya Anand
Resumo
Apesar das melhores intenções dos arquitetos de software, geralmente ocorre que os
desenvolvedores individuais não implementam fielmente as decisões de design de segurança
originais. Tal cenário às vezes leva a uma situação em que enquanto um arquiteto reivindica o uso
de uma arquitetura segura na forma de alguma tática, o código-fonte correspondente não apóia a
afirmação. Para preencher essa lacuna, a primeira etapa crítica é verificar se o código-fonte reflete
pelo menos alguns dos recursos estruturais ou comportamentais necessários para uma tática.
Neste estudo, examinamos a extensão dessa discrepância entre a visão de um arquiteto de quais
táticas de segurança precisam ser adotadas no software e a implementação real. Alcançamos esse
objetivo de pesquisa 1) explorando a intenção de um arquiteto de usar táticas de segurança, 2)
verificando se a tática se manifesta no projeto e, finalmente, 3) recuperando a evidência dos
esforços para implementar o projeto no código-fonte. Para evitar limitações de acesso à
documentação e código-fonte, usamos projetos de código aberto para conduzir nossa pesquisa.
I. INTRODUÇÃO
A segurança de software está se tornando mais importante à medida que o número e a
diversidade de ameaças contra vulnerabilidades de software aumentam. Uma forma de garantir a
segurança do software é adotar contramedidas de segurança desde o início, durante o processo de
desenvolvimento de software. As táticas de segurança estão disponíveis há muito tempo para os
profissionais desde que foram introduzidas. No entanto, muitos profissionais desconhecem as
táticas de segurança e confiam na intuição e no aprendizado informal de colegas para tentar
resolver as preocupações associadas ao aspecto de segurança de seu software.
Portanto, suspeitamos que esta aplicação informal e ad-hoc de princípios e soluções de
segurança para design de software é mais prevalente do que as abordagens sistemáticas baseadas
na adoção de táticas. Como uma etapa inicial para testar nossa hipótese, revisamos a
documentação externa e o código-fonte de 53 projetos de software de código aberto (OSS) que
afirmam utilizar contramedidas de segurança. Não exigimos a menção explícita de táticas de
segurança na documentação externa desses projetos de software de fonte aberta ao selecioná-los
para nossos assuntos de estudo, principalmente por causa de nossa suposição de que os
profissionais estão usando as táticas de segurança implicitamente e alguns dos usos informais e
coincidentes de táticas de segurança será semelhante às práticas mais formais refletidas em uma
hierarquia de táticas de segurança estabelecida.
Acreditamos que nossa pesquisa seja significativa porque estabelece uma linha de base em
termos de compreensão do uso prático das táticas de segurança. Compreender o grau de adoção
de táticas de segurança em termos de consistência, exatidão e integridade estabelece uma base
para responder, em última análise, à questão de pesquisa mais profunda sobre se as táticas de
segurança são realmente eficazes no tratamento de vulnerabilidades de segurança e ameaças que
se aproveitam delas. Portanto, os objetivos de pesquisa imediatos deste trabalho são primeiro
quantificar a extensão do uso de táticas de segurança em projetos de software de fonte aberta e,
em seguida, medir a lacuna entre a reclamação e o uso real no código-fonte.
Para cumprir esses objetivos de pesquisa, desenvolvemos uma metodologia para extrair
artefatos relacionados à segurança do código-fonte, identificamos táticas de segurança entre os
vários artefatos relacionados à segurança extraídos do código-fonte, desenvolvemos um método
para decidir a extensão do uso formal e informal das táticas de segurança na prática e, finalmente,
decidiu-se se as táticas de segurança foram propagadas no código-fonte.
4. METODOLOGIA
Este estudo é puramente baseado em observações. Portanto, não há hipótese a provar ou
desaprovar. Em vez disso, desenvolvemos uma métrica para primeiro decidir sobre um melhor
indicador de implementações de contramedidas de segurança no código-fonte (Seção V-A e Seção
V-B). A segunda métrica é usada para medir a extensão do uso de táticas de segurança em projetos
de OSS (Seção V-C).
TABELA I
AMOSTRA DE TERMOS DE BUSCA
V. RESULTADOS
Esta seção descreve todas as principais descobertas de nosso estudo. Primeiro
apresentamos nossos resultados de análise de "ameaças à validade" com relação ao nosso método
de pesquisa de nome de arquivo usado para localizar artefatos de segurança, como arquivos
relevantes para a segurança, classes e seus relacionamentos.
Ei = (Is / Ik)
onde Ei representa a eficácia de um indicador, e Is e Ik representa o número de correspondências
Com base nesse resultado, podemos concluir que a maioria dos projetos de OSS (81,8%)
analisados neste estudo têm classes implementando contramedidas de segurança conforme
afirmam em sua documentação externa. No entanto, a questão restante é quantas dessas classes
implementam táticas de segurança e outras formas de conceitos de design de segurança, como
padrões de segurança. Outra questão de pesquisa importante é como essas táticas e padrões de
segurança são usados nos projetos de software de fonte aberta. Por exemplo, a distribuição da
adoção de táticas e padrões de segurança conhecidos pode fornecer alguns insights úteis. Neste
artigo, focalizamos a investigação da primeira questão de pesquisa.
TABELA III
DISTRIBUIÇÃO DE CLASSE DE SEGURANÇA POR CATEGORIA TÁTICA
Figura 5. Porcentagem do total de classes por classificação.
1) Autenticar: a autenticação garante que o usuário seja quem afirma ser. Do ponto de vista das
táticas de segurança, a autenticação parece ser um padrão para muitos dos aplicativos para
usuários que realizam identificação digital ao interagir com a rede e os recursos do sistema. Os
certificados, que são semelhantes à autenticação, usam criptografia assimétrica para identificar e
verificar se o remetente da mensagem (e não o destinatário) é quem afirma ser e, a esse respeito,
são como um passaporte. Os tokens também podem representar uma forma de entrada certificada
ou código de identificação exclusivo usado para confirmar que uma sessão, pacote ou mensagem é
factual. Os certificados são assinados digitalmente e visam fornecer não-repúdio. Um exemplo é
encontrado no uso de uma Autoridade de Certificação (CA) que emite um certificado digital que
contém uma chave pública. A medida de classes significa que há uso substancial de táticas de
segurança para identificação de usuários, certificados e tokens, pois reflete 13,7% do total de
classes na amostra populacional (Tabela III). Esta categoria está ligada especificamente à busca por
atores de autenticação, identificando funções, grupos e privilégios em táticas de resistência a
ataques.
2) Autorizar: a autorização concede aos usuários acesso aos recursos e recursos do sistema. Da
Tabela III, há 0,7% das classes controlando os direitos de acesso dos usuários. Este é um número
aparentemente pequeno, dada a natureza da tarefa. Esta categoria está ligada especificamente à
busca por atores autorizados, identificando seus papéis, grupos e privilégios na categoria de
táticas de resistência a ataques. A categoria auth foi usada para classes que desafiam uma divisão
clara entre autenticação e autorização. No entanto, o uso de auth representa 1,7% do total de
classes da amostra populacional. Embora o uso combinado das táticas de autenticação e
autorização pareça ter interações relacionadas, há uma diferença substancial na implementação
dessas táticas de segurança. Não há vínculo direto com uma categoria tática a não ser em função
das táticas de resistência.
TABELA IV
EXEMPLO DE RESULTADOS DE PESQUISA DE CLASSE DE PALAVRAS-CHAVE DE SEGURANÇA
4) Conexão: as conexões são uma garantia entre dois dispositivos ou nós na rede. As conexões ou
soquetes e proxies se enquadram na categoria de garantia de transmissão de dados livre de erros.
Para verificar a conexão entre dois nós, os certificados emitidos pela VeriSign, Symantec, GoDaddy
e outros continuam aumentando como um meio de garantir que a conexão não seja apenas
confiável, mas também validada, especialmente em termos de integridade da mensagem. Uso de
conexões foi a quarta classe mais numerosa no estudo, contendo 12,0% do total de classes da
amostra populacional. Esta categoria está especificamente ligada à busca pela tática de
“criptografar dados” na categoria de táticas de resistência a ataques. Além disso, essa categoria de
classe exige a adição de uma nova categoria de tática, que é “verificar integridade”, que é um
recurso de segurança crucial ainda não documentado nas hierarquias de táticas existentes.
5) Padrões de criptografia: os padrões de criptografia buscam fornecer uma base para definir o uso
dos padrões necessários para garantir que a criptografia funcione por meio de criptografia de
dados consistente. Na Tabela III, “padrões” referem-se às funções hash criptográficas usadas para
verificar a integridade dos dados. Os padrões em criptografia produziram 0,5% do total de classes
na amostra populacional. Esta categoria está ligada especificamente à busca pela tática de “dados
criptografados” em táticas de resistência a ataques.
10) Solicitação de comentários (RFC): Este conjunto de classes pertence a todos os métodos,
comportamentos, inovações e pesquisas que se aplicam à Internet e aos sistemas de rede,
incluindo contramedidas de segurança. RFCs são gerenciados pela Internet Engineering Task Force
(IETF). A pesquisa sobre RFCs demonstra uma ênfase limitada de design na população da amostra.
Por exemplo, as definições de classe específicas para RFC 6101 abordam características de rede no
uso de padrões Secure Socket Layer (SSL). As RFCs representaram 0,4% do total de classes. Embora
constituam uma porcentagem consideravelmente baixa do total de classes, os RFCs são usados
para todos os aspectos das implementações de segurança em sistemas baseados na Internet ou
em rede. Esta categoria tem vários vínculos com as classificações de táticas de segurança, e a
implementação de classe de uma RFC que encontramos estava ligada às táticas de “identificar”,
“autenticar”, “autorizar” e “criptografar”.
11) Sandbox: Sandbox é uma medida de segurança criada no desenvolvimento Java, que contém um
conjunto de regras usadas para evitar que os applets executem muitas atividades indesejáveis
diferentes, como acessar certos recursos designados. Um miniaplicativo Java é incorporado à
página da web, e a segurança Java depende do verificador de código de byte, carregador de classes
e gerenciador de segurança para restringir o acesso ao sistema de arquivos, acesso à rede e acesso
aos recursos internos do navegador. Três aplicativos usam o conceito Sandbox: Java Sandbox,
Chromium e JOSSO. As sandboxes representaram 0,5% do total de classes da amostra
populacional. Esta categoria está ligada especificamente à busca da “tática de acesso limitado” na
categoria de táticas de resistência a ataques.
13) Single Sign-On: Outra revelação significativa refletindo medidas relativamente baixas de
segurança e uma fraqueza conhecida é encontrada no uso de Single Sign-On (SSO). Pesquisas
adicionais neste domínio podem render uma contribuição significativa. Os SSOs perguntam a um
autenticador se existe algum SSO para uma determinada solicitação. No caso de autenticação
bem-sucedida, as credenciais são retornadas. O Single Sign-On representou 0,2% do total de
classes na amostra populacional. Esta categoria depende especificamente da busca pela tática de
“autenticar atores” na categoria de táticas de resistência a ataques.
15) Monitoramento de rede: esta classificação dentro de nossa taxonomia é o conjunto de classes
que são responsáveis pelo registro e monitoramento. Por exemplo, o esquema de monitoramento
de rede poderia ser o Protocolo Simples de Gerenciamento de Rede (SNMP), que realiza avaliações
de rede e determina quais atividades estão ocorrendo enquanto fornece soluções baseadas em
serviços para usuários finais. O SNMP também é conhecido por adicionar sobrecarga desnecessária
à rede, mas é necessário para solucionar problemas de rede situacionais. Esses problemas podem
consistir em dispositivos de rede com defeito, etc. Em geral, SNMP não foi utilizado em um nível
que sugerisse significância e é usado normalmente como a primeira palavra-chave como um
determinante para a direção de classificação para a qual as classes serão colocadas. Apenas dois
aplicativos usaram a categoria de monitoramento de rede: JOSSO e MingW. O monitoramento da
rede representou 0,1% do total de classes da amostra populacional. Esta categoria tem ligações
diretas com as táticas de “manutenção da trilha de auditoria”.
Embora não sejam completas, muitas das descobertas na categoria de pesquisa de nome
de classe (Tabela III) podem ser associadas à tática de “criptografar dados” para a categoria de
táticas de resistência a ataques. Quatro das dezesseis classificações refletiram o uso de dados
criptografados resistindo a ataques, correspondendo a 25,0% do total de resultados da
classificação. Essa revelação aponta para uma forte ênfase no uso de dados criptografados para a
categoria de táticas de “resistir a ataques”. Além disso, na análise dos termos de busca definidos,
25 de 60 continham soluções de criptografia junto com outros dois endereçando padrões
criptográficos, perfazendo assim 41,67% dos termos de busca. A criptografia não é uma solução
abrangente para o problema de segurança e esse foco na criptografia indica uma grande lacuna na
adoção atual de táticas de segurança no software de fonte aberta.
TABELA VI
IMPLEMENTAÇÃO DE PALAVRAS-CHAVE E TÁTICAS DE SEGURANÇA
Este estudo de caso demonstra claramente como identificamos a extensão do uso de
táticas de segurança em um projeto de código aberto. Embora alguns nomes de classes impliquem
o uso de táticas de segurança neles, apenas quatro das sete classes realmente implementam as
táticas. Esta proporção das classes de segurança para o total de classes para o projeto SPNEGO é
refletida na Fig. 4. Este estudo de caso também ajuda a reforçar nossa crença de que as táticas de
segurança não são completamente implementadas como sugeridas em seus nomes de classe ou
como pretendido durante a fase de design .
VII. CONCLUSÃO
Neste artigo, investigamos o grau de adoção de táticas de segurança nos projetos de
software de fonte aberta. Conduzimos nossa investigação nos níveis de design e implementação.
Os resultados são mistos. Embora a maioria dos projetos de software de fonte aberta adotem
táticas de segurança tanto no design quanto na implementação, o escopo da adoção foi bastante
limitado. Ou seja, a adoção focou apenas em um determinado conjunto de táticas, como
“criptografar dados” na hierarquia de táticas. Outras táticas raramente eram usadas ou nem eram
usadas. Isso representa uma oportunidade para a comunidade OSS explorar outras táticas de
segurança menos usadas e considerá-las para adoção. Acreditamos que essa adoção
desequilibrada de táticas de segurança se deve principalmente à falta de conhecimento em táticas
de segurança, ao invés de evitar intencionalmente o uso de certas táticas de segurança.
Também percebemos que existem vários candidatos a táticas de segurança que podem ser
incorporados à hierarquia de táticas existente. As táticas de segurança que os candidatos
descobriram durante nossa busca por evidências de contramedidas de segurança no código-fonte
são especialmente valiosas porque são elas que estão sendo usadas pelos profissionais. Outra
razão para sua importância é que a formação da hierarquia de táticas também é parcialmente
dependente desse processo comunitário de propor táticas de segurança e adotá-las pelos
praticantes. Portanto, pesquisas futuras devem identificar mais táticas de segurança candidatas
usadas na prática e encontrar maneiras de incorporá-las sistematicamente na hierarquia de táticas
de segurança existentes. Pesquisas adicionais também são necessárias para avaliar a eficácia das
táticas de segurança recém-descobertas quando elas são incorporadas a uma hierarquia de táticas.
TABELA VII
PROJETOS E BREVES DESCRIÇÕES