Práticas recomendadas de segurança para a criação de aplicativos da Windows Store

Blog do desenvolvedor de aplicativos do Windows 8

Ideias sobre a criação de aplicativos com o estilo Metro para o Windows 8, da equipe de engenharia do Windows 8

Práticas recomendadas de segurança para a criação de aplicativos da Windows Store

  • Comments 1

Uma das nossas metas principais com a criação da plataforma de aplicativos da Windows Store era garantir que os clientes tivessem confiança em seus aplicativos. Desejamos que os clientes confiem que seus aplicativos funcionarão conforme o esperado, coexistirão com outros aplicativos e proporcionarão uma desinstalação limpa. Essa confiança vem de várias fontes: da entrada na Windows Store, da instalação e desinstalação sem problemas, do consentimento do uso do seu local e webcam e do Kit de Certificação de Aplicativos Windows para testar se o seu aplicativo atende aos critérios de envio para a Windows Store. A confiança dos clientes não vem de um único recurso, processo ou qualidade; ela é desenvolvida a partir de uma soma de diferentes fatores para que os clientes fiquem confiantes durante todo o processo. Descrevemos a nossa abordagem com mais detalhes na postagem Oferecendo aplicativos estilo Metro confiáveis e seguros.

Agora, desejamos falar especificamente sobre aplicativos seguros e confiáveis, e sobre como você pode ajudar a desenvolver a confiança dos clientes no seu aplicativo. Os aplicativos de hoje costumam reter dados importantes dos clientes, desde registros financeiros até fotos pessoais insubstituíveis. Muitos clientes, cujos dados representam sua vida, esperam que os aplicativos mantenham seus dados seguros. Mesmo quanto aos aplicativos que retenham poucos dados, os clientes esperam que eles funcionem com o propósito com que foram criados e não interfiram em outros aplicativos.

A implementação de práticas recomendadas de segurança no seu aplicativo é essencial para estabelecer a confiança dos clientes e manter o nível de satisfação ao longo do tempo. Felizmente, as práticas recomendadas de segurança são claras, e não é difícil adicionar proteções de segurança ao seu aplicativo. Os aplicativos também são executados em um contêiner de aplicativo exclusivo que ajuda a isolar o aplicativo e seus dados de outros aplicativos. O contêiner de aplicativo oferece um ambiente dedicado para o seu aplicativo, incluindo o seu próprio armazenamento de dados e configurações.

O Windows 8 e o Visual Studio 2012 oferecem um conjunto de APIs, controles e ferramentas para minimizar possíveis vulnerabilidades de aplicativos e reduzir os problemas de segurança comuns. Embora nenhuma plataforma seja perfeita, estamos certos de que a combinação de diferentes elementos permitirá que você crie aplicativos incríveis, e de que a plataforma continuará melhorando ao longo do tempo. Nesta postagem, abordamos várias dicas e práticas recomendadas para aperfeiçoar os seus aplicativos de forma que você possa oferecer aos clientes uma experiência mais segura e confiável.

Vamos lá!

Dica 1 – Compile com o Visual Studio

A partir do Windows 8, implementamos várias práticas recomendadas de segurança existentes por padrão, portanto, você não precisa fazer nada, basta compilar o seu aplicativo com o Visual Studio 2012. Ao fazer isso, as tecnologias de segurança que protegem os aplicativos contra ataques comuns (/GS, ASLR, DEP e SeHOP) são habilitadas por padrão para um código nativo dentro do seu aplicativo.

Dica 2 – Minimize os recursos do aplicativo

Cada aplicativo pode declarar funcionalidades que definam como o aplicativo pode interagir com diferentes recursos e dispositivos. É importante definir o conjunto mínimo de funcionalidades de que o seu aplicativo precisa para que seja executado com o mínimo de privilégios necessários. Usando um conjunto mínimo de funcionalidades, você torna o seu aplicativo menos vulnerável à exploração.

Por exemplo, a funcionalidade de redes locais e corporativas permite que um aplicativo acesse computadores em uma rede local, como a de jogos ponto a ponto. Essa funcionalidade também pode ser útil para os testes pré-lançamento com um serviço local, mas normalmente é desnecessária e apresenta grandes chances de o aplicativo ser explorado de uma rede local não confiável, como um ponto de acesso sem fio em uma cafeteria ou aeroporto. Considere remover a funcionalidade para a realização de testes com um servidor remoto, que tem o benefício extra de reproduzir as condições do mundo real para o seu aplicativo. Se você usa a funcionalidade de redes locais e corporativas, remova-a antes de enviar o aplicativo para a certificação da Loja.

