usb write access practice

24
Instituto Tecnológico Superior de Guanajuato . "USB Switch: Modificar permisos de escritura en discos removibles" Elaborado por: Cruz Gómez Daniel Salomón [email protected] https://github.com/Dreamylation Sistemas Operativos "3ºA" 09 de octubre del 2015

Upload: daniel-cruz

Post on 17-Feb-2016

250 views

Category:

Documents


0 download

DESCRIPTION

Práctica realizada para habilitar / deshabilitar permisos de escritura en USB.

TRANSCRIPT

Page 1: USB Write Access Practice

Instituto Tecnológico Superior de Guanajuato

.

"USB Switch: Modificar permisos de escritura en discos removibles"

Elaborado por:

Cruz Gómez Daniel Salomón

[email protected]

https://github.com/Dreamylation

Sistemas Operativos

"3ºA"

09 de octubre del 2015

Page 2: USB Write Access Practice

INTRODUCCIÖN

Hoy en día, es muy común el ir a un ciber-café y conectar nuestro dispositivo USB

para después recibir la sorpresa de que ya se infectó de un virus, incluso cuando

menos lo esperamos de las máquinas que menos esperamos suele pasar, vivir con

esta incertidumbre es motivo de preocupación y más aún si nuestro USB posee

información o datos valiosos.

Sólo basta con conocer que parte del registro de windows modificar para bloquear el

acceso de escritura a nuestra USB y de esta manera evitar que un virus modifique

nuestros archivos.

Es posible desactivar de forma manual los permisos de escritura en unidades

extraíbles, lo que el software de esta práctica hace, es de manera automática y con

el consentimiento del usuario, agrega al registro la llave necesaria para bloquear la

escritura en cualquier disco extraíble, sin embargo, se recomienda únicamente

insertar el USB con el software al PC infecta para primero bloquear el permiso y

después insertar la USB que será utilizada.

Page 3: USB Write Access Practice

II. OBJETIVO

A través de un software creado, cambiar los permisos de escritura en unidades

extraíbles tales como USB, HDD externos, etc. El software modificará y de ser

necesario creará una llave en el registro del sistema para lograr tal fin.

Page 4: USB Write Access Practice

III. MARCO TEÓRICO

El registro de WindowsEl registro es una base de datos en Windows que contiene información

importante acerca del hardware del sistema, programas instalados y

configuraciones, perfiles de cada cuenta de usuario, etc.

Normalmente no es necesario hacer cambios manuales al registro ya que los

programas y aplicaciones lo hacen de forma automática. Un incorrecto

cambio de valores en el registro puede llevar a la inutilización del sistema.

El registro posee una política para el uso de dispositivos extraíbles llamada

“StorageDevicePolicies”, en la cual se pueden cambiar los permisos de

escritura, lectura y control total de los dispositivos extraíbles; la llave que se

encarga de dichos permisos se llama WriteProtect la cual es de tipo DWORD

(32 bits).

Qt 5.5 (IDE)Qt es un entorno de desarrollo multi-plataforma para PC de escritorio,

sistemas embebidos y móviles. La plataforma está escrita en C++ y se utiliza

un preprocesador llamado MOC (Meta-Object Compiler) para introducir

características como las señales y los slots. Qt posee la capacidad de

generar widgets o formas a través de su librería QtQuick, lo cual lo convierte

en una excelente plataforma para desarrollar software.

Page 5: USB Write Access Practice

IV. METODOLOGÍA

1. Abrir Qt 5.5 y crear un nuevo projecto (Qt Widget 2) y darle un nombre al

proyecto.

2. Ir a MainWindows.UI para crear la interface.

a. Extender el widget base hasta obtener el tamaño deseado.

b. Buscar en la caja de widgets a la izquierda el widget de Graphics View,

arrastrarlo y extenderlo de tal manera que el widget principal y el

Graphics View tengan el mismo tamaño.

c. Busca el widget de Push Button, arrastrar dos de ellos encima de los

demás widgets. Asignarle un nombre a ambos botones.

3. Agregar libresrías al archivo mainwindow.cpp.

4. Crear las señales para ambos botones.

a. Clic derecho al primer botón y seleccionar go to slot; agregar la

instrucción para deshabilitar escritura.

b. Hacer lo mismo para el segundo botón.

