Introdução / Introduction

Atualmente existem programas de computador para aquela tarefa mais específica. Estamos numa era em que a oferta de software na Internet é gigante, no entanto cabe ao utilizador a simples missão de selecionar qual o produto que melhor se encaixa para o seu propósito. Notar que “simples missão” não deve ser levado à letra, pois quando não é realizado um estudo, mesmo que breve, ao produto a instalar no computador as consequências poderão ser drásticas e inesperadas. Este artigo apresenta um breve exemplo deste tipo de problema em seguida.

Nowadays there are computer programs for many different and specific tasks. We are in an era where the software offer on the Internet is giant, however the users have the simple mission of selecting which product best fits their tasks. Note that “simple mission” should not be taken literally, because when even a brief study is not done the software installation in a computer can bring drastic and unexpected consequences. This article provides a brief example for this problem.

Clipboard Manager

Para este artigo em específico, e para demonstrar que uma má opção pode tornar-se uma ponte para a insegurança, foi usado um clipboard manager chamado Parcellite disponível junto de alguns sistemas operativos aquando da instalação, como é o caso do Arch Linux – Antergos (ver abaixo alguma informação sobre o sistema operativo instalado).

In order to demonstrate that a software installation can become an insecurity bridge both to the operating system and the user a manager clipboard called Parcellite was used . It is available with some operating systems upon installation, e.g., distribution Arch Linux – Antergos (see below some information about the operating system).