funcionalidades

Um aplicativo com um conjunto mínimo de funcionalidades – somente acesso à Internet!

Observe que as funcionalidades de Autenticação empresarial, Certificados compartilhados de usuário e a Biblioteca de documentos são voltadas para o acesso corporativo e documentos inseridos (por exemplo, para abrir um documento, é necessário abrir outro documento dentro dele) e exigem uma conta de empresa para o envio de um aplicativo com essas funcionalidades para a Windows Store. Essas funcionalidades normalmente não são necessárias para a maioria dos aplicativos, mas podem ser necessárias para aplicativos empresariais que precisam acessar recursos corporativos. Essas funcionalidades são altamente restritas e seu uso exige revisão adicional pela Windows Store.

Dica 3 – Use o seletor de arquivos em vez das funcionalidades de biblioteca

Complementando a dica 2 para minimizar suas funcionalidades, você normalmente pode remover todas as funcionalidades baseadas em arquivo. Se o seu aplicativo precisar acessar somente alguns arquivos, permita que o usuário selecione os arquivos com um seletor de arquivos. O seletor de arquivos simplifica o código dos seus aplicativos e permite que um usuário acesse, de maneira fácil, exatamente o que precisam sem funcionalidades de aplicativos adicionais. Como o seletor de arquivos é consistente em todos os aplicativos, os usuários se familiarizarão imediatamente com a caixa de diálogo quando usarem o seu aplicativo pela primeira vez e poderão voltar rapidamente ao aplicativo após selecionarem o que desejam.

file_picker

  Seletor de arquivos mostrando a Biblioteca de imagens

Em JavaScript 

var picker = new Windows.Storage.Pickers.FileOpenPicker();
openPicker.viewMode = Windows.Storage.Pickers.PickerViewMode.thumbnail;
picker.fileTypeFilter.replaceAll([".png", ".jpg", ".jpeg"]);
picker.suggestedStartLocation =
Windows.Storage.Pickers.PickerLocationId.picturesLibrary;

Em C#

using Windows.Storage;
using Windows.Storage.Pickers;

FileOpenPicker openPicker = new FileOpenPicker();
openPicker.ViewMode = PickerViewMode.Thumbnail;
openPicker.SuggestedStartLocation = PickerLocationId.PicturesLibrary;
openPicker.FileTypeFilter.Add(".png");
openPicker.FileTypeFilter.Add(".jpg");
openPicker.FileTypeFilter.Add(".jpeg");

Como exemplo de funcionalidades apropriadas, se o seu aplicativo permitir que um usuário selecione uma imagem, ele deve usar o seletor de arquivos em vez da funcionalidade da Biblioteca de imagens. Se o seu aplicativo realmente precisar de acesso programático total a uma biblioteca, como para um player de música que reproduza o conteúdo da Biblioteca de músicas, será sensato acessar a Biblioteca de músicas com uma funcionalidade. Se o seu aplicativo precisar acessar documentos, você deverá usar o seletor.

Dica 4 – Não confie em dados remotos

Para os aplicativos escritos em JavaScript, é essencial verificar e lidar com conteúdo da Web não confiável. As páginas HTML inclu��das no aplicativo normalmente são executadas no contexto local dele, o que permite acesso ao Tempo de Execução do Windows. As páginas remotas exibidas em um iframe são executadas no contexto Web do aplicativo e não têm acesso ao Tempo de Execução do Windows. Você sabe quem está chamando o Tempo de Execução do Windows de dentro do seu aplicativo? Afinal, você não deseja que um site desconhecido controle o seu aplicativo, não é mesmo? (R: Não, não é uma boa ideia.) O seu aplicativo deve evitar chamar APIs que executem scripts como eval(), setTimeout() e setInterval() a menos que você saiba que a entrada da API se origina no seu pacote. Se precisar usar essas APIs, lembre-se de que elas podem avaliar o script, e você deve, portanto, saber exatamente como o script é construído se for passar dados para essas APIs.

Se você estiver trabalhando com dados de JSON, use o JSON.parse em vez do eval() por ser mais seguro e não expor o aplicativo ao risco de injeção de script.

Em JavaScript 

var jsontext = '{"firstname":"Aaren","surname":"Ekelund"}';
var contact = JSON.parse(jsontext);
console.log(contact.surname + ", " + contact.firstname);

