Excel – Desbloqueando Planilhas

Esse é um dos posts “indesejados” por aqueles que trabalham com Excel em seu dia a dia, mas que precisam estar na base de conhecimento de todos eles, pois uma das características de qualquer bom sistema, é saber de suas fragilidades.

O Excel possui nativamente um sistema de proteção de planilhas baseados em senha, mas que é um pouco frágil, do ponto de vista técnico/avançado. Tão frágil que existe um código em VBA que é quase uma convenção entre os programadores da linguagem para desbloquear planilhas de forma rápida. Abaixo segue o mesmo:

Sub DesprotegerEstaPlanilha()
 
    Dim i, i1, i2, i3, i4, i5, i6 As Integer, j As Integer, k As Integer, l As Integer, m As Integer, n As Integer
    On Error Resume Next
    For i = 65 To 66
        For j = 65 To 66
            For k = 65 To 66
                For l = 65 To 66
                    For m = 65 To 66
                        For i1 = 65 To 66
                            For i2 = 65 To 66
                                For i3 = 65 To 66
                                    For i4 = 65 To 66
                                        For i5 = 65 To 66
                                            For i6 = 65 To 66
                                                For n = 32 To 126
                                                    ActiveSheet.Unprotect Chr(i) & Chr(j) & Chr(k) & Chr(l) & Chr(m) & Chr(i1) & Chr(i2) & Chr(i3) & Chr(i4) & Chr(i5) & Chr(i6) & Chr(n)
                                                    If ActiveSheet.ProtectContents = False Then
                                                        MsgBox "Planilha " & ActiveSheet.Name & " debloqueada sob a senha: " & Chr(i) & Chr(j) & _
                                                               Chr(k) & Chr(l) & Chr(m) & Chr(i1) & Chr(i2) & _
                                                               Chr(i3) & Chr(i4) & Chr(i5) & Chr(i6) & Chr(n)
                                                        Exit Sub
                                                    End If
                                                Next
                                            Next
                                        Next
                                    Next
                                Next
                            Next
                        Next
                    Next
                Next
            Next
        Next
    Next
End Sub

O motivo da facilidade do desbloqueio está na simplicidade do algoritmo de encriptação da senha. Conforme anunciado pela própria especificação do Office Open XML specification, a mesma se baseia em um hash de 16 bits. Uma lida rápida em documentações de criptografia nos leva a constatação de que o algoritmo hash produz resultados “sem volta”, ou seja, é impossível obter o valor original a partir de “seu hash”, mas também que a base em 16 bit é quebrável sem muito esforço computacional. A função acima quebra a senha fazendo uso de força bruta, o que comprova a fragilidade do método utilizado.

Disso, dá para tirar algumas conclusões e cuidados que devemos tomar quando falamos de aplicativos e planilhas sérias em nosso dia a dia:

  • Use o recurso de proteção de planilhas somente para bloqueio de nevegação ou algo parecido
  • Se quiser proteger efetivamente, use proteção de senha do arquivo
  • Use senhas fortes sempre que possível

Para projetos VBA:

  • Use sempre proteção de senha para os projetos
  • Siga as dicas deste blog e do nosso fórum sobre técnicas de segurança para projetos VBA

Mais algumas dicas:

http://www.oraxcel.com/projects/encoffice/help/How_safe_is_Excel_encryption.html

Referências


http://kohei.us/2008/01/18/excel-sheet-protection-password-hash/

Comentários

comentários