• Sign in
 

LATAM Team blog

Search Blogs
Tags
  • Cloud
  • Cluster
  • Crash
  • Desarrollo
  • Desenvolvimento
  • Directory Services
  • DST
  • Español
  • Exchange/Outlook
  • Hang
  • High Availability
  • IIS
  • Networking
  • Office
  • People
  • Performance
  • Português
  • PowerShell Scripts
  • Security
  • Setup
  • Sharepoint
  • SQL
  • Virtualization
  • Windbg Scripts
  • Windows
Blog - News

Where Are You Coming From Today?

Where are you now?

Follow us on:

Options
  • Blog Home
  • About
  • Share this
  • RSS for posts
  • Atom
  • RSS for comments
Archive
Archives
  • May 2013 (4)
  • April 2013 (5)
  • March 2013 (6)
  • February 2013 (3)
  • January 2013 (3)
  • December 2012 (2)
  • November 2012 (1)
  • October 2012 (4)
  • September 2012 (5)
  • August 2012 (2)
  • July 2012 (2)
  • June 2012 (3)
  • May 2012 (13)
  • April 2012 (6)
  • March 2012 (6)
  • February 2012 (4)
  • January 2012 (7)
  • December 2011 (11)
  • October 2011 (6)
  • September 2011 (1)
  • August 2011 (3)
  • July 2011 (7)
  • June 2011 (6)
  • May 2011 (5)
  • April 2011 (2)
  • March 2011 (13)
  • February 2011 (1)
  • January 2011 (5)
  • December 2010 (6)
  • November 2010 (1)
  • October 2010 (6)
  • September 2010 (2)
  • August 2010 (3)
  • July 2010 (3)
  • June 2010 (5)
  • May 2010 (1)
  • April 2010 (10)
  • March 2010 (21)
  • February 2010 (8)
  • January 2010 (3)
  • December 2009 (5)
  • November 2009 (5)
  • October 2009 (6)
  • September 2009 (8)
  • August 2009 (9)
  • July 2009 (1)
  • June 2009 (3)
  • May 2009 (2)
  • April 2009 (7)
  • March 2009 (4)
  • February 2009 (7)
  • January 2009 (7)
  • December 2008 (8)
  • November 2008 (7)
  • October 2008 (22)
  • September 2008 (17)
  • August 2008 (13)
  • July 2008 (11)
  • June 2008 (7)
  • May 2008 (3)
  • April 2008 (2)
  • March 2008 (6)
  • January 2008 (4)
  • December 2007 (9)
  • November 2007 (4)
  • October 2007 (3)
  • September 2007 (8)
  • August 2007 (4)
  • July 2007 (2)
  • June 2007 (5)
  • May 2007 (7)
  • April 2007 (9)
  • March 2007 (7)
  • February 2007 (6)
  • January 2007 (4)
  • December 2006 (14)
  • November 2006 (10)
  • October 2006 (10)
  • September 2006 (11)
  • August 2006 (15)
  • July 2006 (7)
  • June 2006 (14)
  • May 2006 (22)
  • April 2006 (16)
  • March 2006 (20)
  • January 2006 (1)

Desafio da Semana #8

TechNet Blogs > LATAM Team blog > Desafio da Semana #8

Desafio da Semana #8

LatamBlog
14 Jul 2006 5:12 PM
  • Comments 2

 

DESAFIO DA SEMANA #8

 

 

Por: Roberto Alexis Farah

 

Olá pessoal!

O desafio de hoje trata de uma potencial falha de segurança que pode ocorrer em aplicações. Apesar disso o nosso foco não será no lado de segurança em si.

 

 

CENÁRIO

 

Imagine que um cliente o chama para ajudar a diagnosticar uma aplicação console que é chamada por outra aplicação.

Portanto, embora a aplicação possa ser usada manualmente, chamando-a pela linha de comando, ela pode, também, ser chamada por outra aplicação.

A aplicação console no nosso exemplo não faz nada de útil, apenas salva o conteúdo fornecido como linha de comando num buffer interno, desde que o tamanho dos dados seja menor que o tamanho do buffer interno, apenas para simplificar o cenário.

 

O formato usado é:

 

- primeiro parâmetro é o tamanho do buffer. Basicamente o tamanho da string a ser fornecida no segundo parâmetro.

- segundo parâmetro é o conteúdo, ou seja, a string propriamente dita.

 

Exemplo de uso:

 

App.exe 25 “isto e’ um teste”              ß Nada será salvo pois 25 é maior que o buffer interno. Msg é mostrada.

App.exe 6   “isto é um teste”              ß O buffer interno será preenchido, mas com os 6 primeiros caracteres iniciais.

 

Para gerar a aplicação, crie uma aplicação console no Visual C++ usando esse código e os necessários arquivos de header:

 

#define BUFFER_SIZE 10

 

int main(int argc, char* argv[])

