Sei sulla pagina 1di 4
Sistemas Operativos Nombre y apellido: Depnctamento de Computacién = FCEyN = UBA, N® order LU. Cant. hojas: ‘ Serunido cuatrimestro de 2023 : TT? [3 [a [Now Segundo parcial ~ 28/11 - Segundo cnntrimesire do 2023 [Numeco Ins hojas entregadas. Coinplete en tn palmern baja Un eantidaa total de hajns entrogadnn. 1+ Batregue esta ho Junto al oxaies, Ia two #6 Icluye en ln ean total de bolas entrogadas, Cada elercicio debe toallantse en ho}as separa y numeradas. Dabe Mentiionre cata hoje con norte, apeltide, LU y ntimero de one, + Cada egw paenorsti debe eater bin aplenty Joatifenda ve entllana Oblgntorio! ‘Tad suposicin ¢ decinin ue tome deberd justfienrn adecuadamente. Si Ia misma no a8 correcta 0 no se condice com el enunciads no see toronte como wally ser correla acon Lm deentackin de los exéinenes eorreghton ex pertonnl. Loe pelos do eevilén se sortogio de aul Loe parsines tenen troswotas: I (Inaufitente: 59 pts, A= (Aprobndo condicional): 60 a 64 pts x A (Aprobavto} 65 a 200 pte No ve puede aprebar con A ams parciales. Los recuneratoris tienen los notas 0 m 04 pia y A: G5 m 100 pts. harén por esrita, antes do retire examen Ejercicio 1 Siktemns de Archivos (25 puntos) Qehisme Bayh) 2 ba bates En un tipico sistema tipo UNIX contamos con el comando 2s que nos permite listar el contenido de un directorio. Si tiliza la opeidn -R 0 -recursive, el comando lista recursivamente el contenido de los subdirectorios. Por ejemplo, si jone ln siguiente estructura de directorio: /zuta/a/un/directorio/ | archiver | archive | un_subdirectorio/ 11 arenives 11 archivos {I archives | otro_subdirectorio/ | | fanbien_subdirectorio/ t ' 1 5 | archives I archives | archiver archivos Obtendrianos un resultado parecido al siguiente, al ejecutar el comando 1s -R /ruta/a/un/directorio/: archivo archive? un_eubdirectorio/ archives archivos archivos otro_subdirectorio/ taxbiensubdirectorio/ archivo’ archived archivoT archivos a) Se solicita escribir el preudoeddigo de In fun que 18 -R path, La fuueién provista del Asumnir que ne tiene In eonstante BLOCK SIZE ¢ tamaiio de entrada ath) que deberd toner ol mismo comportamiento de archivos tipo EAT. : n el tamafio de blogue, la constante FAT.DIR_ENTRY_SIZE con el directorlo y las siguientes faneiones y estructuras ya implenentadas: 1 Vor 1a FAT cono un arreglo 1/ Andsco 1 corroupende ab bloque du disco 4 77 FAT(A) indica el Dloque siguiente al bhoque 4 unsigned int (] FAT; I entrada de divectorio ided Escaneado con CamScanner Segundo cuatrimestre de 2023 Sistemas Operatives ~ Segundo parcial” struct FATDirEntry( char filonane(s) ; char extension[3); char attribute; // Oxt; archive, 0x2: directory. ‘unsigned short starting cluster; // priner bloque unsigned int aiz: > /fdado wa path, dovuclve su primer bloque ‘unsigned int FATFS::get_first_block trox_path(const char + path); Se puede considerar quo BLOCK. SIZE os miltiplo cle FAT_DIR_ENTRY.SI2E. 'b) Explicar en lenguaje natural las diferencias entre un sistome de archivos FAT y uno Ext2 haciendo foco especial- mente en el manejo de dircetorios, y detallar eémo esas difereniens cambinn la funcién implementada en el inciso anterior para un sistema de archives tipo Ext2. Bjercicio 2. Drivers (25 puntos) El doctor Augusto Losano, experto en tecnologia aplicada a logistica, empezé a trabajar en BaaderEnvios, una ‘nueva empresa de distribucién de paquetes. Inspirados en el disefio de otras empresas, se esté construyendo una cen inteligente de transferencias cerea de Ciudad Universitaria. Diferentes camiones recogen los paquetes de sus clientes, Megan a la central y descargan su contenido, Estos paquetes,son puestos en cintas transportadoras, donde diferentes personas, al final de su recorrido, agarran los paquetes y los clasiican, Lacinta transportadora tiene un motor bastante simple y disereto (marca Sumoza Corporation) que tiene la eapacidad de regular la velocidad a Ja cual se miyeve la cinta,’ Cuenta con 3 modos: 0 para nula velocidad, 1 para baja velocidad y 2 para velocidad répida. También se dispone de una balanza que mide custo peso esté soportando la cinta transportadora actualmente. Un detalle que noté el doctor Augusto, es que si la cinta contiene demasiado peso, se debe regular la velocidad del motor para no forzatlo demasiado, Ademés, desde In ultima invasién (hace unos meses) de anfibios saboteadores provenientes de los pabellones de la facultad, muchos dispositivos sufrieron dafos, y la balanza, cada cierto tiempo, devuelve valores incorrectos. La empresa tiene un dispositivo viejo (un beoper) que avisa a los téenicos cuando se produce un problema para que vengan a revisarlo lo antes posible. El doctor Augusto quiere poder coordinar los diferentes dispositivos mediante software con una computadora con Linux y nos encargé a nosotros la tarea: Nos pide disefiar un driver para cada dispositivo (balanza, beeper, motor) que, cumpla las siguiente caracteristi 1 Se tiene que leer por entrada estindar, valores enteros positives, To, Ti, Ta = Sila balanza detecta que el peso es mayor a Tz, entonces hay que detoner la cinta porque no soporta més peso. Como esta situacién es problemétiea, hay que avisar por el beeper con el valot EXCEEDED-WBIGHT. + Si el peso esté entre T; y Ta, el motor tiene que ir a una velocidad lenta, + Sil peso es menor que 7, el motor tiene que ir a una velocidad répida, + Sila balanza da 0, se tione que parar el motor ya que no hay paquetes que transportar. + Si la balanza da un resultado nogativo, significa que hubo un inconvenionte. Hay que volver a leer 10 veces el dispositivo, una cada 100ms. Asumir que Ia computadora cuenta con timer interno que podeimos usar con interrupciones. $i en alguna de Ins 10 veces arroja un resultado valido, lo tomamos como el valor correcto. $i en ningiin caso nos devuelve algo vilido, hay que avisar por el beeper ol valor BROKEN.B. El acceso a los dispositivos es lento y consume mucha energia, asf que se quiere ininimizar los accesos. No podemos usar sleop() ni funciones similares Se pide: » iro de ineaciénguv dberh corer tata ipo Gruen, poling, et) Detar cs 2de4 Escaneado con CamScanner sxe unas Operati = Seg peratives’~ Segundo’ parcial Segundo cuatrimestie de 2023 Amplementar cualquier funcis i : ier funci6n o estructura audicional que considere siecesaria (tener en cuenta que en el kernel no *Niste la ibe), Se podrén utilizar ademss Ins siguientes funciones vistas en la naa a unsigned long copy_froa_user(char +t, char ¢from, uint size) unsigned Long copy_to_user(char *to, char efron, wint size) Ant TX (int regmua) void OUTCint regmum, int value) y void Hkmadloc(uint size) void Kfreo(void +but) void roquest_irg(int irquum, void handler) void freo_irq(int irqmua) void sema_init(somaphore *sea, int value) void soma_vait(somaphore ¥s0a) void sexa_signal (senaphore *sen) void neanap(void *source, void dest, int size) void nexunnap(void *source) Rjercieio 8. Sistemas Distribuide : (25 puntos) Se tiene una conexién de nodos de un sistema distribuido en donde se requiere aplicar el algoritme de Paxos. El conjunto de nodes se fraccioné en dos partes, quedando el nodo C aislado, Ay B en un conjunto y D y,B, en otro. El siguiente esquema muestra el estado del sistema para ese momento especifico de separacién. Figura 1: Esquema de conexién de nodos en un sistema distribuido ‘a) Se solicita que indique cuéles son los pasos que se realizarian al aplicar el algoritmo de Pax cconexién entre los nodes C, D y B, para que estos 08 si se restablece la rhodes lleguen a un consenso. {Cual es el resultado final del 1b) Si después se restablece la comunieacién entre A, By C {iCusles son los pasos que sigue el algoritmo de Paxos? UEs posible elegit Foo? Bjercicio 4. Seguridad: (25 puntos) Se ha detectado una vuluerabilidad eritica de *Path Traversal” en la APT de R-R conocida como *StringFormat’, la eual permite comportamientos no autorizados mediante In manipulacién inadecuada de las entradas de datos. Al revisar los registros del sistema, se descubrié que algunos usuarios eran eapaces de acceder a informacién confidencial de otros usuarios, incluyendo detalles comno st ‘al modificar el path del documento como se muestra a eontinuacién: 1 ‘comparable a In vulnerabilidad salarios y dirceciones personales. Esto se lograba ‘CET /api/Leer docusentorusuario_sdeidékdocunento, ./\d3/éatos craton. tet ‘Lo que podemos ver en este request, es que hay dos claves (Ilamadas query params), documento y usuario:id, con valores id y . /4€3/datessecratos.txt respoctivamente ‘Se solicita una revisién exhaustiva del eédigo para idéntificar la presencia de otras posibles vulnerabili 3de4 Escaneado con CamScanner i vos - Soigundo Segundo cuatrimestre de 2023 Sistemas Operativos - Segundo past cant st bs C4e] 2a shee MRE ‘ering CARICTERES_PROMIBIDOS = 1 2 3 void eanttizarRecuretve(const’atd::etring kentrada) { 4 nar buffer (20) 5 ‘ize.t posicion = entrada,find_firet_of (CARACTERES PROMIBIDOS) + 6 1 8 1/ $1 encontranos'un carsctar prohibide so-elieina, npoo, indica “1 Af (posicion I= ata: seteing: :mpon) { 0 f@ strepy (buffer, entrada.substr(0, pooicion + 1).c.str()); 10 inet (LG) caractor prohibige ancontrndo: %e on Ke\n", entrada(postcion], butter); n trade erasa(posicton, 1); 32 sanitizarRocurelvo(entrada, oubetr(ponicion + 19) 15 > wend 15 6 " eeplibe Server evr: 18 19 ‘char MAK,LENGHT = 1005 20 a svr.Get("/api/leer documento’, ()(const etplib: Requests req, teplibs Reepooset zs) ¢ 2 std::string docunento = roq.get_paraa.value('docwonto"); // Rotorne input de 18 API pera Ja clave ocunento 2 ‘td: string usuariolid = req.get.paraa.value("wouario,t4")} // {dem id unverso 2 3 Vesscrvarsdra(usuario sd); // Revies quo ol vauario existe y #¢ puede tomar como una funcién segura 26 sanieazarRecarsive(docunento) 8 V soost::tilesysten!:path'rute = boost: :fienyaten::canonical DIRBISE + usuarso.14 + aocazent); Pa Sf (euta.string() f4nd(DIR_BASE) == 0 kk boost!:£4Lesyeten!rexiste(ruta)) 20 fetrean archivo(zuta.etring0)) at 1 content (etd; etring( (etd: 4etrennbut.tteratoréchar> (azchivo)), std Astreanbuf_iveratorcenas>()), “ext/glain’)3 2 71 Responde al vouario con el coatenide 46) arzhivo soLicitade , 3 3 char nensa e(4at:LENGH a ; 36 1 /fonciona cove prints, ‘pore guarda ol contedide dentro! de im buffer yasedo cone priser pardeetro st (© soprintf(aensaje, sizeof aensaje), *(LD2] Ruta accedida! Yo\s*, ruta.stringQ).c.str0)s 38 princ#(V7200=", meneaje) 39 yelse ¢ 40 os, e6t content (Acceso denegsdo", “text/plain"); a > 2 D: i 3 “4 avr Aston SERVER_ADDRESS.c.ets(), SERVER.PORT); 3 Puede asumnir que las funciones checkValidId y boost: :£i2esyetem son soguras, asf come las funciones de hetpliv. Ademés, req. get_paran_value(*“docunento’*) relorna un string con el input de la API para la key docunento. ‘Tampoco deben procuparse por el uso de res.set_content(..) y std: :ifstrean archivo(..). 4) Indique los problemas de seguridad (di existen) que permiten un exploit del sistema. tables restard pumtos \dicar problemas no explo: ») Proporcione ejemplos de entradas (inputs) que podrian ser utilizadas para explotar las vulnerabil ‘das en la API. Justificar. ©) Para cada vulnerabilidad existente iil impacto anal seguridad de la informmacign (incluir Path ‘Traversal). 4a) Para cada vulnerabilidad exiatente proponga unin solucién, Indieando e61no modificaria el e6digo en enso de eorres- 4 ponder (incluir Path ‘raversal). Justillear i idedes identifien- {aiolns sogiin los tres requisites fundamentales de la 4de4 Escaneado con CamScanner

Potrebbero piacerti anche