5. Crear la función startup para mostrar datos de las unidades removibles en el

sistema.

6. Agregar función dentro de un Timer en el constructor de la clase para que la

función se ejecute cada 5 segundos.

Page 6: USB Write Access Practice

V. MATERIAL Y COMPONENTES EMPLEADOS

Hardware

Custom PC (AMD FX 4150, W 10).

Software

Qt 5.5 (IDE)

CMD Windows 10

Librerías usadas

QProcess

Clase para ejecutar programas externos y conmunicarse con elllos (usado

para ejcutar REG ADD).

QFile

Clase que provee una interface para leer desde y escribir a archivos.

QTextStream

Clase que provee una conveniente interface para leer y escribir texto.

QMessageBox

Clase que porvee una caja de diálogo para informar o preguntar al usuario y

recibir una respuesta.

QTimer

Clase que provee temporizadores repetitivos.

cstdlib

Clase de la librería standard de C (usada para acceder a System)

VI. DESARROLLO

Page 7: USB Write Access Practice

Abrir Qt Creator -> new Project -> Applications -> Qt Widget Application.

De esta forma crearemos un nuevo projecto basado en Widgets, le damos un

nombre al proyecto y le damos todas las opciones por defecto.

1.- “Crear nuevo projecto de widgets”.

Page 8: USB Write Access Practice

Una vez creado el pryecto, ir a la carpeta Forms y abrir el archivo mainwindows.ui,

este es el editor de formas para crear ventanas y botones.

2.-“Abrir mainwindows.ui”.

Page 9: USB Write Access Practice

En el editor de formas, expandimos el widget principal hasta que la ventana tenga el

tamaño deseado, buscamos el widget Graphics view en la caja de widgets de la

izquierda y lo arrastramos sobre el widget principal, Graphics View nos permite

insertar una imagen que cubra todo el widget; expandimos el Graphics View hasta

que abarque todo el widget principal. Para agregar una imagen de fondo, bastan con

ir a la propiedad de style sheet en la caja de propiedades del Graphics View

ubicado en la parte inferior derecha.

Agregamos 2 botones con el widget de Push Button.

3.- “Editor de formas”.

Page 10: USB Write Access Practice

Editamos el texto mostrada por los botones accediendo a su propiedad Text en la

caja de propiedades.

4.- “Editar texto mostrado”.

Page 11: USB Write Access Practice

Accedemos al archivo mainwindows.cpp y agregamos las librerías necesarias:

#include "QProcess"#include "QFile"#include "QTextStream"#include <cstdlib>#include "QMessageBox"

#include <QTimer>

5.- “Agregamos librerías a utilizar”.

Page 12: USB Write Access Practice

Volvemos al editor de formas y damos clic derecho en uno de los botones que

creamos, seleccionamos go to slot..

6.- “go to slot”.

Page 13: USB Write Access Practice

El go to slot nos permite crear un slot nuevo que funcionará como un evento que se

ejecutará cuando dicho botón sea oprimido. Dentro de esta función colocamos el

código para deshabilitar la escritura en unidades extraíbles.

void MainWindow::on_habilitar_clicked(){

QProcess::execute ("REG ADD HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\StorageDevicePolicies /v WriteProtect /t REG_DWORD /d 1 /f"); QMessageBox::information(0, "Escritura Deshabilitada", QString("Escritura Deshabilitada"));}

Nuestra función llama al método execute de la clase QProcess la cual permite

executar comandos de consola, el comando que ejecutamos es

REG ADD

Este comando nos permite agregar una llave nueva al registro.

El parámetro:

HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\StorageDevicePolicies

Agregará la llave en esa localización.

/v WriteProtect /t REG_DWORD /d 1

Esta parte creará una llave de nombre WriteProtect con tipo de dato REG_DWORD

y valor 1.

Finalmente, el parámetro ‘/f’, nos permite ejecutar la orden sin necesitar permisos

del usuario.

El siguiente comando es:

QMessageBox::information

Page 14: USB Write Access Practice

El cual es una librería de Qt para presentar cuadros de mensajes al usuario. Recibe

tres parámetros: puntero a evento, nombre de la ventana de mensaje, mensaje a

presentar. Este último debe estar en formato Qstring, por ello realizamos una

conversión explícita.

7.- “Agregamos los eventos al primer botón”.