{

        if(argc < 3)

        {

                return 0;

        }

       

        int nLen = 0;

       

        // Nao assumir string com NULL terminator.

        // Por isso usei 'cBuffer' ao inves de 'pszBuffer'.

        char cBuffer[BUFFER_SIZE]; 

       

        nLen = atoi(argv[1]);

       

        if(nLen < BUFFER_SIZE)

        {

                memcpy(cBuffer, argv[2], nLen);

        }

        else

        {

                printf("Muita informacao para copiar...\n");

        }

       

        return 0;

}

 

 

SINTOMA

 

Crash intermitente de aplicação.

Nota: O sintoma poderia se manifestar de outro modo, talvez bem mais discreto.

 

 

OBJETIVO

 

Identifique o PROBLEMA ocasionando o intermitente Crash de aplicação e proponha uma SOLUÇÃO.

 

 

 

 

  • 2 Comments
Desenvolvimento , Português
Comments
Comments
  • Marcelo Cortes
    18 Jul 2006 12:41 PM
    PROBLEMA:

    O crash vai ocorrer nesse programa apenas quando memcpy for executado com um número de caracteres a serem copiados muito grande, o que vai causar "access violation".

    A pergunta é: o programa está testando o tamanho do buffer passado pelo usuário antes de executar memcpy, seria impossivel de passar um buffer muito grande para memcpy?

    A resposta é simples: Executando o programa com um número negativo como primeiro parâmetro.

    Um número negativo vai passar pelo nosso teste:

    "if(nLen < BUFFER_SIZE)"

    E quando memcpy for executado:

    memcpy(cBuffer, argv[2], nLen);

    O parametro nLen vai ser convertido de int para size_t de acordo com a descrição do método memcpy na MSDN:

    void *memcpy(void *dest, const void *src, size_t count);

    Ao ser convertido de negativo para size_t (que é unsigned), o valor vai ser provavelmente enorme (se o valor negativo for pequeno), o que causará o crash.

    O desafio foi muito bom, e muitos programadores escrevem programas com essas pequenas falham que parecem ser simples e impossiveis de acontecer, mas são essas falham que crackers e hackers exploram para violar programas e sistemas.


    SOLUÇÃO

    A solução é bem simples, basta converter a variavel nLen de int para "unsigned int" e nosso teste if(nLen < BUFFER_SIZE) vai ser eficiente sempre.






  • Roberto Farah
    24 Jul 2006 2:07 PM
    Marcelo, sua resposta está corretíssima! Parabéns e continue participando.
    Hoje estarei postando minha resposta onde detalho como o problema ocorre.

    Obrigado
Page 1 of 1 (2 items)
  • © 2013 Microsoft Corporation.
  • Terms of Use
  • Trademarks
  • Privacy & Cookies
  • 5.6.426.415
  • TechNet
  • Products
  • IT Resources
  • Downloads
  • Training
  • Support
Products
  • Windows
  • Windows
    Server
  • System
    Center
  • Internet
    Explorer
 
  • Office
  • Office 365
  • Exchange
    Server
 
  • SQL Server
  • SharePoint
    Products
  • Lync
  • See all products »
Resources
  • Evaluation Center
  • Learning Resources
  • Microsoft IT Camps
  • Microsoft Technical Communities
  • Microsoft Virtual Academy
  • Script Center
  • Server and Tools Blogs
  • Solution Accelerators
  • TechNet Blogs
 
  • TechNet Flash Newsletter
  • TechNet Gallery
  • TechNet Library
  • TechNet Magazine
  • TechNet Subscriptions
  • TechNet Video
  • TechNet Wiki
  • Windows Sysinternals
  • Virtual Labs
Solutions
  • Networking
  • Cloud and Datacenter
  • Security
  • Virtualization
Updates
  • Service Packs
  • Security Bulletins
  • Microsoft Update
Trials
  • Windows Server 2012
  • System Center 2012 SP1
  • Microsoft SQL Server 2012 SP1
  • Windows 8 Enterprise
  • See all trials »
Related Sites
  • Microsoft Download Center
  • TechNet Evaluation Center
  • Drivers
  • Compatability & Converters
  • Windows Sysinternals
  • TechNet Gallery
Training
  • Training Catalog
  • Class Locator
  • Microsoft Virtual Academy
  • Free Windows Server 2012 courses
  • Free Windows 8 courses
  • SQL Server training
  • e-Learning overview
Certifications
  • Certification overview
  • MCSA: Windows 8
  • Windows Server Certification (MCSE)
  • Private Cloud Certification (MCSE)
  • SQL Server Certification (MCSE)
Other resources
  • TechNet Events
  • Second shot for certification
  • Born To Learn blog
  • IT Camps
Support by product
  • Exchange Server
  • Forefront Server
  • Forefront Edge Security
  • Forefront Server Security
  • Internet Explorer
  • Office
  • SharePoint
 
  • SQL Server
  • System Center
  • Windows Server
  • Windows XP
  • Windows Vista
  • Windows 7
  • Windows 8
Other support links
  • Microsoft Premier Online
  • Microsoft Fix It Center
  • TechNet Forums
  • MSDN Forums
  • Security Bulletins & Advisories
  • International support solutions
  • Log a support ticket
  • Look up event IDs and error codes
Not an IT pro?
  • Microsoft Customer Support
  • Microsoft Community Forums