Академический Документы
Профессиональный Документы
Культура Документы
Nome
RA
RA:
RA:
RA:
RA:
RA:
RA:
6787399445
7512583119
7566611984
6954466415
1299767305
7718627339
Atividade
Prtica
Supervisionada
da
Desenvolvimento
disciplina
de
Software
POLO PINDAMONHANGABA
2015
SUMRIO
1
UNIVERSIDADE ANHANGUERA-UNIDERP
DESAFIO 2
OBJETIVO............................................................................................................2
ETAPA 1 - PASSO 1..............................................................................................3
ETAPA 1 - PASSO 2..............................................................................................4
ETAPA 1 - PASSO 3..............................................................................................5
ETAPA 2 - PASSO 1..............................................................................................6
ETAPA 2 - PASSO 2..............................................................................................6
ETAPA 2 - PASSO 3..............................................................................................7
ETAPA 3 - PASSO 1..............................................................................................8
ETAPA 3 - PASSO 2..............................................................................................9
ETAPA 4 - PASSO 1............................................................................................11
ETAPA 4 - PASSO 2............................................................................................11
ETAPA 4 - PASSO 3............................................................................................11
REFERNCIAS BIBLIOGRFICAS................................................................12
DESAFIO
Uma empresa de desenvolvimento de software sofreu diversos ataques em seus
sistemas de informaes, esses ataques causaram vrios prejuzos materiais, comprometendo
sua credibilidade no mercado de softwares. Para corrigir as falhas de segurana dos sistemas,
essa empresa contratou uma equipe de consultores para auxili-la.
Voc e sua equipe foram contratados para identificar e corrigir possveis falhas de segurana
nos sistemas da empresa e implantar os conceitos de desenvolvimento de software seguro
desde as primeiras fases de criao de seus Sistemas de Informaes.
UNIVERSIDADE ANHANGUERA-UNIDERP
UNIVERSIDADE ANHANGUERA-UNIDERP
(BRAZ,
2009).
UNIVERSIDADE ANHANGUERA-UNIDERP
UNIVERSIDADE ANHANGUERA-UNIDERP
UNIVERSIDADE ANHANGUERA-UNIDERP
declarado sobrescrevendo dados ali existentes. Isso acontece devido a no verificao atravs
de funes que validam o tamanho da informao antes de adicion-la. Sendo assim, a melhor
forma de evitar esse problema seria sempre validar todas as entradas do programa, proteger
cdigo utilizando o encapsulamento, por exemplo, onde as variveis destinadas a determinada
funo seja utilizada somente por ela.
Bibliotecas de tipos de dados abstratos bemescritas e testadas que centralizam e checam
automaticamente o gerenciamento de buffer, incluindo checar os limites, podem reduzir a
ocorrncia e impacto de estouros de buffer.
2.4 Heap Buffer Overflow
Um heap overflow um tipo de buffer overflow que ocorre na heap. Overflows na heap so
explorados de maneira diferente de overflows na pilha (stack overflow). Os dados na heap so
alocados dinamicamente pela aplicao, em tempo de execuo, e tipicamente, contm dados
do programa. A explorao feita corrompendo estes dados de uma maneira especfica para
causar sobrescrita em estruturas internas da aplicao, como listas de ponteiros.
Em regra, a tcnica de heap overflow sobrescreve links da memria de alocao dinmica e
substitui por um ponteiro de funo de chamada de um programa.
O sistema operacional Microsoft Windows implementa protees contra heap overflow
desde Windows XP SP2. Ele tambm pode atenuar essas ameaas atravs da utilizao de
Data Execution Prevention (DEP).
2.5 Off-by-One erros
Um erro off-by-one, tambm conhecido como um OBOB (off-by-one bug), um erro de
lgica que envolve uma condio de contorno. Muitas vezes ocorre, quando um ciclo repete
tempo demais ou muito pouco. Este problema pode surgir quando um programador comete
erros, tais como a utilizao de " menor ou igual a" onde " menor do que" deve ter sido
usado em uma comparao ou falha em ter em conta que uma sequncia comea em zero uma
vez que isto tambm pode ocorrer em um contexto matemtico.
Um erro comum off-by-one que resulta em um bug relacionado com a segurana causada
por mau uso da biblioteca padro C strncat. Um equvoco comum com strncat que o
encerramento nulo garantido que no vaiescrever para alm do comprimento mximo. Na
realidade, ele vai escrever um nulo e um byte encerra alm do comprimento mximo
7
UNIVERSIDADE ANHANGUERA-UNIDERP
especificado.
Uma abordagem que muitas vezes ajuda a evitar esses problemas a utilizao de variantes
destas funes que calcula o quanto de gravao com base no comprimento total do buffer,
em vez de o nmero mximo de caracteres para escrever. Essas funes
incluem strlcat e strlcpy, e so muitas vezes consideradas "mais seguras", porque eles tornam
mais fceis evitar que acidentalmente se escreva, passando do fim do buffer.
UNIVERSIDADE ANHANGUERA-UNIDERP
Todas estas variveis so limpas aps a execuo da funo e no ocupam espao no ficheiro
executvel do programa.
void function (char *str) {
char buffer[16];
strcpy (buffer, str);
}
int main () {
char *str = "Eu sou maior do que 16 bytes"; // tamanho da string 28 bytes function (str);
}
Este programa causa garantidamente comportamento inesperado, uma vez que uma string, str,
de 28 bytes foi copiada para uma localizao de apenas 16 bytes (funo strcpy). Os bytes
extras ultrapassam o buffer e reescrevem o espao alocado para o FP, endereo de retorno, etc.
Isto por sua vez corrompe a stack ou pilha do processo. A funo usada para copiar a string
a strcpy, que no faz a verificao dos limites. Usar a funo strncpy como substituta ajuda a
prevenir o problema.
2.8 Evitando o estouro de buffer
As solues propostas para este tipo de problemas visam, sobretudo, a preveno de ataques
de larga escala a sistemas atravs das vulnerabilidades descritos acima. Estes mtodos podem
tornar a explorao dos buffers overflows, mas nenhum pode impedir todos os ataques.
2.8.1 Escrever cdigo seguro
Os buffers overflows so resultado de se colocar mais cdigo num buffer do que aquele que
este suposto ter. As funes de C como strcpy, strcat, sprintf e vsprintf trabalham com
strings que terminam com null e no executam verificao dos limites. A funo gets l o
input do stdin (normalmente o teclado) at um carcter newline ou EOF (End Of File) for
encontrado.
Assim a melhor maneira de evitar buffers overflows no permitir sequer que eles possam
ocorrer em primeiro lugar. Os programadores devem ser educadossobre como minimizarem o
uso de funes vulnerveis.
UNIVERSIDADE ANHANGUERA-UNIDERP
UNIVERSIDADE ANHANGUERA-UNIDERP
cdigo previamente carregado antes da aplicaoser executada. Este componente prcarregado pode fornecer verses mais seguras das funes perigosas, ou ento garantir que os
endereos no so reescritos. Um exemplo a livraria libsafe.
2.8.5 Runtime dinmica
Evitar estouro de buffer atravs da implementao de um processo dinmico de preveno de
execuo em seu sistema. Condies de estouro de buffer e os riscos so detectados durante a
execuo do programa, neste mtodo, impedindo um ataque de estouro de ocorrer. Processos
de execuo diferentes incluem "canrio" --- que adiciona a linha "canrio" para a codificao
do seu programa e copia o endereo de retorno do programa. O ltimo mtodo serve como um
backup de informaes como um meio de regenerar a funcionalidade do programa uma vez
que um ataque de estouro for resolvido.
RELATRIO 03 UTILIZANDO CRIPTOGRAFIA
A seguir sero apresentados trs mtodos de criptografia: Base64, MD5 e SHA1. Logo aps
sero apresentados exemplos desses mtodos em cada linguagem. Ao final, os motivos pelos
quais os mtodos MD5 e SHA1 so mais fortes que o Base64.
3.1 Base64 - Conceito
um mtodo para codificao de dados para transferncia na internet. utilizado
frequentemente para transmitir dados binrios por meios de transmisso que lidam apenas
com texto, como por exemplo, para enviar arquivos anexos por e-mail.
Ela uma codificao de mo dupla, e usando uma segunda funo voc pode descobrir a
string original de uma string codificada.
constitudo por 64 caracteres ([A-Za-z0-9], "/" e "+") que deram origem ao seu nome. O
carcter "=" utilizado como um sufixo especial e a especificao original (RFC 989) definiu
que o smbolo "*" pode ser utilizado para delimitar dadosconvertidos, mas no criptografados,
dentro de um stream.
Esta codificao amplamente utilizada por aplicaes em conjunto com a linguagem de
marcao XML, possibilitando o armazenamento de dados binrios em forma de texto.
11
UNIVERSIDADE ANHANGUERA-UNIDERP
12
UNIVERSIDADE ANHANGUERA-UNIDERP
";
$original = base64_decode($codificada);
echo "Resultado da decodificao usando base64: " . $original;
// O rato roeu a roupa do rei de Roma
// Note que $original vai ser idntica a $string
?>
3.5 MD5 Na linguagem PHP
$string = 'O rato roeu a roupa do rei de Roma';
$codificada = md5($string);
echo "Resultado da codificao usando md5: " . $codificada;
// 54cf74d1acdb4037ab956c269b63c8ac
?>
UNIVERSIDADE ANHANGUERA-UNIDERP
UNIVERSIDADE ANHANGUERA-UNIDERP
UNIVERSIDADE ANHANGUERA-UNIDERP
return null;
}
public static void main(String[] args){
String senha = "123456";
System.out.println(CriptografiaMD5.criptografar(senha));
senha = "132546";System.out.println(CriptografiaMD5.criptografar(senha));
}
}
3.10 Base64 Na Linguagem ASP
O cdigo abaixo esta cifrando o Nome Fabrizio Gianfratti e decifrando em ASP.
Imports System.Security.Cryptography
Imports System.IO
Imports System.Text
Public Class default2
Inherits System.Web.UI.Page
Private ChaveSecreta As String = "0987612345!@#$%&*"
Dim Texto As String = "Fabrizio Gianfratti"
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
Response.Write(Cifrar(Texto, ChaveSecreta) & "
")
Response.Write(Decifrar(Cifrar(Texto, ChaveSecreta), ChaveSecreta))
End Sub
Private Function Cifrar(ByVal vstrTextToBeEncrypted As String, ByVal vstrEncryptionKey
As String) As String
Dim bytValue() As Byte
16
UNIVERSIDADE ANHANGUERA-UNIDERP
UNIVERSIDADE ANHANGUERA-UNIDERP
objCryptoStream.Close()
Catch
End Try
Return Convert.ToBase64String(bytEncoded)
End Function
Private Function Decifrar(ByVal vstrStringToBeDecrypted As String, ByVal
vstrDecryptionKey As String) As String
Dim bytDataToBeDecrypted() As Byte
Dim bytTemp() As Byte
Dim bytIV() As Byte = {121, 241, 10, 1, 132, 74, 11, 39, 255, 91, 45, 78, 14, 211, 22, 62}
Dim objRijndaelManaged As New RijndaelManaged
Dim objMemoryStream As MemoryStream
Dim objCryptoStream As CryptoStream
Dim bytDecryptionKey() As Byte
Dim intLength As Integer
Dim intRemaining As Integer
Dim intCtr As Integer
Dim strReturnString As String = String.Empty
Dim achrCharacterArray() As Char
Dim intIndex As Integer
bytDataToBeDecrypted = Convert.FromBase64String(vstrStringToBeDecrypted)
intLength = Len(vstrDecryptionKey)
If intLength >= 32 Then
vstrDecryptionKey = Strings.Left(vstrDecryptionKey, 32)
Else
intLength = Len(vstrDecryptionKey)
18
UNIVERSIDADE ANHANGUERA-UNIDERP
intRemaining = 32 - intLength
vstrDecryptionKey = vstrDecryptionKey & Strings.StrDup(intRemaining, "X")
End If
bytDecryptionKey = Encoding.ASCII.GetBytes(vstrDecryptionKey.ToCharArray)
ReDim bytTemp(bytDataToBeDecrypted.Length)
objMemoryStream = New MemoryStream(bytDataToBeDecrypted)
Try
objCryptoStream = New CryptoStream(objMemoryStream, _
objRijndaelManaged.CreateDecryptor(bytDecryptionKey, bytIV), _
CryptoStreamMode.Read)
objCryptoStream.Read(bytTemp, 0, bytTemp.Length)
objCryptoStream.FlushFinalBlock()
objMemoryStream.Close()
objCryptoStream.Close()
Catch
End Try
Return TiraCaracteresNulos(Encoding.ASCII.GetString(bytTemp))
End Function
Private FunctionTiraCaracteresNulos(ByVal vstrStringWithNulls As String) As String
Dim intPosition As Integer
Dim strStringWithOutNulls As String
19
UNIVERSIDADE ANHANGUERA-UNIDERP
intPosition = 1
strStringWithOutNulls = vstrStringWithNulls
Do While intPosition > 0
intPosition = InStr(intPosition, vstrStringWithNulls, vbNullChar)
If intPosition > 0 Then
strStringWithOutNulls = Left$(strStringWithOutNulls, intPosition - 1) & _
Right$(strStringWithOutNulls, Len(strStringWithOutNulls) - intPosition)
End If
If intPosition > strStringWithOutNulls.Length Then
Exit Do
End If
Loop
Return strStringWithOutNulls
End Function
End Class
UNIVERSIDADE ANHANGUERA-UNIDERP
}
private bool ValidateMD5HashData(string inputData, string storedHashData)
{
string getHashInputData = GetMD5HashData(inputData);
if (string.Compare(getHashInputData, storedHashData) == 0)
{
return true;
}
else
{
return false;
}
}
3.12 SHA1 Na Linguagem ASP
private string GetSHA1HashData(string data)
{
SHA1 sha1 = SHA1.Create();
byte[] hashData = sha1.ComputeHash(Encoding.Default.GetBytes(data));
StringBuilder returnValue = new StringBuilder();
for (int i = 0; i < hashData.Length; i++)
{
returnValue.Append(hashData[i].ToString());
}
return returnValue.ToString();
}
private bool ValidateSHA1HashData(string inputData, string storedHashData)
{
string getHashInputData = GetSHA1HashData(inputData);
if (string.Compare(getHashInputData, storedHashData) == 0)
{
21
UNIVERSIDADE ANHANGUERA-UNIDERP
return true;
}
else
{
returnfalse;
}
}
3.12 Concluso Comparao entre os mtodos
Conforme pesquisa realizada, SHA1 e MD5 so mais fortes que o Base64, porque so
unidirecionais no sendo possvel decodificar os mesmos. O cdigo Base64 utilizado apenas
para mensagem da internet e ele converte a string/binrio de entrada em um dado codificado
com MIME base64, que pode ser facilmente decodificado pelo comando inverso,
base64_decode.
BIBLIOGRAFIA
BRAZ, F. Instrumentao da analise e projeto de software seguro baseada em ameaas e
padres. Tese (Doutorado em Engenharia Eltrica) Faculdade de Tecnologia, Braslia, 2009.
22
UNIVERSIDADE ANHANGUERA-UNIDERP
23
UNIVERSIDADE ANHANGUERA-UNIDERP
24
UNIVERSIDADE ANHANGUERA-UNIDERP