root ~]$ cat /etc/*-release
Antergos Linux release 16.4 (ISO-Rolling)
NAME="Antergos Linux"
VERSION="16.4-ISO-Rolling"
ID="antergos"
ID_LIKE="arch"
PRETTY_NAME="Antergos Linux"
CPE_NAME="cpe:/o:antergosproject:antergos:16.4"
ANSI_COLOR="1;34;40"
HOME_URL="https://antergos.com/"
SUPPORT_URL="https://forum.antergos.com/"
BUG_REPORT_URL="https://github.com/antergos"

Os clipboard managers são programas de computador muito utilizados uma vez que guardam um histórico de todo o conteúdo copiado para o clipboard (como o nome sugere) e são efetivamente uma solução rápida para utilizadores que usam e abusam do clipboard para as suas tarefas (e.g., preenchimento de formulários, softwares de gestão, contabilidade, et cetera.).

Segundo este endereço, existe uma imensa panóplia de programas desta linha mas o usado neste artigo foi o Parcellite pelas razões já mencionadas, i.e., estar embebido na versão da distribuição do SO Antergos.

Clipboard managers are computer programs widely used to keep a history of all content copied to the clipboard and are a quick solution for final users that use it for their main tasks (e.g., filling out forms, management software, accounting, et cetera.).

According to this address, there is an immense range of software for this context, but the selected and analyzed during this article was the Parcellite, for the reasons mentioned above, i.e., it is embedded in the version of the OS deployment Antergos.

parcellite

Este é um software disponível no endereço abaixo e a última release é de 1 de outubro de 2014.

Available below. Last release in 1st of October of 2014.

Ver para mais informação / See more info: http://parcellite.sourceforge.net

Uma ponte para a (in)segurança / A bridge to the (in)security 

Feitas as apresentações é inegável a utilidade destas peças de software uma vez que agilizam a produtividade das tarefas do dia a dia. Porém, por falhas de projeto (aquando do planeamento e arquitetura do sotftware) podem tornar-se aliados importantes em vertentes maliciosas porque guardam alguma informação, por vezes confidencial, em determinada localização. Alguns desses exemplos são números de telefone, dados pessoais, e.g., número de cidadão, número fiscal, e onde queremos chegar é: “palavras-passe“, “usernames” e “endereços de e-mail” que são a chave de entrada para qualquer tipo de portal, rede social, caixa de e-mail, etc. onde cada utilizador reúne parte da informação presente no seu dia-a-dia.

Notar que atualmente já existe muito trabalho de segurança na vertente da autenticação, nomeadamente com alguns métodos melhorados de autenticação, como é o caso do 2FA (Two Factor Authentication), no entanto nem todos os portais e/ou serviços possuem esse mecanismo ativo, ou até mesmo o utilizador por esquecimento e desleixe não colocou o pisco nas definições de conta para ativar esse tipo de verificação de dois passos (o que é recorrente acontecer, porque é “chato” e uma “seca”). Este era um assunto demasiado extenso e o artigo não tem o objetivo de abordar esta vertente da segurança informática.

Sempre que existe um novo registo no clipboard, o clipboard manager insere mais um registo no seu armazenamento. Neste caso de estudo, o Parcellite usa um ficheiro denominado “history” para salvaguardar e apresentar ao utilizador todas as entradas CTRL+C. Parece claro que esta abordagem pode ser problemática para a segurança do utilizador e mesmo para a segurança de outras aplicações usadas para diversos contextos, como é o caso do Keepass. Esta ferramenta é um gestor de palavras-passe e serve para guardar palavras-passe. É um programa de computador bastante sofisticado e utiliza diversos mecanismos da criptografia moderna para salvaguardar as palavras-passe numa base de dados criptográfica. O exemplo abaixo apresenta um esquema elaborado do cenário descrito.

These pieces of software are a huge power boost for the productivity of day to day tasks. However, design and software architecture flaws can become important allies in malicious aspects because them keep some information, sometimes confidential, at your storage location. Some of these examples are the phone numbers, personal data, e.g., citizen number, tax number, and the dangerous field of: “passwords”, “usernames” and “email addresses”, which are the master piece to access to any type of website, social network, e-mail box, etc. and represents part of the user life.

On the other hand, keep in mind that nowadays there has been done much work in the authentication context, particularly with some improved authentication methods, such as the 2FA (Two Factor Authentication), however not all portals and / or services have activated this mechanism, or even the user by forgetfulness did not enabled this kind of two-step verification (which is recurrent because it is “boring” and a “total dry”). This represents an extensive subject and this article does not intend to address these information security aspects.

Whenever there is a new record in the clipboard, clipboard manager inserts another record in its storage. In this case of study, Parcellite uses a file called “history” to safeguard and present the user with all the CTRL + C inputs. It is clear that this approach may be problematic for the user’s safety and security even for other applications, such as Keepass. This last tool is a password manager and is used to store passwords. It is a very sophisticated computer program and uses various mechanisms of modern cryptography to safeguard passwords in a cryptography database. The example below shows an elaborate scheme of the described scenario.

untitled-diagram

  1. O utilizador possui inúmeras palavras-passe guardadas no gestor de palavras-passe. Entre o utilizador e o gestor existe um voto de confiança uma vez que este possui bastantes mecanismos sofisticados no que toca à forma como as palavras-passe são armazenadas e na forma como elas são difundidas/enviadas entre Keepass e clipboard (o Keepass usa mecanismos próprios de segurança, ver documentação oficial para mais detalhes).
  2. O Keepass desencripta a palavra-passe selecionada pelo utilizador, envia-a para o cliploard durante x segundos e o utilizador cola a mesma no formulário de autenticação. Ao mesmo tempo o clipboard manager é um agente ativo e também obteve uma cópia da mesma.
  3. O daemon do clipboard manager envia a palavra-passe para o ficheiro de armazenamento, neste caso um ficheiro de texto sem qualquer mecanismo de segurança, i.e., apresenta o seu conteúdo em texto limpo.
  4. O daemon refresca a view do widget e envia todas as entradas do ficheiro (ver imagem abaixo).

 

  1. User has many passwords stored in the password manager. Between the user and the manager there is a bond of trust, as this has quite sophisticated security mechanisms in relation to how passwords are stored and how them are sent between KeePass and clipboard (see the official documentation for details).
  2. KeePass decrypts the password selected by the user, sends it to the clipboard during x seconds and paste it in the authentication form. At the same time the clipboard manager is an active agent and also obtains a copy of the password.
  3. The clipboard manager daemon sends the password to the storage file, in this case a text file without any security mechanism, i.e. displays the content in plain text.
  4. The daemon refreshes the widget view and delivers all the file entries (see image below).

keepass

password

Na imagem acima, que apresenta a view do Parcellite, na primeira e segunda posição aparecem a palavra-passe e e-mail guardados de forma segura no Keepasse e agora também armazenados no ficheiro de histórico do gestor de clipboard.

In the previous image, which shows the view of Parcellite, in the first and second position you will find the password and email securely saved in Keepasse and now also stored in the history file of the clipboard manager.

Problema de segurança / Security problem

Quando um utilizador faz uso de um gestor de palavras-passe é visivel que este se preocupa minimamente com a segurança das suas palavras-passe, uma vez que guardam o segredo do cofre de uma vida de qualquer pessoa que use e abuse de serviços online (o utilizador até gerou uma palavra passe segura com 25 carateres)No entanto, um gestor de clipboard, e o Parcellite em específico, não detém mecanismo de proteção de dados, e estes são copiados e armazenados no seu estado mais primata num ficheiro de texto, onde não é efetuado qualquer tipo de mecanismo de segurança e criptografia, apenas algumas derivações de algumas partes da nova entrada.

When users uses a password manager it is a clear signal that they care minimally about the security of their passwords, since they are keeping safe their secrets of life. However, a clipboard manager, and Parcellite in particular, does not have data protection mechanisms, and passwords are copied and stored at its primate state in a text file and is not made any kind of security protection and encryption, just a few derivations of some parts of the new entry.

[root]$ cat history 
1.QVlLoZL2QVlLoZL2WKBql3MA9sghMzE0E2[email protected]@teste.pt8http://khttp://keepass.info/O+Widget
(Widget
(view that exhibits
(...)

O Parcellite guardou a seguinte palavra-passe no ficheiro de histórico / Parcellite stored the next password in the history file: QVlLoZL2QVlLoZL2WKBql3MA9sghMzE0E2

A palavra-passe original é a seguinte / Initial password:QVlLoZL2WKBql3MA9sghMzE0E

A derivação usada é bastante simples / Used derivation:

QVlLoZL2QVlLoZL2WKBql3MA9sghMzE0E2

QVlLoZL2 + QVlLoZL2 + WKBql3MA9sghMzE0E + 2

Copiou os 8 primeiros digitos duas vezes, em seguida vem a restante palavra-passe e um digito (2) no final. Uma derivação bastante simples que é o mecanismo de proteção usado neste software.

Copied the first 8 digits twice, then comes the remaining password and a digit (2) at the end. A very simple derivation that is the protection mechanism used in this software.

Para o exemplo aminhapassword o Parcellite fez a seguinte derivação: minhapaaminhapassword2 

Eliminou o 1 carater (a) + primeiros 7 carateres + restante password + adicionou um 2.

Outro exemplo: benfica Derivação: enficabenfica

Eliminou o 1 carater (b) + primeiros 6 carateres + restante password

Último exemplo: estrela Derivação: estrelaestrela3

repeticão da password + adicionar 3

 

For the example aminhapassword the Parcellite made the following derivation: minhapaaminhapassword2

Delete one character (a) + first 7 characters  +remaining password + added a 2.

 
Another example: benfica Derivation: enficabenfica

Delete the character 1 (b) + first 6 characters + remaining password

 
Last example: star Derivation: estrelaestrela3

Repeat password + add 3

Como é evidente, o mínimo que este gestor de clipboard faz é permutar alguns carateres da string de entrada, neste caso a palavra-passe, o que à partida parece “confundir um pouco” as coisas, mas na verdade torna-se fácil “decifrar o conteúdo”. O utilizador quando pensa numa palavra-passe, e sendo ele um humano, a palavra-passe tem um padrão e um significado (pelo menos na maioria das vezes). No caso da palavra-passe benfica, ou até estrela, apesar das repetições é evidente que apesar da derivação “enficabenfica”, quando analisada por um ser racional, um dos primeiros testes de autenticação maliciosos a efetuar seria “benfica” pois é a palavra forte, aquela que se destaca. Para os outros casos de igual maneira.

Visto que o ficheiro de histórico possui as permissões: -rw-r–r– , pode ser lido por qualquer utilizador ou script, e pode ser um problema de segurança extremo para o utilizador.  E.g., qualquer script em Python, Pearl, Ruby, ou até mesmo Bash Shell malicioso a correr na maquina e a ler diariamente todas as entradas do ficheiro pode  enviá-las para um Web Service (WS) e este é um possível cenário malicioso.

Outro cenário malicioso possível é obter toda a informação desse ficheiro de histórico e replicá-lo numa outra máquina com o Parcellite instalado. Na vertente maliciosa seria um script malicioso a correr diariamente e a enviar o ficheiro na integra via WS e usar a widget para visualizar o seu conteúdo. Esta última solução evita ao sujeito malicioso ter que analisar as permutações efetuadas uma vez que o ficheiro de histórico não é cifrado nem exclusivo.

This clipboard manager swaps some characters from the input string, namely the password with the objective to confound a little. In fact, it is easy to decipher the content. When a password is created by a human entity it has a pattern and a meaning (at least the majority). In the case of benfica or even estrela password, despite all repetitions it is evident that although the derivation enficabenfica seems to be confusing, when it is analyzed by a human the first malicious authentication test is naturally benfica, because it is the strongest word. For other cases the same applies.

Since the history file has the following permissions: rw-r – r–, it can be read by any user or script and represents a huge security problem. E.g., a malicious script in Python, Pearl, Ruby, or even Bash Shell can run in the machine and read daily all the file entries and send them via a Web service (WS) for the user with malicious intent.

Another possible malicious scenario is to get all the information of this history file and replicate it in another machine with the Parcellite installed. The process is the same as presented above. With this scenario the malicious guy does not have to analyze the permutations reflected in the history file.

Possíveis correções / Possible Fix

Algumas soluções para melhorar este problema são as apresentadas abaixo.

  • Usar um ficheiro de histórico cifrado, onde a aplicação tivesse inteligência suficiente para cifrar e decifrar o conteúdo. Esta solução não resolveria a tentetiva de reproduzir o ficheiro de histórico noutro computador.
  • Nos mesmos moldes da primeira opção, uma base de dados criptográfica (SQLite).
  • O ficheiro de histórico deter uma chave mestra, onde para correr o ficheiro fosse necessária uma palvra-passe ou algum identificador (MAC, etc.) que identificásse a priori o proprietario do conteúdo.
  • Etc.

 

Some solutions to improve this problem are shown below.

  • An encrypted history file, content encrypted and decrypted by the application. This solution does not solve the attempts of reproducing the history file on another computer.
  • In the same way as the first option, a cryptography database (SQLite).
  • The history file holds a master key, where to run the file a password is required or some identifier (MAC, etc.) to identify the owner of the content.
  • Etc.

 

De notar que é possível perceber quais as derivações usadas quando uma nova entrada é guardada no ficheiro de histórico, e até todo o funcionamento deste software uma vez que é um programa open-source e todos os utilizadores podem contribuir para o seu melhoramento.

Note that this software is open-source and all the source code is availability for the community, including all the code related with the permutation of input strings.

Fonte / Reference: https://sourceforge.net/projects/parcellite/