// Output: Ekelund, Aaren

E, por fim, o conteúdo da Web desconhecido usado no aplicativo também deve ser corrigido para remover conteúdo executável usando o innerText ou o toStaticHTML. Esse processo de correção remove ou desabilita o script para mostrar o conteúdo da Web no seu aplicativo.

Em JavaScript

div.innerHTML = window.toStaticHTML(data);
div.innerText = data;

Essas funções ajudam a garantir que nenhum script não confiável ou conteúdo perigoso possa ser executado no seu aplicativo. O primeiro caso eliminará o script, o segundo, o transformará em um texto não executável. Embora a maioria dos aplicativos acesse conteúdo da Web remoto por meio de campos de entrada dentro do aplicativo e de APIs tradicionais, como um objeto XMLHttpRequest, não se esqueça de que o conteúdo da Web também pode entrar por meio de outros caminhos, como, por exemplo, o botão Compartilhar.

Dica 5 – Não permita que a Web acesse o WinRT

Por padrão, o Windows 8 somente permite que o conteúdo do seu pacote de aplicativos acesse o WinRT (Tempo de Execução do Windows). Se o seu aplicativo aceitar entrada ou dados da Web, não permita que esses dados controlem o uso das APIs do WinRT pelos seus aplicativos. Os seus clientes esperam confiar no comportamento esperado de seu aplicativo e que você preserve essa confiança. Se você estiver trabalhando com um site, considere mostrá-lo dentro de um iframe em área restrita, o que pode impedir que um script, envio de formulário e outros conteúdos sejam executados no seu aplicativo.

Se o seu aplicativo executar conteúdo da Web, esse conteúdo pode acessar as configurações e dados do seu aplicativo ou arquivos que também podem ser acessados pelo seu aplicativo. Isso é especialmente crítico para aplicativos escritos em JavaScript, em que é muito mais fácil executar script dinamicamente. Por exemplo, se você tiver um aplicativo escrito em JavaScript que use o postMessage para passar dados para uma API do WinRT ou código empacotado, valide a origem dos dados para garantir que seja de uma fonte confiável.

Em JavaScript

window.attachEvent('onmessage',function(e) {
if (e.origin == 'https://www.contoso.com/') {

}
});

Para obter mais informações sobre a adição de conteúdo da Web em um aplicativo escrito em JavaScript, examine a amostra do aplicativo quanto à integração de conteúdo e controles de serviços Web.

Dica 6 – Obtenha prova: autentique o seu aplicativo e os clientes


Os aplicativos baseados em nuvem, em que parte deles acessa serviços na nuvem são extremamente avançados, mas precisam ser cuidadosos na autenticação com os serviços de nuvem para evitar abuso. Os serviços de nuvem que aceitam entradas do usuário devem sempre identificar e autenticar tanto os usuários quanto o aplicativo. Autenticando o aplicativo e o usuário com um serviço de nuvem confiável, você sabe que alguém está usando o seu serviço de forma legítima com o aplicativo exato esperado por você. Outro benefício extra de se conhecer a identidade do usuário é que, se houver abuso, você poderá identificar facilmente e remover todo o conteúdo postado por esse usuário.

Você pode autenticar o aplicativo com o GetAppReceiptAsync para comprovar que o aplicativo foi obtido da Loja e tem um recibo válido da Loja. Se você tiver um servidor de back-end, poderá fazer uma maior autenticação com o recibo para confirmar o certificado público da assinatura do recibo, conectando-se à URL a seguir, em que <CertificateId> é o CertificateId incluído no recibo.

https://go.microsoft.com/fwlink/p/?LinkId=246509&cid=<CertificateId>

O WinRT oferece uma variedade de métodos convenientes para que os aplicativos cliente autentiquem o usuário para um serviço de nuvem, incluindo o agente de autenticação da Web (para fazer a autenticação do OAuth-style), o Cofre de Credenciais (para armazenar senhas e pequenos valores criptografados) e os repositórios de certificados compartilhados (para a autentificação de certificado do cliente). Todas essas opções são ótimas para estabelecer a confiança do cliente na forma como você gerencia a autenticação e as credenciais deles.

Dica 7 – Valide arquivos, protocolos e dados importados


