AUDITORIA ESPECIFICA SEGURIDAD LOGICA Y FISICA SISTEMAS ORIENTADOS A OBJETOS Presentado por: ANDRÉS RINCÓN MORENO 1700412318 JORGE ARMANDO MEDINA MORALES 1700321660 Profesor: Carlos Hernán Gómez. Asignatura: Auditoría Sistemas. UNIVERSIDAD DE CALDAS FACULTAD DE INGENIERÍAS Programa de Ingeniería en Sistemas y Computación MANIZALES 2010 INTRODUCCION AL TEMA DE AUDITORIA 1 SEGURIDAD INFORMATICA Garantizar que los recursos informáticos de una compañía estén disponibles para cumplir sus propósitos, es decir, que no estén dañados o alterados por circunstancias o factores externos, es una definición útil para conocer lo que implica el concepto de seguridad informática. En términos generales, la seguridad puede entenderse como aquellas reglas técnicas y/o actividades destinadas a prevenir, proteger y resguardar lo que es considerado como susceptible de robo, pérdida o daño, ya sea de manera personal, grupal o empresarial. En este sentido, es la información el elemento principal a proteger, resguardar y recuperar dentro de las redes empresariales. ¿Por qué es tan importante la seguridad? Por la existencia de personas ajenas a la información, también conocidas como piratas informáticos o hackers, que buscan tener acceso a la red empresarial para modificar, sustraer o borrar datos. Tales personajes pueden, incluso, formar parte del personal administrativo o de sistemas, de cualquier compañía; de acuerdo con expertos en el área, más de 70 por ciento de las violaciones e intrusiones a los recursos informáticos se realiza por el personal interno, debido a que éste conoce los procesos, metodologías y tiene acceso a la información sensible de su empresa, es decir, a todos aquellos datos cuya pérdida puede afectar el buen funcionamiento de la organización. Esta situación se presenta gracias a los esquemas ineficientes de seguridad con los que cuentan la mayoría de las compañías a nivel mundial, y porque no existe conocimiento relacionado con la planeación de un esquema de seguridad eficiente que proteja los recursos informáticos de las actuales amenazas combinadas. El resultado es la violación de los sistemas, provocando la pérdida o modificación de los datos sensibles de la organización, lo que puede representar un daño con valor de miles o millones de dólares. 1.1 Seguridad física Es muy importante ser consciente que por más que la empresa sea la más segura desde el punto de vista de ataques externos (hackers, virus, ataques de DoS, etc.); la seguridad de la misma será nula si no se ha previsto como combatir un incendio o cualquier otro tipo de desastre natural y no tener presente políticas claras de recuperación. La seguridad física es uno de los aspectos más olvidados a la hora del diseño de un sistema informático. Si bien algunos de los aspectos de seguridad física básicos se prevén, otros, como la detección de un atacante interno a la empresa que intenta acceder físicamente a una sala de cómputo de la misma, no. Esto puede derivar en que para un atacante sea más fácil lograr tomar y copiar una cinta de backup de la sala de cómputo, que intentar acceder vía lógica a la misma. Así, la Seguridad Física consiste en la “aplicación de barreras físicas y procedimientos de control, como medidas de prevención y contramedidas ante amenazas a los recursos e información confidencial”. Se refiere a los controles y mecanismos de seguridad dentro y alrededor del centro de cómputo, así como los medios de acceso remoto al y desde el mismo; implementados para proteger el hardware y medios de almacenamiento de datos. Las principales amenazas que se prevén en Seguridad Física son: 1. Desastres naturales, incendios accidentales, tormentas e inundaciones 2. Amenazas ocasionadas por el hombre 3. Disturbios, sabotajes internos y externos deliberados. Evaluar y controlar permanentemente la seguridad física de las instalaciones de cómputo y del edificio es la base para comenzar a integrar la seguridad como una función primordial dentro de cualquier organismo. Tener controlado el ambiente y acceso físico permite: Disminuir siniestros Trabajar mejor manteniendo la sensación de seguridad Descartar falsas hipótesis si se produjeran incidentes Tener los medios para luchar contra accidentes 1.2 Seguridad lógica Luego de ver como el sistema puede verse afectado por la falta de seguridad física, es importante recalcar que la mayoría de los daños que puede sufrir un centro de cómputo no será sobre los medios físicos sino contra información por él almacenada y procesada. Así, la seguridad física sólo es una parte del amplio espectro que se debe cubrir para no vivir con una sensación ficticia de seguridad. Como ya se ha mencionado, el activo más importante que se posee es la información, y por lo tanto deben existir técnicas, más allá de la seguridad física que la asegure. Estas técnicas las brinda la Seguridad Lógica. La Seguridad Lógica consiste en la “aplicación de barreras y procedimientos que resguarden el acceso a los datos y sólo se permita acceder a ellos a las personas autorizadas para hacerlo”. Existe un viejo dicho en la seguridad informática que dicta que “todo lo que no está permitido debe estar prohibido” y esto es lo que debe asegurar la Seguridad Lógica. Los objetivos que se plantean serán: 1. Restringir el acceso a los programas y archivos 2. Asegurar que los operadores puedan trabajar sin una supervisión minuciosa y no puedan modificar los programas ni los archivos que no correspondan. 3. Asegurar que se estén utilizando los datos, archivos y programas correctos en y por el procedimiento correcto. 4. Que la información transmitida sea recibida por el destinatario al cual ha sido enviada y no a otro. 5. Que la información recibida sea la misma que ha sido transmitida. 6. Que existan sistemas alternativos secundarios de transmisión entre diferentes puntos. 7. Que se disponga de pasos alternativos de emergencia para la transmisión de información. 2 SISTEMAS ORIENTADOS A OBJETOS El software orientado a objetos apoya ciertos aspectos que mejoran la robustez de los sistemas, este software requiere de ciertas características mínimas para considerarse orientado a objetos y finalmente debe integrarse como parte de un lenguaje de programación. Estos temas son descritos a continuación. 2.1 Aspectos que Mejoran la Robustez de los Sistemas Existen razones un poco más técnicas que motivan a la orientación a objetos, como son la abstracción, modularidad, extensibilidad y reutilización. Abstracción. Una de las consideraciones más importantes para tratar el problema de la complejidad del software es el concepto de abstracción. La idea básica de la abstracción es reducir el nivel de primitivas o representaciones básicas necesarias para producir un sistema de software. De manera sencilla esto se logra mediante el uso de lenguajes de programación que contengan estructuras de datos de alto nivel. En otras palabras, la pregunta opuesta sería: ¿por qué no programar en código binario, o sea 0s y 1s? La respuesta es que ninguna persona sería capaz de comprender una aplicación al verse el código y por otro lado requeriría de programas extremadamente extensos para representar la aplicación completa dada la simplicidad de la primitiva básica. Los sistemas de software construidos con lenguajes de programación de más alto nivel reducen el número total de líneas de código por lo tanto reducen su complejidad. Con la programación orientada a objetos se definen dos niveles de abstracción. El nivel más alto, el de los objetos, es utilizado para describir la aplicación mientras que el nivel más bajo, el de los datos y las funciones, es utilizado para describir sus detalles. Modularidad. Otro aspecto importante de una aplicación es su modularidad. La modularidad de un sistema depende de sus abstracciones básicas, lo cual permite dividir el sistema en componentes separados. Al tener abstracciones de mayor nivel la modularidad de los componentes también es de mayor nivel reduciendo el número final de componentes lo cual a su vez simplifica su manipulación y mantenimiento. Con la orientación a objetos, la modularidad del sistema se da en base a objetos, un nivel más alto que los datos y funciones tradicionales. El número final de módulos, o sea objetos, es menor que el número original de datos y funciones. Esto reduce la complejidad de la aplicación ya que el programador piensa en menos componentes a la vez descartando detalles innecesarios. Extensibilidad. En general, los sistemas de software tienden a ser modificados y ampliados durante el transcurso de su vida. Si un programa no se modifica es porque nadie lo quiere usar, por lo cual uno se pregunta: ¿Qué tan larga es la vida de un sistema? En otras palabras, ¿cuándo se vuelve más costoso mantener un sistema de software que desarrollar uno nuevo? La extensibilidad tiene como objetivo permitir cambios en el sistema de manera modular afectando lo mínimo posible el resto del sistema. Con la orientación a objetos, los cambios se dan a dos niveles: modificación externa e interna de los objetos. Los cambios internos a los objetos afectan principalmente al propio objeto, mientras que los cambios externos a los objetos afectarán de mayor forma al resto del sistema Reutilización. Una de las maneras de reducir la complejidad del software es mediante la reutilización o re uso de partes existentes. La pregunta que uno se hace es: ¿cuánto puedo reutilizar del código y sistemas ya existentes? El re uso de código reduce el tiempo del diseño, la codificación, y el costo del sistema al amortizar el esfuerzo sobre varios diseños. El reducir el tamaño del código también simplifica su entendimiento, aumentando la probabilidad de que el código sea correcto. Mediante el re uso de código se puede aprovechar componentes genéricos para estructurar bibliotecas reutilizables, y así lograr una estandarización y simplificación de aplicaciones por medio de componentes genéricos prefabricados. Tradicionalmente, los componentes o librerías de software han existido por muchos años como procedimientos y funciones, particularmente para aplicaciones numéricas y estadísticas. Y aunque el re uso es posible en lenguajes convencionales, los lenguajes orientados a objetos aumentan substancialmente las posibilidades de tal re uso, gracias a la modularidad de los sistemas. 2.2 Características Mínimas de los Lenguajes Orientados a Objetos A continuación se describirá los conceptos básicos que hacen que un lenguaje sea considerado efectivamente orientado a objetos. En general, cuatro aspectos deben existir en tal lenguaje: encapsulamiento, clasificación, generalización y polimorfismo. Encapsulación. Encapsulación o encapsulamiento es la separación de las propiedades externas de un objeto, o sea su interface, correspondiente a la interface de sus funciones, de los detalles de implementación internos del objeto, o sea sus datos y la implementación de sus funciones, como se muestra en la figura. Esta separación es muy importante. Todo el detalle, al estar encapsulado, es desconocido por el resto de la aplicación, limitando el impacto de cualquier cambio en la implementación del objeto, ya que los cambios a las propiedades internas del objeto no afectan su interacción externa. Obviamente cualquier cambio en la propia interface del objeto afectaría potencialmente a todo el resto de la aplicación. Sin embargo el porcentaje de código dedicado a las interfaces es por lo general “muchísimo” menor que el porcentaje total de líneas de código utilizados para datos e implementación de funciones. De tal manera se reduce la complejidad del sistema protegiendo los objetos contra posibles errores, y permitiendo lograr de mejor manera extensiones futuras en la implementación de los objetos. Clasificación. En todo programación orientada a objetos la clasificaciones un aspecto fundamental, donde objetos que contienen estructuras similares, correspondiente a tipos de datos y funciones similares, se clasifican como pertenecientes a la misma clase de objeto. Nótese de que hablamos de tipos de datos similares, dado que los valores de los datos aún pueden cambiar en objetos de clase similar. ¡Si todos los valores de los datos tuvieran que ser también iguales entonces todos los objetos de una misma clase serían idénticos, algo que limitaría el alcance de la clasificación además de ser muy aburrido. Generalización. Si tomamos como base la clasificación, y consideramos que no sólo los objetos similares pueden clasificarse, sino también las propias clases de los objetos, entonces se define la generalización o especialización de clases. Mediante la generalización, clases de objetos con estructura y comportamiento similar se reutilizan en la definición de las nuevas clases. Estas nuevas clases se consideran clases más especializadas o subclases mientras que las originales se consideran clases más generales o superclases. El mecanismo para describir jerarquías de generalización de clases se conoce como herencia, un término muy utilizado en la orientación a objetos, se dice que una subclase hereda de una superclase. La herencia puede ser sencilla, donde una subclase hereda de una sola superclase directa, o múltiple, donde una subclase hereda de múltiples superclases directas. La herencia es también una forma de reutilización de código, ya que se aprovechan descripciones de clases de objetos para luego definir clases de objetos parecidos. Polimorfismo. Quizás el concepto más complicado de explicar y en cierta manera el más poderoso es el polimorfismo. De manera simplificada, mediante el polimorfismo se definen funciones con el mismo nombre e interfaz en distintas clases de objetos, pero bajo implementaciones distintas. ¿Para qué sirve entonces el polimorfismo? El polimorfismo es útil para extender la funcionalidad existente en los objetos del sistema, a nuevos objetos aún desconocidos en ese momento. Es como definir un estándar de interfaces para los objetos la cual debe ser seguida por todos los existentes y nuevos. Haciendo una analogía, todo el tiempo aparecen nuevas aplicaciones de software que pueden ejecutarse en sistemas ya existentes. GUIA DE AUDITORIA REF SFL12 SIOO2 CH Auditoria Empresa: Auditextiles S.A.S Fecha:2010/11/25 ACTIVIDAD A SER PROCEDMIENTO HERRAMIENTA A OBSERVACIONES AEVALUADA DE AUDITORIA UTILIZAR Evaluar la Solicitar y revisar Lista de Seguridad Física y los planes y Verificación Lógica lineamientos establecidos para garantizar la seguridad física y lógica en la empresa Evaluar los Evaluar la solidez Lista de Sistemas de los Sistemas Verificación Orientados a Orientados a Objetos Objetos de uso en la empresa SFL12: EVALUAR LA SEGURIDAD FISICA Y LOGICA OBJETIVO: Solicitar y revisar los planes y lineamientos establecidos para garantizar la seguridad física y lógica en la empresa LISTA DE VERIFICACION ITEM A EVALUAR ¿La información de la empresa se encuentra siempre disponible para cumplir sus propósitos? ¿La información susceptible de robo, pérdida o daño se encuentra protegida y resguardada? ¿La empresa tiene conocimiento relacionado con la planeación de un esquema de seguridad eficiente que proteja los recursos informáticos de las actuales amenazas combinadas? ¿Se aplican barreras físicas y procedimientos de control, como medidas de prevención y contramedidas ante amenazas a los recursos e información confidencial? ¿En la empresa se han contemplado las amenazas ocasionadas por el hombre? ¿Se evalúan y controlan permanentemente la seguridad física de las instalaciones de cómputo y del edificio donde funciona la empresa? ¿Existen procedimientos y barreras que resguarden el acceso a los datos y sólo se permita acceder a ellos a las personas autorizadas para hacerlo? ¿Se asegura que se estén utilizando los datos, archivos y programas correctos en y por el procedimiento correcto? ¿Existen sistemas alternativos secundarios de transmisión de información entre diferentes puntos? ¿Los operadores pueden trabajar sin una supervisión minuciosa y no pueden modificar los programas ni los archivos que no correspondan? ¿La información transmitida es recibida por el destinatario al cual ha sido enviada Cumple No Cumple Observaciones y no a otro? SIOO2: EVALUAR LOS SISTEMAS ORIENTADOS A OBJETOS OBJETIVO: Evaluar la solidez de los Sistemas Orientados a Objetos de uso en la empresa LISTA DE VERIFICACION ITEM A EVALUAR ¿El software orientado a objetos aporta aspectos que mejoran la robustez de sus sistemas? ¿Consideran importante tratar el problema de la complejidad del software con el concepto de abstracción? ¿Sus sistemas orientados a objetos se encuentran divididos por componentes separados? ¿Se permiten cambios en el sistema de manera modular afectando lo mínimo posible el resto del sistema? ¿Sus sistemas se organizan como una colección de objetos discretos que contienen tanto estructuras de datos como un comportamiento? ¿Los sistemas reutilizan partes existentes de código? ¿El diseño de los sistemas se fundamenta en framework? ¿Sus sistemas tienen bajo acoplamiento y alta cohesión? ¿En los sistemas existe la separación de las propiedades externas de un objeto (interface), de los detalles de implementación internos del objeto? ¿Los sistemas constan de objetos que contienen estructuras similares, correspondiente a tipos de datos y funciones similares? Cumple No Cumple Observaciones