Page 15: USB Write Access Practice

Hacemos lo mismo para el otro botón con la única diferencia que la llave será

creado con valor 0.

8.- “Se hace lo mismo para el otro botón”.

Page 16: USB Write Access Practice

Creamos una función Startup que nos servirá para mostrar la información de los

dispositivos extraíbles.

void MainWindow::startup(){ system("wmic logicaldisk where drivetype=2 get deviceid, volumename, description > %SystemDrive%\\data.txt"); QFile file("C:\\data.txt");

if (!file.open(QIODevice::ReadOnly)) { QMessageBox::information(0, "error", file.errorString()); }

QTextStream in(&file);

QString line = in.readAll();

ui->textEdit->clear(); ui->textEdit->setText(line);}

La función System nos permite llamar la consola de Windows y ejecutar un

comando, en este caso el comando es wmic logicaldisk. El cual presenta

información de todos los dispositivos de almacenamiento conectados, sin embargo

nosotros sólo queremos mostrar unidades extraíbles, por lo cual agregamos los

siguientes parámetros:

where drivetype=2 get deviceid, volumname, description

Esto filtra los dispositivos a unidades extraíbles.

La última parte de los parámetros nos permite almacenar los datos arrojados por el

comando y guardarlos en una ubicación y archivo específico.

QFile file Crea un archivo propio de Qt con el nombre de “data.txt”.

La siguiente instrucción nos permite abrir el archivo, en caso que el archivo no

exista o esté corrupto nos arrojará un mensaje diciendo que el archivo no existe.

if (!file.open(QIODevice::ReadOnly)) {

Page 17: USB Write Access Practice

QMessageBox::information(0, "error", file.errorString()); }

Finalmente las últimas instrucciones:

QTextStream in(&file);QString line = in.readAll();

ui->textEdit->clear();ui->textEdit->setText(line);

Hacen un parse de tipo de datos, primero creamos una corriente de texto con

QTextStream usando como base el archivo que creamos con QFile. Después

leemos cada línea del archivo y la convertimos a un string de Qt con la línea:

QString line = in.readAll();

Las última líneas nos ayudan a mostrar el texto en un cuadro de texto.

Page 18: USB Write Access Practice

9.- “Agregamos función Startup”.

Finalmente, llamamos a la función desde el constructor de la clase principal y

hacemos el llamado dentro de un temporizador para que la información se actualize

cada 5 segundos.

startup();QTimer *timer = new QTimer(this);connect (timer, SIGNAL(timeout()), this, SLOT(startup()) ); timer->start(5000);

Se hace un primer llamado a la función startup y despues se crea un temporizador el cual se conecta a la función; se inicializa el temporizador en 5000ms.

10.- “Temporizador”.

Page 19: USB Write Access Practice

VIII. CONCLUSIONES

Usando el editor de registro de Windows ya sea de forma manual o a través de la

consola, podemos modificar diversos permisos que puedan incrementar nuestro

nivel de seguridad, sin embargo, existen diversos virus que trabajan desde el

registro haciendo la tarea de restaurar nuestra PC aun más ardua. Por ello se

recomienda deshabilitar el acceso al registro a cualquier programa que el usuario no

haya dado permisos.

Cuando se trabaja con software, a lo largo de la historia de Windows se ha

empezado a ver cierto problema o inconveniente, y eso es el nivel de permisos que

el sistema le da a aplicaciones de terceros. En este caso, es completamente

necesario que el usuario ejecute el programa en modo administrador, ya que de otra

manera los comandos de consola no se ejecutarán con el nivel de permisos

necesario como para editar el registro o crear archivos en la raíz del sistema.

Page 20: USB Write Access Practice

IX. BIBLIOGRAFÍA

Microsoft(2015), What is a registry?, windows.microsoft.com, Recuperado el 08/10/2015,URL: http://windows.microsoft.com/en-us/windows/what-is-registry-editor#1TC=windows-7

Microsoft Support(2015), How to add, modify, or delete registry subkeys and values by using a .reg file, support.microsoft.com, Recuperado el 08/10/2015, URL: https://support.microsoft.com/en-us/kb/310516

Qt Documentation (2015), Qt Documentation, doc.qt.io, Recuperado el 08/10/2015, URL: http://doc.qt.io/