Muitos aplicativos criam e carregam arquivos, permitem a ativação por meio de um protocolo ou fornecem um meio de importar dados. Como o conteúdo da Web remoto descrito acima, esses dados podem ser malformados ou provenientes de fontes menos confiáveis e não se deve confiar neles. Os aplicativos que abrem arquivos, importam dados ou aceitam conteúdo compartilhado precisam ter o cuidado de validar o conteúdo antes que eles entrem em ação.

A validação dependerá do tipo de entrada e de como o seu aplicativo atua nesse conteúdo, e pode ser simples ou complexo. Por exemplo, uma entrada usada por uma consulta de banco de dados deve ser validada para impedir um ataque de injeção de SQL porque os bancos de dados normalmente executam todas as consultas válidas que recebem e podem revelar, manipular ou até mesmo excluir dados com entrada mal-intencionada.

Arquivos, protocolos, dados importados e conteúdo compartilhado podem incluir conteúdo não confiável que podem não ser o que o seu aplicativo espera. Os arquivos e protocolos são a forma mais comum de entrada não confiável, mas tenha cuidado também com a área de transferência e em aceitar conteúdo do botão Compartilhar porque os clientes podem estar puxando conteúdo não confiável do seu navegador da Web que simplesmente pode ser qualquer coisa. Os aplicativos com dados particularmente confidenciais, como aplicativos financeiros pessoais, devem ser extremamente cuidadosos com o conteúdo não confiável porque eles têm acesso a informações que são especialmente valiosas para os clientes.

Dica 8 – Use conexões HTTPS


Na dúvida, criptografe! As conexões HTTPS oferecem autenticação a um servidor remoto e são altamente recomendadas para reduzir os "ataques do homem no meio". Embora esses ataques possam não ser um problema na sua rede local, há muitas redes sem fio não criptografadas pelo mundo em que uma conexão HTTP padrão não é segura.

Para uma conexão HTTPS padrão, o site remoto precisa ter um certificado fornecido por uma AC e ser configurado para permitir uma conexão HTTP. A partir do Windows 8, um aplicativo pode aproveitar as conexões SSL usando um certificado autoassinado para fazer uma autenticação com segurança para o seu servidor de back-end. Isso significa que você pode ter uma conexão HTTPS segura, mesmo sem um certificado fornecido por uma AC. Se você estiver evitando o HTTPS devido ao custo, não há desculpas para enviar um aplicativo que transmita dados por conexões HTTP não seguras.

Para usar um certificado autoassinado, você pode apenas adicionar uma declaração de certificado ao seu aplicativo por meio do Designer de Manifesto do Visual Studio 2012 ou diretamente para o XML do manifesto do aplicativo. Você também precisa configurar o seu servidor de back-end para usar o mesmo certificado; para o IIS, há um processo simples para criar e configurar o seu site. O seu aplicativo, então, usa automaticamente o certificado empacotado para autenticar a conexão com o seu servidor Web.

E, finalmente, se tiver um aplicativo escrito em JavaScript, você também poderá exigir conexões HTTPS usando a seguinte marca <meta> no seu aplicativo –

<meta name="ms-https-connections-only" content="true"/>

Cultivando a confiança

Esperamos que você esteja feliz com o Windows 8 e esteja criando ótimos aplicativos que veremos em breve na Windows Store. As dicas e práticas recomendadas discutidas acima são um elemento importante para oferecer uma experiência mais segura e confiável aos seus clientes, para que eles possam ter a certeza de que seus aplicativos funcionarão exatamente como o esperado. A segurança é uma expectativa para todos os aplicativos, da proteção de pontuações altas obtidas com esforço até dados financeiros confidenciais.

Os aplicativos do Windows 8 e da Windows Store são criados para tornar mais fácil para os clientes experimentar e comprar aplicativos com confiança por meio de investimentos coletivos que fizemos na plataforma de aplicativos. Estamos certos de que a plataforma de aplicativos permitirá que você crie aplicativos confiáveis que serão adorados pelas pessoas.

Se tiver interesse em obter mais informações sobre a segurança de aplicativos, confira o white paper Desenvolvendo aplicativos seguros (Windows) o kit de início do Security Development Lifecycle e o centro de desenvolvimento de segurança para obter as últimas informações.

Obrigado!

-- Scott Graham, gerente sênior de programas, Windows

-- Crispin Cowan, gerente sênior de programas, Windows

-- David Ross, diretor de engenharia de segurança de software, segurança computacional confiável

  • Loading...
Leave a Comment
  • Please add 7 and 1 and type the answer here:
  • Post